在第二讲中,主要学习了单变量线性回归(Linear Regression with One Variable)的模型表示、代价函数、梯度下降等
# 模型表示(Model Representation)
单变量线性回归问题是指只含有一个特征/输入变量,输入与输出为线性关系的回归问题,其表达式可以为$h=\theta_0+\theta_1*x$。
比如要预测住房价格,如果你朋友的房子是 1250 平方尺大小,你要告诉他们这房子能卖多少钱。这是监督学习算法中的回归问题,即我们要根据有正确答案的数据集预测一个准确的输出值,对于这个例子输出值即房屋价格;同时,还有另一种最常见的监督学习方式,叫做分类问题,当我们想要预测离散的输出值,例如,我们正在寻找癌症肿瘤,并想要确定肿瘤是良性的还是恶性的,这就是 0/1 离散输出的问题。更进一步来说,在监督学习中我们有一个数据集,这个数据集被称训练集。
* m 代表训练集中实例的数量 * x 代表特征/输入变量
* y 代表目标变量/输出变量
* (x,y) 代表训练集中的实例
* ( x(i),y(i) ) 代表第 i 个观察实例
* h 代表学习算法的解决方案或函数也称为假设(hypothesis)
上图为监督学习算法的一个工作方式:要解决房价预测问题,我们实际上 是要将训练集“喂”给我们的学习算法,进而学习得到一个假设 h,然后将我们要预测的房屋的尺寸作为输入变量x输入给 h,预测出该房屋的交易价格作为输出变量y输出为结果。其中,假设函数h可以为$h=\theta_0+\theta_1*x$
# 代价函数(Cost Function)
在线性回归中我们有一个像这样的训练集,m 代表了训练样本的数量,比如 m = 47; 而我们的假设函数,也就是用来进行预测的函数,是这样的线性函数形式:$h=\theta_0+\theta_1*x$。理解代价函数的概念将帮助我们如何找到最有可能的曲线与我们的数据拟合,以作出最正确的预测。
我们选择的参数决定了我们得到的直线相对于训练集的准确程度,模型所预测的值 与 训练集中实际值之间的差距(下图蓝线)就是建模误差。而我们的目标是选择出可以使得建模误差的平方和能够最小的模型参数, 即使得代价函数最小$$J(\theta_0,\theta_1)=\frac{1}{2m}\sum_{i=1}^m(h_\theta({x^{(i)})-y^{(i)}})^2$$ 代价函数也被称作平方误差函数,有时也被称为平方误差代价函数。我们之所以要求出误差的平方和,是因为误差平方代价函数,对于大多数问题,特别是回归问题,都是一个合理的选择。还有其他的代价函数也能很好地发挥作用,但是平方误差代价函数可能是解决回归问题最常用的手段了。
# 代价函数的直观理解(Cost Function- Intuition)
# 梯度下降(Gradient Descent)
梯度下降是一个用来求函数最小值的算法,我们将使用梯度下降算法来求出代价函数 $J(\theta_0,\theta_1)$ 的最小值。
其背后的思想是:开始时我们随机选择一个参数的组合(θ0,θ1,...,θn),计算代价函数,然后我们寻找下一个能让代价函数值下降最多的参数组合。我们持续这么做直到到到 一个局部最小值(local minimum),因为我们并没有尝试完所有的参数组合,所以不能确定 我们得到的局部最小值是否便是全局最小值(global minimum),选择不同的初始参数组合,可能会找到不同的局部最小值。
其中 α 是学习率(learning rate),它决定了我们沿着能让代价函数下降程度最大的方向 向下迈出的步子有多大;在批量梯度下降(Batch gradient descent)中,我们每一次都同时让所有的参数减去学习速 率乘以代价函数的导数。同步更新是梯度下降中的一种常用方法,当人们谈到梯度下降时,一般默认同步更新。
# 梯度下降的直观理解(Gradient Descent Intuition)
梯度下降的算法如下所示:对 θ 赋值,使得 J(θ)按梯度下降最快方向进行,一直迭代下去,最终得到局部最 小值。其中 α 是学习率(learning rate),它决定了我们沿着能让代价函数下降程度最大的方向 向下迈出的步子有多大。$$ \theta_j:=\theta_j-\alpha\frac{\partial}{\partial\theta_j}J(\theta)$$ 因此,由下图可知,当$\alpha$太小时,梯度下降非常慢,可能需要很多步才能达到局部最低点;当$\alpha$太大时,梯度下降非常快,以至于梯度可能会越过最低点,可能无法收敛甚至发散。
此外,如果我们假设$\theta_1$初始化在局部最低点,那么下一步梯度下降法会如何工作呢?答案是,局部最低点的倒数为0,这使得$\theta_1$不再发生改变,即当你的参数处在局部最低点时,梯度下降法相当于什么都没做,他不会改变参数的值,使其始终保持在局部最低点。这也就恰好解释了为什么$\alpha$固定时,梯度依然也可以收敛到局部最低点。因为,我们在接近局部最低点时,导数接近为0,使得梯度下降自动采取较小的幅度,慢慢到达局部最低点。因此,实际上没有必要再例外减小$\alpha$了
# 线性回归的梯度下降(Gradient Descent For Linear Regression)
将梯度下降算法应用到具体的拟合直线的线性回归算法里,求得代价函数的最小值,关键在于求出代价函数的导数。
因此,算法实现更新:
我们刚刚使用的算法,有时也称为批量梯度下降(Batch Gradient Descent)。Batch指的是在梯度下降的每一步中,我们都遍历了整个训练集的样本。所以,在梯度下降中,当计算偏导数时,我们需要进行求和运算;因此,在每一个单独的梯度下降中,我们最终都要计算 m 个训练样本的总和。此外,批量梯度下降法这个名字说明了我们需要考虑所有这一"批"训练样本;而事实上,有时也有其他类型的梯度下降法,不是这种"批量"梯度下降的梯度下降法:他们并没有遍历整个训练集,而是每次只关注训练集中的一些小子集。
在线性代数中,存在一种称为正规方程(Normal Equations)的方法,他不需要多步梯度下降也能解出代价函数J的最小值;但实际上,在数据量较大时,梯度下降法比正规方程更实用一些。
思考题
我们假设初始$\theta_0=\theta_1$,然后进行同步更新,进行一次梯度下降迭代后,是否仍然存在$\theta_0=\theta_1$?
解:我们假设$\theta_0=\theta_1=1$,则$$h_\theta(x)=\theta_0+\theta_1*x=1+x$$$$\theta_0=\theta_0-\frac{1}{m}\sum_{i=1}^{m}(1+x-y)$$$$\theta_1=\theta_1-\frac{1}{m}\sum_{i=1}^{m}((1+x-y)*x)$$因此,下一步梯度下降后,当且仅当1+x-y=(1+x-y)*x成立时,存在$\theta_0=\theta_1$
参考链接
1.黄海广博士的《斯坦福大学2014机器学习课程个人笔记(V4.3)》 @haiguang2000@qq.com
2.https://github.com/HuangCongQing/MachineLearning_Ng
注:码字不易,若您转载,请务必注明出处:https://www.cnblogs.com/jngwl/