对于典型的深度神经网络(DNN),就是通过在输入层与输出层之间增加隐藏层来构建网络,如下图所示。
与DNN不同的是,循环神经网络(RNN)赋予了网络对前面的内容的一种“记忆功能”,即一个序列当前的输出与前面的输出也有关。具体的表现形式为网络会对前面的信息进行记忆并应用于当前输出的计算中,即隐藏层之间的节点不再无连接而是有连接的,并且隐藏层的输入不仅包括输入层的输出还包括上一时刻隐藏层的输出,如下图所示。
在上图中,我们可以看出在RNN中有以下传递关系:
h t = U x t + W s t − 1 h_t=Ux_t+Ws_{t-1} ht=Uxt+Wst−1
s t = f ( h t ) s_t=f(h_t) st=f(ht)
o t = g ( V s t ) o_t=g(Vs_t) ot=g(Vst)
上式中, s t s_t st为 t t t时刻隐藏层的状态值, o t o_t ot为 t t t时刻输出值, f t f_t ft和 g t g_t gt均为激活函数。权重参数 U 、 W 、 V U、W、V U、W、V即所需要训练的系数,在每个时刻都是相等的。
对于激活函数(如tanh),在两端的导数均为0,逐渐趋近于水平线,即梯度变为了0,如下图所示。
因此 当矩阵中有小于1的值时,经过多次矩阵相乘,梯度值会快速地以指数形式搜索,最终在几个时刻之后完全消失。这代表着较远时刻贡献的梯度会变为0,这些时刻的状态不会对学习有所贡献,也就无法达到学习长期依赖。同样,另一个类似的问题是梯度爆炸。这两种情况都限制了RNN在学习长时间问题上的性能。LSTM对于此种情况有了新的细胞结构来解决该问题。
RNN的核心思想是将以前的信息连接到当前的任务中来,若当前位置与相关信息所在位置之间的距离相对较小的时候,RNN的效果会比较好。而实际上,相关信息和需要该信息的位置间的距离可能非常远。当距离逐渐增大时,RNN对于如何将这样的信息连接起来无能为力,也就是说,RNN并没有能力来学习这些。而LSTM作为一种特殊的RNN,则能够学习到长期依赖关系。
传统RNN中, U x t + W s t − 1 Ux_t+Ws_{t-1} Uxt+Wst−1。其结构除了在上文中画出的样子外,还可以转化为如下方式。
而LSTM可以通过“门”结构实现对重要内容的保留和不重要内容的去除。通过sigmoid层输出一个0到1之间的概率值,描述每个部分有多少量可以通过,0表示“不允许任务变量通过”,1表示“运行所有变量通过 ”。典型的LSTM网络如下图所示。
上图中每一个绿色矩形框都代表着一个细胞,而每个细胞内上方的黑色线贯穿细胞代表着细胞的状态,该状态可以根据细胞内部的交互发生改变。
在细胞中,信息的选择性通过由“门”(gates)来控制,主要是通过sigmoid神经层和逐点相乘实现,如下图所示。
Sigmoid层输出(是一个向量)的每个元素都是一个在 0 和 1 之间的实数,表示让对应信息通过的权重(或者占比)。__我们可以理解为这个运算结果就是一个概率,描述每个部分有多少量可以通过。__在LSTM中,有三个这样的门来是实现对信息的控制,分别是遗忘门、输入门和输出门。