모바일 앱 환경에서는 latex 수식이 깨져 나타나므로, 가급적 웹 환경에서 봐주시길 바랍니다.
오늘은 ResNet, DenseNet에 대한 설명을 하고자 한다.
우선, 이 ResNet에 대해 이야기하기 전에 'Gradient vanishing problem'에 대해서 먼저 소개해야 한다.
현재까지도 이어지고 있지만 이때 당시에도 신경망의 구조적 발전이 이뤄진 흐름을 보면 신경망을 '더 깊게' 쌓는 방향으로 발전이 진행되어졌다.신경망을 더 깊게 쌓는다는 것은 층수 (layer)를 늘린다는 의미이고, 모델의 파라미터 개수를 늘린다는 의미이다.신경망의 층수가 많아질수록 데이터로부터 더 좋은 특징들을 추출할 수 있었고, 모델의 표현력이 증가했다.그만큼 input layer에 가까운 층에서는 단순한 특징을 추출하고, 점차 output layer에 가까워질수록 복잡한 특징을 추출하는 Hierarchy learning 과정 속에서 다양한 추상적인 특징들을 모델이 학습할 수 있는 것이었다.
그렇다면 앞선 GoogleNet, VGG 처럼 layer의 개수를 1~20개 수준에서 30개, 50개, 100개 그 이상으로 늘리는 것은 불가능했을까? 당연히 가능하였다.이 과정에서 과적합 문제 (overfitting problem)가 발생할 수 있었지만 이는 Dropout, Regularization, Batch normalization 등의 다양한 테크닉으로 해결이 가능했다. 위 테크닉은 CNN에 대한 설명을 마치고 설명하도록 하겠다.
하지만 또 다른 큰 문제가 존재하고 있었는데 그것이 바로 기울기 소실 문제 (gradient vanishing problem)이었다.
우리는 Training loss function을 최소화하는 방향으로 (Stochastic) gradient descent 계열의 알고리즘을 활용하여 Neural network의 parameters를 업데이트한다. 그리고 이 과정에서 현재 iteration (step)에서 Loss value를 구하기 위해 Forward operation, parameter에 대한 gradient를 구하기 위한 미분 연산, 즉 backpropagation을 수행하는데, input layer에 가까운 parameter의 gradient를 구하기 위해서는 뒤의 layer들의 parameter에 대한 gradient를 누적해서 곱해나가야만 한다.
(chain rule 원리)
앞서 Neural networks를 하나의 합성함수로 볼 수 있다고 하였고, 이 함수를 미분하면 당연히 합성함수의 미분법, chain rule이 적용된다. 그리고 input layer에 가까울 수록 계속해서 gradient (partial derivative values)가 곱해지면서 누적되기 떄문에 만약 gradient가 0~1 사이의 값이라면, 곱할수록 계속해서 작아질 것이다.
그렇다면 parameter는 gradient를 활용해서 업데이트가 진행이 되는데 gradient가 매우 작다면, parameter의 업데이트가 거의 이뤄지지 않는 현상이 발생할 것이고, 결국 input layer에 가까운 parameter는 학습이 제대로 진행되지 않을 것이다.
이것이 바로 gradient vanishing problem이다.
* 특히나 이는 activation function이 Sigmoid 계열의 함수일 때 더욱 심하게 발생하는데 Sigmoid function은 가장 큰 기울기 값이 $\frac{1}{4}$이기 때문이다. 즉, 1보다 작은 기울기를 계속해서 곱해나가면 결국 기울기가 작아지는 문제가 생길 수밖에 없고, ReLU function은 이를 어느 정도 완화해준다.
ResNet을 개발한 연구진들은 (Microsoft research team) Skip connection이라는 단순하면서도 놀라운 효과를 가진 idea를 통해 이 문제를 해결하였고, 그 결과 신경망의 층수를 대폭 늘릴 수 있었다. ResNet은 2015년 대회에서 우승을 차지하였고, 이때 당시의 신경망 층수가 152층이었다.
자, 그러면 Skip connection이란 무엇일까?
사실상 위 그림이 전부이다.
일반적인 Forward 연산 ($\mathcal{F}(x)$)뿐만이 아니라, layer를 건너 뛰어서 앞쪽 층의 정보가 '그대로' (identity) 뒤쪽 층에 전달되는 (즉, $x$도 함께) 것이 바로 skip connection이다.
다시 말해서, 앞쪽 층에서 뒤쪽 층으로 image (feature)가 전달이 될 때, layer를 거쳐서 전달되는 것과 동시에 건너뛰어서 그대로 전달하는 두 가지가 함께 이뤄지는 것을 skip connection이라 한다.
이 때 layer를 거쳐 전달된 것 ($\mathcal{F}(x)$)과 '그대로' 전달된 것 ($x$)은 합쳐지고 ($\mathcal{F}(x) + x$), 이것이 activation function Relu를 거쳐서 다음 층의 입력으로 들어가게 되는 것이다.
(좀 더 정확히 말하자면, $\mathcal{F}(x)$ tensor와 $x$ tensor 사이의 덧셈 연산이 가능하게 하기 위해 차 조정은 이뤄지기도 한다. 예를 들어, 행렬과 행렬의 덧셈에서 한 행렬이 $5 \times 5$이면 다른 행렬도 $5 \times 5$여야 덧셈이 가능하지 않겠는가?)
Convolution layer에 위와 같이 skip connection을 추가한 구조를 ResNet 개발자들은 'Residual block' (잔차 블록)이라 이름 붙였고, ResNet은 Residual block을 여러 개 이어 붙여서 설계하였다.
위 사진에서 맨 위 (34-layer residual)이 ResNet-34 구조이다.
layer 사이의 연결된 선과 함께 건너뛰어서 연결된 선들이 있는데 이것이 skip connection을 표현한 것이다.
중간의 그림은 일반적인 CNN (skip connection이 없는) 구조이고, 맨 아래에는 VGG-19가 그려져 있다.
위 그림에서는 생략됐지만, ResNet에서는 Convolution layer 이후에 Batch normalization layer를 적용하였고, 이후 activation function (ReLU)을 적용하였다. Batch normalization도 딥러닝에서 상당히 중요한 개념이므로, 뒤에서 다루겠다.
그렇다면 위와 같은 skip connection이 어떻게 gradient vanishin problem을 해결했을까?
간단하다. skip connection 없이 $F(x)$를 그냥 미분하면 $\nabla F(x)$이지만, ResNet은 $F(x) + x$를 미분하기 때문에 $\nabla F(x) + 1$이 input layer쪽으로 전달된다. 즉, gradient의 크기가 줄어들더라도 여기에 $1$을 더해주기 때문에 gradient가 0에 가깝게 소멸되는 현상을 방지할 수 있는 것이다.
이러한 ResNet은 현재 딥러닝 모델의 기본적인 골격으로 자리잡았고 매우 중요한 모델이 되었다.
다음은 DensetNet이다.
DenseNet은 ResNet의 skip connection에서 $+$연산을 concatenation 연산으로 바꾸었다.
다음이 DenseNet의 기본 구조이다.
DenseNet은 Connecion 또한 'Dense'하게 바꾸었으며, 덧셈 연산에서 이어붙이는 'Concatenating'연산으로 바꾸어주었다.
이는 '덧셈' 연산이 layer를 통해서 연산된 $\mathcal{F}(x)$의 특징을 $x$가 왜곡할 수 있는 위험이 있기 때문에 $\mathcal{F}(x)$에서 추출된 데이터의 특징을 최대한 다음 층에 잘 전달하기 위해 Concatenating 연산으로 바꾸어주었다고 모델 개발자들은 이야기한다.
이걸로 CNN에 대해 이야기를 마무리하고, 다음 글에서는 딥러닝의 중요한 테크니컬한 요소들 (e.g : Regularization, Dropout, Batch normalization etc) 등에 대한 이야기를 시작하고자 한다.
'Deep dive into Deep learning' 카테고리의 다른 글
Deep dive into deep learning part (17) : Regularization(2) -Updated (0) | 2023.05.07 |
---|---|
Deep dive into Deep learning part 16. Regularization - Updated (0) | 2023.05.05 |
Deep dive into Deep learning part 14. CNN(2) - Updated (0) | 2023.04.27 |
Deep dive into Deep learning part 13. CNN - Updated (0) | 2023.04.23 |
Deep dive into Deep learning part 12. 신경망 (3) - Updated (0) | 2023.04.16 |
댓글