由RNN和Attention条件生成
1. Generation
按组件生成结构化对象组件(Generating a structured object component-by-component)
-
句子是由字符/语料库组成的——通过RNN每次生成一个字符/单词
-
图像是由像素组成的——每次用RNN生成一个像素
RNN可以生成图像、手写汉字、语音、文字
为什么要条件生成:
- 我们不希望简单地生成一些随机的句子
- 根据条件生成句子
- 将输入条件表示为一个矢量,并考虑此作为RNN发生器的输入
- 机器翻译/聊天机器人(Sequence-to-sequence learning)
这是个很好的例子:聊天时需要考虑较长的语境,例如再考虑以下对话,如果再说一次’Hi’就显得很僵硬……所以可以把很多句子放到一起进行学习
2. Attention
Dynamic Conditional Generation
- 有时候Encoder不能很好的把一个句子变成一个向量
- 让Decoder在产生’machine’的时候只需要考虑’机器’,只需要考虑相关的就好了
2.1 Attention-based model
以机器翻译为例看一下Attention-based model
关于
α
1
α_1
α1的产生没有一个公认的最好的方法,你可以这样:
以上的技术也可以应用到语音识别上面
或者图像标题生成(对图像产生一段说明)
以下亮的地方是机器的Attention所在的地方,注意到长颈鹿生成的时候是长颈鹿周围的场景,以下都是一些表现良好的场景
以上结果看起来表现非常好
2.2 Memory Network
对Memory上进行Attention
可以考虑把一个句子拆成两个向量
关于Hopping:
2.3 Neural Turing Machine
不只从Memory里训练出数据,他还可以根据match score修改Memory的数据
实际上由k生成attention的步骤如下所示:
相信没有兴趣知道它,所以跳过,接下来根据attention和e、a的值修改Memory的值
3. Tips for Generation
Training的技巧
训练和测试之间的不匹配
一步错,步步错:
修改训练过程?
使训练与测试相匹配,当我们尝试减少步骤1和步骤2的损失时…在实践中,这样的训练方式很难
3.1 Scheduled Sampling
3.2 Beam Search
绿色路径的分数更高,不可能检查所有的路径
每一步都要保持几条最佳路径
Beam size = 2
本例中beam的尺寸为3:
以下说明了为什么采样比直接把概率分布作为输入训练效果要好一些
3.3 强化学习
对象级(Object level)与组件级(Component level)
R不好进行微分,当句子和reference相同时,输出为0,调参数时结果不变,所以解决办法可以是强化学习
4. Pointer Network
Sequence-to-sequence?
Problem?效果不好,而且训练的长度和测试的输入长度可能不一样
这样输入的数量变化,输出的数量也跟着变化
更多的应用——机器翻译、聊天机器人……
小结
这次课Conditional Generation by RNN & Attention:
- 从那个聊天很僵硬知道了条件生成的目的但是具体怎么解决?就是Attention(动态条件生成)吗难道
- Attent原理差不多知道什么意思了,需要编程动手实践一下;Memory Network和Neural Turing Machine一知半解的
- Scheduled Sampling就是train到后面,不用reference用model来train,可以防止出现没有的数据集;Beam Search就是为每个路径赋予一定的值,但是不可能遍历完,所以选最大的两个;强化学习提了一下,编程实现估计不简单
- Pointer Network提了一下,原理感觉和Attention差不多,但不像based model那样把Attention和输入向量相乘,而是直接输出输入的这个值,应用场景了解了一下,编程实现估计也用不太到