1. 程式人生 > 實用技巧 >GAN網路從入門教程(一)之GAN網路介紹

GAN網路從入門教程(一)之GAN網路介紹

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網路的原理進行介紹。資料探勘殺我!!!

參考