吴恩达机器学习(九)多元梯度下降法演练

1.特征缩放

  现有一个机器学习的问题,这个问题有多个特征,如果确保这些特征都处在一个相近的范围,即确保不同特征的取值在相近的范围内,这样梯度下降法就能更快地收敛。
  假设有一个具体的两个特征的问题,其中x1是房屋面积大小,它的取值是[0,2000],x2是卧室的数量,取值在[1,5]之间。如果画出代价函数J(θ)的等值线,情况如图1所示。
在这里插入图片描述

图1:等值线
  如图1,假想这个函数的变量只有θ1和θ2,但如果x1的取值范围远远大于x2的取值范围的话,最终画出来的代价函数J(θ)的等值线就会呈现出一种非常歪斜并且椭圆的形状,如果在这种代价函数上运行梯度下降的话,梯度最终可能需要花很长一段时间,并且可能会来回波动,然后会经过很长时间最终才收敛到全局最小值,如图2。

在这里插入图片描述

图2
  在这样的情况下,一种有效的方法是进行特征缩放。具体来说,把特征x1定义为房子的面积大小除以2000,x2定义为卧室的数量除以5,代价函数J(θ)的等值线就会偏移得没那么严重,在这样的代价函数上来执行梯度下降的话,梯度下降算法会更直接通向全局最小,这个例子最终会使两个特征x1和x2都在0和1之间,如图3右侧所示。

在这里插入图片描述

图3
  更一般地,我们执行特征缩放时,通常的目的是将特征的取值约束到[-1,1]的范围内,-1和+1这两个数字并不是太重要,只要特征值在[-1,1]的左右波动都可以,如[0,3],[-2,1]之类,但若其范围在[-100,100]或[-0.0001,0.0001]是不合适的。如图4:

在这里插入图片描述

图4

  在特征缩放中,有时候我们也会进行一个称为均值归一化的工作,如果你有一个特征xi,那么可以用xi-ui来替换,让特征值具有为0的平均值,我们不需要把这一步应用到x0中,因为x0总是等于1,不可能有为0的平均值。但是对其他的特征来说,比如房子的大小(取值介于[0,2000]),且假设房子面积但平均值等于1000,那么可以用公式x1=(size - 1000)/2000将x1的值均值归一化,在这种情况下可以算出新的特征x1。如图5.

在这里插入图片描述

图5

2.学习率

  在这里要讨论什么是调试,一些来确保梯度下降是正常工作的小技巧,以及如何选择学习率α。

  梯度下降算法所做的事情是找到一个θ值,并且希望它能够最小化代价函数J(θ),因此经常在梯度下降算法运行时给出代价函数J(θ)的值。

在这里插入图片描述
  x轴的值表示梯度下降算法的迭代次数,随着梯度下降算法的运行你很可能会得到上述那样一条曲线,曲线上一点的意义是:在x次迭代后得到某个θ值,对应的y即是在迭代后得到的θ算出的J(θ)值,所以这条曲线显示的是梯度下降的每步迭代后代价函数的值,如果梯度下降算法正常工作的话,每一步迭代后J(θ)都应该下降,这条曲线的一个用处在于帮助判断梯度下降算法是否已经收敛。
  对于每一个特定的问题,所对应的梯度下降算法所需的迭代次数可能会相差很大。实际上我们很难提前判断梯度下降算法需要多少步迭代才能收敛,通常需要画出上述的曲线来进行判断梯度下降算法是否已经收敛。
在这里插入图片描述

  也可以进行一些自动的收敛测试,即让一种算法来判断算法是否已经收敛。一个典型的例子就是,如果代阶函数J(θ)一步迭代后的下降小于一个很小的值ε,这个测试就判断函数已收敛,ε可以是10-3,但是通常要选择一个合适的阈值ε是相当困难的。
  所以通常使用上述的曲线图来进行预测。使用这种曲线图还可以提前警告我们算法有没有正常工作。
在这里插入图片描述
  总结: 如果学习率α太小的话,会遇到收剑速度慢的问题;而如果学习率α太大的话,代价函数J(θ)可能会在每次迭代都下降,甚至可能不收敛。所以为了调试所有的情形,通常绘制随迭代步数变化的曲线,可以有助于弄清楚到底发生了什么。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值