관리 메뉴

Data Analysis for Investment & Control

Cross Entropy 본문

MachineLearning

Cross Entropy

Jeongseob.Kim 2018. 9. 14. 22:41



정보이론에서 같은 잠재적인 이벤트의 세트를 가지는 두 개의 확률 분포 p와 q의 cross entropy는 세트로부터 이벤트를 구분하는데 필요한 비트의 평균을 측정한다... 라고 위키에 나와있다.


여기서 두 가지를 알 수 있는데, 하나는 두 개의 확률 분포를 구분하기 위한 목적으로 사용되는 것이고 다른 하나는 이것을 측정하는 것이라는 것이다. 확률 분포는 변수(x)가 주어질 때 해당 변수의 값에서 이벤트가 발생할 확률을 분포로 나타낸 것이다. 


예를 들어 x = {1, 2, ..., 10}의 10개의 값을 가지는 집합이라고 할 때, N번의 카운트에서 x = 1이 될 빈도수, x = 2가 될 빈도수, ... 를 계속 측정한다. 그러면 1 <= x <= 10 사이의 값에 따른 빈도수가 어떠한 분포를 그리게 되는데, 확률 분포 p와 q가 같은 범위의 x 값을 갖는다고 할 때 이 둘이 얼마나 다른지를 측정하는 것이다.


실제로 어떠한 일이 일어날 진짜(true) 확률 분포가 있고, 이를 정확하게 알고 싶어 이 확률 분포를 예측하기 위해 만들어낸 확률 분포 q가 있다고 하자. 수식적인 의미로 p와 q의 cross entropy는 true인 확률 분포 p의 entropy H(p)에 p와 추정 확률 분포 q의 상대적인 차이를 계산하는 KL Divergence의 값을 더해 구한다. (KL Divergence는 위키 참조)





Discrete 환경에서는 


가 된다.


Classification 제에 있서 true인 확률은 1이 되는 것은 당연하고(주어진 데이터로부터 오류 없이 구분할 수 있어야 하기 때문에 100%의 확률을 가져야 하기 때문), 우리가 최적화 시켜줘야 하는 모델인 q가 p와의 차이를 없애는 방향으로 확률 분포를 업데이트 시켜줘야 한다는 의미이다.




close all;
clear all;
clc;

x1 = 0.01:0.01:0.99;
x2 = 1 - x1;

h_x1 = -log(x1);
h_x2 = -log(x2);
N = length(x1);

for i=1:N
  h(i) = x1(i) * h_x1(i) + x2(i) * h_x2(i);
end

figure(1);
plot(x1, h_x1, x1, h_x2, x1, h); 
grid on;
legend('E[-logP(x)]', 'E[-logP(1-x)]', 'x*-logP(x)+(1-x)*-logP(x)');


Entropy of x and (1-x)


Entropy가 0이 된다는 말은 그 만큼 구분이 명확하여 '혼잡도'가 없다는 의미가 된다. 


위의 구현된 코드와 그래프를 보면 두 개의 클래스로 구분하는 문제를 나타낸다. 첫 번째 클래스가 x가 일어날 확률을 의미하고 이 값이 0이라면 다른 클래스로 분류될 확률은은 (1-x) = (1-0) = 1이 된다. 즉, 두 번째 클래스로 분류되는 것이 '분명한' 상태가 되므로 이럴 경우 혼잡함이 없다. 그러나 x가 일어날 활률이 0.5라면 두 클래스 중에 어떤 것으로 구분될지 헷깔리는 상태가 되기 때문에 '혼잡도'는 증가를 하게 되고 이럴 때 측정되는 엔트로피는 다음과 같다.





위의 그래프에서 노란색 곡선의 변곡점이 된다. 이것은 클래스 구분이 가장 어려운 상태가 된다는 의미이다.


따라서 Deep Learning에서 분류 문제를 다룰 때, Cross Entropy를 minimize하는 방향으로 Loss Function을 설계하게 된다. 







      
0 Comments
댓글쓰기 폼