8장 - 데이터 분할, 모델과 교차 검증

🏷️ "cs229" "machine-learning" "book"

8장. 데이터 분할, 모델과 교차 검증

지금까지 여러 학습 알고리즘을 배웠다. 선형 회귀, 로지스틱 회귀, 생성 모델인 GDA와 나이브 베이즈, 그리고 가장 최근에는 서포트 벡터 머신까지. 이제부터는 이 알고리즘들을 실제로 어떻게 잘 적용할 것인가에 대한 조언을 이야기하겠다. — Andrew Ng

8-cs229-bias-variance.png

8.1 편향과 분산

편향(bias)과 분산(variance)은 머신러닝에서 가장 핵심적인 개념 중 하나다. 이해하기는 쉽지만 완전히 체득하기는 어렵다. 오랜 경력의 박사 과정 학생들도 졸업 후 산업계에서 수년간 일하면서 편향과 분산에 대한 이해가 계속 깊어졌다고 말한다. 이 개념을 제대로 이해하면 학습 알고리즘을 개발하고 개선하는 효율성이 크게 달라진다.

회귀 문제에서의 편향과 분산

주택 가격 예측 문제를 생각해 보자. 가로축은 주택 면적, 세로축은 가격이다. 동일한 데이터셋에 세 가지 다른 모델을 적합시켜 본다.

1. 직선 적합 (선형 함수: \(\theta_0 + \theta_1 x\))

데이터가 곡선 형태를 띠는데도 직선을 적합시키면, 데이터에 분명히 드러나는 추세를 포착하지 못한다. 이를 **과소적합(underfitting)**이라 하며, 이 알고리즘은 **높은 편향(high bias)**을 가진다고 말한다.

여기서 편향이라는 용어는 사회적 맥락의 편향(인종 편향, 성별 편향 등)과 전혀 다른 의미다. 머신러닝에서의 편향은 알고리즘이 "데이터는 선형 함수로 적합시킬 수 있다"는 지나치게 강한 사전 가정을 가졌다는 뜻이다. 이 사전 가정이 실제와 맞지 않을 때 높은 편향이 발생한다.

2. 이차 함수 적합

데이터의 곡선 추세를 적절히 반영한다. **적절한 적합(just right)**이다.

3. 5차 다항식 적합

6개의 데이터 포인트에 5차 다항식을 적합시키면 모든 점을 완벽하게 통과하는 함수를 얻을 수 있다. 그러나 이 모델은 훈련 데이터에 과도하게 맞추어져 있어 새로운 데이터에 대한 예측이 불안정하다. 이를 **과적합(overfitting)**이라 하며, **높은 분산(high variance)**을 가진다고 말한다.

높은 분산이라는 명칭의 직관은 다음과 같다. 누군가가 약간 다른 데이터를 수집하여 같은 실험을 반복하면, 5차 다항식은 완전히 다른 형태의 함수를 적합시킨다. 즉, 서로 다른 데이터 표본에 대해 예측이 크게 달라지므로 예측의 분산이 매우 높다.

분류 문제에서의 편향과 분산

이진 분류 문제에서도 동일한 현상이 나타난다.

높은 편향과 높은 분산의 동시 발생

일반적으로 높은 편향은 과소적합, 높은 분산은 과적합과 거의 같은 의미로 쓰인다. 그러나 때로는 둘이 동시에 발생하기도 한다. 매우 복잡한 함수이면서도 데이터를 제대로 적합시키지 못하는 경우가 이에 해당한다.

학습 알고리즘 개발의 일반적 흐름

학습 알고리즘을 훈련하면 처음부터 잘 작동하는 경우는 거의 없다. 일반적인 작업 흐름은 다음과 같다.

  1. 빠르고 간단한 모델을 먼저 훈련한다.
  2. 알고리즘이 높은 편향 문제를 가지는지, 높은 분산 문제를 가지는지 진단한다.
  3. 진단 결과에 따라 적절한 개선 방법을 선택한다.

편향을 줄이는 도구와 분산을 줄이는 도구는 서로 다르며, 이에 대해서는 이후 강의에서 더 자세히 다룬다.


8.2 정규화

과적합을 방지하는 가장 효과적인 기법 중 하나가 **정규화(regularization)**이다. 설명 자체는 단순하지만, 실무에서 매우 빈번하게 사용되므로 그 중요성을 과소평가해서는 안 된다.

선형 회귀에서의 정규화

선형 회귀의 비용 함수에 정규화 항을 추가한다.

\[\min_\theta \frac{1}{2} \sum_{i=1}^{m} \left( h_\theta(x^{(i)}) - y^{(i)} \right)^2 + \frac{\lambda}{2} \|\theta\|^2\]

여기서 \(\frac{\lambda}{2} \|\theta\|^2\)정규화 항이다. 이 항은 매개변수 \(\theta\)가 지나치게 커지지 않도록 제약을 건다.

정규화 매개변수 \(\lambda\)의 효과

\(\lambda\)

효과

\(\lambda = 0\)

정규화 없음. 5차 다항식 특성을 사용하면 과적합 발생

적절한 \(\lambda\) (예: \(\lambda = 1\))

매개변수가 적당히 작게 유지되어 적절한 적합 달성

지나치게 큰 \(\lambda\) (예: \(\lambda = 10^{100}\))

모든 매개변수가 거의 0으로 수렴하여 \(h_\theta(x) \approx 0\). 과소적합 발생

\(\lambda\)를 0에서부터 매우 큰 값까지 조절하면, 지나치게 복잡한 함수(\(h = 0\))부터 지나치게 단순한 함수까지 부드럽게 보간할 수 있다.

로지스틱 회귀에서의 정규화

로지스틱 회귀의 경우, 최대화 문제이므로 정규화 항을 빼준다.

\[\max_\theta \sum_{i=1}^{m} \left[ y^{(i)} \log h_\theta(x^{(i)}) + (1 - y^{(i)}) \log(1 - h_\theta(x^{(i)})) \right] - \frac{\lambda}{2} \|\theta\|^2\]

이는 일반화 선형 모델(GLM) 계열의 모든 분류 알고리즘에 동일하게 적용할 수 있다.

서포트 벡터 머신과 정규화

SVM은 무한 차원의 특성 공간에서도 작동하는데, 왜 과적합이 심하게 발생하지 않는가? SVM의 최적화 목적함수가 \(\|w\|^2\)을 최소화하는 것, 즉 기하학적 마진을 최대화하는 것이기 때문이다. 이는 정규화와 유사한 효과를 낸다. 데이터를 큰 마진으로 분리하는 함수의 클래스는 복잡도가 낮아(낮은 VC 차원) 과적합이 억제된다.

정규화와 텍스트 분류

텍스트 분류 문제에서 10,000차원 특성(단어 사전의 각 단어)과 100개의 훈련 예제가 주어진 경우를 생각해 보자.

정규화를 사용하지 않는 경우의 경험적 규칙: 훈련 예제의 수가 매개변수 수의 10배 이상이어야 안정적인 학습이 가능하다.

매개변수별 정규화를 하지 않는 이유

\(\lambda \|\theta\|^2\) 대신 \(\sum_j \lambda_j \theta_j^2\)처럼 각 매개변수에 다른 \(\lambda_j\)를 부여할 수는 없을까? 이론적으로는 가능하지만, 10,000개의 매개변수에 대해 10,000개의 \(\lambda_j\)를 선택해야 한다면, 이는 원래 매개변수를 선택하는 것만큼이나 어려운 문제가 된다. 하나의 \(\lambda\)를 선택하는 것은 교차 검증으로 해결할 수 있지만, 10,000개의 \(\lambda_j\)를 선택하는 데에는 이 기법이 통하지 않는다.

특성 스케일링

특성들의 척도가 다를 때(예: 주택 면적은 100~10,000, 침실 수는 1~5), 정규화가 균일하게 작용하려면 사전에 특성을 정규화해야 한다. 평균을 빼고 표준편차로 나누어 모든 특성을 유사한 범위(예: \([-1, 1]\))로 맞추는 것이 일반적이다. 이 전처리는 경사 하강법의 수렴 속도도 개선한다.


8.3 정규화의 베이즈 해석

지금까지의 접근은 빈도주의(frequentist) 관점이었다. 빈도주의에서는 데이터를 가장 잘 설명하는 \(\theta\)의 참값을 추정하며, 이것이 최대 우도 추정(MLE)이다.

빈도주의 vs 베이즈주의

관점

핵심 아이디어

빈도주의

세상에 \(\theta\)의 참값이 존재하며, 데이터를 통해 이를 추정한다

베이즈주의

\(\theta\)는 미지수이지만, 데이터를 보기 전에도 \(\theta\)에 대한 사전 확률 분포 \(P(\theta)\)를 가정한다

베이즈주의 관점에서는 데이터 \(S\)가 주어졌을 때 \(\theta\)의 사후 확률을 구한다.

\[P(\theta | S) = \frac{P(S | \theta) \cdot P(\theta)}{P(S)}\]

\(P(S)\)는 상수이므로, 사후 확률을 최대화하는 \(\theta\)를 구하는 것은 다음과 동치다.

\[\hat{\theta}_{\text{MAP}} = \arg\max_\theta \, P(S | \theta) \cdot P(\theta)\]

가우시안 사전 분포와 정규화의 등가성

\(\theta\)의 사전 분포를 평균 0, 분산 \(\tau^2 I\)인 가우시안으로 가정하면:

\[P(\theta) = \frac{1}{(2\pi)^{n/2} |\tau^2 I|^{1/2}} \exp\left( -\frac{\theta^T (\tau^2 I)^{-1} \theta}{2} \right)\]

이를 MAP 추정 공식에 대입하고 로그를 취하면, 정확히 정규화 항 \(\lambda \|\theta\|^2\)이 포함된 최적화 문제가 유도된다. 즉, 정규화는 매개변수에 가우시안 사전 분포를 부여한 MAP 추정과 동치다.

이 가우시안 사전 분포는 합리적인 가정이다. 데이터를 보기 전에 각 매개변수가 양수인지 음수인지 알 수 없으므로 평균을 0으로 두는 것이 자연스럽다.

빈도주의 통계학자도 정규화를 사용할 수 있다. 다만 베이즈 사전 분포로 정당화하는 것이 아니라, 추정 절차의 일부로 정규화 항을 도입할 뿐이다. 철학적 논쟁은 흥미롭지만, 엔지니어로서 중요한 것은 알고리즘이 잘 작동하는 것이다.


8.4 모델 복잡도와 오류의 관계

가로축에 모델 복잡도(다항식 차수 또는 정규화 강도의 역수)를, 세로축에 오류를 놓고 그래프를 그려보자.

훈련 오류

모델 복잡도가 증가할수록 훈련 오류는 단조롭게 감소한다. 5차 다항식은 언제나 4차 다항식보다 훈련 데이터에 더 잘 적합하기 때문이다(정규화를 하지 않는 경우).

테스트 오류 (일반화 오류)

테스트 오류는 U자 형태를 그린다.

이 U자 곡선은 정규화 매개변수 \(\lambda\)에 대해서도 동일하게 나타난다.

이제 핵심 질문은 이 최적의 지점을 어떻게 찾느냐이다.


8.5 훈련/개발/테스트 데이터 분할

데이터셋이 주어지면, 이를 세 개의 부분집합으로 나누는 것이 좋은 관행이다.

부분집합

용도

훈련 세트 (\(S_{\text{train}}\))

모델의 매개변수를 학습

개발 세트 (\(S_{\text{dev}}\))

모델 선택 (다항식 차수, \(\lambda\), \(C\), \(\tau\) 등 결정)

테스트 세트 (\(S_{\text{test}}\))

최종 성능의 비편향 추정 (논문 발표용)

모델 선택 절차

다항식 차수를 선택하는 예를 들자.

  1. 1차, 2차, 3차, 4차, 5차 다항식 각각을 \(S_{\text{train}}\)에서 훈련한다.
  2. 각 모델의 가설 \(h_i\)를 얻는다.
  3. \(h_i\)의 오류를 \(S_{\text{dev}}\)에서 측정한다.
  4. 개발 세트 오류가 가장 낮은 모델을 선택한다.

훈련 세트에서 모델을 선택하면 안 되는 이유

만약 훈련 세트의 오류를 기준으로 모델을 선택하면, 항상 가장 복잡한 모델(5차 다항식)이 선택된다. 복잡한 모델일수록 훈련 데이터에 더 잘 적합하기 때문이다. 이렇게 하면 2차 다항식이 최적이라는 사실을 발견할 수 없다.

개발 세트는 훈련 과정에서 모델이 보지 못한 데이터이므로, 과적합도 과소적합도 아닌 모델을 선택할 수 있게 해준다.

테스트 세트가 필요한 이유

개발 세트 오류는 편향된 추정치다. 예를 들어, 5개 모델의 실제 오류가 모두 약 5.0인데 개발 세트에서의 측정값이 \([10, 5.1, 5.0, 4.9, 7]\)로 나왔다면, 4.9를 달성한 모델을 선택하게 된다. 그러나 이 4.9는 순전히 노이즈로 인한 행운일 수 있다.

따라서 학술 논문에서 "내 알고리즘은 90% 정확도를 달성했다"고 주장하려면, 모델 개발 과정에서 전혀 사용하지 않은 별도의 테스트 세트에서 측정한 성능을 보고해야 한다.

테스트 세트 사용 시 주의사항

학계의 벤치마크 과적합 문제

오랜 기간 동일한 벤치마크 데이터셋에서 여러 연구자가 경쟁적으로 최고 성능을 발표하면, 연구 커뮤니티 전체가 해당 테스트 세트에 무의식적으로 과적합하게 된다. CIFAR 데이터셋처럼 비교적 작은 벤치마크에서는 보고된 성능 향상의 일부가 실제 알고리즘 개선이 아니라 데이터셋에 대한 과적합일 수 있다는 분석 논문이 발표되기도 했다.


8.6 데이터 분할 비율

전통적 규칙

분할 방식

비율

훈련 / 테스트

70% / 30%

훈련 / 개발 / 테스트

60% / 20% / 20%

이 비율은 데이터셋이 수백에서 수천 건 규모일 때 적절하다.

대규모 데이터셋에서의 분할

데이터가 수백만 건 이상이면, 개발 세트와 테스트 세트의 비율을 크게 줄일 수 있다.

예를 들어 1,000만 건의 데이터가 있을 때, 200만 건을 개발 세트에 할당할 필요가 있는가? 대부분의 경우 그렇지 않다.

데이터 규모

권장 분할

수백~수천 건

60 / 20 / 20

수백만 건

90 / 5 / 5 또는 그 이상

수천만~수억 건

98 / 1 / 1 또는 99 / 0.5 / 0.5

핵심 원칙: 개발 세트와 테스트 세트는 서로 다른 알고리즘의 성능 차이를 유의미하게 구별할 수 있을 만큼만 크면 된다.


8.7 단순 홀드아웃 교차 검증

지금까지 설명한 훈련/개발 세트 분할 절차를 **단순 홀드아웃 교차 검증(simple hold-out cross validation)**이라 한다.

개발 세트(dev set)는 **교차 검증 세트(cross-validation set)**라고도 불린다. 두 용어는 거의 같은 의미다. "교차 검증 세트"는 음절이 길어서 점점 더 많은 사람들이 간단히 "개발 세트"라고 부르는 추세다.

일반적인 머신러닝 시스템 개발 흐름:

  1. 데이터셋을 훈련 세트, 개발 세트, (필요하면) 테스트 세트로 분할한다.
  2. 훈련 세트에서 매개변수를 학습한다.
  3. 개발 세트에서 성능을 평가하며, 새로운 특성 추가, 모델 크기 변경, \(\lambda\) 조정 등을 반복한다.
  4. 수일에서 수주에 걸쳐 개발 세트 성능을 최적화한다.
  5. 최종 성능을 알고 싶으면 테스트 세트에서 평가한다.

8.8 K-겹 교차 검증

데이터셋이 매우 작을 때(예: 100건), 단순 홀드아웃 교차 검증에는 두 가지 문제가 있다.

  1. 70건으로만 훈련하면 30건의 데이터를 "낭비"하게 된다. 의료 데이터처럼 각 예제를 수집하는 데 큰 비용(때로는 문자 그대로 피와 고통)이 드는 경우 이는 심각한 문제다.
  2. 30건의 개발 세트로 모델을 평가하는 것은 표본이 너무 작아 신뢰하기 어렵다.

K-겹 교차 검증 절차

**K-겹 교차 검증(K-fold cross validation)**은 이 문제를 해결한다. 절차는 다음과 같다.

  1. 훈련 데이터를 \(k\)개의 동일한 크기의 조각으로 나눈다 (실무에서 \(k = 10\)이 가장 일반적).
  2. \(i = 1\)부터 \(k\)까지 반복한다:
    • \(i\)번째 조각을 제외한 나머지 \(k-1\)개 조각에서 모델을 훈련한다.
    • \(i\)번째 조각에서 오류를 측정한다.
  3. \(k\)개의 오류 값을 평균하여 해당 모델의 성능을 추정한다.

다항식 차수 선택에 적용

1차부터 5차까지의 다항식 각각에 대해 위 절차를 수행한다. 각 차수에 대해 \(k\)개의 오류를 평균하여 비교하고, 평균 오류가 가장 낮은 차수를 선택한다. 예를 들어 2차 다항식이 최적으로 선택되면, 최종적으로 전체 데이터(100%)를 사용하여 2차 다항식 모델을 다시 한 번 적합시킨다.

K-겹 교차 검증의 장단점

항목

내용

장점

매 반복마다 \(1/k\)의 데이터만 제외하므로 데이터 활용 효율이 높다

단점

각 모델을 \(k\)번 훈련해야 하므로 계산 비용이 \(k\)배 증가한다

K-겹 교차 검증에서 분산 추정의 한계

\(k\)개의 오류 추정치로 분산을 계산할 수 있을까? 이론적으로 가능하지만, \(k\)개의 추정치는 서로 상관관계가 높다. 10-겹 교차 검증에서 각 모델은 훈련 데이터의 \(9/10\)이 중복되기 때문이다. 따라서 이 분산 추정치를 완전히 신뢰하기는 어렵다.

딥러닝에서의 K-겹 교차 검증

딥러닝 모델은 훈련 시간이 매우 길기 때문에 \(k\)번 반복 훈련하는 것이 비현실적인 경우가 많다. 따라서 딥러닝에서는 K-겹 교차 검증을 거의 사용하지 않는다. 또한 데이터가 20건밖에 없다면, 전이 학습(transfer learning)이나 입력 특성의 다양화 같은 다른 기법이 더 필요하다.


8.9 리브-원-아웃 교차 검증

K-겹 교차 검증의 극단적 형태로, \(k = m\)으로 설정하는 **리브-원-아웃 교차 검증(leave-one-out cross validation, LOOCV)**이 있다.

절차

\(m\)개의 훈련 예제 각각에 대해:

  1. 해당 예제 하나를 제외하고 나머지 \(m-1\)개로 모델을 훈련한다.
  2. 제외된 하나의 예제에서 오류를 측정한다.
  3. \(m\)개의 오류를 평균하여 모델 성능을 추정한다.

사용 시점

데이터 규모

권장 방법

\(m \leq 50\) 정도

리브-원-아웃 교차 검증 고려 가능

\(50 < m \leq 수천\)

K-겹 교차 검증 (\(k = 10\))

\(m >\) 수천

단순 홀드아웃 교차 검증

LOOCV의 가장 큰 단점은 모델을 \(m\)번 훈련해야 한다는 것이다. \(m = 100\) 이하에서만 현실적이며, \(m = 1,000\)이면 모델을 1,000번 훈련하는 것은 대부분의 경우 과도한 비용이다.


8.10 특성 선택

과적합을 줄이는 또 다른 접근법은 **특성 선택(feature selection)**이다. 많은 특성 중 소수만이 실제로 유용한 경우, 관련 없는 특성을 제거하여 모델의 복잡도를 줄일 수 있다.

특성 선택이 적합한 경우와 그렇지 않은 경우

전진 탐색 (Forward Search)

특성 선택의 대표적 알고리즘인 전진 탐색의 절차는 다음과 같다.

  1. 빈 특성 집합 \(\mathcal{F} = \emptyset\)에서 시작한다.
  2. 아직 선택되지 않은 각 특성 \(i\)\(\mathcal{F}\)에 추가하여 모델을 훈련하고, 개발 세트 성능을 측정한다.
  3. 개발 세트 성능을 가장 크게 향상시키는 특성을 \(\mathcal{F}\)에 추가한다.
  4. 더 이상 성능이 개선되지 않을 때까지 2~3단계를 반복한다.

예시: 특성 \(x_1\)부터 \(x_5\)가 있다고 하자.

이와 반대로 모든 특성에서 출발하여 하나씩 제거하는 **후진 탐색(backward search)**도 있다.

전진 탐색의 단점은 계산 비용이 높다는 것이다. 특성이 \(n\)개이면 각 단계에서 최대 \(n\)개의 모델을 훈련해야 하며, 전체적으로 \(O(n^2)\)의 모델 훈련이 필요하다.


핵심 정리

개념

핵심

편향 (Bias)

모델의 사전 가정이 지나치게 단순하여 데이터의 패턴을 포착하지 못하는 것. 과소적합의 원인

분산 (Variance)

모델이 훈련 데이터의 노이즈까지 학습하여, 다른 데이터에서 예측이 불안정한 것. 과적합의 원인

정규화

비용 함수에 \(\frac{\lambda}{2}\|\theta\|^2\)을 추가하여 매개변수를 작게 유지. 과적합 방지의 핵심 기법

MAP 추정

정규화는 매개변수에 가우시안 사전 분포를 부여한 MAP 추정과 동치

훈련/개발/테스트 분할

매개변수는 훈련 세트에서, 모델 선택은 개발 세트에서, 최종 평가는 테스트 세트에서 수행

홀드아웃 교차 검증

데이터가 충분할 때 사용. 개발 세트를 한 번 분리하여 모델 선택에 활용

K-겹 교차 검증

소규모 데이터셋에서 사용. \(k=10\)이 표준. 데이터 활용 효율이 높으나 계산 비용 \(k\)

리브-원-아웃 교차 검증

\(m \leq 50\) 수준의 극소규모 데이터에서 사용. \(k = m\)인 K-겹 교차 검증의 특수 사례

특성 선택

전진 탐색 등을 통해 유용한 특성의 부분집합만 선택. 차원 축소와 과적합 방지에 효과적


이전 장: 7장 - 커널 다음 장: 9장 - 의사결정 트리와 앙상블 기법