0%

第一周

[TOC]

引言(Introduction)

1.1 欢迎

机器学习是目前信息技术中最激动人心的方向之一。在这门课中,你将学习到这门技术的前沿,并可以自己实现学习机器学习的算法。

这里有一些机器学习的案例。

  • 数据库挖掘:机器学习被用于数据挖掘的原因之一是网络和自动化技术的增长,这意味着,我们有史上最大的数据集
    • 比如说,大量的硅谷公司正在收集web上的单击数据,也称为点击流数据,并尝试使用机器学习算法来分析数据,更好的了解用户,并为用户提供更好的服务。这在硅谷有巨大的市场。
  • 医疗记录。随着自动化的出现,我们现在有了电子医疗记录。如果我们可以把医疗记录变成医学知识,我们就可以更好地理解疾病。
  • 计算生物学。还是因为自动化技术,生物学家们收集的大量基因数据序列、DNA序列和等等,机器运行算法让我们更好地了解人类基因组,大家都知道这对人类意味着什么。
  • 工程方面,在工程的所有领域,我们有越来越大、越来越大的数据集,我们试图使用学习算法,来理解这些数据。

    • 在机械应用中,有些人不能直接操作。
      • 例如,我已经在无人直升机领域工作了许多年。我们不知道如何写一段程序让直升机自己飞。我们唯一能做的就是让计算机自己学习如何驾驶直升机。
  • 手写识别:现在我们能够非常便宜地把信寄到这个美国甚至全世界的原因之一就是当你写一个像这样的信封,一种学习算法已经学会如何读你信封,它可以自动选择路径,所以我们只需要花几个美分把这封信寄到数千英里外。

  • 事实上,如果你看过自然语言处理或计算机视觉,这些语言理解或图像理解都是属于AI领域。大部分的自然语言处理和大部分的计算机视觉,都应用了机器学习。
  • 学习算法还广泛用于自定制程序。每次你去亚马逊或NetflixiTunes Genius,它都会给出其他电影或产品或音乐的建议,这是一种学习算法。仔细想一想,他们有百万的用户;但他们没有办法为百万用户,编写百万个不同程序。软件能给这些自定制的建议的唯一方法是通过学习你的行为,来为你定制服务。
  • 最后学习算法被用来理解人类的学习和了解大脑。

然后我们会开始学习机器学习的主要问题和算法

你会了解一些主要的机器学习的术语,并开始了解不同的算法,用哪种算法更合适。

1.2 机器学习是什么?

第一个机器学习的定义来自于Arthur Samuel

  • 在进行特定编程的情况下,给予计算机学习能力的领域。
  • Samuel的定义可以回溯到50年代,他编写了一个西洋棋程序。这程序神奇之处在于,编程者自己并不是个下棋高手。但因为他太菜了,于是就通过编程,让西洋棋程序自己跟自己下了上万盘棋。通过观察哪种布局(棋盘位置)会赢,哪种布局会输,久而久之,这西洋棋程序明白了什么是好的布局,什么样是坏的布局。程序通过学习后,玩西洋棋的水平超过了Samuel。这绝对是令人注目的成果。

上述是个有点不正式的定义,也比较古老。

另一个年代近一点的定义,由Tom Mitchell提出,来自卡内基梅隆大学。

  • 一个好的学习问题定义如下,他说,一个程序被认为能从经验E中学习,解决任务T,达到性能度量值P,当且仅当,有了经验E后,经过P评判,程序在处理T时的性能有所提升。
  • 经验E 就是程序上万次的自我练习的经验而任务T 就是下棋。性能度量值P呢,就是它在与一些新的对手比赛时,赢得比赛的概率。

我们假设您的电子邮件程序会观察收到的邮件是否被你标记为垃圾邮件。在这种Email客户端中,你点击“垃圾邮件”按钮,报告某些Email为垃圾邮件,不会影响别的邮件。基于被标记为垃圾的邮件,您的电子邮件程序能更好地学习如何过滤垃圾邮件。

  • 任务T:报告垃圾邮件
  • 经验E:我标记垃圾邮件的判定
  • 性能度量P:垃圾邮件判断正确的概率

1.3 监督学习

  • 首先使用输入示例x和正确答案(标签y)来训练模型,在模型从这些输入输出学到之后采用一个全新的输入x并产生相应的输出
  • 一个例子:预测房价(回归)

    • 横轴表示房子的面积,单位是平方英尺,纵轴表示房价,单位是千美元。那基于这组数据,假如你有一个朋友,他有一套750平方英尺房子,现在他希望把房子卖掉,他想知道这房子能卖多少钱。
  • 那么关于这个问题,机器学习算法将会怎么帮助你呢?
  • 步骤:
    • 应用学习算法,可以在这组数据中画一条直线,或说,拟合一条直线,根据这条线我们可以推测出,这套房子可能卖$$150,000$,当然这不是唯一的算法。
    • 可能还有更好的,比如我们不用直线拟合这些数据,用二次方程去拟合可能效果会更好。根据二次方程的曲线,我们可以从这个点推测出,这套房子能卖接近$$200,000$。

稍后我们将讨论如何选择学习算法,如何决定用直线还是二次方程来拟合。两个方案中有一个能让你朋友的房子出售得更合理。这些都是学习算法里面很好的例子。以上就是监督学习的例子。

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

  • 另一个监督学习的例子(分类)
    • 假设说你想通过查看病历来推测乳腺癌良性与否,假如有人检测出乳腺肿瘤,恶性肿瘤有害并且十分危险,而良性的肿瘤危害就没那么大,所以人们显然会很在意这个问题。
  • 让我们来看一组数据:横轴表示肿瘤的大小,纵轴上,1和0表示是或者不是恶性肿瘤。我们之前见过的肿瘤,如果是恶性则记为1,不是恶性,或者说良性记为0。
  • 有5个良性肿瘤样本和5个恶性肿瘤样本。现在有一个朋友很不幸检查出乳腺肿瘤,那么机器学习的问题就在于,你能否估算出肿瘤是恶性的或是良性的概率。用术语来讲,这是一个分类问题。
  • 分类指的是,我们试着推测出离散的输出值:0或1良性或恶性,而事实上在分类问题中,输出可能不止两个值。

    • 比如说可能有三种乳腺癌,所以希望预测离散输出0、1、2、3。
    • 0 代表良性,1 表示第1类乳腺癌,2表示第2类癌症,3表示第3类,但这也是分类问题。
  • 在其它一些机器学习问题中,可能会遇到不止一种特征。举个例子,我们不仅知道肿瘤的尺寸,还知道对应患者的年龄。在其他机器学习问题中,我们通常有更多的特征,比如肿块密度,肿瘤细胞尺寸的一致性和形状的一致性等等

  • 上图中列举了总共5种不同的特征,坐标轴上的两种和右边的3种
    • 做分类即是找到一条分界线去很好的区分这两类,比如说在肿瘤上就是诊断这种情况是否肿瘤是良性,这里用到了两个特征
    • 但是在一些学习问题中,希望不只用3种或5种特征而是想用无限多种特征,好让算法可以利用大量的特征或者说线索来做推测。
    • 怎么处理无限多个特征,甚至怎么存储这些特征都存在问题
      • 支持向量机,里面有一个巧妙的数学技巧,能让计算机处理无限多个特征。想象一下,我没有写下这两种和右边的三种特征,而是在一个无限长的列表里面,一直写一直写不停的写,写下无限多个特征,事实上,我们能用算法来处理它们。

现在来回顾一下监督学习的基本思想是,我们数据集中的每个样本都有相应的“正确答案”。再根据这些样本作出预测,就像房子和肿瘤的例子中做的那样。还介绍了:回归问题,即通过回归来推出一个连续的输出;分类问题,其目标是推出一组离散的结果。

现在来个小测验:假设你经营着一家公司,你想开发学习算法来处理这两个问题:

  1. 你有一大批同样的货物,想象一下,你有上千件一模一样的货物等待出售,这时你想预测接下来的三个月能卖多少件?

    • 问题一是一个回归问题:有数千件货物,把它看成一个实数连续的值,因此卖出的物品也是一个连续的值。
  2. 你有许多客户,这时你想写一个软件来检验每一个用户的账户。对于每一个账户,你要判断它们是否曾经被盗过?

    • 问题二是一个分类问题:把预测的值,用 0 表示账户未被盗\ 1 表示账户曾被盗。根据账号是否被盗过,把它们定为0 或 1,然后用算法推测新的一个一个账号是 0 还是 1,因为只有少数的离散值,归为分类问题

1.4 无监督学习

在上一节的肿瘤例子中,对于监督学习里的每条数据,我们已经清楚地知道,训练集对应的正确答案,是良性或恶性了。

在无监督学习中,我们已知的数据没有任何的标签。所以我们已知数据集,却不知如何处理,也未告知每个数据点是什么。我们的工作是找到其中的一些结构和模式

针对数据集,无监督学习能判断出数据有两个不同的聚集簇:这是一个,那是另一个,二者不同,这叫做聚类算法。

  • 聚类应用例子:Google news(news.google.com),谷歌新闻每天都在收集非常多的网络新闻内容,再将这些新闻分组,组成有关联的新闻。所以谷歌新闻做的就是搜索非常多的新闻事件,自动地把它们聚类到一起。这些新闻事件全是同一主题的,所以显示到一起。

事实证明,聚类算法和无监督学习算法同样还用在很多其它的问题上。

  • 基因学的理解应用:一个DNA微观数据的例子(上图)。
    • 基本思想是输入一组不同个体,对其中的每个个体,你要分析出它们是否有一个特定的基因。技术上,你要分析多少特定基因已经表达;所以这些颜色,红,绿,灰等等颜色,这些颜色展示了相应的程度的活性,即不同的个体是否有着一个特定的基因以及基因的表现程度;你能做的就是运行一个聚类算法,把个体聚类到不同的类或不同类型的组(人)……

无监督学习或聚集有着大量的其他应用:

  • 它用于组织大型计算机集群。让那些机器协同工作,从而让你的数据中心工作得更高效。
  • 社交网络的分析:已知你朋友的信息,比如你经常发email的,或是你Facebook的朋友、谷歌+圈子的朋友,我们能否自动地给出朋友的分组呢?即每组里的人们彼此都熟识,认识组里的所有人?
  • 市场分割:许多公司有大型的数据库,存储消费者信息。所以,你能检索这些顾客数据集,自动地发现市场分类,并自动地把顾客划分到不同的细分市场中,你才能自动并更有效地销售或不同的细分市场一起进行销售。这也是无监督学习,因为我们拥有所有的顾客数据,但我们没有提前知道是什么的细分市场,以及分别有哪些我们数据集中的顾客。我们不知道谁是在一号细分市场,谁在二号市场等等。那我们就必须让算法从数据中发现这一切。
  • 无监督学习也可用于天文数据分析,这些聚类算法给出了令人惊讶、有趣、有用的理论,解释了星系是如何诞生的。这些都是聚类的例子,聚类只是无监督学习中的一种。

无监督学习总结:输入仅仅有x,而没有输出标签y

  • 一些类别:聚类;异常检测;降维

二、单变量线性回归

  • Linear Regression with One Variable

2.1 模型表示

通过一个例子来开始:预测住房价格的,我们要使用一个数据集,数据集包含俄勒冈州波特兰市的住房价格。在这里,我要根据不同房屋尺寸所售出的价格,画出我的数据集。比方说,如果你朋友的房子是1250平方尺大小,你要告诉他们这房子能卖多少钱。那么,你可以做的一件事就是构建一个模型,也许是条直线,从这个数据模型上来看,也许你可以告诉你的朋友,他能以大约220000(美元)左右的价格卖掉这个房子。

它被称作监督学习是因为对于每个数据来说,我们给出了“正确的答案”,即告诉我们:根据我们的数据来说,房子实际的价格是多少,而且,更具体来说,这是一个回归问题。回归一词指的是,我们根据之前的数据预测出一个准确的输出值,对于这个例子就是价格,同时,还有另一种最常见的监督学习方式,叫做分类问题,当我们想要预测离散的输出值,例如,我们正在寻找癌症肿瘤,并想要确定肿瘤是良性的还是恶性的,这就是0/1离散输出的问题。更进一步来说,在监督学习中我们有一个数据集,这个数据集被称训练集。

用小写的$m$来表示训练样本的数目。

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

描述这个回归问题的标记如下:

  • $m$代表训练集中实例的数量
  • $x$代表特征/输入变量
  • $y$代表目标变量/输出变量
  • $\left( x,y \right)$代表训练集中的实例
  • $({ {x}^{(i)} },{ {y}^{(i)} })$代表第$i$个观察实例,例如第一个就是(2104,460)
  • $h$代表学习算法的解决方案或函数也称为假设(hypothesis)
  • 图示是一个监督学习算法的工作方式
  • 输出的Estimated price $\hat{y}$ 即是预测值

我们把训练集的房屋价格喂给我们的学习算法,学习算法进行工作,然后输出一个函数,通常表示为 $h$ 。$h$ 代表hypothesis(假设),是一个函数,输入是房屋尺寸大小,输出的$y$ 值对应房子的价格。因此,$h$ 是一个从$x$ 到 $y$ 的函数映射。

我将选择最初的使用规则$h$代表hypothesis,因而,要解决房价预测问题,我们实际上是要将训练集“喂”给我们的学习算法,进而学习得到一个假设$h$,然后将我们要预测的房屋的尺寸作为输入变量输入给$h$,预测出该房屋的交易价格作为输出变量输出为结果。那么,对于我们的房价预测问题,我们该如何表达 $h$?

  • 一种可能的表达方式:$h_\theta \left( x \right)=\theta_{0} + \theta_{1}x$,因为只含有一个特征/输入变量,因此这样的问题叫作单变量线性回归问题。

2.2 代价函数(cost function)

在线性回归中我们有一个像这样的训练集,$m$代表了训练样本的数量,比如 $m = 47$。

我们的假设函数,也就是用来进行预测的函数,是这样的线性函数形式:$h_\theta \left( x \right)=\theta_{0}+\theta_{1}x$ or $f_{w,b}(x)=wx+b$。

接下来我们会引入一些术语我们现在要做的便是为我们的模型选择合适的参数parameters)$w$ 和 $b$,在房价问题这个例子中便是直线的斜率和在$y$ 轴上的截距。

我们选择的参数决定了我们得到的直线相对于我们的训练集的准确程度,模型所预测的值与训练集中实际值之间的差距(下图中蓝线所指)就是建模误差modeling error)。

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

这里的代价函数:$\sum_{i=1}^m(\hat{y}^{(i)}-y^{(i)})^2$,进一步除以二除以m

即使得代价函数 $J \left( w, b \right) = \frac{1}{2m}\sum\limits_{i=1}^m \left( f_{w,b}(x^{(i)})-y^{(i)} \right)^{2}$最小。

我们绘制一个等高线图,三个坐标分别为$w$和$b$ 和$J(w, b)$:

则可以看出在三维空间中存在一个使得$J(w, b)$最小的点。

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

后续课程中会谈论其他的代价函数,但我们刚刚讲的选择对于大多数线性回归问题非常合理。

在接下来的几个视频里,我们要更进一步解释代价函数J的工作原理,并尝试更直观地解释它在计算什么,以及我们使用它的目的。

2.3 代价函数的直观理解I

在上一个视频中,我们给了代价函数一个数学上的定义。在这个视频里,让我们通过一些例子来获取一些直观的感受,看看代价函数到底是在干什么。

  • Hypothesis即是model

  • J:度量所用

    • 三个例子:$(1,1),(2,2),(3,3)$

    • $h_{\theta}(x)=\theta x$

    • $J(\theta)=\frac{1}{2m}\sum_{i=1}^m(h_{\theta}(x)-y)^2$

      • $J(1)=0$-w=1的情况:

        $J(2)=\frac{1}{2\times3}(0+0+0)$

      • $J(2)=\frac{1}{2}$-w=0.5的情况:

        $J(2)=\frac{1}{2\times3}(0.25+1+2.25)$

  • 参数w的每个值(点)对应左边图上不同的直线去拟合x的情况

2.4 代价函数的直观理解II

可视化图:可以看出在三维空间中存在一个使得$J(\theta_{0}, \theta_{1})$最小的点。

目标函数和损失函数的等高线图:从左图的损失即是对右图不同等高线的一一对应

需要的是一种有效的算法能够自动地找出这些使代价函数$J$取最小值的参数$\theta_{0}$和$\theta_{1}$。

会遇到更复杂、更高维度、更多参数的情况,很难画出图,因此更无法将其可视化。

因此真正需要的是编写程序来找出这些最小化代价函数的$\theta_{0}$和$\theta_{1}$的值,下一节将介绍一种算法,能够自动地找出能使代价函数$J$最小化的参数$\theta_{0}$和$\theta_{1}$的值。

2.5 梯度下降

梯度下降是一个用来求函数最小值的算法,我们将用其求出代价函数$J(\theta_{0}, \theta_{1})$ 的最小值。

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

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

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

repeat until convergence{

$\theta_j:=\theta_j-\alpha\frac{\partial}{\partial \theta_j}J(\theta_0,\theta_1,…)(for\thinspace j = 0,1,2,…)$

}

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

在梯度下降算法中,还有一个更微妙的问题:

  • 梯度下降中,我们要更新${\theta_{0}}$和${\theta_{1}}$ ,当 $j=0$ 和$j=1$时,会产生更新,所以你将更新$J\left( {\theta_{0}} \right)$和$J\left( {\theta_{1}} \right)$。
  • 实现梯度下降算法的微妙之处是,在这个表达式中,如果你要更新这个等式,你需要同时更新${\theta_{0}}$和${\theta_{1}}$,我的意思是在这个等式中,我们要这样更新:

​ ${\theta_{0}}$:= ${\theta_{0}}$ ,并更新 ${\theta_{1}}$:= ${\theta_{1}}$

  • 不正确的做法:

  • 这是因为在更新第一步 $\theta_0=temp0$ 的时候没有实现同步更新,第二个的 $\theta_0$ 被改变了

    • 当前,有其他实现不同步更新的算法,但是不是梯度下降的实现方式
  • 实现方法是:你应该计算公式右边的部分,通过那一部分计算出${\theta_{0}}$和${\theta_{1}}$的值,然后同时更新${\theta_{0}}$和${\theta_{1}}$。

之后会讲到,同步更新是更自然的实现方法。当人们谈到梯度下降时,他们的意思就是同步更新。

2.6 梯度下降的直观理解

梯度下降算法:${\theta_{j}}:={\theta_{j}}-\alpha \frac{\partial }{\partial {\theta_{j}}}J\left(\theta \right)$

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

对于这个问题,求导的可以说是取这个红点的切线,刚好与函数相切于这一点,让我们看看这条红色直线的斜率,其正好是这个三角形的高度除以这个水平长度,其是正的也就是说它有正导数,因此得到的新${\theta_{1}}$更新后等于${\theta_{1}}$减去一个正数乘以$a$。

这就是梯度下降法的更新规则:${\theta_{j}}:={\theta_{j}}-\alpha \frac{\partial }{\partial {\theta_{j}}}J\left( \theta \right)$

关于学习率:如果$a$太小或$a$太大的出现什么情况:

  • 如果$a$太小了,即我的学习速率太小,这样就需要很多步才能到达最低点,所以如果$a$太小的话,可能会很慢,因为它会一点点挪动,它会需要很多步才能到达全局最低点。
  • 如果$a$太大,那么梯度下降法可能会越过最低点,甚至可能无法收敛,下一次迭代又移动了一大步,越过一次,又越过一次,一次次越过最低点,直到你发现实际上离最低点越来越远,所以,如果$a$太大,它会导致无法收敛,甚至发散。

现在,我还有一个问题,如果我们预先把${\theta_{1}}$放在一个局部的最低点,下一步梯度下降法会怎样工作?

  • 假设将${\theta_{1}}$初始化在局部最低点,它已经在一个局部的最优处或局部最低点。导数将等于零,因为它是那条切线的斜率,它使得${\theta_{1}}$不再改变,也就是新的${\theta_{1}}$等于原来的${\theta_{1}}$,因此,如果你的参数已经处于局部最低点,那么梯度下降法更新其实什么都没做,它不会改变参数的值。这也解释了为什么即使学习速率$a$保持不变时,梯度下降也可以收敛到局部最低点。
    • $\theta:=\theta-\alpha\times 0 $
  • 如果到最大值也可能会这样?不过只要初始不在不可能到极大值点

一个例子,这是代价函数$J\left( \theta \right)$:

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

回顾:在梯度下降法中,当我们接近局部最低点时,梯度下降法会自动采取更小的幅度,这是因为当我们接近局部最低点时,导数值会自动变得越来越小,所以梯度下降将自动采取较小的幅度,这就是梯度下降的做法。所以实际上没有必要再另外减小$a$。

2.7 梯度下降的线性回归

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

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

$j=0$ 时:$\frac{\partial }{\partial { {\theta }_{0} } }J( { {\theta }_{0} },{ {\theta }_{1} })=\frac{1}{m}{ {\sum\limits_{i=1}^{m}{\left( { {h}_{\theta } }({ {x}^{(i)} })-{ {y}^{(i)} } \right)} } }$

$j=1$ 时:$\frac{\partial } {\partial { {\theta }_{1} } }J ( { {\theta }_{0} },{ {\theta }_{1} } )=\frac{1}{m}\sum\limits_{i=1}^{m} {\left( \left( { {h}_{\theta } }({ {x}^{(i)} })-{ {y}^{(i)}} \right)\cdot { {x}^{(i)} } \right)}$

则算法改写成:

Repeat {

​ ${\theta_{0} }:={\theta_{0}}-\alpha\frac{1}{m}\sum\limits_{i=1}^{m}{ \left({ {h}_{\theta } }({ {x}^{(i)} })-{ {y}^{(i)} } \right)}$

​ ${\theta_{1}}:={\theta_{1}}-\alpha\frac{1}{m}\sum\limits_{i=1}^{m}{\left( \left({ {h}_{\theta } }({ {x}^{(i)} })-{ {y}^{(i)} } \right)\cdot { {x}^{(i)} } \right)}$

}

图示如下:

  • 在逐渐更新的过程中(从蓝色逐渐到最后的黄色),直线在梯度下降的更新过程中变得越来越拟合数据的趋势。

我们刚刚使用的算法,也称为批量梯度下降。

  • 批量梯度下降”,指的是在梯度下降的每一步中,我们都用到了所有的训练样本,在梯度下降中,在计算微分求导项时,我们需要进行求和运算,所以,在每一个单独的梯度下降中,我们最终都要计算这样一个东西,这个项需要对所有$m$个训练样本求和。
  • 也有其他类型的梯度下降法,不是这种”批量”型的,不考虑整个的训练集,而是每次只关注训练集中的一些小的子集。后面将介绍这些方法。

有一种计算代价函数$J$最小值的数值解法,不需要梯度下降这种迭代算法。它可以在不需要多步梯度下降的情况下,也能解出代价函数$J$的最小值,称为正规方程(normal equations)的方法。实际上在数据量较大的情况下,梯度下降法比正规方程要更适用一些。

祝贺大家成功学会你的第一个机器学习算法。

后面会告诉你泛化的梯度下降算法,这将使梯度下降更加强大。

三、线性代数回顾(Linear Algebra Review)

3.1 矩阵和向量

矩阵的维数即:行数×列数

矩阵元素(矩阵项):$A=\left[ \begin{matrix} 1402 & 191 \\ 1371 & 821 \\ 949 & 1437 \\ 147 & 1448 \\\end{matrix} \right]\in R^{4\times 2}$

$A_{ij}$指第$i$行,第$j$列的元素。

向量是一种特殊的矩阵,向量指代的一般都是列向量,如:$y=\left[ \begin{matrix} {460} \\ {232} \\ {315} \\ {178} \\\end{matrix} \right]$为四维列向量(4×1)。

如右为1索引向量和0索引向量,一般我们用1索引向量。$y=\left[ \begin{matrix} { {y}_{1} } \\ { {y}_{2} } \\ { {y}_{3} } \\ { {y}_{4} } \\\end{matrix} \right]$,$y=\left[ \begin{matrix} { {y}_{0} } \\ { {y}_{1} } \\ { {y}_{2} } \\ { {y}_{3} } \\\end{matrix} \right]$

3.2 加法和标量乘法

矩阵的加法:行列数相等的可以加。

例:

矩阵的乘法:每个元素都要乘

组合算法也类似。

3.3 矩阵向量乘法

矩阵和向量的乘法如图:$m×n$的矩阵乘以$n×1$的向量,得到的是$m×1$的向量

算法举例:

3.4 矩阵乘法

矩阵乘法:

$m×n$矩阵乘以$n×o$矩阵,变成$m×o$矩阵。

如果这样说不好理解的话就举一个例子来说明一下,比如说现在有两个矩阵$A$和$B$,那么它们的乘积就可以表示为图中所示的形式。

3.5 矩阵乘法的性质

矩阵乘法的性质:

矩阵的乘法不满足交换律:$A×B≠B×A$

矩阵的乘法满足结合律。即:$A×(B×C)=(A×B)×C$

单位矩阵:在矩阵的乘法中,有一种矩阵起着特殊的作用,如同数的乘法中的1,我们称这种矩阵为单位矩阵.它是个方阵,一般用 $I$ 或者 $E$ 表示,本讲义都用 $I$ 代表单位矩阵,从左上角到右下角的对角线(称为主对角线)上的元素均为1以外全都为0。如:

$A{ {A}^{-1} }={ {A}^{-1} }A=I$

对于单位矩阵,有$AI=IA=A$

3.6 逆、转置

矩阵的逆:如矩阵$A$是一个$m×m$矩阵(方阵),如果有逆矩阵,则:$A{ {A}^{-1}}={ {A}^{-1} }A=I$

我们一般在OCTAVE或者MATLAB中进行计算矩阵的逆矩阵。

矩阵的转置:设$A$为$m×n$阶矩阵(即$m$行$n$列),第$i $行$j $列的元素是$a(i,j)$,即:$A=a(i,j)$

定义$A$的转置为这样一个$n×m$阶矩阵$B$,满足$B=a(j,i)$,即 $b (i,j)=a(j,i)$($B$的第$i$行第$j$列元素是$A$的第$j$行第$i$列元素),记${ {A}^{T} }=B$。(有些书记为A’=B)

直观来看,将$A$的所有元素绕着一条从第1行第1列元素出发的右下方45度的射线作镜面反转,即得到$A$的转置。

例:

${ { \left | \begin{matrix} a & b \\ c & d \\ e& f \\\end{matrix} \right | } ^ {T} }=\left |\begin{matrix} a& c & e \\ b& d & f \\\end{matrix} \right |$

矩阵的转置基本性质:

$ { {\left( A\pm B \right)}^{T} }={ {A}^{T}}\pm { {B}^{T} } $
${ {\left( A\times B \right)}^{T} }={ {B}^{T} }\times { {A}^{T} }$
${ {\left( { {A}^{T} } \right)}^{T} }=A $
${ {\left( KA \right)}^{T} }=K{ {A}^{T} } $

matlab中矩阵转置:直接打一撇,x=y'

python中的矩阵转置:$np.transpose(A)$或者$A.T$