简单神经网络批处理时梯度计算(标量对矩阵的求导)

简单神经网络批处理时梯度计算(标量对矩阵的求导,微分法)

学校的深度学习课程上老师介绍了损失函数在一个training data时对网络参数的求导,比较简单易求。然后介绍了批处理(同时有N个training data时)的求导并给出了结果,但是没给推导过程,当时我自己推了一下发现有些难点(涉及到矩阵微分的知识),值得整理记录一下。

问题介绍: 在如图的一个简单的二层神经网络中,网络的参数为 W 1 W^1 W1 w 2 ⃗ \vec{w^2} w2 。当有N个输入数据时,X的维数为(D+1 x N)。那么各符号维数为: X D + 1 × N X_{D+1 \times N} XD+1×N W K + 1 × D + 1 1 W^1_{K+1 \times D+1} WK+1×D+11 H K + 1 × N H_{K+1 \times N} HK+1×N, w 2 ⃗ K + 1 × 1 \vec{w^2}_{K+1 \times 1} w2 K+1×1以及 y ⃗ 1 × N \vec{y}_{1\times N} y 1×N, 其中 y ⃗ = w 2 ⃗ T σ ( W 1 X ) \vec{y}=\vec{w^2}^{T}\sigma (W^1X) y =w2 Tσ(W1X), σ \sigma σ为sigmoid函数。如果使用mean squared loss, 那么损失函数为 J = 1 N ∣ ∣ y ⃗ − t ⃗ ∣ ∣ 2 J=\frac{1}{N}||\vec{y}-\vec{t}||^2 J=N1y t 2 (t是groundtruth), 问题:请求出J对 W 1 W^1 W1的导数。
简单神经网络批处理时梯度计算(标量对矩阵的求导)_第1张图片
先贴答案:简单神经网络批处理时梯度计算(标量对矩阵的求导)_第2张图片

需要的prerequisite knowledge: 1.简单的标量对向量,标量对矩阵求导,可参考https://en.wikipedia.org/wiki/Matrix_calculus中scalar-by-vector和scalar-by-matrix部分。 2. 标量对矩阵求导的微分法,可参考https://www.cnblogs.com/pinard/p/10791506.html。

解: 先把J写成向量相乘的形式,然后化简标量对矩阵的求导,得到 ∂ J ∂ A \frac{\partial J}{\partial A} AJ,不能继续求导了,需要用微分法求出 ∂ J ∂ A \frac{\partial J}{\partial A} AJ。最后得出结果。最终结果公式中的X,H(网络中的节点),y,t 的值均已知,于是可以直接用此公式进行梯度下降法进行参数的更新啦O(∩_∩)O~
简单神经网络批处理时梯度计算(标量对矩阵的求导)_第3张图片
总结: 在批处理中,输入X以及网络中的节点均由向量升为矩阵,求导比一个training example时更为复杂。为此需要用新的方法:矩阵求导的微分法。

你可能感兴趣的:(神经网络,深度学习,机器学习)