梯度下降法
直接举一个二次代价函数的例子,目标函数就是:
C
(
ω
,
b
)
=
1
2
n
∑
x
∣
∣
y
(
x
)
−
α
∣
∣
2
C(\omega, b)=\frac{1}{2n}\sum_x||y(x)-\alpha||^2
C(ω,b)=2n1x∑∣∣y(x)−α∣∣2
目的就是要寻找合适的
ω
\omega
ω和
b
b
b,让
C
≃
0
C \simeq 0
C≃0,让
y
(
x
)
y(x)
y(x)和
α
\alpha
α大小差不多。因此需要最小化这个二次代价函数。
使用
v
v
v代替
ω
\omega
ω和
b
b
b,假设
v
=
v
1
,
v
2
v=v_1,v_2
v=v1,v2,其函数图像如下:
⾸先把我们的函数想象成⼀个⼭⾕。只要瞄⼀眼上⾯的绘图就不难理解。我们想象有⼀个
小球从⼭⾕的斜坡滚落下来。我们的⽇常经验告诉我们这个球最终会滚到⾕底。当我们在
v
1
v_1
v1和
v
2
v_2
v2⽅向分别将球体移动⼀个很小的量,即
∆
v
1
∆v_1
∆v1和
∆
v
2
∆v_2
∆v2时,球体将会发⽣什么情况。微积分告诉我们 C 将会有如下变化:
∆
C
=
∂
C
∂
v
1
∆
v
1
+
∂
C
∂
v
2
∆
v
2
∆C=\frac{\partial C}{\partial v_1}∆v_1+\frac{\partial C}{\partial v_2}∆v_2
∆C=∂v1∂C∆v1+∂v2∂C∆v2
我们要寻找⼀种选择
∆
v
1
∆v_1
∆v1和
∆
v
2
∆v_2
∆v2的⽅法使得
∆
C
∆C
∆C为负;即,我们选择它们是为了让球体滚落。定义
∆
v
∆v
∆v为
v
v
v变化的向量,
∆
v
=
(
∆
v
1
,
∆
v
2
)
T
∆v = (∆v1, ∆v2)^T
∆v=(∆v1,∆v2)T。
我们也定义
C
C
C的梯度为偏导数的向量,
(
∂
C
∂
v
1
,
∂
C
∂
v
2
)
T
(\frac{\partial C}{\partial v_1},\frac{\partial C}{\partial v_2})^T
(∂v1∂C,∂v2∂C)T我们⽤
∇
C
∇C
∇C来表⽰梯度向量,即:
∇
C
=
(
∂
C
∂
v
1
,
∂
C
∂
v
2
)
T
∇C=(\frac{\partial C}{\partial v_1},\frac{\partial C}{\partial v_2})^T
∇C=(∂v1∂C,∂v2∂C)T
⽤
∆
v
∆v
∆v和梯度
∇
C
∇C
∇C来重写
∆
C
∆C
∆C的变化:
∆
C
≃
∇
C
⋅
∆
v
∆C \simeq ∇C · ∆v
∆C≃∇C⋅∆v
∇
C
∇C
∇C把
v
v
v的变化关联为
C
C
C的变化,正如我们期望的⽤梯度来表⽰。当选择:
∆
v
=
−
η
∇
C
∆v =-η∇C
∆v=−η∇C时能够让
∆
C
∆C
∆C为负数。这⾥的
η
η
η是个很小的正数(称为学习速率)。那么:
∆
C
≃
−
η
∇
C
⋅
∇
C
=
η
∥
∇
C
∥
2
∆C \simeq −η∇C·∇C = η∥∇C∥^2
∆C≃−η∇C⋅∇C=η∥∇C∥2
由于
∥
∇
C
∥
2
≥
0
∥∇C∥^2 ≥ 0
∥∇C∥2≥0,这保证了
∆
C
≤
0
∆C ≤ 0
∆C≤0,如果按照
∆
C
≃
∇
C
⋅
∆
v
∆C \simeq ∇C · ∆v
∆C≃∇C⋅∆v的规则去改变
v
v
v,那么
C
C
C会⼀直减小,不会增加。
因此使用
−
η
∇
C
-η∇C
−η∇C计算
∆
v
∆v
∆v,来移动球体的位置
v
:
v
→
v
′
=
v
−
η
∇
C
v: v → v′ = v - η∇C
v:v→v′=v−η∇C
然后我们⽤它再次更新规则来计算下⼀次移动。如果我们反复持续这样做,我们将持续减小
C
C
C直到获得⼀个全局的最小值。
总结⼀下,梯度下降算法⼯作的⽅式就是重复计算梯度
∇
C
∇C
∇C,然后沿着相反的⽅向移动,沿着⼭⾕“滚落”。我们可以想象它像这样:
牛顿法
考虑无约束最优化问题:
m
i
n
x
∈
R
∗
f
(
x
)
{min}_{x\in R^*}f(x)
minx∈R∗f(x)
其中
x
∗
x^*
x∗为目标函数的极小值点。
假设
f
(
x
)
f(x)
f(x)具有二阶连续偏导数,若第
k
k
k次迭代值为
x
(
k
)
x^{(k)}
x(k),则可将
f
(
x
)
f(x)
f(x)在
x
(
k
)
x^{(k)}
x(k)附近进行二阶泰勒展开:
f
(
x
)
=
f
(
x
(
k
)
)
+
g
k
T
(
x
−
x
(
k
)
)
+
1
2
(
x
−
x
(
k
)
)
T
H
(
x
(
k
)
)
(
x
−
x
(
k
)
)
f(x)=f(x^{(k)})+g_k^T(x-x^{(k)})+\frac{1}{2}(x-x^{(k)})^TH(x^{(k)})(x-x^{(k)})
f(x)=f(x(k))+gkT(x−x(k))+21(x−x(k))TH(x(k))(x−x(k))
此处,
g
k
=
g
(
x
(
k
)
)
=
∇
f
(
x
(
k
)
)
g_k=g(x^{(k)})=∇f(x^{(k)})
gk=g(x(k))=∇f(x(k))是
f
(
x
)
f(x)
f(x)的梯度向量在点
x
(
k
)
x^{(k)}
x(k)的值,
H
(
x
(
k
)
)
H(x^{(k)})
H(x(k))是
f
(
x
)
f(x)
f(x)的海塞矩阵:
H
(
x
)
=
[
∂
2
f
∂
x
i
∂
x
j
]
m
×
n
H(x)=[\frac{\partial^2f}{\partial x_i\partial x_j}]_{m\times n}
H(x)=[∂xi∂xj∂2f]m×n
在点
x
(
k
)
x^{(k)}
x(k)的值。函数
f
(
x
)
f(x)
f(x)有几只的必要条件实在极值点处的一阶导数为0,即梯度向量为0。特别是当
H
(
x
(
k
)
)
H(x^{(k)})
H(x(k))是正定矩阵时,函数
f
(
x
)
f(x)
f(x)的极值为极小值。
牛顿法利用极小值的必要条件:
∇
f
(
x
)
=
0
∇f(x)=0
∇f(x)=0
每次迭代中从点
x
(
k
)
x^{(k)}
x(k)开始,求目标函数的极小点,作为第
k
+
1
k+1
k+1次迭代值
x
(
k
+
1
)
x^{(k+1)}
x(k+1)。具体地,假设
x
(
k
+
1
)
x^{(k+1)}
x(k+1)满足:
∇
f
(
x
(
k
+
1
)
)
=
0
∇f(x^{(k+1)})=0
∇f(x(k+1))=0
有:
∇
f
(
x
)
=
g
k
+
H
k
(
x
−
x
(
k
)
)
∇f(x)=g_k+H_k(x-x^{(k)})
∇f(x)=gk+Hk(x−x(k))
其中
H
k
=
H
(
x
(
k
)
)
H_k=H(x^{(k)})
Hk=H(x(k)),这样就有:
g
k
+
H
k
(
x
(
k
+
1
)
−
x
(
k
)
)
=
0
g_k+H_k(x^{(k+1)}-x^{(k)})=0
gk+Hk(x(k+1)−x(k))=0
因此:
x
(
k
+
1
)
=
x
(
k
)
−
H
k
−
1
g
k
x^{(k+1)} = x^{(k)}-H_k^{-1}g_k
x(k+1)=x(k)−Hk−1gk
或:
x
(
k
+
1
)
=
x
(
k
)
+
p
k
x^{(k+1)} = x^{(k)}+p_k
x(k+1)=x(k)+pk
其中,
H
k
p
k
=
−
g
k
H_kp_k=-g_k
Hkpk=−gk。
使用
x
(
k
+
1
)
=
x
(
k
)
−
H
k
−
1
g
k
x^{(k+1)} = x^{(k)}-H_k^{-1}g_k
x(k+1)=x(k)−Hk−1gk作为迭代公式的算法就是牛顿算法。