提出CGAN是因爲非條件的生成模型中,對生成的內容控制,實際上只要保證真實性就可以了;採用CGAN的話,我們會增加一些額外的信息去控制數據生成的過程,例如一些類別的標籤,例如數字圖片數據集中,可以通過引入標籤(one-hot),來控制生成的圖片趨向於數字,而不是其他的一些圖片。
- CGAN模型
目標函數:
相比較GAN模型的目標函數
多了一個標籤信息y,在D 和 G 中都用到了,在各自的輸入中增加這一項
示意圖
- 一些實驗
- 單一模型
- MNIST圖片數據集中,條件是one-hot形式的圖片標籤,即 數字1 用 [0,1,0,0,0,0,0,0,0,0] 來表示
- 在G中,從均勻分佈中抽取100維的噪聲數據z,hidden layer 是 1200個單元(z連接到200個單元,y連接到1000個單元,然後拼接起來),並通過relu 來激活,最後通過全連接到784維並對每個單元做sigmoid激活
- 在D中,通過maxout網絡將x 映射到240維,將y映射到50維;採用5組權重W,最終的結果是採用max(f(W1*X),f(W2*X),f(W3*X),f(W4*X),f(W5*X)) 對應的那組,實際上maxout方法,隨着深度越深,參數會呈現指數式的增長。
- 採用SGD,batch設置爲100,採用momentum的方法控制學習率。dropout 設置爲0.5
- 生成的結果如下圖所示
- 多模型
- 有些圖片是有多個標籤的,例如一張 圖片,標籤可以爲女性,香蕉等。
- 用戶產生的標識(metadata)跟傳統意義上的標籤不太一樣,因爲描述可以是主觀的,另外UGM(user-generated metadata) 有大量的同義詞,不同的人會用不同的詞來描述同一個概念,解決這個問題,採用詞向量的方式。
- 多模型的“多”指的是一個圖片有多個標籤的意思
- 對於圖片的表示,首先預訓練一個CNN,並用最後一個全連接層(4096個單元)來表示圖片
- 對於詞語的表示,從YFCC100M的metadata中獲取用戶標識,標題,以及描述。然後利用skip-gram訓練了一個200維的詞向量,我們會刪除出現次數小於200的詞語,最終得到247465大小的詞典
- 我們把卷積和詞語得到的向量在GAN訓練過程中是固定的。
- 這裏,我們目標是生成圖片的標籤(tags)
- 評估階段,對於每張圖片,我們生成100個樣例(tag),然後從詞庫中找到最相近的20個單詞,那麼總共會得到20*100個,然後選出排名top10的詞作爲圖片的tags
- 這裏,我們可以理解爲,把圖片作爲CGAN中的y
- 單一模型
refer:https://arxiv.org/pdf/1411.1784.pdf Conditional Generative Adversarial Nets