인지야공

인지야공/딥러닝 기초 정리/13번째 글

과적합과 규제 — 외우지 못하게 막는 것과 모르는 것을 가르치는 것

실행: python NN_54_regularization.py (검증 환경: torch 2.8.0+cu129, RTX 5080) 이 글의 수치는 전부 그 스크립트를 돌려 얻은 것이다.


학습 정확도는 높은데 시험 정확도가 낮으면 과적합이라고 부른다. 처방도 교과서에 나란히 적혀 있다 — 가중치 감쇠, 드롭아웃, 데이터 증강, 조기 종료. 이 넷을 같은 조건에서 나란히 재 봤다. 결과는 교과서의 나열 순서와 전혀 달랐다.


1. 두 종류의 처방 — 그림으로 먼저

넷은 하는 일이 두 갈래로 나뉜다.

  • 외울 수 있는 양을 줄인다: 가중치 감쇠(가중치를 작게 유지), 드롭아웃(뉴런을 무작위로 끔), 조기 종료(외우기 전에 멈춤)
  • 모르는 것을 가르친다: 데이터 증강(이름이 바뀌지 않는 변형을 보여 줌)
용량 제한과 데이터 증강의 차이 위 줄은 학습 데이터가 도형 위치 축 위에 드문드문 있고, 용량을 제한해도 각 점 주변만 알게 되어 빈자리가 남는다. 아래 줄은 각 학습 점을 조금씩 옮긴 사본이 빈자리를 채운다. 도형이 놓인 위치 → (파란 점 = 학습 데이터, 개념도) 감쇠·드롭아웃외울 양을 줄인다 데이터 증강±2px 옮긴 사본 점 사이의 빈자리(시험 도형이 놓일 곳)는 여전히 모른다 → 시험 19% 옮겨도 같은 도형이라는 사실이 빈자리를 메운다 → 시험 77%

첫째 갈래는 모델을 덜 외우게 할 뿐 새 정보를 주지 않는다. 둘째 갈래는 “옮긴 도형도 같은 이름”이라는 정보를 준다. 어느 쪽이 필요한지는 모델이 무엇을 모르는지에 달렸다.

θ←θ−η ∇L−ηλ θ⏟가중치 감쇠h←m⊙h1−p,  mi∼Bernoulli(1−p)⏟드롭아웃x←T(x),  y 그대로⏟증강\underbrace{\theta \leftarrow \theta - \eta\,\nabla L - \eta\lambda\,\theta}_{\text{가중치 감쇠}} \qquad \underbrace{h \leftarrow \frac{m \odot h}{1-p},\ \ m_i\sim\text{Bernoulli}(1-p)}_{\text{드롭아웃}} \qquad \underbrace{x \leftarrow T(x),\ \ y \text{ 그대로}}_{\text{증강}}
기호뜻
η\eta, λ\lambda학습률, 감쇠 계수. 매 스텝 가중치를 ηλ\eta\lambda 비율만큼 0 쪽으로 당긴다
pp드롭아웃 확률. 학습 때 뉴런을 이 확률로 끄고 남은 것을 1/(1−p)1/(1-p) 배 한다
TT정답을 바꾸지 않는 변형. 여기서는 ±2px 이동 + 약한 잡음

2. 직접 재 보기

도형 12종, 클래스당 15장, 모두 180장을 16×16 캔버스에 ±3px 범위로 놓았다. 모델은 은닉 512 두 층짜리 MLP(파라미터 400,396개)다. 시험셋 3,000장은 끝까지 따로 두었고, 조기 종료가 멈출 때를 고르는 검증셋 1,200장을 또 따로 떼었다.

과적합과 규제 실험

[A] 180장을 외운 뒤

스텝학습 정확도시험 정확도
5098.9%18.9%
200100.0%19.4%
1,000100.0%18.9%
3,000100.0%18.3%

100스텝 만에 180장을 다 외웠다. 시험 정확도의 최고점도 그때(19.5%)이고, 그 뒤 2,900스텝 동안 조금씩 내려갔을 뿐이다. 교과서의 과적합 그림 — 시험 정확도가 올라가다 어느 순간 꺾이는 U자 — 는 나타나지 않았다. 올라갈 것이 없었다. 파라미터 40만 개 앞에서 180장은 처음부터 외울 수 있는 양이었다.

[B] 처방을 나란히

같은 180장, 같은 망에 처방을 하나씩 걸었다. 3개 시드 평균이다.

처방끝까지 학습조기 종료
규제 없음19.1%19.7%
가중치 감쇠 0.119.4%19.5%
가중치 감쇠 1.018.2%19.9%
드롭아웃 0.519.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로 줄었다.


참고

표시는 이 브라우저에만 남는다. 서버로 가는 것은 없다.