Re: [問題] GAN 實作以及loss function的問題
※ 引述《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
推
09/29 23:21,
4年前
, 1F
09/29 23:21, 1F
推
10/01 02:32,
4年前
, 2F
10/01 02:32, 2F
→
10/01 02:33,
4年前
, 3F
10/01 02:33, 3F
→
10/01 02:34,
4年前
, 4F
10/01 02:34, 4F
→
10/01 02:34,
4年前
, 5F
10/01 02:34, 5F
→
10/05 00:38,
4年前
, 6F
10/05 00:38, 6F
推
10/11 19:43,
4年前
, 7F
10/11 19:43, 7F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
DataScience 近期熱門文章
PTT數位生活區 即時熱門文章