논문을 볼 때 항상 기존의 문제점이 무엇이었고 그 문제점를 어떻게 해결하였는지 파악하는 게 중요하다고 생각합니다.
(제 자신에게 하는말...)
그렇다면 기존 네트워크(2015년 이전 기준)의 문제점들은 무엇이었기에 ResNet이 나오게 된 것인가?
기존 네트워크들의 문제점
ResNet 이전 논문들이 layer의 깊이를 깊게 해서 성능의 개선이 이뤄졌으므로,
단순하게 생각했을 때 layer의 깊이가 깊어질수록 더욱더 많은 feature들을 학습함으로써 training, testing error가 줄어들어야 된다고 생각하는데,
위 그림을 보면 layer의 깊이가 깊어질수록 error가 더 커지는 것을 알 수 있습니다.
training 및 testing error → 56-layer > 20-layer
: Layer의 깊이가 깊어질수록 성능이 더 안좋아지는 것을 확인
우리는 신경망이 범용 함수 근사값(universal function approximator)이며 layer 수가 증가함에 따라 정확도가 증가한다는 것을 알고 있습니다. 하지만 실험 결과, 단순하게 layer를 쌓는(stacking) 것으로는 어느 시점부터 성능 하락이 발생한다는 것을 아래의 결과를 통해 알 수 있습니다.
Universal Function Approximation Theorem
인공 신경망의 수학적 이론에서, 유한한 수의 뉴런을 포함하는 단일 은닉층이 있는 feed-forward network가 , 활성 함수에 대한 가벼운 가정하에, Rn의 콤팩트 하위 집합에 대한 연속 함수를 근사 할 수 있습니다.
간단히 얘기해서, 은닉층에 특정 수의 뉴런을 포함하는 간단한 피드 포워드 신경망은 알려진 거의 모든 함수에 근접 할 수 있다는 이론.
참고
medium.com/predict/artificial-neural-networks-universal-function-approximators-cf5198224b58
Artificial Neural Networks. Universal Function Approximators?
Artificial Neural Networks are the most intricate and delicate deep learning algorithms which exist in the AI world today. They contain…
medium.com
따라서 neural network가 universal function approximators라면, 단순하거나 복잡한 함수를 학습할 수 있어야 합니다.
하지만, vanishing gradients나 curse of dimensionality 같은 문제로 인해, 네트워크가 충분히 깊으면 identity function(항등 함수)를 학습하지 못하는 것이 나타납니다.
또한, 여전히 layer의 수를 증가시켰을 때, 우리는 정확도가 한 점으로 saturate 되고, 결국 감소하는 것을 볼 수 있습니다.
→ 이 문제는 overfitting이 아닙니다.
따라서 더 shallower(얕은) 네트워크가 deeper(더 깊은) 네트워크보다 더 잘 학습하는 것처럼 보일 수 있으며, 이는 매우 직관적이지 않습니다(counter-intuitive).
하지만 이는 실제로 확인할 수 있는 결과이며 이는 degradation problem으로 유명합니다.
Degradation problem의 근본 원인이 없고, depp neural network가 identity function을 학습할 수 없는 상황에서 해결책에 대해서 생각해 보아야 합니다.
Degradation problem에서, 우리는 shallower network가 (shallower network + 추가 layer) 보다 더 학습을 잘한다는 것을 알 수 있습니다.
따라서, 이러한 추가 layer를 건너 뛰고, 최소한 얕은 sub network의 정확도와 일치하는 것은 어떻습니까?
그렇다면 how(어떻게) 레이어를 건너 뛸 수 있을까요?
바로 skip connections를 사용하거나 residual connection을 이용해서 몇몇 layer의 학습을 건너뛸 수 있습니다.
→ Residual block
Residual block
Residual block을 도입한 것이 핵심
기존의 network들은 optimization difficulty를 가지고 있으며 참조(unreferenced)되지 않은 original mapping을 최적화하는 것보다 residual mapping을 최적화하는 것이 더 쉽다고 가정합니다.
Plain network(단순히 layer가 깊어지면 깊어질수록 학습하기 어려움) 대신 아래와 같이 학습이 더 최적화 될 수 있는 형태로 변경
바뀐 건 plain layer에서 $x$를 더해준 것 뿐
Plain layer의 경우 각각의 layer를 모두 학습 진행해야 함. → 수렴 난이도가 더 높음
위 Residual mapping을 자세히 보면 skip connections에만 의존하여 identity function($x$)을 학습할 수 있습니다.
이것이 skip connection이 identity shortcut connection으로도 불리는 정확한 이유이다.
이것이 언급한 문제들에 대한 하나의 해결법입니다.
그렇다면 왜 residual 이라고 부르는걸까요? 또한 residue(잔여)는 어디있는 걸까요?
입력이 $x$ 이고 실제 분포 $H(x)$를 배우고 싶은 neural network 블록을 고려해보겠습니다.
이 경우, 입력과 실제 분포의 차이(또는 residual)는 아래와 같이 표현이 가능합니다.
$F(x) = Output - Input = H(x) - x$
이를 다시 정리하면
$H(x) = F(x) + x$로 표현 가능합니다. (즉, $F(x) + x$가 $H(x)$ 와 같아지도록 학습)
(앞의 layer에서 학습된 기존의 정보($x$)는 그대로 가져오고, 추가적인 정보 $F(x)$만 학습해서 더해줌 → $F(x)$가 residual)
Residual block은 전반적으로 true output, H(x)를 학습하려고 합니다.
그리고 만약 위의 이미지를 자세히 봤다면, x로부터의 identiry connection이 있기 때문에 레이어는 실제로 잔차 R(x)를 학습하려고 한다는 것을 알 수 있습니다.
요약하면, traditional network에서의 레이어는 실제 출력(H(x))를 학습하고 있지만 잔차 네트워크에서의 레이어는 residual, (R(x))를 학습하고 있다. 따라서 이름이 'Residual block'입니다.
위의 개념을 이해하기 어려운 분들께 간단한 예시로 설명해 보려 합니다.
(residual 개념을 이해하려고 덧셈 예시를 든 것이며 실제 neural network는 아래와 같이 동작하지 않는다는 것을 참고하세요)
1.
residual learning을 적용하지 않은 네트워크 학습의 경우 아래와 같이 예시를 들어보겠습니다.
input : 1
hidden_1 : ? (+2 or +4 or +3 .... etc)
hidden_2 : ? (+3 or +3 or +2 .... etc)
hidden_3 : ? (+4 or +2 or +4 .... etc)
output : 10
기존 residual learning을 사용하지 않은 방법은 hidden_1, hidden_2, hidden_3를 모두 한꺼번에 학습을 진행해야 했습니다.
따라서 학습 복잡도가 더 높아지고 수렴하기 어려울 수 있습니다.
2.
그렇다면 residual learning을 적용한 네트워크의 예시를 들어보겠습니다.
input : 1
hidden_1 : ? (+2 or +4 or +3 .... etc)
hidden_2 : ? (+3 or +3 or +2 .... etc)
만약 hidden_1이 +2이고 hidden_2가 +3이라면
intput + hidden_1 + hidden_2 = 6
output = 10
위 결과로 hidden_1, hidden_2를 다시 학습할 필요 없이 hidden_3만의 학습으로 +4라는 것을 알 수 있습니다.
Residual block의 이점
입력만이 아닌, 출력과 입력의 residual을 배우는 것이 더 학습하기 쉽다는 것이 확인되었습니다.
또한 만약 잔차($F(x)$가 0이라면 identity function을 학습할 수 있습니다.
그리고 이러한 skip connection으로 인해, 더 큰 gradient를 초기 layer로 전달(propagate) 할 수 있으며, 이러한 layer는 최종 레이어만큼 빠르게 학습할 수 있으므로 더 깊은 network를 학습할 수 있습니다.
아래 이미지는 최적의 기울기 흐름(optimal gradient flow)를 위해 residual block 및 indentiry connection을 배치하는 방법을 보여줍니다.
Batch normalization를 사용한 pre-activations 일반적으로 최상의 결과를 제공하는 것으로 관찰되었습니다
(즉, 아래 이미지에서 가장 오른쪽에있는 잔여 블록이 가장 유망한 결과를 제공합니다).
참고
towardsdatascience.com/residual-blocks-building-blocks-of-resnet-fd90ca15d6ec
Residual blocks — Building blocks of ResNet
Understanding a residual block is quite easy. In traditional neural networks, each layer feeds into the next layer. In a network with…
towardsdatascience.com
www.youtube.com/watch?v=671BsKl8d0E