[논문리뷰] 내 마음대로 NFNet 논문 리뷰
논문 링크 : https://arxiv.org/abs/2102.06171
안녕하세요? 이번에 리뷰할 논문은 NFNet입니다. Deepmind에서 올해(2021) 2월 발표한 따끈따끈한 논문이에요. 최근 가장 좋은 SOTA를 보이고 있는 모델로, 최근 캐글 상위 솔루션들을 보면 대부분 NFNet을 사용하고 있더라구요. 지금까지 EfficientNet이 속도와 성능 면에서 모두 강세를 보였었는데, 새로운 모델의 등장이라 한번 정리를 해보려고 합니다. MobileNet이나 EfficientNet을 한번도 정리하지도 않고 바로 정리하는 것 같긴 하지만...... 시작하겠습니다!
시작하기에 앞서.. Batch Normalization에 대해서
NFNet의 풀네임(?)은 "Normalizer-Free ResNets"입니다. 그래서 논문의 시작에서 먼저 batch normalization에 대해서 설명합니다.
대부분의 네트워크들은 모두 batch normalization을 사용하고 있는데요, 배치정규화는 gradient vanishing/exploding의 문제를 해결하는데 아주 효과적이어서 지금까지의 SOTA 모델들에서 꼬박꼬박 등장하는 개념이었습니다. normalization은 원래 트레이닝 셋 전체에 대해 실시하는 것이 좋겠지만, 미니배치 방식을 사용하게 되면 파라미터의 업데이트가 배치 단위로 일어나기 때문에 미니배치 단위로 batch normalization을 해줍니다.
조금 더 자세한 배치 정규화에 대한 설명은 아래 더보기를..!
배치 정규화는 표현 그대로 한번에 들어오는 배치 단위로 (한번에 수행해야하는 양?) 정규화 하는 것을 말합니다. 배치 정규화는 보통 각 층에서 활성화 함수를 통과하기 전에 수행되는데요, 배치 정규화는 "정규화"라는 말 그대로 입력에 대해 평균을 0으로 만들고 정규화를 하는 것입니다.
위의 식에서도 아실 수 있겠지만 여기서 살짝 다른 부분은 정규화된 데이터에서 스케일과 시프트를 수행한다는 점인데요, 이때 두개의 매개변수 $\gamma$와 $\beta$가 사용됩니다. $\gamma$는 스케일을 위해 사용하고, $\beta$는 시프트를 하는 것에 사용하며 이 다음 레이어에 일정한 범위의 값들만 전달되도록 해줍니다. 이 둘을 추가해줌으로써 정규화 시켰던 부분을 원래대로 되돌리는 identity mapping도 가능하고 학습을 통해 $\gamma$와 $\beta$를 학습시킬 수 있기 때문에 위와 같은 방식을 취합니다.
배치 정규화는 워낙 많이 사용되고 필수적인 것 같지만, 동시에 단점이 존재합니다.
- 연산이 많이 필요로 한다 -> 계산 복잡도가 증가한다
- Fine-tuning이 필요한 다른 하이퍼파라미터가 필요하다
- 배치 사이즈가 작을 경우 성능이 저하된다.
- 분산학습에서 구현 에러를 일으킨다
이렇게 배치 정규화의 단점을 논문 초록에서 말을 하며 시작합니다.
그래서 도입한 방법!
배치정규화가 지금까지 많이 사용되었고 매우 효과적인것은 맞지만, 위와 같은 단점들 때문에 최근에는 batch normalization 없이 Deep Residual Network를 학습시키는 여러 방법들이 고안되었습니다. ReLU에 mean shift를 도입하거나.. 초기화할 때 residual branch를 없애고 scaled weight standardization을 적용한다거나.. 꽤 여러 시도들이 있었는데요, 대부분 퍼포먼스가 배치정규화에 비해 떨어진다거나 학습이 안정적이지 않거나 하는 문제가 있었습니다.
그래서 해당논문에서 도입한 방법은 바로 Adaptive Gradient Clipping(AGC)입니다. 이 논문에서 가장 핵심적으로 다루는 개념인 AGC를 사용해서 NFNet은 이미지넷에서 Efficient보다 좋은 성능을 보이고 속도 또한 8.7배나 빠르다고 소개합니다. 또한 다른 batch normalization이 적용된 네트워크들보다 부분적으로 더 높은 성능을 보였다고 하네요. 밑에서 자세하게 한번 AGC에 대해서 알아봅시다!
먼저 Gradient Clipping이란?
Adaptive Gradient Clipping에 대해서 알아보기 전에 Gradient Clipping이 무엇인지 한번 알아봅시다.
Gradient Clipping은 NLP모델에서 자주 사용하는 방법으로, 모델의 학습시 안정화할 때 많이 사용됩니다. Gradient Clipping은 이름에서 알 수 있듯이 기울기(gradient)가 특정 임계값을 초과하지 않도록 하여 모델 학습을 안정화시키는 방법인데요, 최근에는 Gradient Clipping방법이 gradient descent에 비해 더 높은 learning rate에서도 더 빠른 수렴(covergence)를 보여주는 논문들이 등장했었습니다.
$G$는 기울기 벡터(gradient vector)로, $G = {\partial L}/{\partial \theta}$의 식으로 나타낼 수 있는데, $L$은 Loss를 의미하고 $\theta$는 모든 모델 파라미터가 포함된 벡터를 의미합니다. 일반적인 gradient clipping알고리즘은 $\theta$를 업데이트 하기 전에 gradient를 클립하는데요, 아래와 같은 식으로 나타낼 수 있습니다.
여기서 $\lambda$는 하이퍼파라미터로, 따로 fine-tuning을 해줘야하는 변수입니다.
Gradient Clipping 방법은 큰 배치사이즈에서도 학습하는 것을 가능하게 하지만, clipping threshold를 어떻게 주는지에 따라 학습의 안정도가 매우 달라지게 됩니다. 여기에 작은 아이디어를 더해 이를 해결한것이 바로 AGC입니다.
Adaptive Gradient Clipping
AGC는 weight의 normalization 값과 gradient의 normalization 값의 단위 유닛을 사용하여 gradient를 클립합니다. 먼저 유닛은 아래와 같이 쓸 수 있습니다.
$$ \frac{\Vert{G^l} \Vert_F}{ \Vert {W^l} \Vert_F} $$
$ G^l$과 $W^l$은 각각 레이어 $l$에서의 gradient와 weight이고, $\Vert \cdot \Vert_F$는 Fobenius norm으로, $\Vert {W^l} \Vert_F = \sqrt{ \sum_i^N \sum_j^M (W^l_{i, j})^2 } $ 입니다.
gradient descent 알고리즘을 수행하다가 비정상적으로 gradient가 커지는 gradient exploding문제가 발생했을 때 $ \frac{\Vert{G^l} \Vert_F}{ \Vert {W^l} \Vert_F} $이 값이 커지게 됩니다. 따라서 이 값을 클립할지 말지를 결정할 수 있는데요, 아래와 같은 식으로 clipping을 수행합니다.
마찬가지로 $\lambda$는 하이퍼파라미터고, ${\Vert{W^l_i}\Vert^\star_F}$는 $\max({\Vert{W^l_i}\Vert_F},\epsilon)$입니다. $\epsilon$의 디폴드 값은 $10^{-3}$입니다.
위 사진은 학습 결과를 그래프로 나타낸 것인데요, 초록색 선이 배치정규화를 적용하지 않고 AGC를 적용한 모델입니다. AGC를 적용한 NFNet은 꽤 4096과 같은 큰 배치사이즈에서도 안정적으로 학습이 되고있는 것을 확인할 수 있습니다. 강력한 data augmentation인 RandAugment를 적용해도 잘 학습되었다고 하네요. 오른쪽 그래프를 보시면 clipping threshold인 $\lambda$가 어떤 값인지에 따른 정확도 변화인데요, $\lambda$는 옵티마이저와 learning rate, 배치사이즈 등에 따라 최적의 값이 달라지는데 일반적으로 큰 배치 사이즈에서는 작은 $\lambda$를 설정하는 것이 좋다고 논문에서 말하고 있습니다.
그래도 꾸준하게 새로운 SOTA를 달성하는 모델들이 나오니 신기할 따름입니다. ㅎㅁㅎ batch normalization은 이제 너무나도 당연시하는 개념이어서 당연히 써야하는거 아닌가? 했었는데 이를 없애려는 시도라니... 꽤나 재미있고 신기한 것 같습니다. 아래는 딥마인드에서 jax포맷으로 업로드해놓은 nfnet pre-trained 모델을 캐글의 어떤 유저가 파이토치 모델 형식으로 바꾼 건데요, 급하게 사용해야하는 경우에 한번 보시는 것도 좋을 것 같습니다 ㅎㅎ
https://www.kaggle.com/c/cassava-leaf-disease-classification/discussion/220268
아무튼 지금까지의 SOTA들 히스토리도 없이 바로 시작해버린 NFNet.... 사실 처음에는 자세히 모르고 시작해서 이미지에서 오브젝트에 중점적으로 포커싱할 수 있는 모델인가?? 라고 생각을 했었는데 그런건 딱히 아닌 것 같네요. 재미있었던 논문 리뷰!! 이것으로 마치도록 하겠습니다 😆
References
'머신러닝 꿈나무 > Paper Review' 카테고리의 다른 글
[논문리뷰] 내 마음대로 ArcFace 논문 리뷰 (0) | 2021.06.05 |
---|---|
[논문리뷰] 내 마음대로 Triplet Network 논문 리뷰 (1) | 2021.05.28 |
[논문리뷰] 내 마음대로 FaceNet 논문 리뷰 - Triplet Loss란? (0) | 2021.05.26 |
[논문리뷰] 내마음대로 R-CNN 논문 리뷰 (0) | 2021.04.19 |
댓글
이 글 공유하기
다른 글
-
[논문리뷰] 내 마음대로 ArcFace 논문 리뷰
[논문리뷰] 내 마음대로 ArcFace 논문 리뷰
2021.06.05 -
[논문리뷰] 내 마음대로 Triplet Network 논문 리뷰
[논문리뷰] 내 마음대로 Triplet Network 논문 리뷰
2021.05.28 -
[논문리뷰] 내 마음대로 FaceNet 논문 리뷰 - Triplet Loss란?
[논문리뷰] 내 마음대로 FaceNet 논문 리뷰 - Triplet Loss란?
2021.05.26 -
[논문리뷰] 내마음대로 R-CNN 논문 리뷰
[논문리뷰] 내마음대로 R-CNN 논문 리뷰
2021.04.19