###### tags: `ML數學分部`
{%hackmd @kk6333/theme-sty1 %}
# JS Divergence
在之前 "[KL Divergence & CrossEntrophy 的真面目](https://hackmd.io/PjUEbxbeSA2qNbRupRzYMw?view)"中提過了 KL Divergence
也有講到 KL Divergence 有**非對稱**的性質,
也就是 $D_{KL}(P||Q) \neq D_{KL}(Q||P)$
這時就出現了 JS Divergence 來解決此非對稱性
<br>
## 1. JS Divergence 推導
JS Divergence 的想法非常簡單,如果 $(P||Q)$ 的差距和 $(Q||P)$ 差距不同
那我們找出一個平均點,個別計算與 $(P||Q)$、$(Q||P)$ 的距離相加不就對稱了
> 設 M 為 $(P||Q)$、$(Q||P)$ 的平均分佈
>
> $M=\frac{1}{2}(P+Q)$
>
> 並分別計算 M 與 P、Q 的差距 ( KL Divergence ) 做平均
> 就為 JS Divergence
>
> $JSD(P||Q)=\frac{1}{2}D_{KL}(P||M)+\frac{1}{2}D_{KL}(Q||M)$
>
> 且 $JSD(P||Q)=JSD(Q||P)$
所以利用 JS Divergence 解決了非對稱的問題
:::warning
$JSD(P||Q)=JSD(Q||P)=\frac{1}{2}D_{KL}(P||M)+\frac{1}{2}D_{KL}(Q||M)$
:::
---
<br>
## 2. JS Divergence 的問題
JS Divergence 常被用在 GAN 計算生成的 Data 與實際 Data 間的差距
但卻有一大問題,這問題也讓 GAN 很難 Train 成功
=> 就是在 P、Q 兩分佈沒有重疊時,JS Divergence 恆為 log2
導致無法測量出兩 Distribution 間的差距
**推導**
> $JSD(P||Q)=\frac{1}{2}D_{KL}(P||M)+\frac{1}{2}D_{KL}(Q||M)$
>
> 將 M 帶入 KL Divergence
>
> $JSD(P||Q)=\frac{1}{2}\sum{P(x)log(\frac{P(x)}{\frac{1}{2}(P+Q)})}+\frac{1}{2}\sum{Q(x)log(\frac{Q(x)}{\frac{1}{2}(P+Q)})}$
>
> 將 log 中分母的 $\frac{1}{2}$ 取出 ( 先變分母,在分離 log )
>
> $JSD(P||Q)=\frac{1}{2}\sum{P(x)log(\frac{P(x)}{P+Q})}+\frac{1}{2}\sum{Q(x)log(\frac{Q(x)}{P+Q})}+log{2}$
>
> 如果在 P、Q 兩分佈沒有重疊時,假如以 Q 來觀察,那 P 則會為 0
> 並將 0 帶入 JS Divergence
>
> $JSD(P||Q)=0+0+log{2}=log{2}$
<br>
在真實 data 分佈上其實是很難有重疊的
可以把 data 看成是"高維向量中的低維向量" ( ex: 三維空間中的平面 )
所以很容易就會不重疊

更不用說上百維度的空間了 ~
---
<br>
## Reference
- [理解JS散度(Jensen–Shannon divergence)](https://blog.csdn.net/weixin_44441131/article/details/105878383)
- [GAN Lecture 6 (2018): WGAN, EBGAN](https://www.youtube.com/watch?v=3JP-xuBJsyc)