카테고리 없음

엔트로피(Entropy)와 크로스 엔트로피(Cross Entropy)

oogieon_n_on 2022. 3. 2. 21:13

 

개강 첫 날 시계열분석과 기계학습 오티를 들으면서 수업시간에 배웠거나 중간에 생각나서 따로 공부한 내용들을 정리하기

 

Entropy = 불확실성 !

 

ex) 

- 정상적인 동전을 던져서 앞면이 나올확률 50 : 50 -> 불확실성이 높다 => 엔트로피가 높다 

- 앞면만 있는 동전을 던져서 앞면이 나올확률 100: 0 -> 불확실성이 없다 => 엔트로피가 없다

- 동전이 굽어있어서 앞면이 나올 확률이 더 높다 약 60: 40정도 -> 불확실성이 있다 => 엔트로피가 낮다 

 

 

엔트로피 공식 (출처: 허민석 유튜브)

Pi는 일어날 확률 ,  n은 class의 개수  

 

앞면 뒷면 calculation Entropy
50% 50% -(0.5 * log0.5 + 0.5 * log0.5) = 1 1
100% 0% -(1.0 * log1 + 0.0 * log0) = 0 0
90% 10% -(0.9* log0.9 + 0.1*log0.1) =0.468 0.47

구분해야할 class의 수에 따라 entropy값의 범위가 달라진다

 

 - 2 classification : 0 ~ 1

- 4 classifiaction : 0 ~ 2

- 8 classification : 0 ~ 3

- 16 classification : 0 ~ 4

 

머신러닝에서의 활용

 

1. Decision Tree 

 

관측치 군인인가? 머리가 긴가? 성별
1 O X
2 X X
3 O X
4 X O
5 O X
6 X X

 

binary classification Decision Tree( 출처 : 허민석 유튜브)

 

파란색 결정트리의 경우 불확실성이 없고 초록색 결정트리의 경우 불확실성 즉 엔트로피가 높을 것임 

 

파란색 결정트리의 total entropy = 0

초록색 결정트리의 total entropy = 0.97

 

 

2. Active Learning 

 

-> 가동하고 있는 모델의 성능을 발전시키고 싶을 때 사용하는 방법 : 불확실한 특정 데이터에만 labeling해주기

 

ex) 감정분류기 모델 

 

[ input sentence ] ---------->  ML  ---------->  Happy / Unhappy

 

  Happy Unhappy
i love you 0.99 0.01
i am angry 0.05 0.95
i am sad 0.3 0.7
i am feeling blue 0.6 0.4

몇몇 인풋값에 대한 예측 성능이 좋지 못한 모델 ( low confidence ) 

 

성능이 낮은 특정 데이터들에 각각 labeling 을 해줘서 모델의 성능을 발전시키기엔 비용이 많이듬

 

또한 labeling을 전부 다 하더라도 모든 데이터를 다시 train하게 되면 중복되는 데이터들이 상당히 많아지기 때문에 training data의 사이즈만 늘어나게 되어서 비효율적

 

따라서 각각의 entropy를 계산해서 entropy가 낮은 데이터들만 따로 labeling해주는게 효율적인 방법이 될 수 있음

 

  Happy Unhappy Entropy Labeling
i love you 0.99 0.01 0.08 -
i am angry 0.05 0.95 0.29 -
i am sad 0.3 0.7 0.88 Unhappy
i am feeling blue 0.6 0.4 0.97 Unhappy

 

엔트로피가 높은 " i am sad " 와 " i am feeling blue " 두개의 문장만 labeling을 해줌 

 

Cross Entropy = 불확실성 정보의 양 

틀릴 수 있는 정보를 가지고 구한 엔트로피 

틀릴수 있는 정보 ? - 머신러닝 모델의 아웃풋 ! 

 

classification model 에서 자주 사용되는 cross entropy (출처 : 허민석 유튜브)

Q = 예측된 확률 (예측)

P = 실제 확률 (정답)

 

H(X) = Entropy , H(P,Q) = Cross Entropy (출처 : 허민석 유튜브)

모델을 학습시킬 때 예측값이 실제값과 얼마나 근사한지 알아보고 싶음  

 

cross entropy의 특징 

- 실제값과 예측값이 완전히 다를경우 cross entropy는 무한

- 실제값과 예측값이 비슷할 경우 cross entropy는 entropy 와 비슷

- 실제값과 예측값이 완전히 동일한 경우 cross entropy는 0

 

Cross Entropy >= Entropy

 

Deep Learning 에서 cost function으로 사용되는 Cross Entropy

 

예측의 정확도가 낮아질수록 loss가 급격히 증가하는 cross entropy (출처 : StatQuest with Josh StarmerStatQuest with Josh Starmer 유튜브)

cross entropy (log함수 그래프) 에서 gradient descent 사용 -> 0이 되는 값을 찾아가며 점점 loss를 줄여가는 방식

 

 

사용예제)

 

색 분류기 모델, One-hot encoding이 이루어진 상태

 

분류 문제에서 예측 대상 변수는 클래스(class). 이를 수치화할 때 보통 클래스에 대한 지시값 벡터로 표현하는 원-핫 인코딩 방식을 사용

  • One-hot encoding: 예측 대상 변수가 K개의 클래스 수를 갖는 경우 y=(y1,y2,,yK)y=(y1,y2,…,yK) 로 나타냄. 단 yk k번째 클래스 여부에 대한 지시값(Yes이면 1, No이면 0)

(예) 혈액형(O, A, B, AB)이 예측 대상 변수인 경우, O형은 (1,0,0,0)(1,0,0,0), A형은 (0,1,0,0)(0,1,0,0), B형은 (0,0,1,0)(0,0,1,0), AB형은 (0,0,0,1)(0,0,0,1)로 나타냄

 

  RED GREEN YELLOW
실제 label (정답) 1 0 0
case1 0.8 0.1 0.1
case2 0.2 0.2 0.6

case1은 정답을 맞췄고 case2는 틀린 학습결과 

 

이 모델의 loss function을 cross entropy로 각각 계산해보면 

 

case1 = - ( 1 * log0.8 + 0 * log0.1 + 0 * log0.1 ) = 0.09

case2 = -( 1 * log0.2 + 0* log0.2 + 0* log0.6 ) = 0.69 

 

loss를 최소화하는 모델 : 틀렸을때는 loss값이 늘어나고 맞췄을때는 loss값이 줄어드는 방식으로 weight를 조절

 

* 3/4추가사항 * 

 

KL-divergence = entropy of data distribution + cross entropy

 

KL(p‖q)=H(p,q)−H(p)

 

교차엔트로피를 최소로 만드는 방식의 학습결과는 실제값의 분포와 모형 분포사이의 KL-divergence 를 최소로 하는 것