手动计算矩阵梯度或者矩阵导数

机器学习中的参数优化需要做矩阵梯度或者求导,比如在《动手学习深度学习》中的《自动求梯度》

http://zh.gluon.ai/chapter_prerequisite/autograd.html

的例子,对函数 y=2x⊤x=2x⊤x ,求关于列向量 x 的梯度。下面用手动推到出矩阵的梯度。

假设x是

[[0.]
 [1.]
 [2.]
 [3.]]
 

那么对应的y是28,那么这个点的梯度或者导数是怎么计算的?

x的4个元素,让某一个元素加1,保持其他元素不变,计算出对应的y的变化。

比如x的第一行加1,x变成

[[1.]
 [1.]
 [2.]
 [3.]]

此时的y变成了30,变化是2=30-28,那么2/1=2。

类似的,x的第二行加1,x变成

[[0.]
 [2.]
 [2.]
 [3.]]

此时的y变成34,变化是6=34-28,那么6/1=6。

对x的第3行和第4行进行类似的运算,最终得到在这个点的矩阵梯度是

扫描二维码关注公众号,回复: 5303354 查看本文章
[[ 2.]
 [ 6.]
 [ 10.]
 [ 14.]]

这样计算出来,可以看出矩阵梯度就是在多维空间中,函数y对于自变量x的变化率。这样就好理解了。注意每个点或者样本的矩阵梯度都不同的。可以对每一个样本更新一次参数,但是这样计算量很大。那么就出现小批量随机梯度计算方法。

具体在mini-batch小批量随机梯度计算中,不是一次计算一个点的梯度,而是一次计算10个点的梯度,取这10个点梯度的平均值来更新参数,更详细的解释可以看《详解神经网络中矩阵实现的梯度计算》https://blog.csdn.net/ppp8300885/article/details/78492166

猜你喜欢

转载自blog.csdn.net/boyStray/article/details/87901676
今日推荐