机器学习之重要迭代算法梯度下降法

  • 1、梯度:梯度是导数对多元函数的推广,它是多元函数对各个自变量偏导数形成的向量。
    在这里插入图片描述
    • 一元函数 f ( x ) = 3 x 2 + 6 x f(x)=3x^2+6x f(x)=3x2+6x,它的导数(梯度)为 ▽ f ( x ) = f ′ ( x ) = 6 x + 6 ▽f(x)=f^{'}(x)=6x+6 f(x)=f(x)=6x+6,当梯度为0时, x = − 1 x=-1 x=1为极值点;
    • 多元函数 f ( x , y ) = x 2 − 2 x 2 y + y 2 f(x,y)=x^2-2x^2y+y^2 f(x,y)=x22x2y+y2,对其x和y分别求偏导形成向量为 ▽ f ( x , y ) = f ′ ( x , y ) = ( 2 x − 4 x y , 2 y − 2 x 2 y ) T ▽f(x,y)=f^{'}(x,y)=(2x-4xy,2y-2x^2y)^T f(x,y)=f(x,y)=(2x4xy,2y2x2y)T,梯度为0时,极值点为(0,0)或(1,1/2)或(-1,1/2)。
  • 2、Hessian矩阵:虽然找到了极值点,但我们不知道它是极大值点还是极小值点,因此这里引入Hessian矩阵(二阶倒数),判断依据:如果Hessian矩阵正定,函数有极小值;如果Hessian矩阵负定,函数有极大值;如果Hessian矩阵不定,则不是极值点(鞍点);正定矩阵的判定参考:这里。
    机器学习之重要迭代算法梯度下降法_第1张图片
  • 还是多元函数 f ( x , y ) = x 2 − 2 x 2 y + y 2 f(x,y)=x^2-2x^2y+y^2 f(x,y)=x22x2y+y2,对其x和y分别求偏导形成向量为 ▽ f ( x , y ) = f ′ ( x , y ) = ( 2 x − 4 x y , 2 y − 2 x 2 y ) T ▽f(x,y)=f^{'}(x,y)=(2x-4xy,2y-2x^2y)^T f(x,y)=f(x,y)=(2x4xy,2y2x2y)T,梯度为0时,极值点为(0,0)或(1,1/2)或(-1,1/2)。Hessian矩阵为
    [ 2 x y − 4 x − 4 x y 2 − 2 x 2 ] \begin{bmatrix} 2xy&-4x\\ -4xy&2-2x^2\\ \end{bmatrix} [2xy4xy4x22x2]
    H ( f ( 0 , 0 ) ) = [ 0 0 0 2 ] H(f(0,0))=\begin{bmatrix} 0&0\\ 0&2\\ \end{bmatrix} H(f(0,0))=[0002], H ( f ( 1 , 1 / 2 ) ) = [ 1 − 4 − 2 0 ] H(f(1,1/2))=\begin{bmatrix} 1&-4\\ -2&0\\ \end{bmatrix} H(f(1,1/2))=[1240], H ( f ( − 1 , 1 / 2 ) ) = [ − 1 4 2 0 ] H(f(-1,1/2))=\begin{bmatrix} -1&4\\ 2&0\\ \end{bmatrix} H(f(1,1/2))=[1240],并判断 H ( f ( 0 , 0 ) ) H(f(0,0)) H(f(0,0)), H ( f ( 1 , 1 / 2 ) ) H(f(1,1/2)) H(f(1,1/2)), H ( f ( − 1 , 1 / 2 ) ) H(f(-1,1/2)) H(f(1,1/2))分别为不定,不定和负定,因此(-1,1/2)为局部极大值。
  • 梯度下降:梯度下降法的计算过程就是沿梯度下降的方向求解极小值(也可以沿梯度上升方向求解极大值),其核心就是通过迭代找到目标函数的最小值,或者收敛到最小值。

梯度下降法计算过程

  • 输入:目标函数 f ( x ) f(x) f(x),梯度函数 g ( x ) = ▽ f ( x ) g(x)=▽f(x) g(x)=f(x),计算精度 ϵ \epsilon ϵ
  • 输出: f ( x ) f(x) f(x)的极小点 x ∗ x^* x
  • (1)取初始值 x ( 0 ) ∈ R n x^{(0)}\in R^n x(0)Rn,置 k = 0 k=0 k=0
  • (2)计算 f ( x ( k ) ) f(x^{(k)}) f(x(k))
  • (3)计算梯度 g ( k ) = g ( x ( k ) ) g(k)=g(x^{(k)}) g(k)=g(x(k)),当 ∣ ∣ g k ∣ ∣ < ϵ ||g_k||<\epsilon gk<ϵ时,停止迭代,令 x ∗ = x ( k ) x^*=x^{(k)} x=x(k);否则,令 p k = − g ( x ( k ) ) p_k=-g(x^{(k)}) pk=g(x(k)),求 λ k \lambda_k λk,使
    f ( x ( k ) + λ k p k ) = m i n λ > = 0 f ( x ( k ) + λ p k ) f(x^{(k)}+\lambda_kp_k)=min_{\lambda>=0}f(x^{(k)}+\lambda p_k) f(x(k)+λkpk)=minλ>=0f(x(k)+λpk)
  • (4)置 x ( k + 1 ) = x ( k ) + λ k p k x^{(k+1)}=x^{(k)}+\lambda_kp_k x(k+1)=x(k)+λkpk,计算 f ( x ( k + 1 ) ) f(x^{(k+1)}) f(x(k+1));当 ∣ ∣ f ( x ( k + 1 ) ) − f ( x ( k ) ) ∣ ∣ < ϵ ||f(x^{(k+1)})-f(x^{(k)})||<\epsilon f(x(k+1))f(x(k))<ϵ或者 ∣ ∣ x ( k + 1 ) − x ( k ) ∣ ∣ < ϵ ||x^{(k+1)}-x^{(k)}||<\epsilon x(k+1)x(k)<ϵ,停止迭代,令 x ∗ = x ( k + 1 ) x^*=x^{(k+1)} x=x(k+1)
  • (5)否则,置 k = k + 1 k=k+1 k=k+1,转(3)
    当目标函数为凸函数时,梯度下降法的解是全局最优解,因为凸函数只有一个最低点,必是全局最优解。一般情况下,其解不保证是全局最优解。梯度下降法的收敛速度也未必是最快的。
  • 凸函数:简单来说就是曲线上的点的y值均小于两个端点连起来的直线上的值。
    机器学习之重要迭代算法梯度下降法_第2张图片
    机器学习之重要迭代算法梯度下降法_第3张图片

梯度下降法实例

  • 函数 f ( x ) = f ( x 1 , x 2 ) = 1 3 x 1 2 + 1 2 x 2 2 ​ f\left ( x \right )=f\left ( x_{1},x_{2}\right )=\frac{1}{3}x_{1}^{2}+\frac{1}{2}x_{2}^{2}​ f(x)=f(x1,x2)=31x12+21x22的极小值点。
    • 设初始点为 x 1 = ( x 1 ( 1 ) , x 2 ( 1 ) ) ⊤ = ( 3 , 2 ) ⊤ x_{1}=\left ( x_{1}^{\left ( 1 \right )},x_{2}^{\left ( 1 \right )} \right )^{\top }=\left ( 3,2 \right )^{\top } x1=(x1(1),x2(1))=(3,2),学习率设为 λ \lambda λ。梯度为 g ( x 1 , x 2 ) = ( 2 3 x 1 , x 2 ) T g(x_1,x_2)=(\frac 2 3x_1,x_2)^T g(x1,x2)=(32x1,x2)T

    • 初始点处梯度为 g ( x ( 1 ) ) = ( 2 , 2 ) T ≠ 0 g(x^{(1)})=(2,2)^T\neq 0 g(x(1))=(2,2)T=0,因此更新迭代公式带入原函数中,得:
      f ( x ( 2 ) ) = f ( x ( 1 ) − λ g ( x ( 1 ) ) ) = 10 3 λ 2 − 8 λ + 5 , 此 时 λ 1 ∗ = 6 5 f(x^{(2)})=f(x^{(1)}-\lambda g(x^{(1)}) )=\frac{10}{3}\lambda ^{2}-8\lambda +5,此时\lambda _{1}^{*}=\frac{6}{5} f(x(2))=f(x(1)λg(x(1)))=310λ28λ+5λ1=56为函数极小点,因此:
      x ( 2 ) = x ( 1 ) − λ 1 ∗ g ( x ( 1 ) ) = ( 3 5 , − 2 5 ) ⊤ ​ x^{(2)}=x^{(1)}-\lambda _{1}^{*}g(x^{(1)})=\left ( \frac{3}{5},-\frac{2}{5} \right )^{\top }​ x(2)=x(1)λ1g(x(1))=(53,52),一次迭代结束;

    • 再将 x ( 2 ) x^{(2)} x(2)作为初始点,重复上面的迭代步骤,得到: x ( 3 ) = ( 3 5 2 , 2 5 2 ) ⊤ x^{(3)}=\left ( \frac{3}{5^{2}},\frac{2}{5^{2}} \right )^{\top } x(3)=(523,522)

    • 根据规律显然可知, x k = ( 3 5 k − 1 , ( − 1 ) k − 1 2 5 k − 1 ) ⊤ ​ x_{k}=\left(\frac{3}{5^{k-1}},\left ( -1 \right )^{k-1}\frac{2}{5^{k-1}} \right )^{\top }​ xk=(5k13,(1)k15k12)

参考:
机器学习算法:梯度下降法——原理篇
一文掌握梯度下降法 这篇步骤比较详细
机器学习梯度下降法举例 这篇有代码讲解

你可能感兴趣的:(机器学习,机器学习,算法,线性代数)