RNN-LSTM-attention


【1】.RNN
RNN 出现的目的是来处理序列数据的。
RNN 之所以称为循环神经网路,是因为一个序列当前的输出与前面的输出有关。具体的表现形式为网络会对前面的信息进行记忆并应用于当前输出的计算中,即隐藏层之间的节点不再无连接而是有连接的,也就是说隐藏层的输入不仅包括输入层的输出还包括上一时刻隐藏层的输出。
理论上,RNN 能够对任何长度的序列数据进行处理。但是在实践中,为了降低复杂性往往假设当前的状态只与前面的几个状态相关。

【2】.CNN 和 RNN 的共享参数:

我们需要记住的是,深度学习是怎么减少参数的,很大原因就是参数共享:
CNN 是在空间上共享参数;
RNN 是在时间上(顺序上)共享参数:

【3】.RNN 几种架构

然后来说说几种用 RNN 组成的常用架构,如下图:

我的头像
图1是普通的单个神经网络;
图2是把单一输入转化为序列输出;
图3是把序列输入转化为单个输出;
图4是把序列转化为序列,也就是 seq2seq 的做法;
图5是无时差的序列到序列转化,可以作为普通得语言模型。

【4】几个比较重要的架构:

(1)N to 1

输入是一个序列,输出是一个单独的值而不是序列。这种结构通常用来处理序列分类问题。如输入一段文字判别它所属的类别,输入一个句子判断其情感倾向,输入一段文档并判断它的类别等等。具体如下图:

(2) N to M

这种结构又叫 Encoder-Decoder 模型,也可以称之为 Seq2Seq 模型。在实现问题中,我们遇到的大部分序列都是不等长的,如机器翻译中,源语言和目标语言的句子往往并没有相同的长度。而 Encoder-Decoder 结构先将输入数据编码成一个上下文向量 c,之后在通过这个上下文向量输出预测序列
我的头像

注意,很多时候只用上下文向量 C 效果并不是很好,而 attention 技术很大程度弥补了这点。
seq2seq 的应用的范围非常广泛,机器翻译,文本摘要,阅读理解,对话生成….,包括各种 attention,不同结构等

[3]要了解深度学习中的注意力模型,就不得不先谈Encoder-Decoder框架,因为目前大多数注意力模型附着在Encoder-Decoder框架下,当然,其实注意力模型可以看作一种通用的思想,本身并不依赖于特定框架,这点需要注意.
如果把Attention机制从上文讲述例子中的Encoder-Decoder框架中剥离,并进一步做抽象,可以更容易看懂Attention机制的本质思想。

我的头像

我们可以这样来看待Attention机制(参考图9):将Source中的构成元素想象成是由一系列的< Key,Value >数据对构成,此时给定Target中的某个元素Query,通过计算Query和各个Key的相似性或者相关性,得到每个Key对应Value的权重系数,然后对Value进行加权求和,即得到了最终的Attention数值。所以本质上Attention机制是对Source中元素的Value值进行加权求和,而Query和Key用来计算对应Value的权重系数。即可以将其本质思想改写为如下公式:

我的头像

参考图解RNN变体