深入理解GAN对抗生成网络
文章目錄
- 什么是GAN
- 納什均衡
- GAN的學習過程
- GAN的局限性
- 如何改善GAN的局限性
什么是GAN
Generative Adversarial Networks,生成式對抗網絡,Ian Goodfellow 在2014 年提出的一種生成式模型
基本思想來自博弈論的二人零和博弈(納什均衡), 由一個生成器和一個判別器構成,通過對抗學習來訓練
- 生成器的目的是盡量去學習真實的數據分布
- 判別器的目的是盡量正確判別輸入數據是來自真實數據還是來自生成器
- 生成器和判別器就是一個矛和盾互相PK的過程
- 為了取得游戲勝利,這兩個游戲參與者需要不斷優化, 各自提高自己的生成能力和判別能力,這個學習優化過程就是尋找二者之間的一個納什均衡
G代表生成器,D代表判別器,Z是輸入源,稱為Noise source,就是一個隨機編碼。給出一個random code(即Z)由生成器G生成假數據X’,假數據X’和真實數據X喂給判別器D,由D判別出哪個是real,哪個是fake,這個就是gan的基本原理
納什均衡
我們以囚徒困境的例子來解釋納什均衡的含義
A和B屬于零和游戲,需要在A和B的決策中進行Trade Off(權衡),由此看出,抵賴對兩個人來說都是最優的結果,這個就是納什均衡。
亞當·斯密的“看不見的手”,在市場經濟中,每一個人都從利己的目的出發,不斷調和與迭代,最終全社會達到利他的效果
GAN的學習過程
GAN的學習過程其實就是把D和G達成一個均衡,這是我們的目標,因此不僅要訓練G,也要訓練D
為什么D和G是對抗的?
G是生成器,它生成的數據是虛假的,它目標是讓生成的數據騙過D。D是判別器,它的目標是要把虛假的數據給找出來,因此D和G是對抗的
對于 GAN 的學習過程 ,需要訓練模型D來最大化判別數據來源于真實數據或者偽數據分布 ,同時,我們需要訓練模型 G來最小化 loss。
我們該采用怎樣的優化方法,對生成器G和判別器D進行優化呢?
- Step1,固定生成器 G=>優化判別器 D,讓D的判別準確率最大化
- Step2,固定判別器 D => 優化生成器 G,讓D的判別準確率最小化
訓練 GAN 時,在同一輪參數更新中,通常對 D 的參數更新 k 次,再對 G的參數更新 1 次,這樣做的目的是讓D學的更快點,因為我們最終要的是G,為此需要把D這個教練先變得越來越好,由此才能訓練出更好的G
Generator與Discriminator的工作原理
- Generator,在輸入一個隨機編碼(random code)z之后,它將輸出一幅由神經網絡自動生成的、假的圖片G(z)
- Discriminator,接受G輸出的圖像作為輸入,然后判斷這幅圖像的真假,真的輸出1,假的輸出0
- G生成的圖像會越來越逼真,D也越來越會判斷圖片的真假,最后我們就不要D了,直接用G來生成圖像
我們就是要在最大化D的能力的前提下,最小化D對G的判斷能力 ,所以稱之為 最小最大值問題
損失函實際上是一個交叉熵,判別器的目的是盡可能的令D(x)接近1(對于真圖像x的處理評分要高),令D(G(z))接近0(對于假圖像G(z)的處理評分要盡量降低),所以D主要是最大化上面的損失函數(讓D的辨別能力更強),G恰恰相反,他主要是最小化上述損失函數(讓生成的假圖像G(z)變得更真實)。
為了增強D的能力,我們分別考慮輸入真的圖像和假的圖像的情況
D的目標是什么?G的目標是什么?
- D的目標是:D(G(z))處理的是假圖像G(z) => 評分D(G(z))要盡量降低,對于真圖像x的處理 => 評分要高,這樣D的辨別能力才會更強
- G的目標是:讓生成的假圖像G(z)變得更真實、更逼真,讓D難以辨別
GAN的局限性
用戶輸入random code由生成器G參數 fake image即G(Z),傳統的GAN中會出現如下局限性:
這里user input 是指輸入的random code,output是G生成的G(Z),還要從現實世界中取一張或者畫一張真實圖像,與output一起輸入判別器
生成的圖片看起來不錯,但放大看,會發現細節相當模糊
如何改善GAN的局限性
如改善GAN的局限性可以從以下兩個方面入手:
- 提高GAN的用戶控制能力
- 提高GAN生成圖片的分辨率和質量
從以上兩個方面提出新的算法模型:
pix2pix,有條件的使用用戶輸入,使用成對的數據(paired data)進行訓練。比如,輸入的是貓在左邊,你就不能生成貓在右邊的圖。Pix2pix的缺點:在訓練過程中,需要人為給它標出數據的對應關系,比如 現在的輸入條件是貓在左邊,人要給它畫一張或找一張貓在左邊的圖像,才會讓G更好的學習,以產生貓在右邊的圖像,這對數據源的要求會很高
CycleGAN,使用不成對的數據(unpaired data)就能訓練。
以馬為例,馬訓練馬是成對的數據,用馬生成斑馬,是不成對數據。由于現實生活中成對的樣本比較少,對于沒有成對樣本的情況,使用CycleGAN,CycleGAN有兩個生成器,馬->斑馬,斑馬->馬,我們最終想要的是馬->斑馬,利用理論上開始的馬和馬->斑馬->馬是一樣的,同時優化馬->斑馬,斑馬->馬兩個生成器,最終使用馬->斑馬。
CycleGAN本質是優化生成器的一個思想,拿文本翻譯來說,你把一段英文翻譯成中文,再把中文翻譯回英文,假如翻譯回來的英文和一開始的英文天差地別,那么這個兩次翻譯的結果肯定是很差的;反之,如果能夠讓翻譯回來的英文和原本的一樣,就相當于是改進了兩次翻譯的效果,CycleGAN利用這種方式來優化生成器。
pix2pixHD,生成高分辨率、高質量的圖像
未來還會持續更新:
- Conditional GAN
- pix2pix
- CycleGAN
- GauGAN
謝謝支持!
總結
以上是生活随笔為你收集整理的深入理解GAN对抗生成网络的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 闪存类型测试软件,轻松测闪存类型 测试软
- 下一篇: 一款小巧好用的全局鼠标手势软件——Mou