공부/딥러닝
딥러닝 5.1 학습 관련 기술들
Cow_Hacker
2020. 8. 19. 18:18
728x90
이번에는 저번 글에서 알아본 SGD의 단점을 보완한 방법 중 모멘텀에 대해 알아보겠다.
모멘텀은 운동량을 뜻하는 단어다.
그림 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는 모멘텀을 그래프화 한 것이다.
SGD와 비교하면 지그재그 정도가 덜한 것을 볼 수 있다.
728x90