AdaBelief Optimizer(공식 깃헙 정리)

데이터 여행자·2021년 3월 24일
0

스터디

목록 보기
7/15
  • 이 글은 tensorflow 기준으로 작성되었습니다. PyTorch의 경우는 참고 문헌을 참고하세요.

설치 방법

TensorFlow >= 2.0 일 경우와 케라스의 경우는 아래의 버전으로 AdaBelief Optimizer를 설치한다.

pip install adabelief-tf==0.2.0

TensorFlow의 버전이 2.0 미만일 경우는 adabelief-tf=0.0.1을 설치한다.

Hyperparameter

AdaBelief Optimizer의 버전에 따라 hyperparameter 설정을 다르게 해 주어야 한다.

Versionepsilonweight-decouplerectify
adabelief-tf=0.0.11e-8Not supportedNot supported
adabelief-tf=0.2.01e-14Supoorteddefault:True

주의할 점: Hyperparameter는 Default로 설정하면 안 된다.

  • 간단한 Hyperparameter 조정

    • SGD > Adam : epsilon = 1e-7 in Tensorflow
    • SGD < Adam : epsilon = 1e-14 in Tensorflow
  • Adabelief Optimizer는 버전과 Task에 따라서 Hyperparameter를 다르게 설정해 주어야 한다.
    (아래의 표는 PyTorch에서의 하이퍼파라미터 기준이다. Tensorflow에서는 PyTorch보다 100배 더 크게 잡아야 한다. 예를 들어 PyTorch에서 eps=1e-16이라면 Tensorflow에서는 eps=1e-14이다. (이 Optimizer를 만든 사람은 Tensorflow에 익숙하지 않다고 함))

Tasklearning_ratebeta1beta2epsilonweight_decayweight_decouplerectifyfixed_decayamsgrad
Cifar1e-30.90.9991e-85e-4FalseFalseFalseFalse
ImageNet1e-30.90.9991e-81e-2TrueFalseFalseFalse
Object detection(PASCAL)1e-40.90.9991e-81e-4FalseFalseFalseFalse
LSTM-1layer1e-30.90.9991e-161.2e-6FalseFalseFalseFalse
LSTM 2,3 layer1e-20.90.9991e-121.2e-6.FalseFalseFalseFalse
GAN (small)2e-40.50.9991e-120True=False (decay=0)FalseFalseFalse
SN-GAN (large)2e-40.50.9991e-160True=False (decay=0)TrueFalseFalse
Transformer5e-40.90.9991e-161e-4TrueTrueFalseFalse
Reinforcement (Rainbow)1e-40.90.9991e-100.0True=False (decay=0)TrueFalseFalse
Reinforcement (HalfCheetah-v2)1e-30.90.9991e-120.0True=False (decay=0)TrueFalseFalse

Adam과의 Hyperparameter 비교

  • epsilon: Adam에서의 eps=x와 Adambelief에서의 eps=x*x는 비슷한 결과를 얻는다. 즉 Adam보다 1/2 정도 작은 hyperparameter를 사용해야 한다.

  • decoupled weight decay가 task에서 중요하면(AdamW가 Adam보다 성능이 낫다면) weight_decouple=True를 사용해야 한다.

    weight decay regularization = L2 regularization for standard SGD.
    L2 regularizaion을 사용하면 weight decay 효과를 볼 수 있다. 그러나 Adam에서는 그 효과가 적다. decoupled weight decay는 L2 regularization과 분리된 weight decay이다. decoupled weight decay를 사용하면 learning rate와 weight decay가 서로 독립적이어서 한 하이퍼파라미터를 고정하고 다른 하나만 바꿔도 좋은 성능을 얻을 수 있다.
    -참고: 논문리뷰 AdamW

  • "gradient threshold"는 0으로 나누는 결과를 가져오므로 사용하지 말 것! 대신 "gradient clip"을 사용해라.

  • learning rate schedule: 에포크 70, 80에서 decay되고 90에서 끝내면 좋은 결과가 나온다. default learning rate를 사용하면 결과가 좋지 않았다. 그러나 이 부분에 대해서는 많은 실험을 하지 않았다.

사용법

from adabelief_tf import AdaBeliefOptimizer
optimizer = AdaBeliefOptimizer(learning_rate=1e-3, epsilon=1e-14, rectify=False)

알고리즘(Adam vs Adabelief)

위의 연산은 모두 엘레멘트 별로(element-wise) 계산해준다. Adam과 Adabelief의 차이점은 파란색 부분이다. Adabelief는 Adam에서 Bias correction step을 지웠고, update되는 방향의 차이를 주었다. Adam에서는 update되는 방향이 mtvt\frac{m_t}{\sqrt v_{t}}(vtv_t: gt2g_t^2의 EMA(Exponential Moving Average)이지만 Adabelief에서는 mtst\frac{m_t}{\sqrt s_{t}}(sts_t: (gtmt)2(g_t-m_t)^2의 EMA)이다.

직관적으로 vtv_t는 관측값 gtg_t의 예측값이라고 할 수 있다. AdaBelief에서 관측값 gtg_tvtv_t에 가까우면 큰 step을 가지고, 관측값 gtg_tvtv_t에서 크게 벗어날수록 작은 step을 가진다.

사용 결과

SGD, Adam, AdaBound, RAdam, AdamW, Yogi, MSVAG, Fromage라는 8개의 Optimizer를 비교했을 때의 결과 비교이다. Adabelief의 성능이 제일 좋은 것을 볼 수 있다.

Image Recognition

LSTM

Transformer

0개의 댓글