目录
1、正向传播
LSTM的正向传播公式:
由于传播过程比较复杂,我们画一个计算草图来反映时间步t的正向传播中,各个量的关系:
计算图中红色部分不属于时间步t,而是属于时间步t+1,把这几个红色的计算加入以后,可以更清晰的看到,的值会传播到两个位置(即在时间步t的正向传播中,传递到
,在时间步t+1的正向传播中,传递到
;而
的值会传播到5个位置(即时间步t的正向传播中,传递到
,在时间步t+1的正向传播中,传递到
、
、
和
)。这对于理解反向传播中
、
的导数从何而来非常重要,在反向传播中,我们会看到,
的误差从相应的2个位置反向传播得到,
的误差从相应的5个位置反向传播得到。
2、反向传播
把正向传播的计算图反过来就是时间步t的反向传播的计算图:
红色的部分是时间步t+1的量对于 、
导数的贡献。我们根据这张图,从上往下推导。
对于输出激活函数是softmax,损失函数是交叉熵的情况,常用的公式是:
(1)
我在RNN反向传播的推导中证明了这个公式,这里就不证明了。
根据
我们可以进而得到:
(2)
(3)
(4)
以上公式和RNN的情况是一模一样的,也不多解释了。
正如反向传播的计算图所示的那样,的导数除了包含式(4)中的那一项,还包括来自
、
、
和
的四项,即:
(5.a)
类似的,的导数也可以表示为两项,一项来自
,另一项来自
:
(6.a)
公式(5)(6)实际上给出了、
导数的递推关系式。
对于最后一个时间步,t=Tx,没有来自下一个时间步的导数传入,公式(5)(6)变为:
(5): (7)
(6): (8.a)
根据的下标表示:
并把公式(8.a)也用下标表示,可得:
(8.b)
上式的推导用到了
式(7)和(8.b)给出了最后一个时间步和
的导数,我们下面只需要假设已知
和
的导数,并求出
和
导数的表达式(递推关系式),就能够利用递推关系一步步反向传播求出所有时间步下
和
的导数。
先根据和
的导数,得到
、
、
和
的导数:
根据这两个正向传播的式子:
写成下标表示:
应用链式法则,得到:
(9)
(10)
(11)
(12)
于是如公式(5.a)所示,可以表示为如下5项:
(5.b)
根据正向传播的公式:
写为下标形式:
式中的代表三个门中的任意一个
于是,我们可以给出偏导数:
以上的推导用到了sigmoid函数的导数
带入(5.b),可以得到
(5.c)
(5.c)中W下标的a表示只考虑W中与a有关的部分,即
再考虑(6.a):
(6.a)
(6.a)右边第一项等于:
这里的推导和(8.b)是一模一样的,就不再证明了。
考虑(6.a)右边第二项
利用正向传播的公式:
第二项
故(6.a)可以写为:
(6.b)
至此,我们给出了、
的导数的递推关系式(5.c)、(6.b)。接下来的部分就比较简单了,只需要根据
、
的导数计算
等参数的梯度。以下式子和公式(9)(10)(11)(12)是一样的,只是把时间步t+1改为了t:
结合正向传播的公式:
(公式中下标不指示那个门的,代表三个门中的任意一个)
得到:
(13)
(14)
(15)
(16)
(17)
(18)
(19)
(20)
以上就是LSTM反向传播所需要的所有公式。
3、总结
LSTM的正向传播由以下公式给出:
反向传播步骤:
①在每个时间步t,接受来自上一个时间步t+1的导数、
,(最后一个时间步下的值可以准确得到)
实际的程序中可能还要传入时间步t+1的cache,因为时间步t的cache中只存了时间步t的量
②
——计算参数Wy、by的导数
(2)
(3)
(虽然是对所有时间步求和,但是时间步t的时候可以计算一项,最后再加到一起就行)
——计算
(4)
(5.c)
——计算
(6.b)
—— 计算其他参数的导数
(13)
(14)
(15)
(16)
(17)
(18)
(19)
(20)
(虽然是对所有时间步求和,但是时间步t的时候可以计算一项,最后再加到一起就行)
③把、
传递给下一个时间步t-1