1. 程式人生 > >SeqGAN——對抗思想與增強學習的碰撞

SeqGAN——對抗思想與增強學習的碰撞

保留初心,砥礪前行

SeqGAN這篇paper從大半年之前就開始看,斷斷續續看到現在,接下來的工作或許會與GAN + RL有關,因此又把它翻出來,又一次仔細拜讀了一番。接下來就記錄下我的一點理解。

1. 背景

GAN在之前發的文章裡已經說過了,不瞭解的同學點我,雖然現在GAN的變種越來越多,用途廣泛,但是它們的對抗思想都是沒有變化的。簡單來說,就是在生成的過程中加入一個可以鑑別真實資料和生成資料的鑑別器,使生成器G和鑑別器D相互對抗,D的作用是努力地分辨真實資料和生成資料,G的作用是努力改進自己從而生成可以迷惑D的資料。當D無法再分別出真假資料,則認為此時的G已經達到了一個很優的效果。
它的諸多優點是它如今可以這麼火爆的原因:
- 可以生成更好的樣本
- 模型只用到了反向傳播,而不需要馬爾科夫鏈
- 訓練時不需要對隱變數做推斷
- G的引數更新不是直接來自資料樣本,而是使用來自D的反向傳播
- 理論上,只要是可微分函式都可以用於構建D和G,因為能夠與深度神經網路結合做深度生成式模型

它的最後一條優點也恰恰就是它的侷限,之前我發過的文章中也有涉及到,點點點點點我,在NLP中,資料不像圖片處理時是連續的,可以微分,我們在優化生成器的過程中不能找到“中國 + 0.1”這樣的東西代表什麼,因此對於離散的資料,普通的GAN是無法work的。

2. 大體思路

這位還在讀本科的作者想到了使用RL來解決這個問題。

如上圖(左)所示,仍然是對抗的思想,真實資料加上G的生成資料來訓練D。但是從前邊背景章節所述的內容中,我們可以知道G的離散輸出,讓D很難回傳一個梯度用來更新G,因此需要做一些改變,看上圖(右),paper中將policy network當做G,已經存在的紅色圓點稱為現在的狀態(state),要生成的下一個紅色圓點稱作動作(action),因為D需要對一個完整的序列評分,所以就是用MCTS(蒙特卡洛樹搜尋)將每一個動作的各種可能性補全,D對這些完整的序列產生reward,回傳給G,通過增強學習更新G。這樣就是用Reinforcement learning的方式,訓練出一個可以產生下一個最優的action的生成網路。

3. 主要內容

不論怎麼對抗,目的都是為了更好的生成,因此我們可以把生成作為切入點。生成器G的目標是生成sequence來最大化reward的期望。

在這裡把這個reward的期望叫做J(θ)。就是在s0和θ的條件下,產生某個完全的sequence的reward的期望。其中Gθ()部分可以輕易地看出就是Generator Model。而QDφGθ()(我在這裡叫它Q值)在文中被叫做一個sequence的action-value function 。因此,我們可以這樣理解這個式子:G生成某一個y1的概率乘以這個y1的Q值,這樣求出所有y1的概率乘Q值,再求和,則得到了這個J(θ),也就是我們生成模型想要最大化的函式。

所以問題來了,這個Q值怎麼求?
paper中使用的是REINFORCE algorithm 並且就把這個Q值看作是鑑別器D的返回值。

因為不完整的軌跡產生的reward沒有實際意義,因此在原有y_1到y_t-1的情況下,產生的y_t的Q值並不能在y_t產生後直接計算,除非y_t就是整個序列的最後一個。paper中想了一個辦法,使用蒙特卡洛搜尋(就我所知“蒙特卡洛”這四個字可以等同於“隨意”)將y_t後的內容進行補全。既然是隨意補全就說明會產生多種情況,paper中將同一個y_t後使用蒙特卡洛搜尋補全的所有可能的sequence全都計算reward,然後求平均。如下圖所示。

就這樣,我們生成了一些逼真的sequence。我們就要用如下方式訓練D。

這個式子很容易理解,最大化D判斷真實資料為真加上D判斷生成資料為假,也就是最小化它們的相反數。

D訓練了一輪或者多輪(因為GAN的訓練一直是個難題,找好G和D的訓練輪數比例是關鍵)之後,就得到了一個更優秀的D,此時要用D去更新G。G的更新可以看做是梯度下降。

其中,

αh代表學習率。

以上就是大概的seqGAN的原理。

4. 演算法

首先隨機初始化G網路和D網路引數。

通過MLE預訓練G網路,目的是提高G網路的搜尋效率。

使用預訓練的G生成一些資料,用來通過最小化交叉熵來預訓練D。

  1. 開始生成sequence,並使用方程(4)計算reward(這個reward來自於G生成的sequence與D產生的Q值)。

  2. 使用方程(8)更新G的引數。

  3. 更優的G生成更好的sequence,和真實資料一起通過方程(5)訓練D。

以上1,2,3迴圈訓練直到收斂。

5. 實驗

論文的實驗部分就不是本文的重點了,有興趣的話看一下paper就可以了。

後邊說的比較敷衍了,那…就這樣吧。

參考資料:SeqGAN: Sequence Generative Adversarial Nets with Policy Gradient | 百度&google

如果你也喜歡機器學習,並且也像我一樣在ML之路上努力,請關注我,這裡會不定期進行分享,希望可以與你一同進步。

相關推薦

SeqGAN——對抗思想增強學習碰撞

保留初心,砥礪前行 SeqGAN這篇paper從大半年之前就開始看,斷斷續續看到現在,接下來的工作或許會與GAN + RL有關,因此又把它翻出來,又一次仔細拜讀了一番。接下來就記錄下我的一點理解。 1. 背景 GAN在之前發的文章裡已經

#######haohaohao#######對抗思想強化學習碰撞-SeqGAN模型原理和程式碼解析

1、背景 GAN作為生成模型的一種新型訓練方法,通過discriminative model來指導generative model的訓練,並在真實資料中取得了很好的效果。儘管如此,當目標是一個待生成的非連續性序列時,該方法就會表現出其侷限性。非連續性序列生成,比如說文字生成,為什麼單純的使用GA

DQN 從入門到放棄1 DQN增強學習

                1 前言深度增強學習Deep Reinforcement Learning是將深度學習與增強學習結合起來從而實現從Perception感知到Action動作的端對端學習End-to-End Learning的一種全新的演算法。簡單的說,就是和人類一樣,輸入感知資訊比如視覺,然後

TensorLayer : 最新深度學習增強學習

TensorLayer 是建立在 Google TensorFlow 上的深度學習(Deep Learning)與增強學習(Reinforcement Learning) 軟體庫。它的優勢在於既能提

Redis初識、設計思想一些學習資源推薦

一、Redis簡介 1.什麼是Redis   Redis 是一個開源的使用ANSI C 語言編寫、支援網路、可基於記憶體亦可持久化的日誌型、Key-Value 資料庫,並提供多種語言的API。從2010 年3 月15 日起,Redis 的開發工作由VMware 主持。

增強學習筆記 第八章 表格類方法的規劃學習

ping 學習筆記 com 下一步 方法 規劃 分享 高效 9.png 8.1 模型與規劃 規劃,指利用已有經歷對環境提煉模型,減少對環境交互的依賴。 8.2 Dyna框架 8.3 當模型不對時 第一種情況,原路已經行不通,在堵塞處往返多次後,value會被

函式式介面@FunctionalInterface學習(函式程式設計思想)------------匿名內部類對比

 在java8中 1、新推出了一個介面概念:函式式介面。 2、允許介面也可以有default方法,default方法可以方法體。 他滿足以下規範: 介面有且只能有個一個抽象方法(抽象方法只有方法定義,沒有方法體) 不能在介面中覆寫Object類中的publi

#資料結構演算法學習筆記#劍指Offer29:整數中1出現的次數 + 分段思想/按位考慮 + 測試用例(Java、C/C++)

2018.10.5 感受到開學之後工作和課業的雙重壓力,加上近段時間自己出了點小事故,因此斷更了許久。沒事,繼續。 這道題有兩種複雜度為的演算法。 方法1:遞迴(分段思想)。 所有數字出現1的個數 = 每一段數字中出現1的個數之和 1. 對於輸出的數字n,其最高位為

理解機器學習和深度學習的核心思想實現思路 (入門總結)[圖文 + 詳細思路]

本文講解涉及到的核心思想: 機器學習與深度學習: 1:線性迴歸問題。 2:優化搜尋時,步長選取的重要性。 3:為什麼神經網路可以擬合任意的曲線函式。 4:影象識別網路中,為什麼淺層網路只能識別出一些簡單的線,面,隨著網路的加深可以識別出十分複雜的圖案。 1:線性迴歸

增強學習(二)——策略迭代值迭代

在上一篇文章中,我主要介紹了馬爾可夫決策過程(MDP)。在瞭解了增強學習的基本思想後,我們便可以繼續討論“最優策略”的求解方法: 我們之前已經說到了MDP可以表示成一個元組(X, A, Psa, R),我們對最優策略的求解方法自然也就與這個元組密切相關:如果該過程的四

吳恩達.深度學習系列-C1神經網路深度學習-W2-(作業:神經網路思想的邏輯迴歸)

注意:coursera要求不要在網際網路公佈自己的作業。如果你在學習這個課程,建議你進入課程系統自行完成作業。使用邏輯迴歸作為一個最簡單的類似神經網路來進行影象判別。我覺得程式碼有參考和保留的意義。 Logistic Regression with a N

[增強學習][Reinforcement Learning]學習筆記回顧-1

引言 增強學習這幾篇部落格在於學習增強學習中所獲得知識的理解與回顧,如果想要深入學習增強學習,請參考後文所列出的資料和書籍。本文只用於複習與理解。 Introduction to Reinforcement Learning 1.領域交叉 這張圖

增強學習Q-learning分析演示(入門)

一些說明、參閱 https://github.com/MorvanZhou/Reinforcement-learning-with-tensorflow/blob/master/contents/1_command_line_reinforcement_learning/treasure_on_right.

增強學習Reinforcement Learning經典算法梳理3:TD方法

經典算法 get tail info detail 地址 category details 方法 轉自:http://blog.csdn.net/songrotek/article/details/51382759 博客地址:http://blog.csdn.net/s

系統分析設計學習筆記(一)

學習 掌握 應該 溝通 基本 最終 表示 對象 毫無 為什麽要學習這門課程?   “擁有一把錘子未必能成為建築師”。 這門課程學習的是面向對象分析和設計的核心技能的重要工具。對於使用面向對象技術和語言來,創建設計良好、健壯且可維護的軟件來說,這門課程所

C#委托事件學習筆記

調用函數 msdn http msd proc for reac .net 委托方 今天跟隨視頻學習了一下C#中最重要的一些概念之委托與事件。老楊的視頻講的還是挺深入淺出,不過剛接觸C#.NET的人還是朦朦朧朧,就像張子陽先生說的“每次見到委托和事件就覺得心裏別

20170520 BADI增強學習

efi nts tables for standard immediate 取出 make ram 一、要求:Tcode:FF_5 導入數據運行時,產生財務憑證之前修改某些字段值。Exmp:FEBRE-VWEZWBKPF-XBLNRFEBEP-CHECTBSEG-ZUONR

設計思想模式之四靜態代理模式

test 創建 靜態代理 pan 代理 對象的訪問 override todo 父類 一 概述 1.什麽是代理模式? 為了隱藏與保護目標對象,為其他對象提供一個代理以控制對該目標對象的訪問。 2.什麽是靜態代理模式? 代理模式有兩種: 靜態代理:代理對象固定。 動態代理:

設計思想模式之五觀察者模式

per -- 什麽 over out junit 測試類 rem second 一 概述 1.什麽是觀察者模式? 將一個對象視作被觀察者,當它發出某種行為或者發生某種變化時,通知所有依賴它的對象(觀察者),這種設計模式叫做觀察者設計模式。 2.觀察者設

增強學習 | AlphaGo背後的秘密

cloud height uuid order 相對 ldm 開頭 dml pro “敢於嘗試,才有突破” 2017年5月27日,當今世界排名第一的中國棋手柯潔與AlphaGo 2.0的三局對戰落敗。該事件標誌著最新的人工智能技術在圍棋競技領域超越了人類智能,借此機