生成式對抗網路(gan, generative adversarial networks )是一種深度學習模型,是近年來複雜分布上無監督學習最具前景的方法之一。
模型通過框架中(至少)兩個模組:生成模型(generative model)和判別模型(discriminative model)的互相博弈學習產生相當好的輸出。原始 gan 理論中,並不要求 g 和 d 都是神經網路,只需要是能擬合相應生成和判別的函式即可。但實用中一般均使用深度神經網路作為 g 和 d 。
乙個優秀的生成式對抗網路應用需要有良好的訓練方法,否則可能由於神經網路模型的自由性而導致輸出不理想。
生成式對抗網路是屬於機器學習 / 計算機視覺領域有點懵?舉個例子
男:你看,我給你拍的**的好不好看?
女:這是什麼鬼,你不能學學 *** 的構圖嗎?
男:哦,
……男:這次你看我拍的行不行?
女:你看看你的後期,再看看 yyy 的後期吧,ε=(´ο`*)))唉
男:哦,
……男:這次好點了吧?
女:呵呵,我看你這輩子是學不會攝影了
……男:這次呢?
女:嘿嘿,還不錯,我拿去當頭像了
上面這段對話講述了一位「男朋友攝影師」的成長歷程。
很多人可能會問:這個故事和生成式對抗網路(gan)有什麼關係?其實,只要你能理解這段故事,就可以了解生成式對抗網路的工作原理。
首先,先介紹一下生成模型(generative model),它在機器學習的歷史上一直占有舉足輕重的地位。當我們擁有大量的資料,例如影象、語音、文字等,如果生成模型可以幫助我們模擬這些高維資料的分布,那麼對很多應用將大有裨益。
針對資料量缺乏的場景,生成模型則可以幫助生成資料,提高資料數量,從而利用半監督學習提公升學習效率。語言模型(language model)是生成模型被廣泛使用的例子之一,通過合理建模,語言模型不僅可以幫助生成語言通順的句子,還在機器翻譯、聊天對話等研究領域有著廣泛的輔助應用。
文章開頭描述的場景中有兩個參與者,乙個是攝影師(男生),乙個是攝影師的女朋友(女生)。男生一直試圖拍出像眾多優秀攝影師一樣的好**,而女生一直以挑剔的眼光找出「自己男朋友」拍的**和「別人家的男朋友」拍的**的區別。
於是兩者的交流過程類似於:男生拍一些** ->女生分辨男生拍的**和自己喜歡的**的區別->男生根據反饋改進自己的技術,拍新的**->女生根據新的**繼續提出改進意見->……,這個過程直到均衡出現:即女生不能再分辨出「自己男朋友」拍的**和「別人家的男朋友」拍的**的區別。
我們將視線回看到生成模型,以影象生成模型舉例。假設我們有乙個生成模型(generator),它的目標是生成一張真實的。與此同時我們有乙個影象判別模型(discriminator),它的目標是能夠正確判別一張是生成出來的還是真實存在的。那麼如果我們把剛才的場景對映成生成模型和判別模型之間的博弈,就變成了如下模式:生成模型生成一些->判別模型學習區分生成的和真實->生成模型根據判別模型改進自己,生成新的->····
這個場景直至生成模型與判別模型無法提高自己——即判別模型無法判斷一張是生成出來的還是真實的而結束,此時生成模型就會成為乙個完美的模型。這種相互學習的過程聽起來是不是很有趣?
上述這種博弈式的訓練過程,如果採用神經網路作為模型型別,則被稱為生成式對抗網路(gan)。
在影象生成過程中,如何設計生成模型和判別模型呢?深度學習裡,對影象分類建模,刻畫影象不同層次,抽象資訊表達的最有效的模型是:cnn (convolutional neural network,卷積神經網路)。
我們對一張**的理解也是多層次逐漸深入的。
那麼生成影象的模型應該是什麼樣子的呢?想想小時候上美術課,我們會先考慮構圖,再勾畫輪廓,然後再畫細節,最後填充顏色,這事實上也是乙個多層級的過程,就像是把影象理解的過程反過來,於是,人們為影象生成設計了一種類似反卷積的結構:deep convolutional nn for gan(dcgan)
dcgan 採用乙個隨機雜訊向量作為輸入,如高斯雜訊。輸入通過與cnn類似但是相反的結構,將輸入放大成二維資料。通過採用這種結構的生成模型和cnn結構的判別模型,dcgan 在生成上可以達到相當可觀的效果。
如下是一些生成的案例**:
再來看乙個 gan 在半監督學習(semi supervised learning)中的例子。假如我們面對乙個多分類的任務,手裡只有很少有標註的樣本,同時有很多沒有標註的樣本,怎麼能夠利用gan的思路合理使用無標籤資料,提高分類效能呢?
在去年 nips 大會上,來自 openai 的作者提供了如下思路:考慮乙個k分類任務,有乙個判別模型 g可以幫助生成樣本,與此同時,有乙個判別模型做乙個 k+1 分類任務,其中新加的類是**樣本是否是由生成模型生成的。跟傳統 gan 不同,這裡我們最終需要的是判別模型,而不是生成模型。
簡單而言,目標函式針對不同資料,可以分為兩部分。對於有標註的樣本,目標是希望判別模型能夠正確輸出標籤。而對於沒有標註的生成樣本,則是由 gan 定義的 loss。
那位作者認為這樣處理的好處是可以充分利用未標註資料來學習樣本分佈,從而輔助監督學習的訓練過程。實驗結果也顯示通過這種處理方法訓練出來的判別模型,在合理利用未標註資料方面,有著比其他方法更好的效果。
生成式對抗網路GAN
判別式模型和生成是模型的區別 假設研究物件為變數為x,類別變數為y,則 判別式模型 只是對給定的樣本進行分類,不關心資料如何生成。按照一定的判別準則,從資料中直接學習決策函式y f x 或者條件概率分布p y x a 作為 的模型 典型的判別模型包括 k近鄰法,決策樹,最大熵模型,支援向量機等 生成...
生成式對抗網路GAN
一 背景 gan的用途 影象超畫素 背景模糊 影象修復 二 生成式對抗網路gan 生成模型 乙個能夠生成我們想要的資料的模型 圖模型 函式 神經網路 gan 目的就是訓練乙個生成模型,生成我們想要的資料 生成器和判別器是對抗的 三 訓練演算法 隨機初始化生成器和判別器 交替訓練判別器d和生成器g直到...
7 什麼是GAN(生成對抗網路)?
神經網路分很多種,有普通的前向傳播神經網路 有分析的 cnn 卷積神經網路 有分析序列化資料,比如語音的 rnn 迴圈神經網路 這些神經網路都是用來輸入資料,得到想要的結果,我們看中的是這些神經網路能很好的將資料與結果通過某種關係聯絡起來.理解對抗網路,首先要了解生成模型和判別模型。判別模型比較好理...