논문 제목: Deep Residual Learning for Image Recognition (2015) 링크
저자: Kaiming He, Xiangyu Zhang, Shaoqing Ren, Jian Sun
개요
ResNet으로 잘 알려진 해당 논문은 2015년 이미지 분류 대회인 ILSVRC에서 우승한 모델이다. ResNet은 이전 연도까지 딥러닝 레이어를 많이 쌓을수록 문제가 발생하는 것을 정확하게 해결하여 총 152개의 레이어를 쌓는 데 성공하였다. 그렇다면 어떻게 Microsoft 연구팀은 어떻게 문제를 해결하여 레이어를 많이 쌓아도 학습이 잘되는 모델을 만들었는지 정리해 보았다.
Residual Learning의 등장배경
2015년 당시 이미지를 분류하는 모델들은 딥러닝 레이어를 많이 쌓을수록 정확도가 올라가는 것을 확인하였고, 특정 수준을 넘어가면 오히려 정확도가 떨어지는 문제로 애먹고 있었다. 그 원인으로 분석된 것은 기울기 소실 문제 (VGP; Vanishing Gradient Problem)이다. 기울기 소실은 초기화 기법이나 normalization 레이어를 추가하여 해결할 수 있다는 주장이 있었고, 실제로 10개의 레이어가 존재하는 신경망의 학습정도는 가능하게 만들었다. 그러나 더 많은 레이어를 쌓고자 했을 때는 더 이상 개선이 되지 않고 다시 정확도가 감소하였으며 이문제를 ‘degradation’이라고 불렀다.
다시, degradation은 레이어가 더 많은 신경망을 학습할수록 정확도는 떨어지는 문제를 말한다. 연구팀은 이 문제의 원인을 overfitting일 수도 있겠다 생각하였지만 실제로 학습과정까지 살펴보니 그렇지 않았다. 신경망이 깊어지다 보니 모델의 복잡도가 높아 과적합이 발생하여 train error가 더 높아진 것이 아닌, train 과정에서도 레이어가 많은 신경망의 error가 똑같이 높았었던 것이다.
연구팀은 신경망이 깊어질수록 최적화하기가 까다로워져 문제가 발생하는 것이라고 생각하여 각 레이어에서 학습하는 목적을 조금 변형하였다. 원래 이전까지의 신경망의 학습은 아래와 같은 모습이었다.
입력 $\mathbf{x}$ 가 주어졌을 때, 정답 $\mathbf{y}$ 와 가장 유사한 예측을 만들어내는 함수 $\mathcal{H}(x)$ 를 학습하는 것이다. 해당 과정에서 모델의 레이어가 더 많아졌을 때, 각각의 함수를 학습해 내는 것이 어려울 것이라 판단하여 연구팀은 skip-connection이라는 개념을 추가하였다.
Skip-Connection
비선형 레이어를 거치지 않은 것을 다시 한번 더해주는 skip-connection 연산이 추가되면서 비선형 레이어가 학습하는 내용이 바뀌어버린다. 전체적인 신경망의 목적은 입력 $\mathbf{x}$ 가 들어갔을 때, 예측 값이 $\mathbf{y}$ 가 되도록 만드는 것은 동일하지만, 레이어에서 학습하는 내용이 달라진다는 것이다. 기존 skip connection이 존재하지 않는 방법에서는 비선형 함수가 입력이 주어졌을 때 정답으로 “변환”하는 함수를 학습했다면, 이제 입력에서 “어느 정도의 차이”를 주면 정답으로 바뀔 수 있는지를 학습하게 된다.
- $\mathcal{H}(x)$ : 정답을 만들기 위해 입력을 어떻게 변화시켜야 할까…
- $\mathcal{F}(x)$ : 정답을 만들기 위해 입력에서 얼마를 더해줘야 할까…
이제 논문의 제목이 왜 ‘residual learning’ 인지 이해할 수 있게 되었다. 이전까지는 레이어가 입력을 변환해 주는 것으로 해석되었다면, 이제는 레이어가 입력을 정답으로 만들어주기 위해 필요한 ‘잔차(차이)’을 학습하는 것이 되었다. 사실 이 모든 과정은 하나의 가설을 필요로 한다.
원래의 레이어 $\mathcal{H(x)}$ 를 학습시키는 것보다,
잔차를 학습시켜 주는 레이어 $\mathcal{F}(x)$ 를 학습시키는 것이 더 쉬울 거야..!
지금 2024년까지 많은 딥러닝 모델에서 skip-connection이 사용되고 있는 것을 보면 해당 가설은 틀리지 않았다는 것을 보여준다고 생각이 된다. 뿐만 아니라 residual connection 기법에는 어떠한 파라미터도 필요하지 않고 아주 간단한 덧셈 연산만으로 딥러닝을 가능하게 했다는 것이 너무나도 매력적으로 와닿는다.
Residual Learning에 대해 한 걸음 더..
그런데 만약 $\mathcal{F}(\mathbf{x})$ 의 출력 차원과 입력인 $\mathbf{x}$ 의 차원이 다르다면 어떻게 할까. 벡터 또는 행렬의 성분합을 계산하기 위해서는 반드시 모든 차원의 크기가 일치해야만 한다. Microsoft 연구팀은 출력의 차원이 입력과 불일치하는 경우, 간단한 선형함수 (linear projection)을 두어 차원을 맞추어 연산하는 방법을 제안한다.
$$ \mathbf{y} = \mathcal{F}(\mathbf{x}) + \mathbf{W}\mathbf{x} $$
한 편, skip connection은 2~3 개의 비선형 레이어마다 해주는 것이 효과적이었다고 한다. 다시 말해 위 수식에서 $\mathcal{F}$ 는 2개의 비선형 레이어를 포괄하고 있다. 그렇다면 왜 1개의 레이어마다 skip connection을 해주는 것은 사용하지 않았을까? 그 이유는 1개의 non-linear layer마다 skip-connection을 모두 연결해 주게 되면 일반적인 linear layer와 달라질 것이 없어지기 때문이다. ($\mathbf{y} = \mathbf{W}_1\mathbf{x} + \mathbf{x}$) 또한, 지금은 간단한 예시를 위해서 fully connected layer를 예시로 모든 수식을 전개하였지만, convolution 연산도 충분히 적용이 가능하다.
실험 결과 분석
이미 결과는 좋을 것이라는 것을 알고 있지만, 그래도 어떤 실험을 했고 수치적인 결과는 어떠한지 살펴보자. 사용한 데이터셋은 2가지로 ImageNet 데이터셋과 CIFAR-10 데이터셋이다. 모두 이미지를 입력으로 받았을 때, class를 분류해 내는 task에 사용되는 데이터셋이다. 먼저 확인해 볼 것은 train과 test(validation) error가 어떻게 변화했는지이다.
그림에서 보이는 얇은 선은 training error를, 두꺼운 선은 validation error를 지칭한다. 왼쪽 그림은 skip-connection을 사용하지 않은 일반 신경망 모델을 우측 그림은 연구팀이 제안한 ResNet이다. 결과만 보아도 레이어가 깊어질수록 성능이 하락하는 것이 아닌 정상적으로 성능이 증가하는 양상을 보여주며 train/validation 모두 비슷한 모습을 보이고 있다.
다음으로 흥미로웠던 실험은 identity mapping이 아닌 다른 3가지 mapping으로도 실험해 보았다는 것이다. 첫 번째(A)는 입력 이미지에 대해 padding을 해준 것을 skip-connection으로 연결하는 것, 두 번째(B)는 linear projection으로 차원을 증가시켜 준 것을 skip-connection으로 연결하는 것, 세 번째(C)는 차원은 그대로 유지하는 선형변환한 결과를 skip-connection으로 연결한 것이다.
마지막으로 학습시간의 단축을 위해 계산되는 파라미터의 양을 줄여야 했는데, 그러기 위해 입력 이미지의 채널을 줄여주고 늘려주는 1x1 convolution을 사용하는 bottleneck 구조를 적용시켰다고 한다.
ResNet 논문을 읽은 지는 꽤 되었지만 다시 읽어보니 몰랐던 것을 이해한 부분도 상당히 많았다. 무엇보다 너무 잘 읽히는 구조로 작성되어 있는 논문이어서 꼭 한 번씩 읽어보는 것을 추천한다. 추가 파라미터나 많은 연산량을 요구하지 않는데도 성능을 크게 개선시켰고, 현재까지도 정말 많이 사용되는 skip connection (residual connection)이라는 개념이 시작된 곳이었기에 정말 흥미진진하게 읽었다. Microsoft 연구팀의 노고를 모두 알 수는 없겠지만 실험과정에서 그들이 생각했던 과정과 분석하는 과정들을 통해 더 깊은 신경망을 만들기 위한 노력을 살짝이나마 엿볼 수 있었다.