티스토리 뷰
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에 가까운 값으로 평균이 만들어지게된다.
- 반면에 수평방향에서 모든 도함수는 오른쪽을 가르키고 있기 때문에 수평방향의 평균은 꽤 큰 값을 가지게 된다.
- 결과적으로 수직방향을 훨씬 진동이 적어지고 수평방향에서는 더 빠르게 움직일 수 있다.
그 결과 빠르게 최솟값을 향해 내려갈 수 있게된다.
이것이 모멘텀을 이용한 경사하강법이다.
경사하강법이 모든 이전 단계를 독립적으로 취하는 대신에 이 알고리즘은 가속을 주고 모멘텀 을 제공할 수 있게 해주는 것이다.
- 모멘텀 : 물리학에서, 물체가 한 방향으로 지속적으로 변동하려는 경향. 동력, 추진력, 여세 등등으로 이해할 수 있다.
보라색은 Momentum을, 하늘색은 일반적인 경사하강법을 시각화한 것 (By. Liliy Jiang. Thank You!!!)
이름이 왜 이렇게 지어졌는지 이제 알겠다.
시각화에서도 보이지만, 모멘텀은 로컬 옵티마에 걸려도 빠져나올 기회가 있다.
구현 디테일 TIP
- β가 0.9일 때 매우 잘 작동한다.
- 앞서 말했듯이 편향보정은 초반 10번정도의 반복 뒤에는 보정효과가 없기 때문에 경사하강법이나 모멘텀을 구현할때 쓰는 사람 거의 없음.
Vdw = 0
으로 초기화 하는 것은dw
와 같이 차원이 0으로 이루어진 행렬이다.
'ML' 카테고리의 다른 글
6. Adam (0) | 2023.07.24 |
---|---|
5. RMSProp(Root Mean Square Prop) (0) | 2023.07.24 |
3-2. 편향 보정 (Bias Correction) (0) | 2023.07.24 |
3-1. 지수가중평균 (Exponentially weighted average) (0) | 2023.07.24 |
2. 미니배치 경사하강법 (Mini-batch Gradient Descent) (0) | 2023.07.24 |