0901-生成對抗網路GAN的原理簡介
pytorch完整教程目錄:https://www.cnblogs.com/nickchen121/p/14662511.html
一、GAN 概述
GAN(生成對抗網路,Generative Adversarial Networks) 的產生來源於一個靈機一動的想法:What I cannot create, I do not understand.(那些我所不能創造的,我也沒有真正地理解它。)
。
類似的,如果深度學習不能創造圖片,那麼它也沒有真正地理解圖片。那段時間深度學習已經開始在各類計算機視覺領域中達到了一個較高的成就,在很多工中都取得了突破,但是人們一直對神經網路的黑盒模型表示質疑,也因此更多的人想從視覺化的角度來套索卷及網路所學習的特徵和特徵間的組合,而 GAN 則從生成學習的角度展示了神經網路的強大能力。
GAN 解決了非監督學習中的著名問題:給定一批樣本,訓練一個系統能夠生成類似的樣本。
二、GAN 的網路結構
GAN 的網路結構圖如上圖所示,主要包含以下兩個子網路:
- 生成器(generator):輸入一個隨機噪聲,生成一張圖片
- 判別器(discriminator):判斷輸入的圖片時真圖片還是假圖片
訓練判別器的時候,需要利用生成器生成的假圖片和真實圖片;訓練生成器的時候,只需要用噪聲生成假圖片。判別器用來評估生成的假圖片的質量,促使生成器相應地調整引數。
生成器的目標是儘可能地生成以假亂真的圖片,讓判別器以為這是真的圖片;判別器的目標是將生成器生成的圖片和真實圖片區分開。可以看出這兩者的目標相反,在訓練過程中相互對抗,這也是它被稱作生成對抗網路的原因。
三、通過一個舉例具體化 GAN
上述的描述可能過於抽象,現在讓我們用收藏齊白石作品的書畫收藏家和假畫販子的例子來說明。
下圖為齊白石畫蝦圖真跡。
假畫販子相當於是生成器,他們希望能夠模仿大師真跡偽造出以假亂真的假畫,騙過收藏家;書畫收藏家則希望把贗品和真跡區分開。在下述的例子中,假畫販子和收藏家所交易的畫,主要都是齊白石畫的蝦。
在這個例子中,假設一開始假畫販子和收藏家都是新手,他們對真跡和贗品的概念都很模糊。假畫販子仿造出來的畫幾乎都是鬼畫符,而收藏家也傻啦吧唧的把不少贗品當做了真跡,也有很多真跡當做了贗品。
起初,收藏家通過一堆贗品和真跡,發現畫中的蝦有一對大鉗子,如果畫中沒有這個大鉗子,則一概過濾掉,當做是贗品;假畫販子中的一堆畫中沒有大鉗子的贗品基本都血本無歸,只有有大鉗子的贗品才被收藏家傻乎乎的買去了,因此假畫販子吸取經驗,在所有的贗品中都加上了大鉗子,其他部分還是鬼畫符。
下圖為假畫販子的第一版贗品。
魔高一尺道高一丈,收藏家買了所有的畫都有了大鉗子,但是收藏家發現還是不對勁,因為還是有些畫是贗品,因此收藏家又一次閉關修煉,發現齊白石畫的蝦不僅有大鉗子,蝦還有彎曲的形狀,並且蝦鬚很長;假畫販子也發現了不對勁,只有大鉗子的假畫很多賣不出去了,因此假畫販子開始日夜作畫,漸漸地,他發現只要這幅畫有大鉗子,蝦有彎曲的形狀,蝦鬚很長,收藏家就會買,因此假畫販子又一次佔了上風。
下圖為假畫販子的第二版贗品。
正所謂道高一尺魔高一丈,假畫販子和收藏家就在這種的博弈情況下,一個鑑定假畫的能力越來越強,一個作假畫的水平越來越高超,兩個人在博弈對抗中,還不斷地促使對方學習進步,進而達到了共同提升的目的。
在這個例子中,假畫販子相當於一個生成器,收藏家相當於一個判別器。一開始生成器和判別器的水平都很差,因為二者都是隨機初始化。
訓練過程分為兩步交替進行:
- 第一步是訓練判別器(只修改判別器的引數,固定生成器),目標是把真跡和贗品區分開
- 第二步是訓練生成器(只修改生成器的引數,固定判別器),為的是生成的假畫能夠被判別器判別為真跡
上述兩步交替進行,進而分類器和判別器最終都會達到一個較高的水平,直至最後,生成器生成的蝦的圖片和齊白石的真跡幾乎沒有區別。
下圖所示便是生成器生成的蝦。
四、GAN 的設計細節
下面我們來思考網路結構的設計。
判別器的目標是判斷輸入的圖片是真跡還是贗品,所以可以看成是一個二分類網路,可以設計一個簡單的卷積網路完成。
生成器的目標是從噪聲中生成一張彩色圖片,這裡我們採用廣泛使用的 DCGAN(Deep Convolutional Generative Adversarial Networks)結構,也就是全卷機網路,它的結構如下圖所示。
網路的輸入是一個 100 維的噪聲,輸出是一個 3×64×64 的圖片。其中這裡的輸入可以看成是一個 100×1×1 的圖片,通過上卷積慢慢增大為 4×4、8×8、16×16、32×32 和 64×64。
上卷積,或稱為轉置卷積,是一種特殊的卷積操作,類似於卷及操作的逆運算。當卷積的 side 為 2 時,輸出相比輸入會下采樣到一半的尺寸;而當上卷積的 side 為 2時,輸出會上取樣到輸入的兩倍尺寸。
這種上取樣的方法可以理解為圖片的資訊儲存於 100 個向量之中,神經網路根據這 100 個向量描述的資訊,前幾步的上取樣先勾勒出輪廓、色調等基礎資訊,後幾步上取樣慢慢完善細節。網路越深,細節越詳細。
在 DCGAN 中,判別器的結構和生成器對稱:生成器中採用上取樣的卷積,判別器中就採用下采樣的卷積,生成器是根據噪聲輸出一張 64×64×3 的圖片,而判別器則是根據輸入的 64×64×3 的圖片輸出圖片屬於正負樣本的分數(概率)。