Story of CowHacker

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

공부/딥러닝

딥러닝 5.3 학습 관련 기술들

Cow_Hacker 2020. 8. 20. 13:32
728x90

앞에서 알아본 모멘텀, AdaGrad를 합진 기술의 이름은 Adam이다.

 

이 Adam을 먼저 파이썬으로 구현해볼 것이다.

 

 

 

 

 

Adam 코드

 

class Adam:

    """Adam (http://arxiv.org/abs/1412.6980v8)"""

    def __init__(self, lr=0.001, beta1=0.9, beta2=0.999):
        self.lr = lr
        self.beta1 = beta1
        self.beta2 = beta2
        self.iter = 0
        self.m = None
        self.v = None
        
    def update(self, params, grads):
        if self.m is None:
            self.m, self.v = {}, {}
            for key, val in params.items():
                self.m[key] = np.zeros_like(val)
                self.v[key] = np.zeros_like(val)
        
        self.iter += 1
        lr_t  = self.lr * np.sqrt(1.0 - self.beta2**self.iter) / (1.0 - self.beta1**self.iter)         
        
        for key in params.keys():
            self.m[key] += (1 - self.beta1) * (grads[key] - self.m[key])
            self.v[key] += (1 - self.beta2) * (grads[key]**2 - self.v[key])
            
            params[key] -= lr_t * self.m[key] / (np.sqrt(self.v[key]) + 1e-7)

 

 

 

 

그림1

 

자 이제 우리는 4개의 매개변수 갱신 방법을 알아보았다.

 

 

 

 

그림2

 

SGD, 모멘텀, AdaGrad, Adam 중 어느 것을 사용해야 하는지는 없다.

각자 장단점이 존재하기 때문에 그렇다.

 

지금 많은 연구에서 SGD를 사용하고 있다.

 

 

 

 

그림3

다음은 학습의 반복 횟수를 2000으로 잡아두고 실험한 그래프다.

각 층이 100개의 뉴런으로 구성된 5층 신경망에서 ReLU를 활성화 함수로 사용했다.

 

SGD의 학습 진도가 가장 느린 걸 볼 수 있다.

나머지 세 기법의 진도는 비슷한데, 그중에서도 AdaGrad가 더 빠른 걸 볼 수 있다.

 

 

 

728x90

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

딥러닝 5.2 학습 관련 기술들  (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