机器学习中的参数优化需要做矩阵梯度或者求导,比如在《动手学习深度学习》中的《自动求梯度》
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