1. GAN
GAN有兩個(gè)模型脚线,分別是生成模型和判別模型屎媳。這兩個(gè)模型進(jìn)行博弈脖捻,先保持生成模型不變阔逼,優(yōu)化判別模型(判別是真實(shí)數(shù)據(jù)還是生成的數(shù)據(jù)),使得它能最大化區(qū)別真實(shí)和生成數(shù)據(jù)地沮;保持判別模型不變嗜浮,優(yōu)化生成模型羡亩,使它能接近真實(shí)數(shù)據(jù),讓判別模型判別不出來危融。
1) 定義x是真實(shí)數(shù)據(jù)
2) 定義一個(gè)先驗(yàn)變量:(例如:在N(0,1)產(chǎn)生)畏铆,生成模型G是一個(gè)以
為參數(shù)的多層感知器。把z通過G映射到與x相同維度的空間吉殃。
3)定義一個(gè)判別模型辞居,D是一個(gè)以
為參數(shù)的多層感知器。它輸出的是[0,1]的一個(gè)數(shù)蛋勺。
損失函數(shù):
在訓(xùn)練一開始瓦灶,因?yàn)楹苋菀着袆e是不是真實(shí)數(shù)據(jù),是飽和狀態(tài)抱完,所以我們
贼陶。
具體的算法:
可以通過代碼更好得理解GAN(鏈接中分別有tensorflow和pytorch版本):?vanilla gan
GAN的問題:
1. 訓(xùn)練困難,訓(xùn)練過程要小心平衡生成器和判別器
2. 生成器和判別器的loss無法指示訓(xùn)練進(jìn)程
3. 生成樣本缺乏多樣性巧娱,也就是mode collapse
2. WGAN
WGAN的出現(xiàn)解決了上述GAN的幾個(gè)問題碉怔,(有點(diǎn)小激動(dòng)),以下是wgan的算法家卖,而改進(jìn)后相比原始GAN的算法實(shí)現(xiàn)流程卻只改了四點(diǎn):
1)判別器最后一層去掉sigmoid
2)生成器和判別器的loss不取log
3)每次更新判別器的參數(shù)之后把它們的絕對(duì)值截?cái)嗟讲怀^一個(gè)固定常數(shù)c
4)不要用基于動(dòng)量的優(yōu)化算法(包括momentum和Adam)眨层,推薦RMSProp,SGD也行
附上知乎詳細(xì)鏈接:wgan