티스토리 뷰

반응형

Gradient Descent with Momentum (모멘텀 알고리즘 혹은 모멘텀이 있는 경사하강법)

자, 지수가중평균편향보정을 알았으니 일반적인 경사하강법을 빠르게 동작하게할 수 있는 모멘텀 알고리즘을 배우자.

이것은 경사에 대해서 지수가중평균을 계산하고 그 값으로 가중치를 업데이트하는 것이다.



그게 뭔데?

뭔지 알아보기 위해서 일반적인 경사하강법과 비교해보자.

일반적인 경사하강법 혹은 미니배치경사하강법으로 비용함수를 최적화한다고 생각해보자. 비용함수의 등고선이 있으면 어떠한 최솟값을 향해 나아갈 것이다. 그 모양은 다음과 같다.




학습률이 많은 단계를 거치게되면 최솟값으로 나아가면서 천천히 진동하는데, 이것은 다음과 같은 단점을 만든다.

  • 속도를 느리게 만들고 더 큰 학습률을 사용하는 것을 막는다.
  • 오버슈팅할 가능성도 있다.
  • 수직축에서는 진동을 막기위해 학습이 느리게 일어나길 바라지만 수평축에서는 더 빠른 학습이 필요하다.




경사하강법은 진동도 너무 많고 학습률이 높을 수록 뭔가 정신을 못 차린다.

그냥 쭉 최솟값으로 달려버리면 좋을 것 같은데 가능할까? 세상엔 똑똑한 사람들이 많다. 그들은 물리에서 아이디어를 얻어서 기울기가 0인 곳으로 천천히 내려가는 것 대신, 가속을 주어 최소인 곳을 찾게된다.

어떻게 해야할지 알아보자.

  • 각각의 반복(t)에서 보편적인 dw와 db를 계산
  • 지수 가중 평균법 과 비슷한 식을 써서 이동평균 을 w에 대한 도함수로 계산한다.
    # 지수 가중 평균법 : Vt = β*Vt-1 + (1-β)*Θt
    
    

Vdw = βVdw + (1-β)dw
Vdb = βVdb + (1-β)db


그리고 가중치를 이렇게 업데이트해준다.

α = learning_rate

w = w - αVdw
b = b - α
Vdb

```

이렇게 계산하면

  • 각각의 도함수는 경사를 내려갈 때 가속을 부여
  • β의 값은 1보다 조금 작기 때문에 제한없이 빨라지는 것을 막음
  • 지난번에 계산한 몇가지 도함수의 경사 평균을 구해서 수직방향의 진동이 0에 가까운 값으로 평균이 만들어지게된다.
  • 반면에 수평방향에서 모든 도함수는 오른쪽을 가르키고 있기 때문에 수평방향의 평균은 꽤 큰 값을 가지게 된다.
  • 결과적으로 수직방향을 훨씬 진동이 적어지고 수평방향에서는 더 빠르게 움직일 수 있다.

그 결과 빠르게 최솟값을 향해 내려갈 수 있게된다.

이것이 모멘텀을 이용한 경사하강법이다.

경사하강법이 모든 이전 단계를 독립적으로 취하는 대신에 이 알고리즘은 가속을 주고 모멘텀 을 제공할 수 있게 해주는 것이다.

  • 모멘텀 : 물리학에서, 물체가 한 방향으로 지속적으로 변동하려는 경향. 동력, 추진력, 여세 등등으로 이해할 수 있다.



By Liliy Jiang



보라색은 Momentum을, 하늘색은 일반적인 경사하강법을 시각화한 것 (By. Liliy Jiang. Thank You!!!)


이름이 왜 이렇게 지어졌는지 이제 알겠다.

시각화에서도 보이지만, 모멘텀은 로컬 옵티마에 걸려도 빠져나올 기회가 있다.



구현 디테일 TIP

  • β가 0.9일 때 매우 잘 작동한다.
  • 앞서 말했듯이 편향보정은 초반 10번정도의 반복 뒤에는 보정효과가 없기 때문에 경사하강법이나 모멘텀을 구현할때 쓰는 사람 거의 없음.
  • Vdw = 0 으로 초기화 하는 것은 dw 와 같이 차원이 0으로 이루어진 행렬이다.



반응형
댓글
반응형
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함