文章目录

  • 机器学习
    • 基础介绍
      • 什么是机器学习?
      • 监督学习
      • 无监督学习
    • 单变量线性回归
      • 模型表示
      • 代价函数
        • 代价函数的直观理解
      • 梯度下降
        • 梯度下降的直观解释理解
        • 梯度下降的线性回归
    • 线性代数回顾
      • 矩阵和向量
      • 加法和标量乘法
      • 矩阵向量乘法
      • 矩阵乘法
      • 矩阵乘法的性质
      • 逆、转置

机器学习

基础介绍

什么是机器学习?

​ 完整的机器学习笔记可以点进我的主页,在我的资源中进行下载(无水印)

​ 你或许每天都在不知不觉中使用了机器学习的算法每次,你打开谷歌、必应搜索到你需要的内容,正是因为他们有良好的学习算法。谷歌和微软实现了学习算法来排行网页每次,你用Facebook或苹果的图片分类程序他能认出你朋友的照片,这也是机器学习。每次您阅读您的电子邮件垃圾邮件筛选器,可以帮你过滤大量的垃圾邮件这也是一种学习算法。

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

​ Machine learning is a field of study that gives computers the ability to learn without being explicitly programmed.——Arthur Samuel

机器学习是一个研究领域,它使计算机有能力在没有明确编程的情况下进行学习。

举一个实例,在垃圾邮件分类中,根据Tom的定义以下哪一个是任务T:

  • classifying emails as spam or not.
  • Watching you label emails as spam or not spam.
  • The number(or fraction) of emails is correctly classified as spam/not spam.
  • None of the above - this is not a machine learning problem.

​ 根据定义我们能够知道将电子邮件分类是任务T,观察你将邮件标记为垃圾邮件或不是垃圾邮件是经验E,正确分类为垃圾邮件/非垃圾邮件的邮件数量是指标P。

监督学习

​ 还是通过一个例子来了解监督学习,一个学生从波特兰俄勒冈州的研究所收集了一些房价的数据。你把这些数据画出来,看起来是这个样子:横轴表示房子的面积,单位是平方英尺,纵轴表示房价,单位是千美元。那基于这组数据,假如你有一个朋友,他有一套750平方英尺房子,现在他希望把房子卖掉,他想知道这房子能卖多少钱。

​ 那么关于这个问题,机器学习算法将会怎么帮助你呢?

​ 我们应用学习算法,可以在这组数据中画一条直线,或者换句话说,拟合一条直线,根据这条线我们可以推测出,这套房子可能卖1500¥,当然这不是唯一的算法。可能还有更好的,比如我们不用直线拟合这些数据,用二次方程去拟合可能效果会更好。根据二次方程的曲线,我们可以从这个点推测出,这套房子能卖接近2000¥。后面我们会讨论选择哪一种方式来拟合数据,当然无论取哪一个模型都是不会让你的朋友的房子卖的更好。但这是一个学习算法很好的例子。

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

​ 一般房子的价格会记到美分,所以房价实际上是一系列离散的值,但是我们通常又把房价看成实数,看成是标量,所以又把它看成一个连续的数值。

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

再看一个监督学习的例子:
假设说你想通过查看病历来推测乳腺癌良性与否,假如有人检测出乳腺肿瘤,恶性肿瘤有害并且十分危险,而良性的肿瘤危害就没那么大,所以人们显然会很在意这个问题。

​ 让我们来看一组数据:这个数据集中,横轴表示肿瘤的大小,纵轴上,我标出1和0表示是或者不是恶性肿瘤。我们之前见过的肿瘤,如果是恶性则记为1,不是恶性,或者说良性记为0。

​ 我有5个良性肿瘤样本,在1的位置有5个恶性肿瘤样本。现在我们有一个朋友很不幸检查出乳腺肿瘤。假设说她的肿瘤大概这么大,那么机器学习的问题就在于,你能否估算出肿瘤是恶性的或是良性的概率。用术语来讲,这是一个分类问题(classification)。

分类指的是,我们试着推测出离散的输出值:0或1良性或恶性,而事实上在分类问题中,输出可能不止两个值。比如说可能有三种乳腺癌,所以你希望预测离散输出0、1、2、3。0 代表良性,1 表示第1类乳腺癌,2表示第2类癌症,3表示第3类,但这也是分类问题。

In classification problems there is another way to plot this data.

在分类问题中我们可以用另一种方式绘制这些数据点。

​ 现在我用不同的符号来表示这些数据。既然我们把肿瘤的尺寸看做区分恶性或良性的特征,那么我可以这么画,我用不同的符号来表示良性和恶性肿瘤。或者说是负样本和正样本现在我们不全部画X,良性的肿瘤改成用 O 表示,恶性的继续用 X 表示。来预测肿瘤的恶性与否。

显然上面的例子只用到了一种特征(Tumor size)来判断肿瘤的特征.

​ In other machine learning problems, when we have more than one feature(特征), more than one attribute(属性). Here’s an example, Let’s say that instead of just knowing the tumor size, we know both the age of the patients and the tumor size. In that case, maybe your data set will look like this. Where I may have a set of patients with those ages and that tumor size, and look like this(ages-图中用蓝色的圈表示).

​ And a different set of patients, they look a little different, whose tumors turn out to be malignant(恶性), as denoted by the crosses(用叉表示). So, let’s say you have a friend who tragically(很不幸) has a tumor. And maybe, their tumor size and age falls around there(图中用紫色点表示). So given a data set like this, what the learning algorithm(学习算法) might do is fit a straight line through the data to try to separate out the malignant tumors from the benign(良性) ones(就是画一条线设法将恶性肿瘤和良性肿瘤分开).

​ 因此来预测肿瘤的恶性与否,落在下半区域则良性的可能性比恶性大,在这个例子中我们有了两种特征,即患者年龄和肿瘤大小。在其他机器学习算法中往往会有更多种特征。如这个例子可能还会有肿块的厚度(Clump Thickness),肿瘤细胞大小的均匀性(Uniformity of cell size),肿瘤细胞形状的均匀性(Uniformity of cell shape of tumor), and so on, and other features as well. 这就是我们即将学到最有趣的学习算法之一。那种算法不仅能处理2种3种或5种特征,即使有无限多种特征都可以处理。

​ 那你怎么处理无限多个特征,甚至怎么存储这些特征都存在问题,你电脑的内存肯定不够用。**我们以后会讲一个算法,叫支持向量机,里面有一个巧妙的数学技巧,能让计算机处理无限多个特征。**想象一下,我没有写下这两种和右边的三种特征,而是在一个无限长的列表里面,一直写一直写不停的写,写下无限多个特征,事实上,我们能用算法来处理它们。

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

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

  1. 你有一大批同样的货物,想象一下,你有上千件一模一样的货物等待出售,这时你想预测接下来的三个月能卖多少件?
  2. 你有许多客户,这时你想写一个软件来检验每一个用户的账户。对于每一个账户,你要判断它们是否曾经被盗过?

那这两个问题,它们属于分类问题、还是回归问题?

  • 问题一是一个回归问题,因为你知道,如果我有数千件货物,我会把它看成一个实数,一个连续的值。因此卖出的物品数,也是一个连续的值。

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

以上就是监督学习的内容。

无监督学习

​ 之前我们谈到了监督学习它的数据集看上去像上图这样,是具有标签的,有所谓的“正确答案”的数据,而在无监督学中,无监督学习算法,是输入无标签的数据,即没有输出标签B,也可以从数据中找到有趣的结论。

​ 所以我们所使用的数据和之前不同,看上去是这样的:

​ 都具有相同的标签或者没有标签,即没有所谓的正确答案。所以我们已知数据集,却不知如何处理,不知道拿它们来做什么,也未告知每个数据点是什么。别的都不知道,就是一个数据集。你能从数据中找到某种结构吗?针对数据集,无监督学习就能判断出数据有两个不同的聚集簇。这是一个,那是另一个,二者不同。是的,无监督学习算法可能会把这些数据分成两个不同的簇。所以叫做聚类算法(Clustering algorthm)。事实证明,它能被用在很多地方。

聚类应用的一个例子就是在谷歌新闻中。如果你以前从来没见过它,你可以到这个URL网址news.google.com去看看。谷歌新闻每天都在,收集非常多,非常多的网络的新闻内容。它再将这些新闻分组,组成有关联的新闻。所以谷歌新闻做的就是搜索非常多的新闻事件,自动地把它们聚类到一起。所以,这些新闻事件全是同一主题的,所以显示到一起。

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

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

​ 所以这个就是无监督学习,因为我们没有提前告知算法一些信息,比如,这是第一类的人,那些是第二类的人,还有第三类,等等。我们只是说,是的,这是有一堆数据。我不知道数据里面有什么。我不知道谁是什么类型。我甚至不知道人们有哪些不同的类型,这些类型又是什么。但你能自动地找到数据中的结构吗?就是说你要自动地聚类那些个体到各个类,我没法提前知道哪些是哪些。因为我们没有给算法正确答案来回应数据集中的数据,所以这就是无监督学习。

​ 无监督学习或聚集有着大量的应用。它用于组织大型计算机集群。我有些朋友在大数据中心工作,那里有大型的计算机集群,他们想解决什么样的机器易于协同地工作,如果你能够让那些机器协同工作,你就能让你的数据中心工作得更高效。第二种应用就是社交网络的分析。所以已知你朋友的信息,比如你经常发email的,或是你Facebook的朋友、**谷歌+**圈子的朋友,我们能否可以自动识别同属一个圈子的朋友,判断哪些人相互认识(就比如QQ中“你可能认识”)。

​ 还有市场分割。许多公司有大型的数据库,存储消费者信息。所以,你能检索这些顾客数据集,自动地发现市场分类,并自动地把顾客划分到不同的细分市场中,你才能自动并更有效地销售或不同的细分市场一起进行销售。这也是无监督学习,因为我们拥有所有的顾客数据,但我们没有提前知道是什么的细分市场,以及分别有哪些我们数据集中的顾客。我们不知道谁是在一号细分市场,谁在二号市场,等等。那我们就必须让算法从数据中发现这一切。最后,无监督学习也可用于天文数据分析,这些聚类算法给出了令人惊讶、有趣、有用的理论,解释了星系是如何诞生的。这些都是聚类的例子,聚类只是无监督学习中的一种。

​ 我现在告诉你们另一种。我先来介绍鸡尾酒宴问题。嗯,你参加过鸡尾酒宴吧?你可以想像下,有个宴会房间里满是人,全部坐着,都在聊天,这么多人同时在聊天,声音彼此重叠,因为每个人都在说话,同一时间都在说话,你几乎听不到你面前那人的声音。所以,可能在一个这样的鸡尾酒宴中的两个人,他俩同时都在说话,假设现在是在个有些小的鸡尾酒宴中。我们放两个麦克风在房间中,因为这些麦克风在两个地方,离说话人的距离不同每个麦克风记录下不同的声音,虽然是同样的两个说话人。听起来像是两份录音被叠加到一起,或是被归结到一起,产生了我们现在的这些录音。另外,这个算法还会区分出两个音频资源,这两个可以合成或合并成之前的录音,实际上,鸡尾酒算法的第一个输出结果是(说白了,就是实现让机器自动区分人声与音乐,把不同的人声单独提取出来,把音乐提取出来):

1,2,3,4,5,6,7,8,9,10,

所以,已经把英语的声音从录音中分离出来了。

第二个输出是这样:

1,2,3,4,5,6,7,8,9,10。

看看这个无监督学习算法,实现这个得要多么的复杂,是吧?它似乎是这样,为了构建这个应用,完成这个音频处理似乎需要你去写大量的代码或链接到一堆的合成器JAVA库,处理音频的库,看上去绝对是个复杂的程序,去完成这个从音频中分离出音频。事实上,这个算法对应你刚才知道的那个问题的算法可以就用一行代码来完成。

就是这里展示的代码:

[W,s,v] = svd((repmat(sum(x.*x,1),size(x,1),1).*x)*x');

研究人员花费了大量时间才最终实现这行代码。我不是说这个是简单的问题,但它证明了,当你使用正确的编程环境,许多学习算法是相当短的程序。所以,这也是为什么在本课中,我们打算使用Octave编程环境。Octave,是免费的开源软件,使用一个像OctaveMatlab的工具,许多学习算法变得只有几行代码就可实现。

后面会讲到Octave的使用。(美国的Matlab,世界的Octave)这里的这些函数比如SVM支持向量机)函数,奇异值分解Octave里已经建好了。

事实上,许多人在大硅谷的公司里做的其实就是,使用一种工具像Octave来做第一步的学习算法的原型搭建,只有在你已经让它工作后,你才移植它到C++或Java或别的语言。事实证明,这样做通常可以让你的算法运行得比直接用C++实现更快,所以,我知道,作为一名指导者,我必须说“相信我”,但对你们中从未使用过Octave这种编程环境的人,我还是要告诉你们这一点一定要相信我,我想,对你们而言,我认为你们的时间,你们的开发时间是最有价值的资源。我已经见过很多人这样做了,我把你看作是机器学习研究员,或机器学习开发人员,想更加高产的话,你要学会使用这个原型工具,开始使用Octave。(说白了,就是开始使用matlab或Octave吧)。

我们介绍了无监督学习,它是学习策略,交给算法大量的数据,并让算法为我们从数据中找出某种结构。

  • 垃圾邮件问题。如果你有标记好的数据,区别好是垃圾还是非垃圾邮件,我们把这个当作监督学习问题
  • 新闻事件分类的例子,就是那个谷歌新闻的例子,我们在本视频中有见到了,我们看到,可以用一个聚类算法来聚类这些文章到一起,所以是无监督学习
  • 细分市场的例子,我在更早一点的时间讲过,你可以当作无监督学习问题,因为我只是拿到算法数据,再让算法去自动地发现细分市场。
  • 最后一个例子,糖尿病,这个其实就像是我们的乳腺癌,只是替换了好、坏肿瘤,良性、恶性肿瘤,我们改用糖尿病或没病。所以我们把这个当作监督学习,我们能够解决它,作为一个监督学习问题,就像我们在乳腺癌数据中做的一样。

单变量线性回归

模型表示

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

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

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

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

我们将要用来描述这个回归问题的标记如下:

m 代表训练集中实例的数量

x 代表特征/输入变量

y 代表目标变量/输出变量

(x,y) 代表训练集中的实例


代表第 个观察实例

​ h 代表学习算法的解决方案或函数也称为假设(hypothesis

这就是一个监督学习算法的工作方式,我们可以看到这里有我们的训练集里房屋价格 我们把它喂给我们的学习算法,学习算法的工作了,然后输出一个函数,通常表示为小写 h 表示。 h 代表hypothesis(假设),h 表示一个函数,输入是房屋尺寸大小,就像你朋友想出售的房屋,因此 h 根据输入的 x 值来得出 y 值, y 值对应房子的价格 因此,h 是一个从 x 到 y 的函数映射。

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

一种可能的表达方式为:
,因为只含有一个特征/输入变量,因此这样的问题叫作单变量线性回归问题。

代价函数

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

在线性回归中我们有一个像这样的训练集,m 代表了训练样本的数量,比如 m=47。而我们的假设函数,也就是用来进行预测的函数,是这样的线性函数形式:

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

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

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


最小。

我们绘制一个等高线图,三个坐标分别为

则可以看出在三维空间中存在一个使得
最小的点

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

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

也许这个函数
有点抽象,可能你仍然不知道它的内涵,在接下来的几个视频里,我们要更进一步解释代价函数 J 的工作原理,并尝试更直观地解释它在计算什么,以及我们使用它的目的。

代价函数的直观理解

让我们通过一些例子来获取一些直观的感受,看看代价函数到底是在干什么。


实际就是通过在测试数据集中拟合一条回归的直线,使得拟合出来的直线预测值
与实际值相减的平方,即利用平方误差函数(代价函数)算出代价值
将代价值利用制图软件编写出来,这里的回归方程只有斜率,而常量为0,经过绘制代价函数能发现它有代价最低点,则此时对应的斜率拟合出来的直线是代价最小的斜率。下面是之前朋友卖房子例子数据拟合出来的代价函数:

function[] = cost2()
x=[2104,1416,1534,852];
y=[460,232,315,178];
figure;%创建新图
k = -0.1:0.03:0.4;
j=0;
h=0;
for i=1:4h=k*x(i);j=j+power(h-y(i),2);%计算代价函数
end
j=j/8;
plot(k,j,'b-o');
end

我们将更深入地学习代价函数的作用,

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

等高线图:对于右边代价函数等高线图实际就是上图三维代价函数图的降维表示,每一个椭圆显示了一系列J值相等的点。而椭圆最中心的点就是代价值最小的点,即误差最小的取值。

也许我们用等高线可以认为地去大概找出误差最小的点,但也只能是相当接近,也比较麻烦,我们真正想要的是一个高效的算法,来自动寻找代价函数 J 最小值,对应的误差最小取值点。

我们也不希望编个程序把这些点画出来,然后人工的方法来读出这些点的数值,这很明显不是一个好办法。我们会遇到更复杂、更高维度、更多参数的情况,而这些情况是很难画出图的,因此更无法将其可视化,因此我们真正需要的是编写程序来找出这些最小化代价函数的值和误差最小的点。接下来介绍的便是能够自动找到平方误差最小的点的算法。

梯度下降

梯度下降是很常用的算法,它不仅被用于线性回归之中还广泛应用于机器学习的众多领域。

目前的学习来看,我认为梯度下降算法就是用于求函数最小值的。

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

就像之前说的,梯度下降也可以应用于其它函数。为了简化说明梯度下降,之后就只用两个变量
θ0和θ1来说明梯度下降算法。我们现在要做的事情就是:

  • 给定θ0和θ1的初始值(它们到底是什么并不重要,但我们通常的选择是将θ0设为0,θ1也设为0)
  • 我们在梯度下降算法里面要做的就是不断改变θ0和θ1来使得J变小,直到找到最小值。

让我们通过一些图片来看梯度下降是如何工作的:

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

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

好的,让我们看一下其背后的数学原理:

这是梯度下降算法的定义:

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

我们会反复的做这一步,来更新参数θj

这个公式中一定要注意大写 J 与小写 j 的区分啊。

这个公式有很多细节问题,首先我们注意到这个符号:= 我们使用这个符号来表示赋值。这是一个赋值运算符。而公式中的等号 = 就是在断言 A 的值等于 B 的值。

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

在梯度下降算法中,还有一个更微妙的问题,梯度下降中,我们要更新 θ0和θ1,当 j = 0 和 j = 1 时,会产生更新,所以你将更新θ0和θ1。实现梯度下降算法的微妙之处是,在这个表达式中,如果你要更新这个等式,你需要同时更新θ0和θ1,我的意思是在这个等式中,我们要这样更新:

θ0:=θ0,并更新θ1:=θ1(同时更新

下图是正确更新与错误更新的区别:

梯度下降的直观解释理解

接下来,我们要进入这个微分项的细节之中。

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

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

我们可以发现在学习率取得合理的情况下,J(θ)都会逐渐去与局部最优。

这就是我梯度下降法的更新规则:

让我们来看看如果α太小或太大会出现什么情况:

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

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

现在,我还有一个问题,当我第一次学习这个地方时,我花了很长一段时间才理解这个问题,如果我们预先把θ1放在一个局部的最低点,你认为下一步梯度下降法会怎样工作?

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

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

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

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

这就是梯度下降算法,你可以用它来最小化任何代价函数 J,不只是线性回归中的代价函数 J。

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

梯度下降的线性回归

在以前的视频中我们谈到关于梯度下降算法,梯度下降是很常用的算法,它不仅被用在线性回归上和线性回归模型、平方误差代价函数。在这段视频中,我们要将梯度下降和代价函数结合。我们将用到此算法,并将其应用于具体的拟合直线的线性回归算法里。

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

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

则算法改写成:

Repeat {

}

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

但就目前而言,应用刚刚学到的算法,你应该已经掌握了批量梯度算法,并且能把它应用到线性回归中了,这就是用于线性回归的梯度下降法。1

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

现在我们已经掌握了梯度下降,我们可以在不同的环境中使用梯度下降法,我们还将在不同的机器学习问题中大量地使用它。所以,祝贺大家成功学会你的第一个机器学习算法。

之后会学习泛化的梯度下降算法,这将使梯度下降更加强大。

线性代数回顾

参考:http://www.ai-start.com/ml2014/html/week1.html

矩阵和向量

如图:这个是4×2矩阵,即4行2列,如为行,为列,那么即4×2

矩阵的维数即行数×列数

矩阵元素(矩阵项):

A(i,j)指第i行,第j列的元素。

向量是一种特殊的矩阵,讲义中的向量一般都是列向量,如:

为四维列向量(4×1)。

如下图为1索引向量和0索引向量,左图为1索引向量,右图为0索引向量,一般我们用1索引向量。

加法和标量乘法

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

例:

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

组合算法也类似。

矩阵向量乘法

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

算法举例:

矩阵乘法

矩阵乘法:

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

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

矩阵乘法的性质

矩阵乘法的性质

矩阵的乘法不满足交换律:

矩阵的乘法满足结合律。即:

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

对于单位矩阵,有

逆、转置

矩阵的逆:如矩阵是一个矩阵(方阵),如果有逆矩阵,则:

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

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

例:

矩阵的转置基本性质:

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

我们很多时候可以通过很多编程软件进行求逆矩阵之类的运算,相比自己手动去算,就容易很多。

如利用octave求逆矩阵,并验证就简单的多,同理利用matlab也如此。

a = [3 4; 2 16 ]
pinv(a)
inverseOFA=pinv(a)
a*inverseOFA

最后矩阵A乘以其逆矩阵近似为单位矩阵(考虑到计算精度问题可能会产生些许误差)

吴恩达机器学习笔记 | 人工智能入门笔记(一)相关推荐

  1. 下载量过百万的吴恩达机器学习和深度学习笔记更新了!(附PDF下载)

    今天,我把吴恩达机器学习和深度学习课程笔记都更新了,并提供下载,这两本笔记非常适合机器学习和深度学习入门.(作者:黄海广) 0.导语 我和同学将吴恩达老师机器学习和深度学习课程笔记做成了打印版,放在g ...

  2. (英文版)吴恩达机器学习第三周笔记

    Logistic Regression 这是我在coursera上看Andrew Ng的machine learning做的英文版笔记,可以帮助学英语的小伙伴熟悉熟悉一些专业术语在英文中的表达.由于笔 ...

  3. (英文版)吴恩达机器学习第五周笔记

    Neural Network:Learning 这是我在coursera上看Andrew Ng的machine learning做的英文版笔记,可以帮助学英语的小伙伴熟悉熟悉一些专业术语在英文中的表达 ...

  4. 吴恩达机器学习系列课程--个人笔记

    网址:https://www.bilibili.com/video/av50747658/ (b站找的有中文字幕的视频) 第一周 一.引言 1.1 欢迎 1.2 机器学习是什么 1.3 监督学习 1. ...

  5. Machine Learning - Coursera 吴恩达机器学习教程 Week1 学习笔记

    机器学习的定义 Arthur Samuel 传统定义 Arthur Samuel: "the field of study that gives computers the ability ...

  6. matlab版吴恩达机器学习第五章笔记

    机器学习matlab操作基础 1.基本操作 2.移动数据 3.计算数据 4.绘图数据 5.控制语句:for,while,if语句 6.向量化 1.基本操作 参考视频: 5 - 1 - Basic Op ...

  7. Machine Learning - Coursera 吴恩达机器学习教程 Week5 学习笔记

    神经网络的代价函数 定义 L = 神经网络总层数 sl = 第l层的单元数(不包含bias unit) K = output units/classes的数量 普通逻辑回归代价函数: 神经网络代价函数 ...

  8. 吴恩达机器学习视频学习笔记

    吴恩达机器学习视频笔记 介绍 Introduction 线性回归 Linear Regression 单变量 One Variable 多变量 Multiple Variables 多项式回归 Pol ...

  9. Github标星24300!吴恩达机器学习课程笔记.pdf

    个人认为:吴恩达老师的机器学习课程,是初学者入门机器学习的最好的课程!我们整理了笔记(336页),复现的Python代码等资源,文末提供下载. 课程简介 课程地址:https://www.course ...

  10. 手机上的机器学习资源!Github标星过万的吴恩达机器学习、深度学习课程笔记,《统计学习方法》代码实现!...

    吴恩达机器学习.深度学习,李航老师<统计学习方法>.CS229数学基础等,可以说是机器学习入门的宝典.本文推荐一个网站"机器学习初学者",把以上资源的笔记.代码实现做成 ...

最新文章

  1. php实现鼠标悬停显示下拉菜单,Html中鼠标悬停显示二级菜单的两种方法
  2. Webwork 学习之路【02】前端OGNL试练
  3. RPC实现以及相关学习
  4. 第十篇:Map/Reduce 工作机制分析 - 数据的流向分析
  5. MySQL 8.0窗口函数
  6. python机器学习库sklearn——特征提取
  7. PHP 将二维数组转成一维数组
  8. Microsoft Store 微软商店中 APP 独立安装包下载方法
  9. 双曲调频信号matlab仿真,matlab 实现线性调频信号以及分析处理
  10. 工具说明书 - Windows资源监视器: Resource Monitor
  11. html炫酷特效代码博客,HTML特效代码!
  12. java short转byte_java基础之short转换byte[]
  13. 织梦后台图片集图片内容框太小解决办法
  14. 什么是 里氏代换原则?
  15. 细说shiro之一:shiro简介
  16. Unity事件分发器
  17. 原生PHP上传图片并且裁剪图片生成推广海报
  18. Shiro 生成秘钥
  19. android sip服务器,android sip协议通话实现
  20. nginx部署前端项目的详细步骤

热门文章

  1. 7位格雷码计算风向_基于九位格雷码盘的风向传感器的制造方法
  2. Nexperia | 发布超小尺寸DFN MOSFET
  3. 公交WiFi商业模式及推广挑战解析
  4. 机器学习中的数学——模拟退火算法(Simulated Annealing,SA)
  5. 基于Java+SpringBoot+Vue前后端分离摄影分享网站平台系统
  6. Flask项目实战——7—(Redis数据库存储验证码信息、验证登录界面的表单信息、注册功能实现、登录实现)
  7. Angular2知识概括
  8. SAP 上线前一些数据的重置和删除
  9. 软件架构-Spring boot集成模板引擎swagger2实现
  10. 网络各种资源地址合集