Ch.05
과적합 방지와 정규화: 외우지 않고 이해하게 하기
시험 문제를 통째로 외워 100점을 받았지만, 숫자만 살짝 바꾼 다른 시험지를 주면 0점을 받는 학생을 상상해 보세요. 인공지능도 이와 똑같이 과적합(overfitting)이라는 함정에 빠질 수 있습니다. 학습(train) 데이터에는 완벽하게 정답을 맞히지만, 한 번도 보지 못한 새로운 데이터(val/test)에서는 성능이 뚝 떨어지는 현상이죠.
이전 장들에서 모델을 최적화하고 학습시키는 방법을 배웠다면, 이번 장에서는 모델이 융통성을 가지고 일반화(generalization)를 할 수 있도록 돕는 훈련 기법들을 배웁니다. 가중치가 너무 커지지 않게 누르는 L2 정규화(Regularization), 뉴런을 무작위로 끄면서 학습하는 드롭아웃(Dropout), 모델이 망가지기 전에 멈추는 조기 종료(Early stopping), 그리고 경험을 늘려주는 데이터 증강(Data Augmentation)을 개념부터 실전 적용까지 단계별로 알아봅니다.
※ 주의: 다른 장에서 배우는 Batch Normalization(데이터의 스케일을 맞추는 정규화)과 여기서 말하는 Regularization(과적합을 막는 정규화)은 한글 번역이 같아 헷갈리기 쉽지만, 역할이 완전히 다릅니다!
아래 2×2 도식은 네 가지 정규화 기법이 학습을 적용 전 → 적용 후 어떻게 바꾸는지 보여 줍니다.
각 패널은 적용 전(왼쪽) → 적용 후(오른쪽) 변화를 보여 줍니다. Train/Val은 val 상승 시 early stop, Dropout은 학습 시 뉴런 off·추론 시 전체 활성, L2는 가중치 수축, Data Aug는 샘플 다양화로 결정 경계를 매끈하게 만듭니다.
외우지 말고 일반화 — train·val, 가중치, 뉴런, 데이터
과적합은 멈추고·억제하고·다양하게
과적합 방지와 정규화: 외우지 않고 이해하게 하기
1. 과적합(Overfitting)이란? (연습문제만 만점, 실전은 낙제)
개념: 인공지능 모델이 학습(train) 데이터의 패턴뿐만 아니라 불필요한 노이즈나 지엽적인 세부사항까지 통째로 외워버리는 현상을 말합니다. 이렇게 되면 완전히 새로운 데이터가 주어졌을 때 유연하게 대처하지 못해 성능이 급격히 떨어집니다.
직관적 비유: 운전면허 기능시험을 상상해 보세요. 시험장의 공식(ex. '두 번째 나무에서 핸들을 오른쪽으로 꺾는다')만 달달 외운 사람은 진짜 도로에 나가면 사고를 냅니다. 원리를 이해한 것이 아니라 특정 상황을 암기했기 때문입니다.
실전 팁: 학습할수록 train loss는 계속 낮아지는데, 어느 순간부터 val loss가 오히려 치솟기 시작한다면 과적합이 진행 중인 것입니다. 이 두 지표 간의 차이를 일반화 격차(Generalization gap)라고 부르며, 이를 줄이는 것이 이번 장의 목표입니다.
2. L2 정규화 (L2 Regularization) / Weight Decay — 무거운 짐에 벌금 매기기
개념: 모델의 가중치(weight)가 너무 커지면, 데이터의 작은 노이즈에도 모델이 지나치게 민감하게 반응하여 과적합이 발생합니다. 이를 막기 위해 손실 함수(Loss)에 가중치의 크기에 비례하는 벌점(Penalty)을 추가하는 기법입니다.
핵심 수식:
수식 설명: 기존의 오차(Loss) 뒤에 가중치()의 크기만큼 벌점을 더합니다. (람다)는 '벌금을 얼마나 세게 매길지' 결정하는 조절 인자입니다. 가 클수록 모델은 가중치를 최대한 작게 유지하려고 노력합니다.
직관적 비유: 비행기에 탑승할 때 수하물 무게 제한이 있는 것과 같습니다. 짐(가중치)이 무거우면 엄청난 추가 요금(벌점)을 내야 하므로, 꼭 필요한 핵심적인 물건만 챙겨서 가방을 가볍고 단순하게 만들게 됩니다.
실전 팁: 를 너무 크게 하면 모델이 쫄아서 아무것도 학습하지 못하는 과소적합이 될 수 있습니다. val 지표를 보며 조금씩 조절하세요.
3. 드롭아웃 (Dropout) — 팀원을 랜덤으로 빼며 연습하기
개념: 인공신경망이 학습할 때마다 각 뉴런을 특정 확률()로 잠시 꺼두고(비활성화) 학습을 진행하는 기법입니다. 특정 뉴런 몇 개에만 과도하게 의존하는 현상을 막고, 신경망 전체가 골고루 특징을 학습하게 만듭니다.
직관적 비유: 축구 국가대표팀 훈련에서 에이스 선수 한두 명을 무작위로 빼고 연습 경기를 하는 것과 같습니다. 에이스에게만 공을 몰아주는 의존적인 플레이를 고치고, 나머지 선수들이 협력하여 스스로 득점할 수 있는 능력을 기르도록 만드는 훌륭한 훈련법입니다.
실전 팁: 보통 뉴런을 끌 확률 는 ~ 사이를 많이 사용합니다. 학습 시에는 남은 뉴런 출력을 로 스케일해 기대값을 맞춥니다. 실전 추론(Inference) 단계에서는 모든 뉴런을 100% 사용해야 제 성능이 나옵니다.
4. 조기 종료(Early Stopping) & 데이터 증강(Data Augmentation) — 적당할 때 멈추고, 다양하게 보기
개념 및 비유:
- 조기 종료 (Early Stopping): 오븐에 쿠키를 구울 때, 레시피에 '30분'이라 적혀 있어도 타는 냄새가 나면 당장 불을 꺼야 합니다. 인공지능도 정해진 횟수(epoch)를 맹목적으로 다 채우지 않고, 검증(val) 성능이 개선되지 않으면 즉시 학습을 멈추어 가장 상태가 좋았던 모델을 구출해 냅니다.
- 데이터 증강 (Data Augmentation): 고양이 사진을 좌우로 뒤집거나, 회전시키거나, 잘라내도 여전히 고양이입니다. 이렇게 원본 데이터를 약간씩 변형해 새로운 데이터처럼 만들어 학습량을 늘리는 기법입니다. 수학 문제를 풀 때 숫자만 바꿔가며 여러 번 연습하는 것과 같습니다.
실전 팁: 데이터 자체가 적을 때는 복잡한 기법보다 데이터 증강을 통해 유효한 데이터의 양과 다양성을 늘려주는 것이 최우선 해결책입니다. val set을 train에 합치지 마세요.
정규화 기법 한눈에 짚기
과적합 격차 — train은 잘 맞지만 val/test는 나쁠 때 의심합니다.
쉬운 설명: 학습 데이터에서는 점수가 잘 나오는데, 처음 보는 문제(val)에서는 갑자기 틀리기 시작하면 외운 것에 가깝다는 신호입니다. train loss는 계속 내려가는데 val loss만 올라가면 특히 과적합을 의심하세요.
핵심 지표: train loss ↓, val loss ↑ (또는 train acc ≫ val acc)
기호 정리 — generalization gap(일반화 격차) 은 train 성능과 val 성능의 차이입니다. gap이 크면 암기, 작고 val도 좋으면 일반화가 잘 된 편입니다.
숫자 예: train acc 99%, val 60% → gap 39%p — 과적합 신호.
비유: 운전면허 시험장 공식만 외운 사람 — 같은 코스면 만점, 새 도로면 낙제.
L2 / Weight Decay — 큰 가중치에 벌점을 줍니다.
쉬운 설명: 모델의 '짐'(가중치)이 너무 무거우면 작은 노이즈에도 과민 반응합니다. 그래서 손실에 '무거우면 벌금' 항을 더해 가방을 가볍게 들고 가도록 유도합니다.
핵심 수식:
수식 설명 — 는 원래 맞춰야 할 오차(예: Cross Entropy)입니다. 는 벌금 세기(클수록 가중치를 더 작게). 는 각 가중치의 제곱 — 큰 가중치일수록 벌점이 커집니다.
숫자 예: , , → L2 항 .
비유: 수하물 초과 요금 — 짐이 무거울수록 더 많이 냅니다.
Dropout — 학습 시 일부 뉴런을 랜덤으로 끕니다.
쉬운 설명: 매번 다른 선수를 벤치에 두고 연습해, 특정 뉴런(에이스)에만 의존하지 않게 만듭니다. 추론할 때는 전원 출전 — 학습 때처럼 끄면 안 됩니다.
핵심: 학습 시 확률 로 off · 남은 출력은 로 스케일 · 추론 시 마스크 없음
수식 설명 — 는 끌 비율(보통 0.2~0.5). 는 '일부가 빠졌으니 남은 쪽을 키워 평균을 맞춘다'는 보정입니다.
숫자 예: → 스케일 . → .
비유: 축구 대표팀 — 에이스를 빼고도 팀이 골 넣도록 훈련.
Early Stopping — val이 더 이상 좋아지지 않으면 멈춥니다.
쉬운 설명: 쿠키가 타기 전에 오븐을 끄듯, val 성능이 나빠지기 시작하면 학습을 멈추고 가장 맛있었던 시점의 모델을 저장합니다. epoch 수를 무조건 채우는 것보다 val을 보는 것이 안전합니다.
핵심: val loss 최저 시점 체크포인트 저장 · patience epoch 동안 개선 없으면 중단
수식 설명 — patience는 'val이 안 좋아져도 N번은 더 지켜본다'는 인내심입니다. 일시적 하락에 너무 일찍 멈추지 않게 합니다.
숫자 예: val 최소가 epoch 12 → epoch 12 근처 가중치를 배포에 사용.
비유: 마라톤에서 체력이 떨어지기 전에 멈추고, 최고 기록만 남김.
왜 중요한지
1. '우물 안 개구리' 모델 걸러내기
train 정확도가 99%라도, 실제 서비스(val/test)에서 60%밖에 맞히지 못한다면 실무에서는 아무 쓸모가 없습니다. 진짜 실력은 처음 보는 데이터도 잘 맞히는 일반화(Generalization) 능력에 있으며, 이번 장의 정규화 기법들은 이 능력을 극대화해 줍니다.
2. 오캄의 면도날: 덜 복잡할수록 더 안정적이다
L2 정규화와 드롭아웃은 모델이 불필요하게 복잡한 규칙을 스스로 만들어내는 것을 방지합니다. 모델이 지나치게 복잡하면 데이터의 사소한 잡음까지 학습해버리지만, 정규화로 다듬어진 단순한 모델은 예측이 훨씬 안정적이고 신뢰할 수 있습니다.
3. 실무 AI 개발의 필수 안전벨트
AI를 연구하거나 실제 서비스를 개발할 때 데이터 분리(train/val split), 조기 종료(early stopping), 가중치 제한(weight decay)은 선택이 아닌 필수 안전장치입니다. 이러한 설정 없이 모델을 학습시키는 것은 브레이크 없는 자동차를 운전하는 것과 같습니다.
어떻게 쓰이는지
① 진단: 우리 모델이 과적합일까?
실무에서 가장 먼저 마주치는 상황은 이렇습니다. 학습(train) 데이터에서는 정확도가 높고 손실도 잘 내려가는데, 검증(val) 데이터만 유독 성적이 나쁩니다. 마치 연습문제는 만점인데 모의고사에서만 틀리는 학생과 같죠. 이때는 당장 모델을 더 키우거나 epoch를 늘리기보다, 과적합인지부터 확인하는 것이 순서입니다.
먼저 train과 val의 손실(loss) 그래프를 나란히 그려 보세요. train은 계속 내려가는데 val만 어느 시점부터 올라가기 시작하면, 그 지점이 바로 일반화 격차가 벌어지기 시작한 순간입니다. 원인이 확인되면 L2 정규화나 드롭아웃을 넣어 모델이 지나치게 복잡해지지 않게 억제하고, 조기 종료(early stopping)로 val이 나빠지기 전에 학습을 멈추도록 설정합니다.
② 튜닝: L2와 드롭아웃 조절하기
정규화를 켰다고 끝이 아닙니다. 얼마나 세게 걸지가 성패를 가릅니다. L2의 벌금 크기(, weight decay)는 처럼 아주 작은 값에서 시작해, val 성능을 보며 조금씩 올리는 편이 안전합니다. 처음부터 벌금을 세게 매기면 모델이 필요한 패턴만 배우기도 전에 움츠러들어 과소적합이 될 수 있기 때문입니다.
드롭아웃은 보통 뉴런의 20%에서 50% 정도를 끄는 구간에서 시험해 봅니다. 학습 중에는 일부 뉴런이 빠진 상태로 연습하지만, 실제 평가·서비스(추론) 단계에서는 반드시 드롭아웃을 끄고 전체 뉴런을 사용해야 합니다. 학습 때와 추론 때의 동작이 다르다는 점만 기억해 두어도 실수를 많이 줄일 수 있습니다.
③ 설정: 똑똑한 조기 종료(Early Stopping)
조기 종료는 '학습을 언제 그만둘지'를 val 지표가 대신 정해 주게 하는 장치입니다. 매 epoch마다 검증 손실(val loss)을 기록하면서, 지금까지 가장 좋았던 시점의 가중치를 따로 저장해 둡니다. val이 더 이상 좋아지지 않으면 학습을 멈추고, 마지막 epoch가 아니라 가장 성적이 좋았던 그 시점의 모델을 씁니다.
여기서 patience(인내심) 은 'val이 잠깐 나빠져도 바로 멈추지 않고, 5~20 epoch 정도는 더 지켜보겠다'는 뜻입니다. 학습 곡선은 들쭉날쭉할 수 있어서, 하루 이틀 운이 나쁜 것처럼 보이는 구간에 너무 일찍 학습을 끊어 버리는 실수를 막아 줍니다.
④ 근본 해결책: 데이터가 왕이다
L2, 드롭아웃, 조기 종료는 모두 유용하지만, 과적합을 가장 확실하게 줄이는 방법은 여전히 좋은 데이터를 더 많이 갖는 것입니다. 데이터가 충분하면 모델이 우연한 노이즈까지 외울 여지가 줄어들고, 새로운 상황에도 더 잘 맞서게 됩니다.
데이터를 당장 더 모을 수 없다면, 이미지를 회전·자르기·뒤집기 하는 데이터 증강(augmentation) 으로 '비슷하지만 조금 다른' 샘플을 만들어 학습량을 늘려 보세요. 같은 고양이를 여러 각도에서 본 것처럼, 모델이 더 넓게 일반화하도록 돕습니다. 실무에서는 화려한 모델 구조를 바꾸기 전에, 데이터를 늘리거나 다양하게 만드는 쪽을 먼저 검토하는 것이 흔히 더 효과적입니다.
요약
이 장의 핵심은 한 문장으로 말하면, 모델이 학습 데이터만 통째로 외우지 않도록 막고 새로운 데이터에도 잘 대응하는 일반화를 키우는 것입니다. 그래서 L2 정규화, 드롭아웃, 조기 종료, 데이터 증강이라는 네 가지 도구를 배웠습니다.
과적합이 의심될 때는 train과 val 사이의 성능 격차를 먼저 봅니다. L2 정규화는 가중치가 너무 커지지 않게 벌점을 주어 모델을 단순하게 유지하고, 드롭아웃은 학습할 때만 뉴런을 무작위로 끄며 특정 경로에만 의존하는 습관을 줄입니다. 추론할 때는 반대로 전체 뉴런을 켠 상태로 평가해야 합니다. 조기 종료는 val이 더 이상 좋아지지 않을 때 학습을 멈추고, 가장 좋았던 시점의 모델을 남깁니다.
실무에서는 모델 구조나 하이퍼파라미터를 바꾸기 전에 데이터를 더 모으거나 증강하는 것을 우선 검토하는 것이 좋습니다. 그리고 L2 강도, 드롭아웃 비율, patience처럼 설정을 바꿀 때는 한 번에 하나씩만 조정하며 val 지표가 어떻게 변하는지 관찰하면, 무엇이 도움이 됐는지 훨씬 분명하게 알 수 있습니다.
문제 풀이를 위한 설명
이 장의 문제는 크게 과적합 진단과 정규화 기법 선택 두 줄기로 나뉩니다. 과적합이 의심될 때 가장 먼저 볼 것은 train과 val(또는 test)의 성능 격차입니다. train 정확도·손실은 좋은데 val만 떨어지면, 모델이 학습 데이터를 통째로 외운 상태일 가능성이 큽니다. 이때는 모델을 더 크게 만드는 것보다 L2/weight decay, dropout, early stopping, 데이터 증강을 먼저 검토하는 편이 일반적입니다.
반대로 train·val 둘 다 성능이 낮으면 과소적합입니다. 모델 용량이 부족하거나 학습이 덜 됐거나, 정규화가 너무 강한 경우가 많습니다. 이때는 모델을 키우고 epoch를 늘리거나 학습률을 조정하고, 나 dropout 비율을 줄이는 방향을 생각하세요.
L2 정규화·weight decay는 손실에 벌점을 더해 가중치가 지나치게 커지지 않게 합니다. Dropout은 학습 중 일부 뉴런을 랜덤으로 끄며 특정 뉴런 조합에만 의존하는 co-adaptation을 줄입니다. 단, dropout은 학습 시에만 적용하고 추론·평가 시에는 전체 뉴런을 사용합니다. Early stopping은 val 지표가 patience epoch 동안 개선되지 않으면 학습을 멈추고, val이 가장 좋았던 시점의 가중치를 저장합니다. 데이터 증강은 학습 샘플의 다양성을 늘려 암기를 줄입니다.
문항에서 배치 정규화(Batch Normalization) 과 과적합 방지 정규화(L2·dropout 등) 를 구분하세요. 배치 정규화는 층마다 활성화의 평균·분산을 맞춰 학습을 안정화하는 기법이고, L2·dropout은 과적합·큰 가중치를 억제하는 목적이 다릅니다. 키워드가 'train–val 격차', 'patience', 'weight decay', 'dropout ', '추론 시' 등이면 이 장 범위 안에서 풀 수 있는 단서입니다.
정의형 문제를 풀 때는 먼저 ‘이 지표 조합이 무엇을 의미하는가’를 떠올립니다. "과적합에서 가장 흔한 패턴은?"이라면
① train·val 둘 다 나쁨은 과소적합이고,
③ 둘 다 완벽은 현실적으로 드뭅니다. train은 좋고 val/test만 나쁜
②가 과적합의 전형이므로 정답 2입니다.
"early stopping의 가장 적절한 기준은?"이라면 train loss만 보면(①) 계속 외우게 될 수 있고, epoch를 무한히(③) 두는 것은 조기 종료의 목적과 맞지 않습니다. val loss나 val 지표가 더 이상 좋아지지 않을 때 멈추는
②가 맞으므로 정답 2입니다.
"과적합을 진단할 때 먼저 볼 것은?" → GPU 사용률(①)이나 epoch 수(③)만으로는 부족합니다. train–validation 성능 격차(②)를 보면 외움 여부를 가장 직접적으로 판단할 수 있습니다. → 정답 2
응용형 문제에서는 수치와 상황을 먼저 읽습니다. "train 정확도 99%, val 55%"처럼 train은 매우 좋고 val만 크게 떨어졌다면 과적합이 거의 확실합니다. 모델·층을 더 키우는
①은 과적합을 악화시키기 쉽고, val set을 삭제하는
③은 문제를 숨길 뿐입니다. 정규화·early stopping·데이터 증강(②)을 먼저 시도하는 것이 합리적이므로 정답 2입니다.
"train loss는 계속 ↓인데 val loss가 epoch 20부터 ↑" → 더 오래 외우는 것보다 early stopping으로 최적 val 시점을 저장(①)하는 것이 맞습니다. 학습률을 10배(②) 올리거나 dropout을 끄고 더 학습(③)하면 val 악화가 이어질 수 있습니다. → 정답 1
"L2와 dropout을 적용했는데도 val이 나쁘다"면 를 100배 키우거나 dropout을 끄는 것보다, 아직 시도하지 않은 데이터 증강과 patience 있는 early stopping(①)이 다음 단계로 자연스럽습니다. → 정답 1
계산형 문제는 공식에 숫자를 차근차근 넣으면 됩니다. L2 항 에 , , 를 대입하면 입니다. → 정답
②
참/거짓 문제 — "Dropout은 추론 시에도 같은 비율로 뉴런을 끈다"는 흔한 오해입니다. dropout은 학습 시에만 무작위 마스크를 쓰고, 추론 시에는 마스크 없이 전체 뉴런으로 평가합니다. 따라서 거짓(0) 이 맞습니다.
"Weight decay와 L2 정규화는 밀접히 관련된다" → 목적 모두 가중치 크기를 억제하므로 참(1) 입니다.
"를 무조건 크게 하면 test 성능이 항상 좋아진다" → 너무 크면 과소적합이 되므로 거짓(0) 입니다.
선택형 문제 — "L2 정규화가 손실에 더하는 항의 형태는?" → 데이터 손실 뒤에 가 붙는
① 형태가 표준입니다. → 정답 1
"L2와 weight decay의 관계는?" → 실무에서 거의 같은 목적(가중치 억제)으로 쓰이므로 L2 ≈ weight decay, 정답 2입니다.
개념형 문제 — dropout 일 때 학습 중 기대 출력을 맞추려면 남은 뉴런에 배 스케일을 곱합니다. → 정답 2
"patience=5"는 val이 5 epoch 연속 개선되지 않으면 학습 중단을 검토한다는 뜻입니다. 모델을 즉시 삭제하는 것이 아니라 early stopping 신호이므로 정답 2입니다.
"배치 정규화 vs 과적합 방지 정규화(L2·dropout)" → 후자는 과적합·가중치 억제, 배치 정규화는 활성화 스케일 정규화 목적이 다릅니다. 동일하다고(①) 보거나 무관하다고(③) 보는 것은 틀립니다. → 정답 2
"weight decay의 직접 효과는?" → 가중치 크기 억제(①)가 핵심입니다. 배치 norm(②)이나 손실 삭제(③)와는 다릅니다.
계산형 문제 — dropout 출력 보정: 일 때 스케일 . 기존 출력 100이면 . → 정답
②
, , 일 때 . → 정답
②