导数与梯度

导数:一个一元函数函数在某一点的导数描述了这个函数在这一点附近的变化率。

f′(a)=limh→0f(a+h)−f(a)h


梯度:多元函数的导数就是梯度。

* 一阶导数,即梯度(gradient):

∇f(X)=∂f(X)∂X=⎡⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢∂f(X)∂x1∂f(X)∂x2⋮∂f(X)∂xn⎤⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥


* 二阶导数,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⎤⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥
一阶导数和二阶导数经常记为f′(x)和f′′(x)

泰勒展开:一元函数的泰勒展开:

f(xk+δ)≈f(xk)+f′(xk)δ+12f′′(xk)δ2+⋯+1n!f(n)(xk)δn
多元函数的泰勒展开(仅前三项):
f(xk+δ)≈f(xk)+∇Tf(xk)δ+12δTf′′(xk)δ


如果∇Tf(xk)=0​,则xk
称为“平稳点”,如果是一元函数,那么这个点肯定是一个局部极值点,最大或者最小局部极值点,如果f是凸函数则是全局最小值,凸函数是在下一节会简单介绍一下。

如果是多元函数,∇2f(xk)≻0正定,即所有特征值都是正的,那么上式的第三项是正的,则 xk为一严格局部极小值点(反之,∇2f(xk)≺0
负定严格局部极小值点)。更复杂的,如果二阶导数特征值有正有负,那么就是不定的,这个时候xk
为一个鞍点,即有些维度是局部极小值,有些是局部极大值,鞍点是当前神经网络训练面临的核心难点之一,后面在其他博文中有时间我会写到,这里还是回到基础先。

泰勒展开确实是很多数学问题的基础核心,这里再展开一点:
问题:为什么优化时选择梯度方向,梯度方向为什么是变化最快的方向?

由泰勒级数展开式的前两项f(xk+δ)≈f(xk)+∇Tf(xk)δ可知,当δ 是一个模为定值但方向不确定的矢量时,f(xk+δ)−f(xk)≈∇Tf(xk)
δ,此时∇Tf(xk)δ=||∇Tf(xk)||⋅||δ||cos(θ),最大在cos(θ)=1取到,即δ
取梯度方向或者负梯度方向。如果是求极小值,那么就是梯度下降法,δ取负梯度方向,使得f(x)下降最快。

矩阵求导总结

(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∂x
n⎤⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥
此时获得的矩阵∂y∂x叫做Jacobian 矩阵。

*
矩阵关于向量的导数
矩阵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
<http://blog.csdn.net/u010976453/article/details/54342895>
[2] http://blog.csdn.net/u010976453/article/details/78482502
<http://blog.csdn.net/u010976453/article/details/78482502>
[3] http://blog.csdn.net/u010976453/article/details/54381248
<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/
<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)
<https://en.wikipedia.org/wiki/Norm_(mathematics)>
[6] https://en.wikipedia.org/wiki/Matrix_norm
<https://en.wikipedia.org/wiki/Matrix_norm>
[7] 机器学习中的线性代数之矩阵求导 http://blog.csdn.net/u010976453/article/details/54381248
<http://blog.csdn.net/u010976453/article/details/54381248>
[8] 牛顿法与Hessian矩阵http://blog.csdn.net/linolzhang/article/details/60151623
<http://blog.csdn.net/linolzhang/article/details/60151623>