Processing math: 100%
본문 바로가기

AI

Optimization Algorithms

neural network 학습을 빠르게 하기 위한 다양한 최적화 알고리즘들이 있다

 

- Gradient descent with momentum

 

대부분 그냥 gradient descent를 사용한 것 보다 좋은 성능을 가진다고 한다

이 방법을 사용하기 위해서는 exponentially weigthed averages (EMA)에 대해 먼저 알아야 한다

 

EMA는 평균을 구할 때 모두 같은 가중치를 주어 구하는 것이 아니라 중요한 데이터는 큰 가중치, 중요하지 않은 데이터는 작은 가중치를 주어 더하는 방법이다

 

식으로는 θ가 데이터일때 vt=βvt1+(1β)θt와 같이 표현할 수 있다

β , 1β 이런 모양처럼 가중치의 합은 1이 되어야 한다

또한 이 식은 vt11β 데이터의 평균에 수렴한다고 볼 수 있다

 

만약 beta가 0.9라면 

v100=0.9v99+0.1θ100 , v99=0.9v98+0.1θ99 이런식으로 식을 만들 수 있다

결합하여 v100=0.1θ100+0.9(0.1θ99+0.9(0.1θ98+0.9v97)) 가 된다

v100=0.1θ100+0.1×0.9θ99+0.1×(0.9)2θ98+0.1×(0.9)3θ97+... 처럼 나타내어보면 exponentially하게 beta가 곱해지는 것을 알 수 있다 

이렇게 식을 전개해두었을 때도 등비수열의 합 공식을 사용하여 확인해보면 모든 가중치를 더하면 1이 된다

 

식으로 구현 할 때는 실제로 v값을 다 저장하지는 않고 예전것은 버려가면서 구현한다

 

EMA를 사용할 때 v0을 0으로 지정해둔다면 초반에는 v의 값이 너무 작게 나오게 된다

이를 보정하기 위해 vtvt1βt로 사용하는 bias correction 방법이 있다

βt가 커지면 0으로 수렴하면서 점점 영향을 덜 주고 초반에는 vt를 키워주는 효과가 있다

 

아무튼 이러한 EMA를 사용하는 것이 gradient descent with momentum이다

dW를 사용하는 것이 아니라 VdW=βVdW+(1β)dW

db를 사용하는 것이 아니라 Vdb=βVdb+(1β)db를 사용한다

update 과정은 W:=WαVdW,b:=bαVdb 처럼 진행한다

 

이렇게 모멘텀을 사용하면 gradient 값을 smoothing 해주어서 mini batch 를 사용할 때 처럼 gradient가 노이지 할 때 좋다

 

실제로 구현할 때는 beta라는 하이퍼파라미터가 하나 늘었지만 대부분 0.9로 쓰는 경향이 있다

 

- Adagrad & RMSProp

 

root mean sqaure propagation

이런식으로 생긴 loss function이 있다면 w방향으로는 빠르게 이동, b방향으로는 느리게 이동하는 것이 진동을 해결할 수 있어 좋을 것이다

AdaGrad를 사용하면 dW,db을 계속 기울기값을 제곱하여 더해준 값으로 나누어주면서 학습률을 낮춘다

하지만 AdaGrad를 사용한다면 0에 수렴할 수 있으므로 여기에 EMA를 적용한 RMSProp을 사용한다

 

SdW=βSdW+(1β)dW2, Sdb=βSdb+(1β)db2 값을 이용한다

dW가 작다면 1SdW는 커진다

따라서 update 과정에서 W:=WαdWSdW처럼 진행한다면 SdW를 사용하지 않았을 때보다 가파르게 이동한다

db가 크다면 1Sdb는 커진다

따라서 update 과정에서 완만하게 b가 이동한다

 

이렇게 RMSProp을 사용하면 노이즈도 잡을 수 있고 학습 속도도 빨라진다

 

- Adam optimizer

 

제일 많이 쓰는 Adaptive moment estimation optimizer

momentum과 RMSProp을 합쳐서 쓰는 거라고 생각하면 된다

 

VdW=β1VdW+(1β1)dW,Vdb=β1Vdb+(1β1)db momentum에서 나온 β1

SdW=β2SdW+(1β2)dW2,Sdb=β2Sdb+(1β2)db2 RMSProp에서 나온 β2를 전부 사용한다

 

여기에 bias correction도 적용하여 VcorrecteddW=VdW1βt1,Vcorrecteddb=Vdb1βt1ScorrecteddW=SdW1βt2,Scorrecteddb=Sdb1βt2 로 나타낸 값을 사용할 것이다

 

update는

W:=WαVcorrecteddWScorrecteddW+ϵ

b:=bαVcorrecteddbScorrecteddb+ϵ

와 같이 한다

 

하이퍼 파라미터가 많이 늘었는데 보통 β1은 0.9, β2는 0.99, ϵ108을 사용한다고 한다

 

- Learning rate decay

 

마지막으로 볼 learing rate decay

일반적으로 학습 초반에는 Loss 가 크니까 learning rate를 크게, 학습 후반에는 작게 하는 것이 좋다

따라서 epoch마다 learing rate를 줄여주는 방법이다

 

α=11+decay rate×epoch numα0

initial 값인 α0을 점점 줄여주는데 이때 initial 값과 decay rate는 따로 결정해주어야 한다

 

꼭 이런 모양이 아니더라도 

α=0.95epoch numα0, α=kepoch numα0와 같이 점점 줄어들기만 하면 된다

discrete하게 10 epoch동안 loss 변화가 없으면 낮추기 이런 방법도 가능하다

 

ITE4053 : Deep Lerarning ( Hanyang University )

'AI' 카테고리의 다른 글

RNN  (0) 2021.06.01
Convolution & CNN  (0) 2021.05.31
Batch Normalization  (0) 2021.04.18
Regularization 4 - Early Stopping  (0) 2021.04.18
Regularization 3 - Data Augmentation  (0) 2021.04.18