본문 바로가기

Machine Learning

BERTAdam 옵티마이저의 진실

BERT 모델의 적용사례를 찾다보면, 한번씩 발견할 수 있는 신기한 옵티마이저가 있습니다. 이름하여, BertAdam입니다. Adam인데, BERT 모델의 적용에 최적화된 Adam 옵티마이저로 알려져 있습니다. NLP 모델의 옵티마이저들의 옵션들을 고려하다보면, 한번쯤 성능 향상의 기대를 안고 사용해보고 싶어집니다. 

 

실제로 이 옵티마이저는 Google팀이 BERT(Devlin et al., 2019) 논문에서 실험할 때 사용했던 옵티마이저입니다. 비록 이전에 한번도 사용되지 않았으며, 검증이 완료되지 않은 상태였지만, BERT와 같이 유명한 논문에서 사용되면서 급속도로 확산되기 시작하였습니다. Huggingface와 같은 오픈 라이브러리에서 BERT 모델 학습과정에서 필연적으로 사용되기 시작하였으며, 타 NLP 논문에서도 적용되어 사용되어 왔습니다. 그럼, 기존의 Adam 옵티마이저와는 어떤 차이를 보이고 있을까요?

 

허깅페이스 깃허브 문서엔 BERTAdam 옵티마이저와 관련하여 다음과 같이 설명하고 있습니다.

BertAdam is a torch.optimizer adapted to be closer to the optimizer used in the TensorFlow implementation of Bert. The differences with PyTorch Adam optimizer are the following:
- BertAdam implements weight decay fix
- BertAdam doesn't compensate for bias as in the regular Adam optimizer.

텐서플로에서 Bert 모델의 적용을 위해 생성된 옵티마이저라고 설명하고 있으며, 기존 Adam 옵티마이저와 달리 Weight Decay 값이 고정되어 있으며, 편향을 보정(Bias Correction)하지 않는다는 특징을 가지고 있습니다. AdamW의 경우, Weight Dacay값을 온전히 적용받을 수 있도록 하는 고정하는 방식이 동일하게 적용되었기 때문에, AdamW에 bias correction 부분만 제외되었다고 보시면 될 것 같습니다. 

 

가중치 업데이트 식에서 보면, 사라진 Bias Correction 부분은 빨간색 글씨 부분인 아래와 같습니다.

 

 

그럼 실제로 정말 이 옵티마이저를 사용하면 효과가 있을까요? 좀만 더 내용을 찾아보니, 실제로 효과를 보이지 않았던 것으로 보입니다. Huggingface는 아래와 같이 기존에 라이브러리에서 기본으로 사용하던 BertAdam을 AdamW로 변경하였다고 공지하였습니다.  

 

 

또한, BERT 후속 논문들에서도 모델 학습과정에서의 Bias Correction의 중요성을 역설하고 있습니다.  'REVISITING FEW-SAMPLE BERT FINE-TUNING'(Zhang, 2020) 논문에선 BERT 모델에서의 Bias correction 적용 유무에 따른 실제 학습효과의 차이를 보여주고 있습니다. 

 

왼쪽 그래프인 박스플롯의 경우에는 적용 유무에 따른 4종류의 텍스트 데이터에 따른 Variance 차이를 보여주고 있습니다. 각 데이터에 대한 50번의 랜덤 시도를 진행해본 결과, 각 파인튜닝 결과에 대한 Variance는 Bertadam을 사용할 경우 매우 크다는 것을 확인할 수 있습니다. 

 

오른쪽 그래프는 적용 유무에 따른 스텝별 Train Loss 추이를 보여주고 있습니다. 그래프에서 보는 것처럼 Bias Correction을 적용할 경우 Train Loss가 더 빠르게 떨어져 수렴하고 있는 모습을 확인할 수 있습니다.  

 

결론적으로, 데이터수가 bias correction이 BERT 모델의 파인튜닝 과정에 중요한 역할을 하고 있음을 확인할 수 있습니다. 또한, 논문에 따르면 데이터가 10000개 이하인 경우, Bias Correction을 적용하지 않은 데이터에 대하여 학습에 치명적이라고 얘기하고 있습니다. 

 

위와 같은 사실들을 비춰볼 때, BERT 모델에서 안정적인 학습을 위해선 Bias Correction이 있는 AdamW를 사용하는 것이 효율적임을 알 수 있습니다. 저처럼 허깅페이스 라이브러리에서 조차 사라진 BertAdam 옵티마이저를 코드로 다시 재현하여 가져오는 우를 범하지 않기를 바랍니다. 

 

 

 

 

 

참고. Weight Dacay란?

weight decay를 고정하는 것은, 모델의 학습과정에서 발생하는 오버피팅을 방지하고 일반화하고자 적용하는 방식입니다. 따라서, 기존의 가중치 값에 (1-λ)를 곱해주어 기존의 가중치 값이 덜 반영되는 효과를 가져옵니다. 물론, 단순히 weight decay를 고정하는 것은 동일한 효과를 가져오지만, Adam의 경우 RMSprop 및 Momentum 등 다양한 기법이 함께 적용된 옵티마이저로써, 계산 초기에 적용했던 weight decay 가중치 값이 최종 가중치 계산과정에선 효과가 동일하게 적용되지 않습니다. 이를 방지하고자, BertAdam에선 최종 가중치 식에서 적용해줌으로 써, 이를 해결하고자 하였습니다. 관련된 내용은 아래 링크의 비버님의 블로그 게시글을 참고하시는게 좋을 것 같습니다.

 

[NLP] BertAdam optimizer 의 개념 & Adam 과의 차이점 정리!

안녕하세요. 비버입니다. 오늘은 BERT 모델을 공부하던 중 BERTAdam이라는 독특한(?), 본 적 없는(?) 옵티마이저(optimizer)를 접하게 되어서 이것에 대해 정리해보고자 글을 써보기로 했습니다. 아래 hu

bbdata.tistory.com

 

 

 

참고문헌

https://github.com/huggingface/transformers/issues/420

https://bbdata.tistory.com/17

https://github.com/huggingface/transformers/blob/694e2117f33d752ae89542e70b84533c52cb9142/README.md#optimizers

https://arxiv.org/abs/2006.05987