1.最优化原理
\quad\quad 自然界总是以最小代价取得最大收益,比如一束光线在介质中传播时路线是需时最少的路径,这被称作费马原理(Fermat’s principle)。
最优化已经深深影响了人类生活的方方面面,比如经济、生产、军事、资源配置等等。促使人们创造数学理论来解决这类问题。二战及战后极大促进了最优化理论的发展,后期尤其是计算机的发明给该理论注入新的活力。
\quad\quad
那么最优化具体研究的是什么呢?最优化理论研究的问题是判定给定目标函数的最大值(最小值)是否存在,并找到令目标函数取到最大值(最小值)的数值。
\quad\quad
人工智能问题最后都会归结为一个优化问题的求解:在复杂环境与多体交互中得出最优决策。最优决策目标就是找全局最值,进一步转化为找最小值,理想情况下,最优化算法的目标就是找到全局最小值。当目标函数的输入参数较多、解空间较大时,绝大多数算法都不能满足全局搜索,只能求出局部最小值。人工智能与深度学习从大自然中得到启发,将神经元抽象成网络节点,神经元链接关系抽象为节点连通关系。因此,神经网络可以看成一个变换函数,将输入空间变换到特征空间的一种函数。人工智能和深度学习求解过程就是寻找和逼近的过程,只要目标函数的取值足够小,就可以把这个值当作最小值使用,作为对性能和复杂度的折中。
2.全局最优与局部最优
\quad\quad
如果函数是凸函数,则局部最优就是全局最优。理想是丰满的,现实是骨感的,真实的函数绝大多数是非凸的。
\quad\quad
在创建算法的征途中,能构造出凸函数用于解决问题将是多么幸福的事,平时多修炼数学内力,有助于提升解决问题能力。
那么怎么判断一个函数是不是凸函数呢?所谓的凸函数就是曲线满足不等式:
f
(
α
x
1
+
(
1
−
α
)
x
2
)
>
=
f
(
α
x
1
)
+
f
(
(
1
−
α
)
x
2
)
f({\alpha x_1+(1-\alpha )x_2})>=f(\alpha x_1)+f((1-\alpha )x_2)
f(αx1+(1−α)x2)>=f(αx1)+f((1−α)x2),其中
x
1
,
x
2
∈
I
,
α
∈
[
0
,
1
]
x_1,x_2\in I,\alpha\in[0,1]
x1,x2∈I,α∈[0,1],则称
f
f
f在
I
I
I上的曲线是凸的,否则称
f
f
f是凹的。
除了用定义方法判断凸函数,下列方法判定方法也是常用的:
1.如果 f 1 , f 2 , f 3 , ⋯ , f k f_1,f_2,f_3,\cdots,f_k f1,f2,f3,⋯,fk是凸的,则线性组合 Φ ( x ) = ∑ i = 0 n λ i f i ( x ) \Phi(x)= \sum_{i=0}^{n}{\lambda_if_i(x)} Φ(x)=∑i=0nλifi(x),其中 λ i ≥ 0 ( i = 1 , 2 , ⋯ , k ) \lambda_i\geq 0(i=1,2,\cdots,k) λi≥0(i=1,2,⋯,k)和 Ψ ( x ) = m a x 1 ≤ i ≤ k f i ( x ) \Psi(x)=max_{1\leq i \leq k} f_i(x) Ψ(x)=max1≤i≤kfi(x)都是某集合的凸函数。
2.
f
f
f在n维欧式空间的子集D上可微,若
x
,
y
∈
D
x,y\in D
x,y∈D满足:
f
(
y
)
−
f
(
x
)
≥
∇
f
(
x
)
T
(
y
−
x
)
f(y)-f(x) \geq \nabla f(x)^T(y-x)
f(y)−f(x)≥∇f(x)T(y−x)则称
f
(
x
)
f(x)
f(x)在D上是凸函数。
3.设
f
(
D
)
f(D)
f(D)在
D
D
D
⊆
\subseteq
⊆
R
n
R^n
Rn上二阶可微,
f
(
x
)
f(x)
f(x)的Hessian矩阵半正定,则
f
f
f是D内的凸函数。
在诸如牛顿法等梯度方法中,使用黑塞(Hessian)矩阵的正定性可以非常便捷的判断函数是否有凸性,也就是是否可收敛到局部/全局的最优解。
3.梯度迭代
3.1引言
\quad\quad 笛卡尔说:“一切问题都可以转化为数学问题,一切数学问题都可以转化为代数问题,而一切代数问题又可以转化为方程问题”。进一步地方程问题可以转化为迭代问题,迭代问题可以转化为计算机程序问题。现在看虽然有点夸张,但不少问题可以按照上述形式解决。在应用场景中,可以分为线性问题和非线性问题。对于线性问题一般可以简化为 A x = B Ax=B Ax=B形式,其中 A A A是非奇异的。数学方程成为线性方程问题。
一般数值方法中采用高斯消元法解方程,但实际方程
A
A
A的阶数很大,而且是稀疏矩阵,用高斯消元法在算力上不够,而采用迭代逼近法求解。
举例说明迭代法的思想
例1 已知方程组的形式为:
{
8
x
1
−
3
x
2
+
2
x
3
=
20
4
x
1
+
11
x
2
−
x
3
=
33
6
x
1
+
3
x
2
+
12
x
3
=
36
(1)
\begin{cases} 8x_1-3x_2+2x_3=20\\ 4x_1+11x_2-x_3=33\\ 6x_1+3x_2+12x_3=36\\ \end{cases} \tag{1}
⎩⎪⎨⎪⎧8x1−3x2+2x3=204x1+11x2−x3=336x1+3x2+12x3=36(1)
记上式为
A
x
=
b
\bm A\bm x=\bm b
Ax=b,其中
A
=
[
8
−
3
2
4
11
−
1
6
3
12
]
\bm A=\left[ \begin{matrix} 8 & -3 & 2\\4 & 11 & -1 \\ 6 &3& 12 \end{matrix} \right]
A=⎣⎡846−31132−112⎦⎤,
x
=
[
x
1
x
2
x
3
]
x=\left[ \begin{matrix} x_1 \\ x_2 \\x_3 \end{matrix}\right]
x=⎣⎡x1x2x3⎦⎤,
b
=
[
20
33
36
]
b=\left[ \begin{matrix} 20 \\ 33 \\36 \end{matrix}\right]
b=⎣⎡203336⎦⎤
此方程精确解为:
x
∗
=
(
3
,
2
,
1
)
T
\bm x^*=(3,2,1)^T
x∗=(3,2,1)T。
我们将方程改写成可以迭代的形式,改成:
{
x
1
=
1
8
(
3
x
2
−
2
x
3
+
20
)
x
2
=
1
11
(
−
4
x
1
+
x
3
+
33
)
x
3
=
1
12
(
−
6
x
1
−
3
x
2
+
36
)
(2)
\begin{cases} x_1=\frac{1}{8}{(3x_2-2x_3+20)}\\ x_2=\frac{1}{11}{(-4x_1+x_3+33)}\\ x_3=\frac{1}{12}{(-6x_1-3x_2+36)} \end{cases} \tag{2}
⎩⎪⎨⎪⎧x1=81(3x2−2x3+20)x2=111(−4x1+x3+33)x3=121(−6x1−3x2+36)(2)
抽象成
x
=
B
0
x
+
f
\bm x=\bm B_0\bm x+f
x=B0x+f。其中,
B
0
=
[
0
3
8
−
2
8
−
4
11
0
1
11
−
6
12
−
3
12
0
]
,
f
=
[
20
8
33
11
36
12
]
B_0=\left[ \begin{matrix} 0 & \frac{3}{8} & -\frac{2}{8} \\-\frac{4}{11} & 0 & \frac{1}{11} \\ -\frac{6}{12} & -\frac{3}{12} & 0 \end{matrix} \right] , f=\left[ \begin{matrix} \frac{20}{8} \\ \frac{33}{11} \\ \frac{36}{12} \end{matrix}\right]
B0=⎣⎡0−114−126830−123−821110⎦⎤,f=⎣⎡82011331236⎦⎤
取初始值
x
(
0
)
=
(
0
,
0
,
0
)
T
x^{(0)}=(0,0,0)^T
x(0)=(0,0,0)T,将初始值带入(2)式右侧,得到新值
x
(
1
)
=
(
x
1
(
1
)
,
x
2
(
1
)
,
x
3
(
1
)
)
T
=
(
2.5
,
3
,
3
)
T
x^{(1)}=(x_1^{(1)},x_2^{(1)},x_3^{(1)})^{T}=(2.5,3,3)^T
x(1)=(x1(1),x2(1),x3(1))T=(2.5,3,3)T,再将
x
(
1
)
x^{(1)}
x(1)带入(2)式右侧得到
x
(
2
)
x^{(2)}
x(2),如此循环迭代,得到序列
(
x
(
0
)
,
x
(
1
)
,
⋯
,
x
(
k
)
)
(x^{(0)},x^{(1)},\cdots,x^{(k)})
(x(0),x(1),⋯,x(k)).迭代公式为:
x
(
k
+
1
)
=
B
0
x
(
k
)
+
f
\bm x^{(k+1)}=\bm B_0x^{(k)}+f
x(k+1)=B0x(k)+f
k
=
0
,
1
,
2
,
⋯
k=0,1,2,\cdots
k=0,1,2,⋯表示迭代次数。迭代10次后,
x
(
10
)
=
(
3.000032
,
1.999874
,
0.999881
)
T
x^{(10)}=(3.000032,1.999874,0.999881)^T
x(10)=(3.000032,1.999874,0.999881)T
与精确值比较一下
∣
∣
ϵ
(
10
)
∣
∣
=
x
(
10
)
−
x
∗
=
0.000125
\mid \mid \epsilon^{(10)} \mid \mid=x^{(10)}-x^*=0.000125
∣∣ϵ(10)∣∣=x(10)−x∗=0.000125
除了上述迭代法、还有 Jacobi迭代法、高斯-塞德尔迭代法、超松弛法、共轭梯度法等。
3.2梯度下降法
对于一般函数
f
(
x
)
f(x)
f(x)求最值问题怎么与方程求解关联起来呢?
从微积分中我们知道如果函数
f
(
x
)
f(x)
f(x)在有界闭区域D上连续,那么
f
(
x
)
f(x)
f(x)在D上必定能取得最大值和最小值,取得最大值或最小值的点既可能在D的内部,也可能在D的边界上。假定函数在D上连续,在D内可微且有有限个驻点,这时函数的D的内部取得最大值(最小值),那么这个最大值(最小值)也是函数的极大值(极小值)。因此求解最值问题,一般先求D内驻点,再求边界上的最值点,比较驻点和边界点的最值 ,其中最大的就是最大值,最小的就是最小值。在实际求解中,如果知道最值点在D内取得,直接求解
f
(
x
)
f(x)
f(x)的极值即可。
结合机器学习的训练过程,目的就是将成本函数
f
(
x
)
=
c
o
s
t
(
x
)
f(x)=cost(x)
f(x)=cost(x)降为最小值,实际情况下,成本函数的最值在内部取得。
f
(
x
)
f(x)
f(x)的极值点是
f
′
(
x
)
=
0
f'(x)=0
f′(x)=0的点。
成本函数一般是非线性的,这时需要迭代求解,求解极小值按照函数减小的方向寻找,那么减小最快的方向是梯度下降的方向,这就是梯度下降法的由来。迭代公式表示为:
x
k
+
1
=
x
k
+
ρ
k
∇
f
(
x
k
)
x_{k+1}=x_k+\rho_k \nabla f(x_k)
xk+1=xk+ρk∇f(xk)
其中
ρ
k
\rho_k
ρk表示学习率,迭代跨度,用于调节计算速度。