Data science (98)

반응형


일반 Softmax 함수 


import tensorflow as tf
import numpy as np

z = [1,2,3,4,5,6]

def softmax(a) : 
    c = np.max(a) 
    exp_a = np.exp(a-c) 
    sum_exp_a = np.sum(exp_a)
    y = exp_a / sum_exp_a
    return y

q = softmax(z)


Softmax with Temperature Parameter


def softmax_with_temperature(z, T) : 
    z = np.array(z)
    z = z / T 
    max_z = np.max(z) 
    exp_z = np.exp(z-max_z) 
    sum_exp_z = np.sum(exp_z)
    y = exp_z / sum_exp_z
    return y

calibrated_q2 = softmax_with_temperature(z, 2)
calibrated_q10 = softmax_with_temperature(z, 10)


Temperature 를 크게 줄 수록 각 확률 값들의 차이가 줄어듬을 확인할 수 있음

하지만, 순서는 변하지 않기 때문에 정확도에 영향을 주지 않음 


fig = sns.barplot(x=np.array([0,1,2,3,4,5]), y=q)
fig.set(ylim=(0,1))
plt.show()

fig2 = sns.barplot(x=np.array([0,1,2,3,4,5]), y=calibrated_q2)
fig2.set(ylim=(0,1))
plt.show()

fig3 = sns.barplot(x=np.array([0,1,2,3,4,5]), y=calibrated_q10)
fig3.set(ylim=(0,1))
plt.show()


반응형
반응형

[논문리뷰] 현대 딥러닝의 Calibration 에 대하여



현대 Neural network 의 calibration 에 관하여라는 논문을 리뷰하여 포스팅하겠습니다. 딥러닝의 성능 (performance) 이라 하면 일반적인 용어 '정확도' 를 뜻하는 경우가 많습니다. 그 정확도란 1) 예측 한 것중에 얼마나 맞았는가? 2) 데이터가 얼마나 잘 분류가 되었는가? 두 관점이 있으며, accuracy, precision (positive predictied value), recall (sensitivity)f1-score (precision 과 recall 의 조화평균) 등 대표적이고 많이 사용되는 measure 라고 할 수 있습니다. 하지만 calibration 도 정확도 못지 않게 중요한 성능이라고 할 수 있습니다. 본 논문에서는 '현대 뉴럴넷' 이 과거의 뉴럴넷보다 정확도는 향상되었지만, calibration 이 좋지 않다 (poorly calibrated) 라는 점을 문제로 삼으며, post-processing calibration method temperature scaling 을 제시하고 있습니다.


Calibration 이란?


Calibration 이란 모형의 출력값이 실제 confidence (또는 이논문에서 calibrated confidence 로 표현) 를 반영하도록 만드는 것입니다. 예를 들어, X 의 Y1 에 대한 모형의 출력이 0.8이 나왔을 때, 80 % 확률로 Y1 일 것라는 의미를 갖도록 만드는 것입니다. 일반적으로 현대 딥러닝은 overconfident 합니다. 아래 그림은 1998 년 제시된 LeNet 과 2016년 제시된 ResNet (110 layer) 의 calibration 을 비교한 그림입니다. LeNet 의 경우 모형의 출력이 0~1 사이에 균일하게 분포되어있는 것을 볼 수 있지만, ResNet 의 경우 1 근처에 집중되어 있다는 것을 볼 수 있습니다. 그 결과로 아래 그림을 보면, ResNet 의 경우, confidence 와 accuracy가 많이 어긋난다는 것을 볼 수 있습니다. 모형의 출력이 실제 confidence 를 반영한다면 (calibrated confidence), confidence 와 accuracy 가 일치해야합니다. 


왜 Calibration 이 중요한가? 


모형의 예측값이, 실제 확률을 반영하는 것 (Calibration) 은  중요합니다. 딥러닝이 실제 세계에 응용될 때, 의사결정 프로세스의 하나의 구성요소가 되는 경우가 많습니다. 예를 들어, 의학적 진단 (computer-aided diagnosis)을 예로 들어보면, 딥러닝을 전적으로 신뢰해서 모든 판단을 딥러닝에 맡기는 식으로 의사결정이 이루어지는 경우는 적습니다. 딥러닝 모델의 confidence 가 낮은 경우에만 사람이 보는 방식으로 사람의 노동력을 줄이거나, false negative 가 치명적인 암 진단과 경우에는, cancer negative 로 예측한 것들 중, confidence 가 낮은 것만 사람이 재확인 하는 방식으로 하는 것도 가능합니다. 결국 이러한 의사 결정이 가능하기 위해서는 모형의 confidence 를 보는 것이 필요하고 이 confidence가 calibrated confidence 여야지 그 값에 신뢰성이 있다고 할 수 있습니다. 


Calibration Measures


모형의 Calibration 이 잘되었는지를 어떻게 확인할 수 있을까요? 논문에 나와있는 3가지 measure 를 정리해보았습니다. 


1) Reliability Diagram


Reliability diagram 은 expected accuracy 와 observed accuracy 를 각각 x, y 축으로 하여 그린 그래프를 말합니다. 이 때, expected accuracy (confidence) 를 기준으로 bin 을 쪼개서 (ex. decile) 각 bin 에서 observed accuracy 를 아래와 같이 구함으로써 그래프를 그릴 수 있습니다. 




파이썬 코드로 Reliability diagram 그리는 법을 참고 바랍니다. 


2) Expected Calibration Error (ECE) 



ECE 는 confidence와 실제 accuracy 의 차이의 기댓값으로 연속형 변수에서 이를 실제로 구할 수 있는 방법은 없습니다. 따라서 "binning" 을 통해 위와 같이 approximation 됩니다. ECE는 M 개의 bin 에 대하여 각 bin 마다의 expected accuracy 와 confidence 의 차이를 가중 평균 (weighted mean) 한 것입니다. 이 때 가중치는 위 식에 나와있듯, bin 의 sample size / 전체 sample size 입니다. 



3) Negative log likelihood



Negative log likelihood 는 통계 모형의 quality 를 평가하는데 표준적으로 많이 쓰이는 measure 입니다. 딥러닝/머신러닝 분야에서는 cross-entropy loss 라고도 불립니다 (분류 문제에 있어서). 이러한 log likelihood 와 cross-entropy 와의 관련성은 제 블로그 포스팅에서도 다룬적이 있으니 참고 바랍니다. Logistic regression 은 이 negative log likelihood 를 최소화 하는 계수를 찾게되며, 딥러닝도 cross-entropy 를 손실함으로 놓는다면, 마찬가지입니다. NLL 은 calibration 을 의미하는 measure 로 보기는 어려우나, calibration 도 어느정도 반영하고 있다고 볼 수 있습니다.  



현대 딥러닝 기법과 Calibration 의 관계


본 논문에서는 Model capacity 와 Regularization 방법이 miscalibration 과 관계가 있다는 실험 결과를 제시하고 있습니다. 하지만 이 부분에 대해 인과성을 단정할 수는 없습니다. 


1) Model capacity


최근 등장하는 딥러닝 모형들은 매우 많은 layer 를 갖고 있습니다. 적게는 수백개에서부터 수천개의 layer 가 있으며, layer 마다 수백개의 convolution filter 가 사용됩니다. 최근 연구에 따르면, 많은 layer 를 가질 수록 traninig set 의 특징을 더욱 잘 학습하고, generalization 도 더 좋다는 것을 보여주었습니다. 



위 figure 에서 가장 왼쪽 그림은 ResNet 에 대하여 64개의 filter 로 고정 후, depth 를 올리면서 error와 ece를 관찰한 그림입니다. depth 가 증가할 수록 error 는 줄어들지만 ECE는 증가하는 것을 확인할 수 있습니다. 왼쪽에서 두 번째 그림은 depth 를 고정시킨 후, filter 의 수를 증가시키면서 error와 ece 를 관찰한 것인데, 마찬가지로 error는 줄어들지만 ece 는 증가합니다. 후반부에는 유지되지만 초반부에 매우 빠르게 ece 가 증가하는 것을 확인할 수 있습니다. 즉, model capacity 가 클 수록 ece는 증가합니다. 이 이유는 모델이 training set 에 대한 loss 를 최소화하는 방향으로 학습되기 때문입니다. 그렇기 때문에 training set 을 완벽하게 분류할 수 있기 되더라도 loss 를 줄이기 위하여 confidence 를 높여 1에 가까운 값을 예측하기 때문입니다. 따라서 test set 에 대해 예측할 때도 마찬가지의 현상을 보이게 됩니다.  


2) Batch Normalization (BN)


Batch normalization 방법은 distribution shifts in activations 을 최소화해서 딥러닝의 optimization 및 regularization 을 향상시키는 방법입니다. batch normalization 의 도입은 매우 깊은 모델 (resnet, densenet 과 같은) 을 학습시킬 수 있는 한 가지 breakthrough 였습니다. 위 figure 의 3번째 그림을 보면 BN 이 calibration 에 미치는 영향을 볼 수 있습니다. 결론은 BN 의 도입은 calibration 을 낮추며, 원인은 알 수 없다는 것입니다. 


3) Weight decay 


BN 의 도입 이후 최근 weight decay 가 많이 쓰이지 않는 regularization 방법입니다. BN 논문에서 L2 regularization 를 쓰지 않는게 일반화에 도움이 된다는 내용이 보고되기도 했습니다. 따라서 최근에는 weight decay 를 과거와 비교하여 매우 작게 주는 것이 일반적입니다. 하지만 안타깝게도 이것은 calibration 에 좋지 않은 영향을 준다고 합니다. 위 figure의 가장 오른쪽 그림을 보면 weight decay 를 크게 줄 수록 오히려 ece 가 좋아지며, weight decay 가 적을 수록 ece 가 증가합니다. 직관적으로도, weight decay 가 적으면 training set 에 대해 loss 를 최소화 시키는 weight 가 얻어지는 것이기 때문에 test set 에 대해 overconfident 한 모델이 얻어질 것이라는 것을 짐작할 수 있습니다. 


Calibration 방법 


Post-processing calibration 은 모델의 예측 확률로부터 Calibrated probability 를 구하는 과정입니다. 이 방법은 validation set 이 필수적으로 필요합니다 (물론 이 validation set 은 training 할 때 쓰인 validation set 과 같은 set 이어야 합니다.).


Post-processing calibration의 목적은 모델의 예측값 p 로부터 calibrated probability q 를 구하는 것입니다. 간단하게 positive class, negative class 로 나뉘어진 binary prediction 을 예로 들어봅시다. 첫 번째로 소개할 방법은 Histogram binning 방법입니다. 


1) Histogram Binning : Zadrozny 는 2001 년 ICML 에서 decision trees and naive bayesian classifier 의 예측값을 calibration 하는 방법을 제시했습니다. Histogram binning 은 매우 간단하고 직관적인 calibration 방법으로 non-parametric calibration 방법입니다. 절차는 아래와 같습니다. 


1) 예측값을 M 개의 bin 으로 쪼갭니다. bin 을 쪼개는 방법은; 1. 같은 interval 로 쪼개기 2. sample 수로 쪼개기가 있습니다. 

2) 이후에 Bin 마다 Score 를 구합니다. 

3) Score 는 bin-wise squared loss 를 최소화하는 방법으로 선택됩니다. 


* Bin-wise squared loss


여기서 1은 indicator function 입니다. 이를 최소화하는 theta1~theta_m 을 구해서 이를 bin 마다의 score로 쓰는 것입니다. 위 식을 최소화하면 결국 스코어는 해당 bin 에서의 positive-class 의 비율이 됩니다. 즉, histogram binning 방법은 예측값을 binning 한 후, 각 bin 에서의 positive-class 의 비율로 확률을 재할당하는 것으로 이해할 수 있습니다. 


2) Platt scaling: Platt scaling 은 1999년 Platt 이 제시한 방법으로 SVM 의 출력을 '확률화' 하기 위한 방법으로 제시되었습니다. Platt scaling 은 histogram binning 과는 다르게 parametric 방법입니다. 최초로 제시된 이 방법에서는 모형의 출력을 logistic regression 의 input 으로 넣습니다. 뉴럴넷의 경우, 최종 모델의 출력값이 sigmoid 되기 전의 값 z 를 아래와 같이 변환합니다. 


$$ q_i = \sigma(az_i + b) $$


이 때, a, b 는 validation set 에 대해서 NLL (=binary cross entropy) 을 최소화 시키는 방향으로 학습이 됩니다. 당연하지만 이 과정에서 학습된 뉴럴넷의 weight는 영향을 받지 않습니다. 



3) Temperature scaling: Temperature scaling 은 Platt scaling 에 기초한 방법입니다. K 개의 label 이 있는 다중 분류 문제에서 Temperature scaling 방법에서는 단일 scalar parameter T 를 이용해 logit vector z 를 아래와 같이 변환합니다. 



본 논문의 저자는 T 를 temperature 라고 부릅니다. T 는 soft max function 을 "soften" 시키는 일을 합니다. T 가 커질 수록 최종 calibrated probability q 는 1/K 로 수렴합니다 (이것은 uncertainty가 극대화 된다는 의미입니다). 식을 보면 T 가 1일 때가 원래 softmax를 이용하여 confidence 를 구하는 방법이라는 것을 알 수 있습니다. T는 validation set 에 대해 NLL 을 최소화 하는 식으로 optimization 하는 방법입니다. T 의 장점은 argmax 를 바꾸지는 않는다는 것입니다. 즉, T 는 모델의 정확도에는 영향을 주지 않고, Calibration 에만 영향을 줍니다. 


참고

https://arxiv.org/pdf/1706.04599.pdf

https://machinelearningmastery.com/calibrated-classification-model-in-scikit-learn/

반응형
반응형

변수 종류별 시각화 및 검정 방법


얼마전, 변수 종류별로 사용할 수 있는 시각화 및 검정 방법을 간단하게 요약한 표를 발견해 공유합니다. 출처는 이곳 입니다. 표를 그린 기본 아이디어를 보면, 종속변수를 Binary, Nominal, Ordinal, Interval, Normal, Censored Interval 으로 나누었습니다. 독립변수의 경우, Binary Categorical (Paired/Unpaired), Categorical (Paired/Unpared), Normal, Multivariate 으로 나누었습니다. 이 때, ordinal 의 경우, 연속형 범주로 또는 범주형 변수 상황에 따라 둘 다 가능합니다.


그래프의 경우 요약하면, Barplot, Boxplot, Scatter plot 이 기본입니다. 카테고리x카테고리 = Barplot, 카테고리x연속형 = Box plot, 연속형x연속형 = Scatter plot 으로 기본적으로 그리면 됩니다. 여기서 Box plot 의 경우 전통적인 통계에서 많이 쓰이는 그래프이지만, Histogram with different colors or side by side 또는 violin plot 도 선호됩니다. 


대부분의 기초 통계에서 배우는 검정은 대부분 이 표안에 속해있습니다. 검정에서 하고자 하는 것은 변수 X와 변수 Y 가 연관성이 있는가? 입니다. 검정도 마찬가지로, X와 Y의 종류에 따라 다양하게 존재합니다. 아래표의 대부분의 검정은 기초 통계에서 배우는 내용입니다. Paired data 에 적용하는 맥니마 검정은 설문지/심리학 연구 등에 자주 사용되는 통계적 검정 방법인데 이전 제 포스팅에서 다루었습니다. 코크란의 Q test는 맥니마 검정의 확장으로 종속변수가 두 개 이상일 때 사용하는 통계적 검정 방법입니다. 


출처

https://www.r-bloggers.com/overview-of-statistical-tests/

반응형
반응형

예측값을 변수로 활용하는 앙상블 테크닉 Blending


Blending 은 Ensemble 의 한 종류입니다. Ensemble 이란 예측 모형을 통합해서 하나의 예측을 수행하는 것을 말합니다. Ensemble 의 묘미는 서로 다른 예측 모형들을 합쳐 더 강한 예측 모형을 만들 수 있다는 것입니다다. 가령 정확도 0.7, 0.7 인 모델 두 개를 합쳐서 0.9 을 만들 수 있습니다. 본 포스팅에서는 Ensemble 의 한 가지 종류인 Blending 에 대해 설명해보려고 합니다. 



Blending 의 프로세스  


1. Traning/Validation/Test set 을 나눈다. 

2. Training set 에 모델 피팅을 한다. 

3. Validation/Test set 에 대해 예측을 한다. 

4. Validation set 과 Validation set 에 대한 예측이 새로운 모델을 만드는 데에 사용된다.

5. 4의 모델을 최종 Test set 에 대한 예측을 하는데 사용된다. 


조금 더 명확하게 보기 위해 Blending 을 활용한 코드를 보면서 설명을 하겠습니다. 아래 코드는 Decision tree 와 KNN 을 활용해 각각 validation set 과 test set 에 대한 예측을 수행하는 코드입니다. 


Blending 구현 - 파이썬 

참고 (https://www.analyticsvidhya.com/blog/2018/06/comprehensive-guide-for-ensemble-models/)

model1 = tree.DecisionTreeClassifier()
model1.fit(x_train, y_train)
val_pred1=model1.predict(x_val)
test_pred1=model1.predict(x_test)
val_pred1=pd.DataFrame(val_pred1)
test_pred1=pd.DataFrame(test_pred1)

model2 = KNeighborsClassifier()
model2.fit(x_train,y_train)
val_pred2=model2.predict(x_val)
test_pred2=model2.predict(x_test)
val_pred2=pd.DataFrame(val_pred2)
test_pred2=pd.DataFrame(test_pred2)


아래 코드는 validation set 의 예측 결과 (Decision tree, KNN) 을 원래 feature 에 붙여서 새로운 데이터셋 df_val 을 만든 후, Final prediction model (이 예제에서는 Logistic regression model) 을 적합시키고, test set 에 대한 예측을 수행하는 것입니다. 

df_val=pd.concat([x_val, val_pred1,val_pred2],axis=1)
df_test=pd.concat([x_test, test_pred1,test_pred2],axis=1)

model = LogisticRegression()
model.fit(df_val,y_val)
model.score(df_test,y_test)


Blending 과 Stacking 의 차이점


Blending 은 종종 다른 Ensemble technique 인 Stacking 과 비교가 됩니다. Stacking 은 다른 예측 모형들의 결과값을 통해 새로운 모델을 만드는 Ensemble 방법입니다. Stacking 의 경우는 Training set 의 예측값을 Training data 로 하여 Meta classifier (또는 Meta regression) 을 학습합니다. 그리고 이 Meta classifier 를 통해 Test set 을 예측합니다. Blending 과 Stacking 의 차이점은 1) Blending 은 validation set 에 대한 예측값을 training 에 이용하지만, Stacking 은 training set 에 대한 예측값을 활용합니다. 2) Blending 을 예측값 뿐 아니라 원래 Feature 도 활용하는 반면, Stacking 은 예측값만 활용합니다. 그러면 이러한 의문이 남습니다. 왜 validation set 만 활용해서 Final prediction model 을 구축해야하는가? Training Set 에의 feature에 Training set 으로부터 예측한 예측값을 붙여서 활용하면 되지 않는가? 입니다. 만약 training performance 와 validation performance 가 비슷하다면 가능한 방법입니다. 하지만 training performance 가 높다면, feature 가 예측에 별로 필요하지 않게 됩니다. 따라서 feature를 예측에 활용하는 blending 의 장점이 없게 됩니다. 따라서 blending 을 잘활용하기 위해서는 validation set 의 meta-feature (원래 feature 및 예측값) 을 통해 training 하고, test set 에 대해 성능을 최종 평가해야합니다. 


참고

https://www.analyticsvidhya.com/blog/2018/06/comprehensive-guide-for-ensemble-models/

https://machinelearningmastery.com/implementing-stacking-scratch-python/

반응형
반응형

통계적 검정의 종류


통계적 검정에 있어 p-value 를 보고 기각 여부를 판단하는 방법도 있지만, 소위 '신뢰구간이 0 을 포함하는지' 를 보고 가설검정을 할 수도 있다. 왜 신뢰구간이 0을 포함하지 않으면 두 그룹의 차이가 유의하다고 볼 수 있을까? 본 포스팅에서는 우월성 검정과 동등성 검정에 대하여 신뢰구간과 양측 가설검정이 어떤 관계를 갖고 있는지 설명한다. 


1. 우월성 검정 (Superiority Test)


우월성 검정은 A가 B보다 우월함을 보이는 검정으로 일반적인 통계적 검정 (two-sample t-test) 이다. two-sample t-test 에 대한 기초내용은 이전 포스트에서 정리하였다. 


$$ H_0 : \mu_1 = \mu_2 $$

$$ H_0 : \mu_1 \ne \mu_2 $$


우월성 검정을 단측검정이 아니라 양측검정으로 하는 이유는 신뢰구간과 검정의 결과를 동일하게 맞추기 위해서이다. 예를 들어, A 약이 B 약보다 우월함을 보이고 싶을 때 검정을 통해서 구한 p-value 만 제시하는 것보다 구간 추정값을 제시하는 것이 더욱 많은 정보를 제공한다. 따라서 양측검정을 하면, 구간 추정을 통한 검정과 같은 판단을 내릴 수 있기 때문에 양측검정이 더 선호된다. 일반적으로 우월성 검정의 결과로 양측검정에 대한 p-value 와 함께 95 % 신뢰 구간을 제시된다. 


양측검정과 95 % 신뢰구간이 0을 포함하는지 여부가 같은 판단을 내리는 이유 


양측검정의 p-value


합동 분산을 이용한 two-sample t-test 를 예로 들어보자. p-value는 귀무가설하에서 더 극단적인 데이터를 관찰할 확률이다. 여기서 극단적인 확률이란 표본의 통계량이 대립가설을 지지하는 쪽으로 나오는 것을 말한다. 따라서 부등호의 방향이 [X > 통계량] 임을 알 수 있다. (단 통계량이 양수인 경우)


$$ P= 2 P[X > \frac{\tilde X_1 - \tilde X_2 - (\mu_1-\mu_2)}{\sqrt{s^2_p(1/n_1+1/n_2)}}] $$

$$ X \sim t(n_1+n_2-2) $$


위 식에서 p-value는 귀무가설 하에서라는 정보를 이용하면 mu_1 - mu_2 = 0 이고, 이를 통해 p-value 를 계산할 수 있다.  


95% 신뢰구간


$$ (\tilde X_1 - \tilde X_2 - t_{0.025}\sqrt{s^2_p(1/n_1+1/n_2)} ,  \tilde X_1-\tilde X_2 + t_{0.025}\sqrt{s^2_p(1/n_1+1/n_2)})$$


이 때, 통계량의 차이가 양수이고, 0을 포함하지 않는 경우는 구간 추정값의 left bound 가 0 보다 큰 경우인데, p-value 는 0.05 보다 작음을 알 수 있다. 통계량의 차이가 음수인 경우도 마찬가지로 right bound 가 0보다 작을 때의 p-value 가 0.05 보다 작기 때문에 동일하다. 이를 식으로 설명하면 아래와 같다. 


$$ If, \tilde X_1 - \tilde X_2 - t_{0.025}\sqrt{s^2_p(1/n_1+1/n_2)} > 0 $$

$$ P < 2P[X > t_{0.025}] = 0.05$$ 


2. 동등성 검정 (equivalence test) 


동등성검정은 A와 B가 의미있는 차이가 없음을 보이는 목표를 갖는 검정이다. 동등성 검정에서는 delta 라는 미리 정의된 값을 이용한다. 


$$ H_0 : \mu_1-\mu_2 \ge \delta $$

$$ H_1 : \mu_1-\mu_2 < \delta $$


동등성 검정 결과는 95 % 신뢰구간이 (-delta, delta) 안에 들어오는지 여부와 같다. 신뢰구간이 delta 사이에 들어오면 양측검정의 귀무가설을 기각할 수 있다. 왜 이렇게 되는지 아래에서 설명한다. 


양측검정의 p-value


우월성검정과 비교해 부등호의 방향을 주의해야 한다.


$$ P= 2 P[X < \frac{\tilde X_1 - \tilde X_2 - (\delta)}{\sqrt{s^2_p(1/n_1+1/n_2)}}]  $$

$$ X \sim t(n_1+n_2-2) $$


95 % 신뢰구간


95 % 신뢰구간은 검정과 독립적으로 나오는 값이기 때문에 1. 과 같다. 


$$ (\tilde X_1 - \tilde X_2 - t_{0.025}\sqrt{s^2_p(1/n_1+1/n_2)} ,  \tilde X_1-\tilde X_2 + t_{0.025}\sqrt{s^2_p(1/n_1+1/n_2)})$$


만약, 위 신뢰구간의 right bound 가 delta 보다 작다면, left bound 도 자연스레 -delta 보다 클 것이다. (신뢰구간은 대칭적이기 때문에) 따라서 아래식을 가정했을 때, p-value가 0.05 보다 작음을 보이면 된다.


$$ If, \tilde X_1 - \tilde X_2 + t_{0.025}\sqrt{s^2_p(1/n_1+1/n_2)} < \delta $$

$$ P < 2P[X < -t_{0.025}] = 2P[X > t_{0.025}] = 0.05 $$


따라서 동등성 검정도 따로 통계량을 구하지 않고도, 신뢰구간을 통해 바로 검정할 수 있다는 것을 알 수 있다. 

반응형
반응형

모분산의 추정과 검정

 

어떤 공장에서 일정 크기의 볼트를 만든다고 해보자. 제조 공정에서 볼트의 지름이 일정해야 품질 기준을 만족할 수 있다. 볼트의 지름이 10mm 여야하는데, 평균적으로는 10mm 이지만, 분산이 존재해  불량품이 일정 부분 존재한다. 이런 상황에서 볼트 지름의 분산을 확인하는 방법으로 모분산에 대한 추론을 할 수 있다. 

 

모분산의 추정에는 카이제곱 분포를 이용한다. 카이제곱분포는 표준정규분포에서 n개의 샘플을 뽑아서 그것들의 제곱을 모두 합한 것을 하나의 확률 변수 Q 로 정의하자. 카이제곱분포는 Q 가 따르는 분포이다. 카이제곱 분포는 하나의 모수 n 을 갖고, 이를 자유도라 한다.

 

$$ Q = \sum^{n}_{i=1} Z_i $$

$$ Q \sim \chi (n) $$

 

이 때,  아래와 같은 확률 변수를 정의하자. 

 

$$ X \sim N(\mu, \sigma^2) $$

 

모분산은 아래 통계량이 자유도가 n-1 인 통계량을 따른다는 것으로부터 추정된다. 

 

$$ \frac{(n-1)s^2}{\sigma^2} \sim \chi(n-1) $$

 

증명은 아래와 같다. 

 

$$ \sum^{n}_{i=1} \frac{(X_i - \mu)^2}{\sigma^2} = \frac{(n-1)s^2}{\sigma^2} + \frac{(\tilde X-\mu)^2}{\sigma^2/n} $$

$$ \sum^{n}_{i=1} \frac{(X_i - \mu)^2}{\sigma^2} \sim \chi(n) $$

$$ \frac{(\tilde X-\mu)^2}{\sigma^2/n} \sim \chi(1) $$

 

따라서 chi-square 분포의 additivity 에 의해 아래와 같다. 

 

$$ \frac{(n-1)s^2}{\sigma^2} \sim \chi(n-1) $$ 

 

한 가지 유의할점은 모집단 X 가 정규분포를 따라야 이러한 분포가 타당하다는 것이다. 

 

예제 

 

1) 공장에서 볼트의 분산이 1mm 보다 작아야 현재 생산 공정을 유지하기로 했다. n=100 개의 샘플을 고른 후, 표본 분산을 추정했을 때, 1.2mm 가 나왔다면, 모분산이 1mm 보다 크다고 볼 수 있는지 유의수준 0.05 하에서 검정하라  

 

검정 통계량은 아래와 같이 계산된다.

 

$$ \frac{(99)1.2}{1} = 118.8 $$

$$ Q \sim \chi(99) $$

$$ P (Q > 111.8) = 0.085 $$

 

p-value 가 0.085로 0.05 보다 크므로 모분산이 1mm 보다 크다고 할 수 없다. 

 

2) 모분산의 95% 신뢰구간을 구하라

 

모분산의 신뢰구간은 아래와 같은 식으로 구할 수 있다. 아래 신뢰구간은 통계량이 카이제곱 분포를 따른다는 사실을 통해 쉽게 확인할 수 있다. 

 

$$ [\frac{(n-1)s^2}{\chi_{0.025}(n-1)}, \frac{(n-1)s^2}{\chi_{0.975}(n-1)}] $$

 

이 때, n=100, s^2 = 1.2, chi_0.975 = 73.36, chi_0.025 = 128.422 를 대입하면 신뢰구간은 아래와 같다.

 

[0.92, 1.61] 

 

이 신뢰구간은 양측 검정을 할 때에도 활용할 수 있다. 

 

참고

http://www.uniwise.co.kr/pdfupload/lecture_upload/R201500241/stlsm_30.pdf

반응형
반응형


두 모집단의 모비율의 차이에 대한 검정


앞선 포스트에서 중심극한정리에 의한 정규 근사를 통해 표본 비율의 분포를 구하고 검정하는 방법을 다루었다. 이번에는 두 모집단에 대해서 비율에 차이가 있는지를 검정하는 방법에 대해서 정리해보려고 한다. 앞선 one sample 비율 검정과 다른점은 one sample 검정에서는 가설검정을 할 때, 귀무가설 하에서의 모비율을 검정 통계량 계산에 활용할 수 있었던 반면, two sample 비율 검정에서는 귀무가설이 두 모비율이 같다고 정의되는 경우가 일반적이기 때문에 모비율이 정의되지 않아 모비율을 다른 방법을 통해 추정해야 한다는 것이다. 


모델 


각각 n_1, n_2 명 존재하는 집단 A, B 에서 어떤 법안에 찬성하는지 여부를 투표를 통해 결정하는 상황을 예로 들어보자. 집단 A, B 에서 사람의 찬성 여부를 각각 확률변수 X, Y 라 할 때 다음과 같이 모델링할 수 있다. 


$$ X \sim Be(p_1) $$

$$ Y \sim Be(p_2) $$ 

 

표본 비율은 아래와 같이 정의된다. 


$$ \tilde p_1 = \frac{\sum^{n_1}_{i=1} X_i}{n_1} $$

$$ \tilde p_2 = \frac{\sum^{n_2}_{i=1} Y_i}{n_2}$$


표본비율은 베르누이 분포의 표본 평균이라고 볼 수 있기 때문에 중심극한 정리에 의해 표본비율은 아래 분포로 근사된다. 


$$ \tilde p_1 \sim N(p_1, p_1(1-p_1)/n_1) $$

$$ \tilde p_2 \sim N(p_2, p_2(1-p_2)/n_2) $$


가설 검정


$$ H_0 : p_1 = p_2 $$

$$ H_1 : p_1 \ne p_2 $$


검정 통계량 


아래 분포를 통해 검정한다. 

$$ \tilde p_1 - \tilde p_2 \sim N(p_1 - p_2, p_1(1-p_1)/n_1 + p_2(1-p_2)/n_2)  $$


검정 통계량은 다음과 같다. 

$$ \frac{(\tilde p_2 - \tilde p_2) - (p_1-p_2)}{\sqrt{p_1(1-p_1)/n_1 + p_2(1-p_2)/n_2}} $$


이 때, p_1-p_2 는 귀무가설 하에서 0이 되는데, 분모의 p_1, p_2는 사라지지 않는다. 이 모비율을 추정하는 방법에 따라 검정통계량은 아래 2가지 정도로 계산해볼 수 있다. 


1. 표본비율을 통해 모비율을 추정 


$$ \frac{(\tilde p_1 - \tilde p_2)}{\sqrt{\tilde p_1(1-\tilde p_1)/n_1 + \tilde p_2(1-\tilde p_2)/n_2}} $$


2. 합동 비율을 추정 


$$ \tilde p = \frac{\sum^{n_1}_{i=1} X_i+ \sum^{n_2}_{i=1} Y_i}{n_1+n_2} $$

$$ \frac{(\tilde p_1 - \tilde p_2)}{\sqrt{\tilde p(1-\tilde p)/n_1 + \tilde p(1-\tilde p)/n_2}} = \frac{(\tilde p_1 - \tilde p_2)}{\sqrt{(1/n_1+1/n_2)\tilde p(1-\tilde p)}} $$


예제


문제: 실험 참여자 (암 환자) 에 대해 대조약 (기존약) 과 시험약을 투약하고, 12개월 간 관찰아혀 사망한 환자의 수를 관찰한다. 이 때, 처리집단이 대조집단에 비해 더 사망자가 적다는 것을 비율의 차이를 검정하는 방법을 통해 확인해보자.  


 

 표본 크기 

사망자 환자 수 

 대조집단

 300  

50 

 처리집단

 200 

20  


$$ n_1 = 300, \tilde p_1 = 1/6 $$

$$ n_2 = 200, \tilde p_2 = 1/10 $$


검정 통계량은 아래와 같다. 


$$ \frac{(\tilde p_1 - \tilde p_2)}{\sqrt{\tilde p_1(1-\tilde p_1)/n_1 + \tilde p_2(1-\tilde p_2)/n_2}} $$

$$ \frac{(1/6 - 1/10)}{\sqrt{1/6(1-1/6)/300 + 1/10(1-1/10)/200}} =  0.0666/0.0302 = 2.205 $$

$$ P(Z > 2.205) = 0.013 $$ 


양측검정을 하기위해 곱하기 2를 해주면 p-value 가 0.026 으로 0.05 보다 작으므로 두 모비율은 다르다고 결론 내릴 수 있다. 마지막으로 R 의 stat 패키지를 통해 구한 p-value 가 손으로 구한 값과 같은지를 확인해보자.


prop.test(n=c(300,200), x=c(50,20), correct=F)


correct option 은 R 의 기본옵션인 연속성 보정을 사용하지 않는다는 것을 의미한다. 


> prop.test(n=c(300,200), x=c(50,20), correct=F)


        2-sample test for equality of proportions without continuity

        correction


data:  c(50, 20) out of c(300, 200)

X-squared = 4.4297, df = 1, p-value = 0.03532

alternative hypothesis: two.sided

95 percent confidence interval:

 0.007445812 0.125887521

sample estimates:

   prop 1    prop 2

0.1666667 0.1000000


이 때, X-squared 값에 root 를 씌우면 Z-score 를 계산할 수 있다. Z-score는 4.4297에 sqrt를 하면, 2.104685 이다. 1. 표본비율을 통해 모비율을 추정 하는 방법을 통해 구한 Z-score 와 다르다는 것을 알 수 있다. 2. 합동 비율을 추정 방법을 통해 Z-score 를 구하면, Z-score 가 2.10468 로 R 의 결과와 같다는 것을 확인할 수 있다. 


(1/6-1/10)/sqrt((1/300+1/200)*0.14*0.86) = 2.10468


R 에서는 합동 비율을 추정하는 방법을 통해 비율의 차이를 검정한다는 것을 확인할 수 있다. 

반응형
반응형


두 정규분포 모양의 모집단의 모평균의 차이에 대한 검정: Two sample t-test 


예를 들어, 서울사람과 부산사람의 몸무게의 평균의 차이가 있는지에 대해 검정하고자 한다. 이럴 때 흔히 쓸 수 있는 방법이 바로 two sample t-test 방법이다. 두 집단의 평균을 비교하여 차이가 유의한지를 보는 방법이다. 우선 언제 t-test 를 할 수 있는지 정리해보자.


t-test 는 연속형 확률 변수이고 평균이 mu 이고 표준편차가 sigma 인 분포를 갖는 모집단으로부터 n 개의 표본을 추출했을 때, n 이 크면 클 수록 중심극한정리에 의해 표본 평균이 평균이 mu 이고, 표준편차가 sigma/root(n) 인 정규분포에 근사된다는 사실을 이용한 방법이다. 따라서 t-test 의 가정은 아래 두 가지로 요약된다. 


t-test 의 가정


1. 연속형 변수 

2. 정규성

3. 임의추출 

4. 큰 샘플 사이즈 


변수가 연속형이어야하고 임의추출을 해야한다는것은 당연해 보이지만, t-test 에서 왜 정규성을 따라야할까? 처음 t-test 를 배울 때, 많이 질문하는 부분이 't-test 는 샘플이 정규분포를 따라야하나요?' 이다. 결론은 '정규분포를 따르면 좋다.' 라고 생각한다. 왜냐하면, 표본 크기가 크면, 어쨌든 표본 평균의 분포는 정규분포에 근사되기 때문에 t-test 가 불가능한 것은 아니기 때문이다. 하지만 문제는 평균이 대표성을 갖는가이다. 그리고 평균이 대표성을 갖기 위해서는 정규분포와 같은 모양이어야한다. 따라서 모평균을 비교하는 문제에 있어서, 모집단이 정규 분포와 비슷해야 타당한 것인데 모집단이 정규 분포임을 확인하는 방법은 샘플의 분포를 이용하는 길밖에 없다. 따라서 샘플의 정규성을 확인함으로써 평균이 대표성을 갖는지 확인해야한다. 만약 샘플이 정규성을 보이지 않는다면, t-test 의 타당성이 떨어지게 된다. 


예를 들어 모집단의 분포가 이항분포나 포아송 분포처럼 특정 상황에서 정규분포로 근사된다면, t-test 의 결과는 타당할 것이다. 하지만 정규성을 띄지 않는 분포에서 왔다면, t-test 보다는 비모수 검정이 더 적합하다. 왜냐하면 평균이 대표성을 띄지 않기 때문이다. 


Two sample t-test 의 종류



More about the basic assumptions of t-test: normality and sample size, statistical round, 2019


위 그림은 mu1-mu2 의 분포를 H0가 참일때와 H1 이 참일 때로 나누어서 보여주는 그림이다. 1종 오류와 2종 오류의 개념에 대해 잘 이해할 수 있는 그림이다. two sample t-test 에 개념에 대해 간단히 설명해보자. 두 집단의 모평균 (mu1, mu2) 에 차이가 있는지 검정하는 two-sample t-test 는 아래의 분포를 이용해 검정한다. 


$$ \tilde X - \tilde Y \sim N(\mu_1, \mu_2, \frac{s^2_1}{n_1} + \frac{s^2_2}{n_2}) $$ 


H0가 참일 때 (mu1-mu2=0) 검정 통계량은 표본 분산을 이용해 아래와 같은 분포를 갖는다.


$$ \frac{\tilde X - \tilde Y}{\sqrt{\frac{s^2_1}{n_1}+\frac{s^2_2}{n_2}}} ... 식 1 $$


위 검정 통계량이 특정한 자유도를 갖는 t 분포를 갖는다는 사실을 이용해서 검정하는 것인데, t 분포의 자유도는 두 그룹의 분산에 대한 가정에 따라 다르기 계산된다.


1. 등분산 가정 (합동분산 추정량을 이용한 t-test)


합동분산추정량은 아래와 같이 계산된다. 


$$ s^2_p = \frac{n_1-1}{(n_1-1)+(n_2+1)}s^2_1 + \frac{n_2-1}{(n_1-1)+(n_2+1)}s^2_2 = \frac{(n_1-1)s^2_1 + (n_2-1)s^2_2}{n_1+n_2-2} $$ 


이 합동분산 추정량을 위 식1 의 s_1, s_2 대신에 넣으면 검정통계량을 계산할 수 있고, 이 검정통계량은 자유도가 n_1+n_2-2 인 t 분포를 따른다. 식 1을 합동 분산 추정량을 통해 쉽게 계산하기 위해 다음과 같이 정리할 수 있다. 


$$ \frac{\tilde X - \tilde Y}{\sqrt{s^2_p(\frac{1}{n_1}+\frac{1}{n_2})}} \sim t(n_1+n_2-2) $$


2. 등분산 가정을 하지 않을 때 (Welch's t-test)


등분산 가정을 하지 않으면 위 식1을 그대로 계산하면 된다. 다만, 자유도의 계산이 다소 복잡하다. 이 방법을 Welch's t-test 라 하는데 이 방법에 따라 자유도를 유도하는 것은 어려운 부분이므로, 단지 이렇게 계산한다는 것만 알고 넘어가도록 하자. Welch's t-test 에서 자유도는 아래와 같이 계산된다. 


$$ v=\frac{(s^2_1/n_1 + s^2_2/n_2)^2}{\frac{(s^2_1/n_1)^2}{n_1-1} + \frac{(s^2_2/n_2)^2}{n_2-1}} $$


즉, Welch's t-test 는 다음의 분포를 통해 검정한다. 


$$ \frac{\tilde X - \tilde Y}{\sqrt{\frac{s^2_1}{n_1}+\frac{s^2_2}{n_2}}} \sim t(v) $$



1, 2 두 방법 모두 표본수가 많다면 정규근사를 이용할 수 있다. 이 경우 t분포를 이용하지 않고 표본 수가 많을 때, 검정 통계량이 표준정규분포를 근사적으로 따른 다는 사실을 통해 검정한다. 

반응형
반응형

중심극한정리를 통한 표본 비율 분포 근사와 모비율의 검정


비율의 분포 


당신이 정책 담당자이고 전체 국민들 중 대상으로 새로운 교육 개혁에 대해 찬성하는 사람들의 비율을 알고 싶다고 해보자. 그리고 그 비율을 p 라고 할 때, p > 0.5 임을 보이고 싶다고 하자. 하지만 현실적으로 전체 국민에 대해 찬반 여부를 조사하는 것은 불가능에 가깝다. 따라서 전체 인구 집단에서 샘플링한 표본에서 구한 비율을 통해 위 가설 (p > 0.5) 을 보이고 싶다. 


예를 들어, 1000명을 조사해서 p=0.48 을 얻었다고 하자. 이 때, p > 0.5 라고 할 수 있을까? 이 표본에서는 p 가 0.5를 넘지 못했지만, 0.5 에 매우 근접했기 때문에 다른 1000 명을 조사하면 0.5가 넘을 수 있을 것을 기대할 수 있을 법하다. 한 가지 방법은, 1000 명을 여러번 뽑아서 p가 0.5를 넘는 비율을 보는 것일 것이다. 예를 들어, 1000 명을 100번 뽑았는데, 95번이 p>0.5 일 경우, p > 0.5 라고 결론내려볼 수 있을 것이다. 


하지만 1000 명을 100 번 뽑는 것도 마찬가지로 시간과 비용이 많이 든다. 따라서 현실적으로 비율의 분포를 이용한다. 표본을 통해 비율의 분포를 구할 수 있다면 더욱 쉬운 방법을 통해 가설을 검정할 수 있을 것이다. 표본 안에서 뽑은 값이 분포 안에서 어디에 위치해 있는 가를 보는 것이다. 가설이 분포 흔히 관찰할 수 있는 것이라면 그 가설이 맞는 것이고, 그렇지 않다면 가설이 틀린 것이다. 우선, 모집단의 일부를 샘플링하여 찬성 비율을 보는 것은 다음과 같이 모델링 해볼 수 있다. 모집단의 정책에 대한 찬반여부를 확률변수 X 라 할 때, 다음과 같은 베르누이 분포를 갖는다. 


$$ X \sim Be(P) $$ 


이 때, 1000의 크기를 갖는 표본 X1,...,X1000 이 존재하면, 찬성 비율은 다음과 같이 계산할 수 있다. 


$$ \tilde P = \frac{\sum_{i=1}^{i=1000}{X_i}}{n} $$ 


중심극한정리에 의해 p^ 은 정규근사가 가능하다. 왜냐하면 p^ 은 베르누이 분포의 표본 평균이기 때문이다. 


$$\tilde P \sim N(P, \frac{p(1-p)}{n}) $$ 


비율의 검정


중심극한정리를 통해 p^ 의 분포는 구했는데, 이것을 통해 p > 0.5 인지 아닌지를 어떻게 검정할 수 있을까? 사실 좋은 방법은 앞서 언급했듯, 1000 명을 여러번 뽑아서 p가 0.5를 넘는 비율을 보는 것일 것이다. 이 경우 분포를 모르더라도 결론을 내려볼 수 있다. 하지만 우리는 통계적, 근사적으로 이 문제를 해결하려고 한다. 


검정의 방법은 크게 두 가지로 나누어볼 수 있다. 


1. 가설검정을 이용한 방법

2. 신뢰구간을 이용한 방법 


가설검정을 이용한 방법


가설검정을 이용한 방법의 절차는 다음과 같다. 


1. 귀무가설 및 대립가설의 설정 


양측 검정, 단측 검정 둘 중 하나를 선택해 수행한다. 


$$ H_0 = 0.5 $$

$$ H_1 > 0.5 $$ 


2. 검정 통계량 계산 


아래분포를 이용해 검정통계량을 계산

$$ \tilde P \sim N(0.5, \frac{0.5*0.5}{1000}) = N(0.5, 0.00025) $$ 


> x = seq(0.01, 1, 0.001)

> y = dnorm(x=seq(0.01, 1, 0.001), mean=0.5, sd=sqrt(0.00025))

> plot(x, y)


검정통계량은 아래와 같다. 


$$ \frac{0.48-0.5}{\sqrt{0.00025}} = -1.26 $$ 


3. 유의수준 설정 


일반적으로 5 %의 유의수준을 설정한다. 


4. 기각역 (또는 p-value) 계산 


검정통계량과 유의수준을 통해 기각역을 결정한다.


기각역은 아래와 같은 절차로 계산한다. 


$$ P(\tilde p > R) = 0.05 $$ 


위 식에서 R 이 기각역인데, R = 0.526 이다. 


>qnorm(p=0.95, mean=0.5, sd=sqrt(0.00025)) 

0.526


유의수준을 통한 기각여부 결정은 아래와 같이한다. 유의수준 계산에는 검정통계량을 이용한다.


> 1-pnorm(-1.26)

0.89

 

$$ P(X > -1.26) = 0.89 $$ 


5. 기각역 포함 여부를 통해 의사 결정을 수행한다. 


p-value 가 0.05 보다 큰 0.89 이고, 기각역 (X > 0.526) 에 포함되지 않으므로, (사실 두 개는 같은 정보이다.) 귀무가설을 기각할 수 없다. 


신뢰구간을 이용하는 방법


신뢰구간을 이용한 검정 방법의 절차는 다음과 같다. 신뢰구간을 이용한 방법은 양측 검정을 위해 사용할 수 있다. 


귀무가설 및 대립가설의 설정 


$$ H_0 = 0.5 $$

$$ H_1 != 0.5 $$ 


신뢰수준을 정하고 p 의 구간추정을 통해 신뢰구간을 구한다. 95% 신뢰구간은 다음과 같이 구할 수 있다. 


$$ \tilde P \sim N(p, \frac{p(1-p)}{n}) $$ 

$$ P[\tilde p - 1.96* \sqrt{p(1-p)/n} < p < \tilde p+ 1.96 * \sqrt{p(1-p)/n}] = 0.95 $$

$$ (\tilde p - 1.96* \sqrt{p(1-p)/n}, \tilde p+ 1.96 * \sqrt{p(1-p)/n}) $$


위 식에서 n,p,sd 를 대입하면 다음과 같은 신뢰구간을 얻을 수 있다. p 대신의 p의 추정량 p^을 넣는다. 


(0.469, 0.531)


따라서 p^ 은 0.48 이고, 위 구간에 들어가기 때문에 귀무가설을 기각할 수 없다. 


모비율의 신뢰구간을 구할 때, 한가지 알아두면 좋은 테크닉은, p 에 표본 비율 p^을 대입하지 않고, 0.5를 대입하면 가장 보수적인 신뢰구간을 구할 수 있다는 것이다. 


$$ (\tilde p - 1.96* \sqrt{0.5(1-0.5)/n}, \tilde p+ 1.96 * \sqrt{0.5(1-0.5)/n}) $$


p를 0.5로 추정할 때, 신뢰구간의 길이가 가장 넓어지기 때문에 만약 표본 수가 충분한다면 신뢰구간의 타당성을 확보하기 좋은 방법이라고 할 수 있고, 표본수가 적어 표본비율의 변동이 큰 상황에서도 대략적인 신뢰구간을 구할 수 있다는 장점이 있다. 


반응형
반응형


Label smoothing


본 포스팅에서는 최근 딥러닝 모델의 정확도와 Calibration 향상 최종적으로는 model generalization 에 도움이 된다고 알려진 Label smoothing 에 대해서 살펴보도록 하겠습니다. 


Introduction


이미지 분류는 이미지를 n 개의 카테고리로 할당하는 일을 말합니다. 예를 들어, 고양이와 개를 분류하는 이미지 분류문제를 예로 들어보자. 이미지의 크기가 248x400 라면, RGB 각 3개의 채널이 존재하기 때문에 하나의 이미지는 248x400x3 의 3차원 벡터로 표현할 수 있습니다. 이 벡터를 단 하나의 값으로 요약하는 것이 이미지 분류 문제에서 하는 것입니다. 

이미지 분류 문제의 예



고양이와 개를 분류하는 위의 예는 이진 분류 (binary classification) 의 예로 볼 수 있습니다. 이미지 분류의 목적 (248x400x3) 의 벡터를 하나의 값으로 요약하는) 을 달성하기 위해서는 학습 데이터 (training data) 가 필요합니다. 즉, 데이터의 갯수가 n 일 때, 학습 데이터의 형태는 이미지 : nx248x400x3 / Label: n 의 벡터로 표현할 수 있습니다. 근데 문제는, 잘못 labeling 된 이미지가 있을 수 있다는 것입니다. 특히, 이미지의 출처가 인터넷인 경우에는 이러한 mislabeling 의 문제가 빈번하게 일어납니다. 

예를 들어, 위와 같은 상황에서 딥러닝 모델은 Dog 라고 잘못 labeling 된 고양이의 이미지까지 학습하게 됩니다. 물론 데이터의 수가 적다면 이를 눈으로 일일히 확인하며 수정할 수 있지만, 데이터의 수가 많다면 이는 불가능합니다. 


$$ L = −(ylog(p)+(1−y)log(1−p)) $$

Binary classification 에서는 위와 같은 binary cross entropy 를 씁니다. 딥러닝 모델을 트레이닝하면서 loss 를 계산할 때, 잘못 labeling 된 sample 에 대해서는 loss 값이 크게 계산되게 됩니다. 이것은 training 도중 문제를 발생시킬 수 있습니다. 

Label Smoothing — One Possible Solution

이러한 문제를 해결하기 위한 한 가지 가능한 방법이 label smoothing 입니다. 이진 분류 문제에서 label 은 0 또는 1로 주어집니다. label 이 1이라고 하는 것은 그것의 label 이 1 임을 100 % 확신한다는 뜻입니다. 하지만 반드시 그렇지 않을 수 있다는 것이 핵심 문제입니다. 왜냐하면 사람이 annotation 하는 것이기 때문에 실수의 가능성이 언제나 존재합니다. 이 때 발생할 수 있는 잘못된 loss 의 영향을 줄이기 위하여 label 을 0또는 1이 아니라 smooth 하게 부여하는 것이 label smoothing 의 아이디어입니다. 또한 label smoothing 은 mislabeling 된 데이터를 고려하기 위해 사용되는 것에 추가적으로 regularization에 도움을 주면서, model generalization 과 calibration 에 도움이 된다는 것이 알려져있습니다.

Maximum likelihood learning with a softmax classifier and hard targets may actually never converge, the softmax can never predict a probability of exactly 0 or exactly 1, so it will continue to learn larger and larger weights, making more extreme predictions. forever (출처)

tensorflow 에는 label smoothing 에 대한 implementation 을 제공합니다. 아래와 같이 softmax_cross_entropy 의 parameter 로 label_smoothing 값을 전달할 수 있습니다. 


tensorflow document 를 보면 label_smoothing 값이 0이 아닌 경우, 아래와 같이 label smoothing 을 한다고 설명이 되어있습니다. 

"If label_smoothing is nonzero, smooth the labels towards 1/num_classes: new_onehot_labels = onehot_labels * (1 - label_smoothing) + label_smoothing / num_classes"

이것이 무엇을 뜻할까요? 

예를 들어 개/고양이 이진분류문제에서 label_smoothing 이 0.2로 설정되었다고 해봅시다. 그리고, 0은 고양이, 1은 개라는 rule 로 labeling 을 했다고 합시다. 위의 식을 이용하면 새로운 label 은 아래와 같이 계산됩니다. 

new_onehot_labels = 1 * (1 — 0.2) + 0.2 / 2 = 1*(0.8) + 0.1
new_onehot_labels = 0.9 

그리고 원래 0으로 부여되었던 label 의 경우 tensorflow 에서는 1-0.9 = 0.1 로 부여하게됩니다. 왜 label smoothing 을 이용하면 model calibration 에 도움이 될까요? 직관적인 해석은, 모델이 target 을 정확하게 예측하지 않아도 되도록 만드는 것입니다. 예를 들어, 원래 label 이 1인 데이터에 대해서 모델은 1을 최대한 예측하도록 트레이닝되는데 label smoothing 을 적용하면 '그래 0.9 정도면 잘 예측했다.' 정도의 loss 값을 산출하게 되는 것입니다. 그렇기 때문에 모델이 overconfident 해지는 경향을 막게 되아 calibration 및 regularization 이 되는 효과를 갖게 됩니다.  

Reference

https://towardsdatascience.com/label-smoothing-making-model-robust-to-incorrect-labels-2fae037ffbd0

https://arxiv.org/pdf/1906.02629.pdf

https://medium.com/@nainaakash012/when-does-label-smoothing-help-89654ec75326

https://rickwierenga.com/blog/fast.ai/FastAI2019-12.html

반응형
반응형