Loading [MathJax]/jax/output/CommonHTML/jax.js

 

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의 사건 xp(x)I(x)의 길이로 인코딩 하는 것이 기대값을 최소로 만들 수 있음을 보였다. (고한다) 이 때의 확률 변수 X의 기대값을엔트로피라고한다.

이 경우에는 그렇게 인코딩해야 최적의 길이(가장 짧은 길이의 바이트로)로 정보를 전달할 수 있다는 것이고, 그 길이가엔트로피다.

여기서 기대값 E[X] 란, 위키피디아의 힘을 빌어서

확률론에서, 확률 변수의 기댓값(期待값, 영어: expected value)은 각 사건이 벌어졌을 때의 이득과 그 사건이 벌어질 확률을 곱한 것을 전체 사건에 대해 합한 값이다. 이것은 어떤 확률적 사건에 대한 평균의 의미로 생각할 수 있다.

E[X]=ixiP(xi)

로 나타낼 수 있다. 기대값에 대한 식은위키피디아에 가면 계산하는 방식을 찾아볼 수 있다.

즉, 각 사건의 벌어졌을 때의 이득(xi)은? 바로 정보량(I(x))이다. 그럼 바로 정의가 나와버리지.

어떤 확률 변수 X가 특정 확률 분포 P(X)를 따를 때,엔트로피H(P)

H(P)=H(x)=EXP[I(x)]=EXP[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)=EXP[I(x)]=EXP[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) 라고 한다면 뒷면이 나올 확률은 1P(x)가 된다.

반면, 앞면이 나올 것으로 예측한 확률 Q(x)라고 한다면 뒷면이 나올 것이라고 예측한 확률은 1Q(x)가 된다.

이걸 정리해보자면

CE(P,Q)=xP(x)logQ(x)

BCE(P,Q)=(P(x)logQ(x)+(1P(x))log(1Q(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(PQ) 로 표기한다.

KL(PQ)=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(PQ) 값이 0이 되고, 이것이 바로 최소가 된다.

사족

그런데 잘 생각해보면, binary classification에서 KL-divergence를 쓰지 않고 CE에 대해서만 최적화 해주는 것을 볼 수 있다. 그건 왜그러할까?

사실 쉬운 문젠데, 우리가 최적화하고 싶은 값은 바로 Q(x)이다. 즉 Q입장에서 보면 P는 상수다. 따라서 CE에 대해서만 최적화해주면 되기때문에 CE를 쓰는것이다

참고로, KL-divergence는차이일 수는 있지만,거리는 아니다. 왜냐하면 A에서부터 B까지 의 거리를 잰다고했을 때, A부터 B까지의 거리는 B부터 A까지와의 거리와 같아야하는데, KLD는 그렇지 않다. 딱봐도...

KL(PQ)=xP(x)logP(x)Q(x)xQ(x)logQ(x)P(x)=KL(QP)

KL과 유사한데, 대칭성이 있어 거리로 사용할 수 있는 Divergence가 있는데, 그게 바로 JSD이다. 이건 추후 포스팅에서 다루겠다.

Reference

#4.0. 정보량을 나타내는 엔트로피 (Entropy)

엔트로피(Entropy)와 크로스 엔트로피(Cross-Entropy)의 쉬운 개념 설명

정보 엔트로피

정보이론 기초

왜 크로스 엔트로피를 쓸까?

Wolfram|Alpha: Making the world's knowledge computable

가장 쉬운 KL Divergence 완전정복!

[딥 러닝] 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

+ Recent posts