雷鋒網 AI科技評論按,本文作者華南理工大學胡楊 ,本文首發于知乎專欄GAN + 文本生成 + 讀博干貨 ,雷鋒網 AI科技評論獲其授權轉載。
1.基礎:文本生成模型的標準框架
文本生成(Text Generation)通過 機器學習 + 自然語言處理 技術嘗試使AI具有人類水平的語言表達能力,從一定程度上能夠反應現今自然語言處理的發展水平。
下面用極簡的描述介紹一下文本生成技術的大體框架,具體可以參閱各種網絡文獻(比如:CSDN經典Blog“好玩的文本生成”[1]),論文等。
文本生成按任務來說,比較流行的有:機器翻譯、句子生成、對話生成等,本文著重討論后面兩種。基于深度學習的Text Generator 通常使用循環神經網絡(Basic RNN,LSTM,GRU等)進行語義建模。在句子生成任務中,一種常見的應用:“Char-RNN”(這里“Char”是廣義上的稱謂,可以泛指一個字符、單詞或其他文本粒度單位),雖然簡單基礎但可以清晰反應句子生成的運行流程,首先需要建立一個詞庫Vocab包含可能出現的所有字符或是詞匯,每次模型將預測得到句子中下一個將出現的詞匯,要知道softmax輸出的只是一個概率分布,其維度為詞庫 Vocab 的size,需再通過函數將輸出概率分布轉化為 One-hot vector,從詞庫 Vocab 中檢索得出對應的詞項;在“Char-RNN”模型訓練時,使用窗口在語料上滑動,窗口之內的上下文及其后緊跟的字符配合分別為一組訓練樣本和標簽,每次以按照固定的步長滑動窗口以得出全部“樣本-標簽”對。
與句子生成任務類似,對話生成以每組Dialogue作為“樣本-標簽”對,循環神經網絡RNN_1對Dialogue上文進行編碼,再用另一個循環神經網絡RNN_2對其進行逐詞解碼,并以上一個解碼神經元的輸出作為下一個解碼神經元的輸入,生成Dialogue下文,需要注意的是:在解碼前需配置“開始”標記 _,用于指示解碼器Decoder開啟Dialogue下文首詞(or 字)的生成,并配置“結束”標記 _,用于指示解碼器結束當前的 Text Generation 進程。
<img src="https://static.leiphone.com/uploads/new/article/pic/201710/45e8182d5e3f468ea7755780901c02aa.png" data-rawwidth="1884" data-rawheight="416" class="origin_image zh-lightbox-thumb" width="1884" data-original="https://pic4.zhimg.com/v2-e0208f79830f25227f82be49b1722083_r.png" _src="https://static.leiphone.com/uploads/new/article/pic/201710/45e8182d5e3f468ea7755780901c02aa.png"/>
這便是眾所周知的“Seq2Seq”框架的基礎形態,為了提高基礎Seq2Seq模型的效果,直接從解碼器的角度有諸如 Beam-Search Decoder[2]、Attention mechanism Decoder[3](配置注意力機制的解碼器)等改進,而從神經網絡的結構入手,也有諸如Pyramidal RNN[4](金字塔型RNN)、Hierarchical RNN Encoder[5](分層循環網絡編碼器)等改進。改進不計其數,不一一詳舉,但不管如何,預測結果的輸出始終都是一個維度為詞庫大小的概率分布,需要再甄選出最大值的Index,到詞庫Vocab中檢索得出對應的單詞(or 字符)。
2.問題:GAN為何不能直接用于文本生成
2.1. GAN基礎知識
GAN對于大家而言想必已經膾炙人口了,這里做一些簡單的復習。GAN從結構上來講巧妙而簡單(盡管有與其他經典工作Idea相似的爭議[6~7]),也非常易于理解,整個模型只有兩個部件:1.生成器G;2.判別器D。生成模型其實由來已久,所以生成器也并不新鮮,生成器G的目標是生成出最接近于真實樣本的假樣本分布,在以前沒有判別器D的時候,生成器的訓練依靠每輪迭代返回當前生成樣本與真實樣本的差異(把這個差異轉化成loss)來進行參數優化,而判別器D的出現改變了這一點,判別器D的目標是盡可能準確地辨別生成樣本和真實樣本,而這時生成器G的訓練目標就由最小化“生成-真實樣本差異”變為了盡量弱化判別器D的辨別能力(這時候訓練的目標函數中包含了判別器D的輸出)。GAN模型的大體框架如下圖所示:
<img src="https://static.leiphone.com/uploads/new/article/pic/201710/21db25b395c9eb9be29e1e447cc0c16b.png" data-rawwidth="778" data-rawheight="308" class="origin_image zh-lightbox-thumb" width="778" data-original="https://pic1.zhimg.com/v2-13d967ddadaa3bc218cc223e113afb30_r.png" _src="https://static.leiphone.com/uploads/new/article/pic/201710/21db25b395c9eb9be29e1e447cc0c16b.png"/>
我們再來簡單復習一下GAN當中的一些重要公式,這一步對后文的闡述非常重要。不管生成器G是什么形狀、多么深的一個神經網絡,我們暫且把它看成一個函數 ,由它生成的樣本記作: ,相對地,真實樣本記作: 。同樣,不管判別器D作為一個分類神經網絡,我們也可將其視為一個函數 ,而這個函數的輸出即為一個標量,用于描述生成樣本 與真實樣本 之間的差距。
而GAN模型的整體優化目標函數是:
其中函數 如下:
根據連續函數的期望計算方法,上式變形為:
先求外層的 的話,對積分符號內的多項式求導取極值得到目標D:
代回原式:
所以,當生成器G能生成出與真實樣本一樣分布的樣本,那么ok,就達到最好的結果,然后大家注意一點,這里生成樣本的loss衡量方法是JS散度。
2.2. GAN面對離散型數據時的困境(啥是離散型數據?)
GAN的作者早在原版論文[8]時就提及,GAN只適用于連續型數據的生成,對于離散型數據效果不佳(使得一時風頭無兩的GAN在NLP領域一直無法超越生成模型的另一大佬VAE[9])。文本數據就是最典型的一種離散型數據,這里所謂的離散,并不是指:文本由一個詞一個詞組成,或是說當今最流行的文本生成框架,諸如Seq2Seq,也都是逐詞(或者逐個Character)生成的。因為哪怕利用非循環網絡進行一次成型的Sentences生成,也無法避免“數據離散”帶來的后果,抱歉都怪我年輕時的無知,離散型數據的真正含義,我們要從連續性數據說起。 圖像數據就是典型的連續性數據,故而GAN能夠直接生成出逼真的畫面來。我們首先來看看圖像數據的形狀:
<img src="https://static.leiphone.com/uploads/new/article/pic/201710/a4a696aeef7f32645283e14d4ecaaa0e.png" data-rawwidth="1002" data-rawheight="359" class="origin_image zh-lightbox-thumb" width="1002" data-original="https://pic3.zhimg.com/v2-d6d802f84e23e4a127101d700a2decaa_r.png" _src="https://static.leiphone.com/uploads/new/article/pic/201710/a4a696aeef7f32645283e14d4ecaaa0e.png"/>
圖像數據在計算機中均被表示為矩陣,若是黑白圖像矩陣中元素的值即為像素值或者灰度值(抱歉外行了,我不是做圖像的),就算是彩色圖像,圖像張量即被多加了一階用于表示RGB通道,圖像矩陣中的元素是可微分的,其數值直接反映出圖像本身的明暗,色彩等因素,很多這樣的像素點組合在一起,就形成了圖像,也就是說,從圖像矩陣到圖像,不需要“采樣”(Sampling),有一個更形象的例子:畫圖軟件中的調色板,如下圖,你在調色板上隨便滑動一下,大致感受一下圖像數據可微分的特性。
<img src="https://static.leiphone.com/uploads/new/article/pic/201710/2399499c2a95f396955acd7bed3afcf9.png" data-rawwidth="517" data-rawheight="228" class="origin_image zh-lightbox-thumb" width="517" data-original="https://pic3.zhimg.com/v2-4bf93a67a716b7b1a14dd5d1f46c7d4a_r.png" _src="https://static.leiphone.com/uploads/new/article/pic/201710/2399499c2a95f396955acd7bed3afcf9.png"/>
文本數據可就不一樣了,做文本的同學都知道,假設我們的詞庫(Vocabulary)大小為1000,那么每當我們預測下一個出現的詞時,理應得到的是一個One-hot的Vector,這個Vector中有999項是0,只有一項是1,而這一項就代表詞庫中的某個詞。然而,真正的隔閡在于,我們每次用無論什么分類器或者神經網絡得到的直接結果,都是一個1000維的概率分布,而非正正好好是一個One-hot的Vector,即便是使用softmax作為輸出,頂多也只能得到某一維上特別大,其余維上特別小的情況,而將這種輸出結果過渡到One-hot vector 然后再從詞庫中查詢出對應index的詞,這樣的操作被稱為“Sampling”,通常,我們找出值最大的那一項設其為1,其余為0。
<img src="https://static.leiphone.com/uploads/new/article/pic/201710/f5a072a25c4b980a6dcdc2a1481ce4d8.png" data-rawwidth="638" data-rawheight="371" class="origin_image zh-lightbox-thumb" width="638" data-original="https://pic4.zhimg.com/v2-c63f137b83a50c62aa14e895994bd3d7_r.png" _src="https://static.leiphone.com/uploads/new/article/pic/201710/f5a072a25c4b980a6dcdc2a1481ce4d8.png"/>
當前神經網絡的優化方法大多數都是基于梯度的(Gradient based),很多文獻這么說:GAN在面對離散型數據時,判別網絡無法將梯度Back propagation(BP)給生成網絡。這句話當時讓我等聽的云里霧里,不妨換一個角度理解,我們知道,基于梯度的優化方法大致意思是這樣的,微調網絡中的參數(weight),看看最終輸出的結果有沒有變得好一點,有沒有達到最好的情形。
但是判別器D得到的是Sampling之后的結果,也就是說,我們經過參數微調之后,即便softmax的輸出優化了一點點,比如上圖的例子中,正確結果本應是第三項,其output的倒數第二項從 變為了 ,第三項從 變為了 ,但是經過Sampling之后,生成器G輸出的結果還是跟以前一模一樣,并再次將相同的答案重復輸入給判別器D,這樣判別器D給出的評價就會毫無意義,生成器G的訓練也會失去方向。
有人說,與其這樣不如每次給判別器D直接吃Sampling之前的結果,也就是softamx輸出的那個distribution,同樣,這么做也有很大的問題。我們回到GAN的基本原理,判別器D的初衷,它經歷訓練就是為了準確辨別生成樣本和真實樣本的,那么生成樣本是一個充滿了float小數的分布,而真實樣本是一個One-hot Vector,判別器D很容易“作弊”,它根本不用去判斷生成分布是否與真實分布更加接近,它只需要識別出給到的分布是不是除了一項是 ,其余都是 就可以了。所以無論Sampling之前的分布無論多么接近于真實的One-hot Vector,只要它依然是一個概率分布,都可以被判別器D輕易地檢測出來。
上面所說的原因當然也有數學上的解釋,還記得在2.1節的時候,請大家注意生成樣本的loss衡量標準是什么嗎?沒錯,就是JS散度, 在應用上其實是有弱點的(參考文獻[10]),它只能被正常地應用于互有重疊(Overlap)的兩個分布,當面對互不重疊的兩個分布 和 ,其JS散度:
大家再想想,除非softmax能output出與真實樣本 exactly 相同的獨熱分布(One-hot Vector)(當然這是不可能的),還有什么能讓生成樣本的分布與真實樣本的分布發生重疊呢?于是,生成器無論怎么做基于Gradient 的優化,輸出分布與真實分布的 始終是 ,生成器G的訓練于是失去了意義。
3. 過渡方案:對于GAN的直接改進用于文本生成
為了解決GAN在面對離散數據時的困境,最直接的想法是對GAN內部的一些計算方式進行微調,這種對于GAN內部計算方式的直接改進也顯示出了一定的效果,為后面將GAN直接、流暢地應用于文本等離散型數據的生成帶來了希望。 接下來簡單介紹相關的兩篇工作[11~12]。
3.1. Wasserstein-divergence,額外的禮物
Wasserstein GAN[13](簡稱WGAN),其影響力似乎達到了原版GAN的高度,在國內也有一篇與其影響力相當的博文——“令人拍案叫絕的Wasserstein GAN”[10],不過在看這篇論文之前,還要推薦另外一篇論文“f-GAN”[14],這篇論文利用芬切爾共軛(Fenchel Conjugate)的性質證明了任何 都可以作為原先GAN中 (或者說 )的替代方案。 f-GAN 的定義如下:
公式中的 被稱為 f函數,它必須滿足以下要求:
不難看出, 也是 的一種,f-GAN 原文提供了數十種各式各樣的 ,為GAN接下來沿此方向上的改進帶來了無限可能。
Wasserstein GAN 對GAN的改進也是從替換 這個角度對GAN進行改進,其詳細的妙處大可參看文獻[10,13],總的來說,WGAN采用了一種奇特的 Divergence—— “推土機-Divergence”, 將兩個分布看作兩堆土,Divergence 計算的就是為了將兩個土堆推成一樣的形狀所需要泥土搬運總距離。如下圖:
<img src="https://static.leiphone.com/uploads/new/article/pic/201710/b127179474f2a7d10563c39d2c7a7428.png" data-rawwidth="732" data-rawheight="274" class="origin_image zh-lightbox-thumb" width="732" data-original="https://pic1.zhimg.com/v2-138c3d164c6a9093c7a78c0c2b349b78_r.png" _src="https://static.leiphone.com/uploads/new/article/pic/201710/b127179474f2a7d10563c39d2c7a7428.png"/>
使用 訓練的GAN相比原版的GAN有更加明顯的“演化”過程,換句話說就是,WGAN的訓練相比與GAN更加能突顯從“不好”到“不錯”的循序漸經的過程。從上面的2.2節,我們知道JS散度在面對兩個分布不相重疊的情況時,將發生“異常”,計算結果均為 ,GAN的訓練過程也是這樣,也許在很長一段訓練的過程中,JS散度的返回值都是 ,只有到達某個臨界點時,才會突然優化為接近最優值的結果,而Wasserstein散度的返回值則要平滑很多。
<img src="https://static.leiphone.com/uploads/new/article/pic/201710/2dc15afd7b16a40aff85d43b620c5345.png" data-rawwidth="1070" data-rawheight="306" class="origin_image zh-lightbox-thumb" width="1070" data-original="https://pic1.zhimg.com/v2-d0a3659acd54df7abc77642e940dc8c0_r.png" _src="https://static.leiphone.com/uploads/new/article/pic/201710/2dc15afd7b16a40aff85d43b620c5345.png"/>
既然Wasserstein散度能夠克服JS散度的上述弱點,那么使用Wasserstein GAN直接吸收生成器G softmax層output的Distribution Vector 與真實樣本的 One-hot Vector,用判別器D 進行鑒定,即便判別器D不會傻到真的被“以假亂真”,但生成器output每次更加接近于真實樣本的“進步”總算還是能被傳回,這樣就保證了對于離散數據的對抗訓練能夠繼續下去。不過Wasserstein GAN的原著放眼于對于GAN更加遠大的改進意義,并沒有著重給出關于文本生成等離散數據處理的實驗,反倒是后來的一篇“Improved Training of Wasserstein GANs”[11]專門給出了文本生成的實驗,從結果上可以看出,WGAN生成的文本雖然遠不及當下最牛X的文本生成效果,但好歹能以character為單位生成出一些看上去稍微正常一點的結果了,對比之下,GAN關于文本生成的生成結果顯然是崩塌的。
<img src="https://static.leiphone.com/uploads/new/article/pic/201710/fa383b3868470fe9d94907964affbfd2.png" data-rawwidth="720" data-rawheight="268" class="origin_image zh-lightbox-thumb" width="720" data-original="https://pic4.zhimg.com/v2-1348b95ad2e84c51501ca3601d480bc7_r.png" _src="https://static.leiphone.com/uploads/new/article/pic/201710/fa383b3868470fe9d94907964affbfd2.png"/>
3.2. Gumbel-softmax,模擬Sampling的softmax
另外一篇來自華威大學+劍橋大學的工作把改進GAN用于離散數據生成的重心放在了修改softmax的output這方面。如2.2節所述,Sampling 操作中的 函數將連續的softmax輸出抽取成離散的成型輸出,從而導致Sampling的最終output是不可微的,形成GAN對于離散數據生成的最大攔路虎,既然不用Sampling的時候,output與真實分布不重疊,導致JS散度停留于固定值 ,如果用了Sampling的話,離散數據的正常輸出又造成了梯度 Back-Propagation 上天然的隔閡。
既然如此,論文的作者尋找了一種可以高仿出Sampling效果的特殊softmax,使得softmax的直接輸出既可以保證與真實分布的重疊,又能避免Sampling操作對于其可微特征的破壞。它就是“耿貝爾-softmax”(Gumbel-Softmax),Gumbel-Softmax早先已經被應用于離散標簽的再分布化[15](Categorical Reparameterization),在原先的Sampling操作中, 函數將普通softmax的輸出轉化成One-hot Vector:
而Gumbel-Softmax略去了 + 這一步,能夠直接給出近似Sampling操作的輸出:
精髓在于這其中的“逆溫參數” ,當 時,上式所輸出的分布等同于 + 給出的 Sampling 分布,而當 時,上式的輸出就接近于均勻分布,而 則作為這個特殊softmax中的一個超參數,給予一個較大的初始值,通過訓練學習逐漸變小,向 逼近,這一部分詳細內容可以閱讀文獻[15]。
論文的實驗僅僅嘗試使用配合Gumbel-Softmax的GAN進行長度固定為12的 Context-free grammar 序列生成,可見GAN的訓練并沒有崩塌,在少數樣例上也得到了還算逼真的效果。
<img src="https://static.leiphone.com/uploads/new/article/pic/201710/539e7c71b2cb29fd7dfe72273b77bc7a.png" data-rawwidth="519" data-rawheight="334" class="origin_image zh-lightbox-thumb" width="519" data-original="https://pic3.zhimg.com/v2-0d95916acfa788a35143f75c7dd11086_r.png" _src="https://static.leiphone.com/uploads/new/article/pic/201710/539e7c71b2cb29fd7dfe72273b77bc7a.png"/>
所以,對于GAN進行直接改進用于文本生成,雖說是取得了一定的成效,但距離理想的狀態仍然道阻且長,有沒有更好的辦法呢?當然!
4. RL在GAN文本生成中所扮演的作用
4.1. 關于Reinforcement Learning的閑聊閑扯
強化學習(Reinforcement Learning,RL)由于其前衛的學習方式,本不如監督學習那么方便被全自動化地實現,并且在很多現實應用中學習周期太長,一直沒有成為萬眾矚目的焦點,直到圍棋狗的出現,才吸引了眾多人的眼球。
RL通常是一個馬爾科夫決策過程,在各個狀態 下執行某個動作 都將獲得獎勵(或者是"負獎勵"——懲罰) ,而將從頭到尾所有的動作連在一起就稱為一個“策略”或“策略路徑” ,強化學習的目標就是找出能夠獲得最多獎勵的最優策略:
為了達到這個目標,強化學習機可以在各個狀態嘗試各種可能的動作,并通過環境(大多數是人類)反饋的獎勵或者懲罰,評估并找出能夠最大化期望獎勵 的策略。
其實也有人將RL應用于對話生成的訓練當中[16],因為對話生成任務本身非常符合強化學習的運行機理(讓人類滿意,拿獎勵)。設,根據輸入句子 ,返回的回答 從人類得到的獎勵記為 ,而Encoder-Decoder對話模型服從的參數被統一記為 ,則基于RL的目標函數說白了就是最大化生成對話的期望獎勵,其中 表示在參數 下,一組對話 出現的概率。
既然是一個最優化的問題,很直接地便想到使用基于梯度(Gradient)的優化方法解決。當然,在強化學習中,我們要得到的是最優策略 ,此過程便在強化學習領域常聽到的 Policy Gradient。我們把等式右邊 中的項單獨記為 ,它表示對話模型找到最優參數時所得到的獎勵期望。在實做時,設某句話的應答有$N$種可能性,則每組對話 出現的概率可視為服從均勻分布,故還可以進行如下變形:
在優化過程中,對話模型的權重 更新如下, 為所獲獎勵的變化梯度,
借助復合函數的求導法則,繼續推導獎勵的變化梯度,
這樣一來,梯度優化的重心就轉化到了生成對話的概率上來,也就是說,通過對參數 進行更新,獎勵會使模型趨于將優質對話的出現概率提高,而懲罰則會讓模型趨于將劣質對話的出現概率降低。
自AlphaGo使得強化學習猛然進入大眾視野以來,大部分對于強化學習的理論研究都將游戲作為主要實驗平臺,這一點不無道理,強化學習理論上的推導看似邏輯通順,但其最大的弱點在于,基于人工評判的獎勵 的獲得,讓實驗人員守在電腦前對模型吐出來的結果不停地打分看來是不現實的,游戲系統恰恰能會給出正確客觀的打分(輸/贏 或 游戲Score)。基于RL的對話生成同樣會面對這個問題,研究人員采用了類似AlphaGo的實現方式(AI棋手對弈)——同時運行兩個機器人,讓它們自己互相對話,同時,使用預訓練(pre-trained)好的“打分器”給出每組對話的獎勵得分 ,關于這個預訓練的“打分器” ,可以根據實際的應用和需求自己DIY。
稍微感受一下RL ChatBot的效果:
4.2. SeqGAN 和 Conditional SeqGAN
前面說了這么多,終于迎來到了高潮部分:RL + GAN for Text Generation,SeqGAN[17]站在前人RL Text Generation的肩膀上,可以說是GAN for Text Generation中的代表作。上面雖然花了大量篇幅講述RL ChatBot的種種機理,其實都是為了它來做鋪墊。試想我們使用GAN中的判別器D作為強化學習中獎勵 的來源,假設需要生成長度為T的文本序列,則對于生成文本的獎勵值 計算可以轉化為如下形式:
這里要說明幾點,假設需要生成的序列總長度為 , 是指先前已經生成的部分序列(在RL中可視為當前的狀態),通過蒙特卡洛搜索得到 種后續的序列,盡管文本生成依舊是逐詞尋找期望獎勵最大的Action(下一個詞),判別器D還是以整句為單位對生成的序列給出得分 。
在新一代的判別器 訓練之前,生成器 根據當前判別器 返回的得分不斷優化自己:
直到生成器G生成的文本足以亂真的時候,就是更新訓練新判別器的時候了。一般來說,判別器D對生成序列打出的得分既是其判斷該序列為真實樣本的概率值,按照原版GAN的理論,判別器D對于 real/fake 樣本給出的鑒定結果均為 時,說明生成器G所生成的樣本足以亂真,那么倘若在上面的任務中,判別器屢屢對生成樣本打出接近甚至高出 的得分時,即說明判別器D需要再訓練了。在實做中為了方便,一般等待多輪生成器的訓練后,進行一次判別器的訓練。
<img src="https://static.leiphone.com/uploads/new/article/pic/201710/065f1dd468fa09091d9499ab082d84fe.png" data-rawwidth="936" data-rawheight="252" class="origin_image zh-lightbox-thumb" width="936" data-original="https://pic3.zhimg.com/v2-ffec6641001bca75c3b73574c1202cf6_r.png" _src="https://static.leiphone.com/uploads/new/article/pic/201710/065f1dd468fa09091d9499ab082d84fe.png"/>
SeqGAN的提出為GAN用于對話生成(Chatbot)完成了重要的鋪墊,同樣起到鋪墊作用的還有另外一個GAN在圖像生成領域的神奇應用——Conditional GAN[18~19],有條件的GAN,顧名思義就是根據一定的條件生成一定的東西,該工作根據輸入的文字描述作為條件,生成對應的圖像,比如:
<img src="https://static.leiphone.com/uploads/new/article/pic/201710/3541ab1b384a7d2761b372d79b9ee193.png" data-rawwidth="205" data-rawheight="187" class="content_image" width="205" _src="https://static.leiphone.com/uploads/new/article/pic/201710/3541ab1b384a7d2761b372d79b9ee193.png"/>
對話生成可以理解為同樣的模式,上一句對話作為條件,下一句應答則為要生成的數據,唯一的不同是需要生成離散的文本數據,而這個問題,SeqGAN已經幫忙解決了。綜上,我自己給它起名:Conditional SeqGAN[20]。根據4.1節以及本節的推導,Conditional SeqGAN中的優化梯度可寫成:
不難看出,此式子與4.1節中的變化梯度僅一字之差,只是把“打分器”給出的獎勵得分 換成了鑒別器認為生成對話來自真人的概率得分 。看似差別很很小,實際上 RL + GAN 的文本生成技術與單純基于RL的文本生成技術有著本質的區別:在原本的強化學習對話生成中,雖然采用了AI互相對話,并設定了 jugle 進行打分,但這個 jugle 是預訓練好的,在對話模型的訓練過程當中將不再發生變化;RL + GAN 的文本生成乃至對話模型則不同,鑒別器D與生成器G的訓練更新將交替進行,此消彼長,故而給出獎勵得分的鑒別器D在這里是動態的(dynamic)。
<img src="https://static.leiphone.com/uploads/new/article/pic/201710/85eb91cf57d97918b9cbaa9f41720308.png" data-rawwidth="975" data-rawheight="250" class="origin_image zh-lightbox-thumb" width="975" data-original="https://pic3.zhimg.com/v2-fd0734aa7da9a9e0d6974674add48616_r.png" _src="https://static.leiphone.com/uploads/new/article/pic/201710/85eb91cf57d97918b9cbaa9f41720308.png"/>
RL+ GAN 利用強化學習中的 機制以及 Policy Gradient 等技術,巧妙地避開了GAN面對離散數據時梯度無法BP的難題,在使用強化學習的方法訓練生成器G的間隙,又采用對抗學習的原版方法訓練判別器D。 在Conditional SeqGAN對話模型的一些精選結果中,RL+ GAN 訓練得到的生成器時常能返回一些類似真人的逼真回答(我真有那么一絲絲接近“恐怖谷”的感受)。
<img src="https://static.leiphone.com/uploads/new/article/pic/201710/5e0cc96a6a01e731115e8651f083c9ed.png" data-rawwidth="669" data-rawheight="297" class="origin_image zh-lightbox-thumb" width="669" data-original="https://pic2.zhimg.com/v2-3fd8813f6ccf1ea635db61bb11d8aee9_r.png" _src="https://static.leiphone.com/uploads/new/article/pic/201710/5e0cc96a6a01e731115e8651f083c9ed.png"/>
另外,相關細節與延伸 參見強化學習在生成對抗網絡文本生成中扮演的角色(Role of RL in Text Generation by GAN)(下) 。
雷峰網版權文章,未經授權禁止轉載。詳情見轉載須知 。