[딥러닝] KL (Kullback-Leibler) divergence (KL 발산) 미분



[딥러닝] KL divergence (KL 발산) 미분

$\mathbf{x}$가 $K$ dimension 을 갖는 벡터라고 합시다. 그리고 $p(\mathbf{x}),q(\mathbf{x})$는 확률밀도함수 (pmf, probability mass function)입니다. $p(\mathbf{x}), q(\mathbf{x})$ 또한 $\mathbf{x}$와 동일한 차원을 갖는 $K$ dimension vector 입니다. KL divergence 란 $p$와 $q$의 차이를 보는 수치입니다. 딥러닝에서 주로 $p$를 true 분포라고 하고 이 $p$의 추정치를 $q$라고 할때 $p$와 $q$가 얼마나 가까운지를 보는 수치입니다.

KL divergence: 하나의 샘플에 대하여

하나의 샘플 $\mathbf{x}$에 대한 KL divergence 는 아래와 같이 정의됩니다.$$KL(p,q) = – \sum_{i=1}^K p(\mathbf{x})_i \log q(\mathbf{x})_i+ \sum_{i=1}^K p(\mathbf{x})_i \log p(\mathbf{x})_i$$

이 $KL(p,q)$의 미분을 구해보도록 하겠습니다. 앞서 말씀 드렸듯이 $p$는 고정이고 $q$가 추정치이기 때문에 $q$에 대해서만 미분을 하겠습니다. 미분자체는 쉬워요. 만약에 $q(\mathbf{x})_j$에 대해 미분한다면 각각의 term 중에서 $j$번째 항에 대해서만 미분이 되겠습니다. 그리고 $q(\mathbf{x})_j$에 대해서만 관련있는 텀만 미분이 됩니다.

KL divergence: 하나의 샘플에 대하여 미분

$$\frac{\partial}{\partial q(\mathbf{x})_j} KL(p,q) = – \sum_{i=1}^K p(\mathbf{x})_i \frac{\partial}{\partial q(\mathbf{x})_j} \log q(\mathbf{x})_i+ \frac{\partial}{\partial q(\mathbf{x})_j}\left(\sum_{i=1}^K p(\mathbf{x})_i \log p(\mathbf{x})_i\right)=-\frac{p(\mathbf{x})_j}{q(\mathbf{x})_j}$$
$$\frac{\partial}{\partial q(\mathbf{x})_j} KL(p,q) =-\frac{p(\mathbf{x})_j}{q(\mathbf{x})_j}$$

KL divergence: 여러 샘플에 대하여

하나의 샘플만 있을 때 $q$에 대해 미분을 하면 위와 같이 나오고요. 여러 샘플 $\mathbf{x^l}$이 $B$개 만큼 있다면 KL divergence 는 아래와 같죠.

$$KL(p,q) = -\frac{1}{B} \sum_{l=1}^{B} \sum_{i=1}^K p(\mathbf{x}^l)_i \log q(\mathbf{x}^l)_i+ \frac{1}{B} \sum_{l=1}^B \sum_{i=1}^K p(\mathbf{x}^l)_i \log p(\mathbf{x}^l)_i$$

KL divergence: 여러 샘플에 대하여 미분

미분을 해보겠습니다. 이번엔 $q(\mathbf{x}^l)_i$로 미분할것인데요. 이번에도 관련있는 term 만 미분한다면 아래와 같아지죠.
$$\frac{\partial}{\partial q(\mathbf{x}^l)_j} KL(p,q) =-\frac{1}{B}\frac{p(\mathbf{x^l})_j}{q(\mathbf{x^l})_j}$$
이상으로 KL divergence 미분 정리하였습니다.

Leave a Comment