10. 옵티마이저
Last updated
Last updated
가중치 초기화때, 학습을 어디서 시작할 것인가?
에 대해서 알아보았다. 이번 옵티마이저를 통해서는, 어떻게 내려갈 것인가?
에 대해서 알아보자.
어떻게 내려 갈 것인가?
어디서 시작할 것인가?
우리가 배워온 Neural Network를 학습시키는 방법은 Gradient Descent를 이용해서 네트워크안의 파라미터를 갱신시켜나가는 방법이었다.
이는 파라미터 $\theta$에 대해 다음과같은 식으로 나타낼 수 있다.
: 학습률 ( learning rate )
: 에서의 미분값
아래 그림과 같이, 이런 학습을 진행할 때, 이때까지는 데이터셋을 구축했으면, 그 데이터 전체를 넣어서 학습을 시켰다.
시간이 너무 많이 걸린다.
→ 데이터를 여러 조각으로 나눈다.
데이터를 여러 부분들로 나눠서, 여러번 넣어본다.
데이터의 수가 작으므로, 기존 Gradient Descent방식에 비해 훨씬 빠르게 계산한다.
local minima에 빠질 위험이 적을 수도 있다.
위 그림과 같이 학습 초기에는 가중치를 더 크게, 학습이 끝날 때 쯤에는 가중치를 더 작게 업데이트하게 된다.
Adagrad는 이를 학습률 (learning rate)에도 적용시켜 학습이 진행 될 수록, 학습률 자체를 떨어뜨리는 방법이다.
변화율이 계속 크게 되면, 학습률이 빠르게 0으로 수렴하여 학습이 끝나버리는 경우가 발생할 수 있다.
더 과거의 데이터일수록, 현재의 경향을 표현하는데 적은 영향을 미친다
기온에 대한 그래프
온도자체는 너무 자주 변하는 데이터이다. → 추이를 알고싶다.
현재 데이터 근처의 몇개만 평균을 내서 추이를 계산하면 되지 않을까?
오래된 데이터와, 최신의 데이터의 영향력이 비슷하다 → 추이를 제대로 표현할 수 없다.
시간이 지남에 따라 데이터의 영향력이 줄어들게 하자!
위와같이 점점 과거의 데이터가 현재 추이에 덜 영향을 끼치게 된다는 것을 알 수 있다.
Adagrad의 문제점을 해결하기 위한 방식.
$g_t$를 계산하는 식에 지수가중평균을 적용하였다.
Adagrad에서는 $g_t$가 계속해서 증가하기 때문에, 너무 빨리 학습률이 감소하는 단점이 있었지만,
지수가중평균을 적용하므로서, 과거의 데이터를 덜 반영하게 되어, 학습률이 덜 빠르게 줄일 수 있게 되었다.
기존의 Gradient Descent는 local minima에 빠지면 나오기 힘든 방식이었다. 이를 해결하기 위해서 Momentum이라는 방식이 고안되었다.
비유를 하자면, 기존 Gradient Descent는 계단을 한칸한칸 내려가는 것이고, Momentum은 경사면에서 공을 굴리는 것이다.
Gradient Descent
Momentum
Momentum의 구현은 기존의 업데이트되는 가중치에 지수가중 평균을 적용하여 구현하게 된다.
이를 통해서, local minima에 빠지지 않고 빠져나갈 수 있게 해준다.
Adam은 Momentum과, RMSprop두개 모두를 적용시킨 옵티마이저이다.
학습률을 서서히 떨어지게 하며, 이전 가중치 업데이트값을 현재 업데이트에 반영할 수 있게 된다.
가 너무 커지면, 학습률이 0에 수렴하게 된다. 이를 방지하고자, 아주작은값 을 넣어 학습률이 0가되는것을 방지한다.
의 제곱을 넣어주는 이유는, 큰값에는 더 큰 가중치를 두기 위함이다. 제곱을 하게 되면, 큰값은 더 크게, 작은 값은 더 작게 된다.
이를 이용해서, 의 값이 클때는 더 많이 학습률을 줄이고, 의 값이 작을때는 더 적게 학습률을 줄여서 조절할 수 있다.
: 0~1사이의 값
에 대해서 라고 하고, 위의 식을 적용해 보면,