SeqGAN论文笔记

10 篇文章 3 订阅
4 篇文章 0 订阅
原始的GAN提出用于图像生成,其在实数值生成上可以很好的work,但是当目标是生成序列化离散token时就会有限制,主要原因文中说了两点:
  1. 这主要是因为离散输出的生成模型使得很难将梯度更新从判别模型传递到生成模型。根据Ian Goodfelllow说的,GANs是通过训练生成器来合成数据,然后在合成数据上使用判别器,判别器的输出梯度将后告诉生成器,如何略微改变合成数据使其更加真实。一般来说,只有在数据连续时,生成器才能略微的改变合成数据,如果数据是离散的,那么就不能简单通过略微改变离散数据来使数据真实。比如,在生成图像时,生成器可以从生成像素值20,调整为生成20.16,但是如果是生成文本,比如单词"dog",可能我们使用词“30”表示,那么生成器不可能生成30.16,因为没有这个词。
  2. 判别器只能评估整个生成序列,不能对当前单个生成的token进行评估。
解决,提出SeqGAN:
  1. 解决第一个问题,直接将生成器作为强化学习中的随机策略,生成器的更新通过策略梯度来更新。
  2. 解决第二个问题,强化学习的奖赏信号来自判别器对完整序列的判别,并且通过MCT搜索方式传给中间状态-动作步。当产生一个单词时,我们可以使用MCT搜索立即评估当前单词的好坏,而不需要等到整个序列结束再来评价这个单词的好坏。

SeqGAN将序列生成问题看成序列决策过程,将目前已经生成的token看为状态(state),将下一个将要生成token看为动作(action),使用判别器来对整个序列做出评估指导生成器学习。为了解决梯度很难传递给生成器的问题,我们将生成器看为随机策略。在策略梯度中,我们使用MCT搜索来近似状态-动作对的值.

SeqGAN:

文本序列生成模型可以表示为,给定真实世界的训练数据集,训练一个生成器 G θ G_\theta Gθ,通过 G θ G_\theta Gθ来产生序列 Y 1 : T = ( y 1 , . . . , y t , . . . , y T ) , y t ∈ Y Y_{1:T}=(y_1,...,y_t,...,y_T),y_t\in \mathbb{Y} Y1:T=(y1,...,yt,...,yT)ytY,这里 Y \mathbb{Y} Y表示备选单词的词典. 在时间步 t t t,状态 s s s是当前已经生成的单词序列 ( y 1 , y 2 , . . , y t − 1 ) (y_1,y_2,..,y_{t-1}) (y1,y2,..,yt1),动作 a a a是下一个将要选择的单词 y t y_t yt,也就是动作空间就是备选单词词典.

因此策略模型 G θ ( y t ∣ Y 1 : t − 1 ) G_\theta(y_t|Y_{1:t-1}) Gθ(ytY1:t1)是随机策略,但是状态转移是确定的,也就是在当前状态 s = Y 1 : t − 1 s=Y_{1:t-1} s=Y1:t1,选择动作 a = y t a=y_t a=yt,那么状态一定转移到 s ′ = Y 1 : t {s}'=Y_{1:t} s=Y1:t,也就是状态转移概率 δ s , s ′ a = 1 \delta_{s,s'}^a=1 δs,sa=1,而对于其他后继状态,状态转移概率为0.

同时,我们训练了一个判别模型 D ϕ D_\phi Dϕ. 判别器实际上是一个概率估计,也就是估计一个序列 Y 1 : T Y_{1:T} Y1:T来自真实世界的概率. 如下图所示。判别器的训练是通过真实样本数据(正样本)和生成器合成数据(负样本)来训练的. 同时,基于从判别模型 D ϕ D_\phi Dϕ接收的预期结束奖励,通过采用策略梯度和MC搜索来更新生成模型 G θ G_\theta Gθ。奖赏是这个序列可能迷惑判别器的程度 D ϕ D_\phi Dϕ
在这里插入图片描述

序列生成模型 G θ G_\theta Gθ

文中使用RNN模型作为生成模型。RNNs将输入嵌入表示 x 1 , . . . , x T x_1,...,x_T x1,...,xT映射为序列隐层 h 1 , . . , h T h_1,..,h_T h1,..,hT,通过递归地使用更新函数(也是网络) g g g h t = g ( h t − 1 , x t ) ( 1 ) h_t=g(h_{t-1},x_t)\quad(1) ht=g(ht1,xt)(1),然后一层softmax神经网络层 z z z,将隐层映射到输出单词分布(token distribution,也是就是词典中每个单词概率): p ( y t ∣ x 1 , . . . , x t ) = z ( h t ) = s o f t m a x ( c + V h t ) ( 2 ) p(y_t|x_1,...,x_t)=z(h_t)=softmax(c+Vh_t)\quad(2) p(ytx1,...,xt)=z(ht)=softmax(c+Vht)(2)其中 c c c是偏置, V V V是权重矩阵.为了避免梯度消失和梯度爆炸,这里式(1)实际上使用LSTM神经单元. 文中说GRU和软注意力机制都可以用在生成模型中。

判别器 D ϕ D_\phi Dϕ

文中判别器选用的是CNN,生成的序列长度是固定的 T T T,并且CNN通过使用max-over-time池化操作(论文,博客)这样可以适用于变长序列判别。max-over-time池化操作,也就是对每个feature map选取最大值,这样只需要filter个数固定那么池化后得到的向量长度就是固定的,就自然适应于变长的序列.
在这里插入图片描述
我们首先将输入序列 x 1 , . . . , x T x_1,...,x_T x1,...,xT表示为: ε 1 : T = x 1 ⨁ x 2 ⨁ . . . ⨁ x T \varepsilon_{1:T}=x_1\bigoplus x_2\bigoplus ...\bigoplus x_T ε1:T=x1x2...xT这里 ⨁ \bigoplus 表示并置(concatenation),也就并置为一个矩阵。其中 x t ∈ R k x_t\in \mathbb{R}^k xtRk,是 k k k维的向量,得到的矩阵是 ε 1 : T ∈ R T × k \varepsilon_{1:T}\in \mathbb{R}^{T\times k} ε1:TRT×k,如上图所示. 然后使用一个核 w ∈ R l × k w\in \mathbb{R}^{l\times k} wRl×k做一个窗口大小为 l l l个单词的卷积操作,产生一个feature map: c i = ρ ( w ⨂ ε i : i + l − 1 + b ) c_i=\rho (w\bigotimes \varepsilon_{i:i+l-1}+b) ci=ρ(wεi:i+l1+b)这里 ⨂ \bigotimes 表示度对应元素相乘。 b b b是偏置, ρ \rho ρ是一个非线性函数。我们可以使用具有不同窗口大小的各种数量的内核来提取不同的特征。最终我们对feature map使用max-over-time池化操作得到 c ~ = m a x { c 1 , . . . , c T − l + 1 } \tilde{c}=max\{c_1,...,c_{T-l+1}\} c~=max{c1,...,cTl+1}为了提升性能,文中还使用 highway architecture (论文). 最后使用sigmoid激活函数的全连接层输出输入序列为真实的概率.

SeqGAN via Policy Gradient

根据策略梯度理论(policy gradient methods),在没有中间奖赏时(因为策略只会对完整序列进行评估),生成模型(策略) G θ ( y y ∣ Y 1 : t − 1 ) G_\theta(y_y|Y_{1:t-1}) Gθ(yyY1:t1)的目标是从初始状态 s 0 s_0 s0生成序列来最大化其期望最终奖赏(也就是最大化序列生成后的奖赏): J ( θ ) = E [ R T ∣ s 0 , θ ] = ∑ y 1 ∈ Y G θ ( y 1 ∣ s 0 ) ⋅ Q D ϕ G θ ( s 0 , y 1 ) ( 3 ) J(\theta)=\mathbb{E}[R_T|s_0,\theta]=\sum_{y_1\in \mathbb{Y}}G_\theta(y_1|s_0)\cdot Q^{G_\theta}_{D_\phi}(s_0,y_1) (3) J(θ)=E[RTs0,θ]=y1YGθ(y1s0)QDϕGθ(s0,y1)3这里 R T R_T RT是完整序列的奖赏,来自判别器 D ϕ D_\phi Dϕ. Q D ϕ G θ ( s 0 , y 1 ) Q^{G_\theta}_{D_\phi}(s_0,y_1) QDϕGθ(s0,y1)是序列的动作-值函数,即强化学习中从状态 s s s开始,采取动作 a a a后,遵循策略 G θ G_\theta Gθ的期望累计奖赏,但事实上里不是累计奖赏,而是end reward,也就是完整序列的奖赏。
在这里插入图片描述
在本文中我们使用了REINFORCE 算法(如上图)来估计动作值函数,使用判别器的判别结果 D ϕ ( Y 1 : n n ) D_\phi(Y^n_{1:n}) Dϕ(Y1:nn)作为奖赏. 这样我们就有:
Q D ϕ G θ ( a = y T , s = Y 1 : T − 1 ) = D ϕ ( Y 1 : T ) Q^{G_\theta}_{D_\phi}(a=y_T,s=Y_{1:T-1})=D_{\phi}(Y_{1:T}) QDϕGθ(a=yT,s=Y1:T1)=Dϕ(Y1:T)
注意判别器只对完整序列提出奖赏. 事实上因为我们只考虑长期奖赏,在每一个时间步,我们不仅会考虑已经拟合的单词token,也会考虑未来的结果。这类似于这类似于玩Go或Chess等游戏,玩家有时会为了长期胜利(最终)的放弃眼前利益(论文),因此为了评估中间状态-动作对的值,文中应用MCT搜索,使用一个Roll-OUT策略 G β G_\beta Gβ来抽样未知的剩余 T − t T-t Tt个单词(已经生的序列是 Y 1 : t Y_{1:t} Y1:t,起中 y t y_t yt是要评估的动作).我们将 N N N次的MCT搜索表示为: Y 1 : T 1 , . . . , Y 1 : T N = M C G β ( Y 1 : t ; N ) {Y^1_{1:T},...,Y^N_{1:T}}=MC^{G_\beta}(Y_{1:t};N) Y1:T1,...,Y1:TN=MCGβ(Y1:t;N)其中 Y 1 : t n = ( y 1 , . . . , y t ) Y^n_{1:t}=(y_1,...,y_t) Y1:tn=(y1,...,yt) Y t + 1 : T n Y^n_{t+1:T} Yt+1:Tn是从当前状态开始使用roll-out策略 G β G_\beta Gβ抽样得到的.注意在本文中这个roll-out策略是和生成器一样的,如果想提升速度可以使用其他简单的策略. 我们使用roll-out策略(属于随机策略)抽样 N N N次得到batch(批量)输出样本,因此对N个样本的end reward做一个平均:
Q D ϕ G θ ( s = Y 1 : t − 1 , a = y t ) = { 1 N ∑ n = 1 N D ϕ ( Y 1 : T n ) , Y 1 : T n ∈ M C G θ ( Y 1 : T ; N ) f o r t &lt; T D ϕ ( Y 1 : t ) f o r t = T Q^{G_\theta}_{D_\phi}(s=Y_{1:t-1,a=y_t})=\left\{\begin{matrix} \frac{1}{N}\sum^N_{n=1}D_{\phi}(Y^n_{1:T}),\quad Y^n_{1:T}\in MC^{G_\theta}(Y_{1:T};N)&amp;for&amp;t&lt;T \\ D_\phi(Y_{1:t})&amp;for &amp;t=T \end{matrix}\right. QDϕGθ(s=Y1:t1,a=yt)={N1n=1NDϕ(Y1:Tn)Y1:TnMCGθ(Y1:T;N)Dϕ(Y1:t)forfort<Tt=T这里我们可以看见没有中间奖赏.

对于判别器的训练就和GAN中一样,将真实样本(正样本),和虚假样本(负样本)拿来使用公式:
m i n ϕ − E Y ∼ p d a t a [ l o g D ϕ ( Y ) ] − E Y ∼ G θ [ l o g ( 1 − D ϕ ( Y ) ) ] min_{\phi}-\mathbb{E}_{Y\sim p_{data}}[log D_{\phi}(Y)]-\mathbb{E}_{Y\sim G_\theta}[log(1-D_\phi(Y))] minϕEYpdata[logDϕ(Y)]EYGθ[log(1Dϕ(Y))]每次更新时先更新判别器 D D D,再更新生成器 G G G

对生成器的更新使用的梯度是(3)式中目标函数的梯度,使用策略梯度理论进行计算表示为如下: ▽ θ J ( θ ) = ∑ t = 1 T E Y 1 : t − 1 ∼ G θ [ ∑ y t ∈ Y ▽ θ G θ ( y t ∣ Y 1 : t − 1 ) ⋅ Q D ϕ G θ ( Y 1 : t − 1 , y t ) ] ( 4 ) \bigtriangledown _\theta J(\theta)=\sum^T_{t=1}\mathbb{E}_{Y_{1:t-1}\sim G_\theta}[\sum_{y_t\in\mathbb{Y}}\bigtriangledown_\theta G_\theta(y_t|Y_{1:t-1})\cdot Q^{G_\theta}_{D_\phi}(Y_{1:t-1},y_t)] (4) θJ(θ)=t=1TEY1:t1Gθ[ytYθGθ(ytY1:t1)QDϕGθ(Y1:t1,yt)]4这个式子写成这样的原因是因为状态转移确定的。策略梯度原始公式是:
在这里插入图片描述
文中进一步对(4)式进行无偏估计:
▽ θ J ( θ ) ≃ ∑ t = 1 T ∑ y t ∈ Y ▽ θ G θ ( y t ∣ Y 1 : t − 1 ) ⋅ Q D ϕ G θ ( Y 1 : t − 1 , y t ) \bigtriangledown_\theta J(\theta)\simeq\sum^T_{t=1}\sum_{y_t\in\mathbb{Y}}\bigtriangledown_\theta G_\theta(y_t|Y_{1:t-1})\cdot Q^{G_\theta}_{D_\phi}(Y_{1:t-1},y_t) θJ(θ)t=1TytYθGθ(ytY1:t1)QDϕGθ(Y1:t1,yt) = ∑ t = 1 T ∑ y t ∈ Y G θ ( y t ∣ Y 1 : t − 1 ) ▽ θ l o g G θ ( y t ∣ Y 1 : t − 1 ) ⋅ Q D ϕ G θ ( Y 1 : t − 1 , y t ) =\sum^T_{t=1}\sum_{y_t\in\mathbb{Y}}G_\theta(y_t|Y_{1:t-1})\bigtriangledown_\theta logG_\theta(y_t|Y_{1:t-1})\cdot Q^{G_\theta}_{D_\phi}(Y_{1:t-1},y_t) =t=1TytYGθ(ytY1:t1)θlogGθ(ytY1:t1)QDϕGθ(Y1:t1,yt) = ∑ t = 1 T E y t ∼ G θ ( y t ∣ Y 1 : t − 1 ) [ ▽ θ l o g G θ ( y t ∣ Y 1 : t − 1 ) ⋅ Q D ϕ G θ ( Y 1 : t − 1 , y t ) ] =\sum^T_{t=1}\mathbb{E}_{y_t\sim G_\theta(y_t|Y_{1:t-1})}[\bigtriangledown_\theta logG_\theta(y_t|Y_{1:t-1})\cdot Q^{G_\theta}_{D_\phi}(Y_{1:t-1},y_t)] =t=1TEytGθ(ytY1:t1)[θlogGθ(ytY1:t1)QDϕGθ(Y1:t1,yt)]这里由于期望是可以通过多次采样来逼近的,所以最终我们就可以使用上面这个梯度来更新生成器 G G G:
θ ← θ + α h ▽ θ J ( θ ) \theta\leftarrow\theta+\alpha_h\bigtriangledown_\theta J(\theta) θθ+αhθJ(θ)

算法

在这里插入图片描述

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值