机器学习基本就是把问题转化成某个损失函数,然后求极值。函数的极值分为全局极值和局部极值,两种都满足一个条件 f ′ = 0 f^{\prime}=0 f′=0或 ∇ f = 0 \nabla f=0 ∇f=0。
牛顿法:二阶泰勒级数逼近
单元函数
在初始值
x
0
x_0
x0附近,将
f
(
x
)
f(x)
f(x)进行二阶泰勒展开,
f
(
x
0
+
△
x
)
=
f
(
x
0
)
+
f
′
(
x
0
)
△
x
+
1
2
f
′
′
(
x
0
)
△
x
2
+
o
(
△
x
2
)
f(x_0+△x)=f(x_0)+f^{\prime}(x_0)△x+{1\over2}f^{\prime\prime}(x_0)△x^2+o(△x^2)
f(x0+△x)=f(x0)+f′(x0)△x+21f′′(x0)△x2+o(△x2)
f
(
x
0
+
△
x
)
=
g
(
△
x
)
+
o
(
△
x
2
)
f(x_0+△x)=g(△x)+o(△x^2)
f(x0+△x)=g(△x)+o(△x2)
g
(
△
x
)
g(△x)
g(△x)是二次函数,对它进行求导,令导数等于0,即可求导极值点,因为是二次函数,所以不确定是极大还极小。
g
(
△
x
)
g(△x)
g(△x)极值点为
−
f
′
(
x
0
)
f
′
′
(
x
0
)
-{f^{\prime}(x_0)\over {f^{\prime\prime}(x_0)}}
−f′′(x0)f′(x0),由于
f
(
x
)
f(x)
f(x)和
g
(
△
x
)
g(△x)
g(△x)只相差一个
o
(
△
x
2
)
o(△x^2)
o(△x2),因此
f
(
x
)
f(x)
f(x)在
x
0
x_0
x0附近这一很小很小的局部内的极值点为
x
=
x
0
−
f
′
(
x
0
)
f
′
′
(
x
0
)
x=x_0-{f^{\prime}(x_0)\over {f^{\prime\prime}(x_0)}}
x=x0−f′′(x0)f′(x0)
通过迭代可得
x
n
=
x
n
−
1
−
f
′
(
x
n
−
1
)
f
′
′
(
x
n
−
1
)
x_n=x_{n-1}-{f^{\prime}(x_{n-1})\over {f^{\prime\prime}(x_{n-1})}}
xn=xn−1−f′′(xn−1)f′(xn−1),通过一步一步迭代,就能够求出在一个较大的局部范围内,
f
(
x
)
f(x)
f(x)的极值点。
多元函数
在实际应用中,往往是解决多元函数的问题。多元函数是用向量和矩阵进行表示运算。
f
(
x
⃗
)
=
f
(
x
0
⃗
)
+
g
T
(
x
⃗
−
x
0
⃗
)
+
1
2
(
x
⃗
−
x
0
⃗
)
T
H
(
x
⃗
−
x
0
⃗
)
+
o
(
)
f(\vec{x})=f(\vec{x_0})+g^T(\vec{x}-\vec{x_0})+{1\over2}(\vec{x}-\vec{x_0})^TH(\vec{x}-\vec{x_0})+o()
f(x)=f(x0)+gT(x−x0)+21(x−x0)TH(x−x0)+o()
其中,
g
T
=
[
∂
f
(
x
)
⃗
x
1
,
∂
f
(
x
)
⃗
x
2
,
.
.
.
,
∂
f
(
x
n
)
⃗
x
n
]
g^T=[{\partial f(\vec{x)}\over{x_1}} ,{\partial f(\vec{x)}\over{x_2}},...,{\partial f(\vec{x_n)}\over{x_n}}]
gT=[x1∂f(x),x2∂f(x),...,xn∂f(xn)]
f
(
x
)
f(x)
f(x)的梯度。
H
H
H为hassion矩阵,函数的二阶偏导数。
H
=
[
∂
2
f
(
x
⃗
)
∂
x
1
∂
x
1
∂
2
f
(
x
⃗
)
∂
x
1
∂
x
2
⋯
∂
2
f
(
x
⃗
)
∂
x
1
∂
x
n
∂
2
f
(
x
⃗
)
∂
x
2
∂
x
1
∂
2
f
(
x
⃗
)
∂
x
2
∂
x
2
⋯
∂
2
f
(
x
⃗
)
∂
x
2
∂
x
n
⋮
⋮
⋱
⋮
∂
2
f
(
x
⃗
)
∂
x
n
∂
x
1
∂
2
f
(
x
⃗
)
∂
x
n
∂
x
2
⋯
∂
2
f
(
x
⃗
)
∂
x
n
∂
x
n
]
H=\begin{bmatrix} {{\partial ^2f(\vec{x})} \over {\partial{x_1}{\partial{x_1}}}}&{{\partial ^2f(\vec{x})} \over {\partial{x_1}{\partial{x_2}}}}&{\cdots}&{{\partial ^2f(\vec{x})} \over {\partial{x_1}{\partial{x_n}}}}\\ {{\partial ^2f(\vec{x})} \over {\partial{x_2}{\partial{x_1}}}}&{{\partial ^2f(\vec{x})} \over {\partial{x_2}{\partial{x_2}}}}&{\cdots}&{{\partial ^2f(\vec{x})} \over {\partial{x_2}{\partial{x_n}}}}\\ {\vdots}&{\vdots}&{\ddots}&{\vdots}\\ {{\partial ^2f(\vec{x})} \over {\partial{x_n}{\partial{x_1}}}}&{{\partial ^2f(\vec{x})} \over {\partial{x_n}{\partial{x_2}}}}&{\cdots}&{{\partial ^2f(\vec{x})} \over {\partial{x_n}{\partial{x_n}}}}\\ \end{bmatrix}
H=⎣⎢⎢⎢⎢⎢⎡∂x1∂x1∂2f(x)∂x2∂x1∂2f(x)⋮∂xn∂x1∂2f(x)∂x1∂x2∂2f(x)∂x2∂x2∂2f(x)⋮∂xn∂x2∂2f(x)⋯⋯⋱⋯∂x1∂xn∂2f(x)∂x2∂xn∂2f(x)⋮∂xn∂xn∂2f(x)⎦⎥⎥⎥⎥⎥⎤
由单元函数可得,多元函数极值点迭代公式:
x
n
⃗
=
x
n
−
1
⃗
−
H
(
x
n
−
1
⃗
)
g
(
x
n
−
1
⃗
)
\vec{x_n}=\vec{x_{n-1}}-{{H(\vec{x_{n-1}}) }\over g(\vec{x_{n-1}})}
xn=xn−1−g(xn−1)H(xn−1)
梯度下降法:一阶逼近
梯度下降用于多元函数,采用一阶逼近。
f
(
x
⃗
)
=
f
(
x
0
⃗
)
+
g
T
(
x
⃗
−
x
0
⃗
)
+
o
(
x
⃗
−
x
0
⃗
)
f(\vec{x})=f(\vec{x_0})+g^T(\vec{x}-\vec{x_0})+o(\vec{x}-\vec{x_0})
f(x)=f(x0)+gT(x−x0)+o(x−x0)
梯度下降法采用是一阶逼近,线性逼近,无法通过求导令导数等于0来获取极值,只能沿着梯度反方向
−
g
-g
−g(求最小值)一点点尝试靠近。
x
n
⃗
=
x
n
−
1
⃗
−
l
x
n
−
1
⃗
g
(
x
n
−
1
⃗
)
T
\vec{x_n}=\vec{x_{n-1}}-l\vec{x_{n-1}}g(\vec{x_{n-1}})^T
xn=xn−1−lxn−1g(xn−1)T
其中
l
l
l为学习率,控制着往梯度方向移动的步伐大小,取值过小,移动过慢,收敛速度就慢,但是取值大了,可能跳过极值点,倒是不收敛。
两种特点总结
- 两种都是求局部最优值(因为采用的是局部逼近的方法)。
- 当初值选取得当时,牛顿法收敛快(不止有梯度,还有求导得到极值)。
- 牛顿法需要求二阶导数,对于多元函数,H矩阵计算量很大
- 牛顿法其实是在平衡点收敛,有可能是极大值,也可能是极小值,还有可能是鞍点。梯度下降法是顾明思义就是求极小值,但也可能求鞍点。