斯坦福机器学习笔记 第1周 二、单变量线性回归(二)

来源:互联网 发布:免费源码加密 编辑:程序博客网 时间:2024/06/09 13:53

二、单变量线性回归(Linear Regression with One Variable)

5. 梯度下降

参考视频 : 2 - 5 - Gradient Descent (11 min).mkv

梯度下降是一个用来求函数最小值的算法,可以通过它来求出代价函数J(θ0,θ1)的最小值。梯度下降算法的思想是:开始时随机选择一个参数组合(θ0,θ1,...,θn),计算代价函数函数值,然后根据代价函数值下降最快的方向(导数)趋势计算出下一个参数组合,持续这么做直到找到一个局部最小值(local minimum),因为并没有尝试完所有的参数组合,所以不能确定我们得到的局部最小值是否是全局最小值(global minimum),选择不同的初始参数组合,可能会找到不同的局部最小值,最终找到全局最小值。如下图,

梯度下降 图示

梯度下降算法与下山问题:想象一下你站在山上一点,想用小碎步最快下山。首先旋转360度看看周围,找到最佳的下山方向(下降最快的方向)迈了一步,然后停下来再看看周围,找最佳的下山方向,持续这么做,直到达到一个周围都是平地的地方停下(因为周围已经没有可以继续下降的方向了)。

批量梯度下降(batch gradient descent)算法的公式为

Gradient descent algorithm:

repeat until convergence {

θj:=θjαθjJ(θ0,θ1)(forj=0 and j=1)
}

其中α是学习率(learning rate),它决定了我们沿着梯度下降最快的方向迈出的步子有多大。另外在梯度下降算法中,一个微妙的问题是,我们需要同时更新θ0,θ1,如下所示:

Correct: Simultaneous update

temp0:=θ0αθ0J(θ0,θ1)
temp1:=θ1αθ1J(θ0,θ1)
θ0:=temp0
θ1:=temp1

实现方法:先计算公式右边的部分,通过那一部分计算出θ0θ1的值,然后同时更新二者。同步更新是更自然的方法。P.S. 如果你不熟悉微积分或者导数的话,回去学习一下吧!

6. 梯度下降的直观理解

参考视频 : 2 - 6 - Gradient Descent Intuition (12 min).mkv

梯度下降算法如下式:

θj:=θjαθjJ(θ)

描述:对θ赋值,使得J(θ)按梯度下降最快的方向进行,一直迭代下去,最终得到局部最小值。其中α是学习率(learning rate),它决定了我们沿着梯度下降最快的方向迈出的步子有多大。

以二次函数为例:
这里写图片描述

在上图中曲线θ1处,求此处导数或者说取此点的切线,即是下降最快的方向;再乘以学习率α,得到步子的大小。

注意:如果学习率α太小,需要很多步才能到达最低点(迭代次数过多,费时);如果学习率太大,步子太大可能会越过最低点,导致无法收敛。

另外,当逐渐接近最低点时,步子会越来越小,因为导数值越来越小。移动幅度越来越小,直到最终收敛到局部最小值。所以在接近最低点时,梯度下降会自动采取越来越小的幅度,实际上没有必要另外再减小α梯度下降算法可以用来最小化任何代价函数J,不只是线性回归中的代价函数。

7. 梯度下降的线性回归

参考视频 : 2 - 7 - GradientDescentForLinearRegression (6 min).mkv

结合梯度下降和线性回归模型中的平方误差代价函数。二者如下图:

梯度下降 与 线性回归模型

对于之前的线性回归问题运动梯度下降法,关键在于求出平方代价函数的导数。即:

平方代价函数的导数

则算法写成:
Repeat{

θ0:=θ0α1mi=1m(hθ(x(i))y(i))
θ1:=θ1α1mi=1m((hθ(x(i))y(i))x(i))
}

刚刚使用的算法有时也称为批量梯度下降,指的是在梯度下降的每一步中,我们都用到了相同的训练样本。所以,在每一个单独的梯度下降中,我们最终计算这样一个东西,这个项需要对所有m个样本求和。也有其他类型的梯度下降法,不是“批量型”的,不考虑整个训练集,而只关注训练集中的一些子集。

另外,线性代数中有一种方法,在不需要多步梯度下降的情况下,也能解出代价函数J的最小值。这种方法叫做正规方程(Normal equations)。实际上在数据量较大的情况下,梯度下降法比正规方程更适用一些。

最后,祝贺大家成功学会你的第一个机器学习算法!

8.接下来的内容

参考视频 : 2 - 8 - What_’s Next (6 min).mkv

接下来会快速回顾一下线性代数,复习一下向量,矩阵等内容。通过它们,你可以实现和使用更强大的线性回归模型。事实上线性代数不仅仅在线性回归中应用广泛,其中的向量和矩阵将有助于实现之后更多的机器学习模型,并在计算上更有效率。正是因为这些向量和矩阵提供了一种有效的方式来组织大量的数据,特别是处理巨大的数据集时。不用担心,为了实现机器学习算法,我们只需要一些非常非常基础的线性代数知识。请继续往下看吧!

阅读全文
0 0
原创粉丝点击