GAN对抗生成网络原始论文理解笔记
文章目錄
- 論文:Generative Adversarial Nets
- 符號意義
- 生成器(Generator)
- 判別器(Discriminator)
- 生成器和判別器的關系
- GAN的訓練流程簡述
- 論文中的生成模型和判別模型
- GAN的數學理論
- 最大似然估計轉換為最小化KL散度問題
- 定義PGP_GPG?
- 全局最優
論文:Generative Adversarial Nets
符號意義
- G()表示對生成器功能的一個封裝函數
- D()表示對判別器功能的一個封裝函數
- x表示真實數據
- z表示含噪音的數據
- x ̄\overline xx表示G(z),將噪音數據輸入到生成器得到的結果
- θgθ_gθg?表示生成器的參數
- θdθ_dθd?表示判別器的參數
- Pdata(x)P_{data}(x)Pdata?(x)表示真實數據分布
- PG(x;θ)P_G(x;\theta)PG?(x;θ)表示生成器生成的數據分布
生成器(Generator)
狹義的生成器就是輸入一個向量,通過生成器,輸出一個高維向量(代表圖片、文字等)
其中輸入向量的每一個維度都代表一個特征。如下圖示例:
判別器(Discriminator)
狹義的判別器就是輸入數據(生成器產物或者真實數據),通過判別器,輸出一個標量數值,輸出的數值越大,則代表這個數據越真實。如下圖示例(假設輸出數值在0-1之間):
生成器和判別器的關系
結合圖來理解生成器和判別器的關系:
- 首先輸入噪音讓生成器v1生成圖片
- 之后輸入不同來源的圖片到判別器v1,由判別器v1來判斷圖片是真實圖片還是生成器生成的圖片
- 然后為了騙過判別器,生成器v1升級為v2,再生成新的圖片。
- 再將不同來源的圖片輸入到升級的判別器v2來判斷圖片是真實圖片還是生成器生成的圖片
- 依次循環下去,直到判別器無法區分圖片來源,也就是生成器產生的圖片真實度越來越接近真實圖片的真實度。
GAN的訓練流程簡述
- 在每個訓練迭代器中:
- 先訓練判別器
- 從數萬張圖片(數據集)中采樣出m個樣本,即{ x1,x2,...,xm{x_1,x_2,...,x_m}x1?,x2?,...,xm?}
- 隨機從一個分布(高斯分布或均勻分布)里采樣出有噪音的m個樣本,即{z1,z2,...,zm{z_1,z_2,...,z_m}z1?,z2?,...,zm?}
- 通過生成器獲得生成的數據,即{ x ̄1,x ̄2,...,x ̄m{\overline x_1,\overline x_2,...,\overline x_m}x1?,x2?,...,xm?},其中x ̄i\overline{x}_ixi?=G(ziz_izi?)
- 更新判別器的參數使v ̄\overline vv最大。
- v ̄=1m[logD(xi)+log(1?D(x ̄i))]\overline v=\frac{1}{m}[logD(x_i)+log(1-D(\overline x_i))]v=m1?[logD(xi?)+log(1?D(xi?))]
- 梯度下降更新參數θdθ_dθd?
- 再訓練生成器
- 隨機從一個分布(高斯分布或均勻分布)里采樣出有噪音的m個樣本,即{z1,z2,...,zm{z_1,z_2,...,z_m}z1?,z2?,...,zm?}
- 更新生成器的參數使v ̄\overline vv最小
- v ̄=1m[logD(xi)+log(1?D(x ̄i))]\overline v=\frac{1}{m}[logD(x_i)+log(1-D(\overline x_i))]v=m1?[logD(xi?)+log(1?D(xi?))]
- 梯度下降更新參數θgθ_gθg?
- 先訓練判別器
當訓練判別器的時候,就相當于把生成器固定住了,當訓練生成器的時候,就相當于把判別器固定住了,于是就有對上述關于v ̄\overline vv的講解:
對于判別器,目標是提升辨認圖片來源的能力,對真實圖片輸出大的數值,所以D(xi)D(x_i)D(xi?)越大越好,D(x ̄i)D(\overline x_i)D(xi?)越小越好,也就是v ̄\overline vv越大越好。
對于生成器:目的是希望自己生成的圖片越來越真實,也就是要讓D(x ̄i)D(\overline x_i)D(xi?)越大越好,也就是v ̄\overline vv越小越好(另一項當成常數即可)。
論文中的生成模型和判別模型
GAN提出了兩個模型:
-
生成模型(Generator)
生成模型主要是用來生成數據分布,目的是盡量與原數據分布接近。 -
判別模型(Discriminator)
判別模型主要是用來判斷樣本是來自真實分布還是生成模型生成的分布。目的是能夠更加好地區分哪些樣本來自真實數據,哪些樣本來自生成模型的數據,越真實的數據得到的結果越大。
用數學來表示訓練過程中兩模型的變化,如下圖:
綠色線表示真實數據的分布,藍色線表示生成模型輸出的數據分布,紅色線表示判別器(越高就表示給的分數越大)
GAN的數學理論
最大似然估計轉換為最小化KL散度問題
真實數據的分布是Pdata(x)P_{data}(x)Pdata?(x) ,我們定義一個分布PG(xi;θ)P_G(x_i;\theta)PG?(xi?;θ) ,我們想要找到一組參數θ\thetaθ,使得PG(xi;θ)P_G(x_i;\theta)PG?(xi?;θ)越接近Pdata(x)P_{data}(x)Pdata?(x)越好。比如說,PG(xi;θ)P_G(x_i;\theta)PG?(xi?;θ) 如果是一個高斯混合模型,那么θ\thetaθ就是均值和方差。
采用極大似然估計方法,我們從真實數據分布 Pdata(x)P_{data}(x)Pdata?(x)里面取樣 m 個點,x1,x2,...,xm{x_1,x_2,...,x_m}x1?,x2?,...,xm?,根據給定的參數 θ 我們可以算出某個x在該分布的概率 PG(xi;θ)P_G(x_i;θ)PG?(xi?;θ),即:
也可以將極大似然估計等價于最小化KL散度,我們需要找一個最大的θ\thetaθ使得PG(xi;θ)P_G(x_i;\theta)PG?(xi?;θ)接近Pdata(x)P_{data}(x)Pdata?(x),就有下列式子:
將其化簡,得:
由于需要最大化概率的θ\thetaθ,也就是可以近似等價于原分布的期望,可得:
然后再展開成期望定義的形式,并且加減一項常數項(不含θ\thetaθ),不影響結果,有:
最終化成了最小化KL散度的形式。
其中KL散度用來衡量兩種概率分布的相似程度,越小則表示兩種概率分布越接近。形式為:
所以機器學習中的最大似然估計,其實就是最小化我們要尋找的目標分布PGP_GPG?與PdataP_{data}Pdata?的KL散度。
定義PGP_GPG?
如何來定義PGP_GPG?呢?
以前是采用高斯分布來定義的,但是生成的圖片會很模糊,采用更復雜的分布的話,最大似然會沒法計算。所以就引進了Generator來定義PGP_GPG?,如下圖:
全局最優
優化目標是最小化PGP_GPG?與PdataP_{data}Pdata?之間的差異:
雖然我們不知道PGP_GPG?與PdataP_{data}Pdata?的公式,但是我們可以從這兩個分布中采樣出一些樣本。
對PGP_GPG?,我們從給定的數據集中采樣出一些樣本。(該步驟對應訓練判別器流程步驟1)
對PdataP_{data}Pdata?,我們隨機采樣出一些向量,經過Generator輸出一些圖片。(該步驟對應訓練判別器流程步驟2,3)
之后經過Discriminator我們就可以計算PGP_GPG?與PdataP_{data}Pdata?的收斂。Discriminator的目標函數是:
該目標函數對應訓練判別器的損失函數,意思是假設x是從PdataP_{data}Pdata? 里面采樣出來的,那么希望D(x)越大越好。如果是從 PGP_GPG?里面采樣出來的,就希望它的值越小越好。x~PdataP_{data}Pdata?表示該均值的x都來自PdataP_{data}Pdata?分布。
我們的目標是讓判別器無法區分PGP_GPG?與PdataP_{data}Pdata?,也就是讓它沒辦法把V(G,D)調大。接下來從數學上去解釋這個結論。
給定生成器,我們要找到能最大化目標函數V(D,G)的D*:
現在我們把積分里面的這一項拿出來看:
PdatalogD(x)+PG(x)log(1?D(x))P_{data}logD(x)+P_G(x)log(1-D(x))Pdata?logD(x)+PG?(x)log(1?D(x))
我們想要找到一組參數D*,使這一項最大。把式子簡寫一下,將PdataP_{data}Pdata?用a表示,PGP_GPG?用b表示,得:
f(D)=alog(D)+blog(1?D)f(D)=alog(D)+blog(1-D)f(D)=alog(D)+blog(1?D)
對D求導得:
df(D)dD=a?1D+b?11?D?(?1)\frac{df(D)}{dD}=a*\frac1D+b*\frac1{1-D}*(-1)dDdf(D)?=a?D1?+b?1?D1??(?1)
另這個求導結果為0,得:
D?=aa+bD^*=\frac a{a+b}D?=a+ba?
將a,b代回去,得:
D?=Pdata(x)Pdata(x)+PG(x)D^*=\frac {P_{data}(x)}{P_{data}(x)+P_G(x)}D?=Pdata?(x)+PG?(x)Pdata?(x)?
再將這個D帶入V(G,D*)中,然后分子分母同時除以2,之后可以化簡為JS散度形式(KL散度的變體,解決了KL散度非對稱的問題),得:
當PdataP_{data}Pdata?=PGP_GPG?時,JS散度為0,值為-2log2,達到最優(也就是讓判別器沒辦法把V(G,D)調大)。這是從正向證明當PdataP_{data}Pdata?=PGP_GPG?時達到最優,還需從反向證明才可以得出當且僅當PdataP_{data}Pdata?=PGP_GPG?才可以達到的全局最優。
反向證明很容易:假設PdataP_{data}Pdata?=PGP_GPG?,那么D*=12\frac 1221?,再直接代入V(G,D*)即可得到-2log2。
所以,當且僅當PdataP_{data}Pdata?=PGP_GPG?才可以達到的全局最優。也就是,當且僅當生成分布等于真實數據分布時,我們取得最優生成器。
我們從頭整理一下,我們的目標是找到一個G*,去最小化PdataP_{data}Pdata?,PGP_GPG?的差異,也就是:
G?=argminGDiv(PG,Pdata)G^*=argmin_GDiv(P_G,P_{data})G?=argminG?Div(PG?,Pdata?)
但是這個差異沒法之間去算,所以就用一個判別器來計算這兩個分布的差異:
D?=argmaxDV(D,G)D^*=argmax_DV(D,G)D?=argmaxD?V(D,G)
所以優化目標就變為:
G?=argminGmaxDV(G,D)G^*=argmin_Gmax_DV(G,D)G?=argminG?maxD?V(G,D)
這個看起來很復雜,其實直觀理解一下,如下圖,我們假設已經把生成器固定住了,圖片的曲線表示,紅點表示固定住G后的 maxD(G,D)max_D(G,D)maxD?(G,D) , 也就是 PGP_GPG? 和 PdataP_{data}Pdata? 的差異。而我們的目標是最小化這個差異,所以下圖的三個網絡中, G3G_3G3? 是最優秀的。
參考的文章:
GAN論文閱讀——原始GAN(基本概念及理論推導)
生成對抗網絡(GAN) 背后的數學理論
總結
以上是生活随笔為你收集整理的GAN对抗生成网络原始论文理解笔记的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MSDE使用说明文档
- 下一篇: 联想笔记本电脑如何进入bios如何进入电