深度学习对抗生成网络--GAN
導(dǎo)讀:GAN的風暴席卷了整個深度學(xué)習(xí)圈子,任何任務(wù)似乎套上GAN的殼子,立馬就變得高大上了起來。那么,GAN究竟是什么呢??
相關(guān)資料下載?
?加助教小姐姐的威信即可免費獲取:
?
?1. GAN的基本思想
GAN全稱對抗生成網(wǎng)絡(luò),顧名思義是生成模型的一種,而他的訓(xùn)練則是處于一種對抗博弈狀態(tài)中的。下面舉例來解釋一下GAN的基本思想。
圖 球員與教練員
假如你是一名籃球運動員,你想在下次比賽中得到上場機會。于是在每一次訓(xùn)練賽之后你跟教練進行溝通:
你:教練,我想打球
教練:(評估你的訓(xùn)練賽表現(xiàn)之后)... 算了吧
(你通過跟其他人比較,發(fā)現(xiàn)自己的運球很差,于是你苦練了一段時間)
你:教練,我想打球
教練:... 嗯 還不行
(你發(fā)現(xiàn)大家投籃都很準,于是你苦練了一段時間的投籃)
你:教練,我想打球
教練: ... 嗯 還有所欠缺
(你發(fā)現(xiàn)你的身體不夠壯,被人一碰就倒,于是你去泡健身房)
......
通過這樣不斷的努力和被拒絕,你最終在某一次訓(xùn)練賽之后得到教練的贊賞,獲得了上場的機會。
值得一提的是在這個過程中,所有的候選球員都在不斷地進步和提升。因而教練也要不斷地通過對比場上球員和候補球員來學(xué)習(xí)分辨哪些球員是真正可以上場的,并且要“觀察”得比球員更頻繁。隨著大家的成長教練也會會變得越來越嚴格。
現(xiàn)在大家對于GAN的思想應(yīng)該有了感性的認識了,下面開始進一步窺探GAN的結(jié)構(gòu)和思想。
GAN的主要應(yīng)用目標:
生成式任務(wù)(生成、重建、超分辨率、風格遷移、補全、上采樣等)
GAN的核心思想:生成器G和判別器D的一代代博弈
生成器:生成網(wǎng)絡(luò),通過輸入生成圖像
判別器:二分類網(wǎng)絡(luò),將生成器生成圖像作為負樣本,真實圖像作為正樣本
learn 判別器D:
給定G,通過G生成圖像產(chǎn)生負樣本,并結(jié)合真實圖像作為正樣本來訓(xùn)練D
learn 生成器G:
給定D,以使得D對G生成圖像的評分盡可能接近正樣本作為目標來訓(xùn)練G
G和D的訓(xùn)練過程交替進行,這個對抗的過程使得G生成的圖像越來越逼真,D“打假”的能力也越來越強。
2.GAN的訓(xùn)練方式
前面已經(jīng)定義了一個生成器(Generator)來生成手寫數(shù)字,一個判別器(Discrimnator)來判別手寫數(shù)字是否是真實的,和一些真實的手寫數(shù)字數(shù)據(jù)集。那么我們怎樣來進行訓(xùn)練呢?
關(guān)于生成器
對于生成器,輸入需要一個n維度向量,輸出為圖片像素大小的圖片。因而首先我們需要得到輸入的向量。
Tips: 這里的生成器可以是任意可以輸出圖片的模型,比如最簡單的全連接神經(jīng)網(wǎng)絡(luò),又或者是反卷積網(wǎng)絡(luò)等。這里大家明白就好。這里輸入的向量我們將其視為攜帶輸出的某些信息,比如說手寫數(shù)字為數(shù)字幾,手寫的潦草程度等等。由于這里我們對于輸出數(shù)字的具體信息不做要求,只要求其能夠最大程度與真實手寫數(shù)字相似(能騙過判別器)即可。所以我們使用隨機生成的向量來作為輸入即可,這里面的隨機輸入最好是滿足常見分布比如均值分布,高斯分布等。
Tips: 假如我們后面需要獲得具體的輸出數(shù)字等信息的時候,我們可以對輸入向量產(chǎn)生的輸出進行分析,獲取到哪些維度是用于控制數(shù)字編號等信息的即可以得到具體的輸出。而在訓(xùn)練之前往往不會去規(guī)定它。關(guān)于判別器
對于判別器不用多說,往往是常見的判別器,輸入為圖片,輸出為圖片的真?zhèn)螛撕灐?/p> Tips: 同理,判別器與生成器一樣,可以是任意的判別器模型,比如全連接網(wǎng)絡(luò),或者是包含卷積的網(wǎng)絡(luò)等等。
?如何訓(xùn)練
上面進一步說明了生成器和判別器,接下來說明如何進行訓(xùn)練。
基本流程如下:
- 初始化判別器D的參數(shù)??和生成器G的參數(shù)??。
- 從真實樣本中采樣??個樣本 {??} ,從先驗分布噪聲中采樣??個噪聲樣本 {??} 并通過生成器獲取??個生成樣本 {??} 。固定生成器G,訓(xùn)練判別器D盡可能好地準確判別真實樣本和生成樣本,盡可能大地區(qū)分正確樣本和生成的樣本。
- 循環(huán)k次更新判別器之后,使用較小的學(xué)習(xí)率來更新一次生成器的參數(shù),訓(xùn)練生成器使其盡可能能夠減小生成樣本與真實樣本之間的差距,也相當于盡量使得判別器判別錯誤。
- 多次更新迭代之后,最終理想情況是使得判別器判別不出樣本來自于生成器的輸出還是真實的輸出。亦即最終樣本判別概率均為0.5。
?
Tips: 之所以要訓(xùn)練k次判別器,再訓(xùn)練生成器,是因為要先擁有一個好的判別器,使得能夠教好地區(qū)分出真實樣本和生成樣本之后,才好更為準確地對生成器進行更新。更直觀的理解可以參考下圖:?
?
圖?生成器判別器與樣本示意圖?
注:圖中的黑色虛線表示真實的樣本的分布情況,藍色虛線表示判別器判別概率的分布情況,綠色實線表示生成樣本的分布。??表示噪聲,??到??表示通過生成器之后的分布的映射情況。
我們的目標是使用生成樣本分布(綠色實線)去擬合真實的樣本分布(黑色虛線),來達到生成以假亂真樣本的目的。
可以看到在(a)狀態(tài)處于最初始的狀態(tài)的時候,生成器生成的分布和真實分布區(qū)別較大,并且判別器判別出樣本的概率不是很穩(wěn)定,因此會先訓(xùn)練判別器來更好地分辨樣本。
通過多次訓(xùn)練判別器來達到(b)樣本狀態(tài),此時判別樣本區(qū)分得非常顯著和良好。然后再對生成器進行訓(xùn)練。
訓(xùn)練生成器之后達到(c)樣本狀態(tài),此時生成器分布相比之前,逼近了真實樣本分布。
經(jīng)過多次反復(fù)訓(xùn)練迭代之后,最終希望能夠達到(d)狀態(tài),生成樣本分布擬合于真實樣本分布,并且判別器分辨不出樣本是生成的還是真實的(判別概率均為0.5)。也就是說我們這個時候就可以生成出非常真實的樣本啦,目的達到。?
?
3. 訓(xùn)練相關(guān)理論基礎(chǔ)
前面用了大白話來說明了訓(xùn)練的大致流程,下面會從交叉熵開始說起,一步步說明損失函數(shù)的相關(guān)理論,尤其是論文中包含min,max的公式如下圖5形式:
圖 minmax公式
判別器在這里是一種分類器,用于區(qū)分樣本的真?zhèn)?#xff0c;因此我們常常使用交叉熵(cross entropy)來進行判別分布的相似性,交叉熵公式如下圖6所示:
圖 交叉熵公式
Tips: 公式中??和??為真實的樣本分布和生成器的生成分布。由于交叉熵是非常常見的損失函數(shù),這里默認大家都較為熟悉,就不進行贅述了。?在當前模型的情況下,判別器為一個二分類問題,因此可以對基本交叉熵進行更具體地展開如下圖7所示:
圖7 二分類交叉熵
Tips: 其中,假定??為正確樣本分布,那么對應(yīng)的就是生成樣本的分布。??表示判別器,則??表示判別樣本為正確的概率,??則對應(yīng)著判別為錯誤樣本的概率。這里僅僅是對當前情況下的交叉熵損失的具體化。相信大家也還是比較熟悉。?將上式推廣到N個樣本后,將N個樣本相加得到對應(yīng)的公式如下:
圖8 N個樣本的情況時
OK,到目前為止還是基本的二分類,下面加入GAN中特殊的地方。
對于GAN中的樣本點??,對應(yīng)于兩個出處,要么來自于真實樣本,要么來自于生成器生成的樣本??~??( 這里的??是服從于投到生成器中噪聲的分布)。
?其中,對于來自于真實的樣本,我們要判別為正確的分布??。來自于生成的樣本我們要判別其為錯誤分布(??)。將上面式子進一步使用概率分布的期望形式寫出(為了表達無限的樣本情況,相當于無限樣本求和情況),并且讓??為 1/2 且使用??表示生成樣本可以得到如下圖8的公式:
?
圖8 GAN損失函數(shù)期望形式表達
OK,現(xiàn)在我們再回過頭來對比原本的的??公式,發(fā)現(xiàn)他們是不是其實就是同一個東西呢!:-D
圖9 損失函數(shù)的min max表達
我們回憶一下上面介紹的流程理解一下這里的??。
?
- 這里的?相當于表示真實樣本和生成樣本的差異程度。
- 先看??。這里的意思是固定生成器G,盡可能地讓判別器能夠最大化地判別出樣本來自于真實數(shù)據(jù)還是生成的數(shù)據(jù)。
- 再將后面部分看成一個整體令??=??,看?,這里是在固定判別器D的條件下得到生成器G,這個G要求能夠最小化真實樣本與生成樣本的差異。
- 通過上述min max的博弈過程,理想情況下會收斂于生成分布擬合于真實分布。
總結(jié)?
?通過一個判別器而不是直接使用損失函數(shù)來進行逼近,更能夠自頂向下地把握全局的信息。比如在圖片中,雖然都是相差幾像素點,但是這個像素點的位置如果在不同地方,那么他們之間的差別可能就非常之大。
?比如上圖10中的兩組生成樣本,對應(yīng)的目標為字體2,但是圖中上面的兩個樣本雖然只相差一個像素點,但是這個像素點對于全局的影響是比較大的,但是單純地去使用使用損失函數(shù)來判斷,那么他們的誤差都是相差一個像素點,而下面的兩個雖然相差了六個像素點的差距(粉色部分的像素點為誤差),但是實際上對于整體的判斷來說,是沒有太大影響的。但是直接使用損失函數(shù)的話,卻會得到6個像素點的差距,比上面的兩幅圖差別更大。而如果使用判別器,則可以更好地判別出這種情況(不會拘束于具體像素的差距)。
?小編吐血整理了有關(guān)Python人工智能的資料,有圖像處理opencv\自然語言處理、機器學(xué)習(xí)、數(shù)學(xué)基礎(chǔ)等資源庫,代碼、PPT、書籍也有,想學(xué)習(xí)人工智能或者轉(zhuǎn)行到高薪資行業(yè)的,大學(xué)生也非常實用,無任何套路免費提供
掃碼+vx領(lǐng)取,也可以咨詢學(xué)習(xí)問題
總結(jié)
以上是生活随笔為你收集整理的深度学习对抗生成网络--GAN的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: division mysql_三、被 M
- 下一篇: [零基础]用docker搭建Hadoop