seqgan這篇*****是上交的一位本科生寫的,佩服。
最近在學習generative models,所以翻出來看看。
接下來就記錄下我的一點理解。
*****鏈結
gan在之前發的文章裡已經說過了,不了解的同學點我,雖然現在gan的變種越來越多,用途廣泛,但是它們的對抗思想都是沒有變化的。簡單來說,就是在生成的過程中加入乙個可以鑑別真實資料和生成資料的鑑別器,使生成器g和鑑別器d相互對抗,d的作用是努力地分辨真實資料和生成資料,g的作用是努力改進自己從而生成可以迷惑d的資料。當d無法再分別出真假資料,則認為此時的g已經達到了乙個很優的效果。
它的諸多優點是它如今可以這麼火爆的原因:
它的最後一條優點也恰恰就是它的侷限,之前我發過的文章中也有涉及到,點點點點點我,在nlp中,資料不像處理時是連續的,可以微分,我們在優化生成器的過程中不能找到「中國 + 0.1」這樣的東西代表什麼,因此對於離散的資料,普通的gan是無法work的。
這位還在讀本科的作者想到了使用rl來解決這個問題。
如上圖(左)所示,仍然是對抗的思想,真實資料加上g的生成資料來訓練d。但是從前邊背景章節所述的內容中,我們可以知道g的離散輸出,讓d很難回傳乙個梯度用來更新g,因此需要做一些改變,看上圖(右),*****中將policy network當做g,已經存在的紅色圓點稱為現在的狀態(state),要生成的下乙個紅色圓點稱作動作(action),因為d需要對乙個完整的序列評分,所以就是用mcts(蒙特卡洛樹搜尋)將每乙個動作的各種可能性補全,d對這些完整的序列產生reward,回傳給g,通過增強學習更新g。這樣就是用reinforcement learning的方式,訓練出乙個可以產生下乙個最優的action的生成網路。
不論怎麼對抗,目的都是為了更好的生成,因此我們可以把生成作為切入點。生成器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值怎麼求?
*****中使用的是reinforce algorithm 並且就把這個q值看作是鑑別器d的返回值。
因為不完整的軌跡產生的reward沒有實際意義,因此在原有y_1到y_t-1的情況下,產生的y_t的q值並不能在y_t產生後直接計算,除非y_t就是整個序列的最後乙個。*****中想了乙個辦法,使用蒙特卡洛搜尋(就我所知「蒙特卡洛」這四個字可以等同於「隨意」)將y_t後的內容進行補全。既然是隨意補全就說明會產生多種情況,*****中將同乙個y_t後使用蒙特卡洛搜尋補全的所有可能的sequence全都計算reward,然後求平均。如下圖所示。
就這樣,我們生成了一些逼真的sequence。我們就要用如下方式訓練d。
這個式子很容易理解,最大化d判斷真實資料為真加上d判斷生成資料為假,也就是最小化它們的相反數。
d訓練了一輪或者多輪(因為gan的訓練一直是個難題,找好g和d的訓練輪數比例是關鍵)之後,就得到了乙個更優秀的d,此時要用d去更新g。g的更新可以看做是梯度下降。
其中,
αh代表學習率。
以上就是大概的seqgan的原理。
首先隨機初始化g網路和d網路引數。
通過mle預訓練g網路,目的是提高g網路的搜尋效率。
使用預訓練的g生成一些資料,用來通過最小化交叉熵來預訓練d。
開始生成sequence,並使用方程(4)計算reward(這個reward來自於g生成的sequence與d產生的q值)。
使用方程(8)更新g的引數。
更優的g生成更好的sequence,和真實資料一起通過方程(5)訓練d。
以上1,2,3迴圈訓練直到收斂。
**的實驗部分就不是本文的重點了,有興趣的話看一下*****就可以了。
後邊說的比較敷衍了,那...就這樣吧。
閱讀任務 閱讀筆記 4
功能驅動的設計 1 構造總體模型 2 構造功能列表 3 制定開發計畫 4 功能設計階段 5 實現具體功能 軟體測試按目的分類 1 功能測試 2 非功能測試 軟體測試的各種方法 1 單元測試和 覆蓋率測試 2 構建驗證測試 3 驗收測試 4 探索式的測試 5 回歸測試 6 場景 整合 系統測試 7 夥...
序列生成 序列生成 SeqGAN和RankGAN
這篇文章主要介紹兩個序列生成的gan模型,分別是發表在aaai 2017上的seqgan和 nips 2017上的 rankgan seqgan sequence generative adversarial nets with policy gradient arxiv.org adversari...
閱讀筆記 2006 01
請您尊重您的價值,因為它已經得到了社會的認可。當你貶低或破壞您的價值時,就等於貶低或破壞整個行業在這個社會的價值。無論在什麼時候,自己都應該尊重自己的價值,而不能因為一時的困境而貶低和破壞了自己的價值,因為你的破壞之舉,將傷害到整個行業的價值乃至社會的規則。因為,唯有懂得尊重自己的價值的人,才能真正...