1. 程式人生 > >到底什麼是生成式對抗網路 GAN?

到底什麼是生成式對抗網路 GAN?

到底什麼是生成式對抗網路 GAN?

先來看一下 百度百科-GAN 的解釋

生成式對抗網路(GAN, Generative Adversarial Networks )是一種深度學習模型,是近年來複雜分佈上無監督學習最具前景的方法之一。

模型通過框架中(至少)兩個模組:生成模型(Generative Model)和 判別模型(Discriminative Model)的互相博弈學習產生相當好的輸出。原始 GAN 理論中,並不要求 G 和 D 都是神經網路,只需要是能擬合相應生成和判別的函式即可。但實用中一般均使用深度神經網路作為 G 和 D 。

一個優秀的生成式對抗網路應用需要有 良好的訓練方法

,否則可能由於神經網路模型的自由性而導致輸出不理想。

生成式對抗網路是屬於 機器學習 / 計算機視覺 領域

有點懵?舉個例子


男: 你看,我給你拍的照片的好不好看?
女: 這是什麼鬼,你不能學學 XXX 的構圖嗎?
男: 哦,
……

男: 這次你看我拍的行不行?
女: 你看看你的後期,再看看 YYY 的後期吧,ε=(´ο`*)))唉
男: 哦,
……
男: 這次好點了吧?
女: 呵呵,我看你這輩子是學不會攝影了
……
男: 這次呢?
女: 嘿嘿,還不錯,我拿去當頭像了

上面這段對話講述了一位 “男朋友攝影師” 的成長曆程。

很多人可能會問:這個故事和生成式對抗網路(GAN)有什麼關係?其實,只要你能理解這段故事,就可以瞭解 生成式對抗網路的工作原理

首先,先介紹一下 生成模型(generative model),它在機器學習的歷史上一直佔有舉足輕重的地位。當我們擁有大量的資料,例如影象、語音、文字等,如果生成模型可以幫助我們模擬這些高維資料的分佈,那麼對很多應用將大有裨益。

針對資料量缺乏的場景,生成模型則可以幫助生成資料,提高資料數量,從而利用半監督學習提升學習效率。語言模型(language model)是生成模型被廣泛使用的例子之一,通過合理建模,語言模型不僅可以幫助生成語言通順的句子,還在機器翻譯、聊天對話等研究領域有著廣泛的輔助應用。

GAN 的工作原理是這樣的

文章開頭描述的場景中有兩個參與者,一個是攝影師(男生),一個是攝影師的女朋友(女生)。男生一直試圖拍出像眾多優秀攝影師一樣的好照片,而女生一直以挑剔的眼光找出“自己男朋友”拍的照片和“別人家的男朋友”拍的照片的區別。

於是兩者的 交流過程 類似於:男生拍一些照片 ->女生分辨男生拍的照片和自己喜歡的照片的區別->男生根據反饋改進自己的技術,拍新的照片->女生根據新的照片繼續提出改進意見->……,這個過程直到均衡出現:即女生不能再分辨出“自己男朋友”拍的照片和“別人家的男朋友”拍的照片的區別。

我們將視線回看到 生成模型,以影象生成模型舉例。假設我們有一個圖片生成模型(generator),它的目標是生成一張真實的圖片。與此同時我們有一個影象判別模型(discriminator),它的目標是能夠正確判別一張圖片是生成出來的還是真實存在的。那麼如果我們把剛才的場景對映成圖片生成模型和判別模型之間的博弈,就變成了如下模式:生成模型生成一些圖片->判別模型學習區分生成的圖片和真實圖片->生成模型根據判別模型改進自己,生成新的圖片->····

這個場景直至生成模型與判別模型無法提高自己——即判別模型無法判斷一張圖片是生成出來的還是真實的而結束,此時生成模型就會成為一個完美的模型。這種相互學習的過程聽起來是不是很有趣?

上述這種 博弈式的訓練過程,如果採用神經網路作為模型型別,則被稱為 生成式對抗網路(GAN)

GAN 在影象中的應用——DCGAN

為了方便大家更好地理解生成式對抗網路的工作過程,下面介紹一個 GAN 的使用場景——在圖片中的生成模型 DCGAN。

在影象生成過程中,如何設計生成模型和判別模型呢?深度學習裡,對影象分類建模,刻畫影象不同層次,抽象資訊表達的最有效的模型是:CNN (convolutional neural network,卷積神經網路)

CNN 是深度神經網路的一種,可以通過卷積層(convolutional layer)提取不同層級的資訊,如上圖所示。CNN 模型以圖片作為輸入,以圖片、類別抽象表達作為輸出,如:紋理、形狀等等,其實這與人類對影象的認知有相似之處,即:我們對一張照片的理解也是多層次逐漸深入的

那麼生成影象的模型應該是什麼樣子的呢?想想小時候上美術課,我們會先考慮構圖,再勾畫輪廓,然後再畫細節,最後填充顏色,這事實上也是一個多層級的過程,就像是把影象理解的過程反過來,於是,人們為影象生成設計了一種類似 反捲積 的結構:Deep convolutional NN for GAN(DCGAN)

DCGAN 採用一個隨機噪聲向量作為輸入,如高斯噪聲。輸入通過與CNN類似但是相反的結構,將輸入放大成二維資料。通過採用這種結構的生成模型和CNN結構的判別模型,DCGAN 在圖片生成上可以達到相當可觀的效果。

如下是一些生成的 案例照片

GAN 在半監督學習中的應用

再來看一個 GAN 在半監督學習(semi supervised learning)中的例子。假如我們面對一個多分類的任務,手裡只有很少有標註的樣本,同時有很多沒有標註的樣本,怎麼能夠利用GAN的思路合理使用無標籤資料,提高分類效能呢?

在去年 NIPS 大會上,來自 OpenAI 的作者提供瞭如下思路:考慮一個K分類任務,有一個判別模型 G可以幫助生成樣本,與此同時,有一個判別模型做一個 K+1 分類任務,其中新加的類是預測樣本是否是由生成模型生成的。跟傳統 GAN 不同,這裡我們最終需要的是判別模型,而不是生成模型。

簡單而言,目標函式針對不同資料,可以分為兩部分。對於有標註的樣本,目標是希望判別模型能夠正確輸出標籤。而對於沒有標註的生成樣本,則是由 GAN 定義的 loss。

在這裡插入圖片描述

那位作者認為這樣處理的好處是可以 充分利用未標註資料來學習樣本分佈,從而輔助監督學習的訓練過程。實驗結果也顯示通過這種處理方法訓練出來的 判別模型,在合理利用未標註資料方面,有著比其他方法更好的效果。

參考:原文連結