生成對抗網絡入門(GAN)

原文地址:https://blog.csdn.net/on2way/article/details/72773771

GAN中有兩個這樣的博弈者,一個人名字是生成模型(G),另一個人名字是判別模型(D)。他們各自有各自的功能。
在這裏插入圖片描述

必備數據

比如上面的這個圖,我們有的只是真實採集而來的人臉樣本數據集,僅此而已,而且很關鍵的一點是我們連人臉數據集的類標籤都沒有,也就是我們不知道那個人臉對應的是誰。

GAN兩個模型

首先判別模型D,就是圖中右半部分的網絡,直觀來看就是一個簡單的神經網絡結構,輸入就是一副圖像,輸出就是一個概率值,用於判斷真假使用(概率值大於0.5那就是真,小於0.5那就是假),真假也不過是人們定義的概率而已。
其次是生成模型G,生成模型要做什麼呢,同樣也可以看成是一個神經網絡模型,輸入是一組隨機數Z,輸出是一個圖像,不再是一個數值而已。從圖中可以看到,會存在兩個數據集,一個是真實數據集,這好說,另一個是假的數據集,那這個數據集就是有生成網絡造出來的數據集。好了根據這個圖我們再來理解一下GAN的目標是要幹什麼:

D和G模型目的

判別網絡的目的:就是能判別出來屬於的一張圖它是來自真實樣本集還是假樣本集。假如輸入的是真樣本,網絡輸出就接近1,輸入的是假樣本,網絡輸出接近0,那麼很完美,達到了很好判別的目的。
生成網絡的目的:生成網絡是造樣本的,它的目的就是使得自己造樣本的能力儘可能強,強到什麼程度呢,你判別網絡沒法判斷我是真樣本還是假樣本。

模型理解

知道了GAN大概的目的與設計思路,那麼一個很自然的問題來了就是我們該如何用數學方法解決這麼一個對抗問題。這就涉及到如何訓練這樣一個生成對抗網絡模型了,還是先上一個圖,用圖來解釋最直接:
在這裏插入圖片描述
需要注意的是生成模型與對抗模型可以說是完全獨立的兩個模型,好比就是完全獨立的兩個神經網絡模型,他們之間沒有什麼聯繫。

好了那麼訓練這樣的兩個模型的大方法就是:單獨交替迭代訓練。

什麼意思?因爲是2個網絡,不好一起訓練,所以纔去交替迭代訓練,我們一一來看。

假設現在生成網絡模型已經有了(當然可能不是最好的生成網絡),那麼給一堆隨機數組,就會得到一堆假的樣本集(因爲不是最終的生成模型,那麼現在生成網絡可能就處於劣勢,導致生成的樣本就不咋地,可能很容易就被判別網絡判別出來了說這貨是假冒的),但是先不管這個,假設我們現在有了這樣的假樣本集,真樣本集一直都有,現在我們人爲的定義真假樣本集的標籤,因爲我們希望真樣本集的輸出儘可能爲1,假樣本集爲0,很明顯這裏我們就已經默認真樣本集所有的類標籤都爲1,而假樣本集的所有類標籤都爲0.

有人會說,在真樣本集裏面的人臉中,可能張三人臉和李四人臉不一樣呀,對於這個問題我們需要理解的是,我們現在的任務是什麼,我們是想分樣本真假,而不是分真樣本中那個是張三label、那個是李四label。況且我們也知道,原始真樣本的label我們是不知道的。回過頭來,我們現在有了真樣本集以及它們的label(都是1)、假樣本集以及它們的label(都是0),這樣單就判別網絡來說,此時問題就變成了一個再簡單不過的有監督的二分類問題了,直接送到神經網絡模型中訓練就完事了。假設訓練完了,下面我們來看生成網絡。

對於生成網絡,想想我們的目的,是生成儘可能逼真的樣本。那麼原始的生成網絡生成的樣本你怎麼知道它真不真呢?就是送到判別網絡中,所以在訓練生成網絡的時候,我們需要聯合判別網絡一起才能達到訓練的目的。什麼意思?就是如果我們單單隻用生成網絡,那麼想想我們怎麼去訓練?誤差來源在哪裏?細想一下沒有,但是如果我們把剛纔的判別網絡串接在生成網絡的後面,這樣我們就知道真假了,也就有了誤差了。所以對於生成網絡的訓練其實是對生成-判別網絡串接的訓練,就像圖中顯示的那樣。好了那麼現在來分析一下樣本,原始的噪聲數組Z我們有,也就是生成了假樣本我們有,此時很關鍵的一點來了,我們要把這些假樣本的標籤都設置爲1,也就是認爲這些假樣本在生成網絡訓練的時候是真樣本。

那麼爲什麼要這樣呢?我們想想,是不是這樣才能起到迷惑判別器的目的,也才能使得生成的假樣本逐漸逼近爲正樣本。好了,重新順一下思路,現在對於生成網絡的訓練,我們有了樣本集(只有假樣本集,沒有真樣本集),有了對應的label(全爲1),是不是就可以訓練了?有人會問,這樣只有一類樣本,訓練啥呀?誰說一類樣本就不能訓練了?只要有誤差就行。還有人說,你這樣一訓練,判別網絡的網絡參數不是也跟着變嗎?沒錯,這很關鍵,所以在訓練這個串接的網絡的時候,一個很重要的操作就是不要判別網絡的參數發生變化,也就是不讓它參數發生更新,只是把誤差一直傳,傳到生成網絡那塊後更新生成網絡的參數。這樣就完成了生成網絡的訓練了。

在完成生成網絡訓練好,那麼我們是不是可以根據目前新的生成網絡再對先前的那些噪聲Z生成新的假樣本了,沒錯,並且訓練後的假樣本應該是更真了纔對。然後又有了新的真假樣本集(其實是新的假樣本集),這樣又可以重複上述過程了。我們把這個過程稱作爲單獨交替訓練。我們可以實現定義一個迭代次數,交替迭代到一定次數後停止即可。這個時候我們再去看一看噪聲Z生成的假樣本會發現,原來它已經很真了。

看完了這個過程是不是感覺GAN的設計真的很巧妙,個人覺得最值得稱讚的地方可能在於這種假樣本在訓練過程中的真假變換,這也是博弈得以進行的關鍵之處。

▌進一步

文字的描述相信已經讓大多數的人知道了這個過程,下面我們來看看原文中幾個重要的數學公式描述,首先我們直接上原始論文中的目標公式吧:

640?wx_fmt=png

上述這個公式說白了就是一個最大最小優化問題,其實對應的也就是上述的兩個優化過程。有人說如果不看別的,能達看到這個公式就拍案叫絕的地步,那就是機器學習的頂級專家,哈哈,真是前路漫漫。同時也說明這個簡單的公式意義重大。

這個公式既然是最大最小的優化,那就不是一步完成的,其實對比我們的分析過程也是這樣的,這裏現優化D,然後在取優化G,本質上是兩個優化問題,把拆解就如同下面兩個公式:

優化D:

640?wx_fmt=png

優化G:

640?wx_fmt=png

可以看到,優化D的時候,也就是判別網絡,其實沒有生成網絡什麼事,後面的G(z)這裏就相當於已經得到的假樣本。優化D的公式的第一項,使的真樣本x輸入的時候,得到的結果越大越好,可以理解,因爲需要真樣本的預測結果越接近於1越好嘛。對於假樣本,需要優化是的其結果越小越好,也就是D(G(z))越小越好,因爲它的標籤爲0。但是呢第一項是越大,第二項是越小,這不矛盾了,所以呢把第二項改成1-D(G(z)),這樣就是越大越好,兩者合起來就是越大越好。 那麼同樣在優化G的時候,這個時候沒有真樣本什麼事,所以把第一項直接卻掉了。這個時候只有假樣本,但是我們說這個時候是希望假樣本的標籤是1的,所以是D(G(z))越大越好,但是呢爲了統一成1-D(G(z))的形式,那麼只能是最小化1-D(G(z)),本質上沒有區別,只是爲了形式的統一。之後這兩個優化模型可以合併起來寫,就變成了最開始的那個最大最小目標函數了。

所以回過頭來我們來看這個最大最小目標函數,裏面包含了判別模型的優化,包含了生成模型的以假亂真的優化,完美的闡釋了這樣一個優美的理論。
在這裏插入圖片描述
▌再進一步
有人說GAN強大之處在於可以自動的學習原始真實樣本集的數據分佈,不管這個分佈多麼的複雜,只要訓練的足夠好就可以學出來。針對這一點,感覺有必要好好理解一下爲什麼別人會這麼說。

我們知道,傳統的機器學習方法,我們一般都會定義一個什麼模型讓數據去學習。比如說假設我們知道原始數據屬於高斯分佈呀,只是不知道高斯分佈的參數,這個時候我們定義高斯分佈,然後利用數據去學習高斯分佈的參數得到我們最終的模型。再比如說我們定義一個分類器,比如SVM,然後強行讓數據進行東變西變,進行各種高維映射,最後可以變成一個簡單的分佈,SVM可以很輕易的進行二分類分開,其實SVM已經放鬆了這種映射關係了,但是也是給了一個模型,這個模型就是核映射(什麼徑向基函數等等),說白了其實也好像是你事先知道讓數據該怎麼映射一樣,只是核映射的參數可以學習罷了。

所有的這些方法都在直接或者間接的告訴數據你該怎麼映射一樣,只是不同的映射方法能力不一樣。那麼我們再來看看GAN,生成模型最後可以通過噪聲生成一個完整的真實數據(比如人臉),說明生成模型已經掌握了從隨機噪聲到人臉數據的分佈規律了,有了這個規律,想生成人臉還不容易。然而這個規律我們開始知道嗎?顯然不知道,如果讓你說從隨機噪聲到人臉應該服從什麼分佈,你不可能知道。這是一層層映射之後組合起來的非常複雜的分佈映射規律。然而GAN的機制可以學習到,也就是說GAN學習到了真實樣本集的數據分佈。

再拿原論文中的一張圖來解釋
在這裏插入圖片描述
這張圖表明的是GAN的生成網絡如何一步步從均勻分佈學習到正太分佈的。原始數據x服從正太分佈,這個過程你也沒告訴生成網絡說你得用正太分佈來學習,但是生成網絡學習到了。假設你改一下x的分佈,不管什麼分佈,生成網絡可能也能學到。這就是GAN可以自動學習真實數據的分佈的強大之處。

還有人說GAN強大之處在於可以自動的定義潛在損失函數。 什麼意思呢,這應該說的是判別網絡可以自動學習到一個好的判別方法,其實就是等效的理解爲可以學習到好的損失函數,來比較好或者不好的判別出來結果。雖然大的loss函數還是我們人爲定義的,基本上對於多數GAN也都這麼定義就可以了,但是判別網絡潛在學習到的損失函數隱藏在網絡之中,不同的問題這個函數就不一樣,所以說可以自動學習這個潛在的損失函數。

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