机器学习(三):梯度下降Gradient descent

为了找到更好的模型,需要找到代价函数的最小值。梯度下降是找到代价函数最小值的一种算法。

一、梯度下降算法

以线性回归为例,模型:f(x)=wx+b

平方误差代价函数:

J(w,b)=\frac{1}{2m}\sum_{i=1}^{m}(\hat{y}^{(i)}-y^{(i)})^{2}

梯度下降:

w = w - \alpha \frac{\partial }{\partial w}J(w,b)

b = b - \alpha \frac{\partial }{\partial b}J(w,b)

其中:

学习率α:0-1的正数,控制梯度下降的步幅,代价函数的导数控制下降的方向,并和学习率一起控制下降的步幅。

导数\frac{\partial }{\partial w}J(w,b):代价函数J在(w,b)点的切线斜率

二、运行梯度下降

选取一个w和b,然后在每一步中执行:

  1. tmp_w=当前w值-学习率*(J对w求导)
  2. tmp_b=当前b值-学习率*(J对b求导)
  3. 计算出的tmp_w更新到下一步的w值
  4. 计算出的tmp_b更新到下一步的b值
  5. 每一次更新w和b,使其更接近J最小值,一直到算法收敛,得到J的局部最小值

划重点:wb必须同步更新。

错误做法:计算出tmp_w后直接更新w,然后再计算temp_b,这会导致新w和旧b计算出temp_b,结果是不正确的

三、直观理解梯度下降

为什么梯度下降能找到J的最小值

以线性回归为例,模型:f(x)=wx

平方误差代价函数:

J(w)=\frac{1}{2m}\sum_{i=1}^{m}(\hat{y}^{(i)}-y^{(i)})^{2}

梯度下降:

w = w - \alpha \frac{\partial }{\partial w}J(w,b)

当选择一个w,w在最小值的右侧时,导数\frac{\partial }{\partial w}J(w,b)为正,学习率α是0-1的正数,因此每次梯度下降后,w必然减小。直至到达最小值时,导数\frac{\partial }{\partial w}J(w,b)为0,每次梯度下降后,w不变

当选择一个w,w在最小值的左侧时,导数\frac{\partial }{\partial w}J(w,b)为负,学习率α是0-1的正数,因此每次梯度下降后,w必然变大。直至到达最小值时,导数\frac{\partial }{\partial w}J(w,b)为0,每次梯度下降后,w不变

局部最小值

下图的某代价函数的三维图,可以视作山峰山谷。选取一个点(w,b),选择一个方向进行梯度下降,梯度下降的每一次更新,就迈向一个更低点,一直到达某个山谷,即局部最小值

下图是平分误差代价函数,像这种像碗状的代价函数称为凸函数Convex function。凸函数只有一个最小值

四、学习率和导数

学习率α的选择

如果学习率α太小,梯度下降能找到J的最小值,但是速度会很慢,如下图所示。

如果学习率α太大,梯度下降会越过最小值,导致无法找到最小值,无法收敛,甚至发散,如下图所示。

导数的变化规律

接近局部最小值时,导数越来越小,梯度下降的更新步长越来越小。直到,到达局部最小值时,导数变成0,w=w-α*0,w不变。

批量梯度下降Batch gradient descent

平方误差代价函数的梯度下降,每次更新参数时都会计算训练集的所有数据,这属于批量梯度下降

有一些梯度下降,每次更新参数仅计算训练集的最小集数据,不属于批量梯度下降

五、线性回归的梯度下降

以线性回归为例,模型:f(x)=wx+b

平方误差代价函数:

J(w,b)=\frac{1}{2m}\sum_{i=1}^{m}(\hat{y}^{(i)}-y^{(i)})^{2}

梯度下降:

w = w - \alpha \frac{\partial }{\partial w}J(w,b)

b = b - \alpha \frac{\partial }{\partial b}J(w,b)

可把J(w,b)代入到梯度下降算法,即:

w = w - \alpha \frac{\partial }{\partial w}J(w,b)

=w- \alpha \frac{\partial }{\partial w}(\frac{1}{2m}\sum_{i=1}^{m}(f_{w,b}(x)^{(i)}-y^{(i)})^{2})

=w- \alpha \frac{\partial }{\partial w}(\frac{1}{2m}\sum_{i=1}^{m}(wx^{(i)}+b-y^{(i)})^{2})

=w- \alpha *\frac{1}{2m}\sum_{i=1}^{m}(wx^{(i)}+b-y^{(i)})*2x^{(i)}

=w- \alpha *\frac{1}{m}\sum_{i=1}^{m}(wx^{(i)}+b-y^{(i)})x^{(i)}

=w- \alpha *\frac{1}{m}\sum_{i=1}^{m}(f_{w,b}(x^{(i)})-y^{(i)})x^{(i)}

b = b - \alpha \frac{\partial }{\partial b}J(w,b)

=b- \alpha \frac{\partial }{\partial b}(\frac{1}{2m}\sum_{i=1}^{m}(f_{w,b}(x)^{(i)}-y^{(i)})^{2})

=b- \alpha \frac{\partial }{\partial b}(\frac{1}{2m}\sum_{i=1}^{m}(wx^{(i)}+b-y^{(i)})^{2})

=b- \alpha *\frac{1}{2m}\sum_{i=1}^{m}(wx^{(i)}+b-y^{(i)})*2

=b- \alpha *\frac{1}{m}\sum_{i=1}^{m}(wx^{(i)}+b-y^{(i)})

=b- \alpha *\frac{1}{m}\sum_{i=1}^{m}(f_{w,b}(x^{(i)})-y^{(i)})

其中,求导以后多了一个系数2,b=b- \alpha *\frac{1}{2m}\sum_{i=1}^{m}(wx^{(i)}+b-y^{(i)})*2,这就是平方误差代价函数会额外除以2的原因,这样会更加简洁。

推导完成后,就可以用这个梯度算法来找到J的最小值

w=w- \alpha *\frac{1}{m}\sum_{i=1}^{m}(f_{w,b}(x^{(i)})-y^{(i)})x^{(i)}

b=b- \alpha *\frac{1}{m}\sum_{i=1}^{m}(f_{w,b}(x^{(i)})-y^{(i)})

学习来源:B站吴恩达机器学习:4.1-4.6节

  • 23
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值