机器学习之梯度下降法
梯度下降法:
如果你不明白梯度和梯度下降的数学含义,请先移步到:机器学习之数学基础
一个通俗易懂的例子:
如上图所示,想象一下你正站立在山的这一点上,站立在你想象的公园这座红色山上,在梯度下降算法中,我们要做的就是旋转360度,看看我们的周围,并问自己要在某个方向上,用小碎步尽快下山。这些小碎步需要朝什么方向?如果我们站在山坡上的这一点,你看一下周围,你会发现最佳的下山方向,你再看看周围,然后再一次想想,我应该从什么方向迈着小碎步下山?然后你按照自己的判断又迈出一步,重复上面的步骤,从这个新的点,你环顾四周,并决定从什么方向将会最快下山,然后又迈进了一小步,并依此类推,直到你接近局部最低点的位置。
梯度下降法是一种迭代方法,开始时我们随机选择一个参数的组合(),计算代价函数,然后我们寻找下一个能让代价函数值下降最多的参数组合。我们持续这么做直到到到一个局部最小值(local minimum),因为我们并没有尝试完所有的参数组合,所以不能确定我们得到的局部最小值是否便是全局最小值(global minimum),选择不同的初始参数组合,可能会找到不同的局部最小值。但是对于最小二乘的损失函数模型,比较简单只有一个最优点,所以局部最优即全局最优。
对于某个参数的梯度,其实就是J(θ)对该参数求导的结果 。已知代价函数J(θ)为:
对于某个参数每次调整的公式如下
描述:对赋值,使得按梯度下降最快方向进行,一直迭代下去,最终得到局部最小值。其中是α(learning rate )叫做学习步长,代表下降幅度,步长,小会导致收敛慢,大会导致错过最优点。它决定了我们沿着能让代价函数下降程度最大的方向向下迈出的步子有多大。
对于这个问题,求导的目的,基本上可以说取这个红点的切线,就是这样一条红色的直线,刚好与函数相切于这一点,让我们看看这条红色直线的斜率,就是这条刚好与函数曲线相切的这条直线,这条直线的斜率正好是这个三角形的高度除以这个水平长度,现在,这条线有一个正斜率,也就是说它有正导数,因此,我得到的新的,更新后等于减去一个正数乘以。
则对于来说,有:
实现梯度下降算法的微妙之处是,在这个表达式中,如果你要更新这个等式,需要同时更新和,在这个等式中,我们需要要这样更新:
:=,并更新:=。
实现方法是:你应该先计算每个公式右边的部分,通过那一部分计算出和的值,然后同时更新和。
假设训练集里面只有一个样本点,那么梯度推导过程为:
但是实际训练集中会有m个样本点,所以最终公式为:
因为θ中有多个参数,所以每次迭代对于每个参数都需要进行梯度下降,直到J(θ)收敛到最小值
这个方法称为batch gradient descent(批量梯度下降),因为每次计算梯度都需要遍历所有的样本点 ,在这个方法中:J(θ)是需要考虑所有样本的误差和 。这个方法存在的问题就是,扩展性问题,当样本点很大的时候,基本就没法算了。
其他的梯度下降法:
随机梯度下降:每次只选择一个样本,迭代速度快,但是可能方向并不会始终沿着收敛的方向。
小批量梯度下降:每次更新选择一部分数据。
特征缩放:
在我们面对多维特征问题的时候,我们要保证这些特征都具有相近的尺度,这将帮助梯度下降算法更快地收敛。
以房价问题为例,假设我们使用两个特征,房屋的尺寸和房间的数量,尺寸的值为 0-2000平方英尺,而房间数量的值则是0-5,以两个参数分别为横纵坐标,绘制代价函数的等高线图能,看出图像会显得很扁,梯度下降算法需要非常多次的迭代才能收敛。
解决的方法是尝试将所有特征的尺度都尽量缩放到-1到1之间。如图
最简单的方法是令:,其中 是平均值,是标准差.
均值归一化:
除了在特征缩放中将特征除以最大值以外,有时候我们也会进行一个称为均值归一化(mean normalization)的工作。
具体做法就是:如果你有一个特征xi你就用xi−μi来替换。这样做的目的是为了让你的特征值具有为0的平均值。很明显 我们不需要把这一步应用到x0中,因为x0中,因为x0总是等于1的,所以它不可能有为0的的平均值。
但是对其他的特征来说,比如房子的大小取值介于0 ~ 2000,并且假如房子面积的平均值是等于1000的,那么你可以用这个公式
x1=(size−1000)/2000
类似地,如果你的房子有五间卧室,并且平均一套房子有两间卧室,那么你可以使用这个公式来归一化你的第二个特征x2:
x2=(卧室数−2)/5
在这两种情况下你可以算出新的特征x1和x2x1和x2,它们的范围可以在-0.5 ~ +0.5之间,当然这肯定不对,x2的值实际上肯定会大于0.5。更一般的规律是用: (xn−μn)/Sn来替换xn
其中定义μn的意思是在训练集中特征xn的平均值。而Sn是该特征值的范围(最大值减去最小值)。
最后需要注意的是:特征缩放其实并不需要太精确,其目的只是为了让梯度下降能够运行得更快一点,让梯度下降收敛所需的循环次数更少一些而已。
梯度下降法与正规方程法的比较: