GAN学习笔记(11)SeqGAN

在这里插入图片描述

        SeqGAN: Sequence Generative Adversarial Nets with Policy Gradient

问题提出

将GAN应用于序列生成有两个问题。

  1. 首先,GAN用于生成真实值、连续的数据,但难以直接生成离散token序列,例如文本。这是因为在GANs中,Generator首先从随机采样开始,然后由模型参数进行确定性变换。利用Discriminator输出的Loss梯度来指导生成模型G(参数)对生成值稍作改变,使其更真实。如果生成的数据基于离散token,那么来自判别网络的“微小变化”指导意义不大,因为在有限的字典空间中,可能没有对应的token来表示这种微小的变化。

  2. 其次,GAN只能给出整个序列在生成后的得分/损失;对于部分生成的序列,平衡现在的好与未来作为整个序列的得分是非常重要的。

      强化学习可以很好的解决上述的两点。回想一下Policy Gradient的基本思想,即通过reward作为反馈,增加得到reward大的动作出现的概率,减小reward小的动作出现的概率,如果我们有了reward,就可以进行梯度训练,更新参数。如果使用Policy Gradient的算法,当G产生一个单词时,如果我们能够得到一个反馈的Reward,就能通过这个reward来更新G的参数,而不再需要依赖于D的反向传播来更新参数,因此较好的解决了上面所说的第一个屏障。对于第二个屏障,当产生一个单词时,我们可以使用蒙塔卡罗树搜索(Alpho Go也运用了此方法)立即评估当前单词的好坏,而不需要等到整个序列结束再来评价这个单词的好坏
    

Sequence Generative Adversarial Nets

序列生成问题表示如下。

  1. 给定一个真实的结构化序列数据集,训练一个 θ θ θ-参数化生成模型 G θ G_θ Gθ,生成序列:
    在这里插入图片描述
    其中 Y Y Y是候选标记的词汇表,基于强化学习解释:在时间步 t t t中,状态 s s s是当前生成的token( y 1 y_1 y1,… y t y_t yt − _− 1 _1 1), 操作 a a a是下一个要选择的token。因此,策略模型 G θ G_θ Gθ y t y_t yt| Y 1 Y_1 Y1 : _: : t _t t − _− 1 _1 1)是随机的,而在选择了一个动作之后,状态转移是确定性的。

  2. 训练一个 φ φ φ-参数化判别模型 D φ D_φ Dφ,为改进 G θ G_θ Gθ提供指导。 D φ D_φ Dφ Y 1 Y_1 Y1 : _: : T _T T)是表示序列 Y 1 Y_1 Y1 : _: : T _T T是否来自真实序列数据的概率。如下图所示,通过从实际序列数据中提供正例和从生成模型 G θ G_θ Gθ生成的合成序列中提供负示例来训练判别模型 D φ D_φ Dφ。同时,根据判别模型 D φ D_φ Dφ得到的期望最终报酬,采用策略梯度和MC搜索对生成模型 G θ G_θ Gθ进行更新。通过欺骗判别模型 D φ D_φ Dφ的可能性来估计报酬

  3. 在这里插入图片描述

       左:D是G对实际数据和生成的数据进行训练。右:G通过策略梯度进行训练,最终的奖励信号由D提供,并通过蒙特卡罗搜索传回中间动作值。
    
SeqGAN via Policy Gradient

当没有中间报酬时,生成器模型(策略) G θ G_θ Gθ y t y_t yt| Y 1 Y_1 Y1 : _: : t _t t − _− 1 _1 1)的目标是从起始状态 s 0 s_0 s0生成一个序列,以使其预期的最终回报最大化:
在这里插入图片描述
其中 R T R_T RT是对完整序列的奖励。请注意,奖励来自于鉴别器 D φ D_φ Dφ Q Q Q D ^D D φ ^φ φ G _G G θ _θ θ s s s a a a)是序列的动作值函数,即从状态 s s s开始,采取动作 a a a,然后遵循策略 G θ G_θ Gθ的期望累积报酬。序列目标函数的合理性在于,从给定的初始状态开始,生成器的目标是生成一个序列,使鉴别器认为它是真实的。形式上:
在这里插入图片描述
然而,一个完成的序列只提供一个完成的奖励。因为我们实际上关心的是长期回报,所以在每一步,不仅要考虑以前token的适合性,而且要考虑将来的结果。这类似于玩围棋或象棋,有时玩家会为了长期的胜利而放弃眼前的利益)。因此,为了评估中间状态的操作值,应用蒙特卡罗搜索(MC)和推出策略 G β G_β Gβ来抽样未知的最后 T − t T_-t Tt 个token。我们将N次蒙特卡罗搜索表示为:
在这里插入图片描述
所以有:
在这里插入图片描述

注:如果当前的cell是最后的一个cell(Generator一般选择的是循环神经网络结构,RNN,LSTM或者是GRU都可以https://www.jianshu.com/p/95d5c461924c),即我们已经得到了一个完整的序列,那么此时很好办,直接把这个序列扔给Discriminator,得到输出为1的概率就可以得到reward值。如果当前的cell不是最后一个cell,即当前的单词不是最后的单词,我们还没有得到一个完整的序列,如何估计当前这个单词的reward呢?我们用到了蒙特卡罗树搜索的方法。即使用前面已经产生的序列,从当前位置的下一个位置开始采样,得到一堆完整的序列。在原文中,采样策略被称为roll-out policy,这个策略也是通过一个神经网络实现,这个神经网络我们可以认为就是我们的Generator。得到采样的序列后,我们把这一堆序列扔给Discriminator,得到一批输出为1的概率,这堆概率的平均值即我们的reward。

一旦有了一组更真实的生产成本序列,就可重新训练D
在这里插入图片描述
每次获得新的判别器(D)模型时,我们都准备更新生成器。所提出的基于策略的方法依赖于参数化策略的优化,以直接使长期回报最大化。目标函数J(θ)t的梯度。Generator参数 θ θ θ可导出为
在这里插入图片描述
上述形式是由于确定性状态转移和零中间报酬。使用似然比对等式(6)进行无偏估计:
在这里插入图片描述
然后参数更新:
在这里插入图片描述

算法流程

在这里插入图片描述

The Generative Model for Sequences

使用递归神经网络作为生成模型(为了解决梯度消失和梯度爆炸,这里用的LSTM)。RNN映射序列输入嵌入表示为 x 1 x_1 x1,… x T x_T xT。通过递归地使用更新函数g, x 1 x_1 x1,… x T x_T xT转换成一系列隐藏状态 h t h_t ht
在这里插入图片描述
此外,softmax输出层z将隐藏状态映射到输出token分布(0~1)中:(偏置:c,权重V)

在这里插入图片描述

The Discriminative Model for Sequences(CNN)

输入序列:
在这里插入图片描述
x是k维的,⊕表示链接
x是k维的,⊕表示串联
特征提取:
在这里插入图片描述
ρ ρ ρ为非线性函数, b b b是偏置
最大池化:
在这里插入图片描述
使用一个具有sigmoid激活的全连接层来输出输入序列是真实的概率。优化目标是最小化地面真实性标签与公式(5)中所述预测概率之间的交叉熵
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值