| ์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | ||||
| 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| 11 | 12 | 13 | 14 | 15 | 16 | 17 |
| 18 | 19 | 20 | 21 | 22 | 23 | 24 |
| 25 | 26 | 27 | 28 | 29 | 30 | 31 |
- ํ
- ๋ฌด๊ฒฐ์ฑ
- ์ ์ฌ์์๋ชจ๋ธ
- ์๊ณ ๋ฆฌ์ฆ
- SQLDDL
- ํค ์ข ๋ฅ
- ์ฃผ์ฑ๋ถ ์ฐพ๊ธฐ
- Python
- DROPTABLE
- SQL
- Hyperlink Graphs
- ๋ฌด๊ฒฐ์ฑ์ ์ง๋ฉ์ปค๋์ฆ
- ๋ฌธ์์ด
- ์ธ๋๋ณ๊ฐ๋น์ง์ปฌ๋ ํฐ
- TDD
- ์ปจํ ์ด๋๊ฐ์ฒด
- latent factor
- sklearn
- knn_classify
- latent factor model
- RENAMETABLE
- CREATETABLE
- ํด๋ฆฐ์ฝ๋
- ๋ถ๊ฝ๋ฐ์ดํฐ์
- ํ์ด์ฌ
- Key ์ข ๋ฅ
- ๋ฌด๊ฒฐ์ฑ์ ์ง
- ์ฌ์ดํท๋ฐ
- ๋ฐฑ์ค
- ALTERTABLE
- Today
- Total
DonHurry
step46. Optimizer๋ก ์ํํ๋ ๋งค๊ฐ๋ณ์ ๊ฐฑ์ ๋ณธ๋ฌธ
step46. Optimizer๋ก ์ํํ๋ ๋งค๊ฐ๋ณ์ ๊ฐฑ์
_๋๋ 2023. 2. 25. 00:25๐ข ๋ณธ ํฌ์คํ ์ ๋ฐ๋ฐ๋ฅ๋ถํฐ ์์ํ๋ ๋ฅ๋ฌ๋3์ ๊ธฐ๋ฐ์ผ๋ก ์์ฑํ์์ต๋๋ค. ๋ฐฐ์ด ๋ด์ฉ์ ๊ธฐ๋กํ๊ณ , ๊ฐ์ธ์ ์ธ ๊ณต๋ถ๋ฅผ ์ํด ์์ฑํ๋ ํฌ์คํ ์ ๋๋ค. ์์ธํ ๋ด์ฉ์ ๊ต์ฌ ๊ตฌ๋งค๋ฅผ ๊ฐ๋ ฅ ์ถ์ฒ๋๋ฆฝ๋๋ค.

์ง๊ธ๊น์ง๋ ๋งค๊ฐ๋ณ์ ๊ฐฑ์ ์ ๊ฒฝ์ฌํ๊ฐ๋ฒ์ ํ์ฉํ์ต๋๋ค. ํ์ง๋ง ์ค์ ๋ชจ๋ธ ํ์ต์๋ ๋ ๋ค์ํ ์ต์ ํ ๊ธฐ๋ฒ์ด ์๊ณ , ์ฌ๋ฌ ๊ฐ์ง๋ฅผ ํ์ฉํ ์ ์์ด์ผ ํฉ๋๋ค. ๋ฐ๋ผ์ ์ด๋ฒ ๋จ๊ณ์์ ๊ฐฑ์ ํ๋ ์์ ์ ๋ชจ๋ํํ๊ฒ ์ต๋๋ค.
๋จผ์ ๋งค๊ฐ๋ณ์ ๊ฐฑ์ ์ ์ํ ๊ธฐ๋ฐ ํด๋์ค๋ฅผ ๋ง๋ จํฉ๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก target๊ณผ hooks๋ผ๋ ์ธ์คํด์ค ๋ณ์๋ฅผ ์ด๊ธฐํํฉ๋๋ค. target์ ๋งค๊ฐ๋ณ์๋ฅผ ๊ฐ๋ ํด๋์ค์ธ Model์ด๋ Layer๋ฅผ ์ ์ฅํฉ๋๋ค. ์ค์ ์ ์ผ๋ก ๋งค๊ฐ๋ณ์ ๊ฐฑ์ ์ update_one์์ ์คํํ๋๋ฐ, ์ด๋ ์์ ํด๋์ค์์ ์ฌ์ ์ํ๋๋ก ํฉ๋๋ค. hook์ ๊ฐ์ค์น ๊ฐ์(Weight Decay) ํน์ ๊ธฐ์ธ๊ธฐ ํด๋ฆฌํ(Gradient Clipping) ๊ฐ์ ๊ธฐ๋ฒ์ ํ์ฉํ ๋ ์ฌ์ฉํฉ๋๋ค.
class Optimizer:
def __init__(self):
self.target = None
self.hooks = []
def setup(self, target):
self.target = target
return self
def update(self):
params = [p for p in self.target.params() if p.grad is not None]
# ์ ์ฒ๋ฆฌ(์ต์
)
for f in self.hooks:
f(params)
# ๋งค๊ฐ๋ณ์ ๊ฐฑ์
for param in params:
self.update_one(param)
def update_one(self, param):
raise NotImplementedError()
def add_hook(self, f):
self.hooks.append(f)
์ด์ Optimizer ํด๋์ค๋ฅผ ์์ํ์ฌ SGD ํด๋์ค๋ฅผ ๊ตฌํํด๋ณด๊ฒ ์ต๋๋ค. SGD๋ ํ๋ฅ ์ ๊ฒฝ์ฌํ๊ฐ๋ฒ(Stochastic Gradient Descent)์ ์ฝ์์ ๋๋ค. ์ฌ๊ธฐ์ ํ๋ฅ ์ ์ด๋ ๋์ ๋ฐ์ดํฐ ์ค์์ ๋ฌด์์๋ก ์ ๋ณํ ๋ฐ์ดํฐ์ ๋ํด ๊ฒฝ์ฌํ๊ฐ๋ฒ์ ์ํํ๋ ๊ฒ์ ๋ปํฉ๋๋ค.
class SGD(Optimizer):
def __init__(self, lr=0.01):
super().__init__()
self.lr = lr
def update_one(self, param):
param.data -= self.lr * param.grad.data
์ด์ ์ด์ ๋จ๊ณ์์ ํ์๋ ๋ฌธ์ ๋ฅผ ๋ค์ ํ์ด๋ณด๊ฒ ์ต๋๋ค. MLP ํด๋์ค๋ฅผ ํ์ฉํ์ฌ ๋ชจ๋ธ์ ์์ฑํ๊ณ , SGD ํด๋์ค๋ก ๋งค๊ฐ๋ณ์๋ฅผ ๊ฐฑ์ ํฉ๋๋ค. ์ด์ ๋ณด๋ค ํจ์ฌ ๊น๋ํด์ก์ต๋๋ค.
import numpy as np
from dezero import Variable
from dezero import optimizers
import dezero.functions as F
from dezero.models import MLP
np.random.seed(0)
x = np.random.rand(100, 1)
y = np.sin(2 * np.pi * x) + np.random.rand(100, 1)
lr = 0.2
max_iter = 10000
hidden_size = 10
model = MLP((hidden_size, 1))
optimizer = optimizers.SGD(lr).setup(model)
for i in range(max_iter):
y_pred = model(x)
loss = F.mean_squared_error(y, y_pred)
model.cleargrads()
loss.backward()
optimizer.update()
if i % 1000 == 0:
print(loss)
SGD ์ด์ธ์ ์ถ๊ฐ์ ์ธ ์ต์ ํ ๊ธฐ๋ฒ์ ์๋ ๊นํ๋ธ ๋งํฌ๋ฅผ ์ฐธ๊ณ ํด์ฃผ์ธ์.
GitHub - WegraLee/deep-learning-from-scratch-3: ใ๋ฐ๋ฐ๋ฅ๋ถํฐ ์์ํ๋ ๋ฅ๋ฌ๋ โธใ(ํ๋น๋ฏธ๋์ด, 2020)
ใ๋ฐ๋ฐ๋ฅ๋ถํฐ ์์ํ๋ ๋ฅ๋ฌ๋ โธใ(ํ๋น๋ฏธ๋์ด, 2020). Contribute to WegraLee/deep-learning-from-scratch-3 development by creating an account on GitHub.
github.com
'DeZero > ๐ป์ 4๊ณ ์ง' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| step48. ๋ค์ค ํด๋์ค ๋ถ๋ฅ (0) | 2023.02.28 |
|---|---|
| step47. ์ํํธ๋งฅ์ค ํจ์์ ๊ต์ฐจ ์ํธ๋กํผ ์ค์ฐจ (0) | 2023.02.27 |
| step45. ๊ณ์ธต์ ๋ชจ์๋๋ ๊ณ์ธต (0) | 2023.02.24 |
| step44. ๋งค๊ฐ๋ณ์๋ฅผ ๋ชจ์๋๋ ๊ณ์ธต (0) | 2023.02.23 |
| step 43. ์ ๊ฒฝ๋ง (0) | 2023.02.19 |