GAN——对抗生成网络
GAN的基本思想
作為現在最火的深度學習模型之一,GAN全稱對抗生成網絡,顧名思義是生成模型的一種,而他的訓練則是處于一種對抗博弈狀態中的。它使用兩個神經網絡,將一個神經網絡與另一個神經網絡進行對抗。
基本思想:(摘自某*乎)
假如你是一名籃球運動員,你想在下次比賽中得到上場機會。
于是在每一次訓練賽之后你跟教練進行溝通:
你:教練,我想打球
教練:(評估你的訓練賽表現之后)… 算了吧
(你通過跟其他人比較,發現自己的運球很差,于是你苦練了一段時間)
你:教練,我想打球
教練:… 嗯 還不行
(你發現大家投籃都很準,于是你苦練了一段時間的投籃)
你:教練,我想打球
教練: … 嗯 還有所欠缺
(你發現你的身體不夠壯,被人一碰就倒,于是你去泡健身房)
…
通過這樣不斷的努力和被拒絕,你最終在某一次訓練賽之后得到教練的贊賞,獲得了上場的機會。
值得一提的是在這個過程中,所有的候選球員都在不斷地進步和提升。因而教練也要不斷地通過對比場上球員和候補球員來學習分辨哪些球員是真正可以上場的,并且要“觀察”得比球員更頻繁。隨著大家的成長教練也會會變得越來越嚴格。
基本結構:
GAN的主要結構包括一個生成器G(Generator)和一個判別器D(Discriminator)。
判別器的任務是判斷輸入圖像是源自數據集中還是由機器生成的。判別器一般使用二分類的神經網絡來構建,一般將取自數據集的樣本視為正樣本,而生成的樣本標注為負樣本。生成器的任務是接收隨機噪聲,然后使用反卷積網絡來創建一個圖像。生成器的隨機輸入可以看做一個種子,相同的種子會得到相同的生成圖像,不同的種子則得到的圖像不同,大量種子的作用是保證生成圖像的多樣性。
在上面的例子中的球員就相當于生成器,我們需要他在球場上能有好的表現。而球員一開始都是初學者,這個時候就需要一個教練員來指導他們訓練,告訴他們訓練得怎么樣,直到真的能夠達到上場的標準。而這個教練就相當于判別器。
GAN的雙系統的目的是讓生成器盡量去迷惑判別器,同時讓判別器盡可能的對輸入圖像的來源進行判斷。兩個模型之間是互相對抗的關系,它們都會通過試圖擊敗對方來使自己變得更好。生成器可以通過判別器得到它生成的圖像和數據集圖像分布是否一致的反饋,而判別器則可以通過生成器得到更多的訓練樣本。
舉個例子:
我們現在擁有大量的手寫數字的數據集,我們希望通過GAN生成一些能夠以假亂真的手寫字圖片。
- 定義一個模型來作為生成器(圖三中藍色部分Generator),能夠輸入一個向量,輸出手寫數字大小的像素圖像。
- 定義一個分類器來作為判別器(圖三中紅色部分Discriminator)用來判別圖片是真的還是假的(或者說是來自數據集中的還是生成器中生成的),輸入為手寫圖片,輸出為判別圖片的標簽。
訓練過程是什么?
前面已經定義了好了
一個生成器(Generator)來生成手寫數字,
一個判別器(Discrimnator)來判別手寫數字是否是真實的,和一些真實的手寫數字數據集。
訓練的基本過程(重難點):
從先驗分布噪聲中采樣 m 個噪聲樣本
并通過生成器獲取 m 個生成樣本
固定生成器G,訓練判別器D盡可能好地準確判別真實樣本和生成樣本,盡可能大地區分正確樣本和生成的樣本。
注:圖中的黑色虛線表示真實的樣本的分布情況,藍色虛線表示判別器判別概率的分布情況,綠色實線表示生成樣本的分布。 表示噪聲, 到 表示通過生成器之后的分布的映射情況。
我們的目標是使用生成樣本分布(綠色實線)去擬合真實的樣本分布(黑色虛線),來達到生成以假亂真樣本的目的。
可以看到在(a)狀態處于最初始的狀態的時候,生成器生成的分布和真實分布區別較大,并且判別器判別出樣本的概率不是很穩定,因此會先訓練判別器來更好地分辨樣本。
通過多次訓練判別器來達到(b)樣本狀態,此時判別樣本區分得非常顯著和良好。然后再對生成器進行訓練。
訓練生成器之后達到(c)樣本狀態,此時生成器分布相比之前,逼近了真實樣本分布。
經過多次反復訓練迭代之后,最終希望能夠達到(d)狀態,生成樣本分布擬合于真實樣本分布,并且判別器分辨不出樣本是生成的還是真實的(判別概率均為0.5)。也就是說我們這個時候就可以生成出非常真實的樣本啦,目的達到。
總結
以上是生活随笔為你收集整理的GAN——对抗生成网络的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: iOS小技能:蓝牙打印商品价签和交易小票
- 下一篇: 回顾篇之Java的插入排序