juuuding

[paper review] Identity Mappings in Deep Residual Networks 본문

논문 리뷰/컴퓨터비전

[paper review] Identity Mappings in Deep Residual Networks

jiuuu 2024. 8. 28. 02:52

※ 혼자 읽고 정리한 글이라 틀린 내용이 있을 수 있습니다.

 

[Identity Mappings in Deep Residual Networks]

https://arxiv.org/abs/1603.05027

 

※ ResNet은 아주 깊은 신경망을 효과적으로 훈련시키기 위해 개발된 신경망이다. 깊은 신경망에서 발생하는 기울기 소실 문제를 해결하기 위해 Residuak Block이라는 구조를 도입하였다. Residual Block에서는 입력을 그대로 다음 블록으로 전달하는 skip connection을 사용하여, 네트워크가 원래의 입력을 유지하면서 추가적인 학습을 진행할 수 있도록 한다. 

 이 논문에서는 ResNet을 분석하여 ResNet의 성능이 왜 좋은지를 검증하고 기존 구조를 개선하여, 더 깊은 신경망에서도 효율적으로 학습할 수 있도록 한다. 

 

 

💡Introduction

각 유닛의 일반적인 형태(Residual Unit)

 

 ResNet은 "Residual Units"들로 구성된 깊은 신경망이며 residual function F와 identity mapping h(Xl), ReLU function f로 표현된다. 이 논문에서는 forwarding 동안 "direct path"를 생성하는 것에 집중하며 deep residual network를 분석하였다. 논문에서는 h(xl)과 f(yl)이 identity mappings라면 forward, backward 동안 한 유닛에서 다른 유닛으로 넘어갈 때 신호가 "directly propagate"가 되는 것을 밝혀냈다. 즉, 네트워크가 여러 층을 거치는 동안 신호가 변형되지 않고 그대로 전달될 수 있다는 의미다. 이러한 구조(identity mapping)에서 신호가 "direct"하게 전달되면 네트워크의 학습이 더 쉬워진다. 

 skip connection의 역할을 이해하기 위해, 다양한 h(xl)을 비교하고 분석하였다. h(xl)들 중 identity mapping인 h(xl)=xl이가장 에러가 빠른 에러 감소, 낮은 훈련 손실의 결과를 보여주었다. 

실선: 테스트 에러, 점선: 훈련 로스

 

 f(yl)=yl identity mapping을 구성하기 위해 ReLU와 배치 정규화(BN)을 weigth layers의 "pre-activation"로 보고 윗 그림의 (b)와 같이 residual unit을 설계하여 기존 ResNet보다 더 훈련하기 쉽고 일반화하기 쉽게 만들었다. 특히 ImageNet 데이터셋에서 200층의 ResNet을 사용하여 개선된 결과를 얻었는데, 기존의 방법은 200층에서 오버피팅이 발생했지만 이 새로운 구조는 오버피팅을 효과적으로 방지하였다. 이러한 결과는 네트워크의 깊이를 충분히 활용하는 것이 딥러닝에서 중요한 요소임을 시사한다. 

 

 

💡 Analysis of Deep Residual Networks

 

 

 이 식은 original Residual Unit 계산식이다. xl은 Residual Unit의 입력 특징, Wl = { Wl,k | 1≤k≤K }은 l번째 Residual Unit, Residual Unit 안의 레이어 개수 K의 가중치 집합, F는 residual function, f는 ReLU다. 그리고 h와 f는 identity mapping이므로 h(xl)=xl, f(yl)=yl이다. 따라서 xL은 다음과 같은 식으로 표현할 수 있다. 

 

 이러한 공식은 역전파 과정에서도 좋은데 여기에 chain rule을 적용하면 다음과 같다. 참고로 epsilon은 손실함수를 나타낸다. 

 

 이 역전파 식은 두개의 additive terms로 나눌 수 있는데, 여기서 아래 부분은 가중치 레이어 없이 직접적으로 기울기가 이전 층으로 전달되는 부분이고

a

 이 부분은 가중치 레이어를 거쳐 전달되는 기울기다. 

b

 

 a 부분은 가중치에 의존하지 않기 때문에 항상 존재하는 항이며, 기울기 값이 소실되지 않고 초기 층으로 직접 전달되어 학습이 제대로 이루어진다. 이 첫 항 a 덕분에 네트워크가 매우 깊어지더라도 기울기가 완전히 사라지지 않으므로 기울기 소실 문제를 효과적으로 방지할 수 있다. 

 일반적으로 b 식의 값이 모든 미니배치 샘플에 대해 -1이 될 확률은 아주 낮다. 그렇기 때문에 이는 기울기 값이 완전히 사라지는 것을 방지하는 역할을 한다. 따라서 가중치가 임의로 작아지더라도 레이어의 기울기가 완전히 사라지지 않으며, 이는 학습이 잘 진행될 수 있도록 보장한다. 

 

 

💡 On the Importance of Identity Skip Connections

 h 함수에 약간의 변형을 주어 identity skip connection의 중요성에 대해 알아보겠다. 기존의 h는 identity mapping으로 h(xl)=xl 라는 식을 가졌다. 여기에 identity 특성을 없애고자 h(xl) = λlxl 로 식을 변형해보았다. 따라서 전체 식을 나타내면 다음과 같이 표현된다.

여기서 F 함수에 스케일링된 형태를 Fhat으로 표현하면 아래 식과 같다. 

이제 이 식에 역전파를 적용하면 다음과 같이 표현된다. 

 

 이 식을 identity shortcut을 적용한 식의 역전파와 비교해보면 첫번째 항이 scaler 역할을 하는 gamma에 영향을 받는다는 것을 알 수 있다. 이는 학습에 문제를 일으킬 수 있는데 예를 들어 아주 큰 L 값을 가진 깊은 네트워크에서 gamma가 모든 층에서 1보다 크면 기울기 폭발 문제를, 1보다 작으면 기울기 소실 문제를 발생시킨다. 따라서 위와 같이 identity shortcut 대신 scaling shortcut을 사용하면 최적화 과정에 문제가 생겨 학습에 어려움을 겪을 수 있다.  (여기서는 F에 스케일링 된 역할을 다루지 않았다. 아래에서 여러 실험으로 F에 여러 형태 스케일링이 적용되는 것의 결과를 알아볼 것이다.)

 

 skip connection이 단순 스케일링이 아닌 더 복잡한 변환으로 이루어진 경우, 위 식에서 스케일링 요소가 더 복잡한 형태로 나타난다. 이러한 경우에도 기울기의 곱이 매우 작아질 수 있으며, 이는 신호 전파를 방해하고 학습을 더욱 어렵게 만들 수 있다. 

 

1. Experiments on Skip Connections

이제 몇가지 실험을 통해 F에 스케일링이 적용되었을 때 학습에 미치는 영향에 대해 알아볼 것이다.

 

 실험은 110-layer ResNet에서 진행하였으며 이는 54개의 two-layer Residual Units으로 구성되었다. 각 구조마다 CIFAR에서 5번 실행하여 이의 평균 accuracy를 계산하였다. 활성화 함수 f는 ReLU를 사용하였다. 해당 실험들을 통해 스케일링이 skip connection 및 residual function에 미치는 영향을 분석하였다. 

 

[Constant scaling]

이 실험에서는 모든 skip connection에 대해 λ 값을 0.5로 설정한 경우를 실험했다. F를 스케일링 하지 않은 경우(a)와 1- λ(0.5)로 스케일링한 경우(b)를 비교하였는데, a의 경우 네트워크가 잘 수렴하지 않았고 b의 경우 네트워크에 잘 수렴하였지만 테스트 오류율이 기존 ResNet-110보다 훨씬 높은 것을 확인할 수 있었다. 이는 skip connection의 스케일링이 최적화 과정에 어려움을 야기한다는 것을 시사한다.  

 

그림 2. 오류율이 20% 이상이면 fail로 간주

 

[Exclusive gating]

 gate 함수는 시그모이드  g를 사용하여 스킵 경로는 1-g로, residual 함수 F는 g로 각각 스케일링을 적용하였다. 이러한 게이트 함수에서는 초기 바이어스 값이 학습에 중요하였는데, 여기서는 -6이 가장 좋은 성능을 보였다. 하지만 이는 여전히 원래의 ResNet-110보다 성능이 떨어지는 모습을 보였다. 아래 그래프의 (b)를 보면 알 수 있다. 

그림 3

 

 참고로 그림 2의 exclusive gating 부분을 보면 b를 잘못 초기화하였을 때 좋은 성능을 내지 못했다는 사실도 확인 가능하다. 

 1-g의 값이 1에 가까워져 스킵 경로가 identity에 가까워지면 정보 전파가 잘 이루어지지만 F는 억제되면서 결과적으로 최적화에 어려움이 발생한다. 

 

[Shortcut-only gating]

 이 실험에서는 residual 함수 F에는 스케일링을 하지 않고 스킵 경로에만 1-g로 게이팅을 적용해보았다. 여기서도 초기 바이어스 값이 중요한 역할을 하였는데 바이어스를 0으로 초기화하였을 때 테스트 오류율이 아주 좋지 않았으며, -6으로 설정하고 1-g 값을 1에 가깝게 하여 스킵 연결을 identity mapping과 비슷하게 하니 성능이 많이 향상되어 원래의 ResNet-110과 결과가 비슷해졌다. 

 

[1x1 convolutional shortcut]

 이번에는 shortcut에서 identity 대신 1x1 convolutional shortcut을 사용하여 실험하였다. 이 방식은 깊지 않은 ResNet에서는 아주 좋은 성능을 보였다. 하지만 110-layer ResNet 같이 Residual Unit이 많은 곳에서는 매우 좋지 않은 결과를 가져왔다. 

 

[Dropout shortcut]

 identity shortcut의 결과에 0.5의 dropout을 적용하였다. 그 결과 좋은 성능을 보이지 못했고, gamma 값이 0.5인 constant sacling과 평균적으로 비슷한 결과를 보였다. 

 

2. Discussions

 gating과 1x1 convolutional shortcut은 더 많은 파라미터를 도입하며 더 강한 표현력을 가진다. 하지만 identity shortcut과 비교하였을 때 훈련 에러가 더 낮은 결과를 보였다. 따라서 이 방법들은 표현력이 부족해서가 아닌 최적화 과정에서 신호가 잘 전파되지 않아 성능 저하가 발생했음을 알 수 있다. 

 

 

💡 On the Usage of Activation Functions

그림 4

 

 이 실험에서는 Residual Unit에서 ReLU와 BN의 위치가 신호 전파와 최적화에 미치는 영향을 분석한다. 위에서 살펴본 역전파 수식에서는 f를 ReLU와 같은 활성화 함수가 아닌 identity mapping을 사용하였지만, 실제 실험에서는 ReLU가 사용되어 위의 수식들은 근사 값으로 추정할 수 있다. 여기서는 ReLU와 BN의 위치를 바꿔보며 활성화 함수 f가 identity mapping이 될 경우 신호 전파와 최적화 과정이 어떻게 달라지는지를 실험한다.  

 

1. Experiments on Activation

 이 실험에서는 ReNet-110, 164-layer Bottleneck(ResNet-164) 구조를 사용한다. bottleneck Residual Unit은 1x1 layer로 차원을 줄이고 3x3, 1x1 layer로 차원을 복구한다. ResNet-164는 성능과 계산 복잡도가 two-3x3 Residual Unit과 비슷하다.

 

[BN after addition]

 그림 4 (b). 이 형태에서는 f에  BN과 ReLU가 포함되며 전파되는 신호가 BN에 의해 바뀐다. 이렇게 했을 때 원래의 방법보다 성능이 훨씬 나빠졌다. 

 

[ReLU before addition]

 그림 4 (c). 여기서는 element-wise addition 전으로 ReLU가 이동하면서 F의 모든 결과가 음이 아닌 정수가 되었다. 직관적으로 residual은 음수, 양수 값을 모두 가져야 하는데, 여기서는 그렇지 못하게 된다. 따라서 신호가 네트워크를 통해 계속 증가하게 되어 표현력이 감소할 수 있게 되어 성능이 더 안 좋아진다.

 

[Post-activation or pre-activation?]

 (1) post-activation

 기존 구조는 활성화 함수를 적용시킨 형태가 입력으로 들어가 다음 Residual Unit의 two-term 모두에 적용되는 대칭적 구조를 가진다. 

기존 대칭 구조

 (2) pre-activation

 여기에서 ReLU의 위치를 변경하여 two-term 중 뒷 term에만 ReLU가 적용된 값이 입력되도록 하여 비대칭 구조를 만든다. 이것은 다음 Residual unit에 대해 ReLU(fhat)를 먼저 적용하는 pre-activation이라고 할 수 있다. 

 

새 대칭 구조

 

 단순한 네트워크에서는 N개의 층에 N-1개의 활성화 함수가 적용되어 activation의 위치가 크게 중요하지 않다. 하지만 Residual Unit처럼 브랜칭된 레이어들이 element-wise로 합쳐지는 구조에서는 activation의 위치가 매우 중요하다.

 그림 4 (d)처럼 ReLU에만 pre-activation으로 사용한 경우는 ResNet-110과 ResNet-164에서 기존  ResNet과 비슷한 성능을 보였다. 하지만 여기서는 ReLU가 BN과 함께 사용되지 않아 BN의 이점을 누리지 못할 수 있다는 단점이 있다. 

 다음으로 그림 4 (e)처럼 BN과 ReLU 모두에 pre-activation을 사용한 경우 성능이 크게 향상되었는데, 이는 BN과 ReLU가 모두 가중치 레이어 전에 적용되었기 때문이다. 아래의 표를 보면 더 나은 성능을 확인할 수 있다. 

 

 

다음은 더 다양한 구조에 pre-activation을 사용하여 성능을 측정한 결과다. 여기서 ResNet-1001은 333개의 Residual Units을 가지는 1001-layer bottleneck 구조를 말한다. 이를 통해 pre-activation 모델이 모든 기존 구조들보다 더 나은 결과를 얻는다는 것을 알 수 있다. 

 

 

2. Analysis

 pre-activation이 최적화와 과적합 방지에 영향을 미치는 것을 발견하였다. 

 

[Ease of optimization]

 pre-activation에서는 f가 identity mapping이 되기 때문에 신호가 Residual Unit 간에 더 잘 전달이 된다. 따라서 이 효과는 층이 깊어질수록 뚜렷하게 나타난다. 층이 깊이가 깊지 않을 때는 f가 ReLU더라도 심각한 영향을 주지 않는다. 결론적으로 pre-activation을 사용하면 신호가 층 간에 직접 전달되어 최적화가 잘 이루어진다. 

 

 

[Reducing overfitting]

 pre-activation의 또다른 효과는 정규화다. pre-activation 버전이 기존 버전보다 training loss는 높지만 test error는 낮은 것을 확인할 수 있다. BN이 신호를 정규화하지만 기존 방식에서는 이 정규화된 신호가 skip connection과 더해지면서 다시 비정규화된 신호가 되어 다음 가중치 층의 입력으로 사용된다. 하지만 pre-activation에서는 모든 가중치 층의 입력이 정규화된 상태로 유지되므로, 더 나은 정규화 효과를 제공한다. 

 

실선 - test error, 점선 - training loss

 

 

💡 Results

[Comparisons on CIFAR-10/100]

 

 ResNet이 다른 방법들과 비교했을 때 경쟁력 있는 성능을 보여주었고, 다른 최적화 기법을 사용하지 않고 네트워크 깊이를 늘리는 것만으로 우수한 성능을 발휘하였다. 

 

[Comparisons on ImageNet]

 

 ResNet-152는 pre-activation을 적용하였을 때 아주 조금 성능이 개선되었는데, 이 구조는 깊이가 그렇게 깊지 않아 일반화에 큰 어려움을 겪지 않았기 때문에 개선 폭이 크지 않다고 볼 수 있다. ResNet-200은 152보다 낮은 훈련 오류를 보였지만 오히려 더 높은 오류율(21.8%)를 기록했는데 이는 과적합 문제를 의미한다. pre-activation을 적용한 ResNet-200은 기본 ResNet-200보다 낮은 오류율을 보였으며, 두 가지 ResNet-152 버전보다도 나은 성능을 보였다. 
 scale과 aspect ratio augmentation을 사용한 결과 pre-activation ResNet-200이 Inception v3보다 더 좋은 성능을 보였고,  Inception-ResNet-v2가 단일 크롭에서 19.9% / 4.9% 오류율을 기록하며 매우 좋은 성능을 나타냈다. 이러한 결과로 pre-activation Residual Unit이 ResNet과 같은 네트워크에서 성능을 극대화할 수 있음을 시사한다. 

 

[Computational Cost]

 여기서 사용한 모델들의 계산 복잡도는 깊이에 비례한다. 즉, 1001-layer net은 100-layer에 비해 계산 복잡도가 약 10배 정도 높다고 할 수 있다. CIFAR에서 ResNet-1001이 두 개의 GPU로 27시간 훈련하였고, ImageNet에서는 ResNet-200이 8개의 GPU로 3주간 훈련을 진행하였다. 

 

 

💡 Conclusions

  • deep residual networks의 connection mechanism 뒤에 있는 정보 전파 공식을 조사함
  • identity shortcut connections과 identity after-addition activation은 정보 전파가 잘되게 하는데 필수적임

 

 

 

※ appendix

 - pre-activation residual units를 사용할 때는 첫 번째와 마지막 residual unit에 주의해야함. 첫 번째 residual unit에서는 첫 번째 활성화가 conv1 바로 다음 두 경로로 나뉘기 전에 적용됨. 마지막 residual unit에서는 element-wise addition 후에 추가적인 활성화를 적용함.

 

 - Bottleneck ResNet에서 특징 맵 크기를 줄일 때 차원을 늘리기 위해 projection shortcuts을 사용함. pre-activation을 사용하는 경우에는 projection shortcuts도 pre-activation을 따름.