【keras之父】GAN & VAE

            RNN已經被成功應用於音樂生成,對話生成,圖像生成,語音合成和分子設計,甚至還可以用於製作電影劇本。如何生成序列數據?使用前面的標記作爲輸入訓練一個網絡(通常是RNN或CNN)來預測序列中接下來的一個或多個標記。

這個過程涉及名詞:標記、潛在空間、採樣、條件數據、soft Max模型等

~~~~~~~~~~~採樣策略的重要性~~~~~~~~~~~~~

  1. 貪婪採樣(greedy sampling

始終選擇可能性最大的下一個字符,缺點:重複、可預測的字符串

  1. 隨機採樣(stochastic sampling

在採樣過程中引入隨機性,即從下一個字符的概率分佈中進行採樣。

      字符均勻概率分佈具有最大的/entropy更小的熵可以讓生成的序列覺有更加可預測的結構,而更大的熵會得到更加出人意料且更有創造性的序列。訓練語言模型並從中採樣即給定一個訓練好的模型和一個種子文本片段,通過以下步驟完成採樣:

(1) 給定目前已生成的文本,從模型中得到下一個字符的概率分佈。

(2) 根據某個溫度對分佈進行重新加權。

(3) 根據重新加權後的分佈對下一個字符進行隨機採樣。

           (4) 將新字符添加到文本末尾。

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

         生成離散的序列數據的方法是: 給定前面的標記,訓練一個模型來預測接下來的一個或多個標記

         對於文本來說,這種模型叫作語言模型。它可以是單詞級的,也可以是字符級的。對下一個標記進行採樣,需要在堅持模型的判斷與引入隨機性之間尋找平衡。處理這個問題的一種方法是使用 softmax 溫度。一定要嘗試多種不同的溫度,以找到合適的那一個。

          DeepDream 的過程是反向運行一個卷積神經網絡,基於網絡學到的表示來生成輸入。得到的結果是很有趣的,有些類似於通過迷幻劑擾亂視覺皮層而誘發的視覺僞影

【注意】這個過程並不侷限於圖像模型,甚至並不侷限於卷積神經網絡。它可以應用於語音、音樂等更多內容。

 

        用深度學習進行圖像生成,就是通過對潛在空間進行學習來實現的,這個潛在空間能夠捕捉到關於圖像數據集的統計信息。通過對潛在空間中的點進行採樣和解碼可以生成前所未見的圖像。這種方法有兩種重要工具: 變分自編碼器(VAE)和生成式對抗網絡(GAN)

        VAE 得到的是高度結構化的、連續的潛在表示。因它在潛在空間中進行各種圖像編輯的效果很好,比如換臉、將皺眉臉換成微笑臉等。它製作基於潛在空間的動畫效果也很好,比如沿着潛在空間的一個橫截面移動,從而以連續的方式顯示從一張起始圖像緩慢變化爲不同圖像的效果。

          GAN 可以生成逼真的單幅圖像,但得到的潛在空間可能沒有良好的結構,也沒有很好的連續性。

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

【提示】建議使用大規模名人人臉屬性(CelebA)數據集。 它是一個可以免費下載的圖像數據集,裏面包含超過 20 張名人肖像,特別適合用概念向量進行實驗,其結果肯定能打敗 MNIST

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

GAN

        生成式對抗網絡(GAN,generative adversarial network)由Goodfellow 等人2014年提出,替代VAE來學習圖像的潛在空間。其工作的原理:一個僞裝者網絡和一個專家網絡,二者訓練的目的都是爲了打敗彼此,這就是傳說的相互博弈。主要由以下兩部分組成:

  1. 生成器網絡 generator network:它以一個隨機向量(潛在空間中的一個隨機點)作爲輸入,並將其解碼爲一張合成圖像。
  2. 判別式網絡 discriminator network或對手adversary:以一張圖像(真是的或合成的均可)作爲輸入,並預測該圖像是來自訓練集還是由生成器網絡創建。

        訓練生成器網絡的目的是使其能夠欺騙判別器網絡,因此隨着訓練的進行,它能夠逐漸生成越來越逼真的圖像,即看起來與真實圖像無法區分的人造圖像,以至於判別器網絡無法區分二者。與此同時,判別器也在不斷適應生成器逐漸提高的能力,爲生成圖像的真實性設置了很高的標準。一旦訓練結束,生成器就能夠將其輸入空間中的任何點轉換爲一張可信圖像 。與 VAE 不同,這個潛在空間無法保證具有有意義的結構,而且它還是不連續的 。

         GAN的優化最小值不是固定的,通常梯度下降是沿着靜態的損失地形滾下山坡。但對於GAN而言,每下山一步都會對整個地形造成一點改變。更確切的說它是一個動態的系統,其最優化過程尋找的不是一個最小值,而是兩股力量之間的平衡。因此GAN訓練過程極其困難,需要對模型架構和訓練參數進行大量的仔細調整。

=============【GAN簡要的實現過程】================

         以實現一個深度卷積生成式對抗網絡(DCGAN,deep convolution GAN)即生成器和判別器都是深度學習卷積神經網絡的GAN。流程如下:

  1. generator網絡將形狀爲(latent_dim, )的向量映射到形狀爲(32, 32, 3)的圖像。
  2. discriminator網絡將形狀爲(32,32,3)的圖像映射到一個二進制分數,用於評估圖像爲真的概率。
  3. gan網絡將你generator網絡和discriminator網絡連接在一起:gan(x) = discriminator(generator(x))。生成器將潛在空間向量解碼爲圖像,判別器對這些圖像的真實性進行評估,因此這個gan網絡是將這些潛在響亮映射到判別器的評估結果。
  4. 使用帶有“真”/ “假”標籤的真假圖像樣本訓練判別器,就和訓練普通的圖像分類模型一樣。
  5. 爲了訓練生成器,要使用gan模型的損失相對於生成器權重的梯度。這就意味着在每一步都要移動生成器的權重,其移動方向是讓判別器更有可能將生成器街嗎的圖像劃分爲“真”。也就是訓練生成器來欺騙判別器。

Keras之父推薦使用的GAN相關的技巧】

  1. 使用tanh作爲生成器最後一層的激活,而不用sigmoid,後者在其他類型的模型中更加常見。
  2. 使用正態分佈(高斯分佈)對潛在空間中的點進行採樣,而不是均勻分佈。
  3. 隨機性能夠提高穩健性。訓練GAN得到的是一個動態平衡,所以GAN可能以各種方式“卡住“。在訓練過程中引入隨機性有助於防止出現這種情況。通過兩種方式引入隨機性:一種是在判別器中使用dropout;另一種是向判別器的標籤添加隨機噪聲
  4. 有兩件事情可能導致梯度稀疏: 最大池化運算和 ReLU 激活。推薦使用步進卷積代替最大池化來進行下采樣,還推薦使用 LeakyReLU 層來代替 ReLU 激活。LeakyReLU 和 ReLU 類似,但它允許較小的負數激活值,從而放寬了稀疏性限制。
  5. 爲了解決棋盤狀僞影,每當在生成器和判別器中使用步進的conv3DTranpose或Conv2D時,使用的內核大小要能夠被步幅大小整除

【如何訓練DCGAN

(1) 從潛在空間中抽取隨機的點(隨機噪聲)

(2) 利用這個隨機噪聲用generator生成圖像。

(3) 將生成圖像與真實圖像混合。

(4) 使用這些混合後的圖像以及相應的標籤(真實圖像爲“真”,生成圖像爲“假”)來訓練 discriminator

(5) 在潛在空間中隨機抽取新的點。

(6) 使用這些隨機向量以及全部是“真實圖像”的標籤來訓練gan。這會更新生成器的權重(只更新生成器的權重,因爲判別器在 gan 中被凍結),其更新方向是使得判別器能夠 將生成圖像預測爲“真實圖像”。這個過程是訓練生成器去欺騙判別器。

========================【小結】==============================

  1. GAN 由一個生成器網絡和一個判別器網絡組成。判別器的訓練目的是能夠區分生成器的 輸出與來自訓練集的真實圖像,生成器的訓練目的是欺騙判別器。值得注意的是,生成器從未直接見過訓練集中的圖像,它所知道的關於數據的信息都來自於判別器。
  2. GAN 很難訓練,因爲訓練 GAN 是一個動態過程,而不是具有固定損失的簡單梯度下降過程。想要正確地訓練 GAN,需要使用一些啓發式技巧,還需要大量的調節。
  3. GAN 可能會生成非常逼真的圖像。但與 VAE 不同,GAN 學習的潛在空間沒有整齊的連 續結構,因此可能不適用於某些實際應用,比如通過潛在空間概念向量進行圖像編輯。

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