Post

[Paper]ResNet

ResNet은 2015년에 microsoft 연구원들에 의해 제안된 “Deep Residual Learning for Image Recognition” 논문을 통해 제안된 아케텍쳐입니다. 현재까지 20만회가 넘어가는 인용수를 가지는 논문인 만큼 딥러닝 모델의 주요 기법 중 하나로 그래디언트 소실 문제와 신경망의 성능을 혁신적으로 개선하였습니다.

Ⅰ. Residual Network

해당 논문에서 “residual laering framework”로 더 깊어지는 신경망 네트워크에서 학습 방법을 소개합니다. 여기서 명시적으로 layer를 재구성하여 층 입력을 참조하도록 하는 방법을 사용합니다.

1 Figure 1 : 더 깊고 복잡한 신경망일 수록 더 성능이 안좋아짐

신경망에서 층의 깊이는 성능에 매우 중요한 역할을 하지만 단순하게 많이 쌓을 수록 성능이 더 좋아지지는 않습니다. 이러한 이유는 그래디언트 폭발이나 소실에 관한 문제로 정규화 등의 문제로 해결해야합니다.

위 그림에서 확인 가능하듯이 신경망이 더 깊어질 수록 성능이 안좋아지는 결과가 나타납니다. 신경망이 수렴가능하더라도 깊이가 증가함에 따라 정보 전달량이 저하되며 성능이 떨어지게 됩니다. 이러한 문제는 과적합의 문제가 아닌 깊은 신경망을 사용해서 생기는 오류입니다.

즉, 보통의 신경망은 성능 향상을 위해 더 많은 레이러를 추가하는 것이 일반적이지만 항상 성능이 향상되는 것은 아닙니다. 이런 경우 존재하는 해결책으로 추가된 레이어가 기존의 레이어로부터 입력값을 그대로 전달하는 identity mapping을 적용하고, 다른 층에 학습된 얕은 모델로부터 복사된 레이어를 추가하는 것입니다.

이렇게 구축된 솔루션은 얕은 모델과 비교했을때 실험적으로 높은 학습 오류를 보이지 않아 성능 저하 현상을 완화시킬 수 있습니다.

2 Figure 2 : Residual learning : a building block

해당 논문에서 위와 같은 성능 저하 문제를 “deep residual learning framwork”라는 “잔차 학습” 방법을 소개합니다. 레이어를 무작정 쌓는 것 대신 직접적으로 원하는 “underlying mapping”(즉, 기저 매핑)을 적합하여 명시적으로 레이어가 잔차 학습인 “residual mapping” 을 수행하게 만듭니다.

\[F(x) := H(x) - x\]

\(H(\cdot)\)은 기저 매핑으로 비선형 레이어에 다른 매핑 \(F(\cdot)\)을 적합하게 되면 \(F(x) + x\)와 같이 재구성되게 됩니다. 이러한 잔차 매핑을 최적화하는 방법이 원래의 매핑을 직접적으로 최적화하는 것보다 쉬울거라는 가설을 논문에서 제시하였습니다.

특히, 원래의 매핑이 기저 매핑으로 최적화되는 경우에는 잔차를 비선형 레이어를 통해 기저 매핑에 적합하는 것보다 잔차를 0으로 만드는 것이 더 쉽울 것이라고 합니다.

이렇게 재구성된 \(F(x) + x\)를 피드포워드 신경망과 “shortcut connections”으로 함께 표현되게 됩니다. 숏컷 연결은 하나 이상의 층을 넘어가면서 간단하게 항등 매핑을 수행하고, 이 결과는 쌓인 레이어의 출력에 더해집니다. 이러한 연결은 추가의 파라미터가 요구되지 않고, 계산 복잡성도 추가되지 않습니다.

Ⅱ. Deep Residual Learning

ⅰ. Residual Learning

\(H(x)\)를 기저 매핑으로서 고려하여 stacked 레이어에 적용한다고 생각합시다. 만약 여러 비선형 층이 이론적으로 입력 x에 대해 원하는 출력을 생성하는 완벽한 함수에 점근적으로 접근한다면 \(F(x) := H(x) - x\)와 같이 잔차 함수로 근사화되게 됩니다. 따라서, \(H(x)\)는 \(F(x) + x\)가 될 수 있으며 두 형태 모두 점근적으로 원하는 함수로 근사하지만 학습의 용이성 측면에서는 차이를 보입니다.

이러한 접근법의 재구성은 성능 저하 문제에 대해 해결책을 제공합니다. 앞서 설명한 것과 같이 항등 매핑을 구현하는 층(F(x) + x)을 더함으로써 더 깊은 모델이 얕은 모델보다 성능이 떨어지는 것을 방지(즉, 더 완벽한 함수에 깊은 모델이 점근적으로 근사함)합니다. 이는 성능 저하 문제를 해결하기 위한 해결책으로 여러 비선형 레이러를 통해 항등 매핑에 근사하는 어려움을 극복할 수 있습니다.

잔차 학습을 통해 재형식화하면 해결책은 단순히 여러 비선형 레이어의 가중치를 0으로 수렴시켜 항등 매핑에 근접할 수 있게 됩니다. 현실적으로 이러한 과정은 최적이 될 수 없지만 도움이 될 수 있습니다. 다시말해 최적의 함수가 항등 매핑에 가깝다면 잔차 학습을 통해 네트워크를 최적화하는 것이 더 쉽게 됩니다.

ⅱ. Identity Mapping by Shorcuts

잔차 학습은 여러 stacked 레이어에 모두 적용됩니다.

\[y = \mathbf{F}(x, {W_i}) + x\]

𝐹은 잔차 매핑을 표현합니다. 이를 Figure 2의 예시로 두개의 층이 존재하여 \(F = W_2\sigma(W_1x)\)가 됩니다. \(\sigma\) 는 비선형 함수이고, \(𝐹 + x\)는 “shortcut connection”과 “element-wise addition”을 통해 수행됩니다.

위 식에서 숏컷 연결은 추가의 파라미터나 계산 복잡도가 요구되지 않습니다. 이점은 현실에서 효율성 측면에서 중요하고, 기존의 네트워크와 비교해서 공평한 비교가 가능하게 됩니다.

\[y = 𝐹(x, {W_i}) + W_sx\]

여기서 \(W_s\)는 정방 행렬을 사용할 수 있습니다.

ⅲ. Network Architectures

3 Figure 3 : ImageNet에서 학습했을때 왼쪽 plain 네트워크에서 층이 깊어질수록 성능이 안좋아지지만 ResNet에서는 깊어질수록 성능이 더 좋아지는 것을 확인 가능함.

해당 논문에서의 실험 결과로 객체 탐지 분야에서 잔차 학습을 통해 좋은 일반화 성능을 보여주었다고 합니다. 또한, 1000개의 layer도 탐색해보았으나 110 layer보다 성능이 안좋았는데, 이러한 문제는 과적합 문제로 일정 한계가 존재한다고 했습니다.

ResNet에서 사용된 잔차 학습 방법은 Vision분야에서 Residaul Block으로 많이 사용되고 있으며 NLP 분야에서도 Transformer와 같은 잔차 연결로 많이 사용되고 있습니다.

Ⅲ. Code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
@tf.keras.utils.register_keras_serializable(package='Vision')
class ResidualBlock(tf.keras.layers.Layer):

   ...

  def call(self, inputs, training=None):
    shortcut = inputs

    ...

    x = self._conv1(inputs)
    x = self._norm1(x)
    x = self._activation_fn(x)

    x = self._conv2(x)
    x = self._norm2(x)

    ...

    # residual connection.
    return self._activation_fn(x + shortcut)

Ⅳ. REFERENCES

  1. Deep Residual Learning for Image Recognition



This post is licensed under CC BY 4.0 by the author.