제가 공부한 내용을 정리하는 글입니다. 제가 나중에 다시 보기 위해 작성하는 것이므로 본문은 편의상 반말로 작성했습니다. 잘못된 내용이 있다면 지적 부탁드립니다. 감사합니다.
Momentum
Momentum 은 Gradient descent(이하 GD) 기반의 optimization algorithm 이다. 수식으로 표현하면 아래와 같다.
L : loss function value
W : weights
η : learning rate
α : 가속도 같은 역할을 하는 hyper parameter, 0.9 등 1 이하의 값을 취함. 자세한 것은 아래에 설명.
v 는 일종의 가속도(혹은 속도) 같은 개념으로 생각하는 것이 이해에 더 도움이 될 것 같다. v 의 영향으로 인해 가중치가 감소하던 (혹은 증가하던) 방향으로 더 많이 변화하게 되는 것. 최초의 v 는 0으로 초기화 한다.
간단한 예를 이용하여 설명한다.
첫번째 스텝의 기울기가 5, 두번째 스텝의 기울기가 3인 경우 학습률 η = 0.1 일 때, 두번째 스텝에서 가중치는 -0.3 만큼 변화한다.
Momentum 을 적용한 경우는
일반적인 GD 보다 두번째 스텝에서 -0.45 만큼 가중치가 더 변하는 것을 알 수 있다. 이를 그래프로 간단하게 표현하면
GD 를 사용했다면 갔을 거리보다 Momentum 을 사용했을 때 이동하려던 방향으로 스텝을 더 멀리 뻗는다고 이해할 수 있다.(그래프는 구글에 y=x^2를 입력하여 간단하게 그렸으니 그래프의 숫자는 무시하고 형태만 본다.)
Momentum 은 아래 그림처럼 빗살무늬 모양 그릇에 공을 굴리면 움직이듯 가중치가 이동하게 된다.
AdaGrad
학습률이 너무 작으면 학습 시간이 너무 길고, 너무 크면 발산해서 학습이 제대로 이루어지지 않는다. 이런 문제를 AdaGrad 는 학습률 감소(learning rate decay) 를 통해 해결한다.
연산기호 ⊙ 는 element wise multiplecation 이다(한국말로는 행렬의 원소별 곱셈). h 에 이전 기울기의 제곱들이 누적되어 더해지게 되는데, parameter 를 업데이트 할때, 1/√h 를 통해 학습률을 조정하게 된다. 이를 통해 parameter 중 많이 움직인 element 의 학습률이 낮아지는 효과를 만든다. 즉, 학습률의 감소가 element 마다 다르게 적용됨을 의미한다.
AdaGrad 는 무한히 학습을 하다보면 어느 순간 h 가 너무 커져서 학습이 되지 않을 수 있는데, 이 문제는 RMSProp 에서 개선된다(RMSProp 은 다음 글에서 설명).