神经网络向量化求反向传播梯度
实现神经网络功能时,为了计算效率考虑,可以通过向量化的方式实现。向量化实现反向传播的话,求梯度时就要涉及到矩阵的求导,学校里根本没有学习过这个概念,所以在学习cs31n时,对反向传播求梯度时的代码很是疑惑,不理解矩阵为什么需要进行转置。查看matrix cookbook这本书也没有解决我的疑惑。后来发现了闲话矩阵求导这里对矩阵求导的解释说明,通过维度分析来理解矩阵求导的过程,大概理解了反向传播求梯度的代码实现,记录一下自己的理解。
1. 前向传播
神经网络前向传播的公式:
计算中使用向量化表示数据,每一个变量的维度信息:
变量说明:
X 所有数据构成的矩阵,N为样本总数,D为每一个样本的维度;
W 所有权重工程的参数矩阵,D为每一个样本的维度,M为输出节点的总数;
b 为偏置矩阵
Y 为输出
2. 反向传播
利用反向传播算法更新参数时,涉及到的参数梯度的求解,需要求解的变量有dW, dX, db。
假设损失函数为L, 是一个标量。
2.1 dX的分析
根据导数的链式法则,dX的梯度可以表示成下面的形式:
维度分析:
dX的维度要和X保持一致
的维度要和Y保持一致,并且标量对矩阵求偏导,矩阵的维度不变
应该和W有关,但是至于维度是多少需要根据矩阵乘法进行分析:
(1)dX的维度为N*D, 的维度为N*M,根据这两个变量的维度,以及上面dX的公式,
可以分析出的维度;
( 2)dX公式用维度信息可以表示成这样:
根据矩阵相乘的分析,我们可以得到 的维度应该是 M*D ,由于是和W相关的,W的维度是D*M,
所以我们可以得出结论 的结果是权重矩阵W的转置。所以
2.2 dW的分析
了解了2.1中dX的分析过程,dW的结果就不难理解了。
dW的公式表示:
应该和X有关,但是至于维度是多少需要根据矩阵乘法进行分析:
dW公式用维度信息可以表示成这样:
根据矩阵相乘的分析,我们可以得到 的维度应该是 D*N ,由于是和X相关的,X的维度是N*D,
所以我们可以得出结论 的结果是样本矩阵X的转置。所以
2.3 db的分析
db的公式表示:
根据矩阵乘法分析:
所以:
参考:
1 闲话矩阵求导