편향, 분산과 학습 곡선(Bias-Variance Tradeoff)

모든 모델 오류는 세 가지 원천 중 하나에서 옵니다. 편향(bias), 분산(variance), 또는 잡음(noise)입니다. 우리가 제어할 수 있는 것은 앞의 둘뿐입니다.

유형: Learn 언어: Python 선수 지식: Phase 2, Lessons 01-09 (머신러닝(ML) 기초, 회귀, 분류, 평가) 예상 시간: 약 75분

학습 목표

  • 기대 예측 오류(Expected prediction error)의 편향-분산 분해(Bias-variance decomposition)를 유도하고, 줄일 수 없는 잡음(irreducible noise)의 역할을 설명합니다.
  • 학습 오류(training error)와 테스트 오류(test error)의 패턴(pattern)을 사용해 모델이 높은 편향(high bias) 또는 높은 분산(high variance) 문제를 겪는지 진단합니다.
  • L1, L2, 드롭아웃(dropout), 조기 종료(early stopping) 같은 정규화(regularization)가 어떻게 편향을 늘리는 대신 분산을 줄이는지 설명합니다.
  • 모델 복잡도가 증가할 때 편향-분산 절충(tradeoff)을 시각화하는 실험을 구현합니다.

문제

모델을 학습했습니다. 테스트 데이터(test data)에서 오류가 있습니다. 그 오류는 어디서 온 것일까요?

모델이 너무 단순하면, 예를 들어 곡선 데이터에 선형 회귀를 맞추면, 진짜 패턴(pattern)을 계속 놓칩니다. 이것이 편향(bias)입니다. 모델이 너무 복잡하면, 예를 들어 데이터 15개에 20차 다항식을 맞추면, 학습 데이터에는 완벽히 맞지만 새 데이터에서는 예측이 크게 흔들립니다. 이것이 분산(variance)입니다.

고정된 모델 용량(capacity)에서는 둘을 동시에 최소화할 수 없습니다. 편향을 낮추면 분산이 올라가고, 분산을 낮추면 편향이 올라갑니다. 이 절충을 이해하는 것은 머신러닝에서 가장 유용한 진단 능력입니다. 모델을 더 복잡하게 만들어야 하는지, 더 단순하게 만들어야 하는지, 데이터를 더 모아야 하는지, 특성(feature)을 더 잘 만들어야 하는지, 정규화를 늘려야 하는지 줄여야 하는지를 알려줍니다.

사전 테스트

2문제 · 이 강의를 시작하기 전에 얼마나 알고 있는지 확인해보세요

1.명확히 휘어진 2차 관계에 선형 모델을 맞췄습니다. 어떤 오류 성분(error component)이 지배적인가요?

2.기대 오류(Expected error)의 편향-분산 분해(bias-variance decomposition)에는 세 항이 있습니다. 어떤 항은 어떤 모델로도 줄일 수 없나요?

0/2 답변 완료

개념

편향(Bias): 체계적 오류

편향은 모델의 평균 예측이 실제 값에서 얼마나 벗어나는지 측정합니다. 같은 분포(distribution)에서 뽑은 여러 학습 세트(training set)로 같은 모델을 여러 번 학습하고 예측을 평균냈을 때, 그 평균과 참값(truth) 사이의 격차(gap)가 편향입니다.

편향이 높다는 것은 모델이 실제 패턴을 잡기에는 너무 경직(rigid)되어 있다는 뜻입니다. 포물선에 직선을 맞추면 데이터를 아무리 많이 줘도 곡선을 놓칩니다. 이것이 과소적합(underfitting)입니다.

높은 편향(과소적합):
  모델이 항상 비슷하게 틀린 것을 예측합니다.
  학습 오류(Training error): 높음
  테스트 오류(Test error): 높음
  둘 사이 격차(gap): 작음

분산(Variance): 학습 데이터에 대한 민감도

분산은 데이터의 서로 다른 부분집합(subset)으로 학습했을 때 예측이 얼마나 바뀌는지 측정합니다. 학습 세트가 조금 바뀌었는데 모델이 크게 바뀐다면 분산이 높습니다.

분산이 높다는 것은 모델이 본질적인 신호(underlying signal)가 아니라 학습 데이터의 잡음(noise)을 맞추고 있다는 뜻입니다. 20차 다항식은 모든 학습 데이터 점(training point)을 지나갈 수 있지만 그 사이에서 크게 요동칩니다. 이것이 과적합(overfitting)입니다.

높은 분산(과적합):
  모델은 학습 데이터를 완벽히 맞추지만 새 데이터에서는 실패합니다.
  학습 오류(Training error): 낮음
  테스트 오류(Test error): 높음
  둘 사이 격차(gap): 큼

분해

제곱 손실(Squared loss)에서 어떤 점 x의 기대 예측 오류는 정확히 다음처럼 분해됩니다.

Expected Error = Bias^2 + Variance + Irreducible Noise

where:
  Bias^2   = (E[f_hat(x)] - f(x))^2
  Variance = E[(f_hat(x) - E[f_hat(x)])^2]
  Noise    = E[(y - f(x))^2]             (sigma^2)
  • f(x)는 참 함수(true function)입니다.
  • f_hat(x)는 모델 예측입니다.
  • E[...]는 서로 다른 학습 세트에 대한 기대값입니다.
  • y는 관측된 레이블(label)입니다. 참 함수에 잡음이 더해진 값입니다.

잡음 항은 줄일 수 없습니다. 잡음이 있는 데이터에서 어떤 모델도 sigma^2보다 더 잘할 수 없습니다. 우리의 일은 bias^2variance 사이의 적절한 균형을 찾는 것입니다.

모델 복잡도와 오류

graph LR
    A[Simple Model] -->|복잡도 증가| B[Sweet Spot]
    B -->|복잡도 증가| C[Complex Model]

    style A fill:#f9f,stroke:#333
    style B fill:#9f9,stroke:#333
    style C fill:#f99,stroke:#333

고전적인 U자 곡선은 다음과 같습니다.

복잡도편향(Bias)분산(Variance)전체 오류(Total Error)
너무 낮음높음낮음높음 (과소적합)
적절함보통보통가장 낮음
너무 높음낮음높음높음 (과적합)

정규화(Regularization)는 편향-분산 제어다

정규화는 의도적으로 편향을 높여 분산을 낮춥니다. 모델을 제약해 잡음을 따라가지 못하게 만듭니다.

  • L2 (Ridge): 모든 가중치(weight)를 0 쪽으로 줄입니다. 모든 특성을 유지하되 영향력을 줄입니다.
  • L1 (Lasso): 일부 가중치를 정확히 0으로 만듭니다. 특성 선택(feature selection) 효과가 있습니다.
  • 드롭아웃(Dropout): 학습 중 뉴런(neuron)을 무작위로 끕니다. 중복된 표현(redundant representation)을 강제합니다.
  • 조기 종료(Early stopping): 모델이 학습 데이터를 완전히 맞추기 전에 학습을 멈춥니다.

정규화 강도(regularization strength), 즉 lambda, 드롭아웃 비율(dropout rate), 에폭(epoch) 수는 편향-분산 곡선에서 위치를 직접 제어합니다. 정규화가 강할수록 편향은 커지고 분산은 작아집니다.

이중 하강(Double Descent): 현대적 관점

고전 이론은 최적 지점(sweet spot) 이후 복잡도가 올라가면 항상 나빠진다고 말합니다. 하지만 2019년 이후 연구는 예상 밖의 현상을 보여줬습니다. 모델 용량(capacity)을 보간 임계점(interpolation threshold), 즉 학습 데이터를 완벽히 맞출 수 있는 지점보다 훨씬 더 키우면 테스트 오류가 다시 낮아질 수 있습니다.

graph LR
    A[Underfit Zone] --> B[Classical Sweet Spot]
    B --> C[Interpolation Threshold]
    C --> D[Double Descent - Error Drops Again]

    style A fill:#fdd,stroke:#333
    style B fill:#dfd,stroke:#333
    style C fill:#fdd,stroke:#333
    style D fill:#dfd,stroke:#333

이 이중 하강 현상은 학습 표본(training example)보다 훨씬 많은 파라미터(parameter)를 가진 대규모 신경망(neural network)이 여전히 잘 일반화되는 이유를 설명합니다. 고전적 편향-분산 절충이 틀린 것은 아니지만, 현대적 영역(regime)에서는 불완전합니다.

핵심 관찰은 다음과 같습니다.

  • 선형 모델(linear model), 결정 트리(decision tree), 신경망에서 모두 나타날 수 있습니다.
  • 보간 영역(interpolation region)에서는 데이터가 더 많아져도 오히려 나빠질 수 있습니다. 이를 표본 단위 이중 하강(sample-wise double descent)이라고 합니다.
  • 학습 에폭(training epoch)이 늘어날 때도 나타날 수 있습니다. 이를 에폭 단위 이중 하강(epoch-wise double descent)이라고 합니다.
  • 정규화는 정점(peak)을 완만하게 만들지만 완전히 없애지는 않습니다.

보간 임계점에서는 모델이 모든 학습 데이터 점을 맞출 용량을 겨우 갖습니다. 이때 모델은 모든 점을 지나가는 매우 특정한 해(solution)에 묶이고, 데이터의 작은 변화가 큰 적합(fit) 변화로 이어져 분산이 정점을 찍습니다. 임계점을 지나면 데이터를 완벽히 맞추는 해가 많아지고, 경사 하강법(gradient descent) 같은 학습 알고리즘의 암묵적 정규화(implicit regularization)가 그중 단순한 해를 고르는 경향이 생깁니다.

영역(Regime)파라미터 대 표본 수동작
미과대화(Underparameterized)p << n고전적 절충이 적용됨
보간 임계점(Interpolation threshold)p ~ n분산이 정점에 도달, 테스트 오류 급증
과대화(Overparameterized)p >> n암묵적 정규화가 작동하며 테스트 오류 감소

실무적으로 신경망이나 큰 트리 앙상블(tree ensemble)을 쓴다면 보간 임계점에 멈추지 않습니다. 명시적 정규화로 훨씬 아래에 있거나, 충분히 위로 넘어갑니다. 가장 나쁜 지점은 임계점 바로 위입니다.

모델 진단하기

flowchart TD
    A[Train error와 test error 비교] --> B{Gap이 큰가?}
    B -->|Yes| C[높은 분산 - 과적합]
    B -->|No| D{두 error가 모두 높은가?}
    D -->|Yes| E[높은 편향 - 과소적합]
    D -->|No| F[좋은 fit]

    C --> G[더 많은 데이터 / Regularization / 더 단순한 모델]
    E --> H[더 많은 feature / 더 복잡한 모델 / 더 약한 regularization]
    F --> I[Deploy]
증상진단처방
높은 학습 오류, 높은 테스트 오류편향(Bias)더 많은 특성, 복잡한 모델, 더 약한 정규화
낮은 학습 오류, 높은 테스트 오류분산(Variance)더 많은 데이터, 정규화, 더 단순한 모델, 드롭아웃
낮은 학습 오류, 낮은 테스트 오류좋은 적합출하 가능(Ship it)
학습 오류 감소, 테스트 오류 증가진행 중인 과적합조기 종료

실무 전략

편향이 문제라면:

  • 다항(polynomial) 또는 상호작용(interaction) 특성을 추가합니다.
  • 더 유연한 모델을 사용합니다. 예를 들어 선형 모델 대신 트리 앙상블을 씁니다.
  • 정규화 강도를 줄입니다.
  • 아직 수렴하지 않았다면 더 오래 학습합니다.

분산이 문제라면:

  • 학습 데이터를 더 모읍니다.
  • 배깅(bagging), 예를 들어 랜덤 포레스트(random forest)를 사용합니다.
  • 정규화를 늘립니다. lambda를 높이거나 드롭아웃을 늘립니다.
  • 특성 선택으로 잡음이 많은 특성(noisy feature)을 제거합니다.
  • 교차 검증(cross-validation)으로 조기에 탐지합니다.

앙상블(Ensemble)과 분산 감소

앙상블(ensemble)은 분산과 싸우는 가장 실용적인 도구입니다.

배깅(Bagging; Bootstrap Aggregating) 은 학습 데이터의 서로 다른 부트스트랩 표본(bootstrap sample)으로 여러 모델을 학습하고 예측을 평균냅니다. 개별 모델은 분산이 높지만 평균은 훨씬 낮은 분산을 갖습니다. 랜덤 포레스트는 결정 트리에 배깅을 적용한 것입니다.

수학적으로, 분산이 sigma^2인 독립 예측 N개를 평균내면 평균의 분산은 sigma^2 / N입니다. 실제 모델은 완전히 독립은 아니므로 감소 폭은 1/N보다 작지만 여전히 큽니다.

부스팅(Boosting) 은 모델을 순차적으로 만들며 현재 앙상블의 오류에 다음 모델이 집중하게 하여 편향을 줄입니다. 경사 부스팅(gradient boosting)과 에이다부스트(AdaBoost)가 대표적입니다. 모델을 너무 많이 더하면 과적합될 수 있어 조기 종료나 정규화가 필요합니다.

방법주요 효과편향 변화분산 변화
배깅(Bagging)분산 감소변화 없음감소
부스팅(Boosting)편향 감소감소증가 가능
스태킹(Stacking)둘 다 감소 가능메타 학습기(meta-learner)에 의존기본 모델(base model)에 의존
드롭아웃(Dropout)암묵적 배깅(implicit bagging)약간 증가감소

실무 규칙은 단순합니다. 기본 모델의 분산이 높다면 배깅을 쓰고, 편향이 높다면 부스팅을 고려합니다.

학습 곡선(Learning Curves) 읽기

학습 곡선은 학습 세트 크기(training set size)에 따른 학습 오류와 검증 오류(validation error)를 그립니다. 단일 학습/테스트 비교보다 훨씬 실용적인 진단 도구입니다. 모델이 어떤 궤적(trajectory)에 있는지 보여주고, 데이터가 더 도움이 되는지 알려줍니다.

flowchart TD
    subgraph HB["High Bias Learning Curve"]
        direction LR
        HB1["Small N: both errors high"]
        HB2["Large N: both errors converge to HIGH error"]
        HB1 --> HB2
    end

    subgraph HV["High Variance Learning Curve"]
        direction LR
        HV1["Small N: train low, test high (big gap)"]
        HV2["Large N: gap shrinks but slowly"]
        HV1 --> HV2
    end

    subgraph GF["Good Fit Learning Curve"]
        direction LR
        GF1["Small N: some gap"]
        GF2["Large N: both converge to LOW error"]
        GF1 --> GF2
    end
시나리오(Scenario)학습 오류검증 오류격차의미할 일
높은 편향높음높음작음모델이 패턴을 못 잡음더 많은 특성, 복잡한 모델, 덜 강한 정규화
높은 분산낮음높음학습 데이터를 외움더 많은 데이터, 정규화, 단순한 모델
좋은 적합보통보통작음잘 일반화출하 가능(Ship it)
높은 분산, 개선 중낮음더 많은 데이터로 감소줄어듦데이터로 해결 가능한 분산 문제데이터 수집
높은 편향, 평탄높음높고 평탄(flat)작고 평탄데이터 추가가 도움 안 됨모델 구조 변경

중요한 통찰은 이렇습니다. 두 곡선이 평탄 구간(plateau)에 도달했고 격차는 작지만 오류가 모두 높다면 데이터 추가는 무의미합니다. 더 나은 모델이 필요합니다. 격차가 크고 줄어드는 중이라면 데이터 추가가 도움이 됩니다.

학습 곡선 생성 방법

접근 방식은 두 가지입니다.

접근 1: 모델을 고정하고 학습 세트 크기를 바꿉니다. 모델과 하이퍼파라미터를 그대로 둡니다. 학습 데이터의 점점 큰 부분집합으로 학습합니다. 각 크기에서 학습 오류와 검증 오류를 측정합니다. 이것이 표준 학습 곡선입니다.

접근 2: 데이터를 고정하고 모델 복잡도를 바꿉니다. 데이터를 그대로 둡니다. 다항식 차수, 트리 깊이, 레이어 수 같은 복잡도 파라미터를 훑습니다. 각 복잡도에서 학습 오류와 검증 오류를 측정합니다. 이것이 검증 곡선(validation curve)이며, 편향-분산 절충을 직접 보여줍니다.

두 접근은 서로 보완적입니다. 첫 번째는 데이터가 더 도움이 될지 알려줍니다. 두 번째는 다른 모델이 도움이 될지 알려줍니다. 다음 단계를 결정하기 전에 둘 다 실행합니다.

flowchart TD
    A[성능이 낮은 모델] --> B[학습 곡선 생성]
    B --> C{학습과 검증 사이의 gap?}
    C -->|큰 gap, 검증 오류가 여전히 감소| D[데이터 추가가 도움 됨]
    C -->|작은 gap, 둘 다 높음| E[데이터 추가가 도움 안 됨]
    C -->|큰 gap, 검증 오류가 평평함| F[정규화하거나 단순화]
    E --> G[검증 곡선 생성]
    G --> H[더 복잡한 모델 시도]

만들어 보기

code/bias_variance.py는 전체 편향-분산 분해 실험을 실행합니다.

Step 1: 알려진 함수에서 합성 데이터 만들기

f(x) = sin(1.5x) + 0.5x에 가우시안 잡음(Gaussian noise)을 더합니다. 참 함수를 알고 있으므로 정확한 편향과 분산을 계산할 수 있습니다.

def true_function(x):
    return np.sin(1.5 * x) + 0.5 * x

def generate_data(n_samples=30, noise_std=0.5, x_range=(-3, 3), seed=None):
    rng = np.random.RandomState(seed)
    x = rng.uniform(x_range[0], x_range[1], n_samples)
    y = true_function(x) + rng.normal(0, noise_std, n_samples)
    return x, y

Step 2: 부트스트랩 표본 추출과 다항식 적합

각 다항식 차수(polynomial degree)에 대해 여러 부트스트랩 학습 세트를 뽑고 다항식을 적합(fit)한 뒤 고정된 테스트 그리드(test grid)에서 예측을 기록합니다. 이렇게 각 테스트 점에서 예측 분포(prediction distribution)를 얻습니다.

def fit_polynomial(x_train, y_train, degree, lam=0.0):
    X = np.column_stack([x_train ** d for d in range(degree + 1)])
    if lam > 0:
        penalty = lam * np.eye(X.shape[1])
        penalty[0, 0] = 0
        w = np.linalg.solve(X.T @ X + penalty, X.T @ y_train)
    else:
        w = np.linalg.lstsq(X, y_train, rcond=None)[0]
    return w

Step 3: 편향 제곱(Bias²)과 분산 계산

200개의 예측 집합이 있으면 정의 그대로 분해를 계산할 수 있습니다.

mean_pred = predictions.mean(axis=0)
bias_sq = np.mean((mean_pred - y_true) ** 2)
variance = np.mean(predictions.var(axis=0))
total_error = np.mean(np.mean((predictions - y_true) ** 2, axis=1))
  • mean_pred는 부트스트랩 표본으로 추정한 E[f_hat(x)]입니다.
  • bias_sq는 평균 예측과 참값 사이의 제곱 격차입니다.
  • variance는 부트스트랩 표본 사이 예측의 평균 퍼짐(spread)입니다.
  • total_error는 대략 bias^2 + variance + noise와 같아야 합니다.

Step 4: 학습 곡선(Learning curve)

학습 곡선은 모델 복잡도(model complexity)를 고정하고 학습 세트 크기를 바꿉니다. 모델이 데이터 제약(data-limited)인지 용량 제약(capacity-limited)인지 보여줍니다.

def demo_learning_curves():
    sizes = [10, 15, 20, 30, 50, 75, 100, 150, 200, 300]
    degree = 5

    for n in sizes:
        train_errors = []
        test_errors = []
        for seed in range(50):
            x_train, y_train = generate_data(n_samples=n, seed=seed * 100)
            w = fit_polynomial(x_train, y_train, degree)
            train_pred = predict_polynomial(x_train, w)
            train_mse = np.mean((train_pred - y_train) ** 2)
            test_pred = predict_polynomial(x_test, w)
            test_mse = np.mean((test_pred - y_test) ** 2)
            train_errors.append(train_mse)
            test_errors.append(test_mse)
        # 여러 실행의 평균이 학습 곡선의 한 점이 됩니다.

분산이 높은 모델에서는 학습 오류가 낮게 시작하고, 데이터가 많아질수록 암기(memorization)가 어려워져 학습 오류가 오를 수 있습니다. 반대로 테스트 오류는 신호가 늘어 낮아지고 격차는 줄어듭니다.

편향이 높은 모델에서는 두 오류가 빠르게 같은 높은 값에 수렴하고, 데이터를 더 넣어도 도움이 되지 않습니다.

Step 5: 정규화 훑기

demo_regularization_sweep()은 높은 차수의 다항식, 예를 들어 차수 15를 고정하고 릿지(Ridge) 정규화 강도를 0.001부터 100까지 바꿉니다. 모델 복잡도를 직접 바꾸는 대신 제약 강도(constraint strength)를 바꿔 같은 U자 곡선을 봅니다.

def demo_regularization_sweep():
    alphas = [0.001, 0.005, 0.01, 0.05, 0.1, 0.5, 1.0, 5.0, 10.0, 50.0, 100.0]
    for alpha in alphas:
        results = bias_variance_decomposition([15], lam=alpha)
        r = results[15]
        print(f"alpha={alpha:.3f}  bias={r['bias_sq']:.4f}  var={r['variance']:.4f}")

낮은 alpha에서는 차수 15의 다항식이 거의 제약되지 않아 잡음을 따라가고 분산이 지배합니다. 높은 alpha에서는 벌점(penalty)이 너무 강해 모델이 거의 상수 함수(constant function)처럼 되어 편향이 지배합니다. 최적 alpha는 그 사이에 있습니다.

이는 다항식 차수를 바꿀 때 보았던 같은 U자 곡선이지만, 이산적인 복잡도 대신 연속적인 손잡이로 제어합니다. 실무에서는 특성 집합을 바꾸지 않고도 세밀하게 제어할 수 있기 때문에 정규화가 절충을 제어하는 선호 방식입니다.

사용하기

scikit-learn은 부트스트랩 루프(bootstrap loop)를 직접 작성하지 않아도 이런 진단을 자동화할 수 있도록 learning_curvevalidation_curve를 제공합니다.

검증 곡선: 모델 복잡도 훑기

from sklearn.model_selection import validation_curve
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import PolynomialFeatures
from sklearn.linear_model import Ridge

degrees = list(range(1, 16))
train_scores_all = []
val_scores_all = []

for d in degrees:
    pipe = make_pipeline(PolynomialFeatures(d), Ridge(alpha=0.01))
    train_scores, val_scores = validation_curve(
        pipe, X, y, param_name="polynomialfeatures__degree",
        param_range=[d], cv=5, scoring="neg_mean_squared_error"
    )
    train_scores_all.append(-train_scores.mean())
    val_scores_all.append(-val_scores.mean())

학습 곡선: 학습 세트 크기 훑기

학습 곡선은 학습 세트 크기를 훑습니다.

from sklearn.model_selection import learning_curve

pipe = make_pipeline(PolynomialFeatures(5), Ridge(alpha=0.01))
train_sizes, train_scores, val_scores = learning_curve(
    pipe, X, y, train_sizes=np.linspace(0.1, 1.0, 10),
    cv=5, scoring="neg_mean_squared_error"
)
train_mse = -train_scores.mean(axis=1)
val_mse = -val_scores.mean(axis=1)

교차 검증과 정규화 훑기

Ridge/Lasso 같은 정규화 강도도 같은 방식으로 교차 검증(cross-validation)에서 훑습니다. alpha가 너무 작으면 분산이 커지고, 너무 크면 편향이 커집니다.

전체 진단 워크플로

실무 진단 워크플로(diagnostic workflow)는 다음 순서로 진행합니다.

  1. 모델을 학습하고 학습/테스트 오류를 계산합니다.
  2. 둘 다 높으면 편향 문제입니다. 더 복잡한 모델과 특성을 검토합니다.
  3. 학습 오류는 낮고 테스트 오류는 높으면 분산 문제입니다. 학습 곡선으로 데이터가 도움이 되는지 확인하고, 아니면 정규화합니다.
  4. 주요 복잡도 파라미터(complexity parameter)를 훑는(sweep) 검증 곡선을 만듭니다.
  5. 최적 지점(sweet spot)에서 학습 곡선을 다시 봅니다.
  6. 릿지(Ridge)/라쏘(Lasso)의 alpha를 교차 검증으로 훑고, 교차 검증 오류(CV error)가 가장 낮은 alpha를 고릅니다.

출하하기

이 lesson의 산출물은 다음입니다.

  • outputs/prompt-model-diagnostics.md

연습문제

  1. (쉬움) noise_std=0, 즉 잡음이 없는 설정으로 분해를 실행합니다. 줄일 수 없는 오류(irreducible error) 항은 어떻게 되나요? 최적 복잡도도 바뀌나요?
  2. (중간) 학습 세트 크기를 30에서 300으로 늘립니다. 분산 성분(variance component)은 어떻게 바뀌나요? 최적 다항식 차수가 이동하나요?
  3. (중간) L2 정규화(릿지 회귀; Ridge regression)를 실험에 추가합니다. 차수 15를 고정하고 lambda를 0부터 100까지 훑습니다. lambda에 따른 bias^2와 분산을 그립니다.
  4. (어려움) 참 함수를 다항식에서 sin(x)로 바꿉니다. 편향-분산 분해는 어떻게 바뀌나요? 여전히 명확한 최적 차수가 있나요?
  5. (어려움) 간단한 배깅 래퍼(bagging wrapper)를 구현합니다. 부트스트랩 표본으로 모델 10개를 학습하고 예측을 평균냅니다. 편향을 크게 늘리지 않으면서 분산이 줄어드는지 보입니다.

핵심 용어

용어흔한 설명실제 의미
편향(Bias)모델이 너무 단순함잘못된 가정에서 오는 체계적 오류. 평균 모델 예측과 참값 사이의 격차
분산(Variance)모델이 과적합함학습 데이터에 대한 민감도에서 오는 오류. 다른 학습 세트에서 예측이 얼마나 바뀌는지
줄일 수 없는 오류(Irreducible error)데이터의 잡음참 데이터 생성 과정(true data-generating process)의 무작위성에서 오는 오류. 어떤 모델도 없앨 수 없음
과소적합(Underfitting)충분히 학습하지 못함편향이 높음. 학습 데이터에서도 실제 패턴을 놓침
과적합(Overfitting)데이터를 외움분산이 높음. 학습 데이터의 잡음에 적합되어 일반화하지 못함
정규화(Regularization)모델 제약모델 복잡도를 줄이는 벌점을 추가해 편향을 늘리고 분산을 줄이는 방법
이중 하강(Double descent)파라미터가 더 많으면 도움이 될 수 있음보간 임계점을 훨씬 넘어서면 테스트 오류가 다시 감소하는 현상
모델 복잡도(Model complexity)모델 유연성임의의 패턴을 맞출 수 있는 용량. 구조(architecture), 특성, 정규화로 제어됨

더 읽을거리

실습 코드

이 강의의 실습 코드 1개

bias variance
Code

산출물

이 강의에서 생성된 프롬프트, 스킬, 코드 산출물 1개

prompt-model-diagnostics

Diagnose model performance issues using train/test metrics and learning curves

Prompt

확인 문제

3문제 · 모두 맞추면 완료 표시가 가능합니다

1.모델에 L2 정규화(L2 regularization)를 추가하면 편향은 증가하고 분산은 감소합니다. 이것이 유용한 이유는 무엇인가요?

2.어떤 모델의 학습 오류(training error)는 2%, 테스트 오류(test error)는 25%입니다. 가장 가능성 높은 진단은 무엇인가요?

3.같은 모델 아키텍처(architecture)를 50개의 다른 무작위 학습 부분집합(random training subset)에 학습했더니 예측이 크게 달라졌습니다. 이는 무엇을 의미하나요?

0/3 답변 완료

추가 문제 풀기

AI가 강의 내용을 바탕으로 새로운 문제를 생성합니다