Story of CowHacker

딥러닝 5.2 학습 관련 기술들 본문

공부/딥러닝

딥러닝 5.2 학습 관련 기술들

Cow_Hacker 2020. 8. 20. 09:53
728x90

이번에는 저번에 알아본 모멘텀 보다 더 발전한

AdaGrad에 대해 알아보겠다.

 

AdaGrad란?

개별 매개변수에 적응적으로 학습률을 조정하면서 학습을 진행한다.

 

그림1

그림 1은 AdaGrad를 수식으로 표현한 것이다.

W는 갱신할 가중치 매개변수다.

∂L/∂W은 W에 대한 손실 함수의 기울기다.

η는 학습률을 뜻한다.

h는 기존 기울기 값을 제곱하여 계속 더해준다.

매개변수를 갱신할 때 1/루트 h을 곱해 학습률을 조정한다.

 

이제 이것을 파이썬 코드로 구현해보겠다.

 

 

 

AdaGrad 코드

import numpy as np

class AdaGrad:

    """AdaGrad"""

    def __init__(self, lr=0.01):
        self.lr = lr
        self.h = None
        
    def update(self, params, grads):
        if self.h is None:
            self.h = {}
            for key, val in params.items():
                self.h[key] = np.zeros_like(val)
            
        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)

저기서 1e-7이라는 것은 self.h [key]에 0이 담겨 있다 해도 0으로 나누는 사태를 막아주는 역할을 한다.

 

 

 

이제 그래프로 표현해 보겠다.

 

그림2

 

최솟값을 향해 효율적으로 움직이는 것을 볼 수 있다.

y축 방향은 기울기가 커서 처음에는 크게 움직이지만, 그 큰 움직임에 비례해서 갱신 정도도 큰 폭으로 작아지도록 조정된 걸 볼 수 있다.

 

728x90

'공부 > 딥러닝' 카테고리의 다른 글

딥러닝 5.3 학습 관련 기술들  (0) 2020.08.20
딥러닝 5.1 학습 관련 기술들  (0) 2020.08.19
딥러닝 5.0 학습 관련 기술들  (0) 2020.08.19
딥러닝 4.5 오차역전파법  (0) 2020.08.19
딥러닝 4.4 오차역전파법  (0) 2020.08.19
Comments