机器学习之梯度下降算法

(一)梯度下降(Gradient Descent)

   梯度下降是一个用来求函数最小值的算法。我们将使用梯度下降算法来求出代价函数 J ( θ 0 , θ 1 ) J(\theta_{0}, \theta_{1}) J(θ0,θ1) 的最小值
   即你有一个代价函数集,你要寻找最合适的参数使得这个代价函数最小!
   梯度下降算法,可以用来最小化任何代价函数。

   具体步骤:

  1. 随机选择一个参数组合 ( θ 0 , θ 1 , . . . . . . , θ n ) \left( {\theta_{0}},{\theta_{1}},......,{\theta_{n}}\right) (θ0,θ1,......,θn),这里是随机选择 ( θ 0 , θ 1 ) \left( {\theta_{0}},{\theta_{1}} \right) (θ0,θ1)
  2. 计算代价函数
  3. 通过不断改变 ( θ 0 , θ 1 ) \left({\theta_{0}},{\theta_{1}} \right) (θ0,θ1)的值,来使代价函数 J ( θ 0 , θ 1 ) J(\theta_{0}, \theta_{1}) J(θ0,θ1)不断减小,直到找到最小值(最优解),一般只能找到局部最小值(local minimum),因为我们并没有尝试完所有的参数组合,所以不能确定我们得到的局部最小值是否便是全局最小值(global minimum)。选择不同的初始参数组合,可能会找到不同的局部最小值。

重复这个步骤,直到收敛(repeat until convergence) {

​                      θ j : = θ j − α ∂ ∂ θ j J ( θ ) {\theta_{j}}:={\theta_{j}}-\alpha \frac{\partial }{\partial {\theta_{j}}}J\left(\theta \right) θj:=θjαθjJ(θ)(这就是梯度下降法的更新规则,即不断更新参数的值)
​                       α \alpha α被称为学习率,用来控制梯度下降时,我们迈出多大的步子, α \alpha α始终大于0
​ }
注意: θ j {\theta_{j}} θj代表的是第 j j j个参数

正确更新步骤应该同时更新参数:
​                      t e m p 0 : = θ 0 − α ∂ ∂ θ 0 J ( θ 0 , θ 1 ) {temp0}:={\theta_{0}}-\alpha \frac{\partial }{\partial {\theta_{0}}}J(\theta_{0}, \theta_{1}) temp0:=θ0αθ0J(θ0,θ1)
​                      t e m p 1 : = θ 1 − α ∂ ∂ θ 1 J ( θ 0 , θ 1 ) {temp1}:={\theta_{1}}-\alpha \frac{\partial }{\partial {\theta_{1}}}J(\theta_{0}, \theta_{1}) temp1:=θ1αθ1J(θ0,θ1)
​                      θ 0 : = t e m p 0 {\theta_{0}}:={temp0} θ0:=temp0
​                      θ 1 : = t e m p 1 {\theta_{1}}:={temp1} θ1:=temp1
注意:temp0和temp1的计算要在下面两个赋值操作之前,不然就会造成参数更新不同步的错误。



(1)梯度下降参数的更新过程

在这里插入图片描述
以更新 θ 1 {\theta_{1}} θ1为例:
      θ 1 : = θ 1 − α ∂ ∂ θ 1 J ( θ 1 ) {\theta_{1}}:={\theta_{1}}-\alpha \frac{\partial }{\partial {\theta_{1}}}J\left(\theta_{1} \right) θ1:=θ1αθ1J(θ1),其中 α \alpha α始终是大于0的。
     在上图中,右边的点 ( θ 1 , J ( θ 1 ) ) (\theta_{1},J(\theta_{1})) (θ1,J(θ1))的切线斜率为 ∂ ∂ θ 1 J ( θ 1 ) \frac{\partial }{\partial {\theta_{1}}}J\left(\theta_{1} \right) θ1J(θ1),即对代价函数 J ( θ 0 , θ 1 ) J(\theta_{0},\theta_{1}) J(θ0,θ1) θ 1 \theta_{1} θ1的偏导。因为切线斜率大于0,即 ∂ ∂ θ 1 J ( θ 1 ) \frac{\partial }{\partial {\theta_{1}}}J\left(\theta_{1} \right) θ1J(θ1)>0,所以 α ∂ ∂ θ 1 J ( θ 1 ) \alpha \frac{\partial }{\partial{\theta_{1}}}J\left(\theta_{1} \right) αθ1J(θ1)>0,所以 θ 1 : = θ 1 − α ∂ ∂ θ 1 J ( θ 1 ) {\theta_{1}}:={\theta_{1}}-\alpha \frac{\partial }{\partial {\theta_{1}}}J\left(\theta_{1} \right) θ1:=θ1αθ1J(θ1)会减小,即 θ 1 \theta_{1} θ1往左边方向移动,而这个点 ( θ 1 , J ( θ 1 ) ) (\theta_{1},J(\theta_{1})) (θ1,J(θ1))也会如上图蓝色箭头所示那样往函数的最小值地方靠近,一直到紫色箭头所指的地方停止。因为紫色箭头所指这里的切线斜率为0,即导数为0,即 ∂ ∂ θ 1 J ( θ 1 ) \frac{\partial }{\partial {\theta_{1}}}J\left(\theta_{1} \right) θ1J(θ1)为0,所以 θ 1 : = θ 1 − α ∂ ∂ θ 1 J ( θ 1 ) {\theta_{1}}:={\theta_{1}}-\alpha \frac{\partial }{\partial {\theta_{1}}}J\left(\theta_{1} \right) θ1:=θ1αθ1J(θ1)最终变为 θ 1 : = θ 1 − 0 {\theta_{1}}:={\theta_{1}}-0 θ1:=θ10,此时 θ 1 \theta_{1} θ1不会再发生变化。
     在上图中,左边的点 ( θ 1 , J ( θ 1 ) ) (\theta_{1},J(\theta_{1})) (θ1,J(θ1))的切线斜率为 ∂ ∂ θ 1 J ( θ 1 ) \frac{\partial }{\partial {\theta_{1}}}J\left(\theta_{1} \right) θ1J(θ1),即对代价函数 J ( θ 0 , θ 1 ) J(\theta_{0},\theta_{1}) J(θ0,θ1) θ 1 \theta_{1} θ1的偏导。因为切线斜率小于0,即 ∂ ∂ θ 1 J ( θ 1 ) \frac{\partial }{\partial {\theta_{1}}}J\left(\theta_{1} \right) θ1J(θ1)<0,所以 α ∂ ∂ θ 1 J ( θ 1 ) \alpha \frac{\partial }{\partial{\theta_{1}}}J\left(\theta_{1} \right) αθ1J(θ1)<0,所以 θ 1 : = θ 1 − α ∂ ∂ θ 1 J ( θ 1 ) {\theta_{1}}:={\theta_{1}}-\alpha \frac{\partial }{\partial {\theta_{1}}}J\left(\theta_{1} \right) θ1:=θ1αθ1J(θ1)会变大,即 θ 1 \theta_{1} θ1往右边方向移动,而这个点 ( θ 1 , J ( θ 1 ) ) (\theta_{1},J(\theta_{1})) (θ1,J(θ1))也会如上图蓝色箭头所示那样往函数的最小值地方靠近,一直到紫色箭头所指的地方停止。因为紫色箭头所指这里的切线斜率为0,即导数为0,即 ∂ ∂ θ 1 J ( θ 1 ) \frac{\partial }{\partial {\theta_{1}}}J\left(\theta_{1} \right) θ1J(θ1)为0,所以 θ 1 : = θ 1 − α ∂ ∂ θ 1 J ( θ 1 ) {\theta_{1}}:={\theta_{1}}-\alpha \frac{\partial }{\partial {\theta_{1}}}J\left(\theta_{1} \right) θ1:=θ1αθ1J(θ1)最终变为 θ 1 : = θ 1 − 0 {\theta_{1}}:={\theta_{1}}-0 θ1:=θ10,此时 θ 1 \theta_{1} θ1不会再发生变化。



(2)关于学习率的那点事

α \alpha α被称为学习率,用来控制梯度下降时,我们迈出多大的步子,

2.1学习率大小的问题

如图所示
在这里插入图片描述

      如果 α \alpha α​太小了,即学习速率太小,可能会很慢,因为它会一点点挪动,它会需要很多步才能到达全局最低点。通俗地讲,如果 α \alpha α​太小你的程序需要运行很久!
      如果 α \alpha α太大,那么梯度下降法可能会越过最低点,下一次迭代又移动了一大步,越过一次,又越过一次,一次次越过最低点,直到你发现实际上离最低点越来越远,导致无法收敛,甚至发散,如右图所示。

2.2在梯度下降算法中的学习率 α \alpha α需不需要改变?

     在梯度下降法中,当我们接近局部最低点时,梯度下降法会自动采取更小的幅度,这是因为当我们接近局部最低点时,很显然在局部最低时导数等于零,所以当我们接近局部最低时,导数值会自动变得越来越小(因为越靠近局部最低点时,切线斜率就越小,即 ∂ ∂ θ 1 J ( θ 1 ) \frac{\partial }{\partial {\theta_{1}}}J\left(\theta_{1} \right) θ1J(θ1)会越来越小,所以 α ∂ ∂ θ 1 J ( θ 1 ) \alpha \frac{\partial }{\partial {\theta_{1}}}J\left(\theta_{1} \right) αθ1J(θ1)会越来越小),所以梯度下降将自动采取较小的幅度,这就是梯度下降的做法。所以实际上没有必要再另外减小 α \alpha α

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值