Long Text Generation via Adversarial Training with Leaked Information

这篇文章是我看完RankGAN之后看的。这篇文章思想上是一个感觉还是有一定的前沿性。很新颖,至少之前没人这么想过。也把HRL和GAN结合在了一起。很Nice,这两天状态不好,看代码又花去了两天时间。

首先先说一下我看完代码之后的感觉吧:

第一点,leak主要体现在泄露了D对一个生成的句子提取的特征值(D也是根据这个特征值来得到最后的【fake,real】的)

第二点:因为使用了HRL的结构所以G就变成了manager和worker了(我对他这么处理的结构表示一丢丢的好奇)

第三点:rollout这个的MCsearch,我之前理解的有问题,我们可以先设置一个n,代表我们每一个G generate出来的data需要跑n大遍,也就是第一个循环,在这个循环里,我们再放开不同个数的given_num的数据(比如  我是谁?,我放开:我是,我是这两个词就用于训练G的 hidden state(manager和worker的hidden state),然后生成的gen_seq,把:我是  原封不动的读进去,然后在given_num到seq_length之间我们就需要预测了,逐个预测,然后填写到gen_seq中)。

第四点:对于leak泄露给manger的数据,我们首先需要D计算出当前的 text 的 feature,那么每次提前直到的text的长度可能不一致(比如:你是谁?,一开始我可能只直到你,或者你是),所以这里采用的处理方法是用一个常量补齐就好了。

第五点:内部奖励,我们说到HRL,就必须要有内部奖励:内部奖励是1 减去 当前的sub_feature,与goal的偏差的cos距离。

这里我们首先需要一个超参数step_size,也就是goal每隔多少个文本才更新一下。所以假设我们的每个文本输入都是seq_length这么长,step_size = 3 ,那么我们得出来的goal就是[g1,g1,g1,g2,g2,g2,g3,g3,g3......],而我们最后的到的特征状态为【feature(i)-feature(i-i%step_size)】得到的[sub_f1,subf2,subf3.....],这里的feature是根据D的特征提取器算出来的,也就是leak过来的特征向量。

第六点:我需要串一下思路,对于 manager来说,我们每次都用从D leak过来的特征来计算出当前的目标   对于worker来说,这里我们每次都用当前的状态 去拿到 D的特征提取器看,我们当前已经有的特征,然后goal其实也就是目标特征,当两个差距越大,我们得到奖励也就越小,说明我们距离目标越远。奖励也就越小,最后直接用选取的动作gen_x x  概率 x 奖励 当作loss即可

第七点:提出了基于排名的Bootstrapped Rescaled Activation来调整D反馈的大小,这个方法就相当于是一个值稳定器,当算法对数值大小很敏感的时候能够起到很大帮助;而且,作为排序方法,它也能避免梯度消失的问题,这加速了模型的收敛。(我从代码上没有看出他这一步是怎么做的,感觉有点神奇,也没有排序什么的,我向作者提交了issue,回复了以后,我回来更新)

第八点:交替更新,这个就是在每次循环对抗更新的时候,再加上一个监督学习,起一个引导作用,但是代码中好像并没有体现出来。

下面是我做的代码笔记:

以上。

 

 

 

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值