机器学习:长短期记忆(LSTM)中的反向传播
由于LSTM是循环神经网络(RNN)的一个版本,让我先简单谈谈RNN。
因此循环神经网络(RNN)用于没有固定输入结构的问题。例如,如果我们想将单词从一种语言翻译成另一种语言,我们的输入可能是任何单词,因此我们不能使用卷积神经网络(CNN),NN,因为我们不知道该单词包含多少个字母。
循环神经网络(RNN)允许该单词的每个字母用于获得隐藏值,该隐藏值再次用于与下一个字母一起馈送下一步骤。所有隐藏值也可能导致损失,或者仅使用最后一个值。这取决于某些问题。
循环神经网络(RNN)的直观图表是:
RNN图
其中数据由X表示,隐藏值由H表示,损失由L表示。注意,每个输入包含一个Xt和先前的隐藏值Ht,然后输入经历相同的过程以获得下一个隐藏值H(t + 1)。更确切地说,
vanilla RNN的核心
RNN训练的难度是梯度消失/梯度爆炸。LSTM是一种减少此问题的方法。新图表是:
LSTM图
每一步都有一个新的输入和输出,称为状态,用C表示。
每个步骤的更详细的图表是:
One step of LSTM
更确切地说,
LSTM的核心
G,F,O代表gate, information, forget, output,,∗代表着piece-wise element 的乘积。我们只是想知道如何求导。所以我画了反向传播流的路径:
Back propagation one step
为了轻松计算导数,我们需要绘制更详细的图表:
A full back propagation one step
我们在其中添加了一些中间节点Ag,Ai,Af,Ao,并且forward process与另外一个步骤不同:
Full kernel of LSTM
通过反向传播图用一些数学方法我们得到了所有导数的精确公式:
其中Δt是总损失中部分的导数,它
仅由Ht在一步而不是通过任何其他中间变量直接贡献。
例如,如果我们的最终损失是每一步的损失总和:
then
这个过程似乎有点长,但基本上只是遵循图的所有路径。通过将小矩阵放在一起,我们可以拥有更美观的版本。但到目前为止这已经足够了。
通过在每一步重复使用权重,RNN与NN不同,并且损失
不仅仅取决于最后一步/层的输出,而且可能取决于
使得权重的导数需要求和的所有步骤。
为了说明,我绘制了另一个包含权重的图表:
LSTM with weights
其中W是所有权重。通过上面的图表,我们看到最终导数dW_final是由所有隐藏值Ht的所有路径贡献的,实际上我们已经在上面计算过的每个步骤中得到了导数dW。