深度學習 lab14_2 WGAN學習筆記(KL JS divergence, improved WGAN)
Concept
KL JS divergence
https://www.cnblogs.com/smuxiaolei/p/7400923.html
https://www.bilibili.com/video/av19193502?from=search&seid=15708729020988943650
kl divergence
使用entropy公式計算
(1)以八種天氣情況作為例子,這張圖是ground truth , entropy是2.23
(2) bits 數不同
(3)預測的結果 的 entropy 是4.58
如果 q == p(ground truth)兩分佈相同,cross entropy = entropy,KL divergence ==0。
如果q!=p(ground truth),cross entropy = entropy + KL divergence, 所以 KL divergence 必大於0。
其中 h(p) 在圖二,圖二是真正分佈。
js divergence
-
JS散度是利用KL散度來得到的。JS是對稱的而且值是有界的[0,1].
-
JS散度解決了KL不對稱的問題,JS是對稱的。
很明顯,如果P1,P2完全相同,那麼JS =0, 如果完全不相同,那麼就是1.
但是KL和JS散度來度量時候有一個問題:
如果兩個分配P,Q離得很遠,完全沒有重疊的時候,那麼KL值是沒有意義的,而JS值是一個常數。這在學習演算法中是比較致命的,這就意味這這一點的梯度為0。梯度消失了。
WGAN
- Pdata : real data 的分佈
- PG : generator 生出來的 data 的分佈
要max 這個 object function,有毛病,如字幕。
所以需要一個平滑函式, 1-lipschitz
- Ex~pdata
- x 指 從 real data 分佈中的 data。
1-lipschitz
weight clipping
improved WGAN
在第三部加上 後面的 浪打 項, 有點像是regularization
做不到,因為D(x) 的x是所有的data。所有的imgae 太多,不管在train還是幹嘛的都做不到,所以 只拿 Pdata 和 Pg 之間的 penalty出來,即
x~penalty(noun. 處罰,罰款,沒見過的單詞,查了一下方便背誦) 指 Pdata 和 Pg 分佈之間,隨機取一點出來,因此有了以上藍色區域。
- 實作的時候,實際做法如下,因為論文寫道 操作起來 梯度 越接近一越好,所以 替換掉
implement(WGAN-GP)
加 WGAN weight clip 的話,浪打項裡 使用的 (梯度-1) 的平方,效果驚人的差,換成 relu勉勉強強好一點(relu相當於 max,因為relu本書是max(x,0) ),但是也不能看。
所以再實作的時候,記得把 WGAN的weight clip去掉