back to index
GAN Lecture 4 (2018): Basic Theory

link |
那上週我們講了什麼呢?上週我們講了Gan的直觀的想法。
link |
那今天呢,我們要來講Gan背後的理論。
link |
那我們今天要講的是當初2014年Ian Goodfellow在propose Gan的時候他的想法。
link |
那等一下可以仔細聽看看,聽看看說跟我們上週講的Gan的直觀的想法裡面,
link |
有沒有矛盾的地方,其實是有一些地方還不矛盾的。
link |
至今仍然沒有好的solution,沒有好的說法可以解決。
link |
好,如果大家沒有什麼問題要問的話呢,
link |
那我們就來講一下這個Gan背後的理論,當初Ian Goodfellow是怎麼說的。
link |
好,那這個是我們上週說的,要大家在這個作業三之一裡面,
link |
要讓Gan做的事情,就讓自己看了很多動畫的圖以後呢,
link |
那我們知道說,Gan他要做的事情,就是根據很多example去進行生成。
link |
那所謂生成這件事情,到底是一個什麼樣的問題呢?
link |
而假設我們今天要生成的東西是image,那我們用X來代表一張image。
link |
那每一個image都是high dimensional,高維空間中的一個點。
link |
那假設今天產生64x64的image,它是64x64維空間中的一個點。
link |
那這邊呢,為了畫圖方便,我們假設每一個X就是二維空間中的一個點。
link |
所以它實際上呢,是高維空間中的一個點。
link |
好,那我們現在要產生的東西,比如說我們要產生的image,
link |
它其實有一個固定的distribution,我們這邊呢,寫成pdata.x。
link |
它有一個固定的distribution,什麼意思呢?
link |
在這整個image的space裡面,在這整個image所構成的高維空間中,
link |
其實只有非常少的部分,其實只有一小部分,
link |
它sample出來的image看起來像是人臉。
link |
在多數的空間中sample出來的image,它都不像是人臉。
link |
舉例來說,在這個圖上的例子裡面,可能只有藍色的這個區域,
link |
你去sample出x,去sample一個image,它看起來呢,像是人臉。
link |
舉例來說,你在這個地方sample呢,你看起來的圖片長得是這個樣子。
link |
那你在其他地方sample呢,看起來的圖片,看起來就不像是人臉。
link |
所以假設我們今天要生存的x是人臉的話,它有一個固定的distribution,
link |
這個distribution在藍色的這個區域,它的機率是高的,
link |
我們要機器去找出這個distribution,
link |
而這個distribution它到底長什麼樣子,我們實際上是不知道的。
link |
我們可以收集很多的image,我們可以收集很多的x,
link |
知道說x可能在某些地方分布比較高,但是要我們把它的式子找出來,
link |
所以現在GAN做的事,一個generative model做的事情,
link |
就是要找出這個distribution。
link |
那在有GAN之前,我們怎麼做generative這件事呢?
link |
我們是用maximum likelihood estimation,
link |
那其實maximum likelihood estimation我們在這個,
link |
之前Machine Learning的時候有講過了,這邊只是一個很快的複習。
link |
而我們現在有一個data的distribution,它是data的base,
link |
這個distribution實際上長什麼樣子,
link |
就是這個distribution它實際上它的formulation長什麼樣子,
link |
我們可以從裡面sample它,所謂從這個distributionsample它的意思就是,
link |
那你就是從你的data base裡面sample出image,
link |
這個就是從這個distribution裡面sample一些data出來。
link |
我們可以sample它,但是我們不知道它長什麼樣子。
link |
好,那接下來我們要自己去找一個distribution,
link |
這個distribution寫成P下標Geobase,
link |
那這個distribution是由一組參數Theta所操控的,
link |
這個distribution舉例來說,假設它是一個Gaussian mixture的model,
link |
那這個Theta指的就是那個Gaussian的mean跟variance。
link |
那我們要去調整這個Gaussian的mean跟variance,
link |
使得我們得到的這個distribution Pg跟真實的distribution Pdata越接近越好。
link |
所以雖然我們不知道Pdata長什麼樣子,
link |
我們只能夠從Pdata裡面去sample,
link |
但是我們希望這個Pg,我們可以找一個這個Theta,
link |
假設你是用maximum likelihood的話,怎麼做呢?
link |
首先我們可以從Pdata裡面sample一些東西出來,
link |
好,接下來呢,對每一個sample出來的x,
link |
我們都可以計算它的likelihood,
link |
所謂可以計算它的likelihood的意思是說,
link |
給定一組參數Theta,我們就知道Pg這個probability的distribution長什麼樣子。
link |
知道這個probability的distribution長什麼樣子,
link |
我們就可以計算從這個distribution裡面sample出某一個xi的機率,
link |
我們可以計算出這個likelihood。
link |
我們要找出一個Theta,使得Pg跟Pdata越接近越好。
link |
我們希望這些從Pdata裡面sample出來的example,
link |
如果是用Pg這個distribution來產生的話,
link |
那每一筆data它從Pg裡面產生出來的likelihood,
link |
就得到一個total的likelihood,
link |
那我們希望這個total的likelihood越大越好。
link |
那怎麼讓total的likelihood越大越好呢?
link |
你就是要去找一個Theta star,
link |
假設你是一個Gaussian mixture model,
link |
你就可能希望它的mean落在這些地方,
link |
這個Gaussian mixture model,
link |
那這個是maximum likelihood,
link |
我記得我們在machine learning課裡面講generating model的時候,
link |
好,那maximum likelihood,
link |
這邊給你maximum likelihood的另外一個解釋。
link |
這個maximum likelihood,
link |
它等同於minimizeKL的divergence。
link |
我們說在maximum likelihood裡面,
link |
我們從Pdata裡面sample出Mvdata,
link |
我們就可以計算每一個x被sample出來的機率,
link |
這個是我們要去maximize的對象。
link |
取一個log不影響你找出來的最好的θ。
link |
Summation over i等於1到M,
link |
Summation over dE比example到dM比example,
link |
這件事情其實就是在approximate,
link |
從Pdata這個distribution裡面sample x出來。
link |
從Pdata這個distribution裡面sample x出來,
link |
它要maximize的對象其實就是maximize
link |
maximize這一項的expected value,
link |
那你這個expectation的distribution
link |
我們可以把這個expectation這一項把它展開,
link |
這個x是從Pdata裡面sample出來的,
link |
從Pdata裡面sample出來的意思就是說,
link |
接下來,加一項看起來沒有什麼用的東西,
link |
maximum likelihood它就是KL divergence,
link |
所以這邊有積分Pdata of x,
link |
log Pg減掉log Pdata,
link |
總之這個式子它就是Pdata跟Pg的KL divergence,
link |
去maximize likelihood,
link |
去minimize Pdata跟Pg的KL divergence,
link |
所謂的maximum likelihood,
link |
我們今天要找一個generated model,
link |
去maximum likelihood,
link |
這個maximum likelihood這件事情,
link |
minimize你的generated model,
link |
所定義的這個distribution Pg,
link |
Pdata之間的KL divergence,
link |
假設我們的Pg只是一個Gaussian mixture model,
link |
我們希望Pg是一個general distribution,
link |
它可以是比Gaussian更複雜的東西,
link |
換成一個比Gaussian更複雜的東西,
link |
它是一個Gaussian mixture model,
link |
你可以計算它被sample出來的機率,
link |
它可能是一個neural network,
link |
那你就沒有辦法計算它的likelihood,
link |
那其實讓machine自動的產生成東西,
link |
比如說做image generation,
link |
做了很多image generation的task,
link |
好像image generation是這幾年才有的東西,
link |
image generation這件事情呢,
link |
用Gaussian mixture model,
link |
那每個image其實就是高維中間一個data point,
link |
然後你就可以用一個Gaussian mixture model,
link |
去maximize產生那些image likelihood,
link |
如果你用Gaussian mixture model,
link |
它是高維空間中的一個manifold,
link |
大家可能知道說image在高維空間中,
link |
它其實是高維空間中的一個低維的manifold,
link |
所以如果用Gaussian mixture model,
link |
就是你用Gaussian mixture model,
link |
你不管怎麼調你的mean跟variance,
link |
它就不像是你的target distribution,
link |
所以我們需要更generalize,
link |
又有更generalize的方式呢,
link |
來learn generation這件事情,
link |
在generation of the personal network裡面呢,
link |
我們的generator就是一個network,
link |
一個network它怎麼被看作是一個probability的distribution,
link |
好我們知道說我們generator就是一個network,
link |
你input一個從某一個distribution sample出來的noise z,
link |
你input一個隨機的vector z,
link |
如果我們把這個generator G看作是一個function的話,
link |
如果你今天是做image generation的話呢,
link |
是從某一個prior distribution,
link |
比如說是從一個normal distribution裡面sample出來的,
link |
你把它丟到這個generator裡面,
link |
是從一個Gaussian distribution裡面sample出來的,
link |
把這些從Gaussian distribution裡面sample出來的z,
link |
通通通過去得到另外一大堆sample,
link |
你得到的就會是另外一個distribution,
link |
那雖然input是一個normal distribution,
link |
是一個單純的Gaussian distribution,
link |
但是你通過這個generator以後,
link |
因為這個generator是一個network,
link |
所以你今天把通過這個generator,
link |
它可以是一個非常複雜的distribution,
link |
這個prior distribution應該要設成什麼樣子呢,
link |
在文獻上有人會用normal distribution,
link |
有人會用uniform distribution,
link |
那你可以在作業裡面verify一下說,
link |
其實這邊prior distribution用哪種distribution,
link |
因為generator它是一個network,
link |
一個hidden layer的network,
link |
它就可以approximate任何function,
link |
那更何況是有多個hidden layer的network,
link |
它可以approximate非常複雜的function,
link |
所以今天就算是你的input distribution,
link |
是一個非常簡單的distribution,
link |
它也可以把這個簡單的distribution,
link |
我這邊如果是input normal distribution,
link |
會不會對alpha來說有很大的限制,
link |
因為通過一個generator以後,
link |
你可以把一個單純的normal distribution,
link |
所定義出來的distribution pg,
link |
跟我們的data的distribution pdata,
link |
如果要寫一個optimization formulation的話,
link |
這個formulation看起來是這個樣子,
link |
我們要找一個generator g,
link |
可以讓它所定義出來的distribution pg,
link |
pdata之間的某種divergence,
link |
如果是maximum likelihood的話,
link |
就是要minimize KL divergence,
link |
我們minimize的不是KL divergence,
link |
就代表說反正它是某一種divergence,
link |
這個generator定義出一個distribution pg,
link |
可以跟我們的pdata的divergence,
link |
假設你能夠計算這個divergence,
link |
你要找一個g去minimize這個divergence,
link |
那不就只是gradient descent,
link |
用gradient descent就可以做了對不對,
link |
你要怎麼計算出這個divergence呢,
link |
pdata它的formulation,
link |
它並不是什麼Gaussian distribution,
link |
它的formulation我們是不知道的,
link |
假設pg跟pdata它的formulation,
link |
我們其實帶進那個divergence的formulation裡面,
link |
我們其實就可以算出它的divergence是多少,
link |
然後我們就用gradient descent,
link |
去minimize它的divergence,
link |
pg跟pdata它的formulation,
link |
它formulation是不知道的,
link |
怎麼去計算它的divergence,
link |
去minimize它的divergence,
link |
minimize divergence這件事情的,
link |
我們不知道pg跟pdata的distribution,
link |
但是我們可以從這兩個distribution裡面,
link |
去sample distribution出來呢,
link |
你就是把你的database拿出來,
link |
然後從裡面sample很多image出來,
link |
這個就是從pdata這個distribution裡面做sample,
link |
它是由你的generator所定義的,
link |
那我們在使用這個generator的時候,
link |
我們是從某一個prime distribution裡面,
link |
去sample一大堆的vector,
link |
每一個vector就會產生一張image,
link |
所以所謂的從pg裡面做sample,
link |
其實就是random sample一個vector,
link |
丟到generator裡面產生一張image,
link |
所以我們可以從pdata裡面做sample,
link |
我們也可以從pg裡面做sample,
link |
我們可以從pg和pdata做sample,
link |
我們要怎麼知道這兩個distribution的divergence呢,
link |
我們可以來量這兩個distribution間的divergence,
link |
是從pdata裡面sample出來的東西,
link |
是從pg裡面sample出來的東西,
link |
我們去訓練一個discriminator,
link |
所謂訓練discriminator的意思就是,
link |
你去訓練一個discriminator,
link |
pdata跟pg他們之間的divergence有多大,
link |
我們要訓練一個discriminator,
link |
我們是怎麼訓練一個discriminator的呢,
link |
我們會寫一個objective function,
link |
我們會寫一個objective function B,
link |
那這個objective function它跟兩項有關,
link |
一個是跟你的generator有關,
link |
一個是跟你的discriminator有關,
link |
那我們在train這個discriminator的時候呢,
link |
我們只是去調這個discriminator的參數,
link |
想辦法去maximize後面這一項,
link |
假設x是從pdata裡面sample出來的,
link |
那我們希望log d of x越大越好,
link |
也就是我們希望discriminator的output,
link |
假設x是從pdata裡面sample出來的,
link |
我們就希望這個d of x越大越好,
link |
反之假設x是從generator sample出來的,
link |
那因為我們要maximize B這一項,
link |
所以我們是要maximize第一項,
link |
而如果x是從pg裡面sample出來的,
link |
那我們要maximize log 1-d of x,
link |
maximize log 1-d of x,
link |
就是要maximize 1-d of x,
link |
也就是要minimize d of x,
link |
所以x如果是從pg裡面sample出來的,
link |
它可以maximize這個objective function,
link |
那其實如果你之前的machine learning有學通的話,
link |
下面這個optimization的式子,
link |
跟train一個binary classify的式子,
link |
假設你今天要train一個logistic regression的model,
link |
logistic regression model是一個binary classifier,
link |
然後你就把p data當作是class 1,
link |
然後你train一個logistic regression model,
link |
你會發現你的objective function,
link |
所以今天這個discriminator在做的事情,
link |
跟一個binary classifier在做的事情,
link |
discriminator就是一個binary classifier,
link |
然後這個binary classifier,
link |
它是在minimize cross entropy,
link |
我們之前講過binary classifier,
link |
是要minimize cross entropy,
link |
不能minimize mean square error,
link |
要minimize cross entropy,
link |
如果你minimize cross entropy的話,
link |
你其實就是在解這個optimization的problem,
link |
當我們解完這個optimization的problem的時候,
link |
或者是得到一個最大的objective value,
link |
我們今天這邊並不是minimize loss,
link |
而是maximize一個objective function,
link |
這個b是我們的objective value,
link |
去maximize這個objective function,
link |
去maximize這個objective value,
link |
這個maximize的objective value,
link |
d可以達到的objective value,
link |
這個value其實會跟js divergence,
link |
它其實就是js divergence,
link |
但是我們可以給你一個非常直觀的解釋,
link |
它應該跟某一個divergence是有關係的,
link |
假設我們現在sample出來的data,
link |
對一個binary classifier來說,
link |
因為對一個binary classifier,
link |
也就是discriminator來說,
link |
在training data上的loss,
link |
你在training data上的loss壓不下去,
link |
就是我們剛才看到的objective的value,
link |
所以如果今天對一個discriminator來說,
link |
它很難達到很大的objective的value,
link |
那意味著這兩堆data的divergence是小的,
link |
所以最後你可以達到最好的objective的value,
link |
跟divergence是會有非常緊密的關係的,
link |
那對discriminator來說,
link |
它就可以輕易地分辨這兩堆data的不同,
link |
它可以輕易地讓你的objective value,
link |
也就是這個V的value,變得很大,
link |
所以當V的value變得很大的時候,
link |
從pdata裡面generate出來的東西,
link |
和從pggenerate出來的東西,
link |
所以discriminator就可以輕易地分辨它的不同,
link |
discriminator就可以輕易地maximizeobjective的value,
link |
為什麼這個objective value跟divergence是有關係的,
link |
那個objective value我們就寫在右上角,
link |
找一個discriminator d,
link |
好,怎麼maximize這個式子呢?
link |
把本來expectation換成積分,
link |
從pdata裡面sample x出來,
link |
因為假設d of x是一個network的話,
link |
network除非它的neuron無窮多,
link |
不然它其實也沒有辦法變成任何的function,
link |
不然你也沒有辦法變成任何的function,
link |
假設d of x可以是任意的function的話,
link |
你可以assign給d of x任何的值,
link |
你可以assign給d of x1任何的值,
link |
你可以assign給d of x2任何的值,
link |
這個時候假設你要maximize這一項的話,
link |
這邊是p beta of x log d of x,
link |
加上p g log 1-d of x,
link |
你都可以assign給它一個不同的d of x,
link |
你就可以分開為它找一個最好的d of x,
link |
怎麼找一個d去maximize這個式子呢?
link |
可以用,你就算求一下它的gradient,
link |
先找出它的critical point,
link |
什麼樣的d它是critical的point,
link |
把有d star的數量挪到同一邊去,
link |
假設我們現在d star of x的值,
link |
是pθ of x除以pθ of x加pg of x,
link |
它現在是一個local maxima,
link |
也不是一個saddle point,
link |
我們的objective function的值,
link |
這一項其實就是js divergence,
link |
d star它的formulation就寫成這個樣子,
link |
好,我們把d star帶到這裡面去,
link |
我們把這個d of x用p data,
link |
這邊是對p data sample x,
link |
看起來像是js divergence,
link |
假設我們已經有一個generator g,
link |
我們找到了最佳的discriminator d,
link |
我們找到最佳的discriminator,
link |
當我們找到最佳的d star的時候,
link |
d這個objective function啊,
link |
p data of x乘上log p data of x,
link |
這個p data跟二分之一p data跟p g的平均的k l divergence,
link |
或許你比較常聽過k l divergence,
link |
或者是inverse k l divergence,
link |
不常聽過js divergence,
link |
它就是p data跟p g的某一種divergence,
link |
如果今天p data跟p g它們距離的越遠,
link |
如果今天我們找到一個最佳的d star,
link |
加上兩倍的p data和p g的js divergence,
link |
假設我們認一個discriminator,
link |
我們寫出了某一個objective function,
link |
我們去maximize那個objective function以後,
link |
最後可以maximize那個objective function,
link |
我們最後maximize的那個value,
link |
其實就是p data跟p g的js divergence,
link |
當我們在train一個discriminator的時候,
link |
當我們在train一個discriminator的時候,
link |
我們想做的事情就是去evaluate,
link |
p data跟p g這兩個distribution,
link |
它們之間的這個js divergence,
link |
如果你今天定的這個objective function,
link |
你就是在量js divergence,
link |
如果把那個objective function寫的不一樣,
link |
那你就可以量其他的各種不同的divergence,
link |
它去minimize p g跟p data的divergence,
link |
我們今天寫出一個objective function,
link |
找一個d去maximize這個式子,
link |
它就是p g和p data之間的divergence,
link |
所以我們現在就可以把divergence這一項,
link |
所以我們現在要找一個generator,
link |
你實際上要解這樣一個optimization的problem,
link |
你要解一個minmax的problem,
link |
這個optimization的problem裡面,
link |
它有一個discriminator,
link |
假設世界上只有三個generator,
link |
假設我們要選一個generator,
link |
去minimize這個objective function,
link |
我們現在可以選的generator,
link |
假設我們選了G1這個generator的話,
link |
假設你的generator固定是G1,
link |
但是你的discriminator,
link |
它可以是不同的discriminator,
link |
我們假設discriminator,
link |
代表你選擇了不同的discriminator,
link |
實際上discriminator是一個neural network,
link |
代表你選擇了不同的discriminator,
link |
你選擇不同的discriminator的時候,
link |
你選擇不同的discriminator的時候,
link |
我們在給定一個generator的時候,
link |
我們要找一個discriminator,
link |
假設我們現在固定我們的generator是G1的時候,
link |
假設我們固定我們的generator是G1的時候,
link |
那哪一個discriminator可以讓V of GD最大呢?
link |
那個是落在這個這裡的discriminator,
link |
落在這裡的discriminator,
link |
落在這裡的discriminator,
link |
去minimize最大的discriminator可以找到的value,
link |
它可以最小化最大的discriminator得到的value,
link |
它可以minimize這個V of GD,
link |
用不同的最大的d可以達到的value,
link |
剛才按投影片的時候已經不小心按到了,
link |
假設這是我們optimization的problem,
link |
我們現在要解這個optimization的problem,
link |
你覺得G1是正確選擇的同學舉手一下,
link |
它可以minimize上面這個四個同學舉手一下,
link |
假設你覺得G2可以minimize上面這個四個同學舉手一下,
link |
你覺得G3可以minimize上面這個四個同學舉手一下,
link |
代表說你了解這個前面加min,後面又加max,
link |
好,那我們現在找出來的這個G star,
link |
其實就代表了G1的這個generator,
link |
它所generate出來的distribution,
link |
就代表G2的這個generator,
link |
就代表G3的這個generator,
link |
它跟那個data的divergence是這麼大,
link |
G2它所定的distribution,
link |
跟data之間的divergence是這麼大,
link |
G3它所定的distribution,
link |
跟data之間的divergence是這麼大,
link |
要minimize我們的divergence,
link |
我們就是要想辦法解這個minmax的problem,
link |
那這個minmax的problem,
link |
你去train generator跟discriminator,
link |
去update discriminator,
link |
我們固定住discriminator,
link |
接下來去update generator,
link |
就是在解這個minmax的problem,
link |
在解這個minmax的problem,
link |
為什麼要解這個minmax的problem,
link |
解這個minmax的problem的目的,
link |
就是要minimize你的generator,
link |
跟你的data之間的jsdivergence,
link |
那你就是minimize其他的divergence,
link |
那為什麼下面這一個algorithm,
link |
是在解這一個optimization的problem呢?
link |
是在解這個optimization的problem,
link |
假設你要解這個optimization的problem的話,
link |
V of GD這個式子看起來有點複雜,
link |
所以讓這個V of GD的值越大越好,
link |
你要找一個最好的generator G,
link |
它可以minimize L of G,
link |
它就是跟train一般的network是一樣的,
link |
就是用gradient descent來解它,
link |
所以你用gradient descent來解它,
link |
算這個theta G對L of G的gradient,
link |
然後用gradient descent去update theta G,
link |
那你就可以minimize這一個式子,
link |
你就可以optimize這一個optimization的problem,
link |
因為你今天要算這個L of G的gradient,
link |
L of G這個式子裡面如果有max,
link |
學到一個max out network,
link |
max out network裡面也有max的operation,
link |
但它顯然是有辦法用gradient descent解的,
link |
我們現在假設有一個function f of x,
link |
它裡面是有max的operation的,
link |
我們來看一下有max的operation的這種function,
link |
它裡面有max的operation,
link |
它是對f1,f2和f3這三個function裡面,
link |
它是f1,f2,f3裡面取大的那個,
link |
如果f1比f2,f3大的話就取f1,
link |
如果f2比f1,f3都大的話就取f2,
link |
你算出來的微分就等同於是在對f1做微分,
link |
你算出來的微分就等同於是在對f2做微分,
link |
你算出來的微分就等同於是在對f3做微分,
link |
所以今天假如你的這個function裡面,
link |
你只是看說現在在f1,f2,f3裡面哪一個人最大,
link |
你就可以用gradient descent去optimize這樣的式子,
link |
舉例來說假設你要用gradient descent,
link |
去optimize這個f of x,
link |
假設initialize的時候在這個地方,
link |
算一下它的gradient就向右移,
link |
本來是在這個region裡面是f1最大,
link |
這個時候你算出來的微分就會變成是f2的微分,
link |
就算是我們的objective function裡面,
link |
好,那所以就回到了我們現在要解的這個optimization problem,
link |
如果一個optimization problem裡面,
link |
你的loss function是有max的,
link |
對那個max的function做微分,
link |
落在這個中間這個f2這個function是最大的region,
link |
把它套用到我們的這個要optimize的這個midmax problem裡面,
link |
然後接下來我們要算G0對L2G的gradient,
link |
但是在算G0對L2G的gradient之前,
link |
d0 star可以讓V of G0最大,
link |
就如果我們今天這個d帶d0 star的話,
link |
你這件事情你可以用gradient asset,
link |
它可以maximize這個objective function,
link |
找到d可以maximize這個objective function以後,
link |
接下來你就可以把θG對這一項算gradient,
link |
你就得到新的generator G1,
link |
你就得到新的generator G1,
link |
接下來你有新的generator G1以後,
link |
所以現在我們把這個generator從G0,
link |
可以讓這個V of G1最大的那個d,
link |
接下來你就有一個新的objective function,
link |
你再把它對generator算gradient,
link |
再update你的generator,
link |
找一個可以讓V of G0 d最大的d0 star,
link |
那你就得到了你的V的function,
link |
再重新對你的objective function做微分,
link |
去maximize這個objective function的process,
link |
跟PG0的JS divergence,
link |
它可以讓這個objective function值被maximize,
link |
Pdata跟PG1的JS divergence,
link |
它就是你的JS divergence,
link |
那你要update你的generator,
link |
去minimize你的JS divergence,
link |
你其實就是在減少你的JS divergence,
link |
就是要去minimize你的JS divergence,
link |
未必等同於真的在minimizeJS divergence,
link |
假設你的generator就是G0,
link |
就是G0跟你的data之間的JS divergence,
link |
但是當你今天update你的G0的時候,
link |
就是G0跟你的data的JS divergence,
link |
這個時候你的整個function就變了,
link |
這個時候因為你的G0 star仍然是固定的,
link |
但是因為你的G0 star仍然是固定的,
link |
所以你的V of G1D0 star,
link |
它就不是在evaluate JS divergence,
link |
我們說evaluate JS divergence的D呢,
link |
是今天這個V of GD的這個值裡面呢,
link |
同樣的D就不是在evaluate你的JS divergence,
link |
JS divergence會變成是這個值,
link |
這一項可以看作是在減少JS divergence呢,
link |
你仍然是在量JS divergence,
link |
所以這兩個function應該是比較接近,
link |
所以你可以同樣用固定的D0 star,
link |
就可以evaluate G0跟G1的JS divergence,
link |
所以今天在train這個game的時候,
link |
所以今天在train你的generator的時候,
link |
但是你在train你的discriminator的時候,
link |
因為今天在量你的discriminator的時候,
link |
你才是在量JS divergence,
link |
所以在traindiscriminator的時候,
link |
你其實會需要比較多的iteration把它train到底,
link |
你應該只要跑比較少的iteration,
link |
免得今天你現在在這個投影片上講的假設,
link |
我們說我們的objective function裡面,
link |
你沒有辦法真的算expectation,
link |
所以我們都是用sample來代替expectation,
link |
sampleX取它的expectation,
link |
就是從pdata這個distribution裡面,
link |
把這M比data的d of X統統算出來,
link |
sampleX一對X出來算它expectation,
link |
是從pg裡面sample出M比data,
link |
都去計算它的log1減d of X delta,
link |
你就得到正向的approximation,
link |
我們就是在maximize這個式子,
link |
而不是真的去maximize它的expectation,
link |
這件事情就等同於是在train一個binary的classifier,
link |
你完全不需要用什麼你原來不知道的東西,
link |
你在train discriminator的時候,
link |
你就是在train一個binary的classifier,
link |
你的discriminator是一個binary的classifier,
link |
這個binary classifier,
link |
它是一個logistic regression,
link |
就是它的output有接一個sigmoid,
link |
所以它output的值是介於0到1之間的,
link |
然後從pdata裡面你sampleM比data出來,
link |
M比data就當作是positive sample,
link |
或是class 1的example,
link |
然後你從pg裡面再sample另外M比data出來,
link |
這M比data就當作是negative sample,
link |
就當作是class 2的example,
link |
接下來就train你的binary classifier,
link |
你train你的criterion,
link |
你會minimize cross entropy,
link |
如果你在minimize cross entropy,
link |
它會等同於上面maximize這個objective function,
link |
minimize cross entropy,
link |
等同於maximize上面這個objective function,
link |
最後我們就再重新複習一次game的algorithm,
link |
整個game的algorithm是這樣子,
link |
這個是你initialize的parameter,
link |
你從pdata這個distribution裡面,
link |
你從你的某一個quiet distribution,
link |
它可以是gaussian distribution,
link |
可以是normal distribution,
link |
你就固定住某一個quiet distribution,
link |
你從這個quiet distribution裡面,
link |
你這邊有一堆generated image,
link |
接下來你要train你的discriminator,
link |
這個discriminator在training的時候,
link |
它就是maximize下面這個objective function,
link |
maximize下面這個objective function,
link |
直接train一個binary classifier,
link |
把這邊的x tilde當作是另外一類,
link |
直接train一個binary classifier,
link |
你的binary classifier是minimum cost entropy,
link |
就是在maximize下面這個式子,
link |
就是在maximize下面這個式子,
link |
你train了一個discriminator出來,
link |
我們traindiscriminator的目的是什麼,
link |
是為了要evaluate jth divergence,
link |
而什麼時候discriminator可以evaluate jth divergence,
link |
discriminator才是在evaluate jth divergence,
link |
它才是在evaluate jth divergence,
link |
你一定要train很多次,train到收斂為止,
link |
那在實作上你沒有辦法真的train很多次,
link |
而不是像投影片上面只寫update一次而已,
link |
你可能會update比如說三次或五次,
link |
找一個d,它可以maximize v of gd,
link |
但是其實你沒有辦法真的找到一個最好的d,
link |
去maximize v of gd,
link |
你能夠找的其實只是一個lower bound而已,
link |
train到說你可以讓v of gd真的變得最大,
link |
你通常就是train幾步,然後就停下來,
link |
你其實也未必真的能夠maximize這個objective function,
link |
你的d的capacity並不是無窮大的,
link |
你會蹭蹭蹭就卡在一個local minima,
link |
所以你並不真的可以maximize這個式子,
link |
假設你沒有那個什麼local minima,
link |
你的d呢,它的capacity也是有限的,
link |
如果你要量js divergence,
link |
我們一個假設是你的d可以是任何function,
link |
但事實上你的d是一個network,
link |
所以你沒有辦法真的maximize這一項,
link |
你能夠找到的只是一個lower bound而已,
link |
但我們就假設你其實可以maximize這一項就是了,
link |
那我們說train discriminator的時候是為了量js divergence,
link |
train generator的時候是為了要minimize js divergence,
link |
為了要減少js divergence,
link |
前面這個步驟是在量出js divergence,
link |
接下來下一個步驟是在減少js divergence,
link |
sample and vector出來,
link |
一樣,就我們說本來這個discriminator是要minimize這個式子嘛,
link |
要minimize一個一模一樣的式子,
link |
因為第一項只跟discriminator有關,
link |
所以你要train你的generator去minimize這個式子的時候,
link |
就是在train你的generator,
link |
generator你不能夠train太多,
link |
你的discriminator就沒有辦法evaluatejs divergence,
link |
所以你的generator不能train太多,
link |
你只能夠少量的update它的參數而已,
link |
所以你可以update discriminator很多次,
link |
但是generator你update一次就好,
link |
你用discriminator算出js divergence以後,
link |
你只用generator少少的update一次,
link |
讓你的js divergence變小,
link |
你量出來js divergence,
link |
你就不是在量js divergence,
link |
今天在train generator的時候,
link |
那在Ian Gruffalo原始的paper裡面,
link |
他就不是在minimize這個式子,
link |
而我們一開始在做training的時候,
link |
因為你的discriminator會知道說,
link |
你的generator產生出來的image,
link |
會造成你在training的一些問題,
link |
那所以Ian Goodfellow覺得說,
link |
這樣子training是比較容易的,
link |
如果你是要maximize這個式子,
link |
你今天如果是要minimize這個式子,
link |
你在trainDiscriminator的時候,
link |
你就是train了一個binary的classifier嘛,
link |
要minimize下面這個式子的時候,
link |
你其實只是把那個binary classifier的label,
link |
從data裡面sample出來的是class1,
link |
從generator sample出來的是class2,
link |
把generator sample出來的改標成label1,
link |
我認為Ian Goodfellow他其實只是懶得改code而已,
link |
performance其實也是差不多的,
link |
不知道為什麼Ian Goodfellow一開始就選擇這個,
link |
我覺得只是因為他implement下去才發現說,
link |
有人就會說這個叫做original GAN,
link |
所以後來Ian Goodfellow還寫了另外一篇文章,
link |
上面這個叫做minimax GAN,
link |
下面這個叫做non-stationary GAN,就是NS GAN,
link |
所以按照Ian Goodfellow的想法,
link |
今天這個generator和discriminator,
link |
假設這個是你的data的distribution,
link |
這個是你的generator所產生出來的data distribution,
link |
好,那你現在要認一個discriminator,
link |
discriminator要給綠色的點比較高的分數,
link |
這個discriminator的objective value,
link |
就是這兩堆data的JS divergence,
link |
好,那你現在有了這個discriminator以後,
link |
有了這個discriminator以後,
link |
通過discriminator以後,
link |
你會再train一次你的discriminator,
link |
那因為現在藍色的點跟綠色的點比較近,
link |
所以這個discriminator呢,
link |
代表說這兩種點的JS divergence呢,
link |
會順著這個discriminator的,
link |
藍色distribution跟綠色distribution,
link |
你train一個discriminator,
link |
因為對這個discriminator來說,
link |
所以最後discriminator會壞掉,
link |
這個pdata跟pg出現機率都是一樣的,
link |
藍色的點是generator產生出來的東西,
link |
discriminator會assign給每一個x,
link |
就把你的pg產生出來的藍色的點趕來趕去,
link |
藍色的點跟綠色的點重合在一起的時候,
link |
那對你的discriminator來說,
link |
他完全沒有辦法分辨pg跟pdata之間的差別,
link |
因為他完全沒有辦法分辨generator跟discriminator之間的差別,
link |
你知道我們今天在training classifier的時候,
link |
我們其實會害怕data imbalance的問題,
link |
data是我們自己sample出來的,
link |
所以我們不會故意給自己製造data imbalance的問題,
link |
就是說假設你從generator裡面generate256筆data,
link |
那你今天從你的sample的data base裡面,
link |
你也會sample256筆data,
link |
如果按照Ian Goodfellow的講法,
link |
下面這個圖是Ian Goodfellow paper上的圖啦,
link |
他說最後discriminator圈圈圈圈到後來,
link |
但我們上週說discriminator其實就是evaluation的function,
link |
也就是說discriminator的值,
link |
如果今天你的discriminator是一條水平線,
link |
他就不是一個evaluation的function啦,
link |
這個是Ian Goodfellow畫的圖,
link |
你看Yann LeCun他在畫那個圖的時候,
link |
然後他畫的這個圖就是discriminator的圖,
link |
這個綠色的點就是real data的分布,
link |
最後discriminator並沒有死掉,
link |
上課講說有data分布的地方值比較大,
link |
跟Yann LeCun畫講的是有一些矛盾的,
link |
就好像以前我們在train deep learning的時候,
link |
我們都要用restricted Boltzmann machine,
link |
過去我們都相信說沒有restricted Boltzmann machine,
link |
所以像我們之前第一次開MLDS的時候,
link |
其實都會花兩週講restricted Boltzmann machine,
link |
那今天如果再講restricted Boltzmann machine,
link |
也許我們明年再來講同樣的東西的時候,
link |
就假設你硬要我給你一個答案告訴你說,
link |
到底應該是Ian Goodfellow講的比較對,
link |
還是Jan Larkin講的比較對,
link |
然後你去evaluate一下你的discriminator,
link |
它的感覺好像是介於這兩個case中間,
link |
它絕對不是變成一個完全爛掉的discriminator,
link |
你自己回去是做做看你幾時train出這樣子的結果,
link |
所以不太像是Ian Goodfellow講的這樣,
link |
但是你的discriminator也不完全反映了data的distribution,
link |
那這些觀點到底對我們了解更有什麼幫助呢?
link |
也許Gan的algorithm就是一樣,
link |
traindiscriminator,
link |
也許它的algorithm是不會隨著你的觀點不同,
link |
你其實在設計你的algorithm的時候,
link |
也許這些微妙差別導致最後training的結果會是很不一樣的,
link |
但其實我覺得也許Ian Goodfellow的這個講法反而是,
link |
就是說我上週講的discriminator是在evaluate一個object的好還是不好,
link |
它是在反映了data的distribution這件事,
link |
他會把discriminator當作一個classifier來用,
link |
然後你把那個discriminator拿來做其他的事情,
link |
假設今天discriminator其實train到最後,
link |
按照Ian Goodfellow猜想會爛掉的話,
link |
那你拿它來當作pre-training根本就沒有意義啊,
link |
但很多人會拿它來當作pre-training,
link |
所以它不太可能是真的train到後來就壞掉,
link |
另外一個evidence是說,你想想看你今天在trainGan的時候,
link |
你並不是每一次都重新train你的discriminator對不對,
link |
我們不是每次都重traindiscriminator,
link |
而是會拿前一個iteration的discriminator,
link |
當作下一個iteration的initialize的參數,
link |
如果你今天你的discriminator,
link |
是想要衡量兩個data distribution的divergence的話,
link |
你其實沒有必要把前一個iteration的東西拿來用,
link |
因為現在你的generator已經變啦,
link |
你保留前一個iteration的東西有什麼意義呢,
link |
因為今天的generator它update的參數,
link |
所以也許把前一個time state得到generator,
link |
當作下一個time state的initialization,
link |
可以加快discriminator訓練的速度,
link |
也說不定,那這個理由感覺也是成立的,
link |
有人在trainGan的時候他有一招,
link |
他不只拿現在的generator去sample data,
link |
他也會拿過去的generator也sample data,
link |
然後把這些各個不同的generator,
link |
sample data統統集合起來,
link |
再去traindiscriminator,可以得到的performance會是比較好,
link |
那如果今天discriminator是在evaluate你現在的generator,
link |
跟你的data distribution的差異的話,
link |
因為現在量現在的generator跟你data之間的差異,
link |
你拿過去的generator產生出來的東西,
link |
拿過去的generator所產生出來的東西,
link |
再去訓練discriminator,
link |
也許這是另外一個support支持說,
link |
也許discriminator來做的事情,
link |
並不見得是在evaluate兩個distribution之間的divergence,
link |
不過至少Ian Goodfellow一開始是這麼說的,
link |
所以我們也把Gen最開始的理論告訴大家,
link |
等一下下一堂課要講到40分到50分之間,