GAN原始Loss解讀

轉載自:https://www.cnblogs.com/walter-xh/p/10051634.html

  GAN的原始損失函數,咋一看是非常難以理解的,但仔細理解後就會發現其簡潔性和豐富的含義。

  損失函數定義:

    

  一切損失計算都是在D(判別器)輸出處產生的,而D的輸出一般是fake/true的判斷,所以整體上採用的是二進制交叉熵函數。

  左邊包含兩部分minG和maxD。

  首先看一下maxD部分,因爲訓練一般是先保持G(生成器)不變訓練D的。D的訓練目標是正確區分fake/true,如果我們以1/0代表true/fake,則對第一項E因爲輸入採樣自真實數據所以我們期望D(x)趨近於1,也就是第一項更大。同理第二項E輸入採樣自G生成數據,所以我們期望D(G(z))趨近於0更好,也就是說第二項又是更大。所以是這一部分是期望訓練使得整體更大了,也就是maxD的含義了。

  第二部分保持D不變,訓練G,這個時候只有第二項E有用了,關鍵來了,因爲我們要迷惑D,所以這時將label設置爲1(我們知道是fake,所以才叫迷惑),希望D(G(z))輸出接近於1更好,也就是這一項越小越好,這就是minG。當然判別器哪有這麼好糊弄,所以這個時候判別器就會產生比較大的誤差,誤差會更新G,那麼G就會變得更好了,這次沒有騙過你,只能下次更努力了。

  大概就是這樣一個博弈過程了。自娛自樂,高手刷到請略過。

  代碼參考:50行代碼實現GAN-pytorch

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章