[生成對抗網絡] 論文研讀-SeqGAN: Sequence Generative Adversarial Nets with Policy Gradient

寫在前面

GAN作爲生成器已經在圖像方面大放異彩,然而在NLP方面的應用還不多,原因一部分在於GAN是爲連續空間設計的,而NLP是離散的,因此需要一點小小的trick纔可以work,SeqGAN這一篇文章將RL作爲鑑別器,用reward作爲梯度來指導生成器的學習,算是一種option

原文地址 : https://arxiv.org/pdf/1609.05473.pdf
源代碼 : https://github.com/LantaoYu/SeqGAN
參考 : https://zhuanlan.zhihu.com/p/25168509


Introduction

  • 文章首先指出傳統的序列生成模型都是非監督的,使用LSTM來進行訓練,最常用的optimization是最大似然估計。

  • 但是Bengio在2015年提出,最大似然估計會造成exposure bias問題。簡單來說,就是序列生成可能會生成一個在原來training data中根本不存在的序列(原因在於RNN生成器在生成下一時刻輸出時使用的上一時刻自身的輸出,而不是真實的訓練文本,因此誤差會不斷累積,最終模型可能崩壞),Bengio的解決辦法是使用Scheduled Sampling[Bengio 2015],在訓練時隨機地將RNN的預測結果餵給RNN自己,使得RNN網絡得以處理自身產生的錯誤,避免誤差的累積

  • 但是,Huszar指出SS技巧並不能根本性的解決問題[Huszar 2016]。另外一種解決辦法是評估整個生成序列而不是每一步都進行評估,從而使得序列整體的loss變小(比如使用BLEU來評價整個句子),但是BLEU不太適用於Chatbot和Poem的場景,因此也不太好

  • GAN應用於NLP時存在兩個問題:

    • 【1】GAN是爲連續型數據設計的(比如圖像,在接收到梯度0.01後,每一個像素值p進行微調後變成的p+0.01仍然make sense,但是對於離散化表示的文字p+0.01可能就差之千里了),對於離散表示的文字來說並不適用;
    • 【2】第二個問題在於判別器只能對序列整體給出loss/score, 對於序列這種partially working 任務來說,無法預測在未來的完整序列是否足夠的好,因此也就無法用來指導當前時間步的序列生成了
  • 作者提出解決以上兩個issues的方法:

    • 【1】使用Reinforcement Learning(aka RL)來作爲生成器,state是已經生成了的tokens,action是下一個將要生成的token,並且沒有使用BLEU來作爲reward。爲了解決離散輸出導數無法feedback給生成模型的問題,作者選擇使用Policy Gradient[Sutton el al. 1999][知乎講解]的方法,結合Monte Carlo Search來給出state-action的近似評價,並以此訓練policy,也就是生成模型。
    • 【2】 使用CNN作爲判別器
    • 關於GAN中各種散度可以[戳這裏]

最後讓我們來膜拜一下Bengio

這裏寫圖片描述

發佈了72 篇原創文章 · 獲贊 66 · 訪問量 13萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章