深度学习/机器学习入门基础数学知识整理(二):梯度与导数,矩阵求导,泰勒展开等

导数与梯度
导数:一个一元函数函数在某一点的导数描述了这个函数在这一点附近的变化率。 
f′(a)=limh→0f(a+h)−f(a)h
f′(a)=limh→0f(a+h)−f(a)h
梯度:多元函数的导数就是梯度。

一阶导数,即梯度(gradient):
∇f(X)=∂f(X)∂X=⎡⎣⎢⎢⎢⎢⎢⎢⎢⎢∂f(X)∂x1∂f(X)∂x2⋮∂f(X)∂xn⎤⎦⎥⎥⎥⎥⎥⎥⎥⎥
∇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⎤⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥
H(x)=∇2f(X)=[∂2f(X)∂x12∂2f(X)∂x1∂x2⋯∂2f(X)∂x1∂xn∂2f(X)∂x2∂x1∂2f(X)∂x22⋯∂2f(X)∂x2∂xn⋮⋮⋱⋮∂2f(X)∂xn∂x1∂2f(X)∂xn∂x2⋯∂2f(X)∂xn2]
一阶导数和二阶导数经常记为f′(x)和f′′(x)f′(x)和f″(x)
泰勒展开:一元函数的泰勒展开: 
f(xk+δ)≈f(xk)+f′(xk)δ+12f′′(xk)δ2+⋯+1n!f(n)(xk)δn
f(xk+δ)≈f(xk)+f′(xk)δ+12f″(xk)δ2+⋯+1n!f(n)(xk)δn

多元函数的泰勒展开(仅前三项): 
f(xk+δ)≈f(xk)+∇Tf(xk)δ+12δTf′′(xk)δ
f(xk+δ)≈f(xk)+∇Tf(xk)δ+12δTf″(xk)δ
如果∇Tf(xk)=0​∇Tf(xk)=0​,则xkxk称为“平稳点”,如果是一元函数,那么这个点肯定是一个局部极值点,最大或者最小局部极值点,如果f是凸函数则是全局最小值,凸函数是在下一节会简单介绍一下。

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

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

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

矩阵求导总结
(1)对标量求导

标量关于标量x的求导: 
∂y∂x
∂y∂x
向量关于标量x的求导: 
向量y=⎡⎣⎢⎢⎢⎢y1y2⋮yn⎤⎦⎥⎥⎥⎥y=[y1y2⋮yn]关于标量x 的求导就是 y 的每一个元素分别对x求导,可以表示为 
∂y∂x=⎡⎣⎢⎢⎢⎢⎢⎢⎢∂y1∂x∂y2∂x⋮∂yn∂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⎤⎦⎥⎥⎥⎥⎥⎥⎥⎥
∂Y∂x=[∂y11∂x∂y12∂x⋯∂y1n∂x∂y21∂x∂y22∂x⋯∂y2n∂x⋮⋮⋱⋮∂yn1∂x∂yn2∂x⋯∂ynn∂x]
(2)对向量求导

标量关于向量x的导数 
标量y 关于向量 x=⎡⎣⎢⎢⎢⎢x1x2⋮xn⎤⎦⎥⎥⎥⎥x=[x1x2⋮xn] 的求导可以表示为 
=[∂y∂x1 ∂y∂x2 ⋯ ∂y∂xn]
=[∂y∂x1 ∂y∂x2 ⋯ ∂y∂xn]
向量关于向量 x 的导数 
向量函数(即函数组成的向量)y=⎡⎣⎢⎢⎢⎢y1y2⋮yn⎤⎦⎥⎥⎥⎥y=[y1y2⋮yn]关于x=⎡⎣⎢⎢⎢⎢x1x2⋮xn⎤⎦⎥⎥⎥⎥x=[x1x2⋮xn]的导数 
∂y∂x=⎡⎣⎢⎢⎢⎢⎢⎢⎢⎢∂y1∂x1∂y2∂x1⋮∂yn∂x1∂y1∂x2∂y2∂x2⋮∂yn∂x2⋯⋯⋱⋯∂y1∂xn∂y2∂xn⋮∂yn∂xn⎤⎦⎥⎥⎥⎥⎥⎥⎥⎥
∂y∂x=[∂y1∂x1∂y1∂x2⋯∂y1∂xn∂y2∂x1∂y2∂x2⋯∂y2∂xn⋮⋮⋱⋮∂yn∂x1∂yn∂x2⋯∂yn∂xn]
此时获得的矩阵∂y∂x∂y∂x叫做Jacobian 矩阵。

矩阵关于向量的导数 
矩阵Y=⎡⎣⎢⎢⎢⎢⎢y11y21⋮yn1y12y22⋮yn2⋯⋯⋱⋯y1ny2n⋮ynn⎤⎦⎥⎥⎥⎥⎥Y=[y11y12⋯y1ny21y22⋯y2n⋮⋮⋱⋮yn1yn2⋯ynn]关于 x=⎡⎣⎢⎢⎢⎢x1x2⋮xn⎤⎦⎥⎥⎥⎥x=[x1x2⋮xn]的导数是推导中最复杂的一种,表示为 
∂Y∂x=⎡⎣⎢⎢⎢⎢⎢⎢⎢⎢∂y11∂x1∂y21∂x1⋮∂yn1∂x1∂y1n∂x2∂y22∂x2⋮∂yn2∂x2⋯⋯⋱⋯∂y1n∂xn∂y2n∂xn⋮∂ynn∂xn⎤⎦⎥⎥⎥⎥⎥⎥⎥⎥
∂Y∂x=[∂y11∂x1∂y1n∂x2⋯∂y1n∂xn∂y21∂x1∂y22∂x2⋯∂y2n∂xn⋮⋮⋱⋮∂yn1∂x1∂yn2∂x2⋯∂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⎤⎦⎥⎥⎥⎥⎥⎥⎥⎥
∂y∂X=[∂y∂x11∂y∂x21⋯∂y∂xn1∂y∂x12∂y∂x22⋯∂y∂xn2⋮⋮⋱⋮∂y∂x1n∂y∂x2n⋯∂y∂xnn]
下图是机器学习中常见的矩阵求导形式,可供参考

下一篇是关于Hessian矩阵和凸函数的基本概念,待续。

附Java/C/C++/机器学习/算法与数据结构/前端/安卓/Python/程序员必读书籍书单大全:

1.Web前端书单从HTML到JS到AJAX到HTTP从框架到全栈过来人帮你走更少弯路(珍藏版)

2.程序员史诗级必读书单吐血整理四个维度系列80+本书(珍藏版)

3.学习数据库从入门到进阶书籍pdf版吐血整理推荐(珍藏版)

4.Java学习之路吐血整理技术书从入门到进阶最全50+本(珍藏版)

5.算法与数据结构+一点点ACM从入门到进阶吐血整理推荐书单(珍藏版)

6.python从入门到进阶推荐书籍最全整理pdf分享附网盘链接已拿BT豆瓣offer

7.安卓入门到进阶推荐书籍整理pdf附网盘链接已拿阿里豆瓣offer(珍藏)

8.机器学习和python学习之路吐血整理技术书从入门到进阶(珍藏版)

9.C语言推荐书籍从入门到进阶带你走上大牛之路(珍藏版)

10.慕课网100+份前后端/全栈教程资源近800多G超值视频资源

你可能感兴趣的:(深度学习/机器学习入门基础数学知识整理(二):梯度与导数,矩阵求导,泰勒展开等)