序列生成 序列生成 SeqGAN和RankGAN

2021-10-14 21:50:00 字數 1462 閱讀 9313

這篇文章主要介紹兩個序列生成的gan模型,分別是發表在aaai 2017上的seqgan和 nips 2017上的 rankgan

seqgan: sequence generative adversarial nets with policy gradient​arxiv.org

adversarial ranking for language generation​59.80.44.49

除了在影象領域有顯著的成果,在序列生成任務中,gan並不能直接應用。與連續型數值的影象不同,在序列生成中資料由於經過了取樣,離散的資料是沒辦法直接計算梯度的。除此之外,gan僅僅可以對整個序列給出乙個score或者loss,沒辦法對部分生成的序列進行判斷,如何權衡當前和未來的score是很重要的。對於第乙個問題,可以用強化學習中的policy gradient來解決,而對於第二個問題,則可以使用monte carlo方法來近似狀態-動作值。下面分別來介紹兩篇**。

之後就可以利用策略梯度的方法進行優化,使模型增加得到reward大的動作的概率,梯度為。

引數更新

具體演算法為

seqgan中的生成器可以用lstm或者gru或者普通的rnn,而判別器作者選擇cnn。

第二篇**為了生成高質量的語言描述,提出了rankgan的方法。傳統的gan中判別器是乙個二分類模型,只用來判別輸入資料來自真實分布還是來自生成器。而rankgan的作者將判別器看作是learning to rank的優化問題,將discriminator變為ranker,使得對於參考資料,生成的資料與真實的資料相比,ranker的排序更低。因此,rankgan的reward包含這相對排序資訊。整體的優化目標為

其中

之後用類似softmax的公式計算ranking score

之後就可以利用gan的方法進行訓練。rankgan的reward與seqgan的reward定義與計算相同。因為加入了排序資訊,rankgan得到的文字質量更高,文中的實驗部分也有與seqgan的實驗對比。

12 1 生成序列

12.1 生成序列 生成序列有幾種方法,先來看一下我們的選擇,直接的方法是實現ienumerator 介面,提供 current 屬性,和 movenext方法,將列舉數物件移動到下乙個元素。這要求顯式建立有可變狀態的物件,很明顯違反了函式式風格。通常的做法是隱藏可變性,提供更具宣告式的方法,表達生...

12 1 生成序列

12.1 生成序列 有幾種生成序列的技術,我們來看一下我們的選項。直接的方法是實現 ienumerator 介面,提供 current 屬性和 movenext 方法,它將列舉數物件移動到下乙個元素。這迫使我們顯式建立有可變狀態的物件,這很明顯違反了函式式的風格。通常,我們可以應用隱藏可變異的技術,...

重新生成序列號

建完序列號,並觸發序列號後,並插入了資料,但是過一段時間又清空了表的資料,再重新插入資料,這個時候再取序列號會續著上一次的序列號,如果想重新開始就要刪除序列號生成器,再重建序列號 建立序列號 create sequence aby yzfpayment method seq increment by...