從零開始深度學習0617——李宏毅 GAN

李宏毅  GAN

 

 

GAN是一種無監督學習方法的模型

 

G與D 交錯迭代訓練

可以看做是一個大的NN  前面幾層hidden layer 是G  後面幾層hidden layer 是D

訓練時,每次固定G 訓練D,固定D訓練G

先訓練判別器 再訓練生成器  循環往復

 

如下兩步:

 

通過隨機的vector 生成了一組圖像,從database中也拿到一組圖像 ,送到D中,這時固定住G,就是根據這兩組圖像去訓練D,使得GT 得到更高的分數,fake 得到低的分數

 

固定上步訓練的D ,然後訓練G , 去生成不同的images 使得在D 中分數提升

 

因爲如果不固定的話,想要分數提升,只需要改變D中 最後一層的Weights就好了,不管前面生成的images好還是不好  最後都會分數提升,所以一定需要 循環迭代訓練

 

 

GAN 中 sample 相當於 CNN中 batchsize

 

 

 

算法的僞代碼描述

從database中採樣m個images examples

隨機使用m個服從高斯分佈或者其他distribution的noise 隨機噪聲 z 去生成圖像

訓練的判別器 是需要讓真的越大 假的越小

所以原始paper中 的loss function 是採取梯度上升的方式

爲了方便 可以加個符號   梯度下降的方法去優化

+號 是因爲前面V 沒有寫負號  

如果負號就是  梯度下降   正號就是梯度上升

 

 

區別於分類與迴歸任務

GAN是一種結構化學習任務

迴歸任務是輸出一個數值

分類任務是輸出一個one-hot 編碼的向量 表示一類

結構化學習或預測輸出 可能是一個序列,一個矩陣,一個圖,一個樹 等等

 

輸出序列的情況

 

輸出矩陣的情況

 

 

自底向上Generator + 自頂向下Discriminator

 

 

 

Auto-Encoder

 

如果輸入AE生成的a向量 到 G中,可能會產生往左偏的1

輸入AE生成的b向量 到 G中,可能會產生往右偏的1

但是如果下面的形式 0.5*a + 0.5*b 會產生什麼   不一定會輸出直的1 也可能會輸出none

 

 

所以出現了VAE   (Variational Auto-Encoder) 變分編碼器

 

 

VAE解釋與GAN的區別

https://blog.csdn.net/weixin_40955254/article/details/82315224

利用VAE,只需要使用有限的數據輸入,我們就可以通過隱形參數的調節,獲得幾乎無限的數量。

有人也許會問了,你爲什麼可以生成從來沒有出現過的圖片。這裏就要介紹一下VAE中的編碼器,對於每個隱性參數他不會去只生成固定的一個數,而是會產生一個置信值得分佈區間,這是一種連續的表達方式,通過採樣,我們就可以獲得許多從來沒有見過的數據了。

 

 

 

AE與 VAE 不同

{m1,m2,m3, ….}  是encoder出來的向量

{σ1,σ2,σ3,…..}  是上述圖中encoder出來的latent attributes  就是隱空間latent space的分佈 ???????????

然後latent attributes與服從某種分類 比如高斯分佈的 隨機噪聲z 相乘然後疊加到{ m } 上,產生{c1,c2,c3…..}  ,拿到decoder解碼,根據有noise的code 產生輸出

 

D 判別器訓練

Discriminator 做生成

 

 

G 與 D 的優缺點

Probs 優點    Cons 缺點

Generator 生成簡單,但是不容易考慮components與components之間的關係

舉個例子就是,只考慮pixel 與 pixel ,概括就是,只學到了表象沒有學到大局

但是Driscrimmator 容易學到大局,但是生成千難萬難

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章