作者:MirandaYang
GAN 自從被提出以來,就廣受大家的關(guān)注,尤其是在計(jì)算機(jī)視覺領(lǐng)域引起了很大的反響。“深度解讀:GAN模型及其在2016年度的進(jìn)展”[1]一文對過去一年GAN的進(jìn)展做了詳細(xì)介紹,十分推薦學(xué)習(xí)GAN的新手們讀讀。這篇文章主要介紹GAN在NLP里的應(yīng)用(可以算是論文解讀或者論文筆記),并未涉及GAN的基本知識(shí) (沒有GAN基礎(chǔ)知識(shí)的小伙伴推薦先看[1],由于本人比較懶,就不在這里贅述GAN的基本知識(shí)了J)。由于很長時(shí)間沒有寫中文文章了,請各位對文章中不準(zhǔn)確的地方多多包涵、指教。
雖然GAN在圖像生成上取得了很好的成績,GAN并沒有在自然語言處理(NLP)任務(wù)中取得讓人驚喜的成果。 其原因大概可以總結(jié)為如下幾點(diǎn):
-
原始GAN主要應(yīng)用實(shí)數(shù)空間(連續(xù)型數(shù)據(jù))上,在生成離散數(shù)據(jù)(texts)這個(gè)問題上并不work。GAN 理論的提出者Ian Goodfellow 博士這樣回答來這個(gè)問題問題:“GANs 目前并沒有應(yīng)用到自然語言處理(NLP)中,最初的 GANs 僅僅定義在實(shí)數(shù)領(lǐng)域,GANs 通過訓(xùn)練出的生成器來產(chǎn)生合成數(shù)據(jù),然后在合成數(shù)據(jù)上運(yùn)行判別器,判別器的輸出梯度將會(huì)告訴你,如何通過略微改變合成數(shù)據(jù)而使其更加現(xiàn)實(shí)。一般來說只有在數(shù)據(jù)連續(xù)的情況下,你才可以略微改變合成的數(shù)據(jù),而如果數(shù)據(jù)是離散的,則不能簡單的通過改變合成數(shù)據(jù)。例如,如果你輸出了一張圖片,其像素值是1.0,那么接下來你可以將這個(gè)值改為1.0001。如果輸出了一個(gè)單詞“penguin”,那么接下來就不能將其改變?yōu)椤皃enguin + .001”,因?yàn)闆]有“penguin +.001”這個(gè)單詞。 因?yàn)樗械淖匀徽Z言處理(NLP)的基礎(chǔ)都是離散值,如“單詞”、“字母”或者“音節(jié)”, NLP 中應(yīng)用 GANs是非常困難的。一般而言,采用增強(qiáng)學(xué)習(xí)算法。目前據(jù)我所知,還沒有人真正的開始研究利用增強(qiáng)算法解決 NLP 問題?!?/p>
-
在生成text時(shí),GAN對整個(gè)文本序列進(jìn)行建模打分。對于部分(partially)生成的序列,十分難判斷其在之后生成整個(gè) (fully) 序列時(shí)的分?jǐn)?shù)。
-
另一個(gè)潛在的挑戰(zhàn)涉及RNN的性質(zhì)(生成文本大多采用RNN模型)。假設(shè)我們試圖從latent codes生成文本,error就會(huì)隨著句子的長度成指數(shù)級(jí)的累積。最開始的幾個(gè)詞可能是相對合理的,但是句子質(zhì)量會(huì)隨著句子長度的增加而不斷變差。另外,句子的長度是從隨機(jī)的latent representation生成的,所以句子長度也是難以控制。
下面我將主要介紹和分析最近閱讀過的將GAN應(yīng)用于NLP中的一些論文:
1. Generating Text via Adversarial Training
-
論文鏈接:
http://people.duke.edu/~yz196/pdf/textgan/paper.pdf
-
這是2016年的 NIPS GAN Workshop 上的一篇論文, 嘗試將 GAN 理論應(yīng)用到了文本生成任務(wù)上。 文中的方法比較簡單,具體可以總結(jié)為:
-
以遞歸神經(jīng)網(wǎng)絡(luò)(LSTM)作為GAN的生成器(generator)。其中,用光滑近似(smooth approximation)的思路來逼近 LSTM 的輸出。結(jié)構(gòu)圖如下:
-
本文的目標(biāo)函數(shù)和原始GAN有所不同,文中采用了feature matching的方法 。迭代優(yōu)化過程包含以下兩個(gè)步驟:
其中式 (6) 為標(biāo)準(zhǔn)GAN的優(yōu)化函數(shù),式 (7) 為feature matching的優(yōu)化函數(shù)。
-
本文的初始化非常有意思,特別是在判別器的預(yù)訓(xùn)練方面,利用原始的句子和該句子中交換兩個(gè)詞的位置后得到的新句子進(jìn)行判別訓(xùn)練。(在初始化的過程中,運(yùn)用逐點(diǎn)分類損失函數(shù)對判別器進(jìn)行優(yōu)化)。這非常有意思,因?yàn)閷蓚€(gè)單詞互換位置,輸入的數(shù)據(jù)信息實(shí)際上是基本相同的。比如,大多數(shù)卷積計(jì)算最終會(huì)得出完全相同的值。
-
本文生成器的更新頻率是判別器的更新頻率的5倍,這與原始GAN的設(shè)定恰好相反。這是因?yàn)長STM比CNN的參數(shù)更多,更難訓(xùn)練。
-
然而,本文生成模型 (LSTM) decode階段有exposure bias問題,即在訓(xùn)練過程中逐漸用預(yù)測輸出替代實(shí)際輸出作為下一個(gè)詞的輸入。
2. SeqGAN: Sequence Generative Adversarial Nets with Policy Gradient
-
論文鏈接:https://
https://arxiv.org/pdf/1609.05473.pdf
-
論文源碼:
https://github.com/LantaoYu/SeqGAN
-
文本將誤差作為一種增強(qiáng)學(xué)習(xí)的獎(jiǎng)勵(lì),以一種前饋的方式訓(xùn)練,用增強(qiáng)的學(xué)習(xí)的探索模式去更新G網(wǎng)絡(luò)。
-
主要內(nèi)容:這篇論文將序列生成過程當(dāng)作一個(gè)sequential decision making過程。如下圖:
(a) 其中左圖為GAN網(wǎng)絡(luò)訓(xùn)練的步驟1,判別器D主要用來區(qū)分真實(shí)樣本和偽造樣本,這里的判別器D是用CNN來實(shí)現(xiàn)的。
(b) 右圖為GAN網(wǎng)絡(luò)訓(xùn)練的步驟2, 根據(jù)判別器D回傳的判別概率回傳給生成器G,通過增強(qiáng)學(xué)習(xí)的方法來更新生成器G,這里的的生成器G是用LSTM來實(shí)現(xiàn)的.
(c) 因?yàn)镚網(wǎng)絡(luò)的更新策略是增強(qiáng)學(xué)習(xí),增強(qiáng)學(xué)習(xí)的四個(gè)要素state, action, policy, reward分別為:state 為現(xiàn)在已經(jīng)生成的tokens (當(dāng)前timestep之前LSTM decoder的結(jié)果), action是下一個(gè)即將生成的token (當(dāng)前解碼詞), policy為GAN的生成器G網(wǎng)絡(luò),reward為GAN的判別器D網(wǎng)絡(luò)所生成的判別概率。其中,reward采用以下方法來近似:
本過程特點(diǎn):即當(dāng)解碼到t時(shí),即對后面T-t個(gè)timestep采用蒙特卡洛搜索搜索出N條路徑,將這N條路徑分別和已經(jīng)decode的結(jié)果組成N條完整輸出,然后將D網(wǎng)絡(luò)對應(yīng)獎(jiǎng)勵(lì)的平均值作為reward. 因?yàn)楫?dāng)t=T時(shí)無法再向后探索路徑,所以直接以完整decode結(jié)果的獎(jiǎng)勵(lì)作為reward。
(d) 對于RL部分,本文采用了policy gradient方法。 根據(jù)policy gradient理論,生成器G的目標(biāo)函數(shù)可以表示如下:
求導(dǎo)結(jié)果為: (詳細(xì)推導(dǎo)過程請看原論文附頁)
(e) 每隔一段時(shí)間,當(dāng)生成更多的更逼真的句子后,重新訓(xùn)判別器D,其中判別器的目標(biāo)函數(shù)表示如下:
算法結(jié)構(gòu)圖可以表示為如下:
-
實(shí)驗(yàn)
實(shí)驗(yàn)部分主要分為合成數(shù)據(jù)實(shí)驗(yàn)和現(xiàn)實(shí)數(shù)據(jù)實(shí)驗(yàn)。
(a) 合成數(shù)據(jù)實(shí)驗(yàn): 隨機(jī)初始一個(gè)LSTM生成器A,隨機(jī)生成一部分訓(xùn)練數(shù)據(jù),來訓(xùn)練各種生成模型.
評判標(biāo)準(zhǔn)為:負(fù)對數(shù)似然(交叉熵) NLL. 詳細(xì)實(shí)驗(yàn)設(shè)置可以參看原論文。
(b) 現(xiàn)實(shí)數(shù)據(jù)實(shí)驗(yàn):主要展示中文詩句生成,奧巴馬演講生成,音樂生成的結(jié)果。實(shí)驗(yàn)數(shù)據(jù)分別為中文詩歌數(shù)據(jù)集 (16,394首絕句),奧巴馬演講數(shù)據(jù)集 (11,092 段落), Nottingham音樂數(shù)據(jù)集 (695首歌)。評測方法為BLEU score, 實(shí)驗(yàn)結(jié)果如下:
文中并未展示模型生成的詩歌等, 具體效果如何?
3. Adversarial Learning for Neural Dialogue Generation
-
論文鏈接:https://
https://arxiv.org/pdf/1701.06547.pdf
-
論文源碼:
https://github.com/jiweil/Neural-Dialogue-Generation
-
這篇論文是2017年1月26號(hào)上傳到arxiv上的,屬于最新的GAN用于NLP的論文。文中主要用對抗性訓(xùn)練 (adversarial training) 方法來進(jìn)行開放式對話生成 (open-domain dialogue generation)。文中把這項(xiàng)任務(wù)作為強(qiáng)化學(xué)習(xí)(RL)問題,聯(lián)合訓(xùn)練生成器和判別器。和SeqGAN一樣,本文也是使用判別器D的結(jié)果作為RL的reward部分,這個(gè)reward用來獎(jiǎng)勵(lì)生成器G,推動(dòng)生成器G產(chǎn)生的對話類似人類對話。
-
總體來說,本文的思路和SeqGAN是大體一樣的,但是有幾處不同和改進(jìn)的地方:
(a) 因?yàn)楸疚氖怯糜陂_放式對話生成,所以文中的生成器采用seq2seq模型 (而非普通的LSTM模型)。 判別器則采用了hierarchical encoder (而非CNN)。
(b) 采取了兩種方法為完全生成或者部分生成的序列計(jì)算reward。除了 Monte Carlo search (與SeqGAN相似) 方法,本文新提出了一個(gè)能對部分生成的序列進(jìn)行reward計(jì)算的方法。使用所有完全 (fully) 和部分 (partially) 解碼的序列來訓(xùn)練判別器會(huì)造成overfitting。早期產(chǎn)生的部分(partially)序列會(huì)出現(xiàn)在許多的訓(xùn)練數(shù)據(jù)中,比如生成的第一個(gè)token y_1將會(huì)出現(xiàn)在所有的部分生成 (partially generated) 的序列里。所以本文提出僅僅分別從正(positive)序列 y+ 和負(fù)(negative)序列y-的每個(gè)子序列中隨機(jī)地選取一個(gè) sample來訓(xùn)練判別器D。這個(gè)方法比Monte Carlo search更快速,但是也會(huì)使得判別器更弱,更不準(zhǔn)確。
(c) 在SeqGAN中,生成器只能間接的通過判別器生成的reward來獎(jiǎng)勵(lì)或者懲罰自己所產(chǎn)生的序列。而不能直接從 gold-standard序列中直接獲取信息。 這種訓(xùn)練方式是脆弱的,一旦生成器在某個(gè)訓(xùn)練batch中變壞,判別器將會(huì)很容易對生成的句子進(jìn)行判斷 (比如reward為0 ),此時(shí)生成器就會(huì)迷失。生成器只知道現(xiàn)在生成的句子是壞的,但是并不知道如何調(diào)整才能使得生成的句子變好。為了解決這個(gè)問題,在生成器的更新過程中,本文輸入了human-generated responses。對于這些human-generated responses, 判別器可以將其reward設(shè)置為1。這樣生成器可以在上述情況下仍能生成好的responses。
(d) 訓(xùn)練過程中,有些針對dialogue system的設(shè)置(trick)。這部分內(nèi)容,讀者可以參考Jiwei Li之前的關(guān)于dialogue system的論文。
-
部分實(shí)驗(yàn)結(jié)果:
-
值得思考的地方:文中只嘗試用判別器的結(jié)果作為reward, 結(jié)合 原文作者之前在dialogue system文中提出的其他reward機(jī)制(e.g., mutual information)會(huì)不會(huì)提高效果?
4. GANs for sequence of discrete elements with the Gumbel-softmax distribution
-
論文鏈接:https://
https://arxiv.org/pdf/1611.04051.pdf
-
相比前面兩篇論文,本文在處理離散數(shù)據(jù)這個(gè)問題上則比較簡單暴力。離散數(shù)據(jù) (用one-hot方法表示)一般可以從多項(xiàng)式采樣取得,例如由softmax函數(shù)的輸出p = softmax(h)。 根據(jù)之前的概率分布,以p的概率進(jìn)行采樣y的過程等價(jià)于:y=one_hot(argmax_i(h_i+g_i)) , 其中g(shù)_i是服從Gumbel distribution (with zero location and unit scale)。然而one_hot(argmax(.)) 是不可微分的。與原始GAN不同,作者提出了一種方法來近似上面的式子: y = softmax(1/ r (h + g))。這個(gè)公式是可以微分的。算法結(jié)構(gòu)如下:
-
本文的實(shí)驗(yàn)部分做得比較粗糙,只展示了生成得context-free grammar, 并未在生成其他文本數(shù)據(jù)上做實(shí)驗(yàn)。
-
總的來說,這篇論文本身方法還值得改進(jìn),也可以值得借鑒下。
5. Connecting generative adversarial network and actor-critic methods
-
論文鏈接:https://https://arxiv.org/pdf/1610.01945.pdfhttps://arxiv.org/pdf/1610.01945.pdf啊發(fā)afaffa
https://arxiv.org/pdf/1610.01945.pdf
-
Actor-critic methods [2]: 許多RL方法 (e.g., policy gradient) 只作用于policy 或者 value function。Actor-critic方法則結(jié)合了policy-only和value function-only 的方法。 其中critic用來近似或者估計(jì)value function,actor 被稱為policy structure, 主要用來選擇action。Actor-critic是一個(gè)on-policy的學(xué)習(xí)過程。Critic模型的結(jié)果用來幫助提高actor policy的性能。
-
GAN和actor-critic具有許多相似之處。Actor-critic模型中的actor功能類似于GAN中的generator, 他們都是用來take an action or generate a sample。Actor-critic模型中的critic則類似于GAN中的discriminator, 主要用來評估 actor or generator 的輸出。具體的相同和不同點(diǎn),感興趣的朋友可以仔細(xì)閱讀原文。
-
這篇論文主要貢獻(xiàn)在于從不同的角度來說明了GAN和actor-critic模型的相同與不同點(diǎn),從而鼓勵(lì)研究GAN的學(xué)者和研究actor-critic模型的學(xué)者合作研發(fā)出通用、穩(wěn)定、可擴(kuò)展的算法,或者從各自的研究中獲取靈感。
-
最近Bahdanau等大神提出了用actor-critic模型來進(jìn)行sequence prediction [3]。雖然[3]中并沒有用到GAN,或許對各位能有啟發(fā)。 用類似的思想,GAN在sequence prediction上也許也能取得的比較好的效果?
[1] 深度解讀:GAN模型及其在2016年度的進(jìn)展
[2] Actor-Critic Algorithms
[3] An actor-critic algorithm for sequence prediction
-
GaN
+關(guān)注
關(guān)注
19文章
1946瀏覽量
73677 -
nlp
+關(guān)注
關(guān)注
1文章
489瀏覽量
22053
原文標(biāo)題:干貨|GAN for NLP (論文筆記及解讀)
文章出處:【微信號(hào):DatamingHacker,微信公眾號(hào):深度學(xué)習(xí)與數(shù)據(jù)挖掘?qū)崙?zhàn)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論