Machine Learning ---第一周

 参考自吴恩达老师的视频和黄海广博士的笔记

机器学习的定义:

   Tom Mitchell(卡内基梅隆大学):一个好的学习问题定义如下,一个程序被认为能从经验E中学习,解决任务T,达到性能度量值P,当且仅当,有了经验E后,经过P评判,程序在处理T时的性能有所提升。

监督学习:

  监督学习值得是我们给学习算法一个数据集。这个数据集由“正确答案”组成。在房价的例子中,我们给了一系列房子的数据,我们给定数据集中每个样本的正确价格,即它们实际的售价然后运用学习算法,算出更多的正确答案。比如你朋友呢个新房子的价格。用术语来讲,这叫做回归问题。我们试着推测出一个连续值的结果,即房子的价格。

  回归这个词的意思是,我们在试着推测出这一系列连续值属性。

  分类值得是,我们试着推测出离散的输出值。

无监督学习:

  不同于监督学习,无监督学习中没有任何的标签或者是有相同的标签活着就是没有标签。所以我们已知数据集,却不知如何处理,也未告知每个数据点师生么。别的都不知道,就是一个数据集。正对数据集,无监督学习就能判断出数据有几个不同的聚集簇。所以叫做聚类算法。

二. 单变量线性回归(Liner Regression with One Variable)

2.1 模型表示

  在整个课程中将会用小写的m来表示训练样本的数目。

  以之前的房屋交易问题为例,假使我们回归问题的训练集(Training Set)如下表所示:

我们将要用来描述这个回归问题的标记如下:
m 代表训练集中实例的数量
x 代表特征/输入变量
y 代表目标变量/输出变量
(x,y) 代表训练集中的实例
(x (i) ,y (i) ) 代表第 i 个观察实例
h 代表学习算法的解决方案或函数也称为假设(hypothesis)

这就是一个监督学习算法的工作方式,我们可以看到这里有我们的训练集里房屋价格
我们把它喂给我们的学习算法,学习算法的工作了,然后输出一个函数,通常表示为小写 h
表示。h 代表 hypothesis(假设) ,h 表示一个函数,输入是房屋尺寸大小,就像你朋友想出
售的房屋,因此 h 根据输入的 x 值来得出 y 值,y 值对应房子的价格 因此,h 是一个从
x 到 y 的函数映射。
我将选择最初的使用规则 h 代表 hypothesis,因而,要解决房价预测问题,我们实际上
是要将训练集“喂”给我们的学习算法,进而学习得到一个假设 h,然后将我们要预测的房屋
的尺寸作为输入变量输入给 h,预测出该房屋的交易价格作为输出变量输出为结果。那么,
对于我们的房价预测问题,我们该如何表达 h?

一种可能的表达方式为: h ( x ) = θ 0+ θ1x, 因为只含有一个特征/输入变量,因此这

样的问题叫作单变量线性回归问题

2.2 代价函数

参考视频: 2 - 2 - Cost Function (8 min).mkv

在这段视频中我们将定义代价函数的概念,这有助于我们弄清楚如何把最有可能的直线
与我们的数据相拟合。如图:

 

在线性回归中我们有一个像这样的训练集,m 代表了训练样本的数量,比如 m = 47。
而我们的假设函数,也就是用来进行预测的函数,是这样的线性函数形式: h   x    0   1 x 。
接 下 来 我 们 会 引 入 一 些术 语 我 们 现 在 要 做 的 便是 为 我 们 的 模 型 选 择 合适 的 参 数
(parameters)θ 0 和 θ 1, 在房价问题这个例子中便是直线的斜率和在 y 轴上的截距。
我们选择的参数决定了我们得到的直线相对于我们的训练集的准确程度,
模型所预测的
值与训练集中实际值之间的差距(下图中蓝线所指)就是建模误差(modeling error)。

我们的目标便是选择出可以使得建模误差的平方和能够最小的模型参数。 即使得代价

函数 J(θ01) = (1/2m) * Σ(i=1, m) (hθ(x(i)) - y(i))2最小。

我们绘制一个等高线图,三个坐标分别为 θ 0 和 θ 1 和 J(θ 0, θ 1 ):

代价函数也被称作平方误差函数,有时也被称为平方误差代价函数。我们之所以要求出
误差的平方和,是因为误差平方代价函数,对于大多数问题,特别是回归问题,都是一个合
理的选择。还有其他的代价函数也能很好地发挥作用,但是平方误差代价函数可能是解决回
归问题最常用的手段了。

2.3 代价函数的直观理解

 对于θ0,θ1,I want to h(x) - y more and more small

so, we could make (h(x) - y)2尽可能的小,即差异尽可能的小。

2.4  代价函数的直观理解2

  

代价函数的样子,等高线图,则可以看出在三维空间中存在一个使得 J(θ 0, θ 1 )最小的点。

通过这些图形,我希望你能更好地理解这些代价函数 J 所表达的值是什么样的,它们
对应的假设是什么样的,以及什么样的假设对应的点,更接近于代价函数 J 的最小值。

当然,我们真正需要的是一种有效的算法,能够自动地找出这些使代价函数 J 取最小值
的参数 θ 0 和 θ 1 来。

我们会遇到更复杂、更高维度、更多参数的情况,而这些情况是很难画
出图的,因此更无法将其可视化,因此我们真正需要的是编写程序来找出这些最小化代价函
数的 θ 0 和 θ 1 的值,在下一节视频中,我们将介绍一种算法,能够自动地找出能使代价函数
J 最小化的参数 θ 0 和 θ 1 的值。

2.5 梯度下降

梯度下降是一个用来求函数最小值的算法,我们将使用梯度下降算法来求出代价函数
J(θ 0 ,θ 1 ) 的最小值。

梯度下降背后的思想是:开始时我们随机选择一个参数的组合(θ 0 ,θ 1 ,...,θ n ),计算代价
函数,然后我们寻找下一个能让代价函数值下降最多的参数组合。我们持续这么做直到到到
一个局部最小值(local minimum),因为我们并没有尝试完所有的参数组合,所以不能确定
我们得到的局部最小值是否便是全局最小值(global minimum),选择不同的初始参数组合,
可能会找到不同的局部最小值。

想象一下你正站立在山的这一点上,站立在你想象的公园这座红色山上,在梯度下降算
法中,我们要做的就是旋转 360 度,看看我们的周围,并问自己要在某个方向上,用小碎步
尽快下山。这些小碎步需要朝什么方向?如果我们站在山坡上的这一点,你看一下周围,你
会发现最佳的下山方向,你再看看周围,然后再一次想想,我应该从什么方向迈着小碎步下
山?然后你按照自己的判断又迈出一步,重复上面的步骤,从这个新的点,你环顾四周,并
决定从什么方向将会最快下山,然后又迈进了一小步,并依此类推,直到你接近局部最低点
的位置。

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

其中 α 是学习率(learning rate),它决定了我们沿着能让代价函数下降程度最大的方
向向下迈出的步子有多大,在批量梯度下降中,我们每一次都同时让所有的参数减去学习速

率乘以代价函数的导数。

在梯度下降算法中,还有一个更微妙的问题,梯度下降中,我们要更新 θ 0 和 θ 1 ,当 j=0
和 j=1 时,会产生更新,所以你将更新 Jθ 0 和 Jθ 1 。实现梯度下降算法的微妙之处是,在这
个表达式中,如果你要更新这个等式,你需要同时更新 θ 0 和 θ 1 ,我的意思是在这个等式中,
我们要这样更新:
θ 0 := θ 0 ,并更新 θ 1 := θ 1 。
实现方法是:你应该计算公式右边的部分,通过那一部分计算出 θ 0 和 θ 1 的值,然后同
时更新 θ 0 和 θ 1 。
让我进一步阐述这个过程:

在梯度下降算法中,这是正确实现同时更新的方法。我不打算解释为什么你需要同时更
新,同时更新是梯度下降中的一种常用方法。我们之后会讲到,同步更新是更自然的实现方
法。当人们谈到梯度下降时,他们的意思就是同步更新。

2.6 梯度下降的直观理解

在之前的视频中,我们给出了一个数学上关于梯度下降的定义,本次视频我们更深入研
究一下,更直观地感受一下这个算法是做什么的,以及梯度下降算法的更新过程有什么意义。

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

对于这个问题,求导的目的,基本上可以说取这个红点的切线,就是这样一条红色的直
线,刚好与函数相切于这一点,让我们看看这条红色直线的斜率,就是这条刚好与函数曲线
相切的这条直线,这条直线的斜率正好是这个三角形的高度除以这个水平长度,现在,这条
线有一个正斜率,也就是说它有正导数,因此,我得到的新的 θ 1 ,θ 1 更新后等于 θ 1 减去一
个正数乘以 α。

让我们来看看如果 α 太小或 α 太大会出现什么情况:
如果 α 太小了,即我的学习速率太小,结果就是只能这样像小宝宝一样一点点地挪动,
去努力接近最低点,这样就需要很多步才能到达最低点,所以如果 α 太小的话,可能会很慢
因为它会一点点挪动,它会需要很多步才能到达全局最低点。

如果 α 太大,那么梯度下降法可能会越过最低点,甚至可能无法收敛,下一次迭代又移
动了一大步,越过一次,又越过一次,一次次越过最低点,直到你发现实际上离最低点越来

越远,所以,如果 α 太大,它会导致无法收敛,甚至发散。

假设你将 θ 1 初始化在局部最低点,在这儿,它已经在一个局部的最优处或局部最低点。
结果是局部最优点的导数将等于零,因为它是那条切线的斜率。这意味着你已经在局部最优
点,它使得 θ 1 不再改变,也就是新的 θ 1 等于原来的 θ 1 ,因此,如果你的参数已经处于局部
最低点,那么梯度下降法更新其实什么都没做,它不会改变参数的值。这也解释了为什么即
使学习速率 α 保持不变时,梯度下降也可以收敛到局部最低点。

我们来看一个例子,这是代价函数 J(θ)。

       我想找到它的最小值,首先初始化我的梯度下降算法,在那个品红色的点初始化,如果
我更新一步梯度下降,也许它会带我到这个点,因为这个点的导数是相当陡的。现在,在这
个绿色的点,如果我再更新一步,你会发现我的导数,也即斜率,是没那么陡的。随着我接
近最低点,我的导数越来越接近零,所以,梯度下降一步后,新的导数会变小一点点。然后
我想再梯度下降一步,在这个绿点,我自然会用一个稍微跟刚才在那个品红点时比,再小一
点的一步,到了新的红色点,更接近全局最低点了,因此这点的导数会比在绿点时更小。所
以,我再进行一步梯度下降时,我的导数项是更小的,θ1 更新的幅度就会更小。所以随着
梯度下降法的运行,你移动的幅度会自动变得越来越小,直到最终移动幅度非常小,你会发
现,已经收敛到局部极小值。

回顾一下,在梯度下降法中,当我们接近局部最低点时,梯度下降法会自动采取更小的
幅度,这是因为当我们接近局部最低点时,很显然在局部最低时导数等于零,所以当我们接

近局部最低时,导数值会自动变得越来越小,所以梯度下降将自动采取较小的幅度,这就是
梯度下降的做法。所以实际上没有必要再另外减小 α。

这就是梯度下降算法,你可以用它来最小化任何代价函数 J,不只是线性回归中的代价
函数 J。
在接下来的视频中,我们要用代价函数 J,回到它的本质,线性回归中的代价函数。也
就是我们前面得出的平方误差函数,结合梯度下降法,以及平方代价函数,我们会得出第一
个机器学习算法,即线性回归算法。

2.7 梯度下降的线性回归

梯度下降算法和线性回归算法比较如图:

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

j=0 时: 

j = 1时:

则算法改写成:

  

我们刚刚使用的算法,有时也称为批量梯度下降。实际上,在机器学习中,通常不太会
给算法起名字,但这个名字”批量梯度下降”,指的是在梯度下降的每一步中,我们都用到了
所有的训练样本,在梯度下降中,在计算微分求导项时,我们需要进行求和运算,所以,在
每一个单独的梯度下降中,我们最终都要计算这样一个东西,这个项需要对所有 m 个训练
样本求和。因此,批量梯度下降法这个名字说明了我们需要考虑所有这一"批"训练样本,而
事实上,有时也有其他类型的梯度下降法,不是这种"批量"型的,不考虑整个的训练集,而
是每次只关注训练集中的一些小的子集。在后面的课程中,我们也将介绍这些方法。
但就目前而言,应用刚刚学到的算法,你应该已经掌握了批量梯度算法,并且能把它应
用到线性回归中了,这就是用于线性回归的梯度下降法。

如果你之前学过线性代数,有些同学之前可能已经学过高等线性代数,你应该知道有一
种计算代价函数 J 最小值的数值解法,不需要梯度下降这种迭代算法。在后面的课程中,我
们也会谈到这个方法,它可以在不需要多步梯度下降的情况下,也能解出代价函数 J 的最小
值,这是另一种称为正规方程(normal equations)的方法。实际上在数据量较大的情况下,梯
度下降法比正规方程要更适用一些。

原文地址:https://www.cnblogs.com/PrayG/p/11110424.html