导数与梯度
导数:一个一元函数函数在某一点的导数描述了这个函数在这一点附近的变化率。
梯度:多元函数的导数就是梯度。
- 一阶导数,即梯度(gradient):
- 二阶导数,Hessian矩阵:
H(x)=∇2f(X)=⎡⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢∂2f(X)∂x12∂2f(X)∂x2∂x1⋮∂2f(X)∂xn∂x1∂2f(X)∂x1∂x2∂2f(X)∂x22⋮∂2f(X)∂xn∂x2⋯⋯⋱⋯∂2f(X)∂x1∂xn∂2f(X)∂x2∂xn⋮∂2f(X)∂xn2⎤⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥
一阶导数和二阶导数经常记为
泰勒展开:一元函数的泰勒展开:
多元函数的泰勒展开(仅前三项):
如果
如果是多元函数,
泰勒展开确实是很多数学问题的基础核心,这里再展开一点:
问题:为什么优化时选择梯度方向,梯度方向为什么是变化最快的方向?
由泰勒级数展开式的前两项
矩阵求导总结
(1)对标量求导
- 标量关于标量x的求导:
∂y∂x - 向量关于标量x的求导:
向量y=⎡⎣⎢⎢⎢⎢⎢y1y2⋮yn⎤⎦⎥⎥⎥⎥⎥ 关于标量x 的求导就是 y 的每一个元素分别对x求导,可以表示为
∂y∂x=⎡⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢∂y1∂x∂y2∂x⋮∂yn∂x⎤⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥ - 矩阵·关于标量x的求导:
矩阵对标量的求导类似于向量关于标量的求导,也就是矩阵的每个元素分别对标量x求导
∂Y∂x=⎡⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢∂y11∂x∂y21∂x⋮∂yn1∂x∂y12∂x∂y22∂x⋮∂yn2∂x⋯⋯⋱⋯∂y1n∂x∂y2n∂x⋮∂ynn∂x⎤⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥
(2)对向量求导
- 标量关于向量x的导数
标量y 关于向量x=⎡⎣⎢⎢⎢⎢x1x2⋮xn⎤⎦⎥⎥⎥⎥ 的求导可以表示为
=[∂y∂x1 ∂y∂x2 ⋯ ∂y∂xn] - 向量关于向量 x 的导数
向量函数(即函数组成的向量)y=⎡⎣⎢⎢⎢⎢⎢y1y2⋮yn⎤⎦⎥⎥⎥⎥⎥ 关于x=⎡⎣⎢⎢⎢⎢x1x2⋮xn⎤⎦⎥⎥⎥⎥ 的导数
∂y∂x=⎡⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢∂y1∂x1∂y2∂x1⋮∂yn∂x1∂y1∂x2∂y2∂x2⋮∂yn∂x2⋯⋯⋱⋯∂y1∂xn∂y2∂xn⋮∂yn∂xn⎤⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥
此时获得的矩阵
矩阵关于向量的导数
矩阵Y=⎡⎣⎢⎢⎢⎢⎢y11y21⋮yn1y12y22⋮yn2⋯⋯⋱⋯y1ny2n⋮ynn⎤⎦⎥⎥⎥⎥⎥ 关于x=⎡⎣⎢⎢⎢⎢x1x2⋮xn⎤⎦⎥⎥⎥⎥ 的导数是推导中最复杂的一种,表示为
∂Y∂x=⎡⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢∂y11∂x1∂y21∂x1⋮∂yn1∂x1∂y1n∂x2∂y22∂x2⋮∂yn2∂x2⋯⋯⋱⋯∂y1n∂xn∂y2n∂xn⋮∂ynn∂xn⎤⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥
(3)对矩阵求导一般只考虑标量关于矩阵的导数,即标量y 对矩阵 X 的导数,此时的导数是梯度矩阵,可以表示为下式:
∂y∂X=⎡⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢∂y∂x11∂y∂x12⋮∂y∂x1n∂y∂x21∂y∂x22⋮∂y∂x2n⋯⋯⋱⋯∂y∂xn1∂y∂xn2⋮∂y∂xnn⎤⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥
下图是机器学习中常见的矩阵求导形式,可供参考
下一篇是关于Hessian矩阵和凸函数的基本概念,待续。
[1] http://blog.csdn.net/u010976453/article/details/54342895
[2] http://blog.csdn.net/u010976453/article/details/78482502
[3] http://blog.csdn.net/u010976453/article/details/54381248
[4] Jacobian矩阵和Hessian矩阵 http://jacoxu.com/jacobian%e7%9f%a9%e9%98%b5%e5%92%8chessian%e7%9f%a9%e9%98%b5/
[5] https://en.wikipedia.org/wiki/Norm_(mathematics)
[6] https://en.wikipedia.org/wiki/Matrix_norm
[7] 机器学习中的线性代数之矩阵求导 http://blog.csdn.net/u010976453/article/details/54381248
[8] 牛顿法与Hessian矩阵http://blog.csdn.net/linolzhang/article/details/60151623