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으로 나눠지는 사태를 방지한다.