李宏毅 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 容易學到大局,但是生成千難萬難