편향과 분산
고친 사람 github-actions[bot]
편향과 분산은 모델이 처음 보는 데이터에서 틀리는 까닭을 두 갈래로 나눠 봅니다. 편향은 모델이 너무 단순해서 늘 같은 쪽으로 빗나가는 오차입니다. 분산은 학습한 데이터가 조금만 달라져도 답이 크게 흔들리는 오차입니다. 모델이 복잡해질수록 편향은 줄고 분산은 늘어나므로 그 사이 어디에 설지 골라야 합니다.
쉽고 빠른 이해
편향과 분산은 모델의 실수를 두 종류로 가르는 틀입니다. 면적으로 집값을 맞히는 모델이 곧은 선 하나만 그을 수 있으면 어떤 데이터로 배워도 비슷하게 빗나갑니다. 이 빗나감이 편향입니다. 데이터의 점을 하나도 빠짐없이 지나는 구불구불한 선을 그으면 데이터가 조금만 바뀌어도 선 모양이 확 달라집니다. 이 흔들림이 분산입니다.
한쪽을 줄이면 다른 쪽이 커집니다. 이 관계를 편향-분산 맞바꿈(트레이드오프)이라고 부릅니다. 그래서 둘을 같이 봐야 모델을 얼마나 복잡하게 만들지 정할 수 있습니다.
두 오차는 이렇게 맞섭니다.
- 모델이 단순하면 데이터의 굽은 모양을 못 따라가 늘 같은 쪽으로 빗나갑니다
- 모델을 복잡하게 하면 굽은 모양을 따라가 빗나감이 줄어듭니다
- 너무 복잡하게 하면 데이터에 우연히 섞인 오차까지 따라가 답이 데이터마다 달라집니다
대가는 두 오차를 함께 0으로 만들 수 없다는 것입니다. 답의 흔들림(분산)은 데이터를 더 모아 줄일 수 있습니다. 다만 모으는 데 비용이 듭니다.
상세
집값 모델 하나를 네 번 따로 학습시키는 생각 실험으로 두 오차를 숫자로 뽑아 봅니다.
과녁을 쏘는 두 궁수
과녁에 화살을 열 발씩 쏘는 궁수가 둘 있습니다. 첫째 궁수의 화살은 한곳에 촘촘히 모여 꽂힙니다. 그런데 모인 곳이 과녁 한가운데에서 왼쪽으로 비켜나 있습니다.
둘째 궁수의 화살은 한가운데를 둘러싸고 꽂힙니다. 그런데 이곳저곳 넓게 흩어져 있습니다. 첫째 궁수는 조준이 늘 같은 쪽으로 틀어져 있습니다. 둘째 궁수는 손이 떨립니다.
모델과 학습
머신러닝에서 모델은 입력을 받아 답을 내는 함수입니다. 집의 면적을 넣으면 집값을 내는 식입니다. 학습은 답을 아는 예제를 보여 주며 이 함수를 데이터에 맞게 고치는 일입니다.
학습에 쓰는 예제 묶음을 훈련 세트라고 부릅니다. 모델을 만드는 목적은 훈련 세트를 맞히는 것이 아닙니다. 앞으로 들어올 새 입력을 맞히는 것입니다.
처음 보는 입력에서도 잘 맞히는 성질을 일반화라고 합니다. 편향과 분산은 일반화가 깨지는 까닭을 두 갈래로 나눕니다. 두 낱말을 세우려면 생각 실험이 하나 필요합니다.
같은 모델을 네 번 학습시키는 생각 실험
같은 동네에서 집 거래 기록을 네 번 따로 모았다고 합시다. 묶음마다 담긴 거래가 조금씩 다릅니다. 같은 종류의 모델을 이 네 훈련 세트로 한 번씩 학습시키면 모델이 넷 생깁니다. 이 넷은 직선만 그을 수 있는 단순한 모델이라고 합시다.
이 넷에게 같은 집 한 채의 값을 물어봅니다. 그 집의 실제 값은 10억 원이라고 합시다. 모델 넷은 학습한 데이터가 달랐으므로 서로 다른 답을 냅니다.
flowchart TD
S["같은 동네의 집 거래"] --> A1["훈련 세트 1로 배운 모델 · 7억"]
S --> A2["훈련 세트 2로 배운 모델 · 7억"]
S --> A3["훈련 세트 3으로 배운 모델 · 8억"]
S --> A4["훈련 세트 4로 배운 모델 · 6억"]
A1 & A2 & A3 & A4 --> B["네 답의 평균 7억 · 실제 값 10억보다 3억 낮다 → 편향"]
A1 & A2 & A3 & A4 --> C["평균 7억 둘레로 퍼진 정도 0.5 → 분산"]
그림처럼 네 답을 모으면 두 가지를 잴 수 있습니다. 하나는 네 답의 평균이 실제 값에서 얼마나 떨어졌나입니다. 다른 하나는 네 답이 그 평균 둘레에 얼마나 퍼져 있나입니다.
편향
편향은 모델이 낸 답들의 평균과 실제 값의 차이입니다. 위 모델 넷의 답이 7억·7억·8억·6억 원이면 평균은 7억 원입니다. 실제 값 10억 원보다 3억 원 낮으니 편향은 −3억 원입니다.
편향이 크다는 것은 데이터를 몇 번 새로 모아도 모델이 같은 쪽으로 틀린다는 뜻입니다. 데이터 탓이 아닙니다. 집값이 면적에 따라 휘어 오르는 모양처럼, 모델이 애초에 담지 못하는 모양이 있다는 신호입니다. 조준이 틀어진 첫째 궁수가 이 경우입니다.
분산
분산은 모델이 낸 답들이 그 평균 둘레에 얼마나 퍼져 있는지를 잽니다. 먼저 답마다 평균에서 떨어진 거리를 제곱합니다. 그 제곱들을 평균 낸 값이 분산입니다. 7·7·8·6이라면 평균 7에서 떨어진 거리가 0·0·1·1입니다. 제곱의 평균은 0.5입니다.
거리를 제곱했으니 이 0.5의 단위는 억 원이 아니라 억 원의 제곱입니다. 이렇게 제곱한 값은 앞으로 단위를 떼고 숫자만 적겠습니다.
분산이 크다는 것은 학습한 데이터가 조금만 달라져도 답이 크게 바뀐다는 뜻입니다. 손이 떨리는 둘째 궁수가 이 경우입니다.
다른 분야의 분산과 편향
이 「분산」은 분산 시스템의 분산과 다른 낱말입니다. 분산 시스템의 분산은 일을 여러 컴퓨터에 나눠 맡긴다는 뜻입니다. 영어로 distributed 입니다. 여기의 분산은 값이 흩어진 정도를 재는 통계의 수입니다. 영어로 variance 입니다.
이 「편향」도 표본 편향과 다릅니다. 표본 편향은 데이터를 모으는 방식이 한쪽으로 쏠린 것입니다. 여기의 편향은 모델의 답이 한쪽으로 빗나가는 것입니다.
오차를 세 조각으로 나누기
모델이 틀린 정도는 흔히 제곱 오차로 잽니다. 답과 실제 값의 차이를 제곱한 값입니다. 제곱하면 위로 빗나가든 아래로 빗나가든 양수가 됩니다. 크게 빗나갈수록 훨씬 크게 셉니다.
제곱 오차를 여러 훈련 세트에 걸쳐 평균 낸 값이 평균 제곱 오차입니다. 훈련 세트를 어떻게 모으든 이 모델이 평균적으로 얼마나 틀리는지를 한 수로 보여 줍니다.
평균 제곱 오차는 「편향의 제곱 + 분산 + 줄일 수 없는 오차」로 나뉩니다. 이렇게 나누는 것을 편향-분산 분해라고 부릅니다. 분산은 거리를 제곱해 평균 낸 값이라 단위가 제곱입니다. 편향도 제곱하면 같은 단위가 되어 함께 더할 수 있습니다.
줄일 수 없는 오차는 데이터 자체에 섞인 우연한 오차에서 옵니다. 면적과 동네가 같은 집도 파는 사람의 사정에 따라 값이 다르게 매겨집니다. 이렇게 값에 우연히 섞인 오차를 잡음이라고 부릅니다. 어떤 모델도 잡음까지 맞힐 수는 없습니다.
짧은 코드로 분해를 확인해 보겠습니다. simple 은 앞에서 본 단순한 모델 넷의 답입니다. flexible 은 구불구불한 선을 그을 수 있는 복잡한 모델 넷의 답입니다. 이 예에서는 그 집 값이 언제 재도 10이라고 둡니다. 값이 매번 달라지는 잡음이 없으니 줄일 수 없는 오차는 0입니다.
truth = 10
simple = [7, 7, 8, 6]
flexible = [14, 6, 12, 8]
def mean(p):
return sum(p) / len(p)
def bias(p):
return mean(p) - truth
def var(p):
m = mean(p)
return mean([(x - m) ** 2 for x in p])
def mse(p):
return mean([(x - truth) ** 2 for x in p])
bias(simple) # -3.0
var(simple) # 0.5
mse(simple) # 9.5
bias(flexible) # 0.0
var(flexible) # 10.0
mse(flexible) # 10.0
bias 는 편향을, var 는 분산을, mse 는 평균 제곱 오차를 셉니다. 단순한 모델은 편향의 제곱 9에 분산 0.5를 더해 9.5입니다. 복잡한 모델은 편향의 제곱 0에 분산 10을 더해 10입니다. 두 모델 모두 mse 가 편향의 제곱과 분산의 합과 같습니다.
복잡한 모델은 평균으로는 정답을 맞혔습니다. 그런데 답 하나하나는 4억 원씩 빗나가기도 합니다. 그래서 전체 오차가 단순한 모델보다 오히려 큽니다. 편향만 줄인다고 오차가 줄지는 않는다는 것이 이 틀의 요점입니다.
복잡도가 두 오차를 반대로 움직이는 까닭
면적과 집값의 관계가 곧은 직선이 아니라 완만하게 휘어 있다고 합시다. 가장 단순한 모델은 직선 하나만 그을 수 있습니다. 직선은 휜 모양을 따라가지 못합니다. 그래서 어느 구간에서는 늘 낮게, 어느 구간에서는 늘 높게 맞힙니다.
직선은 훈련 세트가 바뀌어도 기울기가 조금 바뀔 뿐입니다. 그래서 네 번 학습시켜도 답이 비슷합니다. 편향은 크고 분산은 작습니다.
반대로 구불구불한 곡선을 마음껏 그릴 수 있는 모델은 훈련 세트의 점을 하나도 빠짐없이 지나갈 수 있습니다. 휜 모양을 따라가니 답의 평균이 실제 값에 가깝습니다. 편향이 작습니다.
그런데 점 하나하나에는 잡음이 섞여 있습니다. 곡선이 점을 다 지나가면 잡음까지 따라 휩니다. 훈련 세트가 바뀌면 잡음도 바뀌므로 곡선 모양이 크게 달라집니다. 분산이 큽니다.
모델이 얼마나 복잡한 모양까지 그릴 수 있는지를 모델 용량이라고 부릅니다. 용량을 올리면 편향이 줄고 분산이 늘어납니다. 한쪽이 줄면 다른 쪽이 커지는 이 관계가 편향-분산 맞바꿈입니다.
줄일 수 없는 오차는 용량과 상관없이 그대로입니다. 그래서 용량을 바꿀 때 움직이는 것은 편향의 제곱과 분산 두 조각입니다. 아래 그림에서 막대가 편향의 제곱, 선이 분산입니다. 가로축 1이 가장 단순한 모델이고 7이 가장 복잡한 모델입니다.
xychart-beta
title "용량에 따른 두 조각"
x-axis "모델 용량" ["1", "2", "3", "4", "5", "6", "7"]
y-axis "오차" 0 --> 10
bar [9, 5, 2.5, 1, 0.5, 0.2, 0]
line [0.5, 1, 1.5, 2.5, 4, 6.5, 10]
전체 오차는 두 조각의 합입니다. 처음에는 편향이 빨리 줄어 합도 줄어듭니다. 어느 지점을 지나면 분산이 더 빨리 늘어 합이 다시 늘어납니다. 그래서 용량을 가로축에 놓고 전체 오차를 그리면 U자 모양이 나옵니다.
xychart-beta
title "용량에 따른 전체 오차"
x-axis "모델 용량" ["1", "2", "3", "4", "5", "6", "7"]
y-axis "오차" 0 --> 10
line [9.5, 6, 4, 3.5, 4.5, 6.7, 10]
양 끝 9.5와 10은 앞 코드의 단순한 모델·복잡한 모델과 같은 값입니다. 가운데 값은 모양을 보이려고 고른 예시입니다. 바닥은 용량 4 근처에 있습니다.
양 끝이 얻는 것과 내주는 것
이 문서는 축의 두 끝을 「단순한 모델」과 「복잡한 모델」이라고 부릅니다. 단순한 끝은 편향이 큰 쪽입니다. 복잡한 끝은 분산이 큰 쪽입니다.
어느 한 끝으로 너무 가면 이름 붙은 고장이 생깁니다. 모델이 너무 단순해 훈련 세트조차 잘 못 맞히는 상태가 과소적합입니다. 훈련 세트는 잘 맞히는데 처음 보는 데이터는 못 맞히는 상태가 과적합입니다.
두 끝은 얻는 것과 내주는 것이 엇갈립니다.
| 단순한 모델 | 복잡한 모델 | |
|---|---|---|
| 그릴 수 있는 모양 | 직선처럼 곧은 모양 | 점을 다 지나는 구불구불한 모양 |
| 큰 쪽의 오차 | 편향 | 분산 |
| 훈련 세트가 바뀌면 | 답이 거의 안 바뀜 | 답이 크게 바뀜 |
| 얻는 것 | 데이터가 적어도 답이 안정적 | 굽은 관계도 담을 수 있음 |
| 내주는 것 | 데이터의 굽은 모양을 놓침 | 잡음을 규칙으로 착각함 |
| 이 끝으로 너무 가면 | 과소적합 | 과적합 |
지금 어느 끝에 서 있는지 알아보는 법
편향과 분산은 정의대로라면 훈련 세트를 여러 번 새로 모아야 잴 수 있습니다. 실무에서는 그렇게 못 합니다. 대신 오차 두 개를 견줘 어림합니다.
학습에 안 쓰고 떼어 둔 데이터를 검증 세트라고 합니다. 훈련 세트에서 잰 오차가 훈련 오차입니다. 검증 세트에서 잰 오차가 검증 오차입니다. 두 오차의 크기와 둘 사이의 틈을 보면 어느 끝에 서 있는지 짐작할 수 있습니다.
| 보이는 것 | 서 있는 끝 | 뜻 |
|---|---|---|
| 훈련 오차 큼 · 검증 오차도 비슷하게 큼 | 단순한 끝 · 편향이 큼 | 훈련 세트조차 못 맞힘 |
| 훈련 오차 작음 · 검증 오차 훨씬 큼 | 복잡한 끝 · 분산이 큼 | 훈련 세트에만 맞춰짐 |
훈련 세트 크기를 늘려 가며 두 오차를 그린 그래프를 학습 곡선이라고 합니다. 편향이 큰 모델은 데이터를 늘려도 두 오차가 높은 곳에서 붙은 채 내려오지 않습니다. 분산이 큰 모델은 데이터를 늘릴수록 두 오차 사이의 틈이 좁아집니다.
아래 두 그림에서 위 선이 검증 오차, 아래 선이 훈련 오차입니다. 값은 모양을 보이려고 고른 예시입니다.
xychart-beta
title "편향이 큰 모델"
x-axis "훈련 세트 크기" ["1", "2", "3", "4", "5", "6"]
y-axis "오차" 0 --> 12
line [12, 9, 7.5, 7, 6.8, 6.7]
line [3, 4.5, 5.5, 6, 6.2, 6.3]
xychart-beta
title "분산이 큰 모델"
x-axis "훈련 세트 크기" ["1", "2", "3", "4", "5", "6"]
y-axis "오차" 0 --> 12
line [12, 9, 7, 5.5, 4.5, 3.8]
line [0, 0.3, 0.6, 1, 1.3, 1.5]
첫 그림의 두 선은 높은 곳에서 곧 만나 평평해집니다. 데이터를 더 모아도 소용이 없다는 뜻입니다. 둘째 그림의 두 선은 오른쪽으로 갈수록 틈이 좁아집니다. 데이터를 더 모으면 검증 오차가 계속 내려갑니다.
끝을 옮기는 법
서 있는 끝을 알았으면 반대쪽으로 옮깁니다. 방법마다 줄어드는 쪽이 다릅니다. 표를 보기 전에 낱말 셋을 먼저 풉니다.
특성은 모델에 넣는 입력 항목 하나하나입니다. 면적 하나만 넣던 모델에 방 개수와 역까지 거리를 더 넣는 것이 특성을 더하는 일입니다. 특성이 늘면 모델이 담을 수 있는 모양이 늘어납니다.
규제는 모델이 지나치게 구불구불해지지 않도록 학습할 때 벌점을 주는 방법입니다. 곡선을 크게 휠수록 오차에 벌점이 더해집니다. 그래서 모델은 꼭 필요한 만큼만 휩니다.
모델 용량을 정하는 값은 학습 전에 사람이 고릅니다. 이런 값을 하이퍼파라미터라고 합니다. 표 첫 두 줄의 「모델 용량을 올린다·내린다」는 이 값을 바꾸는 일입니다.
결정 트리가 그 예입니다. 결정 트리는 「면적이 30평보다 큰가」 같은 질문을 차례로 던져 답을 고르는 모델입니다. 최대 깊이는 질문을 몇 번까지 이어 던질지 정하는 하이퍼파라미터입니다. 깊을수록 데이터를 잘게 나눠 복잡한 모양을 그리므로 복잡한 끝으로 갑니다.
| 방법 | 줄어드는 쪽 | 늘어날 수 있는 쪽 |
|---|---|---|
| 모델 용량을 올린다 · 특성을 더한다 | 편향 | 분산 |
| 모델 용량을 내린다 · 특성을 덜어 낸다 | 분산 | 편향 |
| 규제를 세게 건다 | 분산 | 편향 |
| 훈련 데이터를 더 모은다 | 분산 | 거의 없음 |
| 따로 학습한 모델 여럿의 답을 평균 낸다 | 분산 | 거의 없음 |
마지막 줄은 모델마다 다른 흔들림이 평균을 내는 동안 서로 상쇄된다는 생각입니다. 앞 생각 실험의 복잡한 모델 넷으로 보면 이렇습니다.
flowchart TD
A1["모델 1 · 14억"] --> M["네 답의 평균 · 10억 = 실제 값"]
A2["모델 2 · 6억"] --> M
A3["모델 3 · 12억"] --> M
A4["모델 4 · 8억"] --> M
답 하나하나는 2억에서 4억씩 빗나가는데 평균은 실제 값과 같습니다. 위로 빗나간 답과 아래로 빗나간 답이 서로 지운 것입니다. 이 예는 편향이 0이라 딱 맞았습니다. 보통은 흔들림이 다 없어지지 않고 줄어듭니다.
이렇게 여러 모델의 답을 모아 하나의 답을 내는 방법을 앙상블이라고 합니다.
배깅은 훈련 세트를 바꿔 가며 모델을 여럿 만들고 그 답을 평균 냅니다. 주로 분산을 줄입니다.
부스팅은 단순한 모델을 차례로 이어 붙여 앞 모델이 틀린 것을 뒤 모델이 고치게 합니다. 주로 편향을 줄입니다.
끝을 정하는 조건
어느 끝 가까이 설지는 데이터와 문제의 성질이 정합니다. 조건마다 기울 끝과 그 까닭이 갈립니다.
| 조건 | 기울 끝 | 까닭 |
|---|---|---|
| 훈련 데이터가 적다 | 단순한 모델 | 적은 데이터에 맞춘 복잡한 모델은 잡음을 외우기 쉬움 |
| 훈련 데이터가 많다 | 복잡한 모델 | 데이터가 많을수록 분산이 줄어 흔들림이 작음 |
| 답에 잡음이 많이 섞여 있다 | 단순한 모델 | 복잡한 모델은 잡음까지 따라 휨 |
| 입력과 답의 관계가 굽은 정도가 크다 · 사진 속 물체 알아보기 | 복잡한 모델 | 단순한 모델로는 그 모양을 못 담아 편향이 남음 |
조건만으로 안 정해질 때는 후보 용량 여럿을 놓고 검증 오차가 가장 작은 쪽을 고릅니다. 데이터가 적어 검증 세트를 떼기 아까우면 교차 검증으로 검증 오차를 어림합니다. 교차 검증은 데이터를 여러 조각으로 나눕니다. 그리고 조각을 돌아가며 한 번씩 채점용으로 씁니다.
맞바꿈이 그대로 들어맞지 않는 경우
데이터를 더 모으면 분산이 줄어듭니다. 편향은 거의 안 바뀝니다. 그래서 이 맞바꿈은 데이터 양이 정해져 있을 때의 이야기입니다. 데이터가 늘면 같은 전체 오차로 더 복잡한 끝에 설 수 있습니다.
아주 큰 신경망에서는 U자와 다른 모양도 관찰됩니다. 훈련 세트를 전부 외울 만큼 용량을 올린 뒤에도 더 올리면 검증 오차가 다시 내려가는 경우가 있습니다. 이 현상을 이중 하강이라고 부릅니다. 그래서 앞의 U자 그림은 모델이 훈련 세트를 다 외우기 전 구간을 설명하는 그림입니다.
관련 항목
편향과 분산이 설명하는 고장과 성질
편향과 분산을 가늠하는 데이터 묶음과 검증 방법
훈련 데이터 · 검증 세트 · 테스트 세트 · 교차 검증 · 학습 곡선 · 데이터 누수
오차를 세 조각으로 나누는 통계 개념
평균 제곱 오차 · 제곱 오차 · 분산 (통계) · 기댓값 · 잡음 · 추정량
편향과 분산 사이를 옮겨 가는 조절 방법
모델 용량 · 하이퍼파라미터 · 규제 (머신러닝) · 특성 · 특성 선택 · 조기 종료 · 드롭아웃
분산이나 편향을 줄이는 앙상블 방법
앙상블 · 배깅 · 부스팅 · 랜덤 포레스트
용량을 골라야 하는 학습 모델
선형 회귀 · 다항 회귀 · 결정 트리 · 최근접 이웃 · 신경망
U자 그림을 벗어나는 현상
이중 하강 · 과매개변수화 · 보간 임계점
이름이 겹쳐 헷갈리는 이웃
분산 시스템 · 표본 편향 · 귀납 편향 · 편향 (신경망)
나란히 놓이는 다른 맞바꿈 축
정밀도와 재현율 · 시간과 공간 맞바꿈 · CAP · 지연과 처리량
편향과 분산이 속하는 상위 분류
다른 이름: bias-variance tradeoff · bias and variance · 편향-분산 트레이드오프 · 편향 분산 맞바꿈 · 편향-분산 분해