AdaGrad
둘러보기로 가기
검색하러 가기
1 개요[편집 | 원본 편집]
신경망에서 학습률값이 너무 작으면 학습시간이 너무 길어지고 고일 수 있으며, 너무 크면 발산해서 학습이 제대로 이루어지지 않는다. 때문에 처음엔 크게, 점차 작게 줄여가는 전략이 필요한데, 매개변수마다 다르게 학습률을 적용하여 모든 매개변수마다 일정한 크기로 감소하게 꾀한 방법이다.
종류 | 경사하강법 | AdaGrad |
---|---|---|
갱신방법 | , (은 행렬의 원소별 곱샘을 의미한다.) | |
1.1 구현[편집 | 원본 편집]
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으로 나눠지는 사태를 방지한다.