[ML] ResNet 정리
포스트
취소

[ML] ResNet 정리

ResNet 논문을 읽고 정리하기 위해 작성하는 글 입니다. 논문 원본은 여기서 확인 가능합니다.

ResNet?

ResNet은 점점더 깊어질수록 학습하기 어려워지는 문제가 있습니다. 주요 원인으로는 깊이가 깊어짐에 따라 생기는 기울기 소실/폭주(gradient vanishing/exploding) 문제 입니다. 해당 문제들은 nomalized initialization과 BatchNormalization으로 어느정도 해결되지만, 네트워크가 깊어질수록 파라미터가 증가하여 생기는 학습의 어려움은 해결하지 못했습니다. 논문에서 이 문제는 degradation 이라고 표현한다.
ResNet은 해당 문제를 해결하기 위해 residual networks를 이용해 모델의 깊이를 늘리고 성능을 올리는 방법을 사용합니다.

Residual Learning

ResNet은 degadation 문제 해결을 위해 Residual Learning을 제안했습니다. 이 방법은 레이어가 입력값을 직접 y로 매핑하는 기존 방식 대신, 입력에 대한 잔차(residual) 매핑을 학습하도록 구현됩니다. 조금 풀어서 설명하자면, 학습을 할 때 아무것도 없는 상태에서 정답을 도출하는 기존 방식에 그동안 학습한 데이터를 학습 중간중간에 제공해서 학습의 편의를 개선하는 방법입니다. (이 비유가 100% 맞지는 않습니다.)

res1

다음과 같이 레이어 끝에 입력값을 더해주는 shortcut connection구조를 추가하는 방식으로 구현됩니다. 위 사진을 수식으로 표현하면 \(H(x) = F(x) + x\)입니다. 이때 각 기호가 표현하는것은 다음과 같습니다.

  • \(H(x)\): 최종 출력 값
  • \(x\): 최초 입력 값
  • \(F(x)\): 레이어를 통해 학습된 값

그렇다면 \(H(x) = F(x) + x\)는 무슨 의미일까요?
\(x\)는 최초 입력값이므로 학습 과정에서 불변하는 값이라는걸 알 수 있습니다. 그러므로 레이어는 \(H(x)\)와 \(x\) 간의 차이를 학습하게 됩니다. 다시말해 \(F(x) = x - H(x)\)가 0이 되도록 학습이 진행됩니다. 이때 \(x - H(x)\)를 잔차(residual)라고 합니다.

ResNet 구조

res1

논문에 소개된 ResNet은 VGG-19 모델에 CNN 레이어를 추가하고, shortcut connection을 추가하는 구조로 만들어 졌습니다. 중간중간 보이는 점선은 입력과 출력 차원이 다른 경우입니다. 논문에서는 두 가지 방법을 제안합니다. 첫 번쨰 방법은 단순히 zero padding을 하여 차원을 맞추는 방법이고, 두 번째 방법은 1x1 conv filter를 통과시켜 projection shortcut 하는 방법입니다.

성능 비교

res1

shortcut connection을 적용하지 않은 plain network와 34-layer 모두 degradation이 발생합니다. 하지만 residual network는 34-layer가 18-layer보다 validation/training error 모두 작다는 것을 알 수 있습니다. 이는 깊은 네트워크를 구성해도 degardation 문제 없이 학습이 가능함을 나타냅니다.

Bottleneck 구조 활용

논문에서는 더 깊은 네트워크를 설계할 때 학습의 복잡도를 줄이기 위해 Bottleneck 구조를 활용했습니다.

res1

Bottleneck 구조는 학습 속도를 위해 채널을 의도적으로 줄였다가 다시 늘리는 방법을 사용합니다. 1x1 convolution 연산을 통해 크기는 유지하면서 채널개수를 줄인 뒤, 3x3 convolution 연산을 통해 특징을 추출합니다. 그 후 다시 1x1 convolution 연산을 통해 채널 개수를 원래대로 복구합니다.
이 방법은 강제로 채널을 줄이고 늘리는 과정에서 정보의 손실이 일어나기 때문에 모델의 정확성을 떨어뜨린다는 단점이 있습니다. 하지만 채널을 줄임으로써 연산량 감소 효과를 볼 수 있습니다.

성능 비교

논문에서는 Bottleneck 구조를 활용해 50/101/152 layer 네트워크를 테스트 했습니다.

res1

레이어가 늘어났지만, 여전히 degradation 없이 성능이 개선되는것을 확인할 수 있습니다.

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.