Distribution Shift
Distribution Shift는 훈련 데이터와 실제 예측에 사용할 데이터가 다른 분포에서 생성될 때 발생하는 상황을 나타낸다. 이는 조건부 확률로 표현이 가능한데, 사건 B가 일어나는 경우에 사건 A가 일어날 확률을 '사건 B에 대한 A의 조건부확률'이라 하고 \( P(A∣B) \)로 표기한다.
Distribution Shift의 대표적인 유형은 다음과 같다.
- Covariate Shift: \( P(Y|X) \)는 그대로이지만 \( P(X) \)는 변하는 경우.
예를 들어, 학습 데이터에서는 대부분 사실적인 이미지(photorealistic images)를 보았지만, 테스트 데이터에서는 대부분 만화 같은 이미지(cartoonish images)가 제공되는 상황이 해당된다. 이러한 경우 모델이 처리해야 할 입력 데이터의 특성은 달라지지만, 각 입력에 할당되는 라벨 자체는 동일하게 유지된다. - Label Shift: \( P(X|Y) \)는 그대로이지만 \( P(Y) \)는 변하는 경우.
예를 들어, 훈련 데이터에서는 “개” 이미지를 많이 학습했지만, 테스트 데이터에서는 “고양이” 이미지를 많이 보게 되는 경우 Label 불균형 문제가 발생할 수 있다. - Concept Shift: \( P(X) \)는 그대로이지만 \( P(Y|X) \)가 변하는 경우.
예를 들어, 한때는 방사능을 뿜는 라듐이 만병통치약인줄 알고 먹고 바르는 것이 좋다고 여겼지만, 시간이 지나면서 이것이 위험한 물질로 밝혀져 더 이상 그러지 않는 경우가 이에 해당한다. 즉, 입력에 대한 인식이 달라지는 경우이다.
Correction of Distribution Shift
Distribution Shift로 인해 훈련 데이터와 실제 예측에 사용할 데이터 간의 분포 차이가 발생하고, 이는 모델의 일반화 성능을 저하시키는 원인이 된다. 다음은 대표적인 Distribution Shift 보정 방법들에 대해 살펴보자.
Empirical Risk
Empirical Risk(경험적 위험)은 모델이 학습 데이터에서 평균적으로 얼마나 잘 예측하는지를 측정하기 위한 지표로 사용된다. 보통 다음과 같은 방식으로 최소화한다.
$$ \min_f \frac{1}{n} \sum_{i=1}^n l(f(x_i), y_i) $$
여기서 \( f(x_i) \)는 입력 \( x_i \)에 대한 모델의 예측 값이고, \( y_i \)는 실제 레이블, \( l \)은 손실 함수(loss function)를 나타낸다.
Covariate Shift Correction
Covariate Shift Correction은 소스 데이터 분포 \( p(x) \)와 타겟 데이터 분포 \( q(x) \)가 서로 다를 때 사용된다. 이 경우, 다음과 같이 모델의 손실 함수에서 입력 분포를 조정하여 학습할 수 있다.
$$ \int \int l(f(x), y) p(y|x) p(x) \, dx \, dy = \int \int l(f(x), y) p(y|x) \frac{q(x)}{p(x)} p(x) \, dx \, dy $$
따라서 가중된 경험적 위험 최소화(weighted empirical risk minimization)를 통해 모델을 학습할 수 있다.
$$ \min_f \frac{1}{n} \sum_{i=1}^n \beta_i \, l(f(x_i), y_i) $$
여기서 \( \beta_i = \frac{p(x_i)}{q(x_i)} \)는 해당 샘플이 올바른 분포에서 추출될 확률과 잘못된 분포에서 추출될 확률의 비율이다.
$$ \beta_i = \frac{p(x_i)}{q(x_i)} $$
Covariate Shift Correction에서 \( \beta_i \)를 계산하는 방법은 다음과 같다.
우선, 소스 분포 \( p(x) \)와 타겟 분포 \( q(x) \)에서 동일한 수의 샘플을 가정하고, 각 샘플의 라벨은 각각 \( z = 1 \)과 \( z = -1 \)이라고 한다. 이 경우, 두 분포 \( p(x) \)와 \( q(x) \) 사이에서 최적의 분류기를 구성할 수 있다. \( P(z = 1 | x) \)는 \( x \)가 \( p(x) \)로부터 나온 확률로 다음과 같이 표현된다.
$$ P(z = 1 | x) = \frac{p(x)}{p(x) + q(x)} $$
따라서, \( P(z = -1 | x) \)은 다음과 같이 정의된다.
$$ P(z = -1 | x) = \frac{q(x)}{p(x) + q(x)} $$
이제, \( p(x) \)와 \( q(x) \)의 비율은 다음과 같다.
$$ \frac{p(x)}{q(x)} = \frac{P(z = 1 | x)}{P(z = -1 | x)}$$
만약 로지스틱 회귀(logistic regression)를 사용한다면, 다음과 같이 계산할 수 있다.
$$ P(z = 1 | x) = \frac{1}{1 + \exp(-h(x))} $$
여기서 \( h(x) \)는 로지스틱 회귀 모델의 출력을 나타낸다. 이때 \( \beta_i \)는 다음과 같이 계산된다.
$$ \beta_i = \frac{1}{1 + \exp(-h(x_i))} \times \frac{\exp(-h(x_i))}{1 + \exp(-h(x_i))} = \exp(h(x_i)) $$
Label Shift Correction
Label Shift Correction에서는 Label이 변화되었다고 가정할 때, Test Set의 Label을 추정하는 방법은 간단한 선형 시스템을 풀어서 계산할 수 있다. 이때 혼동 행렬(confusion matrix)을 사용하여 모델이 예측 Label과 실제 Label 간의 관계를 나타낸다. 혼동 행렬의 각 열은 실제 라벨을, 각 행은 모델이 예측한 Label을 나타낸다.
선형 시스템을 풀면, 테스트 세트에서 각 라벨의 분포 \( p(y) \)를 추정할 수 있다. 혼동 행렬 \( C \)가 역행렬이 존재하면, \( p(y) \)는 다음과 같이 구할 수 있다.
$$ C p(y) = \mu(\hat{y}) $$
여기서 \( \mu(\hat{y}) \)는 모델이 예측한 Label 분포를 나타낸다. \( C \in \mathbb{R}^{k \times k} \)는 \( k \)개의 라벨을 가진 혼동 행렬이고, \( p(y) \)는 실제 Label 분포이다. 혼동 행렬이 역행렬을 가질 경우, 실제 Label 분포는 다음과 같이 계산할 수 있다.
$$ p(y) = C^{-1} \mu(\hat{y}) $$
이때, \( C^{-1} \)는 혼동 행렬 \( C \)의 역행렬이며, 이를 통해 Label Shift 문제를 해결할 수 있다.
참고 자료
https://blog.dailydoseofds.com/p/covariate-shift-is-way-more-problematic