AdaGrad

Pywiki
둘러보기로 가기 검색하러 가기

1 개요[편집 | 원본 편집]

신경망에서 학습률값이 너무 작으면 학습시간이 너무 길어지고 고일 수 있으며, 너무 크면 발산해서 학습이 제대로 이루어지지 않는다. 때문에 처음엔 크게, 점차 작게 줄여가는 전략이 필요한데, 매개변수마다 다르게 학습률을 적용하여 모든 매개변수마다 일정한 크기로 감소하게 꾀한 방법이다.

종류 경사하강법 AdaGrad
갱신방법 구문 분석 실패 (MathML을 사용하되 미지원 시 SVG나 PNG 사용 (최신 브라우저나 접근성 도구에 권장): "https://wikimedia.org/api/rest_v1/" 서버에서 잘못된 응답 ('Math extension cannot connect to Restbase.'):): {\displaystyle W = W - \eta \frac{1}{\sqrt{h}}\frac{\partial E(W)}{\partial W}} , (은 행렬의 원소별 곱샘을 의미한다.)

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