机器学习面试题-RNN&LSTM
[TOC]
LSTM产生的原因
- RNN在处理长期依赖(时间序列上距离较远的节点)时会遇到巨大的困难,因为计算距离较远的节点之间的联系时会涉及雅可比矩阵的多次相乘,会造成梯度消失或者梯度膨胀的现象。RNN结构之所以出现梯度爆炸或者梯度消失,最本质的原因是因为梯度在传递过程中存在极大数量的连乘 。
- 相对于RNN,LSTM的神经元加入了输入门i、遗忘门f、输出门o 、内部记忆单元c
分别介绍一下输入门i、遗忘门f、输出门o 、内部记忆单元c
内部记忆单元$c$
- 类似于传送带。直接在整个链上运行,只有一些少量的线性交互。信息在上面流传保持不变会很容易。
- 操作步骤:
- 示意图
遗忘门$f$
将内部记忆单元中的信息选择性的遗忘
操作步骤:
- 读取:$h_{t-1}$、$x_t$,
- 输出:$f{t}=\sigma\left(W{f} \cdot\left[h{t-1}, x{t}\right]+b_{f}\right)$
- $\sigma$表示一个在 0 到 1 之间的数值。1 表示“完全保留”,0 表示“完全舍弃”
示意图
输入门$i$
将新的信息记录到内部记忆单元中
操作步骤:
步骤一:$sigmoid$ 层称 输入门层决定什么值我们将要更新。
步骤二:$tanh$ 层创建一个新的候选值向量$\tilde{C}_t$加入到状态中。其示意图如下:
步骤三:将$C{t-1}$更新为$C{t}$。将旧状态与$f_t$相乘,丢弃掉我们确定需要丢弃的信息。接着加上$i_t * \tilde{C}_t$得到新的候选值,根据我们决定更新每个状态的程度进行变化。其示意图如下:
输出门$o$
确定隐层$h_t$输出什么值
操作步骤:
步骤一:通过sigmoid 层来确定细胞状态的哪个部分将输出。
步骤二:把细胞状态通过 tanh 进行处理,并将它和 sigmoid 门的输出相乘,最终我们仅仅会输出我们确定输出的那部分。