plain-20 12.92 8.35 269,722 plain-56 22.28 21.34 853,018 resnet-20 11.20 5.39 272,474 resnet-56 9.42 2.68 855,770 plain 20 -> 56 : +9.36 %p resnet 20 -> 56 : -1.78 %p
degradation : 관찰됨
역전 : 관찰됨
n: 2 hashtags: ["ResNet", "레즈넷", "잔차학습", "ResidualLearning", "잔차연결", "SkipConnection", "KaimingHe", "허카이밍", "MicrosoftResearch", "마이크로소프트리서치", "ImageNet", "이미지넷", "ILSVRC", "CIFAR10", "딥러닝", "DeepLearning", "컴퓨터비전", "ComputerVision", "CNN", "합성곱신경망", "기울기소실", "VanishingGradient", "degradation", "BatchNorm", "논문리뷰", "AI논문", "arXiv", "트랜스포머", "Colab", "코랩"] ---
깊게 쌓을수록 좋아진다. 딥러닝에서 오래 통했던 이 말이 2015년에 반례를 만났습니다.
56층짜리 신경망이 20층짜리보다 성적이 나빴어요. 그런데 원인이 과적합이 아니었습니다. 훈련 오류부터 더 높았거든요. 외운 게 아니라 배우지를 못한 겁니다.
Deep Residual Learning for Image Recognition 논문 제목·저자·초록과 Figure 1 — 출처: arXiv / Microsoft Research
어떤 논문인가
| 항목 | 내용 |
|---|---|
| 제목 | Deep Residual Learning for Image Recognition |
| 저자·소속 | Kaiming He 외 3인 · Microsoft Research |
| 공개 | arXiv 2015-12-10 · CVPR 2016 |
실험 논문입니다. 새 구조를 제안하고 ImageNet과 CIFAR-10에서 직접 측정한 결과를 싣고 있어요. 로드맵이나 리뷰가 아니니 표에 적힌 숫자는 목표치가 아니라 측정값입니다.
잔차 블록 구조도 — 입력을 출력에 그대로 더하는 지름길 (Figure 2) — 출처: arXiv / Microsoft Research
논문이 제안한 건 구조 하나입니다. 층이 입력을 받아 출력을 통째로 만들어 내게 하는 대신, 입력과 출력의 차이만 학습하게 하고 입력 자체는 지름길로 옆으로 흘려보냅니다. 이 차이를 잔차(residual)라고 부르고, 옆으로 흘리는 선을 잔차 연결 또는 지름길 연결(shortcut connection)이라고 합니다.
지름길에는 가중치가 없습니다. 그래서 잔차를 넣어도 파라미터가 늘지 않아요. 논문이 비교에 공을 들인 지점이 여기입니다.
깊게 쌓았더니 성적이 떨어졌습니다
ImageNet 검증셋에서 plain 신경망과 ResNet의 깊이별 Top-1 오류율 — 출처: 논문 Table 2 기반 자가 렌더
논문 Table 2가 이 글의 출발점입니다. 잔차 없이 그냥 쌓은 신경망(논문은 plain 이라고 부릅니다)은 18층에서 27.94%, 34층에서 28.54%였습니다. 깊게 만들었는데 나빠졌어요.
같은 자리에 잔차 연결만 넣으면 18층 27.88%, 34층 25.03%가 됩니다. 방향이 뒤집힙니다. 저자들은 이걸 34층 ResNet이 18층보다 2.8% 낫다고 적었어요.
이 비교에서 두 쪽은 파라미터 수가 같습니다. 지름길에 가중치가 없으니까요. 그래서 차이를 만든 게 모델 용량이 아니라는 게 곧바로 따라 나옵니다.
34층은 18층이 할 수 있는 걸 전부 할 수 있습니다. 그런데 실제로는 못 했습니다
논리적으로 보면 이상한 상황입니다. 34층은 앞의 18층을 그대로 두고 나머지를 아무것도 안 하는 층으로 채우기만 해도 18층과 같아집니다. 해답이 분명히 존재하는데 학습이 그걸 못 찾은 거예요. 논문은 이 현상에 degradation 이라는 이름을 붙였습니다.
기울기 소실이 원인이 아니었습니다
CIFAR-10에서 plain 신경망과 ResNet의 깊이별 학습 곡선 (Figure 6) — 출처: arXiv / Microsoft Research
여기가 이 논문에서 가장 자주 잘못 인용되는 부분입니다. 잔차 연결을 기울기 소실 해결책으로만 설명하는 글이 많은데, 논문은 그 반대를 명시했어요.
저자들은 이 최적화 어려움이 기울기 소실 때문일 가능성이 낮다고 적었습니다. 비교 대상이 전부 배치 정규화(Batch Normalization)를 쓰고 있어서 순전파 신호의 분산이 0이 아니고, 역전파 기울기의 크기도 정상 범위임을 직접 확인했다고요. 34층 plain 신경망도 어느 정도는 경쟁력 있는 정확도에 도달합니다.
그럼 무엇이냐에 대해서는 저자들도 단정하지 않았습니다. 깊은 plain 신경망의 수렴 속도가 지수적으로 느릴 수 있다는 추측을 적어 두고, 이 문제는 앞으로 연구할 대상이라고 남겼어요.
논문이 추측이라고 쓴 것을 확정으로 옮기면 왜곡입니다. 확정된 것은 현상과 해결책이지 원인이 아니에요.
숫자를 뜯어보면
CIFAR-10 테스트셋 분류 오류율 (Table 6) — 출처: arXiv / Microsoft Research
CIFAR-10 결과가 깊이의 효과를 가장 깨끗하게 보여 줍니다.
| 모델 | 파라미터 | 오류율 |
|---|---|---|
| ResNet 20층 | 0.27M | 8.75% |
| ResNet 56층 | 0.85M | 6.97% |
| ResNet 110층 | 1.7M | 6.43% |
| Highway 19층 | 2.3M | 7.54% |
파라미터가 2.3M인 Highway 19층보다 1.7M짜리 ResNet 110층이 더 낫습니다. 깊이로 얻은 이득이 크기로 얻은 이득보다 컸다는 뜻이에요.
ImageNet 쪽 숫자도 짚어 두면, 152층 단일 모델의 Top-5 검증 오류가 4.49%였고 여섯 모델을 묶은 앙상블이 테스트셋에서 3.57%를 냈습니다. 이 기록으로 ILSVRC 2015 분류 부문 1위를 했어요. 검출 쪽에서는 VGG-16을 ResNet-101로 바꾸기만 해서 COCO 표준 지표가 6.0포인트 올랐는데, 상대 기준으로 28% 개선입니다.
저자가 남긴 숙제
ResNet 110층과 1202층의 CIFAR-10 테스트 오류율 — 출처: 논문 Table 6 기반 자가 렌더
논문은 1202층까지 쌓아 봤습니다. 그리고 그 결과를 성공 사례로 쓰지 않았어요.
1202층은 훈련 오류를 0.1% 미만까지 떨어뜨렸습니다. 최적화에는 아무 문제가 없었다는 뜻입니다. 그런데 테스트 오류가 7.93%로, 110층의 6.43%보다 나빴어요.
저자들이 적은 해석은 과적합입니다. 파라미터 19.4M은 CIFAR-10이라는 작은 데이터셋에 불필요하게 큰 모델이고, 이 논문은 maxout이나 dropout 같은 강한 규제를 일부러 쓰지 않았다고 밝혔습니다. 최적화의 어려움에 집중하려고 그랬다면서, 더 강한 규제와 결합하면 결과가 나아질 수 있고 그건 앞으로 연구하겠다고 남겼어요.
정리하면 이 논문이 푼 것은 최적화 문제이고, 일반화 문제는 열어 둔 채 끝납니다. 잔차 연결이 깊이의 모든 문제를 해결했다는 서술은 논문이 하지 않은 말입니다.
이 구조가 지금 어디에 남아 있나
잔차 연결이 현재 모델 안에 남아 있는 자리를 표현한 3D 에디터리얼 콘셉트 씬 — 출처: 개념 컷 · agy 자가 생성
2015년 논문인데 지금 읽을 값이 있는 이유는, 이 구조가 비전 밖으로 나갔기 때문입니다.
트랜스포머 블록을 열어 보면 어텐션과 피드포워드 각각의 출력에 입력을 그대로 더하는 선이 있습니다. ResNet이 제안한 그 지름길입니다. 지금 쓰는 언어 모델도, 이미지 생성 모델도 이 선을 그대로 갖고 있어요.
국내 접점은 두 갈래입니다. 하나는 컴퓨터 비전의 표준 백본으로 ResNet 계열이 오래 쓰였다는 것이고, 의료영상 AI가 국내에서 인허가를 받기 시작한 시기가 이 논문 직후와 겹칩니다. 다른 하나는 지금 국내에서 돌아가는 거의 모든 모델 안에 잔차 연결이 들어 있다는 것이고요. 이 논문을 읽는 일이 옛날 모델 공부가 아닌 이유가 여기 있습니다.
직접 돌려봤습니다
논문 Figure 1과 Figure 6은 조건만 맞추면 재현됩니다. plain 20층과 56층, ResNet 20층과 56층을 같은 데이터·같은 스케줄·같은 seed로 돌렸어요.
두 블록의 forward 차이를 diff로 출력한 노트북 셀 — 출처: 직접 실행한 노트북 화면
바뀌는 코드는 두 줄입니다. 입력을 따로 받아 두고, 마지막에 그걸 더한 뒤 활성화 함수를 통과시켜요. 파라미터가 늘지 않는다는 앞의 이야기가 여기서 눈으로 확인됩니다.
네 모델의 최종 오류율과 파라미터 수가 찍힌 노트북 셀 — 출처: 직접 실행한 노트북 화면
plain은 20층 12.92%에서 56층 22.28%로 9.36%p 나빠졌고, ResNet은 11.20%에서 9.42%로 1.78%p 좋아졌습니다. 방향이 논문과 같습니다.
더 중요한 건 학습 오류입니다. plain-56은 학습 오류도 8.35%에서 21.34%로 올랐어요. 외운 게 아니라 배우지 못한 것이고, 이게 degradation 주장의 핵심입니다.
한 번 돌린 결과로는 우연을 가를 수 없습니다. seed만 바꿔 같은 조건으로 세 번 돌렸어요.
| seed | plain 20→56 | ResNet 20→56 |
|---|---|---|
| 0 | +9.36%p | -1.78%p |
| 1 | +11.79%p | -1.41%p |
| 2 | +10.23%p | -1.16%p |
세 번 다 부호가 같았습니다. 다만 두 효과의 견고함은 다릅니다. degradation은 폭이 +9.36에서 +11.79%p로 커서 시드 흔들림이 끼어들 자리가 없어요. 역전은 부호는 일관되지만 폭이 -1.16에서 -1.78%p 사이에서 움직입니다.
그래서 이 실험으로 말할 수 있는 건 여기까지입니다 — 잔차 연결을 넣으면 깊게 쌓아도 나빠지지 않는다. 얼마나 좋아지는지를 숫자로 단정할 근거는 되지 못합니다.
절대값도 논문과 다릅니다. 논문은 64,000회를 돌렸고 이 노트북은 11,700회예요. 논문의 ResNet-20 8.75%·ResNet-56 6.97%와 직접 비교할 값이 아닙니다.
🔗 링크 첨부 - https://colab.research.google.com/github/No1Joon/oh-my-notebooks/blob/main/notebooks/resnet_degradation.ipynb
CIFAR-10을 내려받는 데 몇 초, 네 모델을 전부 학습하는 데 T4 기준 20분 남짓 걸립니다.
정리하면
- 56층이 20층보다 나빴고, 원인은 과적합이 아니라 훈련 자체의 실패였습니다.
- 저자들은 기울기 소실이 원인일 가능성이 낮다고 명시했습니다. 원인은 추측으로 남겼습니다.
- 잔차 연결은 파라미터를 늘리지 않습니다. 그래서 개선을 용량 증가로 설명할 수 없습니다.
- 1202층은 훈련 오류 0.1% 미만인데 테스트가 나빠졌습니다. 일반화 문제는 열어 둔 채 끝납니다.
- 그 지름길이 지금 트랜스포머 블록 안에 그대로 들어 있습니다.
- seed 를 셋으로 바꿔 돌려도 부호는 같았습니다. 다만 견고한 건 degradation 쪽이고 역전 폭은 흔들립니다.
이 논문이 증명한 건 깊이가 좋다는 게 아니라, 깊이를 쓸 수 있게 만드는 장치가 따로 필요하다는 것입니다.
참고 출처
- [arXiv] Deep Residual Learning for Image Recognition — Kaiming He, Xiangyu Zhang, Shaoqing Ren, Jian Sun (본문 수치·본문 이미지 4점 출처)
- 본문의 오류율·파라미터 수는 논문 Table 2와 Table 6에서 직접 옮긴 값입니다
- 기울기 소실에 대한 서술과 1202층 해석은 논문 본문의 저자 서술이며, 원인은 저자들이 추측으로 남긴 부분입니다
- 재현 수치 측정 조건: Tesla T4 · torch 2.11.0 · 30 epoch(11,700회) · 배치 128 · SGD 모멘텀 0.9 · 학습률 0.1 코사인 감쇠 · seed 0·1·2 · seed 외 조건 동일
- 본문 표와 노트북 화면의 오류율은 seed 0 값입니다. 시드별 값은 위 재현 표에 있습니다