[ML/DL] ResNet (feat: Skip-Connection)

오늘은 딥러닝에서 이슈가 되는 skip connection과 vanishing gradient 문제를 해결하는 ResNet에 대해 알아보고자 한다.

 

딥러닝 모델의 기초는 신경망이다. 신경망은 뉴런으로 구성이 되어 있고 각 뉴런은 입력값을 받아 가중치($W$)와 편향($b$)을 적용하여 활성화 함수를 통해 출력을 계산한다. 이런 뉴런들이 여러 층으로 구성되면 MLP(다층 퍼셉트론)라고 불리게 된다.

 

이러한 다층 퍼셉트론이 발전하여 다층 신경망이 된다. 일반적인 관점에서 더 깊은 다층 신경망이 될수록 복잡한 과제를 수행할 수 있다.

 

딥러닝이 발전하면서 이상한 현상을 발견하게 되는데, 더 깊은 네트워크가 오히려 성능이 저하된 현상을 발견하게 된다.

모델 성능의 감소 요인에는 여러 복합적인 요인들이 있겠지만, 모델 성능 저하의 중요한 요인 중 하나는 기울기 소실 현상(vanishing&explosion gradient problem)이다.

 

기울기 소실 현상은 주로 sigmoid나 tanh 계열의 activation function을 쓸 때 나타나는 현상이다. sigmoid나 tanh 함수는 네트워크의 층이 깊을 수록 출력값이 양극단(0 or 1)로 가게 되는 성향이 존재하여 입력값의 차이가 미미해지는 경향이 생기게 된다. 추가로 역전파의 그래디언트가 초기층으로 내려갈 수록 체인룰(chain rule)에 의해서 곱해져야할 항들이 많아지게 되고 층이 깊어질수록 초기층에 가까운 가중치들의 기울기가 거의 0에 가까워지는 현상이 발생하게 된다.

 

위와 같은 현상을 극복하기 위해 skip-connection or Residual connection 잔차 연결 방법이 고안되었다. ResNet이라는 이름은 Residual connection을 사용한다고 하여 ResNet이라 이름 붙여진 것이다.

 

Skip-connection이 어떻게 기울기 소실 문제를 줄여나가는지 계산 과정을 통해 확인해보자.

 

우선 계산을 하기전 모든 조건이 동일하지만, 잔차연결만 추가한 경우와 추가하지 않은 2가지 케이스를 가정하여 gradient가 어떻게 업데이트 되는지 살펴보자. (두 케이스의 활성화 함수는 시그모이드)

왼쪽: 시나리오1 / 오른쪽: 시나리오2

 

그냥 단순한 신경망을 의미하는 시나리오1에 대한 loss와 그에 대한 역전파 과정은 아래와 같다. 역전파 과정을 겪으면, 시나리오1의 각각의 단계의 기울기 값($\frac{ \partial L}{ \partial w_3} $, $\frac{ \partial L}{ \partial w_2} $, $\frac{ \partial L}{ \partial w_1}$) 들을 아래와 같이 정리할 수 있다. 여기서는 각각의 기울기 값이 기하급수적으로 작아지는 것을 확인할 수 있다.

 

우선 이번엔 잔차 신경망을 가진 시나리오2에 대한 Loss를 구하는 과정에 대해 살펴보자. 시나리오1과 같이 입력이 0.5로 같을 경우엔 $h_1$과 $h_2$까지의 과정은 동일하다. 그 후 출력 y의 경우는 잔차 레이어($w_r$)를 통한 경우와 $h2$에서 $y$로 가는 두가지 방향이 있기에 $ \sigma (w_3 h_2 + w_r h_1)$로 계산한다. 최종 Loss를 사용하여 계산하면 손실값은 0.2247이 나온다.

 

다음으로 손실을 사용하여 역전파를 구해보자. 우선 $\frac{ \partial L}{ \partial w_3} $, $\frac{ \partial L}{ \partial w_2} $를 구하는 과정은 시나리오1의 과정과 같다.

 

그 다음 시나리오1과의 차이점이 나타나는데, 잔차 신경망의 경우엔 $\frac{ \partial L}{ \partial w_1} $의 값은 빨간 경로의 역전파파란 경로의 역전파를 모두 구해서 더해주는 과정으로 이루어진다. ($\frac{ \partial L}{ \partial w_1} = -0.00295 - 0.000074$)

 

결론을 내자면, 잔차가 없는 그냥 신경망의 경우엔 역전파가 초기층으로 갈수록 기울기값이 기하급수적으로 작아지는 것을 확인할 수 있는 반면 잔차 신경망의 경우엔 초기층으로 간다할지라도 일반적인 신경망(시나리오1)에 비해 기울기가 급속히 변하지 않는 것을 확인할 수 있다. 이 단순한 과정이 skip-connection이 deep한 신경망의 학습을 더 용이하게 하는지를 보여주는 좋은 예라고 할 수 있다.

 

해당 예시에서는 3 layer로만 이루어졌기에 큰 차이점은 없지만, 40층 정도의 깊은 신경망에서는 차이가 훨씬 명확하고 중요하게 작동한다.