1,613 바이트 추가됨
, 2021년 9월 13일 (월) 17:44
== 개요 ==
신경망에서 학습률값이 너무 작으면 학습시간이 너무 길어지고 고일 수 있으며, 너무 크면 발산해서 학습이 제대로 이루어지지 않는다. 때문에 처음엔 크게, 점차 작게 줄여가는 전략이 필요한데, 매개변수마다 다르게 학습률을 적용하여 모든 매개변수마다 일정한 크기로 감소하게 꾀한 방법이다.
{| class="wikitable"
!종류
!경사하강법
!AdaGrad
|-
|갱신방법
|<math>W = W - \eta \frac{\partial E(W)}{\partial W}</math>
|<math>W = W - \eta \frac{1}{\sqrt{h}}\frac{\partial E(W)}{\partial W}</math>, <math>h = h +\frac{\partial E(W)}{\partial W} \odot \frac{\partial E(W)}{\partial W}</math>(<math>\odot</math>은 행렬의 원소별 곱샘을 의미한다.)
|-
|
|
|
|}
=== 구현 ===
<syntaxhighlight lang="python">
class AdaGrad:
def __init__(self, lr=0.01): # 기본 학습률은 0.01로.
self.lr = lr
self.h = None
def update(self, params, grads): # 각 파라미터를 [W_1] 등의 키에 담아 넣는다.
if self.h == None:
self.h = {}
for key, val in params.items(): # 각 파라미터별 학습
self.h[key] = np.zeros_like(val) # 파라미터와 동일한 크기의 0으로 채워진 배열을 만든다.
for key in params.keys():
self.h[key] += grads[key] * grads[key]
params[key] -= self.lr * grads[key] / (np.sqrt(self.h[key]) + 1e-7) # 아주 작은 수를 더해 0으로 나눠지는 사태를 방지한다.
</syntaxhighlight>
[[분류:딥러닝 훈련기법]]