目录
注:
前面的部分是反向传播公式的详细推导,如果想直接看反向传播的公式,可以直接跳到第3部分结论。
推导中先考虑一个样本(输入和激活都是向量而不是矩阵)
1、正向传播:
g是激活函数,例如tanh
输出的激活函数是softmax,损失函数是交叉熵
损失函数对所有时间步求和
以上五个式子就是正向传播中计算输出和损失用到的所有公式,通过对他们链式法则求导,我们也可以推出反向传播的所有公式
2、反向传播:
当输出的激活函数是softmax,损失函数是交叉熵时,损失函数对线性输出
的偏导数可以简单的写成:
(1)
式(1)左边实际上表示一个向量,其第i个元素对应
下面证明公式(1)
由于
可见损失函数是向量
的函数,
对
的“导数”实际上是一个向量(一阶张量),为了方便表述,我们只计算这个向量的第j个元素,即对第j个元素
求偏导得到
(2)
由于
对
的导数是向量对向量的导数,实际上是一个矩阵(二阶张量),为了方便表述,我们只写出
对
求偏导的结果。
式中的是Kronecker delta符号,在i=j时为1,否则为0. 我们用
和
替换上式中的对应项,得到
(3)
现在考虑式(1)中对
的导数,也只考虑第i项即对
的偏导数。由于我们在式(2)中已经得到了
对
的偏导数,而在(3)中得到了
对
的偏导数,根据偏导数的链式法则
即证明了式(1). 上式的推到中用到了的性质,以及
这一特点(
作为表示分类的one-hot 0-1向量,只有一个元素为1,所以这里的求和为1)。
下面我们继续推导反向传播中的其他公式。
根据公式,我们可以由
得到参数
和
,以及激活
的导数
先写出结论如(4)-(12):
(4)
(5)
(6)
注意(6)不能直接像(4)(5)那样对t求和推广到L的导数,因为拆看来看,
,由于前向传播时
会影响到时间步t之后所有时间步的计算,求和中任何τ>=t的项都不为0,其中τ>t项对导数的贡献由
传递给
,从而可以从后往前反向传播求出
的导数:
(7)
(7)中表示元素相乘,
是激活函数的导数,
,是参数矩阵
中作用于a上的部分。如果是tanh,利用
可以写为常见形式
(8)
通过,可以求出与
相关的参数的导数:
(9)
(10)
对于tanh激活函数,(9)(10)可以写为:
(11)
(12)
下面证明(4)-(12)
(4)(5)(6):
由,用下标表示:
,故
即证明了(4)(5)(6)三个式子
(7)~(12):
由
用下标表示为:
首先我们知道,对最后一个时间步,由于
只对最后一个时间步的计算有贡献,没有下一个时间步的误差反向传播过来,
,可以通过(6)准确的求出来,
现在,假设我们已经知道了,下面推导出
的递推公式:
即得到了递推关系,并证明了(7)
即式(9)
即式(10)
3、总结
对于正向传播由以下式子给出的rnn:
对于每个时间步t,反向传播的过程如下:
①接收来自上一个时间步<t+1>激活的导数,(对于最后一个时间步<Tx>,上一步的导数设为0即可)
②计算参数的导数以及当前时间步激活的导数
(4)
(5)
(7)
(9)
(10)
特别的,如果中的激活函数g是tanh,后三个公式可以表示为:
(8)
(11)
(12)
③把导数传递到下一个时间步<t-1>
向量化:实际计算中,如果x、a等都是矩阵(每一列表示一个样本),只需要在第②步的5个公式的基础上处理(应该不会有太大的改动)