“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}|\)는 함수가 노이즈에 맞추려 뒤틀린 증거다.
Regularization은 모델이 그렇게 하지 못하도록 일부러 제약을 거는 모든 기법으로, training 정확도와 일반화(generalization) 사이의 tradeoff이다. 이는 보통 weight의 크기에 penalty를 더하는 방법으로 수행된다.
$$ \text{전체 objective} = \underbrace{L(\mathbf{w})}_{\text{데이터에 맞추기}} + \underbrace{\lambda\,\Omega(\mathbf{w})}_{\text{weight를 작게 유지}} $$Optimizer는 이제 training 데이터에 맞추려는 힘(노이즈까지 설명하려고 weight를 키움)과 weight를 작게 유지하려는 힘(0 쪽으로 당김) 사이의 균형을 맞춘다. \(\lambda\)가 그 교환비를 정하고, 그 값은 held-out 데이터(cross-validation)로 고른다.
Bias–Variance Tradeoff
Regularization이 애초에 “왜” 도움이 되는지는 이 분해 하나로 설명된다. 한 점 \(x\)에서 기대 test error(squared loss)를 여러 training set과 노이즈에 대해 평균 내면:
$$ \mathbb{E}\big[(y - \hat{f}(x))^2\big] = \underbrace{\text{Bias}[\hat{f}(x)]^2}_{\text{체계적 오차}} + \underbrace{\text{Var}[\hat{f}(x)]}_{\text{출렁임}} + \underbrace{\sigma^2}_{\text{줄일 수 없는 노이즈}} $$- Bias²: 여러 데이터셋에서 뽑은 예측의 평균이 참함수에서 얼마나 벗어나는가. 모델이 너무 단순하면(underfit) 크다.
- Variance: training set이 바뀔 때 예측이 얼마나 출렁이는가. 모델이 너무 복잡하면(overfit) 크다.
- σ²: 데이터 자체의 노이즈(Bayes error). 어떤 모델로도 못 줄이는 하한.
유도는 짧다. \(y = f(x) + \varepsilon\), \(\mathbb{E}[\varepsilon]=0\), \(\text{Var}(\varepsilon)=\sigma^2\)라 하면
$$ \mathbb{E}[(y-\hat f)^2] = \mathbb{E}[(f - \hat f)^2] + \sigma^2, \qquad \mathbb{E}[(f-\hat f)^2] = (f - \mathbb{E}\hat f)^2 + \mathbb{E}[(\mathbb{E}\hat f - \hat f)^2] = \text{Bias}^2 + \text{Var} $$(교차항은 \(\varepsilon\)이 독립이라 사라진다.)
- Regularization 없는 OLS는 (모델이 올바르게 지정됐다면) 불편(unbiased) 추정량으로, bias는 0이지만 variance가 매우 크다. (데이터셋마다 값이 크게 흔들린다)
- Ridge/Lasso는 계수를 0 쪽으로 당겨 평균 자체를 참값에서 밀어낸다 → 이때 bias가 발생하며 variance가 감소한다.
Test error가 bias² + variance + σ²이므로, 약간의 bias를 얹어 variance를 크게 깎으면 총합이 감소하며 test error가 감소한다. 모델 복잡도(또는 \(1/\lambda\))에 대해 총 error는 U자 곡선을 그리고, \(\lambda\)는 그 곡선 위 위치를 옮기는 노브다(\(\lambda\uparrow\) → bias↑·variance↓).
문제 설정
Data-fit loss \(L(\mathbf{w})\)(예: linear regression의 squared error)에 penalty \(\Omega\)를 더해 \(\min_{\mathbf{w}} L(\mathbf{w}) + \lambda\,\Omega(\mathbf{w})\)를 최소화한다. 두 선택지는:
- L2 (Ridge / weight decay): \(\Omega(\mathbf{w}) = \|\mathbf{w}\|_2^2 = \sum_j w_j^2\)
- L1 (Lasso): \(\Omega(\mathbf{w}) = \|\mathbf{w}\|_1 = \sum_j |w_j|\)
이름의 유래. L1·L2는 \(L^p\) norm(\(\ell^p\), Lebesgue의 L)에서 왔다. \(\|\mathbf{w}\|_p = (\sum_j |w_j|^p)^{1/p}\)에서 \(p=1\)이면 절댓값 합(L1), \(p=2\)면 Euclidean 길이(L2)다. L2 regularization은 미분 편의상 이 노름의 제곱 \(\sum_j w_j^2\)을 쓴다. (덤: \(L_0\)=“nonzero 개수”, \(L_\infty = \max_j|w_j|\).)
차이점 요약
| L2 (Ridge) | L1 (Lasso) | |
|---|---|---|
| Penalty | \(\sum_j w_j^2\) | \(\sum_j \lvert w_j \rvert\) |
| 해의 형태 | Dense — 줄어들지만 0은 안 됨 | Sparse — 다수의 weight가 정확히 0 |
| Weight별 효과 | 곱셈적(multiplicative) shrinkage | 상수 크기 shrinkage + thresholding |
| 미분 가능성 | 모든 점에서 smooth | 0에서 미분 불가 |
| Closed form (linear reg.) | 있음: \((X^\top X + \lambda I)^{-1} X^\top y\) | 없음 (효율적 solver는 존재) |
| Correlated feature | 그룹에 weight를 분산 | 하나만 고르고 나머지는 0 |
| Bayesian prior | Gaussian | Laplace |
| 용도 | 안정성, multicollinearity, 기본 선택지 | Feature selection, 해석 가능성, \(p \gg n\) |
각 항목은 왜 그렇게 나오는가
표의 거의 모든 차이가 penalty 도함수 하나에서 갈라져 나온다.
해가 dense(L2) vs sparse(L1). 좌표 \(j\)의 최적 조건은 “loss의 기울기 + penalty의 기울기 = 0"이다.
- L2 penalty \(\lambda w_j^2\)의 도함수는 \(2\lambda w_j\)다. \(w_j=0\)에서 이 값은 0 → 원점에서 계수를 0으로 밀 힘이 전혀 없다. 그래서 데이터가 아주 약하게라도 당기면 계수는 0에서 벗어나 작은 nonzero 값에 안착한다. 정확히 0이 되려면 loss 기울기가 마침 거기서 0이어야 하는 우연이 필요하다 → dense.
- L1 penalty \(\lambda|w_j|\)는 0에서 미분 불가라 도함수 대신 subgradient 구간 \([-\lambda, \lambda]\)를 갖는다. 이게 threshold를 만든다: 좌표의 loss 기울기 크기가 \(\lambda\) 이하이면 (\(|\partial L/\partial w_j| \le \lambda\)) 0이 최적이다. 데이터가 \(\lambda\)보다 세게 당기는 좌표만 살아남고 나머지는 정확히 0 → sparse.
한 줄 기하 직관: penalty를 “budget 안에 가둔다"고 보면, L2의 제약 영역은 매끄러운 원/구라 최적 접점이 축 위(=계수 0)에 떨어질 이유가 없다. 반면 L1의 제약 영역은 축 위에 뾰족한 꼭짓점이 있는 다이아몬드라, loss contour가 그 꼭짓점(=일부 계수 0)에 먼저 걸리기 쉽다.
Weight별 효과: 곱셈 shrinkage vs 상수 shrinkage+threshold. Orthonormal 가정(\(X^\top X = I\), \(\hat w_j^{\text{OLS}} = (X^\top y)_j\))에서 계산하면 딱 떨어진다:
$$ \hat w_j^{\text{ridge}} = \frac{\hat w_j^{\text{OLS}}}{1 + 2\lambda}, \qquad \hat w_j^{\text{lasso}} = \operatorname{sign}(\hat w_j^{\text{OLS}})\,\max\big(|\hat w_j^{\text{OLS}}| - \lambda,\; 0\big) $$Ridge는 모두 같은 비율로 축소한다(100→33, 0.001→0.0003, 아무것도 0이 안 됨). Lasso는 모두 \(\lambda\)만큼 이동하고 0을 넘으면 고정한다(soft-thresholding) — 작은 계수는 이 “고정 통행료"를 감당 못 해 0이 된다. 이 두 형태 자체가 위 도함수(비례 vs 상수)의 직접적 결과다.
미분 가능성. \(w^2\)의 도함수 \(2w\)는 연속(smooth). \(|w|\)는 0에서 좌·우 도함수가 \(-1, +1\)로 갈려 꺾인다(kink). 이 꺾임이 위 threshold와 sparsity의 근원이다.
Closed form 유무. L2 + squared loss는 목적함수가 quadratic → 기울기=0이 선형방정식 \((X^\top X + \lambda I)\mathbf{w} = X^\top y\) → 닫힌 해. 덤으로 \(X^\top X\)에 \(\lambda I\)를 더하면 strictly positive definite가 되어 ill-conditioned·rank-deficient 문제까지 고쳐진다. L1은 0에서 미분 불가라 닫힌 해가 없고 coordinate descent·LARS·proximal 같은 반복법을 쓴다.
Correlated feature: 분산 vs 하나 선택. 거의 동일한 두 feature로 총효과 \(c\)를 낼 때 penalty 비용을 비교하면 — L2는 반씩 나눌 때 \((c/2)^2 + (c/2)^2 = c^2/2\)로 몰아주기(\(c^2\))보다 싸다 → 나눈다. L1은 \(|c/2| + |c/2| = |c|\)로 몰아주기와 똑같다 → 무차별이라 타이가 임의로 깨지며 한쪽에 몰린다(그래서 재표집하면 어느 쪽이 살아남을지 뒤집히는 불안정성이 생긴다).
Bayesian prior: Gaussian vs Laplace. penalty가 곧 음의 log-prior이기 때문이다 — 아래 절에서 본다.
Bayesian 관점: Prior란 무엇인가
Regularization은 Bayes 정리로 보면 prior를 넣는 것과 같다. Bayes 정리는 posterior ∝ likelihood × prior:
$$ p(\mathbf{w} \mid \text{data}) \;\propto\; p(\text{data} \mid \mathbf{w})\; \cdot\; p(\mathbf{w}) $$- prior \(p(\mathbf{w})\): 데이터를 보기 전의 믿음(“weight는 아마 0 근처 작은 값”).
- likelihood \(p(\text{data}\mid\mathbf{w})\): 그 \(\mathbf{w}\)에서 데이터가 나올 확률.
- posterior \(p(\mathbf{w}\mid\text{data})\): 데이터를 본 후의 갱신된 믿음.
MAP(maximum a posteriori) 추정 = posterior 최대화 = \((\log\text{likelihood} + \log\text{prior})\) 최대화다. 여기서 \(\log\text{likelihood} \leftrightarrow -L(\mathbf{w})\) (Gaussian likelihood면 squared error), \(\log\text{prior} \leftrightarrow -\lambda\Omega(\mathbf{w})\)이므로 \(L(\mathbf{w}) + \lambda\Omega(\mathbf{w})\) 최소화는 prior가 \(\propto e^{-\lambda\Omega(\mathbf{w})}\)인 MAP 추정과 정확히 같다. 즉 penalty가 곧 음의 log-prior다.
- L2 (\(\sum w^2\)) ⟷ Gaussian prior \(\mathcal{N}(0, \sigma^2)\): 0 중심 종모양이라 0 근처는 싸지만 정확히 0에 특별한 보상이 없다 → dense.
- L1 (\(\sum|w|\)) ⟷ Laplace prior \(\propto e^{-\lambda|w|}\): 0에서 뾰족한 peak + 두꺼운 tail. peak가 0에 prior mass를 몰아 sparsity를 만들고, 두꺼운 tail은 큰 계수를 Gaussian보다 덜 벌줘 soft-threshold의 “작은 건 죽이고 큰 건 거의 안 건드림"과 맞는다.
prior의 분산 \(\leftrightarrow 1/\lambda\): \(\lambda\)가 크면 tight한 prior = “weight가 0 근처라고 강하게 믿는다”. 그래서 L1이냐 L2냐를 고르는 건 결국 **weight가 어떻게 생겼다고 믿느냐(sparse냐, 작고 퍼졌냐)**를 고르는 일이다.
언제, 왜 각각이 작동하는가
Regularization은 그것이 담은 믿음(prior)이 실제로 내 문제에 대해 참일 때 도움이 된다. 두 penalty는 서로 다른 믿음을 담으므로 서로 다른 상황에서 성공한다.
L2 (Ridge)를 꺼낼 때:
- Feature가 correlated이거나 문제가 ill-conditioned일 때. Multicollinearity는 regularization 없는 계수를 크고 불안정하게 만든다. L2의 \(+\lambda I\) 항이 역행렬을 안정화하고 correlated feature들에 weight를 매끄럽게 나눠준다. L2의 대표 use case다.
- 여러 feature가 각각 조금씩 기여한다고 믿을 때. True signal이 “dense"하게 퍼져 있으면 전부 비례적으로 줄이는 게 맞고, feature를 0으로 만드는 것(L1)은 진짜 signal을 버리는 셈이다.
- 그냥 안정적이고 무난한 기본값이 필요할 때. L2는 smooth·closed form·gradient descent 친화적이다. Neural network의 “weight decay"가 본질적으로 L2다.
L1 (Lasso)를 꺼낼 때:
- True model이 sparse하다고 믿을 때 — 소수 feature만 중요하고 나머지는 노이즈. L1은 무관한 것들을 정확히 0으로 몰고, 이 믿음이 맞으면 올바른 support를 복원한다(때로 feature 수보다 적은 sample로도; compressed sensing).
- 데이터보다 feature가 많고(\(p \gg n\)) feature selection이 필요할 때. Genomics, 거대 vocabulary 텍스트, sensor array — 한 번의 fit으로 부분집합을 자동 선택한다.
- 해석 가능성·배포 비용이 중요할 때. nonzero 50개 모델은 읽고 싸게 돌릴 수 있지만, 자잘한 10,000개짜리 dense 모델은 둘 다 아니다.
베팅이 현실과 맞으면 bias–variance 이득을 사실상 공짜로 얻는다. 안 맞으면(진짜 dense한 문제에 L1) penalty가 진짜 feature를 잘못 0으로 만들고 정확도로 대가를 치른다.
다른 모델에도 적용되나 — MLP, XGBoost, Random Forest
L1/L2는 linear model 전용이 아니라 연속 파라미터를 가진 모든 모델에 붙는 일반 아이디어다.
- MLP / neural net: 그대로 적용된다. 딥러닝의 weight decay가 곧 L2(모든 weight에 \(\sum w^2\))다. L1도 가능하나 개별 weight sparsity가 딱히 쓸모없어 덜 쓴다.
- XGBoost: 명시적으로 L1·L2를 쓴다 — coefficient가 아니라 **leaf weight(각 잎의 예측값)**에. 목적함수에 \(\gamma T + \tfrac{1}{2}\,\texttt{reg\_lambda}\sum w^2 + \texttt{reg\_alpha}\sum|w|\)가 들어간다(
reg_lambda=L2,reg_alpha=L1,gamma=잎 개수 penalty). - Random Forest: 크기 penalty가 없다(줄일 weight가 없음). 대신
max_depth·min_samples_leaf·트리 수·bagging·feature subsampling 같은 구조적 regularization으로 같은 목적(과적합 억제)을 이룬다.
알아둘 두 가지 개선
- Elastic Net — L1과 L2를 섞는다: \(\lambda_1\|\mathbf{w}\|_1 + \lambda_2\|\mathbf{w}\|_2^2\). 장점: L1의 sparsity에 L2의 안정성을 더해, correlated group을 함께 넣고 빼는 grouping effect로 selection이 안정적이고, 순수 lasso가 \(p \gg n\)에서 최대 \(n\)개까지만 고르는 한계도 푼다. 단점: 튜닝할 하이퍼파라미터가 둘로 늘고, 순수 L1보다 덜 sparse하며, naive 버전은 이중 shrinkage로 과수축해 보정이 필요하다.
- Relaxed lasso — L1의 상수 \(\lambda\) shift는 남기는 큰 계수까지 0 쪽으로 bias를 준다. 2단계 해결책: L1은 support를 고르는 데만 쓰고, 선택된 feature를 penalty 없이(또는 가벼운 ridge로) refit한다. L1의 feature selection은 얻으면서 살아남은 계수엔 shrinkage bias가 걸리지 않는다.
요약
- Regularization = 모델 용량을 일부러 제약해 overfitting을 막는 것. penalty로 weight 크기를 눌러 약간의 bias를 얹고 variance를 크게 깎는다(bias–variance tradeoff). 통하는 이유는 test error = bias² + variance + σ²에서 variance 감소가 bias 증가를 압도하기 때문.
- L2는 계수를 같은 비율로 축소(dense), L1은 \(\lambda\)만큼 밀고 threshold로 잘라 다수를 정확히 0으로(sparse). 근원은 penalty 도함수 — L2는 원점에서 0(밀 힘 없음), L1은 subgradient 구간 \([-\lambda, \lambda]\)(threshold). 같은 사실이 기하(꼭짓점)로도, Bayesian prior(뾰족한 Laplace)로도 나타난다.
- 고르는 기준: L2는 correlated·dense·안정성 기본값, L1은 sparse signal·feature selection·\(p \gg n\). 둘 다 원하면 Elastic Net. 핵심은 담은 믿음이 현실과 맞을 때 통한다는 것.