Taylor Formula
泰勒公式,它的一般形式如下:
一般希望将复杂形式的函数用较为简单的方式来表示,另一种表述便是,用量上的复杂来解决质上的困难。
那为什么泰勒展开式是这种形式的?
上面说要用简单的形式表示复杂函数,那么如何选择表达式呢?类比切圆法,是不是可以用局部的线性近似来表示整体,假如有函数
y
=
x
3
y=x^3
y=x3,自变量的变化量为
Δ
x
Δx
Δx,则:
Δ y = ( x + Δ x ) 3 − x 3 = 3 x 2 Δ x + 3 x ( Δ x 2 ) + ( Δ x 3 ) Δy=(x+Δx)^3 - x^3=3x^2Δx+3x(Δx^2)+(Δx^3) Δy=(x+Δx)3−x3=3x2Δx+3x(Δx2)+(Δx3)
假设在x的足够小的邻域内,即 Δ x Δx Δx–>0,按照局部近似的想法,舍去后两项即 Δ x Δx Δx的高阶无穷小项,
Δ y = 3 x 2 Δ x Δy=3x^2Δx Δy=3x2Δx
也就是说在自变量足够小的邻域内, Δ y Δy Δy是可以用 Δ x Δx Δx的线性函数来表示的,从复杂函数表示为线性函数,形式上就简单很多了,整理有:
Δ y = f ( x 0 + Δ x ) − f ( x 0 ) ≈ f ′ ( x 0 ) ∗ Δ x Δy=f(x_0+Δx)-f(x_0)≈f^′(x_0)*Δx Δy=f(x0+Δx)−f(x0)≈f′(x0)∗Δx, Δ x = x − x 0 Δx=x-x_0 Δx=x−x0
即
f
(
x
)
−
f
(
x
0
)
=
f
′
(
x
0
)
(
x
−
x
0
)
f(x)-f(x_0)=f^′(x_0)(x-x_0)
f(x)−f(x0)=f′(x0)(x−x0)
f
(
x
)
=
f
(
x
0
)
+
f
′
(
x
0
)
(
x
−
x
0
)
f(x)=f(x_0)+f^′(x_0)(x-x_0)
f(x)=f(x0)+f′(x0)(x−x0)
上面提到这是舍掉了高阶无穷小的局部近似,假如希望能得到更高的精度,直觉的就是进行多阶的求导。上述公式称为一阶泰勒展开式,那么多阶泰勒展开式如何表示?
将上式再整理, f ( x ) = f ( 0 ) ( x 0 ) ( x − x 0 ) ( 0 ) + f ( 1 ) ( x 0 ) ( x − x 0 ) ( 1 ) f(x)=f^{(0)}(x_0)(x-x_0)^{(0)}+f^{(1)}(x_0)(x-x_0)^{(1)} f(x)=f(0)(x0)(x−x0)(0)+f(1)(x0)(x−x0)(1),那么可以假设多阶泰勒展开式:
f ( x ) = f ( 0 ) ( x 0 ) ( x − x 0 ) ( 0 ) + f ( 1 ) ( x 0 ) ( x − x 0 ) ( 1 ) + f ( 2 ) ( x 0 ) ( x − x 0 ) ( 2 ) + . . . = f ( x ) = ∑ i = 0 m f ( i ) ( x 0 ) ( x − x 0 ) ( i ) f(x)=f^{(0)}(x_0)(x-x_0)^{(0)}+f^{(1)}(x_0)(x-x_0)^{(1)}+f^{(2)}(x_0)(x-x_0)^{(2)}+...=f(x)=\sum _{i=0} ^{m}f^{(i)}(x_0)(x-x_0)^{(i)} f(x)=f(0)(x0)(x−x0)(0)+f(1)(x0)(x−x0)(1)+f(2)(x0)(x−x0)(2)+...=f(x)=∑i=0mf(i)(x0)(x−x0)(i)
接下来进行验证,考虑对
f
(
m
)
(
x
0
)
(
x
−
x
0
)
(
m
)
f^{(m)}(x_0)(x-x_0)^{(m)}
f(m)(x0)(x−x0)(m),进行求导:
一阶导:
m
f
(
m
)
(
x
0
)
(
x
−
x
0
)
(
m
−
1
)
mf^{(m)}(x_0)(x-x_0)^{(m-1)}
mf(m)(x0)(x−x0)(m−1),
二阶导:
m
(
m
−
1
)
f
(
m
)
(
x
0
)
(
x
−
x
0
)
(
m
−
2
)
m(m-1)f^{(m)}(x_0)(x-x_0)^{(m-2)}
m(m−1)f(m)(x0)(x−x0)(m−2)
…
m阶导:
m
!
f
(
m
)
(
x
0
)
m!f^{(m)}(x_0)
m!f(m)(x0)
m+1阶导:0,由于
m
!
f
(
m
)
(
x
0
)
m!f^{(m)}(x_0)
m!f(m)(x0)已经是常数,常数的导数为0。
所以,
f
(
m
)
(
x
0
)
(
x
−
x
0
)
(
m
)
f^{(m)}(x_0)(x-x_0)^{(m)}
f(m)(x0)(x−x0)(m)的m阶导就是
m
!
f
(
m
)
(
x
0
)
m!f^{(m)}(x_0)
m!f(m)(x0),但是希望的是
f
(
x
0
)
f(x_0)
f(x0)的m阶导是
f
(
m
)
(
x
0
)
f^{(m)}(x_0)
f(m)(x0),观察规律直接将
!
m
!m
!m除掉即可,
f ( x ) = ∑ i = 0 m f ( i ) ( x 0 ) ! m ( x − x 0 ) ( i ) f(x)=\sum _{i=0} ^{m} \frac{f^{(i)}(x_0)}{!m}(x-x_0)^{(i)} f(x)=∑i=0m!mf(i)(x0)(x−x0)(i)
按上述公式进行多次近似,经过同一点,切线相同,弯曲程度也相同了,近似的也就越精确了:
所以,泰勒展开就是用形式简单的多项式来近似在
x
0
x_0
x0邻域内的函数,展开越多近似程度越高。
Jacobian Matrix
在向量分析中, 雅可比矩阵是一阶偏导数以一定方式排列成的矩阵, 其行列式称为雅可比行列式。
假设 F : R n → R m F: Rn→Rm F:Rn→Rm是一个从欧式n维空间转换到欧式m维空间的函数. 这个函数由m个实函数组成:
y 1 ( x 1 , … , x n ) , … , y m ( x 1 , … , x n ) y_1(x_1,…,x_n), …, y_m(x_1,…,x_n) y1(x1,…,xn),…,ym(x1,…,xn).
这些函数的偏导数(如果存在)可以组成一个m行n列的矩阵, 这就是所谓的雅可比矩阵:
[ ∂ y 1 ∂ x 1 ⋯ ∂ y 1 ∂ x n ⋮ ⋱ ⋮ ∂ y m ∂ x 1 ⋯ ∂ y m ∂ x n ] \begin{bmatrix} \frac{\partial y_1}{\partial x_1} & \cdots & \frac{\partial y_1}{\partial x_n} \\ \vdots & \ddots & \vdots \\ \frac{\partial y_m}{\partial x_1} & \cdots & \frac{\partial y_m}{\partial x_n} \end{bmatrix} ⎣⎢⎡∂x1∂y1⋮∂x1∂ym⋯⋱⋯∂xn∂y1⋮∂xn∂ym⎦⎥⎤ .
此矩阵表示为: J F ( x 1 , … , x n ) {J_F}({x_1}, \ldots ,{x_n}) JF(x1,…,xn),或者 ∂ ( y 1 , … , y m ) ∂ ( x 1 , … , x n ) \frac{{\partial ({y_1}, \ldots ,{y_m})}}{{\partial ({x_1}, \ldots ,{x_n})}} ∂(x1,…,xn)∂(y1,…,ym) 这个矩阵的第 i i i行是由梯度函数的转置 y i ( i = 1 , … , m ) y_i(i=1,…,m) yi(i=1,…,m)表示的.
如果 p p p是 R n R_n Rn中的一点, F F F在 p p p点可微分, 那么在这一点的导数由 J F ( p ) J_F(p) JF(p)给出(这是求该点导数最简便的方法). 在此情况下, 由 F ( p ) F(p) F(p)描述的线性算子即接近点 p p p的 F F F的最优线性逼近, x x x逼近于 p p p:
F ( x ) ≈ F ( p ) + J F ( p ) ⋅ ( x – p ) F({\bf{x}}) \approx F({\bf{p}}) + {J_F}({\bf{p}}) \cdot ({\bf{x}} – {\bf{p}}) F(x)≈F(p)+JF(p)⋅(x–p)
Hessian Matrix
在数学中, 海森矩阵是一个自变量为向量的实值函数的二阶偏导数组成的方块矩阵, 此函数如下:
f
(
x
1
,
x
2
…
,
x
n
)
f({x_1},{x_2} \ldots ,{x_n})
f(x1,x2…,xn)
如果f的所有二阶导数都存在, 那么
f
f
f的海森矩阵即可表示为:
.
[
∂
2
f
∂
x
1
2
∂
2
f
∂
x
1
 
∂
x
2
⋯
∂
2
f
∂
x
1
 
∂
x
n
∂
2
f
∂
x
2
 
∂
x
1
∂
2
f
∂
x
2
2
⋯
∂
2
f
∂
x
2
 
∂
x
n
⋮
⋮
⋱
⋮
∂
2
f
∂
x
n
 
∂
x
1
∂
2
f
∂
x
n
 
∂
x
2
⋯
∂
2
f
∂
x
n
2
]
\begin{bmatrix} \frac{\partial^2 f}{\partial x_1^2} & \frac{\partial^2 f}{\partial x_1\,\partial x_2} & \cdots & \frac{\partial^2 f}{\partial x_1\,\partial x_n} \\ \\ \frac{\partial^2 f}{\partial x_2\,\partial x_1} & \frac{\partial^2 f}{\partial x_2^2} & \cdots & \frac{\partial^2 f}{\partial x_2\,\partial x_n} \\ \\ \vdots & \vdots & \ddots & \vdots \\ \\ \frac{\partial^2 f}{\partial x_n\,\partial x_1} & \frac{\partial^2 f}{\partial x_n\,\partial x_2} & \cdots & \frac{\partial^2 f}{\partial x_n^2} \end{bmatrix}
⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎡∂x12∂2f∂x2∂x1∂2f⋮∂xn∂x1∂2f∂x1∂x2∂2f∂x22∂2f⋮∂xn∂x2∂2f⋯⋯⋱⋯∂x1∂xn∂2f∂x2∂xn∂2f⋮∂xn2∂2f⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎤
.
正定矩阵
1、判定方法
若所有特征值均不小于零,则称为半正定。
若所有特征值均大于零,则称为正定。
2、海森矩阵的正定性
Hessian矩阵的正定性在判断优化算法可行性时非常有用,简单地说,海森矩阵正定,则
(1)函数的二阶偏导数恒 > 0
(2)函数的变化率(斜率)即一阶导数始终处于递增状态
(3)函数为凸
Gradient Descent
在机器学习任务中,需要最小化损失函数
L
(
θ
)
L(\theta)
L(θ) ,其中
θ
\theta
θ是要求解的模型参数。
梯度下降法常用来求解这种无约束最优化问题,它是一种迭代方法:
选取初值 ,根据梯度方向不断迭代,更新
θ
\theta
θ 的值,进行损失函数的极小化。
迭代公式:
θ
t
=
θ
t
−
1
+
Δ
θ
\theta^t = \theta^{t-1}+{\color{red} {\Delta \theta}}
θt=θt−1+Δθ ;
将
L
(
θ
t
)
在
θ
t
−
1
L(\theta^t) 在 \theta^{t-1}
L(θt)在θt−1 处进行一阶泰勒展开:
L ( θ t ) = L ( θ t − 1 + Δ θ ) ≈ L ( θ t − 1 ) + L ′ ( θ t − 1 ) Δ θ L(\theta^t) =L(\theta^{t-1} + {\color{red} {\Delta\theta}}) \approx L(\theta^{t-1})+ L^{'}(\theta^{t-1}) {\color{red} {\Delta\theta}} L(θt)=L(θt−1+Δθ)≈L(θt−1)+L′(θt−1)Δθ
要使得 L ( θ t ) < L ( θ t − 1 ) L(\theta^t) <L(\theta^{t-1}) L(θt)<L(θt−1) ,可取:
Δ θ = − α L ′ ( θ t − 1 ) {\color{red} {\Delta\theta}} =-\alpha L^{'}(\theta^{t-1}) Δθ=−αL′(θt−1) ,则: θ t = θ t − 1 − α L ′ ( θ t − 1 ) \theta^t = \theta^{t-1} -\alpha L^{'}(\theta^{t-1}) θt=θt−1−αL′(θt−1)
这里 α \alpha α 是 步长,也是常说的学习率,上式的意思便是沿着梯度方向对参数进行更新。
Newton’s Method
牛顿法是二阶泰勒展开。
将
L
(
θ
t
)
L(\theta^t)
L(θt)在
θ
t
−
1
\theta^{t-1}
θt−1 处进行二阶泰勒展开:
L
(
θ
t
)
≈
L
(
θ
t
−
1
)
+
L
′
(
θ
t
−
1
)
Δ
θ
+
1
2
L
′
′
(
θ
t
−
1
)
Δ
θ
2
L(\theta^t) \approx L(\theta^{t-1}) + L^{'}(\theta^{t-1}) {\color{red} {\Delta\theta}} +\frac{1}{2} L^{''}(\theta^{t-1}) {\color{red} {\Delta\theta ^2}}
L(θt)≈L(θt−1)+L′(θt−1)Δθ+21L′′(θt−1)Δθ2
为了简化分析过程,假设参数是标量(即 θ \theta θ 只有一维),则可将一阶和二阶导数分别记为 g g g 和 h h h:
L ( θ t ) ≈ L ( θ t − 1 ) + g Δ θ + 1 2 h Δ θ 2 L(\theta^t) \approx L(\theta^{t-1}) + g {\color{red} {\Delta\theta}} +\frac{1}{2} h{\color{red} {\Delta\theta ^2}} L(θt)≈L(θt−1)+gΔθ+21hΔθ2
要使得 L ( θ t ) L(\theta^t) L(θt) 取得极小值,即让 g Δ θ + 1 2 h Δ θ 2 g {\color{red} {\Delta\theta}} +\frac{1}{2} h{\color{red} {\Delta\theta ^2}} gΔθ+21hΔθ2 极小,所以这里转化为求前述式子极小值的问题,那么:
令: ∂ ( g Δ θ + 1 2 h Δ θ 2 ) ∂ Δ θ = 0 \frac{\partial \left( g {\color{red} {\Delta\theta}} +\frac{1}{2} h{\color{red} {\Delta\theta ^2}} \right)}{\partial {\color{red} {\Delta\theta}}} = 0 ∂Δθ∂(gΔθ+21hΔθ2)=0 ,得到
Δ θ = − g h {\color{red} {\Delta\theta}} = -\frac{g}{h} Δθ=−hg ,故 θ t = θ t − 1 + Δ θ = θ t − 1 − g h \theta^t = \theta^{t-1}+{\color{red} {\Delta \theta}} = \theta^{t-1} - \frac{g}{h} θt=θt−1+Δθ=θt−1−hg
由于泰勒展开只是近似相等, 这里求得的
θ
\theta
θ只能表示当前值会更加接近要求的极值, 于是迭代求解就自然被推出了,将参数
θ
\theta
θ 推广到向量形式,迭代公式:
θ
t
=
θ
t
−
1
−
H
−
1
g
\theta^t = \theta^{t-1}-H^{-1}g
θt=θt−1−H−1g ,这里
H
H
H是 海森矩阵。
梯度下降与牛顿法
梯度下降是一阶收敛,牛顿法是二阶收敛,所以牛顿法就更快。
如果更通俗地说的话,比如你想找一条最短的路径走到一个盆地的最底部,梯度下降法每次只从你当前所处位置选一个坡度最大的方向走一步;而牛顿法在选择方向时,不仅会考虑坡度是否够大,还会考虑你走了一步之后,坡度是否会变得更大。所以,可以说牛顿法比梯度下降法看得更远一点,能更快地走到最底部。
根据wiki上的解释,从几何上说,牛顿法就是用一个二次曲面去拟合你当前所处位置的局部曲面,而梯度下降法是用一个平面去拟合当前的局部曲面,通常情况下,二次曲面的拟合会比平面更好,所以牛顿法选择的下降路径会更符合真实的最优下降路径。
一般认为牛顿法可以利用到曲线本身的信息, 比梯度下降法更容易收敛(迭代更少次数), 如下图是一个最小化一个目标方程的例子, 红色曲线是利用牛顿法迭代求解, 绿色曲线是利用梯度下降法求解.
参考
1、https://www.zhihu.com/question/25627482
2、https://blog.csdn.net/SoHardToNamed/article/details/80550935
3、http://jacoxu.com/jacobian矩阵和hessian矩阵/
4、https://blog.csdn.net/qq_39521554/article/details/78895869
5、https://blog.csdn.net/baimafujinji/article/details/51167852
6、https://zhuanlan.zhihu.com/p/38186912