Please enable JavaScript.
Coggle requires JavaScript to display documents.
SeqGAN (:moneybag:生成模型 (:reminder_ribbon:ad loss (:explode:对抗训练的时候G减小ad…
SeqGAN
:moneybag:生成模型
:dagger_knife:LSTM,门控单元(GRU),软注意机制等大多数RNN变体(都可以用作SeqGAN的生成器)
:moneybag:强化学习(RL)中的随机策略
:moneybag:问题
:explode:离散的序列是不可微分=>梯度下降困难
:moneybag:奖励信号
:moneybag:序列生成
:one:已经生成了序列Y1:T-1(y1,y2,..yT-1),要选择下一个词yT的时候,一旦这个选择动作确定下来后,则状态转移就确定了,即肯定会转移到Y1:T(y1,y2,...,yT)
:moneybag:视为随机参数化策略
:!:(预训练)训练开始时,使用最大似然估计(MLE)在训练集S上预先训练生成模型
:reminder_ribbon:ad loss
:explode:对抗训练的时候G减小ad loss
:zap:reward以及其他内容
:reminder_ribbon:reward
:explode:给定image vector和<sos>通过get_sample预测出samples,而reward就是对这个samples的每个时间步拥有的sentence,配合image vector多次预测完整序列,并得到每个时间步预测的完整序列在D的分数(D_fake),最后平均
:moneybag:noise
:explode:在代码里没有直接的noise,而是直接用<sos>和image vector经过Generator就生成的
:bread:按照SeqGAN github issue上的回答来说,有人建议是修改initial token或者hidden state
:moneybag:判别模型
:tornado:CNN
:moneybag:完整序列判断
产生
#
:!:采用策略梯度+MC搜索更新生成模型
#
:one:Policy Gradient
:checkered_flag:solve the problem that discrete sequence is non-differentiable during training
:two:MC
:checkered_flag:explore the rest unkown words gt+1:T=>approximate intermediate reward for gt
:moneybag:激励/最终回报
#
:explode:根据欺骗生成模型的可能性来估计
:moneybag:给出激励的原理
:moneybag:动作-价值函数
:two:(未来的状态)在MC搜索应用roll-out policy Gβ对未知的T-t个词进行采样=>考虑未来的输出
#
:one:(当前状态)使用REINFORCE算法,将判别器的输出概率考虑为奖励
:moneybag:为了更准确地评估
:explode:从当前状态开始到序列结束N次运行roll-out策略=>输出样本
:moneybag:预测完整序列是真实数据的概率
:explode:给定1个完整序列,通过一系列复杂的函数,获得概率.而真值标签又本来就存在,所以可以优化
#
:moneybag:优化目标
:explode:最小化真值标签与预测概率之间的交叉熵
#
:snowflake:使用MaskGAN里的判别器来提点
Seq2Seq
序列到文本
In MaskGAN paper, the authors state that
We also tried CNN-based discriminators but found that LSTMs performed the best
:explode:判别模型只需要判断1个完整序列为真的概率,预训练还是对抗训练的时候都是减少相同的loss
:moneybag:程序
:moneybag::fast_forward:
基本流程
:one:使用最大似然预训练生成器
:two:利用预训练好的生成器和真实数据,通过降低交叉熵来训练判别器
:three:不断循环交替训练生成器g次,判别器d次,直到SeqGAN收敛
:one:训练生成器:先用生成器生成序列,在生成序列的每个时间步长里,获得(当前状态+未来状态)的激励.一个生成序列过程结束后,就利用策略梯度来总结这一堆激励,从而更新生成器
:two:训练判别器:生成器生成负样本和真实数据的正样本来训练判别器(k次?)
:bread::one:训练判别器d次,是指生成器生成新负样本d次,这样判别器可以针对不同的正负样本地训练d次 :two:训练判别器k次,是指生成器生成的1个负样本,也即1个正负样本,针对这1个正负样本训练判别器k次
:baguette_bread:为了提高我的鉴赏能力,我决定看5部不同的电影.然后每1部电影都看3遍,每1遍都做总结
:!:g,d,k参数的设置对SeqGAN的收敛和性能有很大影响
:arrow_right:d>g,只有判别器能力强了,才能更好地直到生成器
:!:g=1,d=5,k=3是作者最后的选择
:moneybag:生成离散词序列
:moneybag:难题
:one:生成模型的离散输出难以将梯度更新从判别模型传递到生成模型
:maple_leaf:将生成模型视为随机参数化策略.使用蒙特卡洛(MC)搜索来近似状态动作值+策略梯度直接训练生成模型=>避免常规GAN中离散数据的分化困难
:two:判别模型只能评估1个完整的序列&平衡当前得分和未来得分
:!:GAN基本只能生成实数连续的数据
:star:直接执行梯度策略更新
:explode:绕过生成器微分的问题
蒙特卡洛搜索会出来若干个后续序列,然后用D取得reward,取平均值
:smile:优于最大似然法,定期抽样和PG-BLEU
:star:不是最大似然,不是定期抽样,不是PG-BLEU
:heavy_dollar_sign:诗歌生成,语言生成,音乐生成