2.1模型描述
**预测房价问题**
以之前的房屋交易问题为例,假使我们回归问题的训练集(Training Set)如下表所示:
我们将要用来描述这个回归问题的标记如下:
m 代表训练集中实例的数量
x 代表特征/输入变量
y 代表目标变量/输出变量
(x,y) 代表训练集中的实例
(x^((i)),y^((i))) 代表第i 个观察实例
h 代表学习算法的解决方案或函数也称为假设(hypothesis)
尽量找出一个函数使得其能够很好地拟合已知训练集的样本点
这是一个监督学习的过程,我们可以把原始房价数据最为训练集输入,进而找到合适准确的输出函数 , 根据输入的 值来得出 值, 值对应房子的价格 即h 是一个从 到 的函数映射。
- 一种可能的表达方式为: ,因为只含有一个特征/输入变量,因此这样的问题叫作单变量线性回归问题。
2.2 代价函数
把最有可能的直线与我们的数据相拟合
选择合适的参数(parameters) 和
目标便是选择出可以使得建模误差的平方和能够最小的模型参数。 即使得代价函数
我们需要研究的是的最小值,但是我们实际考虑的是 的最小值,
为了尝试减少平均误差,我们的目标便是尽量减少1/2m通常求 的最小值,并记
代价函数为:
当然,还有其他代价函数可以解决回归问题,但是平方误差代价函数是最常用的手段。
- 思考损失函数为何取误差的平方形式呢?
代价函数表示每个训练数据点到拟合直线的竖直距离的平方和,通过最小化这个代价函数来求得拟合直线的最佳参数 和 ,实际上就是求代价函数 在取得最小值情况下 和 的值。那么损失函数为什么要用平方差形式呢,而不是绝对值形式,一次方,三次方,或四次方形式?
简单的说,是因为使用平方形式的时候,使用的是“最小二乘法”的思想,这里的“二乘”指的是用平方来度量观测点与估计点的距离(远近),“最小”指的是参数值要保证各个观测点与估计点的距离的平方和达到最小。
2.3代价函数的理解
回顾上一讲,我们给出了代价函数的定义
Hypothesis:
Parameters: 和
Cost Function:
Goal:
简化拟合函数:
令,我们的假设函数变为:
代价函数变为:
目标变为求:
使用简化的代价函数可以让我们更易理解代价函数的含义
分别考虑参数等于1,0.5,0的情况,并计算对应的 代价函数
当然也可以去其他值,从而我们能根据对应的的值,会出代价函数的图像
当参数为1时,代价函数值为0
当参数为0.5时,代价函数值为0 .58
当参数为0时,代价函数值为2.33
当参数为-0.5时,代价函数值为5.25
当参数为1.5时,代价函数值为0.58
得到代价函数的 图像为:
目标函数是:
从而,我们可以知道当参数 为1时,代价函数 的值为0。
2.4代价函数的理解
Hypothesis:
Parameters: 和
Cost Function:
Goal:
和上次不同的是,这次要保留全部参数
我们使用前面房价问题的例子 : =50和 =0.06,可得:
回顾前边只有一个参数的时候,画出的图像是一条抛物线
但是现在有两个参数,画出的图像应该是一个碗状,而且与训练集有关
可能会得到这样一个3D图像,x轴表示 ,y轴表示 ,z轴表示
不同 和 的取值对应着不同的代价函数,在3D图上就对应着不同的高度,使用等高线来描述代价函数
下面是等高线图的例子:
右边的 的图像,每个椭圆上的点都代表着取值相同的点
从等高线图我们可以分析拟合程度的好坏
在接下来的学习中,我们会讨论一种可以自动找到使的最小值
2.5梯度下降
前边我们已经定义了可以将代价函数J最小化的梯度下降法,梯度下降是很常用的方法,不仅被用于线性回归中,还用于机器学习的众多领域。
使用梯度下降法,最小化其他函数而不仅仅是最小化线性回归中的代价函数
用梯度下降法最小化任意函数
有函数,它可能是线性回归的代价函数,也可能是任意函数
初始化=0 和 =0,不停地一点点的改变 和 来使 变小,直到我们找到J的最小值或者局部最小值。
例如:我们要使下图中的值最小,注意到 坐标轴,x轴表示 ,y轴表示 ,z轴表示 即图形表面的高度就是J的值
把这个图像想象成一座山,站在山上的某一点,环顾四周,寻找最佳的下山方向
你找到最佳的下山方向,像前走了一小步,每次向前走一步,你都要思考那个方向是最佳下山方向,通过判断并向前走一小步,重复上述步骤直至收敛至局部最低的点
梯度下降有趣的特点是:如果你的起始位置向右偏移一点点,站在一个新的位置,你会得到一个完全不同的局部最优解
梯度下降的数学原理
其中 是学习率(learning rate),它决定了我们沿着能让代价函数下降程度最大的方向向下迈出的步子有多大,在批量梯度下降中,我们每一次都同时让所有的参数减去学习率乘以代价函数的导数。
梯度下降中,我们要更新 和 ,当 和 时,会产生更新,所以你将更新 和 。实现梯度下降算法的微妙之处是,在这个表达式中,如果你要更新这个等式,你需要同时更新 和 ,我的意思是在这个等式中,我们要这样更新:
:= ; := ;
实现方法是:你应该计算公式右边的部分,通过那一部分计算出 和的值,然后同时更新 和 。
在梯度下降算法中,同时更新是一种常用方法;之后会讲到,同步更新是更自然的实现方法。
2.6梯度下降的直观理解
回顾一下,前边给出了梯度下降的定义,接下来我们将更深入研究感受一下梯度下降算法到底是做什么的,以及该算法的意义。
梯度下降算法如下:
描述:对 赋值,使得 按梯度下降最快方向进行,一直迭代下去,最终得到局部最小值。其中 是学习率(learning rate),它决定了我们沿着能让代价函数下降程度最大的方向向下迈出的步子有多大。
对于这个问题,求导的目的,基本上可以说取这个红点的切线,就是这样一条红色的直线,刚好与函数相切于这一点,让我们看看这条红色直线的斜率,就是这条刚好与函数曲线相切的这条直线,这条直线的斜率正好是这个三角形的高度除以这个水平长度,现在,这条线有一个正斜率,也就是说它有正导数,因此,我得到的新的 , 更新后等于 减去一个正数乘以 。
如果 太小或 太大会出现什么情况:
如果 太小了,即我的学习速率太小,结果就是只能这样像小宝宝一样一点点地挪动,去努力接近最低点,这样就需要很多步才能到达最低点,所以如果太小的话,可能会很慢,因为它会一点点挪动,它会需要很多步才能到达全局最低点。
如果太大,那么梯度下降法可能会越过最低点,甚至可能无法收敛,下一次迭代又移动了一大步,越过一次,又越过一次,一次次越过最低点,直到你发现实际上离最低点越来越远,所以,如果 太大,它会导致无法收敛,甚至发散。
如果我们预先把 放在一个局部的最低点,你认为下一步梯度下降法会怎样工作?
假设你将假设你将 初始化在局部最低点,在这儿,它已经在一个局部的最优处或局部最低点。结果是局部最优点的导数将等于零,因为它是那条切线的斜率。这意味着你已经在局部最优点,它使得 不再改变,也就是新的等于原来的 ,因此,如果你的参数已经处于局部最低点,那么梯度下降法更新其实什么都没做,它不会改变参数的值。这也解释了为什么即使学习速率 保持不变时,梯度下降也可以收敛到局部最低点。
小结
在梯度下降法中,当我们接近局部最低点时,梯度下降法会自动采取更小的幅度,这是因为当我们接近局部最低点时,很显然在局部最低时导数等于零,所以当我们接近局部最低时,导数值会自动变得越来越小,所以梯度下降将自动采取较小的幅度,这就是梯度下降的做法。所以实际上没有必要再另外减小 。
这就是梯度下降算法,你可以用它来最小化任何代价函数J ,不只是线性回归中的代价函数J 。
2.7线性回归的梯度下降
回顾一下,前边我们讲了梯度下降算法,线性回归模型以及平方差代价函数
本讲讲梯度下降与平方差代价函数相结合得到线性回归的算法,它可以用直线回归来拟合数据
将梯度下降用于最小化平方差代价函数,为了应用梯度下降,关键在于写好梯度下降代码,关键步骤是这个导数项,这个代价函数到底是什么?
当 时:
当 时:
则算法改写成:
Repeat {
}
在梯度下降中,在计算微分求导项时,我们需要进行求和运算,所以,在每一个单独的梯度下降中,我们最终都要计算这样一个东西,这个项需要对所有m 个训练样本求和。
计算这些偏导数,从上面这个方程到下面任意一个方程
如果你懂积分,你完全可以自己算, 然后可以验证一个下结果,如果你不太熟悉微积分,也比比担心,直接用结果就好,不需要指定微积分这些,在做功课时,把梯度下降法应用进去就好
当介绍玩这些或算出微积分即代价函数的斜率后,然后可以带回我们的梯度下降算法
这里是回归的梯度下降法,不断重复该过程直至收敛
关注梯度下降时,要注意一些细节,如同时更新 和
如何根据从哪里初始化决定最终取到不同的局部最优解?
你可以决定从上图中的两处任意一处结束,但梯度下降代价函数,线性回归代价函数总是一个碗状的图像,用术语讲就是凸函数
不太正规的凸函数是一个弓形,有时可能没有局部最优解,只有一个全局最优解,当计算这种代价函数的梯度下降时,只要使用的是线性回归,它总是收敛到全局最优解
让我们来看下这个算法的使用,这里有假设曲线h和代价函数J
当梯度在下降时,代价函数就在下降 ,通过不断的梯度下降,假设函数似乎越来越符合
数据,最终找到全局最小值。
这个全局最小对应的假设曲线很好地拟合了数据,这就是梯度下降。