[爆卦]pytorch gan實作是什麼?優點缺點精華區懶人包

為什麼這篇pytorch gan實作鄉民發文收入到精華區:因為在pytorch gan實作這個討論話題中,有許多相關的文章在討論,這篇最有參考價值!作者janus7799 (Janus逍遙)看板DataScience標題Re: [問題] GAN 實...


※ 引述《eggy1018 (羅密歐與豬過夜)》之銘言:
: 各位Data Science 版的大大們好,最近在深入研究GAN時,對於他的loss function的

: 解以及實作上仍存有疑惑。
: 問題點
: 最初開始推導的loss function 如下圖
: https://i.imgur.com/cafOjej.jpg
: 意思是G, D min max這個function吧?換句話說是同個loss funcion?
: 可是....
: 在實作上G, D的loss function卻不太一樣
: Generator loss function
: https://i.imgur.com/tNVfz6s.jpg
: Discriminator loss function
: https://i.imgur.com/4pzT6Hh.jpg
: 在自己以前學習的認知中,D要max上圖的Lisa function, G要min之,,所以我以為可

: 是同個loss function但是一個是正的一個是負的,然而實作上的方式卻跟數學意義上

: 太一樣...
: 希望各位版友能給我一點意見,真的卡了很久,謝謝大家!



剛好對GAN有些許了解,在這邊分享一下個人看法。

不常在PTT發文,希望排版不會太難看。



首先,GAN的發展非常快速,以下皆基於原始的GAN(Goodfellow et al. in NIPS 2014)討
論。


先回答原Po的問題:為什麼原Po貼的程式碼(應該是PyTorch-GAN)中,generator與discri
minator實作是這樣寫?

參考下圖GAN的objective function V,以gradient decent來說,一般GAN實作的loss fu
nction確實是只差一個負號:discriminator為-V,generator為V。至於程式碼上為什麼
好像不只是差一個負號是因為V的其中一部分generator根本不需要考慮,也就是真實的觀
測資料部分,就算寫進loss function,對generator來說也是屬於常數,偏微分後會消去
,因此在寫code時一般直接省略。

https://i.imgur.com/EtDkvLi.jpg

在原Po貼的程式碼中,先不管那個auxiliary_loss,discriminator在adversarial_loss
計算了兩次:一次計算真實資料與正類標籤(code中的valid)的binary cross entropy (
以下簡稱BCE),一次計算生成資料與副類標籤(code中的fake)的BCE。而generator只計算
生成資料與「正類標籤」的BCE。




以實作上來說,generator與discriminator的loss好像是差一個負號的事情。但以理論上
兩者的目標卻不是僅僅是差一個負號這麼單純。要說到generator與discriminator的目標
,那就不得不談一下GAN到底解決的什麼問題。

回顧一下所謂的generative model。在機率統計理論中, 生成模型(generative model)是
指能夠隨機生成觀測數據的模型。所以訓練一個generative model其實就是希望模型輸出
與觀測數據的分布越接近越好,或者說minimize這兩者之間的divergence。

如果說我們的generative model是一個簡單的model,比如說Gaussian mixture model,
那麼算個divergence,比如說JS divergence,就是一件不難的事情。但如果今天generat
ive model是一個neural network,那就有點困難了。

而這就是GAN厲害的地方,GAN很聰明地使用到了經過訓練的分類器其實可以一定程度第代
表資料的divergence這件事,用實質為分類器的discriminator估divergence,並以此訓
練generator。

所以實際上也不能說discriminator在minimize BCE而generator在maximize BCE,而是di
scriminator在minimize BCE,而generator在maximize discriminator可以找到的最小BC
E。

https://i.imgur.com/9IpLHvy.jpg

為了盡量逼近這個目標,GAN一般採用交互訓練的方法,先訓練discriminator數次,在訓
練generator一次,如此重複直到訓練結束。

https://i.imgur.com/YCtPw4T.jpg

附帶一提,Goodfellow在2014年的論文中discriminator與generator的loss也不只是差一
個負號,不過其實照他的方法或是直接加負號都是可以訓練的。

---

以上拋磚引玉提供一點粗淺見解。
希望有幫助,也歡迎一起討論。


關於一些GAN的細節可以參考這篇文章
https://tinyurl.com/y4l2q5vf

或是李宏毅老師的這段投影片
https://youtu.be/DMA4MrNieWo

--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 123.194.88.184 (臺灣)
※ 文章網址: https://www.ptt.cc/bbs/DataScience/M.1601307471.A.C6F.html
※ 編輯: janus7799 (123.194.88.184 臺灣), 09/29/2020 01:20:57
jasoncph: 推 09/29 23:21
wtchen: discriminator的目標是減少分類損失(不是真陽就是真陰) 10/01 02:32
wtchen: 但generator只希望增加偽陽,讓discriminator接受 10/01 02:33
wtchen: 自己生成的假樣本,至於discriminator對於真樣本的鑑別度 10/01 02:34
wtchen: generator是不在乎的 10/01 02:34
hippo130: 推 10/05 00:38
jason2718: 真詳細,推推 10/11 19:43

你可能也想看看

搜尋相關網站