인지야공/딥러닝 기초 정리/13번째 글
과적합과 규제 — 외우지 못하게 막는 것과 모르는 것을 가르치는 것
실행:
python NN_54_regularization.py(검증 환경: torch 2.8.0+cu129, RTX 5080) 이 글의 수치는 전부 그 스크립트를 돌려 얻은 것이다.
학습 정확도는 높은데 시험 정확도가 낮으면 과적합이라고 부른다. 처방도 교과서에 나란히 적혀 있다 — 가중치 감쇠, 드롭아웃, 데이터 증강, 조기 종료. 이 넷을 같은 조건에서 나란히 재 봤다. 결과는 교과서의 나열 순서와 전혀 달랐다.
1. 두 종류의 처방 — 그림으로 먼저
넷은 하는 일이 두 갈래로 나뉜다.
- 외울 수 있는 양을 줄인다: 가중치 감쇠(가중치를 작게 유지), 드롭아웃(뉴런을 무작위로 끔), 조기 종료(외우기 전에 멈춤)
- 모르는 것을 가르친다: 데이터 증강(이름이 바뀌지 않는 변형을 보여 줌)
첫째 갈래는 모델을 덜 외우게 할 뿐 새 정보를 주지 않는다. 둘째 갈래는 “옮긴 도형도 같은 이름”이라는 정보를 준다. 어느 쪽이 필요한지는 모델이 무엇을 모르는지에 달렸다.
| 기호 | 뜻 |
|---|---|
| , | 학습률, 감쇠 계수. 매 스텝 가중치를 비율만큼 0 쪽으로 당긴다 |
| 드롭아웃 확률. 학습 때 뉴런을 이 확률로 끄고 남은 것을 배 한다 | |
| 정답을 바꾸지 않는 변형. 여기서는 ±2px 이동 + 약한 잡음 |
2. 직접 재 보기
도형 12종, 클래스당 15장, 모두 180장을 16×16 캔버스에 ±3px 범위로 놓았다. 모델은 은닉 512 두 층짜리 MLP(파라미터 400,396개)다. 시험셋 3,000장은 끝까지 따로 두었고, 조기 종료가 멈출 때를 고르는 검증셋 1,200장을 또 따로 떼었다.

[A] 180장을 외운 뒤
| 스텝 | 학습 정확도 | 시험 정확도 |
|---|---|---|
| 50 | 98.9% | 18.9% |
| 200 | 100.0% | 19.4% |
| 1,000 | 100.0% | 18.9% |
| 3,000 | 100.0% | 18.3% |
100스텝 만에 180장을 다 외웠다. 시험 정확도의 최고점도 그때(19.5%)이고, 그 뒤 2,900스텝 동안 조금씩 내려갔을 뿐이다. 교과서의 과적합 그림 — 시험 정확도가 올라가다 어느 순간 꺾이는 U자 — 는 나타나지 않았다. 올라갈 것이 없었다. 파라미터 40만 개 앞에서 180장은 처음부터 외울 수 있는 양이었다.
[B] 처방을 나란히
같은 180장, 같은 망에 처방을 하나씩 걸었다. 3개 시드 평균이다.
| 처방 | 끝까지 학습 | 조기 종료 |
|---|---|---|
| 규제 없음 | 19.1% | 19.7% |
| 가중치 감쇠 0.1 | 19.4% | 19.5% |
| 가중치 감쇠 1.0 | 18.2% | 19.9% |
| 드롭아웃 0.5 | 19.3% | 19.8% |
| 데이터 증강 | 75.6% | 77.4% |
| 셋 다 (감쇠 0.1 + 드롭아웃 + 증강) | 71.8% | 74.4% |
가중치 감쇠와 드롭아웃은 아무 일도 하지 않았다. 감쇠를 10배(1.0)로 올려도 18.2%다. 앞의 넷에서 조기 종료는 0.1~1.7%p를 보탰지만 출발점이 19%라 의미가 없다. 데이터 증강 하나가 19% → 75.6%를 만들었다.
그리고 셋을 다 쓰면 증강만 쓸 때보다 낮았다(71.8% < 75.6%). 증강으로 데이터가 사실상 무한히 다양해진 상태에서는 외울 양을 줄이는 제약이 오히려 배우는 것까지 막는다.
이 과제에서 모델이 몰랐던 것은 “같은 도형이 옆으로 가도 같다”였다. 가중치를 작게 하거나 뉴런을 꺼도 그 사실은 생기지 않는다. CNN 편이 같은 사실을 구조로 넣었다면, 증강은 데이터로 넣은 것이다.
[C] 데이터가 늘면
데이터 양을 바꿔 가며 “규제 없음”과 “셋 다”를 비교했다(2개 시드 평균).
| 클래스당 | 규제 없음 | 셋 다 | 규제의 몫 |
|---|---|---|---|
| 8장 | 17.7% | 63.5% | +45.8%p |
| 15장 | 19.0% | 71.0% | +52.0%p |
| 40장 | 28.7% | 82.4% | +53.7%p |
| 100장 | 51.4% | 83.3% | +32.0%p |
| 300장 | 78.8% | 84.8% | +6.0%p |
규제의 몫은 데이터가 가장 적을 때가 아니라 중간(40장)에서 가장 컸다. 8장이면 증강으로 불려도 볼 것 자체가 모자라고, 300장이면 옮겨진 도형을 이미 충분히 봐서 증강이 가르칠 것이 줄어든다. 데이터가 늘수록 두 선이 만나는 방향이다.
3. 흔한 오해와 한계
1. “과적합이면 드롭아웃부터” — 이 과제에서 드롭아웃은 0.2%p밖에 움직이지 않았다. 먼저 물어야 할 것은 “모델이 무엇을 모르는가”다. 모르는 것이 불변성(옮겨도, 돌려도, 밝기가 바뀌어도 같다)이면 증강이나 구조가 답이다.
2. “규제는 많이 걸수록 안전하다” — [B]에서 셋을 다 쓰니 증강만 쓸 때보다 3.8%p 낮았다. 규제끼리는 더해지지 않는다.
3. “과적합은 시험 정확도가 꺾이는 것이다” — 그 U자는 모델이 외우기 전에 먼저 일반화할 수 있을 때 보인다. 여기처럼 처음부터 외울 수 있으면 곧장 평평하다. 뒤의 그로킹 편은 그 반대로, 다 외운 한참 뒤에 시험 정확도가 뛰어오르는 경우를 다룬다.
4. 가중치 감쇠가 쓸모없다는 뜻은 아니다 — 이 결과는 “데이터 180장, 모자란 것이 불변성인 과제”에 대한 것이다. 큰 모델을 오래 학습시킬 때 가중치 감쇠는 최적화를 안정시키고 일반화에도 기여한다(최적화 편). 다만 새 정보를 만들지는 않는다.
4. 한 문단 요약
도형 180장으로 파라미터 40만 개 MLP를 학습시키자 100스텝 만에 학습 100%, 시험은 19%에서 평평했다. 교과서의 처방을 같은 조건에서 나란히 걸었더니 가중치 감쇠(0.1과 1.0)와 드롭아웃은 모두 19% 근처 그대로였고, 조기 종료는 2%p 안쪽을 보탰다. 데이터 증강만 19%를 75.6%로 끌어올렸다. 넷을 다 쓰면 오히려 71.8%로 낮아졌다. 외울 양을 줄이는 처방은 새 정보를 주지 않는다. 이 과제에서 모자랐던 것은 “옮겨도 같은 도형”이라는 지식이었고, 그것을 준 것은 증강뿐이었다. 규제의 몫은 데이터가 중간쯤(클래스당 40장)일 때 53.7%p로 가장 컸고, 300장에서는 6.0%p로 줄었다.