神经网络基础 —— Seq2Seq的应用
文章目录
1. 普通的Seq2Seq
1.1 产生句子
其实在上一节内容LSTM与GRU写歌词的应用就是一个普通的Seq2Seq应用,时刻的输出作为时刻的输入,如果想停止,则在训练集中加入停止符,一起训练即可。具体结构如下:
1.2 产生图片
每一个pixel都看成一个词汇,那么一张图可以描绘成:
那么可以描述成:蓝、红、黄、灰、黑、蓝、绿、绿、蓝。
有一种专门产生图片的RNN——PixelRNN
其实在一个图像中,第一行黄色的pixel与第二行灰色的pixel相差很远,二者之间并没有什么关联,那么PixelRNN的做法是:
2. Conditional Sequence Generation
2.1 图片描述
假设要描述这样一张图片,要求机器输出图片描述的内容。
大致思路为:先使用CNN的方法将其变成一个Vector,然后将Vector输入到RNN的timestamps中。
2.2 文本翻译
使用Encoder-Decoder进行机器翻译。
2.3 问答
需要两层LSTM网络:
第一层用于处理每一次对话的内容,基于当前内容生成对话。
第二层网络用于记录对话的上下文主题, 然后将主题和当前对话内容同时输入到解码器中,得到最后结果。
3. Dynamic Conditional Generation(注意力机制)
在这张架构图中,decoder的输入吃的都是同样的vector
而DCG的架构是这样的:
注意力机制模型类似于encoder-decoder模型,只不过,在编码解码器的连接部分有部分的差别。总的来说可以概括为下面4个步骤:
- 在输入的数据中,每个单词或者字均由一个向量表示,按照标准LSTM流程输入到模型中,每一个timestamps都会有对应的隐藏状态,与普通LSTM模型不同的是,每一个timestamps得到的隐藏状态值均需要被保留下来。
- 这个时候初始化一个东西,(这个东西是乱出来的,需要model学习),它的作用相当于一个key,去匹配第一步中所有隐藏状态的输出值,对于每一个隐藏状态值都计算一个匹配度,计算匹配程度的算法叫做:match。
note:softmax层可加可不加,看情况而定。 - 将第2步中的得到的匹配度与隐藏状态的值进行加权作为新的解码器在t时刻的输入。这个时候decoder解码器LSTM神经网络输出的值为“machine”,同时可以把隐藏状态或者记忆单元作为。
- 重复上述过程。
4. Generation的Tip
4.1 regularization attention
在注意力机制中,有时候注意力可能仅仅集中在某几个特殊的状态中,例如:
这个时候输出的结果可能就只有妹子了,那么怎么办,我们希望注意力集能够均匀分布,因此需要正则化,所以:
4.2 Mismatch test data
在RNN的Seq2Seq模型的训练过程中,不管训练输出的结果是啥,都使用的正确输入数据作为下一时刻的输入。
这样的方式可能会造成一个问题,那就是在生成数据的时候,可能你第一个输出就是错误的,这样的结果就是错上加错。
解决方法:
- Beam搜索
即每个可能的输出都进行一次运算,保留可能性最大的K个值作为下一时刻的输入。
4.3 目标函数不能求导?
结合强化学习硬train。。。