【机器学习】梯度下降法
一、简介
梯度下降法(gradient decent)是一个最优化算法,通常也称为最速下降法。常用于机器学习和人工智能当中用来递归性地逼近最小偏差模型。
梯度下降法是求解无约束最优化问题的一种最常用的方法,它是一种迭代算法,每一步需要求解目标函数的梯度向量。
问题抽象
 是 
 上具有一阶连续偏导数的函数,要求解的无约束问题是: 
 , 其中 
表示目标函数 
 的极小值点
关键概念
- 迭代:选取适当初始值 
,不断迭代更新
的 值,直至收敛
 - 梯度下降:负梯度方向是使函数值下降最快的方向,我们在迭代的每一步都以负梯度方向更新 
的值
 - 收敛:给定一个精度 
,在迭代的每一轮根据梯度函数
计算梯度
,
时认为收敛
 - 学习率:也叫做步长,表示在每一步迭代中沿着负梯度方向前进的距离
 
二、原理
梯度下降法,顾名思义,从高处寻找最佳通往低处的方向,然后下去,直到找到最低点。我们可以看到,J(θ0,θ1)是以θ0,θ1为自变量的函数,它们的关系如图1中所示。图中,起始点的黑色十字从红色的高坡上,一步一步选择最佳的方向通往深蓝色的低谷,这其实就是梯度下降法的作用。

图1
微妙的是图1中的低谷有很多个,选择不同的起始点,最终达到的低谷也会有所不同。如图2所示,黑色十字跑向了另外一个低谷。此时有些人就会问:为什么会产生这种现象?其实,原因很简单,梯度下降法在每次下降的时候都要选择最佳方向,而这个最佳方向是针对局部来考虑的,不同的起始点局部特征都是不同的,选择的最佳方向当然也是不同,导致最后寻找到的极小值并不是全局极小值,而是局部极小值。由此可以看出,梯度下降法只能寻找局部极小值。一般凸函数求极小值时可以使用梯度下降法(当目标函数是凸函数时,梯度下降法是全局的最优解,一般情况下梯度下降法的解不一定是全局最优解)。
    
图2
梯度下降法的公式为:
                                           
                        (1)
公式(1)中“:=”符号代表赋值,并不是代表“等于”,J(θ0,θ1)是需要求极小值的函数。
直观理解
以下图为例,开始时我们处于黑色圆点的初始值(记为  ),我们需要尽快找到函数的最小值点,最快的方法就是沿着坡度最陡的方向往下走
算法细节
由于  具有一阶连续导函数,若第 
 次迭代值为 
 ,则可将 
 在 
 附近进行一阶泰勒展开:
其中  在 
 的梯度。
接着我们求出第  次的迭代值 
 :
其中  是搜索方向,取负梯度方向 
 , 
 是步长,需满足:
算法实现
- 输入:目标函数 
,梯度函数
,计算精度
 - 输出: 
的极小值点
 - 步骤:
 
- 取初始值 
,置
为
 - 计算 
 - 计算梯度 
,当
时停止迭代,令
;否则,令
,求
,使
 - 令 
,计算
,当
或
时停止迭代,令
 - 否则,令 
,回到步骤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
                    
                

                
            
        
浙公网安备 33010602011771号