对于循环神经网络 RNN。由于其记忆的短期性,不能解决长输入序列的信息传递问题。所以我们关注 LSTM 模型。可以说 LSTM 在 RNN 的基础上扩展出来的。
RNN综述
1. RNN的工作原理:
输入一个词后,这个词被转换成为机器可读的向量;输入一段文本后,RNN按照顺序逐个处理向量序列。
RNN 会把先前的隐藏状态传递给向量序列的下一步,这个 隐藏状态 就是神经网络的记忆,包含网络见过的先前数据的信息。那么隐藏状态是怎么算的呢?
如上图,首先把 输入 和 上一步的隐藏状态 组合成为一个向量;之后这个向量经过 Tanh /tan/ 激活,输出新的隐藏状态。
Tanh 函数主要用来调节流经网络的值,使其一直约束在 -1 和 1 之间(避免了某些值经过神经网络计算后变得太大)。
可以看出,RNN 内部构造比较简单,所以所需的计算资源比 LSTM 和 GRU 这两个变体少的很多。
1. LSTM
整体上看,LSTM 和 RNN 是类似的,既向前传递信息,又处理当前信息。但是,LSTM 允许保留或者忘记信息
如图,表示 LSTM 的一个 cell,可以看到,其核心为 cell 的 各种状态 & 控制门,可以把有用的信息保留在 cell 中,并移除无用信息。
下面我们看一下具体的每个部分:
Sigmoid 激活函数
每个门都包含 Sigmoid 激活,这个函数与 Tanh 的区别在于,Sigmoid 将取值约束在 [0,1]。这个特点可以帮助保留和移除信息。如果是0,则移除;是1,保留;中间数,能体现数据的重要性(有点像权值)
遗忘门
LSTM 的第一步决定从 cell 状态 中丢弃什么信息。由遗忘门完成。
该门会读取 前一个隐藏状态和当前输入,输出一组 对应 前一个cell状态中数字 的 [0,1] 之间的权值,表示保留或者丢弃。
输入门
LSTM 下一步是确定 什么样的新信息被存放在 cell状态中。由输入门完成。
首先,隐藏状态和当前输入 传输给 Sigmoid 函数,由它计算出哪些值更加重要。同时,也把上面的值传递给 tanh 函数,把向量的值约束在 [-1,1],防止数值过大。最后,把 Sigmoid 和 tanh 的输出相乘,由 Sigmoid输出 来决定 tanh 输出哪些信息是重要的。
cell 状态
更新 cell 状态。首先,把先前隐藏状态 和 遗忘门输出的向量 进行点乘。之后,再把前面的输出 和 输入门的输出 点乘,输出就是更新后的 cell 状态。
输出门
输出门决定了下一个隐藏状态是什么。上面是 cell 状态,下面是隐藏状态,具体见上面图中。隐藏状态包含有关先前输入的信息,神经网络的预测能力正是基于它。
首先,将先前隐藏状态 和 当前输入 传给 sigmoid 函数,决定细胞状态的哪个部分将输出出去;之后,把更新后的 cell状态 传给 tanh 函数;最后把两个激活函数的输出结果相乘,即可得到下一时间步的新隐藏状态。
总之,遗忘门决定的是和 先前步骤有关的重要信息,输入门决定的是要从当前步骤中添加哪些重要信息,输出门决定 下一个隐藏状态是什么。
2. GRU
GRU 跟 LSTM 很像,但是它摆脱了cell 状态,直接用隐藏状态传递信息。
更新门
和 LSTM 的遗忘门和输入门类似,决定要丢弃的信息和 添加的信息
重置门
决定要丢弃多少先前的信息
GRU 相比于 LSTM,张量操作少,速度快。
Ref
http://www.cnblogs.com/wangduo/p/6773601.html?utm_source=itdadao&utm_medium=referral
https://www.jianshu.com/p/b8b406a6f88a