文章目录
- 1. 神经网络基础
- 2. RNN 循环神经网络
- 2.1 背景与概念
- 2.2 RNN基本方法
- 2.3 拓展
- 3. LSTM
- 3.1 概念
- 3.2 LSTM基本方法
- 3.3 原理解释
- 4. GRU
- 4.1 概念与背景
- 4.2 GRU基本方法
1. 神经网络基础
上图是一个简单的全连接神经网络结构,每一条连接线上都有一个权重,蕴含着网络学得的“能力”。
不妨记输入,隐层,输出。则对于该网络,不同的输入之间是相互独立的,互不影响。
为了方便下文的讲述,我们把该网络模型用下图概括,记该模型为:
参考:四种基本的神经网络架构
2. RNN 循环神经网络
2.1 背景与概念
以自然语言处理为例。自然语言是有语序关系的,如果我们想让一个模型从自然语句中学得一些“能力”,可以依次将每个单词送入神经网络(如上文神经网络模型),然后这个网络可以学到每个单词的潜在表达(向量)。但是,自然语句的语序关系考虑了吗?
“What time is it?”,这句话包含4个单词(标点忽略),当一个人说出前3个单词的时候,听者会有很大概率想到"it"这个单词。但是我们上面提到的模型做不到啊,前3个单词分别喂入网络让其学习后,再喂入"it"时,丝毫不会记得之前以什么顺序喂入过哪些单词。换句话说就是,我们把一个完整的句子拆成单词,让网络去学习每个单词,却不学习句子(例如英语极差的我在参加英语听力考试,就算我听到了每一个单词,却不知道组合起来是啥意思)。
那能不能既让网络学到每个单词,又学到整个句子的语序逻辑呢?于是,循环神经网络诞生了。循环神经网络(Recurrent Neural Network,RNN)是一种用于处理序列数据的神经网络。比如某个单词的意思会因为上文提到的内容不同而有不同的含义,RNN就能够很好地解决这类问题。
2.2 RNN基本方法
RNN在上文提到的模型上做了一个修改,让隐层单元自己到自己进行全连接。但是,这样做的目的并不是让单词的隐层学习自己的隐层,而是把自己的隐层喂给下一个单词学习。如此一来,就从中学到一点东西。
具体来说,RNN新增的这个全连接的权重不是给自己用的,而是给下一个单词用的。如下图,左边是一个简单RNN模型,右边是向这个RNN模型分别喂入三个单词,每喂入一个单词,隐层都会以权重把自己喂入下一个单词的隐层。
注意!图中RNN模型的参数U,V,W均为矩阵。输入是单词的词嵌入向量(embedding),输出是每个单词的潜在表达(后面的单词隐含着前面的单词)。
2.3 拓展
- 上面介绍的简单RNN模型只有一个隐层,实际应用中可以有多个隐层,如
- 上面介绍的RNN模型是单向的,在实际应用中,常常使用BiRNN(双向循环神经网络)表现效果更佳。具体来说,就是在上面的RNN模型中,增加一个并联的隐层,从右向左传播,同时多出一个参数。
- 前两种拓展是可以结合起来的
参考: RNN-简书文章; 一文搞懂RNN(循环神经网络)基础篇
3. LSTM
3.1 概念
长短期记忆(Long short-term memory, LSTM)是一种特殊的RNN,主要是为了解决长序列训练过程中的梯度消失和梯度爆炸问题。简单来说,就是相比普通的RNN,LSTM能够在更长的序列中有更好的表现。
3.2 LSTM基本方法
LSTM相对于RNN来说,每个单词对应的LSTM单元向后传播的两个参数:
:隐含长期历史记忆;该数值在传播中改变很慢。
:隐含短期记忆;该数值传播中变化较大。类比于RNN中的。
下面看看LSTM内部干了什么:
3.3 原理解释
LSTM一共有三个门控:遗忘门(forget gate)、输入门(input gate)、输出门(output gate),下面左图标注了LSTM三个门所处的位置,右图标注了GRU两个门所处的位置:
- 遗忘阶段。遗忘门对前面的LSTM单元传播过来的长期记忆选择性遗忘;
- 记忆阶段。输入门对当前输入选择性记忆,然后与遗忘阶段得到的长期记忆相加,作为本单元的长期记忆;
- 输出阶段。输出门对前两个阶段得到的输出做一次选择,结果为当前lstm单元的短期记忆;另外,可以对该短期记忆做一次全连接神经网络得到该lstm单元最终输出。
LSTM核心是通过,,这三个门控实现对过去信息以及当前输入信息的综合处理。这三个门都是由Sigmoid神经网络层输出0到1之间的数字,这个数字描述每个组件有多少信息可以通过, 0表示不通过任何信息,1表示全部通过。通过门控状态来控制传输状态,记住需要长时间记忆的,忘记不重要的信息;而不像普通的RNN那样只能够“呆萌”地仅有一种记忆叠加方式。对很多需要“长期记忆”的任务来说,尤其好用。
参考:人人都能看懂的LSTM
上面只是展示了一个LSTM单元所进行的操作,实际操作中多个LSTM单元是如何运行的呢?如图所示:
参考:
4. GRU
4.1 概念与背景
GRU(Gate Recurrent Unit)是循环神经网络(Recurrent Neural Network, RNN)的一种。和LSTM(Long-Short Term Memory)一样,也是为了解决长期记忆和反向传播中的梯度等问题而提出来的。 GRU和LSTM在很多情况下实际表现上相差无几,那么为什么我们要使用新人GRU(2014年提出)而不是相对经受了更多考验的LSTM(1997提出)呢?因为GRU的训练参数更少,模型训练效率更高。
4.2 GRU基本方法
GRU模型的输入输出结构与RNN相同。 每个单词对应的GRU单元向后传播1个参数:
:实际等于当前GRU单元的输出。
是Hadamard Product,也就是操作矩阵中对应的元素相乘,要求两个相乘矩形状相同; 代表进行矩阵加法。下面是图中3个隐层状态的计算公式(其中,表示两个列向量拼接):
- 控制重置的门控(reset gate);用于重置前一个GRU单元传来的。
- 控制更新的门控(update gate);用于同时控制遗忘和记忆。
- 输入特征提取;首先用门控r重置(过滤)上一个GRU单元传过来的信息,再与当前GRU单元的输入拼接,然后经过全连接层得到当前输入的特征表达(该表达隐含少量过去的信息):
- 记忆更新阶段;对过去信息和当前特征信息进行取舍,由第2步得到的更新门控来控制比例。
GRU很聪明的一点就在于,仅使用了同一个门控 就同时可以进行遗忘和选择记忆(LSTM则要使用多个门控);或者可以理解为:当前要记忆的特征,那就不从历史信息中获取,反之,当前不记忆的特征,那就从历史中获取。
参考:人人都能看懂的GRU