- 一、神经网络
- 1、循环神经网络(RNN)
- 2、门控循环单元(GRU)
- 3、长短期记忆网络(LSTM)
- 4、双向RNN
- 5、卷积神经网络(CNN)
- 二、注意力机制
- 1、注意力机制原理介绍
- 2、注意力机制的各种变式
- 3、注意力机制的特点
一、神经网络
1、循环神经网络(RNN)
- RNN的一个关键点在于它在处理序列数据的期间会进行一个顺序记忆。
- 序列数据:一段话或者一个音频都可以理解为序列数据。
- 顺序记忆是一种会使大脑更容易识别这个序列模式的数据的一个机制。而RNN可以很好的利用这个机制,来递归地进行更新我们这个生命记忆,以此来对我们这些序列数据进行一个很好的建模。
- RNN是顺序记忆的原因:因为其每一个时间步下的隐藏状态变量计算都包含了我们过去的一个时间,是一个一个计算,按照顺序来的。
- 最终会经过softmax,然后输出词表上每个词的概率,我们选择概率最大的词来做我们的最终预测词。
- 整个RNN的结构就是每一个RNN单元的不断复制,因此每个RNN单元的功能都是一样的。所以 W i , W h W_i,W_h Wi,Wh都是相同的,代表输入的矩阵。这里面的权重
- RNN的优点:(1)可以处理变量的数据(2)模型的大小不会随着输入的增加而增大,因为这里的权重基本是共享的,有很好的参数共享。
- RNN的缺点:(1)由于我们是顺序的计算,因此我们需要计算前一个单元的学习结果,才能得到后面的这个结果,因此时间上较慢。(2)实际应用当中,随着时间步不停地往后进行推移,后面信息单元的计算就较难获取到之前信息单元的计算。
- 下面介绍两种RNN的变体:GRU和LSTM
2、门控循环单元(GRU)
- 门控机制:对当前的信息进行筛选,像阀门一样。GRU有两个门控:(1)更新门:update gate。(2)重置门:reset gate。它们的作用在于权衡我们过去的信息和当前的输入信息之间的比重问题。
3、长短期记忆网络(LSTM)
- 黄色方块:神经网络层。
- 粉色圈圈:元素之间的操作。
- 箭头:向量的传递。向量的合并与复制。
- LSTM关键在于加了一个新的值,cell state。用它来学习长期的依赖关系。
- 第一个门称之为:遗忘门。它的作用主要来决定我们当前上一个状态,有哪些信息可以从cell状态中进行移除。
- 如果 f t = 0 f_t=0 ft=0,即遗忘门的最终计算结果为0,则表示过去的某些信息我们可以直接进行丢弃。
- 输入门是决定有哪些信息可以存入cell状态里面去的,其计算方法与遗忘门叫类似。
- 最后是输出门,决定了哪些信息可以输出。
- 综上,LSTM很强大,因为我们每个隐藏层都是已经有一个内部的神经单元网络已经计算好了,所以在我们做堆叠或者我们做的很深的时候,LSTM会表现的性能很好。并且,由于我们引入了门控机制,它会对神经网络的输入和输出进行一个动态的控制,会增强我们对信息的利用能力。最后,LSTM可以有效的缓解梯度的问题。
4、双向RNN
- 前面提到的RNN都有一个特点,就是每一个时间步下的状态里面的隐藏状态变量都是从我们过去序列,以及当前输入来捕获信息的。或者允许过去的值来影响我们当前的状态。
- 但是在有些时候,我们计算当前的时候,不仅是依赖过去,还会依赖未来的输入,相当于我们会依赖整个输入序列。
- 例如:我们对手写体进行识别的时候,不仅会取决于过去,还会取决于未来的几个字,还有语音识别。
5、卷积神经网络(CNN)
- CNN刚出现的时候,是运用在计算机视觉领域。但是由于其结构的特殊性,也可以运用在NLP领域。例如:情感分类、心态分类当中都有较好的运用。【这是归功于CNN比较擅长提取局部和位置不变的模式。】
- CNN提取局部模式的步骤主要是用来计算一个句子当中所有可能的N元组短语的一个表示。
- N元组:表示我们选取几个相邻的词作为短语。
- CNN的运用领域:目标检测、语音识别、文本分类、视频分类等。
- CNN比较擅长提取局部的特征。RNN可以很好的处理变长的文本。来对变长的文本依赖进行很好的建模。
- 模型机制不同导致RNN参数更多一些。
- CNN主要是使用卷积核,卷积核在计算的时候是没有相互依赖的,因此可以很好的并行计算。RNN则依赖于过去的数据。
二、注意力机制
1、注意力机制原理介绍
- Encoder将可变长度的输入序列编码成一个固定长度的向量;
- Decoder将固定长度的向量解码成一个可变长度的输出序列;
- Encoder-Decoder阶段的编码与解码的方式可以是CNN、RNN、LSTM、GRU等;
首先,以RNN模型为例,这个模型当中存在一个信息瓶颈的问题。
decoder端需要输出一个完整的句子,这要求encoder端得到的最后一个向量表示需要包含它输入句子的所有信息。但是这样的向量无法表达所有句子的多种多样的信息。
研究人员也发现这样的向量容量会限制模型encoder端的表示。因为在encoder端的每一个位置的隐向量都包含有丰富的信息,而其实最后的向量是整个encoder和decoder模型之间的一个信息瓶颈。
注:上图当中写的Seq2Seq其实是一个抽象的理论,只要满足输入序列生成输出序列的模式,都可以归类为Seq2Seq的模型。
而注意力机制就是为了解决信息瓶颈的问题提出的。
- encoder端得到的每一个隐藏向量用h1到h7来表示,在decoder端得到的第一个隐向量用s1来表示。
- 与之前RNN模型不同的是,我们不用s1直接来计算这一步生成单词的概率,而是利用s1来选择关注输入句子中的哪些部分,并计算得到一个新的隐向量,来得到生成单词的一个概率。
那么这样一个decoder端如何根据s1来对encoder端的向量进行选择呢?
- 首先需要计算注意力分数,将s1与h1进行点积得到标量,称其为 e 1 1 e_{1}^{1} e11 ,之后将s1与h1进行点积得到 e 2 1 e_{2}^{1} e21 ,将这个过程一直重复直到这个句子的末尾。
最后我们就可以得到一个长度为7的向量,其中每个元素都是s1和对应位置的隐向量点积得到的。
我们将这样一个长度为7的向量,称为encoder端隐向量的一个注意力分数。
而这分数其实就表示s1与每一个encoder端隐向量hi的一个相似程度。值越高,表示s1与对应的隐向量相似程度越高。
之后,使用softmax函数将其变成概率分布。概率越接近于1,则decoder端就会越关注这些位置的向量。
- 如上图所示,前两个位置的概率分布值较高,说明会更加关注前两个位置的隐向量。
在第三步,我们利用之前得到的注意力分布,对encoder端的隐向量进行加权求和,然后可以得到一个与隐向量维度相同的输出向量o1。
o1向量也就包含了decoder端当前所需要的encoder端的所有信息。
最后,将o1与RNN得到的隐向量s1进行拼接,可以得到一个新的表示,来表示decoder端这一步的一个状态。用这样一个向量来预测下一步需要生成的单词。
- 在这个例子当中,我们输出的是many这个词,对应的就是汉语当中的多个,这也可以从注意力分布的高低看出对应关系。
- s1输出的是many,而many就作为下一轮的输入。
接下来就是不断重复,之后我们对于decoder端的每一步,都可以自主的关注到encoder不同位置的隐向量。并且预测出一个新的单词。最后得到整个的输出句子。
2、注意力机制的各种变式
变体一:加上权重矩阵
如果两个向量的维度不一样,我们就需要在中间加上一个权重矩阵,来实现两者的相乘,最后得到一个标量。
变体二:additive attention
additive attention使用了一层的前馈神经网络,来将两个向量变成一个标量,从而得到注意力分数。
3、注意力机制的特点
- 注意力机制的出发点是解决信息瓶颈的问题存在的。
- 注意力机制可以缓解RNN当中梯度消失的问题。通过在encoder和decoder之间提供了一种直接连接的方式,防止梯度在RNN当中会传播过长,进而导致梯度消失。