【机器学习】梯度下降法

一、简介

梯度下降法(gradient decent)是一个最优化算法,通常也称为最速下降法。常用于机器学习和人工智能当中用来递归性地逼近最小偏差模型

梯度下降法是求解无约束最优化问题的一种最常用的方法,它是一种迭代算法,每一步需要求解目标函数的梯度向量。

问题抽象

[公式] 是 [公式] 上具有一阶连续偏导数的函数,要求解的无约束问题是: [公式] , 其中 [公式]表示目标函数 [公式] 的极小值点

关键概念

  • 迭代:选取适当初始值 [公式] ,不断迭代更新 [公式] 的 值,直至收敛
  • 梯度下降:负梯度方向是使函数值下降最快的方向,我们在迭代的每一步都以负梯度方向更新 [公式]的值
  • 收敛:给定一个精度 [公式] ,在迭代的每一轮根据梯度函数 [公式] 计算梯度 [公式] , [公式] 时认为收敛
  • 学习率:也叫做步长,表示在每一步迭代中沿着负梯度方向前进的距离

二、原理

梯度下降法,顾名思义,从高处寻找最佳通往低处的方向,然后下去,直到找到最低点。我们可以看到,J(θ0,θ1)是以θ0,θ1为自变量的函数,它们的关系如图1中所示。图中,起始点的黑色十字从红色的高坡上,一步一步选择最佳的方向通往深蓝色的低谷,这其实就是梯度下降法的作用。

                                                                       图1

      微妙的是图1中的低谷有很多个,选择不同的起始点,最终达到的低谷也会有所不同。如图2所示,黑色十字跑向了另外一个低谷。此时有些人就会问:为什么会产生这种现象?其实,原因很简单,梯度下降法在每次下降的时候都要选择最佳方向,而这个最佳方向是针对局部来考虑的,不同的起始点局部特征都是不同的,选择的最佳方向当然也是不同,导致最后寻找到的极小值并不是全局极小值,而是局部极小值。由此可以看出,梯度下降法只能寻找局部极小值。一般凸函数求极小值时可以使用梯度下降法(当目标函数是凸函数时,梯度下降法是全局的最优解,一般情况下梯度下降法的解不一定是全局最优解)。

    

                                                                    图2

      梯度下降法的公式为:

                                                                   (1)

 

      公式(1)中“:=”符号代表赋值,并不是代表“等于”,J(θ0,θ1)是需要求极小值的函数。

 

直观理解

以下图为例,开始时我们处于黑色圆点的初始值(记为 [公式] ),我们需要尽快找到函数的最小值点,最快的方法就是沿着坡度最陡的方向往下走

算法细节

由于 [公式] 具有一阶连续导函数,若第 [公式] 次迭代值为 [公式] ,则可将 [公式] 在 [公式] 附近进行一阶泰勒展开:[公式]

其中 [公式] 在 [公式] 的梯度。
接着我们求出第 [公式] 次的迭代值 [公式] :[公式]

其中 [公式] 是搜索方向,取负梯度方向 [公式] , [公式] 是步长,需满足:[公式]

算法实现

  • 输入:目标函数 [公式] ,梯度函数 [公式] ,计算精度 [公式]
  • 输出: [公式] 的极小值点 [公式]
  • 步骤:
  1. 取初始值 [公式] ,置 [公式] 为 [公式]
  2. 计算 [公式]
  3. 计算梯度 [公式] ,当 [公式] 时停止迭代,令 [公式] ;否则,令 [公式] ,求 [公式] ,使 [公式]
  4. 令 [公式] ,计算 [公式] ,当 [公式] 或 [公式] 时停止迭代,令 [公式]
  5. 否则,令 [公式] ,回到步骤3

算法调优

    • 学习率:学习率太小时收敛过慢,但太大时又会偏离最优解
    • 初始值:当损失函数是凸函数时,梯度下降法得到的解是全局最优解;当损失函数是非凸函数时,得到的解可能是局部最优解,需要随机选取初始值并在多个局部最优解之间比较
    • 归一化:如果不归一化,会收敛得比较慢,典型的情况就是出现“之”字型的收敛路径

三、使用方式:以线性回归为例

设线性回归的假设函数为:

                                                                           (2)

 设代价函数为:

                                               (3)

 目标:寻找J(θ0,θ1)的最小值。

 措施:使用梯度下降法

 原理:根据公式(1),可以知道求参数θ,下一步的θ是由上一步的θ减去α乘以J(θ0,θ1)在上一点的斜率值产生的,如图3所示,然后不断迭代,当θ值不变时,J(θ0,θ1)达到极小值。

               

 

                                                                图3

 步骤: 不断执行以下公式(4),直到公式(1)收敛,即达到极小值。

              (4)

             注意:公式(4)中各行不能调换顺序,否则并不是梯度下降法

             比如公式(5)这种形式,θ0刚更新完,马上就用于下一步的θ1的更新计算,脱离了梯度下降法的意图。

                                                                       (5)

 

四、如何提高梯度下降法的效率

主要有两种方法:

1、特征值x的缩放

     why? ——  很多人也许会问:为什么要缩放特征值?缩放特征值x就能提高效率?

     用图4来讲解,J(θ)是假设函数hθ(x)=θ0+θ1x1+θ2x2的代价函数,图中J(θ)关于θ1、θ2的等高线图中带箭头的红线是迭代的分步,左边是x1、x2数量级相差较大的时候,红线弯来弯去,迭代效率很低,右边则是x1、x2数量级相差较小的时候,带箭头的红线很快到达了等高线图的最低点,取得极小值,效率很高。所谓的缩放特征值x,就是让所有的x值在数量级上相差不大,达到提高迭代效率的目的。

                

 

                                                                          图4 

缩放特征值的方法大致有以下三种:

  • 除以最大值   (以x1为例,将x1所有样本的值除以max{x1},此时-1≤x1≤1)
  • 均值归一化   (x1:=(x1-μ)/(max{x1}-min{x1}),其中μ为x1的平均值,此时-0.5≤x1≤0.5)  
  • 均值方差归一化

     

2、选择适当的α

       公式(1)中α起着很重要的作用,如果选的太小,则会出现图5左边这种情况,迭代慢;如果选的太大,则会出现图4右边这种情况,过大的α使迭代不收敛。

       

 

                                                                                                        图5

α的选择是需要通过计算一个个试,一般会这样取值(仅限参考):......,0.001,0.003,0.01,0.03,0.1,.........(以此类推)

 

参考:https://www.cnblogs.com/steed/p/7429804.html

           https://zhuanlan.zhihu.com/p/104546744

posted @ 2022-02-25 18:13  ycq2022  阅读(1447)  评论(0编辑  收藏  举报