課程筆記 GAN

 · 4 mins read

在閱讀GAN相關paper之前,可能會有一些基礎的知識要先了解,這邊我整理一些李宏毅老師在課堂上的內容筆記。

在此之前,先整理一些數學基礎:

KL Divergence vs Cross Entropy

1. Entropy:

S=ip(xi)logb(xi)

2. Cross Entorpy

事件集合ㄧ事件 xi,相對於真實分佈 A 而言, 分佈B編碼分佈A的平均bit長度(因為分佈機率不均勻,故為期望值)。

H(A,B)=iPA(xi)logPB(xi)

在二分問題中:

PA(x=1)=aPA(x=0)=1a

其中A為真實分佈,故a = 1。

PB(x=1)=bPB(x=0)=1b

若計算 H(A,B)

xi=1PA(xi)logPB(xi)=alogb
xi=0PA(xi)logPB(xi)=(1a)log(1b)

綜合上二式剛好與二分類問題的Maximun Likelihood相同 :

ialogb+(1a)log(1b)

3. Divergence:

 計算分佈差距:

KLDiv(A||B)=iPA(xi)log(PA(xi)PB(xi))
=iPA(xi)log(PA(xi))iPA(xi)log(PB(xi))

由上可觀察出若 PA = PB ,則 KLDiv(A||B)=0

KLDivergence=S(A)H(A,B),而在訓練時 A 為訓練集已給定,故可用 H(A, B)等價於分布差異而做訓練。

Introduction of Generative Adversarial Network (GAN)

Discriminator

  • In each training iteration:
    • Discriminator

      • Sample m examples { x1,x2,.,xm} from database.
      • Sample m noise samples { z1,z2,.,zm } from a distribution.
      • Obtaining generated data { ˜x1,,˜xm }, 其中 \(\tilde x^i = G(z^i)\)
      • Update discriminator parameters θd to maximize ˜V

        • ˜V=1mmi=1logD(xi)+1mmi=1log(1D(˜xi))
        • θdθd+η˜V(θd)
    • Generator

      • Sample m noise samples { z1,z2,.,zm } from a distribution.
      • Update generator parameters θg to maximize ˜V

        • ˜V=1mmi=1log(D(G(zi)))
        • θgθg+η˜V(θg)

Basic Theory

Maximun Likelihood Estimation

  • 給定一real data的distribution Pdata(x)
  • generator的分佈為 PG(x;θ)
  • 目標是找出一組參數 θ 使得 PdataPG 越相近越好。

從真實資料分布 Pdata 取樣出{ x1,,xm },將取樣出的 xi 代入 PG 之後相乘,可得到:

L=mi=1PG(xi;θ)

最後找出可以使 \(L\) 越大越好的\(\theta\)。

Maximun Likelihood Estimation = Minimize KL Divergence

從真實資料分布 Pdata 取樣出{ x1,,xm }。

θ=argmaxθmi=1PG(xi;θ)
=argmaxθmi=1logPG(xi;θ)

上式可解讀為:欲找到一個 θ ,使得從 Pdata 隨機取樣到的 xi 計算其在 PG 中的機率取log後相加可以越大越好。由於在data中要取到某個 xi 也有一對應的機率, 故上式可以視為一種期望值的逼近:

argmaxθExPdata[logPG(x;θ)]
=argmaxθxPdata(x)logPG(x;θ)dx
=argmaxθ(xPdata(x)logPG(x;θ)dxxPdata(x)logPdata(x)dx)

上式最後一項跟 θ 無關,故可視為常數不影響求值,目的是要導入KL Divergence:

=argminθKL(Pdata||PG)

Generator:

假設G是一個network,我們利用G來定義一個機率分佈\(P_G\),如下圖(圖片來自李宏毅老師上課講義)

  • Imgur

而我們的目標是:

G=argminGDiv(PG,Pdata)

其中 Div(PG,Pdata) 代表兩個分部之間的Divergence。

Discriminator

Objective Function for Discriminator:

V(G,D)=ExPdata[logD(x)]+ExPG[log(1D(x))]

Training:

D=argmaxDV(D,G)
V=ExPdata[logD(x)]+ExPG[log(1D(x))]
=xPdata(x)logD(x)dx+xPG(x)log(1D(x))dx
=x[Pdata(x)logD(x)+PG(x)log(1D(x))]dx

以下討論:

maxDV(D,G)=V(D,G)
V=ExPdata[logD(x)]+ExPG[log(1D(x))]
=xPdata(x)logD(x)dx+xPG(x)log(1D(x))dx
=x[Pdata(x)logD(x)+PG(x)log(1D(x))]dx

找一個 D 可以使得上述 V 最大。其中假設 D(x) 可為任意function。故可視為:給定一 x ,找一個 D 使得:

Pdata(x)logD(x)+PG(x)log(1D(x))

有最大值。求最大值,故令 f(D)=alog(D)+blog(1D)

df(D)dD=a×1D+b×11D×(1)=0
a×1D=b×11D
D=aa+b
D(x)=Pdata(x)Pdata(x)+PG(x)

接著,將 D(x)=Pdata(x)Pdata(x)+PG(x) 帶入 V(D,G) :

V(D,G)
=ExPdata[logPdata(x)Pdata(x)+PG(x)]+ExPG[logPG(x)Pdata(x)+PG(x)]
=x[Pdata(x)logPdata(x)Pdata(x)+PG(x)+PG(x)logPG(x)Pdata(x)+PG(x)]dx
=x[Pdata(x)log12Pdata(x)12[Pdata(x)+PG(x)]+PG(x)log12PG(x)12[Pdata(x)+PG(x)]]dx
=2log2+x[Pdata(x)logPdata(x)12[Pdata(x)+PG(x)]+PG(x)logPG(x)12[Pdata(x)+PG(x)]]dx
=2log2+KL(Pdata||Pdata+PG2)+KL(PG||Pdata+PG2)
=2log2+2JSD(Pdata||PG)

Jensen-Shannon divergence JSD :

JSD(P||Q)=12D(P||M)+12D(Q||M),M=12(P+Q)

Discriminator + Generator

前面提到,在Generator要解的目標函數式

G=argminGDiv(PG,Pdata)

因為也提到,在Discriminator的目標函數:

D=argmaxDV(D,G)

且已推導出:

maxDV(D,G)=V(D,G)
=2log2+2JSD(Pdata||PG)

則可把 $Div(P_G, P_{data}) 代換成:

maxDV(D,G)

得到:

G=argminGmaxDV(D,G)

Imgur

In Practice

Sample m examples { x1,x2,.,xm} from database.

Generated data { ˜x1,,˜xm }

實作上無法以積分計算期望值,故 V=ExPdata[logD(x)]+ExPG[log(1D(x))]會用下式:

˜V=1mmi=1logD(xi)+1mmi=1log(1D(˜xi))

觀察發現 Maximize ˜V 可等價於 Minimize 二元分類的 Cross Entropy。D為一Binary Classifier,sigmoid output 0~1之間。一類為real一類為fake。

Algorithm

Imgur