neural network 학습을 빠르게 하기 위한 다양한 최적화 알고리즘들이 있다
- Gradient descent with momentum
대부분 그냥 gradient descent를 사용한 것 보다 좋은 성능을 가진다고 한다
이 방법을 사용하기 위해서는 exponentially weigthed averages (EMA)에 대해 먼저 알아야 한다
EMA는 평균을 구할 때 모두 같은 가중치를 주어 구하는 것이 아니라 중요한 데이터는 큰 가중치, 중요하지 않은 데이터는 작은 가중치를 주어 더하는 방법이다
식으로는 θ가 데이터일때 vt=βvt−1+(1−β)θt와 같이 표현할 수 있다
β , 1−β 이런 모양처럼 가중치의 합은 1이 되어야 한다
또한 이 식은 vt가 11−β 데이터의 평균에 수렴한다고 볼 수 있다
만약 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의 값이 너무 작게 나오게 된다
이를 보정하기 위해 vt→vt1−β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가 작다면 1√SdW는 커진다
따라서 update 과정에서 W:=W−αdW√SdW처럼 진행한다면 SdW를 사용하지 않았을 때보다 가파르게 이동한다
db가 크다면 1√Sdb는 커진다
따라서 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−βt1과 ScorrecteddW=SdW1−βt2,Scorrecteddb=Sdb1−βt2 로 나타낸 값을 사용할 것이다
update는
W:=W−αVcorrecteddW√ScorrecteddW+ϵ
b:=b−αVcorrecteddb√Scorrecteddb+ϵ
와 같이 한다
하이퍼 파라미터가 많이 늘었는데 보통 β1은 0.9, β2는 0.99, ϵ은 10−8을 사용한다고 한다
- 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, α=k√epoch 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 |