공부/딥러닝

딥러닝 5.1 학습 관련 기술들

Cow_Hacker 2020. 8. 19. 18:18
728x90

이번에는 저번 글에서 알아본 SGD의 단점을 보완한 방법 중 모멘텀에 대해 알아보겠다.

 

모멘텀은 운동량을 뜻하는 단어다.

 

 

 

 

그림1

그림 1을 보면 두 개의 수식이 있는데

첫 번째 수식은 모멘텀을 수식화 한 것이고

두 번째 수식은 간소화한 수식이다.

 

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

참고로 이 코드는 밑에 출처를 참고했다.

 

출처 : https://github.com/WegraLee/deep-learning-from-scratch

 

WegraLee/deep-learning-from-scratch

『밑바닥부터 시작하는 딥러닝』(한빛미디어, 2017). Contribute to WegraLee/deep-learning-from-scratch development by creating an account on GitHub.

github.com

 

 

모멘텀 파이썬 코드

import numpy as np

class Momentum:

    """모멘텀 SGD"""

    def __init__(self, lr=0.01, momentum=0.9):
        self.lr = lr
        self.momentum = momentum
        self.v = None
        
    def update(self, params, grads):
        if self.v is None:
            self.v = {}
            for key, val in params.items():                                
                self.v[key] = np.zeros_like(val)
                
        for key in params.keys():
            self.v[key] = self.momentum*self.v[key] - self.lr*grads[key] 
            params[key] += self.v[key]

여기서 v는 물체의 속도다.

v는 초기화 때는 아무 값도 담지 않고, 대신 update함수가 처음 호출될 때 매개변수와 같은 구조의 데이터를 딕셔너리 변수로 저장한다.

그림2

그림 2는 모멘텀을 그래프화 한 것이다.

SGD와 비교하면 지그재그 정도가 덜한 것을 볼 수 있다.

 

728x90