专业网站建设微信官网开发,云南省建设厅一级建造师网站,那里有帮做网站的,牛搬家网企业网站排名RNN无法处理长距离依赖问题#xff0c;通俗点就是不能处理一些较长的序列数据#xff0c;那么今天就来介绍一下两个能处理长距离依赖问题地RNN变种结构#xff0c;LSTM和GRU。
1. LSTM#xff08;Long short-term memory#xff09;
1.1 LSTM结构 上左图是普通RNN结构图…RNN无法处理长距离依赖问题通俗点就是不能处理一些较长的序列数据那么今天就来介绍一下两个能处理长距离依赖问题地RNN变种结构LSTM和GRU。
1. LSTMLong short-term memory
1.1 LSTM结构 上左图是普通RNN结构图上右图是LSTM结构图。
从图中我们可以看出普通的RNN在隐藏层中只传递一个状态值h而LSTM不仅传递h还新增了一个状态值C每一层隐藏层中的每一个神经元都接收上一时刻传递的h{t-1}和c{t-1},经过计算得到h{t}和c{t}再传入下一时刻。
那么接下来咱们就来看看状态c和h究竟在LSTM的隐藏层中做了哪些计算又是怎么传递地。 上图是LSTM的某一隐藏层的局部结构三个矩形为{t-1},{t},{t1}三个时刻的神经元中间显示的是t时刻神经元的内部结构图。说实话只是单单看图的话反正我当时是一脸懵逼这都是些啥不过不要慌接下来咱们一步一步慢慢说明。
首先LSTM是由三个门来控制信息传递状态地分别是红色方框对应的”忘记门“绿色方框对应的”输入门“和紫色方框对应的”输出门“。这三个门中一共包含3个sigmoid函数和2个tanh函数。使用sigmoid函数的原因是sigmoid函数能够将输入映射到[0,1]空间中那么咱们就可以根据映射之后的概率对于上一时刻传递的信息进行有选择的去除保留和输出。比如sigmoid函数的值为1也就是门的全开状态则代表所有的信息都被保留如果sigmoid函数为0也就是门的全闭状态则代表所有的信息都不被保留。使用tanh函数是为了对数据进行处理映射到[-1,1]的空间当然也可以使用其他的激活函数比如ReLU至于效果谁好谁坏我没有深究过有研究表明在LSTM层数比较少的时候使用tanh比ReLU效果好。知道了这些之后接下来咱们就来将这三个门一步一步拆解来讲讲具体这三个门中怎么计算。忘记门 上图就是”忘记门“的结构以及计算公式。说白了就是把t-1时刻传入的h{t-1}与t时刻的输入Xt进行拼接然后通过权值矩阵Wf转换后加上偏置bf再由sigmoid函数映射到[0,1]空间中。就形成了这个”忘记门“。
然后通过”忘记门“ft对于上一时刻传入的C{t-1}进行有选择的忘记将C{t-1}与ft进行点乘得到去除一些信息后的”忘记门的输出“
输入门 上图是”输入门“的结构与”忘记门“类似首先把t-1时刻传入的h{t-1}与t时刻的输入Xt进行拼接然后通过权值矩阵Wi转换后加上偏置bi再由sigmoid函数映射到[0,1]空间中形成了这个”输出门“。然后得到输入数据输入数据是把t-1时刻传入的h{t-1}与t时刻的输入Xt进行拼接然后通过权值矩阵WC转换后加上偏置bC再有激活函数tanh映射到[-1,1]空间得到输入数据Ct’。然后将输入门it与Ct’进行点乘就能得到输入门的输出了。
得到Ct
然后将”忘记门“的输出值与”输入门“的输出值加起来就得到了t时刻的Ct值。 Ct中保留了t-1传入的部分信息和t时刻传入的经过筛选后的信息。得到了Ct那咱们就只剩下计算t时刻的ht了计算ht由”输出门“来完成。
输出门 可以看到上图中的”输出门“的结构和计算公式把t-1时刻传入的h{t-1}与t时刻的输入Xt进行拼接然后通过权值矩阵Wo转换后加上偏置bo再由sigmoid函数映射到[0,1]空间中形成了这个”输出门“。 然后将上一步计算得到的Ct经过tanh函数缩放映射到[-1,1]空间中再与”输出门“点乘就能得到输出门的输出值ht了。
这样咱们就计算出来t时刻的所有输出值ht和Ct然后ht和Ct又可以传入到下一时刻来进行循环操作了。 计算t时刻的输出yt 1.2 LSTM 为什么能解决RNN的梯度消失问题
好了虽然上面说了那么多可能小伙伴们也知道了LSTM的结构但是我还是不明白啊为什么这样的LSTM结构就能够缓解RNN中的梯度消失呢(注意这里是缓解并不是完美解决LSTM层数过深时也还是有可能发生梯度消失问题) 先来回顾一下RNN导致梯度消失的原因正是因为tanh和sigmoid函数的导数均小于1一系列小于1的数连乘连乘的数一多连乘的结果就有很大概率为0那么参数便不能进行更新了。
咱们类比到LSTM中 为什么会是上述偏导连乘其实可以通过数学公式推导但是推导过程比较复杂因为LSTM的参数太多了。 代入Ct中 上面的公式看上去吓人但仔细一看后面的部分跟C{t-1}一点关系都没有Ct对C{t-1}求偏导的话后半边直接为0. Ct对C{t-1}求偏导结果为 上面的值地范围在0~1之间但是在实际参数更新的过程中可以通过控制bf较大使得该值接近于1。这样即使在多次连乘的情况下梯度也不会消失。 但是咱们回过头来再看看RNN 虽然RNN也可以通过调整Ws来使得连乘接近于1但是RNN是通过乘以Ws来调节大家知道乘法数值变化较快比较敏感参数很难调一不小心就超过了上界发生梯度爆炸达不到下界不发生梯度消失。而LSTM是通过加上bf来调节来降低梯度消失的风险调节起来更容易相对于RNN较好。所以之前也只是说了LSTM能相对于RNN缓解梯度消失的问题并不能完全消除。
1.3 LSTM问题
OK看到这相信你对于LSTM的结构也已经有了清楚的认识。你有没有发现LSTM需要训练的参数好像有点多Wf,Wi,Wo,Wc,bf,bi,bo,bc,V9个参数。这是LSTM的优点也是缺点优点是有更多的参数对于模型进行调节结果更加精确缺点是参数太多了。
2. GRUGate Recurrent Unit
GRU是一种也能达到LSTM相当效果但是参数更少相对更容易训练的算法能够很大程度上提升训练效率接下来咱们就来看看GRU的结构吧
2.1 GRU结构 上图是GRU的整体结构图发现跟普通的RNN没有区别也就只有一条状态传递的通道ht。那么接下来看看GRU中隐藏层的内部结构到底是如何传递信息地。 上图就是GRU隐藏层的内部结构先不要慌虽然看上去很复杂但是原理跟LSTM差不多我来一步一步讲解。 LSTM有”忘记门“”输入门“”输出门“三个门来控制信息传递GRU只有两个一个是上图中的reset 重置门一个是update 更新门。
reset 重置门 rt就是”重置门“计算公式还是跟LSTM一样只是处理数据的方式不同得到”重置门“rt后将rt与上一时刻传入的h{t-1}进行点乘得到重置之后的数据。 然后将得到的h{t-1}‘与Xt进行拼接。 这里的h’包含了输入信息Xt和经过选择后的上一时刻的重要信息h{t-1}’这样就达到了记忆当前状态信息的目的。update 更新门 Zt就是”更新门“那么咱们来看看”更新门“是如何同时进行遗忘和记忆地。 先来看具体公式 可以看到这里的遗忘 z 和1-z 是联动的。也就是说对于传递进来的维度信息我们会进行选择性遗忘则遗忘了多少权重 z 我们就会使用包含当前输入的 h’ 中所对应的权重进行弥补 (1-z) 。以保持一种”恒定“状态。
GRU只有两个门相应地参数也就比LSTM要少效率要高但是结果并没有多大的区别。 原文链接https://blog.csdn.net/Tink1995/article/details/104881633