////
Search

Bias(편향)-Variance(분산) Trade-off

태그
머신러닝 일반
목차
출처

1. 개요

머신러닝에서
Bias(편향)는 모델을 통해 얻은 예측값과 실제 정답간의 차이의 평균을 나타낸다.
Variance(분산)다양한 데이터 셋에 대하여 예측값이 얼만큼 변화할 수 있는지에 대한 양(예측값의 편차 제곱의 평균)을 나타낸다. (예측값이 얼만큼 퍼져서 다양하게 출력될 수 있는지를 나타냄)
일반적으로 둘은 trade-off 관계에 있어서 한 쪽을 낮추면 한 쪽이 올라간다.

2. Notations

Bias와 Variance의 정의에 대해 설명하기 전에 notation을 정리하자.
f(x)f(x)는 정답 모델에 입력 데이터 xx가 입력되었을 때, 모델이 출력하는 예측값이다. 정답 모델은 하나이기 때문에 하나의 값만 존재한다.
f^(x)\hat{f}(x)는 머신 러닝 모델에 입력 데이터 xx가 입력되었을 때, 모델이 출력하는 예측값이다. 모델의 상태(ex. 파라미터 값)에 따라 다양한 값들을 출력할 수 있다. 즉, 여러 값들을 만들어낼 수 있다.
E[f^(x)]E[\hat{f}(x)]f^(x)\hat{f}(x)의 평균(기댓값)에 해당한다.

3. Bias(편향)

Bias는 모델을 통해 얻은 예측값과 실제 정답간의 차이의 평균을 나타낸다. Bias가 높다는 것은 예측값과 정답간의 차이가 크다는 것을 의미한다.
Bias[f^(x)]=E[f^(x)f(x)]\text{Bias}[\hat{f}(x)] = E[\hat{f}(x) - f(x)]

4. Variance(분산)

Variance는 다양한 데이터 셋에 대하여 예측값이 얼만큼 변화할 수 있는지에 대한 양을 나타낸다. 모델이 얼마나 유연한지를 나타내며 본래 분산의 뜻과 같이 예측값이 얼마나 퍼져서 다양하게 출력될 수 있는지를 뜻한다.
Var[f^(x)]=E[(f^(x)E[f^(x)])2]=E[f^(x)2]E[f^(x)]2\text{Var}[\hat{f}(x)] = E[(\hat{f}(x)-E[\hat{f}(x)])^2] = E[\hat{f}(x)^2] - E[\hat{f}(x)]^2

5. Bias-Variance Trade-off

우리가 찾고자 하는 Target의 True값을 t(x)t(x)라고 하자. 그런데 우리가 정답 모델을 갖고 있더라도 예측하거나 해결할 수 없는 error(irreducible error)가 존재한다. 이는 관측에서 오는 error일 수도 있고 다양한 원인이 존재한다. 따라서 t(x)=f(x)+ϵt(x) = f(x) + \epsilon 으로 표현할 수 있다.
이때 True 값과 우리가 가진 모델의 예측값 간의 오차의 평균을 구하면 다음과 같다.
E[(t(x)f^(x))2]=E[(t(x)f(x)+f(x)f^(x))2]=E[(t(x)f(x))2]+E[(f(x)f^(x))2]+2E[(f(x)f^(x))(t(x)f(x))]=E[ϵ2]+E[(f(x)f^(x))2]+2[E[f(x)t(x)]E[f(x)2]E[f(x)^t(x)]+E[f^(x)f(x)]]=0=E[(f(x)E[f^(x)]+E[f^(x)]f^(x))2]+E[ϵ2]=E[(f(x)E[f^(x)])2]+E[(E[f^(x)]f^(x))2]+2E[(E[f^(x)]f^(x))(f(x)E[f^(x)])]=0+E[ϵ2]=E[(f(x)E[f^(x)])2]bias2+E[(E[f^(x)]f^(x))2]variance+E[ϵ2]noise\begin{align*} E[(t(x)-\hat{f}(x))^2] &= E[(t(x)-f(x)+f(x)-\hat{f}(x))^2] \\ & = E[(t(x)-f(x))^2] + E[(f(x)-\hat{f}(x))^2]+2E[(f(x)-\hat{f}(x))(t(x)-f(x))] \\ & = E[\epsilon^2] + E[(f(x)-\hat{f}(x))^2] + \underbrace{2[E[f(x)t(x)]-E[f(x)^2]-E[\hat{f(x)}t(x)]+E[\hat{f}(x)f(x)]]}_{=0} \\ & = E[(f(x)-E[\hat{f}(x)]+E[\hat{f}(x)]-\hat{f}(x))^2] + E[\epsilon^2] \\ & = E[(f(x)-E[\hat{f}(x)])^2] + E[(E[\hat{f}(x)]-\hat{f}(x))^2] + \underbrace{2E[(E[\hat{f}(x)]-\hat{f}(x))(f(x)-E[\hat{f}(x)])]}_{=0} + E[\epsilon^2] \\ & = \underbrace{E[(f(x)-E[\hat{f}(x)])^2]}_{\text{bias}^2} + \underbrace{E[(E[\hat{f}(x)]-\hat{f}(x))^2]}_{\text{variance}} + \underbrace{E[\epsilon^2]}_{\text{noise}} \end{align*}
수식을 보면 noise는 모델과 독립적이기 때문에 모델 학습을 통해 최소화 하는 것이 불가능하다.
Bias 항을 최소화 하기 위해 E[f^(x)]=f(x)E[\hat{f}(x)] = f(x)가 되도록 모델을 학습시키면 variance 항은 E[ϵ2]E[\epsilon^2]이 된다. 반대로 variance를 최소화 하기 위해 f^(x)=a\hat{f}(x)= a (a는 상수)로 설정하면 bias가 증가하게 된다.