概念
生成對抗網路(gan)是一種深度學習模型,是近年來複雜分布上無監督學習最具前景的方法之一。模型通過框架中(至少)兩個模組:生成模型(generative model)和判別模型(discriminative model)的互相博弈學習產生相當好的輸出。判別模型比較好理解,就像分類一樣,有乙個判別界限,通過這個判別界限去區分樣本。從概率角度分析就是獲得樣本x屬於類別y的概率,是乙個條件概率p(y|x).而生成模型是需要在整個條件內去產生資料的分布,就像高斯分布一樣,他需要去擬合整個分布,從概率角度分析就是樣本x在整個分布中的產生的概率,即聯合概率p(xy)。
思想
gan的設計思想簡單的說就是讓生成模型和判別模型「相愛相殺」。判別模型的任務是分析判斷給定的資料,生成模型的任務是去創造乙個干擾資料企圖欺騙判別模型。開始的時候這兩個模型都是沒有經過訓練的,這兩個模型一起對抗訓練,互相成長。從而達到兩個模型的能力越來越強,最終達到穩態的效果。
演算法
以生成為例進行說明。假設我們有兩個網路,g(generator)和d(discriminator)。正如它的名字所暗示的那樣,它們的功能分別是:
g是乙個生成的網路,它接收乙個隨機的雜訊z,通過這個雜訊生成,記做g(z)。
d是乙個判別網路,判別一張是不是「真實的」。它的輸入引數是x,x代表一張,輸出d(x)代表x為真實的概率,如果為1,就代表100%是真實的,而輸出為0,就代表不可能是真實的。
在訓練過程中,生成網路g的目標就是盡量生成真實的去欺騙判別網路d。而d的目標就是盡量把g生成的和真實的分別開來。這樣,g和d構成了乙個動態的「博弈過程」。
最後博弈的結果是什麼?在最理想的狀態下,g可以生成足以「以假亂真」的g(z)。對於d來說,它難以判定g生成的究竟是不是真實的,因此d(g(z)) = 0.5。
這樣我們的目的就達成了:我們得到了乙個生成式的模型g,它可以用來生成。
以及在模型收斂時,生成資料具有和真實資料相同的分布(保證了模型效果)。
gan公式:
公式中x表示真實,z表示輸入g網路的雜訊,g(z)表示g網路生成的,d(·)表示d網路判斷是否真實的概率。
例項
以手寫字型(minst)為例 專案位址
訓練
迭代1次:
迭代10次:
迭代50次:
迭代100次:
迭代500次:
生成
總結
gan在影象生成、數字增強等一系列領域都有顯著的成果,其主要亮點在於它使得現有問題從有監督學習慢慢過渡到無監督學習,也可以說是自我監督學習。這種方式才是生活中普遍存在的。不過gan也不是那麼完美,如需要資料量過大:gan的推導,完全依賴基於大量樣本資料的反覆判斷。這對於樣本資料的數量和覆蓋廣度都有嚴苛要求。而且對運算能力的要求也比較高。在相對垂直、小眾的應用領域裡,gan還是比較難以施展手腳。還有就是gan用什麼標準判斷、以何種理論體系來引發判斷,一直以來還都缺乏支撐。準確地說,gan是乙個有充足樣本和指導思想之後的解決方案,但目前解決方案有了,前提條件很多還不具備。在缺乏理論有效指導的情況下,gan很難得出複雜的樣本推導結果,而且錯誤率十分地高。並且進入無監督學習領域也存在著大量門檻。
相關學習資源
人工智障學習筆記 深度學習 1 神經網路
一.神經網路 我們所說的深度學習,其最基礎最底層的模型稱之為 神經網路 neural network 因為我們希望機器能夠像我們人類大腦的神經網路處理事件一樣去解決問題,最終達到 人工智慧 的效果。二.神經元 神經網路的基本單位叫做神經元,是我們人類思考的基礎。機器模擬的神經元模型是乙個包含輸入,輸...
NLP學習筆記15 生成句子
本文屬於nlp學習筆記系列。當乙個模型訓練好後,我們可以利用這個模型來生成一些資料,就是生成模型。例如 生成句子,影象,程式等。當然還有判別模型。語言模型屬於生成模型,所以可以生成句子。下面的例子,假如有個詞庫,然後每乙個詞對應的概率已經訓練好了,然後用unigram來生成乙個句子 由於unigra...
Docker學習筆記3 生成映象
通過編寫dockerfile檔案,我們可以利用docker來製作自己的映象檔案。命令格式如下 docker build t 映象名 dockerfile檔案所在資料夾路徑 t表明後面引數是映象的映象名。執行完該命令就根據dockerfile中的配置生成了我們需要的映象檔案。dockerfile詳解 ...