Skip to main content

조정 기울기 클리핑(Adaptive Gradient Clipping) 및 NFNets 탐색

최근에 발표된 High-Performance Large-Scale Image Recognition Without Normalization 논문에서 제안된 기고문에 대한 최소 어블레이션(ablation) 연구
Created on March 30|Last edited on February 2
이는 여기에서 볼 수 있는 영어 기사를 번역한 것이다.

서론

지난 한 달여간, 컴퓨터 비전 커뮤니티에서는 ImageNet에서 분류 작업을 수행하며 최고의 성능을 달성한 NFNets에 대한 논문인 "High-Performance Large-Scale Image Recognition Without Normalization"에 대한 연구가 계속 진행되었습니다. 저희는 잠시 시간을 내어 Brock, De, Smith, Simonyan이 (2021년) 시행한 연구를 꼼꼼히 살펴보고, 배치 정규화(batch normalization)의 장점 (및 단점)에 대해 논의하고, 이 흥미로운 연구에 대해서 몇백 자로나마 이야기하고 싶었습니다.
물론, 원본 자료를 살펴보고 싶으시다면 (꼭 한번 보시기 바랍니다!), 아래의 링크를 참조하시기 바랍니다.

 논문| GitHub | 공식 Repo

배치 정규화(Normalization) 이야기

배치 정규화(Batch normalization, BN)는 더 심층적인 신경망(neural network) 훈련을 가능케 하여 딥러닝의 성장에 일부 역할을 했습니다. 2015년에 처음 제안되어, 배치 정규화 추가는 내부 공변량 이동(internal covariate shift)을 처리하기 위해 훈련 중 학습된 숨겨진 표현(hidden representations)을 정규화하는 데 도움이 됩니다.
그러나 배치 정규화(BN)는 내부 공변량 이동(internal covariate shift)과는 아무 관련 없습니다. Santurkar 등의 2018년 논문 “How Does Batch Normalization Help Optimization?"에서 저자들은 배치 정규화(BN)가 훈련에 보다 근본적인 영향을 미치고 있다는 사실을 발견했습니다. 즉, “배치 정규화(BN)는 optimization landscape를 훨씬 더 원활하게 합니다. 이러한 원활함은 기울기(gradient)의 더 예측적이고 안정된 동작을 유도하며, 훈련의 고속화를 가능케 합니다.
📌 참조: 아래의 실험 결과는 CIFAR-10 데이터세트에서 사용자 지정 신경 기반 신경망(convolutional-based neural network)을 훈련하여 생성되었습니다. 자세한 구현 내용은 링크된 colab notebook을 참조하시기 바랍니다.
배치 정규화(BN)가 작동하는 실제 이유와는 관계없이 배치 정규화(BN)를 통하여 모델을 훈련하는 것에는 여러 타당한 이점이 있습니다. 우선 다음과 같습니다:
  • 배치 정규화(BN)를 통해 훈련된 모델은 더 나은 테스트 정확도와 함께 빠르게 수렴합니다.

 ColabNotebook해보기Colab Notebook 해보기 →\rightarrow


Run set
2

  • 배치 정규화(BN)는 학습률이 높은 모델 훈련도 가능케 합니다.

 Colab Notebook 해보기 → 


Run set
2

배치 정규화(batch normalization)에는 추가적인 장점이 있으며, 이는 다음과 같습니다:
  • 배치 정규화(BN)를 통해 효율적으로 대규모 배치 훈련을 수행할 수 있습니다.
  • 배치 정규화(BN)는 평균 이동(mean shift)을 제거합니다. ReLU 및 GeLU와 같은 활성화 함수(activation functions)는 비대칭이므로, 따라서 non-zero mean(비 제로 평균) 활성화를 갖습니다. 이를 통해 평균 이동(mean-shift)이 도입됩니다. 배치 정규화를 통해 각 채널의 평균 활성화(mean activation)는 현재 배치 전체에서 zero가 되어 평균 이동(mean shift)에서 제거됩니다.
  • 배치 정규화(BN)는 regularization(정규화) 효과가 있습니다. (출처: Towards Understanding Regularization in Batch Normalization, Luo 등)
  • 배치 정규화(BN)는 loss landscape를 원활하게 합니다. (출처: "How Does Batch Normalization Help Optimization?" by Santurkar et al.)
현재 배치 정규화(batch normalization)는 대부분의 이미지 분류 모델의 핵심 구성요소이지만 몇 가지 바람직하지 않은 특성 또한 포함하고 있습니다. 연구 커뮤니티에서는 이러한 사항을 해결하기 위해 노력하고 있으나, 배치 정규화(batch normalization)의 특이성과 결점을 다루기보다는 배치 정규화(batch normalization)의 대체 수단을 찾는 것이 장기적으로는 더 나을지도 모르겠습니다.
이제 배치 정규화(batch normalization)의 몇 가지 단점에 대해 다뤄보겠습니다:
  • 배치 정규화(Batch Normalization)는 메모리 오버헤드(memory overhead)를 초래합니다. (출처: In-Place Activated BatchNorm for Memory-Optimized Training of DNNs)
  • 배치 정규화(Batch Normalization)는 일부 네트워크에서 기울기(gradient) 평가 시간을 증가시킵니다.
  • 배치 정규화(BN)를 세심하게 사용하지 않을 경우 훈련 및 추론 스코어간 불일치가 발생합니다.
  • 배치 정규화(BN)는 미니배치(minibatch)의 훈련 예시 간의 독립성을 깨뜨릴 수 있습니다. 또한, 이 같은 특정 문제로 인해 다음과 같은 문제가 발생할 수 있습니다:
    • 다른 하드웨어에서 결과를 재현하기가 어렵습니다.
    • 특히 분산 훈련(distributed training)에서 미묘한 구현 오류를 겪을 수 있습니다. 이러한 이유로 Context Encoding for Semantic Segmentation에서 Zhang 등은 동기화된 배치 정규화(Synchronized Batch Normalization)를 제안했습니다.
    • 그리고 훈련 중에 배치 통계(batch statistics)가 계산되므로, 훈련 예시 간의 상호작용으로 볼 수 있으며, 네트워크는 특정 손실 함수를 “속일 수” 있습니다. 이는 시퀀스 모델링(sequence modeling)의 경우 주요 관심사이며, 언어 모델이 대체 노멀라이저(normalizer)를 채택하도록 한 사안이기도 합니다.
  • 게다가, 훈련 하는 동안 배치 통계(batch statistics)에 큰 변동이 있을 경우 네트워크 또한 퇴행(degrade)합니다.
📌 참조: 아래의 실험 결과는 CIFAR-10 데이터세트에서 ResNet-20 모델을 훈련하여 생성되었습니다. 자세한 구현 내용은 링크된 Kaggle kernel을 참조하시기 바랍니다.
  • 마지막으로, 배치 정규화(batch normalization)의 퍼포먼스는 배치 크기에 민감합니다. 아래의 평행 좌표 플롯은 최종 테스트 정확도가 배치 크기에 민감하다는 것을 나타내고 있습니다. 배치 크기 및 테스트 정확도 간에는 음의 상관관계(negative correlation)가 있습니다. (즉, 배치 크기가 크면 일반적으로 테스트 정확도가 떨어집니다).

 Kagglekernel해보기Kaggle kernel 해보기→\rightarrow


Run set
6

📌 참조: “대규모 배치 훈련은 고정된 에포크 버짓(epoch budget) 내에서 더 높은 정확도를 달성하지 못하며 (Smith 등, 2020), 더 적은 매개변수 업데이트에서 주어진 테스트 경과를 달성하여 여러 디바이스 간에 병렬화(parallelized)되는 경우 훈련 속도가 크게 향상됩니다.”

정규화 프리(Normalization-Free) 네트워크 지향

배치 정규화(BN)의 이점을 통해 고성능 신경망(neural network)에 필요한 좋은 요소인 것을 알고 있습니다. 운용 가능한 BN의 대체 수단은 위에서 설명한 단점을 경감시키면서 이러한 장점을 (전부는 아니더라도) 가져다줄 것입니다.
이제, 이전의 작업에서는 배치 정규화(BN)의 단지 한 두 가지 이점만을 복구함으로써 정규화(normalization) 없이 경쟁력 있는 정확도로 deep ResNet 훈련을 시도했습니다. 이러한 작업에 사용되는 핵심 아이디어는 작은 상수(constant) 또는 학습할 수 있는 스칼라를 도입하여 초기화 시 잔여 브랜치(residual branch) 활성화 규모를 억제하는 것입니다.
노말라이저-프리(Normalizer-Free) ResNets (NF-ResNets)는 Brock 등의 논문 "Characterizing Signal Propagation to close the performance gap in Unnormalized ResNets (2021)"에서 처음 제안되었습니다. NF-ResNets는 정규화(normalization) 레이어 없이 경쟁력 있는 훈련 및 테스트 정확도로 훈련될 수 있는 사전 활성화(pre-activation) ResNets 클래스입니다.
ResNet의 아키텍처로 속도를 향상시키고 싶으신 경우, Yannic의 논문을 잘 설명한 영상을 참조하시기 바랍니다. 그러나 기존의 Resnet과 NF-ResNet은 어떻게 다를까요?
  1. NF-ResNEt은 hi=1=hi+αfi(hi/βi)h_{i=1} = h_i + αf_i(h_i/β_i), 형식의 잔여 블록(residual block)을 사용하며, 여기서:
  • hih_i ​와 ​​hi+1h_{i+1}ithi^{th} 번째 각각 잔여 브랜치의 입력 및 결과 출력입니다. hi+1h_{i+1} ​ i​​은 다음 잔여 블록에 대한 입력입니다.
  • fif_i 초기화 시 분산 보조 함수(variance preserving function)로 매개변수화(parameterized)되며 Var(fi​(z))=Var(z)를 만족합니다.
  • αα 는 각 잔여 블록(residual block) 후에 활성화의 분산이 증가하는 속도를 지정하는 스칼라입니다.
  • ββithi^{th}번째 레이어 잔여 블록(residual block)에 대한 입력의 표준편차입니다.
2. NF-ResNet은 스케일링된 가중치 표준화(Scaled Weight Standardization)를 사용합니다. 가중치 표준화(Weight Standardization)는 (Wi,jW_{i,j} \rightarrow W^i,j\hat W_{i, j}) 컨볼루션 레이어(convolutional layer)를 재매개변수화(reparameterize)하며 다음을 만족합니다.
W^=(Wi,jμi)/σi\hat W = (W_{i,j} - μ_i) / σ_i, 여기서:
  • W^\hat WWW는 각각 재매개변수화된(reparameterized) 가중치 및 원래의 가중치입니다.
  • μi=(1/N)j=1NWi,jμ_i = (1/N) \sum_{j=1}^N W_{i,j} 이며,
  • σi2=(1/N)j=1N(Wi,j2μi2)σ_i^2 = (1/N) \sum_{j=1}^N (W_{i, j}^2 - μ_i^2)
표준 가중치 표준화(Standard Weight Standardization)는 가중치 표준화(Weight Standardization)를 조금 수정한 것으로, 여기서 σi2=(1/N)j=1N(Wi,jμi)2σ_i^2 = (1/N) \sum_{j=1}^N (W_{i, j} - μ_i)^2. 입니다.
3. 활성화(activation) 함수는 비선형 고유의 스칼라 증가(gain) γγ에 의해서도 스케일링됩니다.
📌 팩트: “추가 regularization(정규화) (드롭아웃 및 확률적 깊이(Stochastic Depth))를 통하여, NF-ResNets는 배치(batch) 크기 1024인 ImageNet의 배치(batch) 정규화된 사전 활성화 ResNet이 달성한 테스트 정확도에 필적합니다. 또한 배치(batch) 크기가 매우 작은 경우 배치 정규화된(batch normalized) 대응물을 훨씬 능가합니다. 그러나 대형 배치(batch) 크기의 경우 (4096 이상), 배치 정규화된(batch normalized) 네트워크보다 나쁜 퍼포먼스를 보입니다.”
📌 참: “NF-ResNets는 배치 정규화(Batch Normalization)를 사용하는 EfficientNets와 같은 최신 네트워크의 퍼포먼스와 대등하지 않습니다.”

ResNet 대 배치(batch) 크기 32의 Cifar-10에서의 NF-ResNet

결국, NF-ResNet-50은 기존의 ResNet-50보다 대략 ~15% 정도의 차이로 더 뛰어난 퍼포먼스를 보입니다. (저는 두 모델 정의 모두에 Ross Wightman의 timm package를 사용했습니다.)

ColabNotebook에서NFResNet훈련하기Colab Notebook에서 NF-ResNet 훈련하기 \rightarrow


Run set
2


조정 기울기 클리핑(Adaptive Gradient Clipping)

문제는 훈련을 위해 NF-ResNet은 대형 배치(batch) 크기로 (4096 이상) 확장할 수 없다는 것입니다. 오늘 우리가 다루고 있는 논문(High-Performance Large-Scale Image Recognition Without Normalization)의 저자들은 기울기 클리핑(gradient clipping)이 NF-ResNet을 더 큰 배치(batch)로의 확장을 도울 것이라는 가설을 세웠습니다. 이를 위해 저자들은 조정 기울기 클리핑(Adaptive Gradient Clipping, AGC)을 제안했습니다.
표준 클리핑(clipping) 알고리즘은 매개변수 θ을 업데이트하기 전에 기울기(gradient)를 클리핑하며 다음을 만족합니다:
G{λGG if G>λG otherwise G \rightarrow\left\{\begin{array}{ll} \lambda \frac{G}{\|G\|} & \text { if }\|G\|>\lambda \\ G & \text { otherwise } \end{array}\right.
여기서 λ\lambda  (클리핑 임계값(clipping threshold))는 튜닝될 초매개변수입니다.
기울기 클리핑(gradient clipping)은 더 높은 학습률에서 훈련하는 데에는 도움이 되나 클리핑 임계값(clipping threshold)에 꽤 민감합니다. (아래의 미디어 패널을 확인하시면 알 수 있습니다)

Colab Notebook 해보기 \rightarrow


Run set
2

AGC는 “하드” 클리핑(clipping) 대신 조정 클리핑(adaptive clipping)을 도입하여 이 문제를 해결하고자 합니다.
📌 참조: “AGC 알고리즘은 기울기(gradient) GlG^l t놈(norm) 대 레이어l의 가중치(weights) WlW^l. 놈(norm)의 비율인 WlW^l of layer ll, GFWF\frac{\left\|G^{\ell}\right\|_{F}}{\left\|W^{\ell}\right\|_{F}} , ​​은 단일 기울기 하강 (gradient descent) 단계가 원래의 가중치 Wl를 어떻게 변화시키는지에 대한 간단한 측정치를 제공한다는 관측에서 동기를 얻었습니다.
논문의 저자들은 레이어별 놈(norm) 비율이 아닌. 기울기(gradient) 놈(norm) 대 매개변수 놈(norm)의 유닛별 비율을 사용했습니다. 여기서 프로베니우스 놈(norm) ( . F||\space.\space||_F) i이 사용되었습니다. AGC는 다음과 같이 주어집니다:
Gi{λWiFGiFGi if GiFWiF>λGi otherwise. G_{i}^{\ell} \rightarrow\left\{\begin{array}{ll} \lambda \frac{\left\|W_{i}^{\ell}\right\|_{F}^{\star}}{\left\|G_{i}^{\ell}\right\|_{F}} G_{i}^{\ell} & \text { if } \frac{\left\|G_{i}^{\ell}\right\|_{F}}{\left\|W_{i}^{\ell}\right\|_{F}^{\star}}>\lambda \\ G_{i}^{\ell} & \text { otherwise. } \end{array}\right.
여기서, λ\lambda  는 초매개변수이며WiF=max(WiF,ε)||W_i||_F^* = max(||W_i||_F, ε).입니다. ε=103ε = 10^-3 의 값이 작으면 제로 초기화된(zero-initialized) 매개변수의 기울기(gradient)가 항상 제로로 클리핑(clipping) 되는 것을 방지합니다.
📌팩트: “AGC를 사용하면, 더 큰 배치(batch) 크기 (4096까지) 및 RandAugment와 같은 강력한 데이터 증강과 함께 안정적으로 NF-ResNets를 훈련할 수 있습니다.”
AGC를 제대로 이해하고 모델링 훈련에서의 효과를 확인하기 위해서, 저는 여러 실험을 마련했습니다. 이러한 실험의 의도는 심각한 것을 결론짓는 것이 아니라 탐색하는 것에 있습니다. 실험은 가능한 실험 구성의 극히 일부분을 다루고 있습니다.
여기서 AGC는 더 큰 배치(batch) 구성을 위해 NF-ResNets를 안정시킵니다. 그러나 배치(batch) 크기가 더 커지더라도 테스트 정확도가 더 높아지지는 않습니다. 이를 위해, 저는 AGC의 효과 및 이것이 기존의 기울기 클리핑(gradient clipping)에 대한 가능한 대안이라고 생각해야 할지를 조사하고 싶었습니다. 그렇다면 AGC는 어떻게 할까요?

AGC가 정규화부분군이 없는(Normalizer Free) 네트워크에 미치는 영향

우선, 다음은 제가 훈련한 3가지 모델에 대한 참고사항입니다:
  • 배치 정규화(Batch Normalization)를 사용하는 CIFAR-10 데이터세트의 ResNet-20 아키텍처 (Colab Notebook).
  • 배치 정규화(Batch Normalization) 없이 동일한 구성을 사용하는 ResNet-20 아키텍처 (Colab Notebook).
  • 배치 정규화(Batch Normalization) 없이 AGC를 사용하는 ResNet-20 아키텍처 (Colab Notebook).
📌 참조: 이것은 클리핑 개수 0.01로 배치(batch) 크기 1024에서 훈련한 결과입니다.
  • AGC는 베이스라인(baseline)에 필적하는 모델을 생성하지 못했습니다.
  • AGC를 사용한 테스트의 정확도는 배치 정규화(Batch Normalization) 없이 사용한 것과 거의 동일합니다.
  • 결과는 클리핑 계수(clipping factor) 선택과 연관성이 있습니다. 그렇긴 하나, 이 실험을 통해 많은 것을 결론 내리는 것은 좋지 않아 보입니다. 여기서 폭넓은 주장을 하기에 앞서 더 넓은 구성 공간(configuration space)을 조사하기를 강력히 추천합니다.
제 생각에는, 클리핑 계수(clipping factor) 0.01은 아주 타이트해 보입니다. 독자분들께서는 좀 더 큰 클리핑 계수(clipping factors)로 실험해 보시기 바랍니다.

Run set
3


배치(batch) 크기 및 클리핑 계수(Clipping Factor)사이 관계

통상적인 기울기 클리핑(gradient clipping)의 클리핑 계수(clipping factor)는 배치 크기, 모델 깊이(model depth), 학습률 등에 민감합니다. 저는 배치(batch) 크기와 클리핑 계수(clipping factor) 간의 관계와 최종 테스트 정확도와의 상관관계를 살펴보고자 했습니다.
Weights and Biases 스윕(sweep)을 사용함으로써 저는 빠르게 제 어블레이션(ablation) 연구를 설정할 수 있었습니다.
📌 참조: 아래의 실험 결과는 CIFAR-10 데이터세트에서 ResNet-20 모델을 훈련하여 생성되었습니다. 자세한 구현 내용은 링크된 Kaggle kernel을 참조하시기 바랍니다. KaggleKernel해보기Kaggle Kernel 해보기\rightarrow

NF-Net: ImageNet의 현재 SOTA

🎉 SOTA 주의: 저희 NFNet-F1 모델은 EffNet-B7에 필적하는 정확도를 얻으면서 동시에 훈련 속도는 8.7배 더 빠릅니다. 저희 NFNet-F1 모델은 EffNet-B7과 비슷한 훈련 지연시간(training latency)을 가지지만, ImageNet에서 86% Top-1 정확도를 달성하고 있습니다.
📌 참조: NF-ResNets와 NF-Nets는 다른 아키텍처입니다.
신경망(Neural network) 아키텍처 설계는 최적화할 메트릭 선택에 따라 다릅니다. 이러한 메트릭은 다음과 같습니다:
  • FLOP 수
  • edgy/모바일 디바이스와 같은 타깃 디바이스에서의 추론 지연시간(Inference latency)
  • 액셀러레이터에서의 훈련 지연시간(Training latency)
이 논문의 저자는 기존 액셀러레이터에서의 훈련 지연시간(training latency)을 최적화하려 했습니다. 디바이스의 실제 훈련 지연시간(training latency)에 대하여 ImageNet상의 Top-1 정확도를 개선한 트랜드를 직접 철저히 조사하여 모델 공간(model space)을 탐색했습니다. 이 작업의 목표는 양쪽에서 모두 최대화하기 위하는 것이었습니다.
결과가 어땠냐고요? 저자들은 최근에 제안된 Sharpness Aware Minimization (SAM) 기술을 사용하여 NFNet-F6를 훈련해 86.5%의 Top-1 테스트 정확도를 달성했습니다. 이 아키텍처의 공식 구현은 JAX 프레임워크에서 이루어집니다. 공식 GitHub Repo는 여기서 확인하실 수 있습니다.
그리고 Yannic Kilcher 는 본인의 YouTube 비디오에서 NFNets에 대해 아주 놀라울 정도로 잘 설명하고 있습니다. 여기서 확인해보시기 바랍니다:


저는 Caltech-101 데이터세트에서 PyTorch Lightning을 사용하여 NF-Net 모델 훈련을 위한 colab notebook을 제공했습니다. NF-Net 구현은 timm package를 기반으로 합니다. 모델 변형(variant) 및 다른 초매개변수를 마음대로 바꾸셔도 괜찮습니다.

PyTorch Lightning을 사용하여 Colab Notebook에서 NFNet 훈련하기 \rightarrow


Run set
1


결론 및 감사의 말

실험은 CIFAR-10 데이터세트에서 수행되었으며, 이는 이 효과를 나타내기 위한 테크닉의 경우 충분하지 않을 수 있습니다. 그러나 사용 편의를 위해 실험 설정을 Colab Notebook과 Kaggle Kernel로 한정했습니다.
다양한 코드 예시와 실험 결과와 함께 이 보고서 작성을 가능케 한 다음의 여러 작업에 대해 찬사를 보냅니다.
마지막으로 이 눈부신 성과를 거둔 저자들께 축하의 뜻을 전합니다.
그리고, 이 리포트 개선에 큰 도움이 된 피드백을 제공해준 Sayak Paul씨와Morgan McGuire씨에게 감사의 말씀을 드립니다. 놀라운 편집실력으로 도와준 Justin Tenuto에게도 감사드립니다.
Iterate on AI agents and models faster. Try Weights & Biases today.