简介
在深度RNN中,由于多hidden layer,存在梯度爆炸和梯度消失的问题。而停止学习,RNN会忘记在长序列中学习到的东西,仅拥有短期记忆。
长短期记忆网络能够学习长期依赖关系,并可保留误差,在沿时间和层进行反向传递时,可以将误差保持在更加恒定的水平,让递归网络能够进行多个时间步的学习,从而简历远距离因果联系。他在许多问题上效果非常好,现在被广泛应用。
长短期记忆网络将信息存放在递归网络正常信息流之外的门控单元中,这些单元可以存储、写入或读取信息,就像计算机内存中的数据一样。但愿通过门的开关判定存储哪些信息,何时允许读取、写入或清除信息。这些门是模拟的,包含输出范围全部在0~1之间的Sigmoid函数的逐元素相乘操作。这些门依据接收到的信号开关,而且会用自身的权重集对信息进行筛选,根据强度和输入内容决定是否允许信息通过。这些权重会通过递归网络的学习过程进行调整。
h(t): 为当前时刻隐藏层的输出,c(t): 为当前时刻网络的的总输出。
详细阐述
单元状态(cell state):(类似隐状态,但不是隐状态。在LSTM中新加入)
首先,单元状态逐点乘以遗忘向量(遗忘门输出),如果他与接近0的值相乘,就可能在单元状态中得到低值。然后,从输入门读取上一步输出,并逐点相加,将单元状态更新到神经网络认为相关的新值,就得到了新的单元状态。
三个门:
输入门(input gate):更新单元状态
首先,我们将前面得隐状态(h t-1)和当前输入(xt)传递给一个sigmoid函数,它通过将值转化为0到1来决定更新哪些值。还可以将隐状态和当前输入传递给tanh函数,将值变为-1到1之间的值,以帮助调节神经网络。然后将tanh输出和sigmoid输出相乘,sigmoid输出将决定保留tanh输出的重要信息。
遗忘门(forget gate):遗忘或保存
决定哪些信息应该被丢弃或者保存。在遗忘门钟,来自先前隐状态的信息和当前输入的信息传递到sigmoid函数,并将值压缩到0和1之间。越接近0则意味着丢弃,越接近1意味着保留。
输出门(output gate):决定下一个隐藏状态
记住,隐藏状态把包含先前输入的信息,隐藏状态也用于预测。
首先我们将前面的隐状态和当前输入传递给一个sigmoid函数。然后我们将新修改的单元状态(ct)传递给tanh函数。我们将tanh输出与sigmoid输出相乘,以确定隐状态应该包含的信息。新的单元状态(ct)和新的隐藏状态(ht)随后被转移到下一步中。
t时刻的隐状态ht乘以一个输出层的权值矩阵,就会得到模型输出yt。
示例:
hidden_size = 4, Wi, Wf, Wc, Wo ∈ R6*4(4*6),偏置项为0.
将隐状态矩阵与输出矩阵拼接一起后,与权值矩阵相乘, 再经过sigmoid函数加权求和之后,得到一个各元素为0-1之间的矩阵,即遗忘门的输出。即
Xt(1*6) * h(t-1)(6*4) = (1*4) / (4*1) -->sigmoid(4*1) = (4*1)
输入门:
1. 先经过一个 隐状态和当前输入拼接结果,与权值矩阵相乘,并经过sigmoid函数。如上一步操作。
2. 然后,隐状态与当前输入拼接结果,再与一个权值矩阵相乘,并经过tanh函数,得到一个矩阵。
3. 最后将两个输出矩阵相乘才会得到输入门的结果。
单元状态更新:
遗忘门输出矩阵 * 原始单元状态 + 输入门输出矩阵 = t时刻的单元状态
输出门:
1. 将拼接矩阵与权值矩阵相乘结果经过一个sigmoid函数,与t时刻的单元状态矩阵经过一个tanh函数。两结果相乘,得到ht。
即X(2*1) ——>y(2*1)