잔차 연결

편집 역사 토론
수치해석 소프트웨어 마지막 수정: 2026-08-18 04:31:09

1. 개요[편집]

잔차 연결
Residual Connection / Skip Connection
제안He · Zhang · Ren · Sun (2015) — ResNet, CVPR 2016
정의$y = x + F(x)$
푼 문제퇴화(degradation) — 깊게 쌓으면 학습 오차가 커지는 현상
기울기$\partial y/\partial x = I + \partial F/\partial x$ — 항등 성분이 항상 남는다
계보LSTM 셀 상태 → 하이웨이 네트워크(2015) → ResNet
기록ILSVRC 2015 분류 우승 — 152층, 앙상블 top-5 오차 3.57%
현재트랜스포머·U-Net·확산 모형까지 사실상 전부

잔차 연결(residual connection)은 어떤 부분망 FF 의 출력에 그 입력을 그대로 더해 y=x+F(x)y = x + F(x) 로 내보내는 배선이다. 허카이밍 외가 2015년 ResNet에서 제안했고, 이 한 줄이 딥러닝에서 “깊이”의 의미를 바꿔 놓았다. 그 전까지 20층 넘게 쌓는 것은 요령의 영역이었고, 그 후로 152층·1001층이 그냥 되는 일이 됐다.

포인트는 FF 가 목표 사상 H(x)H(x) 를 직접 배우는 게 아니라 잔차 H(x)xH(x)-x 를 배운다는 재구성이다. 항등사상이 최적일 때 FF 는 0만 내면 되는데, 이건 여러 비선형층을 겹쳐 항등을 흉내내는 것보다 압도적으로 쉽다. 논문의 표현대로 **“항등에 가까운 해가 필요할 때 그쪽으로 가는 길을 미리 뚫어 준 것”**이다.

이 문서는 잔차 연결이 무엇을 고쳤는지(퇴화 문제), 왜 되는지(덧셈 기울기·앙상블·지형 평탄화), 어떻게 배치하는지(사전활성화·스케일링·초기화)를 다룬다. 기울기 소실 일반론은 역전파, 정규화 계층은 층 정규화·배치 정규화 참고.

2. 퇴화 문제 — 과적합이 아니었다[편집]

ResNet 논문의 출발점은 관찰 하나다. 평범한 합성곱 신경망을 20층에서 56층으로 늘렸더니 시험 오차뿐 아니라 학습 오차까지 올라갔다.

이게 왜 이상한지 잠깐 짚자. 과적합이라면 학습 오차는 내려가고 시험 오차만 올라가야 한다. 그런데 둘 다 올라갔다. 게다가 논리적으로 깊은 망은 얕은 망을 포함한다 — 20층 망의 뒤에 항등층 36개를 붙이면 56층 망이 되고, 그 해의 학습 오차는 20층과 같아야 한다. 즉 56층 망의 가설 공간에는 최소한 20층만큼 좋은 해가 존재한다. 그런데 확률적 경사하강법이 그걸 못 찾는다. 표현력의 문제가 아니라 최적화의 문제였던 것.

잔차 연결은 이 구성적 논증을 그대로 아키텍처에 박아 넣는다. 모든 블록이 x+F(x)x + F(x) 이므로 F=0F=0 이면 자동으로 항등이고, 그래서 “깊게 만들었더니 얕은 것보다 나빠지는” 일이 구조적으로 발생하기 어렵다. 실제 ResNet의 층별 응답을 재 보면 깊은 층의 FF 출력 크기가 작다 — 대부분의 블록이 큰 변환이 아니라 작은 보정을 하고 있고, 이건 이후 “잔차 블록 = 표현의 반복적 정련(iterative refinement)“이라는 해석으로 이어졌다.

차원이 안 맞을 때(채널 수가 바뀌거나 스트라이드가 들어갈 때)는 지름길에 1×11\times1 투영 WsxW_s x 를 넣는다. 논문은 투영을 최소한으로 쓰는 편이 낫다고 보고했고, 그 이유는 다음 절에서 분명해진다.

3. 곱셈이 아니라 덧셈으로 흐른다[편집]

깊은 망의 기울기 문제는 야코비의 에서 나온다. 층이 LL 개면

Lx0=LxLl=1Lxlxl1\frac{\partial \mathcal L}{\partial x_0} = \frac{\partial \mathcal L}{\partial x_L}\prod_{l=1}^{L} \frac{\partial x_l}{\partial x_{l-1}}

이고, 각 인자의 특이값이 평균적으로 1보다 작으면 지수적으로 죽고 크면 폭발한다. 잔차 블록에서는 각 인자가

xlxl1=I+Flxl1\frac{\partial x_l}{\partial x_{l-1}} = I + \frac{\partial F_l}{\partial x_{l-1}}

이라 항등행렬이 항상 들어 있다. 사전활성화 형태(다음 절)에서는 이걸 깔끔하게 전개할 수 있다. xL=xl+i=lL1Fi(xi)x_L = x_l + \sum_{i=l}^{L-1} F_i(x_i) 이므로

Lxl=LxL(1+xli=lL1Fi(xi))\frac{\partial \mathcal L}{\partial x_l} = \frac{\partial \mathcal L}{\partial x_L}\left(1 + \frac{\partial}{\partial x_l}\sum_{i=l}^{L-1} F_i(x_i)\right)

가 되고, 괄호 안의 1이 출력의 기울기를 어떤 층에든 감쇠 없이 직송한다. 뒤의 합이 모든 층에 대해 정확히 1-1 이 되는 일은 사실상 없으므로 기울기는 죽지 않는다. 이것이 허 외(2016)가 정리한 논지다.

지름길에 뭔가를 곱하면 이 성질이 깨진다. xlλlxlx_l \to \lambda_l x_l 로 스케일링만 해도 기울기에 λl\prod \lambda_l 이 붙어 다시 지수 인자가 살아나고, 지름길에 1×11\times1 합성곱이나 게이트를 넣어도 정도만 다를 뿐 같은 일이 벌어진다. 허 외(2016)는 여러 변형 지름길을 실험해 순수 항등이 제일 낫다는 결론을 냈다. 투영은 차원이 바뀌는 곳에서만 어쩔 수 없이 쓰는 것.

4. 사전활성화 — 항등 경로를 완전히 비우기[편집]

원 ResNet 블록의 순서는 Conv → BN → ReLU → Conv → BN → (+x) → ReLU 다. 마지막 ReLU가 덧셈 뒤에 있다는 게 문제다. 항등 경로가 블록마다 ReLU를 한 번씩 통과하므로 진짜 항등이 아니다.

허 외(2016, Identity Mappings in Deep Residual Networks)는 정규화·활성함수를 전부 잔차 분기 안으로 밀어 넣는 사전활성화(pre-activation) 배치를 제안했다.

xl+1=xl+F(xl),F=ConvReLUBNConvReLUBNx_{l+1} = x_l + F(x_l), \qquad F = \mathrm{Conv}\circ\mathrm{ReLU}\circ\mathrm{BN}\circ\mathrm{Conv}\circ\mathrm{ReLU}\circ\mathrm{BN}

이제 입력에서 출력까지 아무 연산도 끼지 않은 덧셈만의 고속도로가 뚫린다. 결과는 극적이었다 — CIFAR-10에서 1001층 ResNet이 정상적으로 학습되고, 같은 깊이에서 원 배치보다 성능도 좋아졌다. 부수 효과로 잔차 분기 앞에 BN이 오면서 정규화 효과가 커져 과적합도 줄었다.

트랜스포머의 pre-LN 배치 x+F(LN(x))x + F(\mathrm{LN}(x)) 가 정확히 같은 아이디어다. post-LN이 워밍업 없이 발산하는 이유도 결국 “항등 경로에 LN이 끼어 있다”는 한 문장으로 요약된다. 자세한 비교는 층 정규화에 있다.

5. 왜 잘 되는가 — 앙상블과 지형[편집]

앙상블 해석. 파이트·윌버·벨롱기(2016)는 잔차 망을 펼쳐서(unraveled view) 봤다. 블록마다 ”FF 를 지나는 길”과 “지름길로 건너뛰는 길” 두 갈래가 있으므로, nn 개 블록을 쌓은 망은 입력에서 출력까지 2n2^n 개의 경로를 갖는 얕은 망들의 집합으로 다시 쓰인다. 이 관점의 실험적 근거가 인상적이다.

  • 층 하나를 삭제해도 성능이 거의 안 떨어진다. VGG에서 층을 지우면 성능이 무작위 수준으로 붕괴하는 반면, ResNet은 블록 하나를 통째로 빼도 정확도가 조금 떨어질 뿐이다. 경로 집합에서 절반이 사라졌을 뿐 나머지 절반은 멀쩡하기 때문.
  • 기울기의 대부분은 짧은 경로에서 온다. 110층 ResNet에서 경로 길이별 기울기 기여를 측정하면 길이 10~20 근처에 몰려 있고, 100층을 다 지나는 경로의 기여는 사실상 0이다. 즉 잔차 망은 “깊은 망”이라기보다 “유효 깊이가 적당한 얕은 망들의 앙상블”에 가깝다.

이 해석은 확률적 깊이(DropPath)가 왜 통하는지도 설명한다. 학습 중 블록을 통째로 꺼도 되는 것은 그게 앙상블 멤버 하나를 빼는 것에 불과하기 때문이다(드롭아웃 참고).

손실 지형. 리 외(2018)는 필터 정규화된 방향으로 손실 함수를 잘라 그려서, 지름길이 없는 깊은 망의 지형이 국소 최소점이 잔뜩 박힌 혼돈스러운 모양인 반면 잔차 연결을 넣으면 눈에 띄게 매끄럽고 볼록해 보이는 형태로 바뀌는 것을 보였다. 시각화라는 한계는 있지만, 최적화가 쉬워졌다는 실측과 그림이 같은 방향을 가리킨다. 손실 지형의 평탄한 최소점이 일반화와 연결된다는 별개의 논의와 겹치면서, “잔차 연결은 표현력이 아니라 최적화·일반화의 장치”라는 현재의 합의가 만들어졌다.

6. 계보 — 게이트를 열어 둔 하이웨이[편집]

y=x+F(x)y = x + F(x) 가 하늘에서 떨어진 것은 아니다.

  • LSTM 셀 상태(호흐라이터·슈미트후버 1997). 셀 상태는 시점을 지날 때 곱해지는 게 아니라 더해진다 — 이른바 상수 오차 회전목마(constant error carousel). 시간 축의 잔차 연결이라고 봐도 무방하다.
  • 하이웨이 네트워크(스리바스타바·그레프·슈미트후버 2015). ResNet보다 반년쯤 먼저 나왔고 형태는 이렇다.
y=H(x)T(x)+x(1T(x))y = H(x)\odot T(x) + x\odot\bigl(1-T(x)\bigr)

TT 는 입력에 따라 값이 변하는 시그모이드 게이트이고, 두 경로의 가중치가 항상 1로 합쳐지도록 묶여 있다. ResNet은 이 게이트를 학습하지 않고 상수로 고정한 뒤 전체 스케일까지 걷어낸 특수 경우로 읽힌다. 게이트를 없앤 것이 오히려 이득이었다는 점이 재밌는데, 게이트가 곱셈 인자를 다시 도입해 위에서 본 항등 경로의 성질을 깨기 때문이다. 파라미터를 늘려 유연성을 준 쪽이 진 사례.1

  • 수치해석 쪽 시선. xl+1=xl+F(xl)x_{l+1} = x_l + F(x_l) 은 상미분방정식 x˙=f(x)\dot x = f(x)전진 오일러 한 스텝(스텝 크기 1)과 같은 꼴이다. 이 관찰이 신경 상미분방정식으로 이어졌고, 층을 연속 시간으로 보내면 룽게-쿠타법 같은 고차 적분기를 쓰는 아키텍처도 나온다. 반대 방향으로는 “잔차 블록이 안정적이려면 야코비의 스펙트럼이 어때야 하는가”라는 수치 안정성 질문이 그대로 이식된다.

7. 어디에나 있다[편집]

  • 트랜스포머 — 어텐션과 MLP 부분층 각각을 잔차로 감싼다. 해석가능성 연구에서 이 항등 경로를 잔차 스트림(residual stream)이라 부르며, 각 블록이 여기에 정보를 읽고 쓰는 공용 통신 채널로 모형화한다.
  • U-Net — 인코더의 특징맵을 같은 해상도의 디코더로 건너뛴다. 다만 이건 더하기가 아니라 이어붙이기(concatenation)이고, 목적도 기울기가 아니라 다운샘플링에서 잃은 공간 정보의 복원이다. DenseNet도 이어붙이기 계열. 같은 “스킵”이라도 성질이 다르니 구분하는 게 좋다.
  • 확산 모형 — 잡음 예측망이 대개 잔차 블록으로 채운 U-Net이거나 잔차 트랜스포머다. 게다가 확산 과정 자체가 “현재 상태에 작은 보정을 더한다”는 잔차 구조라, 한 스텝 갱신 식이 xt1=xt+(보정)x_{t-1} = x_t + (\text{보정}) 형태로 쓰인다.
  • 그래프 신경망 — 층을 쌓으면 노드 표현이 뭉개지는 과도한 평활화가 발생하는데, 잔차 연결이 원 특징을 살려 두는 표준 처방이다.
  • 물리 정보 신경망·연산자 학습 — 해를 직접 예측하는 대신 초기 추정에 대한 보정을 학습하는 구성이 흔하다.

8. 잔차 분기의 스케일링과 초기화[편집]

잔차 연결에는 공짜가 아닌 부분이 하나 있다. 블록마다 뭔가를 계속 더하므로 잔차 스트림의 분산이 깊이에 따라 커진다.FlF_l 의 출력이 대략 독립이고 분산 vvVar(xL)Var(x0)+Lv\mathrm{Var}(x_L)\approx \mathrm{Var}(x_0)+Lv 로 선형 증가하고, 깊은 망에서는 로짓이 폭주하거나 초기 학습이 불안정해진다. 그래서 잔차 분기의 출력을 처음에 작게(또는 0으로) 만드는 트릭이 표준이 됐다.

기법방법출처
zero-init gamma블록 마지막 BN의 스케일을 0으로 초기화Goyal 외 (2017)
Fixup분기 마지막 층을 0으로, 나머지를 깊이로 축소Zhang 외 (2019)
ReZero분기 앞에 학습 가능한 스칼라를 0으로 시작Bachlechner 외 (2020)
LayerScale채널별 학습 가능 대각 스케일을 아주 작게 시작Touvron 외 (2021)
출력 투영 축소잔차 출력 투영 가중치를 층수의 제곱근으로 나눠 초기화GPT-2 계열 관행

공통 논리는 하나다. 학습 시작 시점에 망을 항등사상으로 만들어 둔다. 초기 유효 깊이가 사실상 0에서 출발해 학습이 진행되며 필요한 만큼만 깊어지므로, 워밍업 없이도 큰 학습률을 견딘다. Fixup·ReZero는 여기에 더해 정규화 계층 없이도 깊은 망을 학습시킬 수 있음을 보였다는 점이 이론적으로 중요하다 — 잔차 망의 학습 가능성이 정규화 계층에 의존하는 게 아니라 초기 스케일 조절에 의존한다는 뜻이기 때문이다.2

실무 체크리스트로 줄이면 이렇다.

  • 지름길은 순수 항등으로. 차원이 바뀌는 곳에서만 투영을 쓴다.
  • 정규화·활성함수는 잔차 분기 안쪽으로(사전활성화 / pre-LN).
  • 잔차 분기의 마지막 층(또는 그 스케일 파라미터)은 0 또는 아주 작은 값에서 출발.
  • 깊이가 수백을 넘어가면 1/L1/\sqrt{L} 스케일링을 명시적으로 넣는다.
  • 그래도 초반에 손실이 튀면 워밍업. 잔차 구조가 워밍업을 불필요하게 만든다는 것과 금지한다는 것은 다른 얘기다.3

9. 관련 문서[편집]

10. Footnotes[편집]

  1. 하이웨이 네트워크는 “게이트가 있으면 더 좋을 것”이라는 매우 합리적인 직관에서 출발했고, 실제로 100층 학습에 성공했다. 그런데 몇 달 뒤 게이트를 통째로 걷어낸 쪽이 더 잘 되면서 논문 인용수가 두 자릿수 배 차이로 벌어졌다. 딥러닝에서 “빼는 논문”이 “더하는 논문”을 이기는 장면은 이후로도 계속 반복된다.

  2. 그래서 “잔차 연결이 되는 건 배치 정규화 덕분 아니냐”는 질문에는 아니라고 답할 수 있다. Fixup은 정규화 계층 없이 110층 ResNet을 학습시켰고, ReZero는 12층 트랜스포머를 LN 없이 굴렸다. 다만 두 방법 모두 학습률·정규화 하이퍼파라미터에 훨씬 예민해서, 실무에서는 그냥 정규화 계층을 쓴다. 이론적 가능성과 배포 가능한 레시피는 다른 문제다.

  3. 잔차 연결이 워낙 잘 들어서 “일단 skip 넣고 보자”가 국룰이 됐는데, 곱해지는 지름길을 넣으면 오히려 원래보다 나빠질 수 있다는 것은 덜 알려져 있다. 어텐션 게이트나 학습 가능한 스칼라를 지름길 쪽에 다는 순간 항등 경로의 보장이 사라진다. 스케일링은 잔차 분기에 붙이는 것이지 지름길에 붙이는 게 아니다.