Re: [問題] GAN 實作以及loss function的問題

看板DataScience作者 (Janus逍遙)時間3年前 (2020/09/28 23:37), 3年前編輯推噓3(304)
留言7則, 4人參與, 3年前最新討論串2/2 (看更多)
※ 引述《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, 3年前 , 1F
09/29 23:21, 1F

10/01 02:32, 3年前 , 2F
discriminator的目標是減少分類損失(不是真陽就是真陰)
10/01 02:32, 2F

10/01 02:33, 3年前 , 3F
但generator只希望增加偽陽,讓discriminator接受
10/01 02:33, 3F

10/01 02:34, 3年前 , 4F
自己生成的假樣本,至於discriminator對於真樣本的鑑別度
10/01 02:34, 4F

10/01 02:34, 3年前 , 5F
generator是不在乎的
10/01 02:34, 5F

10/05 00:38, 3年前 , 6F
10/05 00:38, 6F

10/11 19:43, 3年前 , 7F
真詳細,推推
10/11 19:43, 7F
文章代碼(AID): #1VSWDFnl (DataScience)
文章代碼(AID): #1VSWDFnl (DataScience)