梯度下降法和牛顿法学习笔记

梯度下降法

直接举一个二次代价函数的例子,目标函数就是:
C ( ω , b ) = 1 2 n ∑ x ∣ ∣ y ( x ) − α ∣ ∣ 2 C(\omega, b)=\frac{1}{2n}\sum_x||y(x)-\alpha||^2 C(ω,b)=2n1xy(x)α2
目的就是要寻找合适的 ω \omega ω b b b,让 C ≃ 0 C \simeq 0 C0,让 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,其函数图像如下:
梯度下降法和牛顿法学习笔记_第1张图片
⾸先把我们的函数想象成⼀个⼭⾕。只要瞄⼀眼上⾯的绘图就不难理解。我们想象有⼀个
小球从⼭⾕的斜坡滚落下来。我们的⽇常经验告诉我们这个球最终会滚到⾕底。当我们在 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=v1Cv1+v2Cv2
我们要寻找⼀种选择 ∆ 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 (v1C,v2C)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=(v1C,v2C)T
∆ v ∆v v和梯度 ∇ C ∇C C来重写 ∆ C ∆C C的变化:
∆ C ≃ ∇ C ⋅ ∆ v ∆C \simeq ∇C · ∆v CCv
∇ 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ηCC=ηC2
由于 ∥ ∇ C ∥ 2 ≥ 0 ∥∇C∥^2 ≥ 0 C20,这保证了 ∆ C ≤ 0 ∆C ≤ 0 C0,如果按照 ∆ C ≃ ∇ C ⋅ ∆ v ∆C \simeq ∇C · ∆v CCv的规则去改变 v v v,那么 C C C会⼀直减小,不会增加。
因此使用 − η ∇ C -η∇C ηC计算 ∆ v ∆v v,来移动球体的位置
v : v → v ′ = v − η ∇ C v: v → v′ = v - η∇C vvv=vηC
然后我们⽤它再次更新规则来计算下⼀次移动。如果我们反复持续这样做,我们将持续减小 C C C直到获得⼀个全局的最小值。
总结⼀下,梯度下降算法⼯作的⽅式就是重复计算梯度 ∇ C ∇C C,然后沿着相反的⽅向移动,沿着⼭⾕“滚落”。我们可以想象它像这样:
梯度下降法和牛顿法学习笔记_第2张图片

牛顿法

考虑无约束最优化问题:
m i n x ∈ R ∗ f ( x ) {min}_{x\in R^*}f(x) minxRf(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(xx(k))+21(xx(k))TH(x(k))(xx(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)=[xixj2f]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(xx(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)Hk1gk
或:
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)Hk1gk作为迭代公式的算法就是牛顿算法。

你可能感兴趣的:(人工智能,机器学习)