엔트로피(Entropy)와 크로스 엔트로피(Cross Entropy)
개강 첫 날 시계열분석과 기계학습 오티를 들으면서 수업시간에 배웠거나 중간에 생각나서 따로 공부한 내용들을 정리하기
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 | 여 |
파란색 결정트리의 경우 불확실성이 없고 초록색 결정트리의 경우 불확실성 즉 엔트로피가 높을 것임
파란색 결정트리의 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 = 불확실성 정보의 양
틀릴 수 있는 정보를 가지고 구한 엔트로피
틀릴수 있는 정보 ? - 머신러닝 모델의 아웃풋 !
Q = 예측된 확률 (예측)
P = 실제 확률 (정답)
모델을 학습시킬 때 예측값이 실제값과 얼마나 근사한지 알아보고 싶음
cross entropy의 특징
- 실제값과 예측값이 완전히 다를경우 cross entropy는 무한
- 실제값과 예측값이 비슷할 경우 cross entropy는 entropy 와 비슷
- 실제값과 예측값이 완전히 동일한 경우 cross entropy는 0
Cross Entropy >= Entropy
Deep Learning 에서 cost function으로 사용되는 Cross Entropy
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 를 최소로 하는 것