수학/딥러닝 이론

[딥러닝] 매개변수 갱신 - 모멘텀(Momentum) 기법

AI 꿈나무 2020. 10. 2. 19:46
반응형

사이토고키의 <밑바닥부터 시작하는 딥러닝>을 공부하고 정리해보았습니다.

 


모멘텀 - Momentum

 모멘텀은 '운동량'을 뜻하는 단어로, 물리와 관계가 있습니다. 모멘텀 기법은 수식으로 다음과 같이 쓸 수 있습니다.

 

 

 SGD와 비교해보았을 때 v라는 변수가 새로 나옵니다. 이는 물리에서 말하는 속도에 해당합니다.

 기울기 방향으로 힘을 받아 물체가 가속된다는 물리 법칙을 나타냅니다.

 

모멘텀 구현 코드

class Momentum:
    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]

 

 모멘텀에 의한 최적화 갱신 경로를 살펴보겠습니다.

 

 

 모멘텀의 갱신 경로는 공이 그릇 바닥을 구르듯 움직입니다.

 SGD와 비교하면 '지그재그 정도'가 덜합니다.

 

 이는 x축의 힘은 아주 작지만 방향은 변하지 않아서 한 방향으로 일정하게 가속하게 가속하기 때문입니다.

 거꾸로 y축의 힘은 크지만 위아래로 번갈아 받아서 상충하여 y축 방향의 속도는 안정적이지 않습니다.

 

 전체적으로는 SGD보다 x축 방향으로 빠르게 다가가 지그재그 움직임이 줄어듭니다.

 

반응형