본문으로 이동
메뉴 여닫기
환경 설정 메뉴 여닫기
개인 메뉴 여닫기
로그인하지 않음
지금 편집한다면 당신의 IP 주소가 공개될 수 있습니다.

편향-분산 트레이드오프

IT 위키
Bias-variance tradeoff; 편향-분산 트레이드오프
모델의 기대 예측 오차가 편향의 제곱, 분산, 줄일 수 없는 잡음으로 나뉘며, 모델을 복잡하게 하면 편향은 줄고 분산은 늘어 둘 사이에 균형점이 있다는 원리

편향-분산 트레이드오프(bias-variance tradeoff)는 지도 학습 모델의 일반화 오차가 어디서 오는지를 설명하는 틀이다. 제곱 오차의 기댓값을 편향-분산 분해(bias-variance decomposition)로 나누면, 너무 단순한 모델은 편향 때문에, 너무 복잡한 모델은 분산 때문에 오차가 커진다. 과적합과 과소적합을 수식으로 설명하는 도구이며, 규제·앙상블·교차 검증 같은 기법이 왜 효과가 있는지도 이 틀로 읽힌다.

1992년 게먼, 비넨스톡, 두르사가 신경망 학습의 "편향/분산 딜레마"로 정리하면서 기계 학습에 널리 소개되었다.[1] 한편 2018년 이후 매개변수가 아주 많은 모델에서 시험 오차가 다시 내려가는 이중 하강(double descent)이 보고되면서, 고전적인 U자 곡선이 현대 딥 러닝을 다 설명하지 못한다는 점도 알려졌다. 상위 개념은 기계 학습 문서의 "일반화" 항목 참고.

데이터가 y=f(x)+ε에서 나온다고 하자. f는 참 함수, ε은 𝔼[ε]=0, Var(ε)=σ2인 잡음이다. 훈련 집합 D를 뽑을 때마다 학습 결과 f^D가 달라지므로, 한 점 x에서의 예측 f^D(x)는 확률 변수다. 평균 예측을 f¯(x)=𝔼D[f^D(x)]로 쓴다.

새 관측 y에 대한 기대 제곱 오차를 D와 ε에 대해 평균 낸다. 먼저 잡음을 떼어 낸다.

𝔼[(y−f^D(x))2]=𝔼[(f(x)−f^D(x)+ε)2]=𝔼D[(f(x)−f^D(x))2]+σ2

ε은 D와 독립이고 평균이 0이므로 교차항 2𝔼[ε]𝔼D[f−f^D]가 사라진다. 다음으로 f¯(x)를 더하고 빼서 나머지를 나눈다.

𝔼D[(f−f¯+f¯−f^D)2]=(f−f¯)2+𝔼D[(f^D−f¯)2]+2(f−f¯)𝔼D[f¯−f^D]

𝔼D[f^D]=f¯이므로 마지막 항은 0이다. 정리하면 다음과 같다.

𝔼[(y−f^D(x))2]⏟기대 오차=(f(x)−f¯(x))2⏟편향2+𝔼D[(f^D(x)−f¯(x))2]⏟분산+σ2⏟줄일 수 없는 오차

전체 일반화 오차는 이것을 입력 분포 p(x)에 대해 다시 평균 낸 값이다.

세 항의 의미

편집 원본 편집
항 뜻 커지는 경우 줄이는 방법
편향의 제곱 훈련 집합을 무한히 바꿔 평균 낸 예측조차 참값에서 벗어난 정도. 모델 가정의 오류 모델이 너무 단순함(선형 모델로 곡선 맞추기), 규제가 지나침 표현력 키우기, 특징 추가, 규제 완화, 부스팅
분산 훈련 집합이 바뀔 때 예측이 흔들리는 정도. 표본 잡음에 대한 민감도 모델이 너무 복잡함, 데이터가 적음, 규제가 약함 데이터 늘리기, 규제, 배깅·랜덤 포레스트, 드롭아웃, 조기 종료
잡음 σ2 데이터 자체의 무작위성. 어떤 모델로도 못 줄인다 측정 오차, 관측 안 된 변수 모델로는 불가. 더 나은 측정·특징이 필요

예: 모델별 분해

편집 원본 편집
  • k-최근접 이웃 회귀: 입력 x0에서 기대 오차는 σ2+[f(x0)−1k∑l=1kf(x(l))]2+σ2/k이다.[2] k가 커지면 분산 σ2/k는 줄지만 먼 이웃까지 평균 내므로 편향이 커진다. 자세한 내용은 K-최근접 이웃 문서 참고.
  • 릿지 회귀: 규제 계수 λ를 키우면 계수가 0 쪽으로 줄어 편향이 늘고 분산이 준다. 적당한 λ에서 전체 오차가 최소가 된다. 자세한 내용은 L2 정규화 문서 참고.
  • 다항 회귀: 차수가 모델 복잡도 역할을 한다. 아래 코드에서 차수를 바꾸며 직접 분해해 본다.
  • 앙상블: B개 모델의 평균은 각 모델의 분산이 σm2, 서로의 상관계수가 ρ일 때 분산이 ρσm2+1−ρBσm2가 된다. 배깅과 랜덤 포레스트는 상관을 낮춰 둘째 항을 줄인다.[2] 자세한 내용은 앙상블 기법 문서 참고.

코드로 분해하기

편집 원본 편집

훈련 집합을 500번 새로 뽑아 다항 회귀를 학습하고, 예측의 평균과 분산으로 편향의 제곱과 분산을 직접 계산한다(numpy 2.1에서 실행 확인).

import numpy as np
rng = np.random.default_rng(0)
f = lambda x: np.sin(2 * np.pi * x)        # 참 함수
sigma, n, trials = 0.3, 30, 500
x_test = np.linspace(0, 1, 200)

for degree in [1, 3, 5, 7, 9]:
    preds = np.empty((trials, x_test.size))
    for t in range(trials):                 # 훈련 집합을 새로 뽑아 반복 학습
        x = rng.uniform(0, 1, n)
        y = f(x) + rng.normal(0, sigma, n)
        coef = np.polynomial.polynomial.polyfit(x, y, degree)
        preds[t] = np.polynomial.polynomial.polyval(x_test, coef)
    bias2 = ((preds.mean(0) - f(x_test)) ** 2).mean()
    var = preds.var(0).mean()
    print(degree, round(bias2, 3), round(var, 3), round(bias2 + var + sigma**2, 3))

실행 결과(시드 0)는 다음과 같다. 차수 1은 편향이, 차수 7 이상은 분산이 오차를 지배하고, 차수 3 근처가 가장 낫다.

차수 편향² 분산 기대 오차(잡음 0.09 포함)
1 0.200 0.024 0.314
3 0.005 0.018 0.113
5 0.000 0.060 0.150
7 0.003 1.819 1.912
9 0.498 165.548 166.136

차수 9의 편향이 다시 커진 것은 일부 훈련 집합에서 구간 끝의 예측이 크게 튀어 평균 예측까지 흔들렸기 때문이다. 표본이 30개뿐이라 고차 다항식이 매우 불안정하다.

실무에서 읽는 법

편집 원본 편집

편향과 분산은 직접 측정하기 어렵다(참 함수를 모르고 훈련 집합도 하나뿐이다). 대신 훈련 오차와 검증 오차로 짐작한다.

증상 진단 대응
훈련 오차 높음, 검증 오차도 비슷하게 높음 편향이 큼(과소적합) 더 큰 모델, 특징 추가, 규제 완화, 더 오래 학습
훈련 오차 낮음, 검증 오차 훨씬 높음 분산이 큼(과적합) 데이터 추가·데이터 증강, 규제·가중치 감쇠·드롭아웃, 앙상블, 조기 종료
둘 다 낮음 균형 잡음 수준에 가까운지 확인

학습 곡선(훈련 데이터 양에 따른 두 오차)을 그리면, 두 곡선이 높은 곳에서 붙으면 편향 문제, 간격이 크게 남으면 분산 문제로 본다. 모델 복잡도는 k겹 교차 검증으로 고른다.

분류의 0-1 손실에서는 제곱 오차처럼 세 항이 깔끔하게 더해지지 않는다. 여러 일반화가 제안되었지만 정설은 없고, 실무에서는 위의 증상 진단을 그대로 쓴다.

고전적인 그림에서는 복잡도를 키우면 시험 오차가 U자를 그린다. 그런데 모델이 훈련 데이터를 정확히 맞출 수 있게 되는 지점(보간 임계점, interpolation threshold. 대략 매개변수 수가 표본 수와 같아지는 곳)에서 시험 오차가 치솟았다가, 그보다 더 키우면 다시 내려가는 경우가 있다. 2018년 벨킨 등이 이것을 이중 하강(double descent)이라 이름 붙이고 무작위 특징 모델, 신경망, 결정 트리 앙상블에서 보였다.[3]

2019년 하버드 대학교와 OpenAI 연구진(나키란 등)은 ResNet·트랜스포머 등 현대 딥 러닝 모델에서도 같은 현상을 보고하고, 이중 하강이 모델 크기뿐 아니라 학습 에포크 수에 따라서도(epoch-wise) 나타나며, 보간 임계점 근처에서는 훈련 데이터를 늘리는 것이 오히려 시험 성능을 떨어뜨리는 구간이 있음을 보였다. 이를 묶어 "유효 모델 복잡도"라는 척도를 제안했다.[4]

  • 임계점 근처: 훈련 데이터를 정확히 맞추는 해가 거의 하나뿐이라, 잡음까지 억지로 맞추느라 계수의 노름이 폭발한다. 이때 분산이 매우 커진다.
  • 임계점 너머: 훈련 데이터를 맞추는 해가 무수히 많고, 경사 하강법이나 의사역행렬은 그중 노름이 가장 작은 해를 고른다. 이 암묵적 규제 때문에 해가 다시 매끄러워진다. 선형 회귀에서는 이 과정이 정확히 분석되어 있다.[5]
  • 편향과 분산으로 다시 보면: 신경망 폭을 키울 때 편향은 단조 감소하고, 분산이 봉우리 하나를 그리는 경우가 실험으로 관찰되었다.[6] 분산을 초기화·데이터 표본·잡음 등 출처별로 쪼개 어느 항이 임계점에서 발산하는지 따지는 분석도 있다.[7] 즉 분해 자체는 여전히 성립하고, 깨진 것은 "복잡도가 늘면 분산도 늘어난다"는 가정이다.
  • 규제의 효과: 규제 강도를 잘 맞추면 봉우리가 사라진다는 결과가 있다.[8] 실무에서 적절한 가중치 감쇠와 조기 종료를 쓰면 이중 하강을 눈에 띄게 겪지 않는 이유다.

고정된 무작위 ReLU 특징 p개 위에 규제 없는 최소 노름 최소제곱을 푼다. 훈련 표본은 100개다.

import numpy as np
rng = np.random.default_rng(0)
d, n_train, n_test = 10, 100, 2000
w_true = rng.normal(size=d)
def data(n):
    X = rng.normal(size=(n, d))
    return X, np.tanh(X @ w_true / np.sqrt(d)) + 0.1 * rng.normal(size=n)
Xtr, ytr = data(n_train); Xte, yte = data(n_test)

for p in [10, 50, 80, 95, 100, 105, 120, 200, 500, 2000]:
    errs = []
    for _ in range(20):
        W = rng.normal(size=(d, p)) / np.sqrt(d)      # 학습하지 않는 무작위 특징
        Ftr, Fte = np.maximum(Xtr @ W, 0), np.maximum(Xte @ W, 0)
        beta = np.linalg.pinv(Ftr) @ ytr              # 최소 노름 해
        errs.append(np.mean((Fte @ beta - yte) ** 2))
    print(p, round(np.median(errs), 3))

실행하면 시험 MSE 중앙값이 p = 50에서 0.079, p=n = 100에서 3.980으로 치솟았다가, p = 500에서 0.073, 2000에서 0.068로 처음 최솟값보다 낮아진다. pinv 대신 작은 릿지 규제를 넣으면 봉우리가 크게 줄어든다.

  • 이중 하강은 스케일링 법칙처럼 "모델을 키울수록 좋아진다"는 대형 모델의 경험과 고전 이론을 잇는 설명 중 하나다.
  • 그렇다고 편향-분산 트레이드오프가 틀린 것은 아니다. 고정된 크기의 데이터에서 모델 복잡도를 고르는 작은 문제(표 데이터, 고전 모델)에서는 여전히 U자 곡선이 그대로 나타난다.
  • "복잡도"를 매개변수 수로 재는 것이 부정확하다는 점이 핵심 교훈이다. 규제, 최적화 알고리즘, 학습 시간이 실제 복잡도를 함께 정한다.
  1. ↑ Stuart Geman, Elie Bienenstock, René Doursat, 〈Neural Networks and the Bias/Variance Dilemma〉, Neural Computation 4(1), 1~58, 1992. doi:10.1162/neco.1992.4.1.1
  2. ↑ 2.0 2.1 Trevor Hastie, Robert Tibshirani, Jerome Friedman, 《The Elements of Statistical Learning》 2판, Springer, 2009, 7.3절(편향-분산 분해)·15.2절(랜덤 포레스트). 저자 공개본
  3. ↑ Mikhail Belkin, Daniel Hsu, Siyuan Ma, Soumik Mandal, 〈Reconciling modern machine-learning practice and the classical bias-variance trade-off〉, PNAS 116(32), 15849~15854, 2019. doi:10.1073/pnas.1903070116 arXiv:1812.11118
  4. ↑ Preetum Nakkiran 외, 〈Deep Double Descent: Where Bigger Models and More Data Hurt〉, ICLR 2020. arXiv:1912.02292
  5. ↑ Trevor Hastie, Andrea Montanari, Saharon Rosset, Ryan J. Tibshirani, 〈Surprises in High-Dimensional Ridgeless Least Squares Interpolation〉, 2019. arXiv:1903.08560
  6. ↑ Zitong Yang 외, 〈Rethinking Bias-Variance Trade-off for Generalization of Neural Networks〉, ICML 2020. arXiv:2002.11328
  7. ↑ Ben Adlam, Jeffrey Pennington, 〈Understanding Double Descent Requires a Fine-Grained Bias-Variance Decomposition〉, NeurIPS 2020. arXiv:2011.03321
  8. ↑ Preetum Nakkiran, Prayaag Venkat, Sham Kakade, Tengyu Ma, 〈Optimal Regularization Can Mitigate Double Descent〉, ICLR 2021. arXiv:2003.01897