Entropy
엔트로피는 머신러닝에서 정보량을 나타내는 방법으로 사용된다. 정보의 량이라는게 되게 추상적으로 들리는데, 생각해보면 되게 간단한 개념이다.
ML상에서 굉장히 많이 사용되는 개념인데, 이해하지않고, 아 그냥 쓰면되지 하고 넘어가기에는 너무 찜찜해서 정리하기로 한다.
정보량의 예
다음과 같은 예를 들어보자.
A:커피 내기를 했는데,모자를 쓴 친구가커피를 샀어!
B:커피 내기를 했는데,옷을 입은 친구가커피를 샀어!
Question: 어떤사람이 커피를 샀는가?
A, B 라는 두 문장이 있었을 때 당신은어떤사람이 커피를 샀는지알고싶다면, 두 정보 중에 어떤 것이 더 값어치가 있다고 생각하는가?
단순하게 생각해보면,모자를 쓴 사람 보다 아무옷을 입은 사람이 더 많다. 이말인 즉슨모자를 쓴 사람에 대한 정보로누가 커피를 샀는지특정하기 쉽다는 것이다. 그러므로 우리는,A 정보가 당신에게 더 값어치가 있다. 이 값어치가 바로 정보량이다.
- 여기서 알수 있는 사실은 더 특정하기 쉬운 정보들이 바로 더 정보로서의 값어치가 높다고 볼 수 있다.
- 이를 다시 생각해본다면, 정보가 흔할수록 정보량이 적고, 정보가 흔하지 않을 수록 정보량이 크다.
- 즉, 정보량과 흔한 정도가 반비례 관계라고 생각할 수 있다.
이를 조금더 구체적인 수치로 나타내서 측정할 수 있다면?
정보량의 계산
정보량을 어떻게 정량적으로 나타낼 수 있을까?
위의 예를 조금 변형해서 아래와 같이 바꿔보자.
A:커피 내기를 했는데,빨간 옷을 입은 친구가 커피를 샀어! P(red)
B:커피 내기를 했는데,파란 옷을 입은 사람이 커피를 샀어! P(blue)
라고 했을 때, 손쉽게 확률로 표현할 수 있다. 다음과 같이 정의해보자.
P(red)=peopleredpeopleall; 커피 내기를 한 사람들(peopleall) 중,빨간 옷(peoplered)을 입은 사람을 고를 확률.
P(blue)=peoplebluepeopleall;커피 내기를 한 사람들(peopleall) 중,파란 옷(peopleblue)을 입은 사람을 고를 확률.
직접 숫자로 표현해본다면, 전체 커피 내기를 한 사람들의 숫자가 10명이라고 했을 때, 빨간 옷을 입은 사람이 3명, 파란 옷을 입은 사람이 7명이라고 한다면,
P(red)=310=0.3 P(blue)=710=0.7
와같이 계산이 될 수 있을 것이다. 그렇다면, 빨간 옷을 입었다는 정보와 파란옷을 입었다는 정보 중 어떤 것이 더 정보로서 가치가 있을까? 직관적으로 생각했을 때, 내가 누가 내기에 걸렸는지를 알기 원한다면 더 사람을 특정하기 쉬운, 즉 빨간 옷을 입은 사람에 대한 정보가 더 가치가 있다. 이를 통해서, 정보량은 그 사건(색)이 발생할 확률에 반비례한다는 사실을 알 수 있다.
이 때,어떤 변수 x가 나올 확률 P(x)에 대하여 정보량 I(x)을아래와 같이 정의 할 수 있다.
I(x)=−logP(x)
여기서 −log(x)함수는 아래와 같은 그래프를 가지는데, 확률은 0과 1사이의 값을 가지므로, 정확히 반비례하는 관계를 나타내는데 사용할 수 있음을 알 수 있다.
위의 예제를 이 식을 통해서 계산해보면,
I(red)=−logpeopleredpeopleall=−log310=1.203...
I(blue)=−logpeoplebluepeopleall=−log710=0.356...
따라서 1.203 > 0.356 반비례하는 관계를 잘 표현하는것을 수치적으로 볼 수 있다. 어찌 됐든, 이식은 정보량에 대한 개념을 수학적으로 잘 모델링 할 수 있다고 볼 수 있는 것이다.
Entropy의 정의
예제를 바꿔보자. 우리는 이제 빨주노초 바지를 입고있는 10명이서 가위바위보를 했다는 사실을 알았다고 하자. 그리고 빨4명 주3명 노2명 초1명 라는 사실을 알고 있다고 하자. 자 그러면 이 정보를 누군가에게 전달하고자 할 때, 어떻게 할 수있을까? 인간의 언어로는...1번사원은 빨간색, 2번사원은 주황색, 3번사원은 또 빨간색 ....
오마이갓 너무 길어진다. 우리는 컴퓨터를 사용할 수 있으므로, 이 정보를 이진화해서 보내보면 더 효율적으로 보낼 수 있지 않을까? 즉, 빨: 00 주: 01 노: 10 초: 11 로 정하고, 1번 사람부터 10번 사람까지 000100... 로 인코딩해서 보내는 방식이 있을 것이다. 이렇게 할 경우는 총 2바이트 * 10명 해서 총 20바이트면 이 바지 색에 대한 정보를 동료에게 전할 수 있을 것이다.
하지만, 여기서 더 줄일수는 없는 걸까? 사전 확률을 알고 있을 때, 어떻게 하면 이 정보들을 최소한의 비트를 사용해서 이 정보를 전송할 수 있을까? 이 때, 섀넌이라는 아저씨가 이 방식으로 인코딩할 비트수를 정하면 제일 효율적이다! 라고 증명한 방식이 바로 Entropy다.Entropy형태로 인코딩을 하는 것보다 효율적인 방식은 있을 수 없다!
섀넌은 특정 확률분포 P(X)를 따르는 확률 변수X가 있을 때, 확률 변수 X의 사건 x를 p(x)I(x)의 길이로 인코딩 하는 것이 기대값을 최소로 만들 수 있음을 보였다. (고한다) 이 때의 확률 변수 X의 기대값을엔트로피라고한다.
이 경우에는 그렇게 인코딩해야 최적의 길이(가장 짧은 길이의 바이트로)로 정보를 전달할 수 있다는 것이고, 그 길이가엔트로피다.
여기서 기대값 E[X] 란, 위키피디아의 힘을 빌어서
확률론에서, 확률 변수의 기댓값(期待값, 영어: expected value)은 각 사건이 벌어졌을 때의 이득과 그 사건이 벌어질 확률을 곱한 것을 전체 사건에 대해 합한 값이다. 이것은 어떤 확률적 사건에 대한 평균의 의미로 생각할 수 있다.
E[X]=∑ixiP(xi)
로 나타낼 수 있다. 기대값에 대한 식은위키피디아에 가면 계산하는 방식을 찾아볼 수 있다.
즉, 각 사건의 벌어졌을 때의 이득(xi)은? 바로 정보량(I(x))이다. 그럼 바로 정의가 나와버리지.
어떤 확률 변수 X가 특정 확률 분포 P(X)를 따를 때,엔트로피H(P)는
H(P)=H(x)=EX∼P[I(x)]=EX∼P[−logP(x)]=−∑xP(x)logP(x)
자 어려운 용어들이 많이 나왔는데, 위의 예에서 일일히 대입해보자면,
확률 변수 X = 바지의 색(빨R,주O,노Y,초G)
확률 분포P(X)는 아래와 같다.
P(x)={0.4if x is R0.3if x is O0.2if x is Y0.1if x is G
조금더 설명하면, 여기서 어떤 사건이 발생할 확률은 P(R)와 같이 나타날 것이고, 빨간색의 옷에 해당하는 값, 즉 정보량은 I(R)=−log(P(R))가 될 것이다.
따라서, 우리의 엔트로피는 아래와 같다.
H(x)=−(P(R)logP(R)+P(O)logP(O)+P(Y)logP(Y)+P(G)logP(G))
중요한점은 어떤 확률 분포가 있을 때, H(P) 보다낮은 기대값을 가질 수 없다는 점이다!즉 머신러닝 관점에서 확률 분포 P를 알고 있다고 했을 때, H(P) 는global minimum이다.
참고로 이 엔트로피는 재밌는 성질을 가지는데, 바로, 확률 분포가 균등할 때 최대값을 가진다는 것이다. 반대로, 확률 분포가 균등하지 않는다면 최소값을 가지게 된다.
확률분포가 균등할 경우 특정 확률 변수중에서 뭐가 나타날지 결정하기 어렵다. 즉불확실성이 높다. 반면에 특정 사건들이 높은 확률로 등장할 수 있다면 그 사건들로 결정될 확률이 높다. 즉결정적이므로 불확실성이 낮다. 이러한 특징 때문에 엔트로피는 불확실성에 대한 측정이 가능하다.
특정 확률변수가 어떤 확률 분포를 따를 때, 그것의 정보량의 총량을 나타내 줄 수 있으면서 동시에 불확실성에 대한 측정이 가능한 것이다. 그런데, 이 특징은 (내가 생각하기에) 정보이론적인 관점인거 같고 머신러닝에서는 중요하지 않다.
정리
정보가 발생할 수 있는 어떤 사건들의 확률 변수를 X라고 하고, 이 확률 변수에 따른 확률 분포를 P(X)라고 하자.
정보량
정보량은 어떤 정보가 가지는 가치를 정량화한 값이다.
확률 변수 X의 특정 사건 x의 정보량 I(x) 는 아래와같이 계산될 수 있다.
I(x)=−logP(x)
이 정보량은 아래와 같은 특징을 가진다.
- 정보가 흔할수록 정보량이 적고, 정보가 적을수록 정보량이 크다.
- 덜 자주 발생하는 사건은 더 높은 정보량을 가진다.
Entropy
엔트로피는 정보를 표현하는데 필요한 (평균) 최소 자원량(0 or 1의 개수)을 의미한다.
엔트로피는 모든 사건 정보량의 기대값으로 계산된다.
따라서 다음의 식으로 계산이 가능하다.
H(P)=H(x)=EX∼P[I(x)]=EX∼P[−logP(x)]=−∑xP(x)logP(x)
이 엔트로피는 다음과 같은 특징을 가진다.
- 엔트로피는 사건의 분포가 결정되기 쉬운 확률분포를 따를 경우 엔트로피는 낮다.
- 엔트로피는 사건의 분포가 균등한 확률분포를 따를 경우 엔트로피가 높다.
- 만약 이 엔트로피가 연속일 경우, 확률이 가우시안 분포를 따를때 앤트로피가 가장 높다.
- 중요한점은 어떤 확률 분포가 있을 때, H(P) 보다낮은 기대값을 가질 수 없다는 점이다!즉 머신러닝 관점에서 확률 분포 P를 알고 있다고 했을 때, H(P) 는global minimum이다.
feat. 엔트로피는 불확실성의 양을 나타낼 수 있다.
Cross Entropy
의미와 정의
자, 이제 조금더 어려운 문제를 풀어보자. 일반적으로 실제 확률 분포 P는 알기 쉽지 않다. 당장 오늘 커피를 먹고싶다가도 먹기싫다가도 갑자기 내기를 하고 있는 우리들은 미리 이 확률 분포를 미리 아는 것은 쉽지 않을 것이다. 하물며, 머신러닝에서 매우 복잡한 문제를 모델링하는 것은 더더덛더ㅓ욱 이 확률분포 P를 알기 쉽지 않을 것이다.
그래서, 대충 우리가 아무렇게나 추정을 해보자. 그럼 내가 생각한 확률 분포를 Q(x)라고 했을 때,
Q(x)={0.25if x is R0.25if x is O0.25if x is Y0.25if x is G
라고 생각해본다. 정확한 정보량은 −logP(x)이겠지만, 나는 Q(x)라고 잘 못 예측했다. 하지만 이런 방식으로 예측했기 때문에 이 확률분포에 대한 정보량은 어쨌든−logQ(x)일 것이다.
다시말해, 실제확률분포가 P(x)일 때, Q(x)라고 잘못 예측한다면 정보량이 −logQ(x)라고 측정되었을 것이므로 잘못 예측한 엔트로피는 실제 확률과 우리가 추정한 값(정보량)의 곱의 합으로 나타나게 된다.
실제 엔트로피는 E(P)로, 우리가 실제확률분포가 P(x)일 때, Q(x)라고 잘못 예측한 엔트로피를 CE(P,Q)로 나타낼 때,
E[P]=−∑xP(x)logP(x)
CE(P,Q)=−∑xP(x)logQ(x)
로 계산되게 된다.
Binary Cross Entropy
어 내가 보던 Binary Cross Entropy랑은 조금 다른데요?
CE에서 두 분포가 확률 변수를 단 두개만 가진다고 하자. 예를들면 동전의 앞면과 뒷면.
앞면이 나올 확률이 P(x) 라고 한다면 뒷면이 나올 확률은 1−P(x)가 된다.
반면, 앞면이 나올 것으로 예측한 확률 Q(x)라고 한다면 뒷면이 나올 것이라고 예측한 확률은 1−Q(x)가 된다.
이걸 정리해보자면
CE(P,Q)=−∑xP(x)logQ(x)
BCE(P,Q)=−(P(x)logQ(x)+(1−P(x))log(1−Q(x)))
KL-divergence
의미와 정의
자꾸 KLKL 거리는데 KL 머길래?... 라고 했을때 되게 심플하다. 일단 divergence는 차이라는 의미로 해석하면 되는데, 주로 두 분포의 차이를 계산할 때 주로 사용된다.
아까 위에서 설명했드시, 실제 확률분포 P를 알고 있을 때, 엔트로피 E(P)는 이보다 더 좋아질 수 없는global minimum이다. 일반적으로 머신러닝에서 찾고 싶은 것은 바로 우리가만든 모델의 분포 Q(x)를 실제 분포 P(x)에 근사하게 만드는 것이다. 따라서,
E(P)=−∑xP(x)logP(x)CE(P,Q)=−∑xP(x)logQ(x)
일 때, 내가 생각한 확률분포와 실제 확률분포와의 차이를 나타내기 위해서 간단하게 CE(P,Q)−E(P)를 구해주면 된다. 그리고 이를 KL-divergence라고 부르며, KL(P∥Q) 로 표기한다.
KL(P∥Q)=CE(P,Q)−E(P)=−∑xP(x)logQ(x)−(−∑xP(x)logP(x))=∑xP(x)logP(x)−∑xP(x)logQ(x)=∑xP(x)(logP(x)−logQ(x))=∑xP(x)logP(x)Q(x)
정리한 식에서 만약 Q(x)가 P(x)의 분포를 알아냈을 때, 즉, Q(x)와 P(x)가 완전히 같아졌을 때, log 안쪽 식이 1이 되면서 KL(P∥Q) 값이 0이 되고, 이것이 바로 최소가 된다.
사족
그런데 잘 생각해보면, binary classification에서 KL-divergence를 쓰지 않고 CE에 대해서만 최적화 해주는 것을 볼 수 있다. 그건 왜그러할까?
사실 쉬운 문젠데, 우리가 최적화하고 싶은 값은 바로 Q(x)이다. 즉 Q입장에서 보면 P는 상수다. 따라서 CE에 대해서만 최적화해주면 되기때문에 CE를 쓰는것이다
참고로, KL-divergence는차이일 수는 있지만,거리는 아니다. 왜냐하면 A에서부터 B까지 의 거리를 잰다고했을 때, A부터 B까지의 거리는 B부터 A까지와의 거리와 같아야하는데, KLD는 그렇지 않다. 딱봐도...
KL(P∥Q)=∑xP(x)logP(x)Q(x)≠∑xQ(x)logQ(x)P(x)=KL(Q∥P)
KL과 유사한데, 대칭성이 있어 거리로 사용할 수 있는 Divergence가 있는데, 그게 바로 JSD이다. 이건 추후 포스팅에서 다루겠다.
Reference
#4.0. 정보량을 나타내는 엔트로피 (Entropy)
엔트로피(Entropy)와 크로스 엔트로피(Cross-Entropy)의 쉬운 개념 설명
Wolfram|Alpha: Making the world's knowledge computable
[딥 러닝] 4강. 정보이론 기초, Cross-entropy와 KL-divergence
notion은 tistory와 연동이 안된다 ㅠㅠ
망했다. 연동이 제대로안되네. 수정하기도 함들고
https://www.notion.so/Cross-Entropy-5f028e1291744e50b8b91644105807be
실제 수정이나, 변경사항은 여기에 남기도록 하겠습니다.
수정 내역
- (2021-03-30) KLD 수식 전개 과정에서 P(x) Q(x)를 바꿔쓴 것 수정
- (2021-04-03) BCE 섹션추가
- (2024-03-17) KLD 수식 전개 과정에서 CE-E를 E-CE로 풀이한 것을 수정
'ML > 기초 이론' 카테고리의 다른 글
Batch Normalization을 제대로 이해해보자 (0) | 2021.03.13 |
---|