Bias–Variance와 과적합을 실제로 진단하는 법

“high bias는 underfitting, high variance는 overfitting"은 다들 왼다. 그런데 실제 학습 결과를 보고 내 모델이 둘 중 뭔지, 그리고 뭘 해야 하는지를 말할 수 있는 사람은 훨씬 적다. 이 글은 둘 다 다룬다: 먼저 bias–variance 분해를 쓸모 있을 만큼 탄탄하게, 그다음 실제 모델의 과적합을 진단하는 실무 플레이북 — learning curve, train/validation gap, cross-validation, 그리고 함정들. 해결책을 다룬 L1/L2·dropout 글의 진단 편이다. 분해 타깃 \(y = f(x) + \varepsilon\), 노이즈 \(\mathbb{E}[\varepsilon]=0\), \(\text{Var}(\varepsilon)=\sigma^2\)라 하자. 무작위 데이터셋으로 모델 \(\hat f\)를 학습시키고, 한 점 \(x\)에서의 기대 squared error를 — 노이즈와 어떤 training set을 뽑았는지의 무작위성 둘 다에 대해 평균 내어 — 보면: ...

2026년 3월 23일 · 6 분

Dropout: 왜 일반화에 도움이 되나, 그리고 학습/추론 스케일링 트릭

Dropout은 두 아이디어를 붙여놓은 것이다: 학습 때 유닛을 무작위로 꺼버리고, 추론 때는 조용히 전부 다시 켠다. 흥미로운 지점은 (1) 유닛을 무작위로 끄는 게 왜 일반화를 개선하는가, 그리고 (2) “전부 다시 켠다"가 공짜가 아니라는 것 — 보정을 안 하면 activation이 잘못된 스케일로 나온다. 이 스케일링을 틀리는 건 딥러닝에서 가장 흔한 버그 중 하나라, 이 글은 둘 다 L1/L2 글과 같은 엔지니어링 깊이로 짚는다. Dropout이 하는 일 학습 중 dropout layer는 각 유닛의 activation \(a\)를, 독립적으로, keep probability \(p\)로 유지하거나 \(1-p\)로 0으로 만든다. 형식적으로는 유닛마다 mask \(m \sim \text{Bernoulli}(p)\)를 뽑아 \(m \cdot a\)를 출력한다. ...

2026년 3월 16일 · 7 분

L1 vs L2 Regularization: 왜 L1은 Sparse Solution을 만드는가?

“L1은 weight를 sparse하게 만들고, L2는 weight를 작게 만든다” Regularization이란 무엇인가 용량(capacity)이 충분한 모델은 noise를 포함한 데이터를 외워버려서 training loss를 0까지 떨어뜨릴 수 있다. (overfitting) Linear model에서 이건 계수가 크고 서로 상쇄되는 값으로 폭발하는 형태로 나타난다. 이는 OLS 해 \(\hat{\mathbf{w}} = (X^\top X)^{-1}X^\top y\)의 증폭 효과 때문이다. \(X^\top X\)에 작은 eigenvalue(= 데이터에서 분산이 거의 없는 방향, 예컨대 거의 동일한 두 feature)가 있으면 그 역행렬엔 큰 eigenvalue가 생기고, \(y\)의 작은 노이즈가 그 방향으로 투영되며 큰 계수로 증폭된다. 구체적으로 \(x_1 \approx x_2\)라면, \(y\)를 설명하는 데는 \(w_1=1,\,w_2=0\)이면 충분하지만 마지막 노이즈까지 fit하기 위해 weight에 \(w_1=1000,\,w_2=-999\) 같은 값이 나타난다. \(x_1 - x_2\)는 거의 0인 방향이라, 큰 계수를 곱해야 노이즈만큼의 미세한 출력이 나오기 때문이다. 큰 \(|\mathbf{w}|\)는 함수가 노이즈에 맞추려 뒤틀린 증거다. ...

2026년 3월 2일 · 8 분

Fine-Tuning이 진짜 효과가 있었나? Whisper 한국어 STT Evaluation과 Benchmarking

이 글은 한국어 STT를 위한 Whisper fine-tuning 3부작 중 3부다: Preprocessing → Training → Evaluation. 여기서는 fine-tuning한 모델이 정말 나아졌는지, 얼마나 나아졌는지를 측정한다. 1부는 전처리, 2부는 학습을 다뤘다. 학습이 끝난 모델은 그냥 디스크에 있는 checkpoint일 뿐이다. Training loss curve가 내려가는 걸 보고 기분이 좋을 수는 있지만, held-out data에 실제로 돌려서 CER, WER, category별 성능을 측정하기 전까지는 fine-tuning이 효과가 있었는지, 특정 도메인에서 오히려 망가졌는지, base model 대비 얼마나 좋아졌는지 알 수 없다. 이 글에서는 두 가지 script를 다룬다: 단일 모델 evaluation용 스크립트와, 여러 모델을 category별로 비교하는 benchmarking 스크립트. 엔지니어링 측면에서는 수천 개 audio sample, multi-GPU, 여러 model checkpoint를 I/O bottleneck이나 메모리 문제 없이 효율적으로 처리하는 데 초점을 맞췄다. ...

2026년 2월 19일 · 6 분

Precomputed Feature로 Whisper 학습하기: 한국어 STT Full Fine-Tune

이 글은 한국어 STT를 위한 Whisper fine-tuning 3부작 중 2부다: Preprocessing → Training → Evaluation. 여기서는 전처리된 dataset을 불러와 학습 루프를 돌린다. 1부는 전처리, 3부는 evaluation/benchmarking을 다룰 예정이다. Mel spectrogram과 tokenized label을 디스크에 저장해 두었다면, 다음은 이걸 training loop에 넣고 모델을 최적화하는 일이다. 말만 하면 간단한데, 막상 선택지가 쏟아진다. Full fine-tuning 할까 LoRA 할까? Learning rate랑 batch size는? Encoder-decoder에서 길이 다른 sequence는 어떻게 padding 하고, GPU 메모리를 낭비하지 않으면서 터지지 않게 할까? 이 글에서는 한국어 통화 음성에 대해 Whisper large-v3를 학습시킬 때 쓰는 training 설정과, 그 뒤에 있는 공학적 선택(trade-off)을 정리한다. ...

2026년 2월 15일 · 5 분

Mel Spectrogram을 매번 다시 계산하지 마라: Whisper Fine-tuning 전 데이터 전처리

이 글은 한국어 STT를 위한 Whisper fine-tuning 3부작 중 1부다: Preprocessing → Training → Evaluation. 이번 글에서는 data preprocessing pipeline을 소개한다. 2부와 3부에서는 각각 training loop과 evaluation/benchmarking을 다룰 예정이다. OpenAI의 오픈소스 STT 모델인 Whisper를 파인튜닝하는 과정에서 생각지 못했던 난관에 봉착했다. learning rate를 바꾸든, batch size를 키우든, 아니면 그냥 GPU가 OOM으로 터지든 — 학습을 돌릴 때마다 수십 시간을 원본 오디오 파일 처리에 쓰는 것이다. WAV 파일 로드, 16 kHz로 sample rate 변경, mel spectrogram 계산, 텍스트 tokenization로 구성된 이 전처리 과정은 매번 동일하다. 데이터는 전혀 바뀌지 않는데, 매번 데이터 준비에 드는 시간과 비용을 전부 지불하고 있었던 거다. (남몰래 줄줄 새는 EC2 대여료…) ...

2026년 2월 11일 · 5 분