더 많은 레이어를 사용하더라도 네트워크를 우리가 원하는대로 학습시킬 수 있는가? 의 문제에 대해 항상 vanishing gradient 문제에 부딪혔는데, 이러한 문제는 대부분 nomalized initialization(가중치 초기화 기법), intermediate normaliztion layers(중간 정규화 계층)에 의해서 해결되어 왔다. 하지만 깊은 네트워크에서 이러한 방법을 이용하더라도 gradient vanishin 문제를 완전히 해결하지는 못한다.
인공 신경망, 특히 CNN에서 핵심적인 역할을 하는 구조적 혁신. 특정 레이어의 출력이 다음 레이어로만 연결되는 것이 아니라, 여러 레이어를 건너뛰어 그 이후의 레이어에 직접 연결되는 구조를 말한다.
이는 VGG같은 전통적인 모델이 바로 이전 레이어의 출력만 사용하는 것과 대비된다.
쉽게 비유하자면 여러 단계를 거쳐야 하는 복잡한 업무에서 중간 과정을 건너뛰고 초기 정보를 최종 단계에 직접 전달하여 정보의 왜곡이나 손실을 막는 것과 같다.
신경망을 훈련시킬 떄는 **목적함수 h(x)**를 모델링하는 것이 목표이다. 만약 입력 x를 네트워크의 출력에 더한다면 (즉 스킵 연결을 추가하면) 네트워크는 h(x) 대신 f(x)=h(x)-x를 학습하게 되는데, 이것이 잔차학습이다.
<aside>
💡이게 뭔 소리야?
일반 신경망 (스킵 커넥션 없음)
일반적인 신경망 블록은 입력 x를 받아 복잡한 변환을 거쳐 목표값 h(x)를 직접 만들어내야 한다.
잔차 신경망 (스킵 커넥션 있음)
스킵 커넥션이 추가된 잔차 블록은 네트워크가 h(x)를 직접 만드는 것이 아니라, 입력 x에서 h(x)가 되기 위해 필요한 변화량 또는 차이만을 학습하도록 한다.
입력: x
네트워크가 할 일: 차이에 해당하는 함수 F(x)를 학습한다.
최종 출력: 네트워크의 출력 F(x)에 입력 x를 더한 F(x)+x
학습 목표: F(x)+x=h(x)
h(x) - x가 바로 잔차(Residual), 즉 목표와 입력의 '차이'
</aside>
x ──┐───────────────► (+) ──► y
│ ▲
└─► [Conv/BN/ReLU] ─┘ # 이 박스가 F(x)
short skip connections는 얕은 layers에서 그래디언트 플로우를 위한 shortcut를 제공하지만 이외의 이유로 skip connection을 사용하는 경우가 있다.
<aside>
💡Short vs Long
Short skip→ 학습 과정에서 기울기 소실 문제 완화, 빠른 수렴
Long skip→ 세밀한 디테일 복구, 특히 세그멘테이션에서 중요하다.
두 가지 모두 사용할 때 성능이 가장 좋다. </aside>
세그멘테이션?