GAN網絡從入門教程(一)之GAN網絡介紹
稍微的開一個新坑,同樣也是入門教程(因此教程的內容不會是從入門到精通,而是從入門到入土)。主要是為了完成數據挖掘的課程設計,然后就把挖掘榔頭挖到了GAN網絡這里來了。當然,我也是新手上路,如有任何問題,歡迎在評論區留言。
生成式對抗網絡是20年來機器學習領域最酷的想法。 ——Yann LeCun
GAN網絡概要
GAN網絡全稱generative adversarial network,翻譯為生成式對抗網絡,是一種機器學習方法。由Ian J. Goodfello
等人於2014年在Generative Adversarial Nets 論文中提出。其中在GAN網絡中,有兩個模型——生成模型( generative model G),判別模型(discriminative model D)。
a generative model G that captures the data distribution, and a discriminative model D that estimates the probability that a sample came from the training data rather than G
我們以生成圖片為例子,本教程的最終的目標是實現使用GAN網絡生成動漫頭像。
-
G就是一個生成圖片的網絡,它接受一個隨機的噪聲\(z\),然后通過這個噪聲生成圖片,生成的數據記做\(G(z)\)。
-
D是一個判別網絡,判別一張圖片是不是“真實的”(是否是捏造的)。它的輸入參數是\(x\),\(x\)代表一張圖片,輸出\(D(x)\)代表\(x\)為真實圖片的概率,如果為1,就代表絕逼是真實的圖片,而輸出為0,就代表不可能是真實的圖片。
在訓練的過程中,生成網絡G的目標就是生成假的圖片去騙過判別網絡D,而判別網絡D的目標就是能夠分辨出某一張圖片是不是由\(G\)生成的。這就變成了一個博弈的過程。同時G和D的能力也在訓練的過程中逐漸提高。在最理想的情況下, 則就是\(D(G(z)) = 0.5\)。
看到一個比較形象的說法:一個生成器(“藝術家”)學習創造看起來真實的圖像,而判別器(“藝術評論家”)學習區分真假圖像。訓練過程中,生成器在生成逼真圖像方面逐漸變強,而判別器在辨別這些圖像的能力上逐漸變強。當判別器不再能夠區分真實圖片和偽造圖片時,訓練過程達到平衡。
因此,在訓練的過程中,我們會對判別器和生成器進行學習。
判別器的學習
首先我們初始化生成器 G,然后輸入一組隨機向量(Randomly sample a vactor),生成器會根據輸入的向量產生一些圖片,我們把這些圖片標注成 0(假圖片)。同時把已有訓練集中真實的圖片標注成 1(真圖片)。兩者同時丟進判別器 D 中,以此來訓練判別器 D。使得當輸入是真圖片的時候,判別器給高分(分數接近於1),而輸入假圖片的時候,判別器給低分(接近於 0 )。
了解深度學習的同學應該就知道了,我們有標記為1的真實圖片和標注為0的假的圖片,這個時候,我們就可以很輕易的對\(D\)進行訓練(有了\(x\)和\(y\))。
生成器的學習
針對於\(D\)我們有標記為1和0的數據,因此我們可以對其進行訓練。那么對於生成器,有\(x\)(也就是隨機噪聲\(z\)),那么\(y\)在哪里呢?
對於生成器,我們的目的是使得其能夠生成真實的圖片,換句話說,我們是希望生成的圖片能夠騙過\(D\)。那么如何通過判別器來產生所謂的\(y\)??我們可以這樣做:
我們通過隨機向量(噪聲數據)經由生成網絡產生一組假圖片,我們將這些假圖片都標記為 1(也就是說,人為的把假的圖片當作真實的),然后將這些假圖片輸入到判別器中,判別器在對這些圖片進行判別的時候,會發現這些圖片是假的圖片,然后給出低分,這樣就產生了誤差(因為標記的為1,但是判別器給了低分)。
因此,在訓練生成器的時候,這個網絡是串接的。而在訓練生成器的時候,一個很重要的操作就是保持判別器網絡的參數不發生改變,只是把誤差一直方向傳播,傳到生成網絡那塊后更新生成網絡的參數,這樣就完成了生成網絡的訓練了。
在完成生成器的訓練之后,我們又可以產生新的假的圖片去對判別器進行訓練。我們把這個過程稱作為單獨交替訓練。同時要定義一個迭代次數,交替迭代到一定次數后停止即可。
總結
GAN網絡的入門介紹就到這里,下一篇博客將會對GAN網絡的原理進行介紹。數據挖掘殺我!!!