本文是读A Beginner's Guide to LSTMs and Recurrent Neural Networks的个人摘要。
递归网络是一种人工神经网络,用于识别数据序列中的模式,如文本、基因组、手写、口语或来自传感器、股票市场和政府机构的数字时间序列数据。
这些算法考虑了时间和序列,它们都有时间维度。
引申阅读: attention mechanism, memory networks
在RNN前,已经有前馈神经网络了:通过有监督的学习,输出将是一个标签,一个应用于输入的名称。
也就是说,他们将原始数据映射到类别,识别可能会发出信号的模式,例如,输入图像应该被标记为“猫”或“大象”。
训练过的前馈网络可以接受任意随机的数据集,但是没有时间顺序的概念,比如数据集第一张照片为猫,并不会影响它对第二张照片的分类结果。
在早些时候由Elman提出的simple recurrentmoxing, BTSXVPE为输入,context units则代表了前一时刻的输出。
hidden units则用来储存这种跨越多个时间步骤的时间序列信息。
下面的过程可以用公式表为:
\[
h_{t} = \varnothing (W_{X_{t}} + Uh_{t-1})
\]
时间步长t处的隐藏状态是h_t。
它是输入在同一时间步骤的函数。
x_t,由权矩阵修改W(就像我们使用的前馈网)添加到前一个时间步骤的隐藏状态。
h_t-1乘以它自己的隐藏状态到隐藏状态矩阵。
U,也称为转移矩阵,类似于马尔可夫链。
权重矩阵是一种滤波器,它决定了对当前输入和过去隐藏状态的重视程度。
它们产生的错误将通过反向传播返回,并用于调整其权重,直到误差不能降低。
记住,递归网的目的是准确地分类顺序输入。
我们依靠误差和梯度下降的反向传播来做到这一点。
前向网络中的反向传播通过每个隐层的输出、权值和输入从最终误差向后移动,通过计算它们的偏导数,为误差的一部分分配权重责任-∂E/∂w或它们之间的变化率之间的关系。
这些导数然后被我们的学习规则,梯度下降,调整权向上或向下,任何方向减少误差。
递归网络依赖于反向传播的扩展,称为逆传时间,或BPTT.在这种情况下,时间只是简单地用一个定义明确的、有序的计算序列来表示,这些计算将一个时间步骤连接到另一个时间步骤,这是所有反向传播都需要工作的。
神经网络,无论是递归的还是非递归的,都是简单的嵌套复合函数,如f(g(h(x)))。
添加时间元素只扩展了用链式规则计算导数的函数序列。
截断BPTT是完全BPTT的近似,这是长序列的首选,因为完整BPTT的每个参数更新的前向/后向代价在许多时间步骤中变得非常高。
缺点是,由于截断,梯度只能返回到目前为止,因此网络无法学习与完整BPTT一样长的依赖关系
LSTMS 和 GRUS 梯度消失和梯度爆炸由于深层神经网络的层数和时间步长通过乘法相互关联,导数容易消失或爆炸。
梯度爆炸通过截断(truncated BPTT ?)或压缩可以解决。
梯度消失则比较困难了,因此LSTM应运而生。
LSTM 引入了门控单元,信息可以存储在单元格中、写入单元格或从单元格中读取,就像计算机内存中的数据一样。
单元格通过打开和关闭的门来决定存储什么,以及何时允许读取、写入和擦除。
从底部开始,三重箭头显示信息在多个点流入单元格的位置。
现在的输入和过去的单元状态的组合不仅提供给单元本身,还提供给它的三个门中的每一个,这将决定如何处理输入。
黑点是门本身,它们分别决定是否让新的输入进入,擦除当前的单元状态,以及/或让该状态在当前的时间步骤中影响网络的输出。
S_c是内存单元格的当前状态,并且g_y_in是它的当前输入。
请记住,每个门都可以打开或关闭,它们将在每一步重新组合它们的开放和关闭状态。
单元格可以忘记其状态,也可以不;可以被写入,也可以不;可以在每个时间步骤中读取,也可以在每个时间步骤中读取,这些流在这里表示。
simple rnn 与 LSTM处理流程的对比
门控递归单元(GRU)基本上是没有输出门的LSTM,因此,在每个时间步骤中,它都会将内容从其存储单元完全写入到较大的网中。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)