###### tags: `ML數學分部` {%hackmd @kk6333/theme-sty1 %} # KL Divergence & CrossEntrophy 的真面目 :warning: 本文是看過眾多教學後,覺得最好理解的版本,如果有不嚴謹的地方歡迎指教 ~ --- 很多 ML 初學者(Me) 一定都有聽過 CrossEntrophy ,甚至知道他的計算原理 這邊有我看過的一篇文章講的還蠻好理解的 - ["文章連結"](https://r23456999.medium.com/%E4%BD%95%E8%AC%82-cross-entropy-%E4%BA%A4%E5%8F%89%E7%86%B5-b6d4cef9189d) 但本文想從另一個角度 KL Divergence 切回 CrossEntrophy 這樣可以更直觀看待 loss 的意義,且 Divergence 一詞在 GAN 也會常看到 (我也是遇到了才知道...) 先簡單提一下, Divergence 可以被看作是一種機率分布的"差異", KL Divergence 則是最基礎的 Divergence CrossEntrophy 其實就是 KL Divergence 的變形。 <br> ## 1. KL Divergence 這邊用一個簡單的例子來說明 KL Divergence :::warning example - 有兩硬幣,出現正反面的機率各不相同 - coin-1 : (H)正面機率 = $p_1$ 、(T)負面機率 = $p_2$ - coin-2 : (H)正面機率 = $q_1$ 、(T)負面機率 = $q_2$ ::: **Step1.** > 假設今天連續丟好幾次硬幣的情況是 (正,正,反,反) 機率如下 (Observation 為某種情況) > - coin-1 : $P( Observation|coin1 ) = p_1*p_1*p_2*p_2$ > - coin-2 : $P( Observation|coin2 ) = q_1*q_1*q_2*q_2$ **Step2.** > 所以我們推導出在某種 Observation $P$ 可以寫成以下式 > 並且我們可以 Observation 就是丟出某種硬幣情況的"**機率分布 Distribution**" > > - coin-1 : $P( Observation|coin1 ) = p_1^{N_H}*p_2^{N_T}$ > - coin-2 : $P( Observation|coin2 ) = q_1^{N_H}*q_2^{N_T}$ > > ( $N$ : 丟的次數、$N_H$ : 正面次數、$N_T$ : 負面次數 ) **Step3.** > 之後計算兩個 Distribution 的比例 (Observation 簡稱 Obs) > > $\frac{P( Obs|coin1 )}{P( Obs|coin2 )}=\frac{p_1^{N_H}*p_2^{N_T}}{q_1^{N_H}*q_2^{N_T}}$ **Step4.** > 將此比例正規化 ( 開根號 ),並取 log ( 比例是不變的所以可以這樣操作 ) > > $log( \frac{p_1^{N_H}*p_2^{N_T}}{q_1^{N_H}*q_2^{N_T}} )^{\frac{1}{N}}$ > > 提出 $\frac{1}{N}$ 並拆解 log > > $\frac{N_H}{N}log(p_1) + \frac{N_T}{N}log(p_2) - \frac{N_H}{N}log(q_1) - \frac{N_T}{N}log(q_2)$ **Step5. 算出 KL Divergence** > 現在我們以 coin-1 作為觀察(observe)到的對象 ( 真實分布 ), > coin-2 則是根據機率得出的分布 ( 理論分布 ) > 會符合以下關係 ( 就是 coin-1 正反面出現機率 ) > > $\frac{N_H}{N}=p_1$、$\frac{N_T}{N}=p_2$ > > 有了此關係就可以改寫 Step4 的式子 > > $p_1log(p_1) + p_2log(p_2) - p_1log(q_1) - p_2log(q_2)$ > > 再整理一下可得 > > $p_1log( \frac{p_1}{q_1} ) + p_2log(\frac{p_2}{q_2}) = D_{KL}( P || Q )$ > > 這個就是在 Coin-1 為觀察對象的 KL Divergence **Step6. Summary** > 在其他狀況中會有更多不同分布,寫成 > > $D_{KL}( P || Q )=\sum_i{P(i)log(\frac{P(i)}{Q(i)})}$ > > KL Divergence 真正的意義就是兩機率分布的比例 (Step3) > 我們可以稱這個比例為 "距離" > 當兩 Distribution 相同時 $D_{KL}$ 會為 0 > 而差距越大 $D_{KL}$ 會越大 > > **特性** : > - 不對稱性 : 如果今天觀察對象調換,$D_{KL}(Q||P) \neq D_{KL}(P||Q)$ > :::info **KL-Divergence 公式** $$D_{KL}( P || Q )=\sum_i{P(i)log(\frac{P(i)}{Q(i)})}$$ :::  --- <br> ## 2. CrossEntrophy 剛剛講完 KL Divergence,我們知道可以用來量測兩機率分佈的"差異性" CrossEntrophy 更直觀的把他用在計算"**實際資料**"與"**預測資料**"分佈的差異上 > 設 Data 的分佈如下 > - 實際資料 ( label ) 分佈 : $P^* (y|x_i)$ > - 預測資料分佈 : $P (y|x_i;\theta)$ > > ( $x_i$ : input、 $\theta$ : model 參數 ) 接著要計算 Data 間的差異,也就是 KL Divergence > $D_{KL}(P^* || P)=\sum_i{P^*log(\frac{P^*}{P})}$ > > 化減 > > $D_{KL}(P^* || P)=\sum_i{P^*log(P^*)} - \sum_i{P^*log(P)}$ > > 這就是預測與實際 y 的差距 因為我們之後會想要所小差距,使預測更接近實際結果 所以任務會是最小化 $D_{KL}$ > 任務寫成此式 > > $min ( \sum_i{P^*log(P^*)} - \sum_i{P^*log(P)} )$ > > 但 $\sum_i{P^*log(P^*)}$ 是實際資料產生的,無法做變動 ( 只能變動 model 參數 ) > 所以可將任務縮減 > > $min (- \sum_i{P^*log(P)})$ **Summary** > 所以 CrossEntrophy 寫成如下 > > $CrossEntrophy = - \sum_i{P^*log(P)}$ > > 目的就是要縮小預測與實際結果差距 ! :::info **Cross Entrophy 公式** $$CrossEntrophy = - \sum_i{P^*log(P)}$$ > - 實際資料分佈 : $P^*$ > - 預測資料分佈 : $P$ ::: --- <br> ## 3. CrossEntrophy & Softmax 關係 在知道 CrossEntrophy 與 KL Divergence 後, 可以很簡單就理解為什麼 CrossEntrophy 前都要用 Softmax 了 > 因為要計算 CrossEntrophy 我們公式中式要求"機率分布" > 而 Softmax 剛好就能使輸出的分類 y 轉為機率 > 將值保留在 [0-1],且 p 總合為 1 > > 補充 : 在還沒轉為機率前的 y 我們習慣叫他 logits ! --- <br> ## 4. Reference - [Intuitively Understanding the KL Divergence](https://www.youtube.com/watch?v=SxGYPqCgJWM) - [Intuitively Understanding the Cross Entropy Loss](https://www.youtube.com/watch?v=Pwgpl9mKars) - [相對熵-維基百科](https://zh.wikipedia.org/wiki/%E7%9B%B8%E5%AF%B9%E7%86%B5) - [何謂 Cross-Entropy (交叉熵)](https://r23456999.medium.com/%E4%BD%95%E8%AC%82-cross-entropy-%E4%BA%A4%E5%8F%89%E7%86%B5-b6d4cef9189d) - [剖析深度學習:你知道Cross Entropy和KL Divergence代表什麼意義嗎?](https://www.ycc.idv.tw/deep-dl_2.html)
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up