文章目录
多元微分求偏导
多元函数相关概念
n维空间
设
n
n
n为取定的一个正整数,我们用
R
n
R^n
Rn表示
n
n
n元有序实数组
(
x
1
,
x
2
,
.
.
.
,
x
n
)
(x_1,x_2,...,x_n)
(x1,x2,...,xn)的全体所构成的集合,即
KaTeX parse error: Expected 'EOF', got '}' at position 88: …, i = 1,2,...,n}̲
R
n
R^n
Rn中的元素
(
x
1
,
x
2
,
.
.
.
,
x
n
)
(x_1,x_2,...,x_n)
(x1,x2,...,xn)有时也用单个字母
x
x
x来表示,即
x
=
(
x
1
,
x
2
,
.
.
.
,
x
n
)
x = (x_1,x_2,...,x_n)
x=(x1,x2,...,xn).当所有的
x
i
(
i
=
1
,
2
,
.
.
.
,
n
)
x_i(i = 1,2,...,n)
xi(i=1,2,...,n)都为零时,称这样的元素为
R
n
R^n
Rn中的零元,记为0或O。在解析几何中,通过直角坐标系,
R
2
R^2
R2(或
R
3
R^3
R3)中的元素分别与平面(或空间)中的点或向量建立一一对应的关系。
为了在集合
R
n
R^n
Rn中的元素之间建立联系,在
R
n
R^n
Rn中定义线性运算如下:
x
+
y
=
(
x
1
+
y
1
,
x
2
+
y
2
,
.
.
.
,
x
n
+
y
n
)
λ
x
=
(
λ
x
1
,
λ
x
2
,
.
.
.
,
λ
x
n
)
x + y = (x_1 + y_1 , x_2 + y_2, ... , x_n + y_n) \\ \lambda x = (\lambda x_1, \lambda x_2, ..., \lambda x_n)
x+y=(x1+y1,x2+y2,...,xn+yn)λx=(λx1,λx2,...,λxn)
这样定义了线性运算的集合
R
n
R^n
Rn称为
n
n
n维空间。
此外,
R
n
R^n
Rn中点
x
x
x和点
y
y
y之间的距离,记作
ρ
=
(
x
,
y
)
\rho = (x, y)
ρ=(x,y),规定
ρ
=
(
x
,
y
)
=
(
x
1
+
y
1
)
2
+
(
x
2
+
y
2
)
2
+
.
.
.
+
(
x
n
+
y
n
)
2
\rho = (x, y) = \sqrt{{(x_1 + y_1)}^2 + {(x_2 + y_2)}^2 + ... + {(x_n + y_n)}^2}
ρ=(x,y)=(x1+y1)2+(x2+y2)2+...+(xn+yn)2
二元函数
设
D
D
D是
R
2
R^2
R2的一个非空子集,称映射
f
:
D
−
>
R
f:D->R
f:D−>R为定义在
D
D
D上的二元函数,通常记为
z
=
f
(
x
,
y
)
,
(
x
,
y
)
∈
D
z = f(x, y) , (x,y) \in D
z=f(x,y),(x,y)∈D
或
z
=
f
(
P
)
,
P
∈
D
z = f(P) , P \in D
z=f(P),P∈D
求偏导数
个人理解:为什么要求偏导,而不是像在一元函数中那样求导数?在一元函数中,我们仅需要求解
f
(
x
)
f(x)
f(x)对
x
x
x的导数即可获得函数的性态,因为此时
f
(
x
)
f(x)
f(x)只与
x
x
x对应。而在多元函数(这里以二元函数为例)中,
f
(
x
,
y
)
f(x,y)
f(x,y)与
x
x
x和
y
y
y对应。观察下图,我们发现,此时,
M
0
M_0
M0点的方向不再固定,为了能够更好地描述函数性态,我们主要对
x
x
x和
y
y
y两个方向进行求导,也就是
f
(
x
,
y
)
f(x,y)
f(x,y)分别对
x
x
x和
y
y
y求偏导数,类似于做降维处理(一元函数求导),简化了计算。当然,从数学角度讲,可能延伸到求二元极限(导数的定义)、求全微分等内容,这里不作展开。
偏导数定义如下图:
举例:求
z
=
x
2
+
3
x
y
+
y
2
z = x^2 + 3xy + y^2
z=x2+3xy+y2在点
(
1
,
2
)
(1,2)
(1,2)处的偏导数。
把
y
y
y看做常数,得
∂
z
∂
x
=
2
x
+
3
y
\frac{\partial z}{\partial x} = 2x + 3y
∂x∂z=2x+3y
把
x
x
x看做常数,得
∂
z
∂
y
=
3
x
+
2
y
\frac{\partial z}{\partial y} = 3x + 2y
∂y∂z=3x+2y
将
(
1
,
2
)
(1,2)
(1,2)带入上面结果即可求解。
方向导数求梯度
在上一小节中,提到了多元函数求偏导时的方向问题。这里就引出了方向导数,那么方向导数可以理解为在函数定义域内的某一点,对该点的某一方向求得的导数。结合一元导数的意义(变化率),可以进一步理解为一个函数沿指定方向的变化率。
以下图为例,可以把它看作“山”的模型,而山的表面可以通过一个函数来表达。此时,我们在山上的某一点想要下山。在下山的过程中,我们总是有很多的方向(方向导数)可以选择,有的方向可以引导我们更快地下山,有的方向甚至可以引导我们上山,那么沿着哪个方向才是最快的下山路径?这就引出了梯度这一概念。
通过上面的例子,易知梯度是有方向的,它是一个向量,这与方向导数有本质的区别(方向导数本质上是数值,可以直观理解为“下山”例子中的“下山速度”)。
梯度表示某一函数在该点处的方向导数沿着该方向取得最大值,即函数在该点处沿着该方向(该梯度的方向)变化最快,变化率最大(该梯度的模)。
定义:设二元函数
z
=
f
(
x
,
y
)
z=f(x,y)
z=f(x,y)在平面区域
D
D
D上具有一阶连续偏导数,则对于每一个点
P
(
x
,
y
)
P(x,y)
P(x,y)都可定义出一个向量
{
∂
f
∂
x
,
∂
f
∂
y
}
=
f
x
(
x
,
y
)
i
+
f
y
(
x
,
y
)
j
\{\frac{\partial f}{\partial x} , \frac{\partial f}{\partial y}\} = f_{x}(x,y)\boldsymbol{i} + f_{y}(x,y)\boldsymbol{j}
{∂x∂f,∂y∂f}=fx(x,y)i+fy(x,y)j,该函数就称为函数
z
=
f
(
x
,
y
)
z=f(x,y)
z=f(x,y)在点
P
(
x
,
y
)
P(x,y)
P(x,y)的梯度,记为
g
r
a
d
f
(
x
,
y
)
\boldsymbol{grad} {\,} f(x,y)
gradf(x,y)或
∇
f
(
x
,
y
)
\nabla {\,} f(x,y)
∇f(x,y)。
其中,
∇
\nabla
∇称为(二维的)向量微分算子或Nabla
算子。
举例:计算
f
(
x
,
y
)
=
x
2
+
y
2
f(x,y) = x^2 + y^2
f(x,y)=x2+y2的梯度向量。
一阶偏导求Jacobian矩阵
假设𝐹:ℝ𝑛→ℝ𝑚
是一个从
n
n
n维欧氏空间映射到
m
m
m维欧氏空间的函数。该函数由
m
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
m
m行
n
n
n列的矩阵,这个矩阵就是所谓的Jacobian(雅可比)矩阵:
[
∂
y
1
∂
x
1
⋯
∂
y
1
∂
x
n
⋮
⋱
⋮
∂
y
m
∂
x
1
⋯
∂
y
m
∂
x
n
]
\left[ \begin{matrix} \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{matrix} \right]
⎣⎢⎡∂x1∂y1⋮∂x1∂ym⋯⋱⋯∂xn∂y1⋮∂xn∂ym⎦⎥⎤
对比梯度公式:
∇
y
(
x
1
,
x
2
)
=
{
∂
y
∂
x
1
,
∂
y
∂
x
2
}
\nabla {\,} y(x_1,x_2) = \{\frac{\partial y}{\partial x_1} , \frac{\partial y}{\partial x_2}\}
∇y(x1,x2)={∂x1∂y,∂x2∂y}
观察Jacobian矩阵公式和梯度公式,可以把Jacobian矩阵公式化为梯度向量形式:
[
∇
y
1
(
x
1
,
x
2
,
.
.
.
,
x
n
)
⋮
∇
y
m
(
x
1
,
x
2
,
.
.
.
,
x
n
)
]
\left[ \begin{matrix} \nabla {\,} y_1(x_1,x_2,...,x_n) \\ \vdots \\ \nabla {\,} y_m(x_1,x_2,...,x_n) \end{matrix} \right]
⎣⎢⎡∇y1(x1,x2,...,xn)⋮∇ym(x1,x2,...,xn)⎦⎥⎤
Jacobian矩阵的行向量即是对应函数的梯度向量。
显而易见,梯度向量是Jacobian矩阵的特例!
举例:求
F
=
(
f
1
(
x
,
y
)
,
f
2
(
x
,
y
)
)
T
F = (f_1(x,y),f_2(x,y))^T
F=(f1(x,y),f2(x,y))T的雅可比矩阵,其中
f
1
(
x
,
y
)
=
2
x
2
+
y
2
f_1(x,y) = 2x^2 + y^2
f1(x,y)=2x2+y2,
f
2
(
x
,
y
)
=
x
2
+
3
y
2
f_2(x,y) = x^2 + 3y^2
f2(x,y)=x2+3y2。
二阶偏导求Hessian矩阵
Hessian矩阵(黑塞矩阵/海森矩阵),是由一个多元函数的二阶偏导数构成的方阵,描述了函数的局部曲率。在数学中,Hessian矩阵是一个自变量为向量的实值函数的二阶偏导数组成的方块矩阵,假设有一实数函数
f
(
x
1
,
x
2
,
.
.
.
,
x
n
)
f(x_1,x_2,...,x_n)
f(x1,x2,...,xn)如果
f
f
f所有的二阶偏导数都存在,那么
f
f
f的Hessian矩阵的第
i
j
ij
ij项,即:
H
(
f
i
j
(
x
)
)
=
D
i
D
j
f
(
x
)
H(f_{ij}(x)) = D_iD_jf(x)
H(fij(x))=DiDjf(x)
其中
x
=
(
x
1
,
x
2
,
.
.
.
,
x
n
)
T
x = (x_1,x_2,...,x_n)^T
x=(x1,x2,...,xn)T,即
[
∂
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
]
\left[ \begin{matrix} \frac{\partial^{2}f}{\partial x^{2}_1} & \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^{2}_n} \end{matrix} \right]
⎣⎢⎢⎢⎢⎢⎡∂x12∂2f∂x2∂x1∂2f⋮∂xn∂x1∂2f∂x1∂x2∂2f∂x22∂2f⋮∂xn∂x2∂2f⋯⋯⋱⋯∂x1∂xn∂2f∂x2∂xn∂2f⋮∂xn2∂2f⎦⎥⎥⎥⎥⎥⎤
现求符合Hessian矩阵公式要求
的一实数函数
f
(
x
1
,
x
2
,
.
.
.
,
x
n
)
f(x_1,x_2,...,x_n)
f(x1,x2,...,xn)的梯度向量
g
(
x
)
g(x)
g(x):
[
∂
∂
x
1
f
(
x
1
,
x
2
,
.
.
.
,
x
n
)
∂
∂
x
2
f
(
x
1
,
x
2
,
.
.
.
,
x
n
)
⋮
∂
∂
x
n
f
(
x
1
,
x
2
,
.
.
.
,
x
n
)
]
\left[ \begin{matrix} \frac{\partial}{\partial x_1}f(x_1,x_2,...,x_n) \\ \frac{\partial}{\partial x_2}f(x_1,x_2,...,x_n) \\ \vdots \\ \frac{\partial }{\partial x_n}f(x_1,x_2,...,x_n) \end{matrix} \right]
⎣⎢⎢⎢⎡∂x1∂f(x1,x2,...,xn)∂x2∂f(x1,x2,...,xn)⋮∂xn∂f(x1,x2,...,xn)⎦⎥⎥⎥⎤
此时,可以很明显地得出,列向量(梯度向量)的每一个元素都是包含自变量
x
1
,
x
2
,
.
.
.
,
x
n
x_1,x_2,...,x_n
x1,x2,...,xn全新函数(相当于
y
1
,
y
2
,
.
.
.
,
y
n
y_1,y_2,...,y_n
y1,y2,...,yn),再对该梯度向量求Jacobian矩阵,即对其中每一全新函数分别求他们的梯度向量(从数学计算角度来说,类似于求每一个一阶导数对应的全微分,这也是我们需要该实数函数(符合Hessian矩阵公式要求
)的所有的二阶偏导数都存在的原因之一):
∇
x
g
(
x
)
=
∇
x
[
∂
∂
x
1
f
(
x
1
,
x
2
,
.
.
.
,
x
n
)
∂
∂
x
2
f
(
x
1
,
x
2
,
.
.
.
,
x
n
)
⋮
∂
∂
x
n
f
(
x
1
,
x
2
,
.
.
.
,
x
n
)
]
=
[
∂
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
]
\nabla_x {\,} g(x) = \nabla_x \left[ \begin{matrix} \frac{\partial}{\partial x_1}f(x_1,x_2,...,x_n) \\ \frac{\partial}{\partial x_2}f(x_1,x_2,...,x_n) \\ \vdots \\ \frac{\partial }{\partial x_n}f(x_1,x_2,...,x_n) \end{matrix} \right] = \left[ \begin{matrix} \frac{\partial^{2}f}{\partial x^{2}_1} & \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^{2}_n} \end{matrix} \right]
∇xg(x)=∇x⎣⎢⎢⎢⎡∂x1∂f(x1,x2,...,xn)∂x2∂f(x1,x2,...,xn)⋮∂xn∂f(x1,x2,...,xn)⎦⎥⎥⎥⎤=⎣⎢⎢⎢⎢⎢⎡∂x12∂2f∂x2∂x1∂2f⋮∂xn∂x1∂2f∂x1∂x2∂2f∂x22∂2f⋮∂xn∂x2∂2f⋯⋯⋱⋯∂x1∂xn∂2f∂x2∂xn∂2f⋮∂xn2∂2f⎦⎥⎥⎥⎥⎥⎤
显然,Hessian矩阵是梯度向量g(x)对自变量x的Jacobian矩阵。
多元函数求极值
函数的极值与最值的概念
极值:设函数
f
(
x
)
f(x)
f(x)在
x
0
x_0
x0的某邻域
U
(
x
0
)
U(x_0)
U(x0)内有定义,如果对于去心邻域
U
(
x
0
)
U(x_0)
U(x0)内的任意x,有
A
A
A
f
(
x
)
<
f
(
x
0
)
或
f
(
x
)
>
f
(
x
0
)
f(x) < f(x_0) {\,} 或 {\,} f(x) > f(x_0)
f(x)<f(x0)或f(x)>f(x0)
那么就称
f
(
x
0
)
f(x_0)
f(x0)是函数的一个极大值或极小值。如果熟悉极限定义的同学就会发现,极值只在某一范围内(并不是函数定义域)起作用,当超出这个范围后,该极值不一定适用。
而最值是函数在其定义域内取得最大值(或最小值)的点的函数值。
综上所述,极值是局部性概念,而最值是全局性概念。在西瓜书·第五章·神经网络
章节,我们会学到参数寻优
的方法,即在局部极值的基础上去寻找全局最优,这并不容易~
最优性条件
在一元函数前提下,我们会利用判断极值的两个充分条件解决问题。在实际计算中,通常使用求导结合区间单调性的方式,判断函数的极值,相对比较容易,这里不作展开。
在多元函前提下,我们分为条件极值和无条件极值两种情况讨论。
无条件极值
二元函数取得极值的充分条件:如果函数
z
=
f
(
x
,
y
)
z=f(x,y)
z=f(x,y)在点
(
x
0
,
y
0
)
(x_0,y_0)
(x0,y0)的某邻域内具有连续的二阶偏导数,
(
x
0
,
y
0
)
(x_0,y_0)
(x0,y0)是它的驻点,令:
A
=
f
x
x
(
x
0
,
y
0
)
,
B
=
f
x
y
(
x
0
,
y
0
)
,
C
=
f
y
y
(
x
0
,
y
0
)
Δ
=
B
2
−
A
C
A = f_{xx}(x_0,y_0),B = f_{xy}(x_0,y_0),C = f_{yy}(x_0,y_0) \\ \Delta = B^2 - AC
A=fxx(x0,y0),B=fxy(x0,y0),C=fyy(x0,y0)Δ=B2−AC
则:
- 当 Δ < 0 \Delta < 0 Δ<0时, f ( x , y ) f(x,y) f(x,y)在 ( x 0 , y 0 ) (x_0,y_0) (x0,y0)取得极值。其中 A > 0 A > 0 A>0时,取极小值, A < 0 A < 0 A<0时,取极大值;
- 当 Δ > 0 \Delta > 0 Δ>0时, f ( x 0 , y 0 ) f(x_0,y_0) f(x0,y0)不是极值;
- 当 Δ = 0 \Delta = 0 Δ=0时,不能确定,需进一步判断。
更严谨的表述:设
n
n
n元实函数
f
(
x
1
,
x
2
,
.
.
.
,
x
n
)
f(x_1,x_2,...,x_n)
f(x1,x2,...,xn)在点
M
0
(
a
1
,
a
2
,
.
.
.
,
a
n
)
M_0(a_1,a_2,...,a_n)
M0(a1,a2,...,an)的邻域内有二阶连续偏导,若有:
∂
f
∂
x
j
∣
(
a
1
,
a
2
,
.
.
.
,
a
n
)
=
0
,
j
=
1
,
2
,
.
.
.
,
n
\left. \frac{\partial f}{\partial x_j} \right|_{(a_1,a_2,...,a_n)} = 0 {\,} , {\,} j = 1,2,...,n
∂xj∂f∣∣∣∣(a1,a2,...,an)=0,j=1,2,...,n
且
A
=
[
∂
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
]
A = \left[ \begin{matrix} \frac{\partial^{2}f}{\partial x^{2}_1} & \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^{2}_n} \end{matrix} \right]
A=⎣⎢⎢⎢⎢⎢⎡∂x12∂2f∂x2∂x1∂2f⋮∂xn∂x1∂2f∂x1∂x2∂2f∂x22∂2f⋮∂xn∂x2∂2f⋯⋯⋱⋯∂x1∂xn∂2f∂x2∂xn∂2f⋮∂xn2∂2f⎦⎥⎥⎥⎥⎥⎤
则有如下结果:
- 当 A A A是正定矩阵时, f ( x 1 , x 2 , . . . , x n ) f(x_1,x_2,...,x_n) f(x1,x2,...,xn)在 M 0 ( a 1 , a 2 , . . . , a n ) M_0(a_1,a_2,...,a_n) M0(a1,a2,...,an)处是极小值;
- 当 A A A是负定矩阵时, f ( x 1 , x 2 , . . . , x n ) f(x_1,x_2,...,x_n) f(x1,x2,...,xn)在 M 0 ( a 1 , a 2 , . . . , a n ) M_0(a_1,a_2,...,a_n) M0(a1,a2,...,an)处是极大值;
- 当 A A A是不定矩阵时, M 0 ( a 1 , a 2 , . . . , a n ) M_0(a_1,a_2,...,a_n) M0(a1,a2,...,an)不是极值点;
- 当 A A A是半正定矩阵或半负定矩阵时, M 0 ( a 1 , a 2 , . . . , a n ) M_0(a_1,a_2,...,a_n) M0(a1,a2,...,an)是“可疑”极值点,尚需要利用其他方法来判定。
条件极值(拉格朗日乘子法)
条件极值更严谨地表述为带等式约束的优化问题,显然我们需要使用拉格朗日乘子法。
举例:求函数
z
=
f
(
x
,
y
)
z = f(x,y)
z=f(x,y)在条件
φ
(
x
,
y
)
=
0
\varphi(x,y) = 0
φ(x,y)=0下的极值。
引入拉格朗日函数 L ( x , y ) = f ( x , y ) + λ φ ( x , y ) L(x,y) = f(x,y) + \lambda \varphi(x,y) L(x,y)=f(x,y)+λφ(x,y)
则极值点满足: { L x ( x 0 , y 0 ) = 0 L y ( x 0 , y 0 ) = 0 φ ( x 0 , y 0 ) = 0 \begin{cases} L_x(x_0,y_0) = 0\\ L_y(x_0,y_0) = 0 \\ \varphi(x_0,y_0) = 0 \end{cases} ⎩⎪⎨⎪⎧Lx(x0,y0)=0Ly(x0,y0)=0φ(x0,y0)=0
接下来联立方程组,求解出 x x x和 y y y即可。
基于梯度的优化方法
Taylor公式
Taylor公式就是用一个多项式函数去逼近一个给定的函数,即尽量使多项式函数图像拟合给定的函数图像
。如果一个非常复杂的函数,想求其某点的值,直接求无法实现。此时,可以使用Taylor公式去近似地求该值,这是Taylor公式的应用之一。Taylor公式在机器学习中主要应用于梯度迭代。
定义:设
n
n
n是一个正整数。如果定义一个包含
a
a
a的区间上的函数
f
f
f在
a
a
a点处
n
+
1
n+1
n+1次可导,那么对于这个区间上的任意
x
x
x都有:
f
(
x
)
=
f
(
a
)
0
!
+
f
′
(
a
)
1
!
(
x
−
a
)
+
f
′
′
(
a
)
2
!
(
x
−
a
)
2
+
⋅
⋅
⋅
+
f
(
n
)
(
a
)
n
!
(
x
−
a
)
n
+
R
n
(
x
)
=
∑
n
=
0
N
f
(
n
)
(
a
)
n
!
(
x
−
a
)
n
+
R
n
(
x
)
f(x) = \frac{f(a)}{0!} + \frac{f^{\prime}(a)}{1!}(x-a) + \frac{f^{\prime\prime}(a)}{2!}(x-a)^2+···+\frac{f^{(n)}(a)}{n!}(x-a)^n + R_n(x)\\=\sum_{n=0}^N \frac{f^{(n)}(a)}{n!}(x-a)^n + R_n(x)
f(x)=0!f(a)+1!f′(a)(x−a)+2!f′′(a)(x−a)2+⋅⋅⋅+n!f(n)(a)(x−a)n+Rn(x)=n=0∑Nn!f(n)(a)(x−a)n+Rn(x)
其中,
∑
n
=
0
N
f
(
n
)
(
a
)
n
!
(
x
−
a
)
n
\sum_{n=0}^N \frac{f^{(n)}(a)}{n!}(x-a)^n
∑n=0Nn!f(n)(a)(x−a)n称为函数在
a
a
a处的Taylor展开式,
R
n
(
x
)
R_n(x)
Rn(x)称为Taylor公式的余项。
梯度下降法
举例:使用梯度下降法求函数 y = c o s ( x ) y = cos(x) y=cos(x)在区间 x ∈ [ 0 , 2 π ] x \in [0,2\pi] x∈[0,2π]的极小值点。
import numpy as np
import matplotlib.pyplot as plt
import random
#y = cos(x)
def f(x):
return np.cos(x)
#导数定义求某点导数值
def qiudao(f, x, delta = 1e-4):
return (f(x + delta) - f(x - delta)) / (2 * delta)
#画图
xs = np.linspace(0, 2*np.pi, 100)
plt.plot(xs, f(xs))
learning_rate = 0.1
max_loop = 200 #迭代次数
#随机选取初始值
start = random.uniform(0, 2 * np.pi)
x = start
x_list = [] #记录梯度下降过程
for i in range(max_loop):
qd = qiudao(f, x) #求梯度
x = x - learning_rate * qd #梯度下降法找到下一个点
x_list.append(x)
#画图
x_list = np.array(x_list)
plt.scatter(x_list, f(x_list), c = "r")
plt.show()
print("initial x = ", start)
print("arg min f(x) of x = ", x)
print("f(x) = ", f(x))
输出结果:
- initial x = 1.5355280934997437
- arg min f(x) of x = 3.1415926520680157
- f(x) = -1.0
牛顿迭代法
函数值为
0
0
0时,自变量如何取值?这里引出牛顿迭代法(一下简称牛顿法)。
利用牛顿法求解目标函数的最小值,实际上就是转化成求解使目标函数的一阶导为
0
0
0的参数值。这一转化的理论依据:函数的极值点处的一阶导数为0。
以一元函数举例:
迭代过程是在当前位置
(
x
0
,
y
0
)
(x_0,y_0)
(x0,y0)的横坐标
x
0
x_0
x0求该函数的切线(求一阶导),该切线和
x
x
x轴的交点
x
1
x_1
x1,作为新的“
x
0
x_0
x0”。
重复这一过程,直到交点和函数(实际上是目标函数的一阶导数)的零点重合。此时的参数值就是使得目标函数取得极值的参数值。其迭代过程如图:
迭代公式如下:
θ
:
=
θ
−
α
ℓ
′
(
θ
)
ℓ
′
′
(
θ
)
\theta := \theta - \alpha \frac{\ell^{\prime}(\theta)}{\ell^{\prime\prime}(\theta)}
θ:=θ−αℓ′′(θ)ℓ′(θ)
当
θ
\theta
θ是向量时,牛顿法可以下面的等式表示:
θ
:
=
θ
−
α
H
−
1
∇
θ
ℓ
(
θ
)
\theta := \theta - \alpha H^{-1} \nabla_{\theta}\ell(\theta)
θ:=θ−αH−1∇θℓ(θ)
其中
H
H
H称为Hessian矩阵,其实就是目标函数对参数
θ
\theta
θ的二阶导数。
举例:使用牛顿迭代法求函数 y = c o s ( x ) y = cos(x) y=cos(x)在区间 x ∈ [ 0 , 2 π ] x \in [0,2\pi] x∈[0,2π]的极小值点。
import numpy as np
import matplotlib.pyplot as plt
import random
#y = cos(x)
def f(x):
return np.cos(x)
#一阶导
def qiudao_1(x):
return -np.sin(x)
#二阶导
def qiudao_2(x):
return -np.cos(x)
#画图
xs = np.linspace(0, 2*np.pi, 100)
plt.plot(xs, f(xs))
learning_rate = 0.1
max_loop = 1000 #迭代次数
#随机选取初始值
start = random.uniform(0, 2 * np.pi)
x = start
x_list = [] #记录牛顿迭代过程
for i in range(max_loop):
grad = qiudao_1(x) #求梯度——求一阶导
hessian = qiudao_2(x) #求海森矩阵——求二阶导
x = x - learning_rate * (grad / hessian) #梯度下降法找到下一个点
x_list.append(x)
#画图
x_list = np.array(x_list)
plt.scatter(x_list, f(x_list), c = "r")
plt.show()
print("initial x = ", start)
print("arg min f(x) of x = ", x)
print("f(x) = ", f(x))
输出结果:
- initial x = 4.351193487874113
- arg min f(x) of x = 3.1415926535897953
- f(x) = -1.0
牛顿迭代法与梯度下降法比较
牛顿迭代法 | 梯度下降法 | |
---|---|---|
优点 | ①通过求解目标函数的一阶导数为0时的参数,进而求出目标函数最小值时的参数。实际上,通过迭代过程图和推导公式可知,牛顿迭代法与二阶导数息息相关,这就使得牛顿法的收敛速度很快。 | 通过梯度方向和步长,直接求解目标函数的最小值时候的参数。 |
缺点 | Hessian矩阵的逆运算复杂,代价比较大,因此有了拟牛顿法。 | 越接近最优值时,步长应不断减小,否则会在最优值附近来回震荡 |
参考
最优化理论之负梯度方法与Newton型方法——知乎
统计学习方法·李航
机器学习——李宏毅
偏导数定义——知乎
方向导数和梯度的理解
梯度向量、Jacobian矩阵、Hessian矩阵