엔트로피 KL divergence 복습

개시하다


요즘 베스 추론을 배우고 있어요.
베이스 학습, 엔트로피, KL divergence 등의 이해는 피할 수 없다.
지금까지는 이해가 가는 것 같았지만, 변분추론 근처에서"?대량으로 발생하다.
엔트로피와 KL divergence를 복습해야 한다고 생각해 내용을 정리하기로 했다.
이 글에서 우리의 목표는 공식적인 도출보다 대략적인'뜻'을 이해하는 것이다.

엔트로피


확률 분포의 복잡도(예측하기 어렵다)를 나타내는 값.
다음 공식에 따라 계산한다.
{\rm H}[p(x)]=-p(x)\ln p(x)
'일반 주사위'와'육면체가 뒤틀린 주사위'를 비교하면 일반 주사위에 어떤 눈이 나올지 예측하기 어렵다.(일반 주사위의 엔트로피는 더 높다.)python에서 scipy를 사용하여 엔트로피를 간단하게 계산할 수 있다.
・이산 확률 분포
from scipy.stats import multinomial

multinomial.entropy(n=1, p=[1 / 6.] * 6)  # 1.79175946923
multinomial.entropy(n=1, p=[0.4, 0.3, 0.1, 0.1, 0.05, 0.05])  # 1.48779838
위의 일반 주사위의 엔트로피가 더 높다는 것을 알 수 있다.
・연속 확률 분포
고스의 분포 상황도 마찬가지다.
아래와 같은'평균치가 같고 분포가 다르다'.

수치가'예측하기 어렵다'는 관점에서 비교하면 분산이 큰 분포(주황색의 분포)는 예측하기 어렵다.
따라서 고스가 분포하는 상황에서 분산의 크기는 엔트로피와 비례한다.
이것도 python로 써 보세요.
from scipy.stats import norm

print norm.entropy(loc=0.0, scale=1.0)  # 1.4189385332
print norm.entropy(loc=0.0, scale=2.0)  # 2.11208571376
분산이 비교적 큰 분포가 엔트로피를 높일 수 있음을 확인할 수 있다.

교차 엔트로피


KL divergence를 이해하기 위해서도 교차엔트로피를 사전에 알아야 한다.
교차 엔트로피는 다음과 같은 공식에 의해 정의된다.
H(p,q)=-q(x)\ln p(x)
교차 엔트로피는 두 확률 분포 사이에 정의된 도량으로 사용된다.
정보량 기준의 설명에서 비트 계산의 예를 사용하여 설명한다.
Wikipedia에도 다음과 같은 설명이 있다.
인코딩 방안은 실제 확률 분포 p(x)가 아니라 예정된 확률 분포 q(x)를 바탕으로 할 때 가능한 여러 이벤트에서 하나의 이벤트를 지정하는 데 필요한 비트의 평균값을 나타낸다.
이것을 읽고 지금은 한 번도 쓰지 않았어요.
이렇게 변분 추론을 배워도 왠지 모르겠다.
그래서 조금 깊이 들어갔어요.
간단한 예로 생각해 보자.
벨누이 분포에 따라 두 확률로 $p(x), q(x)$분포를 고려합니다.
관측 데이터에 근거하여 모델은 $q(x)달러의 매개 변수 $\mu=0.7달러를 추정했다.
우선, 이런 상황에서 엔트로피는 다음과 같다.
\begin{align}
{\rm H}[q(x)] &=-\sum_xq(x)\ln q(x)\\
&=-\{(0.7\times\ln (0.7))+(0.3\times\ln (0.3))\}\\
&=0.61086\cdots
\end{align}
실제 확률 분포 $p(x)달러의 매개 변수도 $\mu=0.7달러입니다.
하면, 만약, 만약...
\begin{align}
H(p,q)&=-\sum_xq(x)\ln p(x)\\
&=-\{(0.7\times\ln (0.7))+(0.3\times\ln (0.3))\}\\
&=0.61086\cdots
\end{align}
엔트로피 = 교차 엔트로피.
그러면 실제 확률로 $p(x)달러를 분포하는 매개 변수가 $\mu=0.5달러라고 가정합니다.
하면, 만약, 만약...
\begin{align}
H(p,q)&=-\sum_xq(x)\ln p(x)\\
&=-\{(0.7\times\ln (0.5))+(0.3\times\ln (0.5))\}\\
&=0.69314\cdots
\end{align}
이렇게 하면 수치가 약간 커진다.
그렇다면 진정한 확률로 $p(x)달러를 분포하는 매개 변수는 $\mu=0.3달러인 경우는 어떻습니까?
교차 엔트로피
\begin{align}
H(p,q)&=-\sum_xq(x)\ln p(x)\\
&=-\{(0.7\times\ln (0.3))+(0.3\times\ln (0.7))\}\\
&=0.94978\cdots
\end{align}
더 커졌어.
계산해 보면'$q(x)$=$p(x)달러, 교차엔트로피 최소(=엔트로피)'라는 것을 알 수 있다.
교차 엔트로피가 클수록
교차 엔트로피도'진짜 확률로 $p(x)$를 분포한다고 가정하면 생성된 관측 데이터의 분포($q(x)$)를 예측하기 어렵다'고 할 수 있습니까?
진정한 분포와 관측 데이터의 분포가 일치하는 상황에서 교차 엔트로피는'원시 확률 분포가 가지고 있는 예측하기 어려운 (엔트로피)'일 뿐이다.그러나 진정한 분포와 관측 데이터의 분포가 일치하지 않는 상황에서 엔트로피를 제외하고는'분포가 잘못된 부분'만 예측하기 어렵다.
잘 모르는 표현일 수도 있지만, 나는 이것이 교차 엔트로피의 뜻이라고 생각한다.

KL divergence


두 확률의 분포를 측정하는'차이'의 척도로 삼다.
정부측은 아래와 같다.
\begin{align}
{\rm KL}[q(x)||p(x)] &= q(x)\ln\frac{p(x)}{q(x)}\\
&=q(x)\ln p(x) - q(x)\ln q(x)
\end{align}
크로스 엔트로피만 알면 KL divergence는'크로스 엔트로피'만 계산합니다.
이 뺄셈은 무엇을 의미하는가.
엔트로피와 교차 엔트로피의 설명을 복습하다.
  • 엔트로피-확률분포의 난예측성
  • 교차엔트로피...확률분포로 생성된 또 다른 확률분포를 가정하는 예측난이도
  • 인용을 통해'어떤 확률 분포의 예측하기 어려운 것'을 줄이고'어떤 확률 분포와 다른 확률 분포의 편차'를 얻을 수 있다.(말로 설명하면 더 이해하기 어려울 것 같은데...)
    그리고 항상'교차 엔트로피≥엔트로피'이기 때문에 KL divergence는 반드시 비음값이다.
    마지막으로 python로 이걸 구해 보세요.
    ・이산 확률 분포
    from scipy.stats import norm, entropy
    
    p = 0.5
    q = 0.7
    
    slf_ent = -1 * (q * np.log(q) + (1 - q) * np.log(1 - q))
    crs_ent = -1 * (q * np.log(p) + (1 - q) * np.log(1 - p))
    print slf_ent  # 0.610864302055
    print crs_ent  # 0.69314718056
    print crs_ent - slf_ent  # 0.0822828785051
    print entropy([q, 1 - q], [p, 1 - p])  # 0.0822828785051
    
    ・연속 확률 분포
    from scipy.stats import norm, entropy
    
    x = np.linspace(-5, 5, 500)
    p = norm.pdf(x, loc=0, scale=1.0)
    q = norm.pdf(x, loc=1.0, scale=1.0)
    print entropy(p, q)  # 0.499970194448
    
    그게 다야.
    다음에 나는 이번에 배운 것을 바탕으로 변분만에 관한 일을 정리하고 싶다.

    좋은 웹페이지 즐겨찾기