神经网络基础 —— Seq2Seq的应用

1. 普通的Seq2Seq

1.1 产生句子

其实在上一节内容LSTM与GRU写歌词的应用就是一个普通的Seq2Seq应用,t1t-1时刻的输出作为tt时刻的输入,如果想停止,则在训练集中加入停止符,一起训练即可。具体结构如下:

神经网络基础 —— Seq2Seq的应用

1.2 产生图片

每一个pixel都看成一个词汇,那么一张图可以描绘成:

神经网络基础 —— Seq2Seq的应用
那么可以描述成:蓝、红、黄、灰、黑、蓝、绿、绿、蓝。
神经网络基础 —— Seq2Seq的应用
神经网络基础 —— Seq2Seq的应用
有一种专门产生图片的RNN——PixelRNN
其实在一个图像中,第一行黄色的pixel与第二行灰色的pixel相差很远,二者之间并没有什么关联,那么PixelRNN的做法是:
神经网络基础 —— Seq2Seq的应用
神经网络基础 —— Seq2Seq的应用


2. Conditional Sequence Generation

2.1 图片描述

假设要描述这样一张图片,要求机器输出图片描述的内容。
神经网络基础 —— Seq2Seq的应用
大致思路为:先使用CNN的方法将其变成一个Vector,然后将Vector输入到RNN的timestamps中。

神经网络基础 —— Seq2Seq的应用

2.2 文本翻译

使用Encoder-Decoder进行机器翻译。
神经网络基础 —— Seq2Seq的应用
神经网络基础 —— Seq2Seq的应用

2.3 问答

需要两层LSTM网络:

第一层用于处理每一次对话的内容,基于当前内容生成对话。

第二层网络用于记录对话的上下文主题, 然后将主题和当前对话内容同时输入到解码器中,得到最后结果。
神经网络基础 —— Seq2Seq的应用

3. Dynamic Conditional Generation(注意力机制)

在这张架构图中,decoder的输入吃的都是同样的vector
神经网络基础 —— Seq2Seq的应用
而DCG的架构是这样的:
神经网络基础 —— Seq2Seq的应用

注意力机制模型类似于encoder-decoder模型,只不过,在编码解码器的连接部分有部分的差别。总的来说可以概括为下面4个步骤:

  1. 在输入的数据中,每个单词或者字均由一个向量表示,按照标准LSTM流程输入到模型中,每一个timestamps都会有对应的隐藏状态,与普通LSTM模型不同的是,每一个timestamps得到的隐藏状态值均需要被保留下来。
    神经网络基础 —— Seq2Seq的应用
  2. 这个时候初始化一个东西,z0z^0(这个东西是乱出来的,需要model学习),它的作用相当于一个key,去匹配第一步中所有隐藏状态的输出值,对于每一个隐藏状态值都计算一个匹配度,计算匹配程度的算法叫做:match。
    神经网络基础 —— Seq2Seq的应用
    note:softmax层可加可不加,看情况而定。
    神经网络基础 —— Seq2Seq的应用
  3. 将第2步中的得到的匹配度隐藏状态的值进行加权作为新的解码器在t时刻的输入。这个时候decoder解码器LSTM神经网络输出的值为“machine”,同时可以把隐藏状态hh或者记忆单元cc作为z1z^1
    神经网络基础 —— Seq2Seq的应用
  4. 重复上述过程。

4. Generation的Tip

4.1 regularization attention

在注意力机制中,有时候注意力可能仅仅集中在某几个特殊的状态中,例如:
神经网络基础 —— Seq2Seq的应用
这个时候输出的结果可能就只有妹子了,那么怎么办,我们希望注意力集能够均匀分布,因此需要正则化,所以:
神经网络基础 —— Seq2Seq的应用

4.2 Mismatch test data

在RNN的Seq2Seq模型的训练过程中,不管训练输出的结果是啥,都使用的正确输入数据作为下一时刻的输入。
神经网络基础 —— Seq2Seq的应用
这样的方式可能会造成一个问题,那就是在生成数据的时候,可能你第一个输出就是错误的,这样的结果就是错上加错

解决方法:

  1. Beam搜索
    神经网络基础 —— Seq2Seq的应用
    即每个可能的输出都进行一次运算,保留可能性最大的K个值作为下一时刻的输入。

4.3 目标函数不能求导?

结合强化学习硬train。。。