LSTM和GRU的感性理解
零、tanh函数与sigmoid函数
1.tanh函数
激活函数 Tanh 用于帮助调节流经网络的值。 tanh 函数将数值始终限制在 -1 和 1 之间。其作用是让数据变化别太大。
2.sigmoid函数
Sigmoid 激活函数与 tanh 函数类似,不同之处在于 sigmoid 是把值压缩到 0~1 之间而不是 -1~1 之间。这样的设置有助于更新或忘记信息,因为任何数乘以 0 都得 0,这部分信息就会剔除掉。同样的,任何数乘以 1 都得到它本身,这部分信息就会完美地保存下来。这样网络就能了解哪些数据是需要遗忘,哪些数据是需要保存。
一、RNN简单介绍
RNN 的工作原理如下;第一个词被转换成了机器可读的向量,然后 RNN 逐个处理向量序列。
处理时,RNN 将先前隐藏状态传递给序列的下一步。 而隐藏状态充当了神经网络记忆,它包含相关网络之前所见过的数据的信息。
让我们看看 RNN 的一个细胞,了解一下它如何计算隐藏状态。 首先,将输入和先前隐藏状态组合成向量, 该向量包含当前输入和先前输入的信息。 向量经过激活函数 tanh之后,输出的是新的隐藏状态或网络记忆。
RNN。它内部的操作很少,但在适当的情形下(如短序列)运作的很好。 RNN 使用的计算资源比它的演化变体 LSTM 和 GRU 要少得多。
二、RNN的缺点——短时记忆
RNN 会受到短时记忆的影响。如果一条序列足够长,那它们将很难将信息从较早的时间步传送到后面的时间步。 因此,如果你正在尝试处理一段文本进行预测,RNN 可能从一开始就会遗漏重要信息。
在反向传播期间,RNN 会面临梯度消失的问题。 梯度是用于更新神经网络的权重值,消失的梯度问题是当梯度随着时间的推移传播时梯度下降,如果梯度值变得非常小,就不会继续学习。
因此,在递归神经网络中,获得小梯度更新的层会停止学习—— 那些通常是较早的层。 由于这些层不学习,RNN 可以忘记它在较长序列中看到的内容,因此具有短时记忆。
三、LSTM
LSTM可以解决RNN的短时记忆问题。
1.整体结构
LSTM中有很多成为“门”的内部机制,可以调节信息流。这些“门”可以知道整个输入序列中哪些数据、信息是重要的需要保留,哪些是不用重要的可以删除。随后,它可以沿着长链序列传递相关信息来进行预测。简单来说就是关注有用信息、去掉无用信息。
LSTM 的核心概念在于细胞状态以及“门”结构。细胞状态相当于信息传输的路径,让信息能在序列连中传递下去。你可以将其看作网络的“记忆”。理论上讲,细胞状态能够将序列处理过程中的相关信息一直传递下去。
因此,即使是较早时间步长的信息也能携带到较后时间步长的细胞中来,这克服了短时记忆的影响。信息的添加和移除我们通过“门”结构来实现,“门”结构在训练过程中会去学习该保存或遗忘哪些信息。
2.forget gate(遗忘门)
遗忘门的功能是决定应该丢弃或者保留哪些信息,来自前一个隐藏状态的信息 h t − 1 h_{t-1} ht−1和当前输入的信息 x t x_{t} xt同时传送入sigmoid函数中,得到的输出 f t f_{t} ft介于0和1之间,越接近0越意味着丢弃,越接近1越意味着保留。
比如当我们要预测下一个词是什么时,细胞状态可能包含当前主语的性别,因此正确的代词可以被选择出来。再比如当我们看到新的主语,我们希望忘记旧的主语。
公式: f t = σ ( W f ⋅ [ h t − 1 , x t + b f ] ) f_{t} = \sigma(W_{f}\cdot[h_{t-1},x_{t} + b_{f}]) ft=σ(Wf⋅[ht−1,xt+bf])
得出来的 f t f_{t} ft与上一步的细胞状态 c t − 1 c_{t-1} ct−1做point-wise乘法,得出来上一步细胞状态 c t − 1 c_{t-1} ct−1要删除掉什么信息。
3.input gate(输入门)
输入门用于把新的信息加入到细胞状态中。
首先要将前一层隐藏状态的信息 h t − 1 h_{t-1} ht−1和当前输入的信息 x t x_{t} xt传递到 tanh 函数中去,产生更新值的候选项 c ˇ t \check{c}_{t} cˇt,其输出在[-1,1]上,说明细胞状态在某些维度上需要加强,在某些维度上需要减弱。
其次将前一层隐藏状态的信息 h t − 1 h_{t-1} h