第一周
谷歌和微软实现了学习算法来排行网页每次,你用Facebook或苹果的图片分类程序他能认出你朋友的照片,这也是机器学习。每次您阅读您的电子邮件垃圾邮件筛选器,可以帮你过滤大量的垃圾邮件这也是一种学习算法。
在这门课中,你还讲学习到关于机器学习的前沿状况。但事实上只了解算法、数学并不能解决你关心的实际的问题。所以,我们将花大量的时间做练习,从而你自己能实现每个这些算法,从而了解内部机理。
为什么机器学习如此受欢迎呢?原因是,机器学习不只是用于人工智能领域。
我们创造智能的机器,有很多基础的知识。比如,我们可以让机器找到A与B之间的最短路径,但我们仍然不知道怎么让机器做更有趣的事情,如web搜索、照片标记、反垃圾邮件。我们发现,唯一方法是让机器自己学习怎么来解决问题。所以,机器学习已经成为计算机的一个能力。
这里有一些机器学习的案例。比如说,数据库挖掘。机器学习被用于数据挖掘的原因之一是网络和自动化技术的增长,这意味着,我们有史上最大的数据集比如说,大量的硅谷公司正在收集web上的单击数据,也称为点击流数据,并尝试使用机器学习算法来分析数据,更好的了解用户,并为用户提供更好的服务。这在硅谷有巨大的市场。再比如,医疗记录。随着自动化的出现,我们现在有了电子医疗记录。如果我们可以把医疗记录变成医学知识,我们就可以更好地理解疾病。再如,计算生物学。还是因为自动化技术,生物学家们收集的大量基因数据序列、DNA序列和等等,机器运行算法让我们更好地了解人类基因组,大家都知道这对人类意味着什么。再比如,工程方面,在工程的所有领域,我们有越来越大、越来越大的数据集,我们试图使用学习算法,来理解这些数据。另外,在机械应用中,有些人不能直接操作。例如,我已经在无人直升机领域工作了许多年。我们不知道如何写一段程序让直升机自己飞。我们唯一能做的就是让计算机自己学习如何驾驶直升机。
手写识别:现在我们能够非常便宜地把信寄到这个美国甚至全世界的原因之一就是当你写一个像这样的信封,一种学习算法已经学会如何读你信封,它可以自动选择路径,所以我们只需要花几个美分把这封信寄到数千英里外。
参考视频: 1 - 2 - What is Machine Learning_ (7 min).mkv
第一个机器学习的定义来自于Arthur
Samuel。他定义机器学习为,在进行特定编程的情况下,给予计算机学习能力的领域。Samuel的定义可以回溯到50年代,他编写了一个西洋棋程序。这程序神奇之处在于,编程者自己并不是个下棋高手。但因为他太菜了,于是就通过编程,让西洋棋程序自己跟自己下了上万盘棋。通过观察哪种布局(棋盘位置)会赢,哪种布局会输,久而久之,这西洋棋程序明白了什么是好的布局,什么样是坏的布局。程序通过学习后,玩西洋棋的水平超过了Samuel。这绝对是令人注目的成果。尽管编写者自己是个菜鸟,但因为计算机有着足够的耐心,去下上万盘的棋,没有人有这耐心去下这么多盘棋。通过这些练习,计算机获得无比丰富的经验,于是渐渐成为了比Samuel更厉害的西洋棋手。
上述是个有点不正式的定义,也比较古老。另一个年代近一点的定义,由Tom
Mitchell提出,来自卡内基梅隆大学,Tom定义的机器学习是,一个好的学习问题定义如下,他说,*一个程序被认为能从经验E中学习,解决任务T,达到性能度量值P,当且仅当,有了经验E后,经过P评判,程序在处理T时的性能有所提升。
目前存在几种不同类型的学习算法。主要的两种类型被我们称之为监督学习和无监督学习。监督学习这个想法是指,我们将教计算机如何去完成任务,而在无监督学习中,我们打算让它自己进行学习。
参考视频: 1 - 3 - Supervised Learning (12 min).mkv
用一个例子介绍什么是监督学习,假如说你想预测房价。一个学生从波特兰俄勒冈州的研究所收集了一些房价的数据。
假如你有一个朋友,他有一套750平方英尺房子,现在他希望把房子卖掉,他想知道这房子能卖多少钱。 关于这个问题,机器学习算法将会怎么帮助你呢?
把这些数据画出来,看起来是这个样子:
X:房子面积,单位是平方英尺
Y:房价,单位是千美元。
我们应用学习算法,可以在这组数据中画一条直线,或者换句话说,拟合一条直线,根据这条线我们可以推测出,这套房子可能卖$150000。当然这不是唯一的算法,可能还有更好的。比如我们不用直线拟合这些数据,用二次方程去拟合可能效果会更好。根据二次方程的曲线,我们可以从这个点推测出,这套房子能卖接近$200000。稍后我们将讨论如何选择学习算法,如何决定用直线还是二次方程来拟合。两个方案中有一个能让你朋友的房子出售得更合理。这些都是学习算法里面很好的例子。以上就是监督学习的例子。
监督学习指的就是我们给学习算法一个数据集。这个数据集由“正确答案”组成。在房价的例子中,我们给了一系列房子的数据,我们给定数据集中每个样本的正确价格,即它们实际的售价然后运用学习算法,算出更多的正确答案。
比如你朋友那个新房子的价格。用术语来讲,这叫做回归问题。我们试着推测出一个连续值的结果,即房子的价格。
一般房子的价格会记到美分,所以房价实际上是一系列离散的值,但是我们通常又把房价看成实数,看成是标量,所以又把它看成一个连续的数值。
回归这个词的意思是,我们在试着推测出这一系列连续值属性 再举另外一个监督学习的例子*假设说你想通过查看病历来推测乳腺癌良性与否,假如有人检测出乳腺肿瘤,恶性肿瘤有害并且十分危险,而良性的肿瘤危害就没那么大,所以人们显然会很在意这个问题。
让我们来看一组数据:这个数据集中,横轴表示肿瘤的大小,纵轴上,我标出1和0表示是或者不是恶性肿瘤。我们之前见过的肿瘤,如果是恶性则记为1,不是恶性,或者说良性记为0。
X:肿瘤的大小
Y:1和0表示是或者不是恶性肿瘤。
我有5个良性肿瘤样本,在1的位置有5个恶性肿瘤样本。现在我们有一个朋友很不幸检查出乳腺肿瘤。假设说她的肿瘤大概这么大,那么机器学习的问题就在于,你能否估算出肿瘤是恶性的或是良性的概率。用术语来讲,这是一个分类问题。
分类指的是,我们试着推测出离散的输出值:0或1良性或恶性,而事实上在分类问题中,输出可能不止两个值。比如说可能有三种乳腺癌,所以你希望预测离散输出0、1、2、3。0
代表良性,1 表示第1类乳腺癌,2表示第2类癌症,3表示第3类,但这也是分类问题。因为这几个离散的输出分别对应良性,第一类第二类或者第三类癌症,在分类问题中我们可以用另一种方式绘制这些数据点。
分类问题:试着推出离散的输出值,按照分类0,1,2,3.。。
现在我用不同的符号来表示这些数据。既然我们把肿瘤的尺寸看做区分恶性或良性的特征,那么我可以这么画,我用不同的符号来表示良性和恶性肿瘤。或者说是负样本和正样本现在我们不全部画X,良性的肿瘤改成用
O 表示,恶性的继续用 X 表示。来预测肿瘤的恶性与否。
不同符号表示良性和恶性
O:良性 X:恶性
在其它一些机器学习问题中,可能会遇到不止一种特征。举个例子,我们不仅知道肿瘤的尺寸,还知道对应患者的年龄。在其他机器学习问题中,我们通常有更多的特征,我朋友研究这个问题时,通常采用这些特征,比如肿块密度,肿瘤细胞尺寸的一致性和形状的一致性等等,还有一些其他的特征。这就是我们即将学到最有趣的学习算法之一。
可能的特征:肿瘤的尺寸、对应患者的年龄、肿块密度、肿瘤细胞尺寸的一致性、形状的一致性…
那种算法不仅能处理2种3种或5种特征,即使有无限多种特征都可以处理。
上图中,我列举了总共5种不同的特征,坐标轴上的两种和右边的3种,但是在一些学习问题中,你希望不只用3种或5种特征。相反,你想用无限多种特征,好让你的算法可以利用大量的特征,或者说线索来做推测。那你怎么处理无限多个特征,甚至怎么存储这些特征都存在问题,你电脑的内存肯定不够用。我们以后会讲一个算法,叫支持向量机,里面有一个巧妙的数学技巧,能让计算机处理无限多个特征。想象一下,我没有写下这两种和右边的三种特征,而是在一个无限长的列表里面,一直写一直写不停的写,写下无限多个特征,事实上,我们能用算法来处理它们
算法利用大量特征来做推测,如何处理无限特征以及存储这些特征。
算法:支持向量机,巧妙的数学技巧让计算机处理无限多个特征。
监督学习其基本思想是,我们数据集中的每个样本都有相应的“正确答案”。再根据这些样本作出预测,就像房子和肿瘤的例子中做的那样。我们还介绍了回归问题,即通过回归来推出一个连续的输出,之后我们介绍了分类问题,其目标是推出一组离散的结果。
监督学习:数据集中每个样本都有相应的“正确答案”,再根据样本做出预测。
回归问题(房子):通过回归推出一个连续的输出。
分类问题(肿瘤):目标是推出一组离散的结果。
现在来个小测验:假设你经营着一家公司,你想开发学习算法来处理这两个问题:
你有一大批同样的货物,想象一下,你有上千件一模一样的货物等待出售,这时你想预测接下来的三个月能卖多少件?
你有许多客户,这时你想写一个软件来检验每一个用户的账户。对于每一个账户,你要判断它们是否曾经被盗过?
那这两个问题,它们属于分类问题、还是回归问题?
问题一是一个回归问题,因为你知道,如果我有数千件货物,我会把它看成一个实数,一个连续的值。因此卖出的物品数,也是一个连续的值。
问题二是一个分类问题,因为我会把预测的值,用 0 来表示账户未被盗,用 1 表示账户曾经被盗过。所以我们根据账号是否被盗过,把它们定为0 或 1,然后用算法推测一个账号是 0 还是 1,因为只有少数的离散值,所以我把它归为分类问题。
以上就是监督学习的内容。
问题一:上千件相同货物待出售,预测接下来三个月能卖多少件?
回归问题,数千件货物看成实数,一个连续的值,因此卖出的物品数也是一个连续的值。
问题二:软件检测每个账户是否被盗过。
分类问题,把预测值用0或1表示账户未被盗过,用算法推测一个账号是0还是1,只有少数离散值,归为分类问题。
参考视频: 1 - 4 - Unsupervised Learning (14 min).mkv
第二种主要的机器学习问题。叫做无监督学习。
上个视频中,已经介绍了监督学习。回想当时的数据集,如图表所示,这个数据集中每条数据都已经标明是阴性或阳性,即是良性或恶性肿瘤。所以,对于监督学习里的每条数据,我们已经清楚地知道,训练集对应的正确答案,是良性或恶性了
数据集中每条数据表明结果,对于监督学习的每条数据,清楚知道训练集对应的正确答案。
在无监督学习中,我们已知的数据。看上去有点不一样,不同于监督学习的数据的样子,即无监督学习中没有任何的标签或者是有相同的标签或者就是没标签。所以我们已知数据集,却不知如何处理,也未告知每个数据点是什么。别的都不知道,就是一个数据集。你能从数据中找到某种结构吗?针对数据集,无监督学习就能判断出数据有两个不同的聚集簇。这是一个,那是另一个,二者不同。是的,无监督学习算法可能会把这些数据分成两个不同的簇。所以叫做聚类算法。事实证明,它能被用在很多地方。
无监督学习没有任何标签,有相同标签/无标签。
已知数据集,不知如何处理,未告知每个数据点是什么。
针对数据集,无监督学习算法把这些数据分成两个不同的簇,叫做聚类算法。
聚类应用的一个例子就是在谷歌新闻中。如果你以前从来没见过它,你可以到这个URL网址news.google.com去看看。谷歌新闻每天都在,收集非常多,非常多的网络的新闻内容。它再将这些新闻分组,组成有关联的新闻。所以谷歌新闻做的就是搜索非常多的新闻事件,自动地把它们聚类到一起。所以,这些新闻事件全是同一主题的,所以显示到一起。
Google新闻:搜索大量新闻事件,自动的把它们聚集到一起。
事实证明,聚类算法和无监督学习算法同样还用在很多其它的问题上。
一个DNA微观数据的例子。基本思想是输入一组不同个体,对其中的每个个体,你要分析出它们是否有一个特定的基因。技术上,你要分析多少特定基因已经表达。所以这些颜色,红,绿,灰等等颜色,这些颜色展示了相应的程度,即不同的个体是否有着一个特定的基因。你能做的就是运行一个聚类算法,把个体聚类到不同的类或不同类型的组(人)……
输入:一组不同个体,分析每个个体是否有特定基因。
运行一个聚类算法,把个体聚类到不同的类或不同类型的组。
这个就是无监督学习,因为我们没有提前告知算法一些信息,比如,这是第一类的人,那些是第二类的人,还有第三类,等等。我们只是说,是的,这是有一堆数据。我不知道数据里面有什么。我不知道谁是什么类型。我甚至不知道人们有哪些不同的类型,这些类型又是什么。但你能自动地找到数据中的结构吗?就是说你要自动地聚类那些个体到各个类,我没法提前知道哪些是哪些。因为我们没有给算法正确答案来回应数据集中的数据,所以这就是无监督学习。
这就是无监督学习
无监督学习或聚集有着大量的应用。它用于组织大型计算机集群。我有些朋友在大数据中心工作,那里有大型的计算机集群,他们想解决什么样的机器易于协同地工作,如果你能够让那些机器协同工作,你就能让你的数据中心工作得更高效。第二种应用就是社交网络的分析。所以已知你朋友的信息,比如你经常发email的,或是你Facebook的朋友、谷歌+圈子的朋友,我们能否自动地给出朋友的分组呢?即每组里的人们彼此都熟识,认识组里的所有人?还有市场分割。许多公司有大型的数据库,存储消费者信息。所以,你能检索这些顾客数据集,自动地发现市场分类,并自动地把顾客划分到不同的细分市场中,你才能自动并更有效地销售或不同的细分市场一起进行销售。这也是无监督学习,因为我们拥有所有的顾客数据,但我们没有提前知道是什么的细分市场,以及分别有哪些我们数据集中的顾客。我们不知道谁是在一号细分市场,谁在二号市场,等等。那我们就必须让算法从数据中发现这一切。最后,无监督学习也可用于天文数据分析,这些聚类算法给出了令人惊讶、有趣、有用的理论,解释了星系是如何诞生的。这些都是聚类的例子,聚类只是无监督学习中的一种。
应用例子
我现在告诉你们另一种。我先来介绍鸡尾酒宴问题。嗯,你参加过鸡尾酒宴吧?你可以想像下,有个宴会房间里满是人,全部坐着,都在聊天,这么多人同时在聊天,声音彼此重叠,因为每个人都在说话,同一时间都在说话,你几乎听不到你面前那人的声音。所以,可能在一个这样的鸡尾酒宴中的两个人,他俩同时都在说话,假设现在是在个有些小的鸡尾酒宴中。我们放两个麦克风在房间中,因为这些麦克风在两个地方,离说话人的距离不同每个麦克风记录下不同的声音,虽然是同样的两个说话人。听起来像是两份录音被叠加到一起,或是被归结到一起,产生了我们现在的这些录音。另外,这个算法还会区分出两个音频资源,这两个可以合成或合并成之前的录音,实际上,鸡尾酒算法的第一个输出结果是:1,2,3,4,5,6,7,8,9,10,所以,已经把英语的声音从录音中分离出来了。第二个输出是这样:
1,2,3,4,5,6,7,8,9,10。
我们介绍了无监督学习,它是学习策略,交给算法大量的数据,并让算法为我们从数据中找出某种结构。
好的,希望你们还记得垃圾邮件问题。如果你有标记好的数据,区别好是垃圾还是非垃圾邮件,我们把这个当作监督学习问题。
新闻事件分类的例子,就是那个谷歌新闻的例子,我们在本视频中有见到了,我们看到,可以用一个聚类算法来聚类这些文章到一起,所以是无监督学习。
细分市场的例子,我在更早一点的时间讲过,你可以当作无监督学习问题,因为我只是拿到算法数据,再让算法去自动地发现细分市场。
最后一个例子,糖尿病,这个其实就像是我们的乳腺癌,上个视频里的。只是替换了好、坏肿瘤,良性、恶性肿瘤,我们改用糖尿病或没病。所以我们把这个当作监督学习,我们能够解决它,作为一个监督学习问题,就像我们在乳腺癌数据中做的一样。
好了,以上就是无监督学习的视频内容,在下一个视频中,我们将深入探究特定的学习算法,开始介绍这些算法是如何工作的,和我们还有你如何来实现它们。
垃圾邮件:监督学习
谷歌新闻:聚类算法,无监督学习。
参考视频: 2 - 1 - Model Representation (8 min).mkv
我们的第一个学习算法是线性回归算法。在这段视频中,你会看到这个算法的概况,更重要的是你将会了解监督学习过程完整的流程。
让我们通过一个例子来开始:这个例子是预测住房价格的,我们要使用一个数据集,数据集包含俄勒冈州波特兰市的住房价格。在这里,我要根据不同房屋尺寸所售出的价格,画出我的数据集。比方说,如果你朋友的房子是1250平方尺大小,你要告诉他们这房子能卖多少钱。那么,你可以做的一件事就是构建一个模型,也许是条直线,从这个数据模型上来看,也许你可以告诉你的朋友,他能以大约220000(美元)左右的价格卖掉这个房子。这就是监督学习算法的一个例子。
它被称作监督学习是因为对于每个数据来说,我们给出了“正确的答案”,即告诉我们:根据我们的数据来说,房子实际的价格是多少,而且,更具体来说,这是一个回归问题。回归一词指的是,我们根据之前的数据预测出一个准确的输出值,对于这个例子就是价格,同时,还有另一种最常见的监督学习方式,叫做分类问题,当我们想要预测离散的输出值,例如,我们正在寻找癌症肿瘤,并想要确定肿瘤是良性的还是恶性的,这就是0/1离散输出的问题。更进一步来说,在监督学习中我们有一个数据集,这个数据集被称训练集。
监督学习:对于每个数据,给出了正确答案。根据我们的数据。预测房子实际价格是多少。
回归问题:我们根据之前的数据预测出一个准确的输出值,此例子为价格。
分类问题:我们想要预测离散的输出值。
训练集:一个数据集
小写m:训练样本的数目。
以房屋交易问题为例,使回归问题训练集(Training Set) 如下表:
将用来描述这个回归问题的标记如下:
m:训练集中实例的数量
x:特征/输入变量
y:目标变量/输出变量
(x,y) :训练集中实例
(x(i),y(i)):第i个观察实例
h代表学习算法的解决方案或函数,也称为假设(hypothesis)
这就是一个监督学习算法的工作方式,我们可以看到这里有我们的训练集里房屋价格 我们把它喂给我们的学习算法,学习算法的工作了,然后输出一个函数,通常表示为小写h表示。 代表hypothesis(假设),h表示一个函数,输入是房屋尺寸大小,就像你朋友想出售的房屋,因此 h 根据输入的x 值来得出y 值,y值对应房子的价格 因此h是一个从x 到 y 的函数映射。
我将选择最初的使用规则h代表hypothesis,因而,要解决房价预测问题,我们实际上是要将训练集“喂”给我们的学习算法,进而学习得到一个假设h,然后将我们要预测的房屋的尺寸作为输入变量输入给h,预测出该房屋的交易价格作为输出变量输出为结果。那么,对于我们的房价预测问题,我们该如何表达h ?
一种可能的表达方式为:h,因为只含有一个特征/输入变量,因此这样的问题叫作单变量线性回归问题。
h是一个从x到y的函数映射。
将训练集“喂”给我们的学习算法,进而学习得到一个假设h,然后将我们要预测的房屋的尺寸作为输入变量输入给h,预测出该房屋的交易价格作为输出变量输出为结果。那么,对于房价预测问题,如何表达h ?
可能的表达方式 h(x)=ax+b
因为只含有一个特征/输入变量,因此这样的问题叫作单变量线性回归问题。
参考视频: 2 - 2 - Cost Function (8 min).mkv
在这段视频中我们将定义代价函数的概念,这有助于我们弄清楚如何把最有可能的直线与我们的数据相拟合。如图:
线性回归有这样一个训练集
m:训练样本数量
比如m=47。
我们的假设函数,进行预测的函数,是h(x) =b+ax。
代价函数也被称作平方误差函数,有时也被称为平方误差代价函数。我们之所以要求出误差的平方和,是因为误差平方代价函数,对于大多数问题,特别是回归问题,都是一个合理的选择。还有其他的代价函数也能很好地发挥作用,但是平方误差代价函数可能是解决回归问题最常用的手段了。
在后续课程中,我们还会谈论其他的代价函数,但我们刚刚讲的选择是对于大多数线性回归问题非常合理的。
也许这个函数有点抽象,可能你仍然不知道它的内涵,在接下来的几个视频里,我们要更进一步解释代价函数J的工作原理,并尝试更直观地解释它在计算什么,以及我们使用它的目的。
参考视频: 2 - 3 - Cost Function - Intuition I (11 min).mkv
在上一个视频中,我们给了代价函数一个数学上的定义。在这个视频里,让我们通过一些例子来获取一些直观的感受,看看代价函数到底是在干什么。
#
假设:h(x)=ax+b
参数:a,b
代价函数:J(a,b)
目标:J(a,b)最小值
参考视频: 2 - 4 - Cost Function - Intuition II (9 min).mkv
这节课中,我们将更深入地学习代价函数的作用,这段视频的内容假设你已经认识等高线图,如果你对等高线图不太熟悉的话,这段视频中的某些内容你可能会听不懂,但不要紧,如果你跳过这段视频的话,也没什么关系,不听这节课对后续课程理解影响不大。
代价函数的样子,等高线图,则可以看出在三维空间中存在一个使得J(a,b)最小的点。
通过这些图形,我希望你能更好地理解这些代价函数所表达的值是什么样的,它们对应的假设是什么样的,以及什么样的假设对应的点,更接近于代价函数J的最小值。
我们真正需要的是一种有效的算法,能够自动地找出这些使代价函数取最小值的参数a和b来。
我们也不希望编个程序把这些点画出来,然后人工的方法来读出这些点的数值,这很明显不是一个好办法。我们会遇到更复杂、更高维度、更多参数的情况,而这些情况是很难画出图的,因此更无法将其可视化,因此我们真正需要的是编写程序来找出这些最小化代价函数的a和b的值,在下一节视频中,我们将介绍一种算法,能够自动地找出能使代价函数J最小化的参数a和b的值。
参考视频: 2 - 5 - Gradient Descent (11 min).mkv
梯度下降是一个用来求函数最小值的算法,我们将使用梯度下降算法来求出代价函数J的最小值。
梯度下降背后的思想是:开始时我们随机选择一个参数的组合(a1,a2,a3,…,an)
,计算代价函数,然后我们寻找下一个能让代价函数值下降最多的参数组合。我们持续这么做直到到到一个局部最小值(local
minimum),因为我们并没有尝试完所有的参数组合,所以不能确定我们得到的局部最小值是否便是全局最小值(global
minimum),选择不同的初始参数组合,可能会找到不同的局部最小值。
梯度下降是用来求函数最小值的算法,使用梯度下降算法求出代价函数J的最小值。
目标:找到能让代价函数值下降最多的参数组合,持续做知道一个局部最小值。
想象一下你正站立在山的这一点上,站立在你想象的公园这座红色山上,在梯度下降算法中,我们要做的就是旋转360度,看看我们的周围,并问自己要在某个方向上,用小碎步尽快下山。这些小碎步需要朝什么方向?如果我们站在山坡上的这一点,你看一下周围,你会发现最佳的下山方向,你再看看周围,然后再一次想想,我应该从什么方向迈着小碎步下山?然后你按照自己的判断又迈出一步,重复上面的步骤,从这个新的点,你环顾四周,并决定从什么方向将会最快下山,然后又迈进了一小步,并依此类推,直到你接近局部最低点的位置。
批量梯度下降(batch gradient descent)算法公式为:
α是学习率,决定了沿着代价函数下降程度最大的方向向下迈出的步子有多大。
在批量梯度下降中,所有参数 - 学习速率乘以代价函数的导数。
帝都下降中,要更新θ0和θ1,当j=0和j=1时,会产生更新,你将更新J(θ0)和J(θ1),在这个表达式中,如果要更新这个等式,需要同时更新θ0和θ1。
实现方法是:你应该计算公式右边的部分,通过那一部分计算出a和b的值,然后同时更新a和b。
进一步阐述这个过程:
在梯度下降算法中,这是正确实现同时更新的方法。我不打算解释为什么你需要同时更新,同时更新是梯度下降中的一种常用方法。我们之后会讲到,同步更新是更自然的实现方法。当人们谈到梯度下降时,他们的意思就是同步更新。
在接下来的视频中,我们要进入这个微分项的细节之中。我已经写了出来但没有真正定义,如果你已经修过微积分课程,如果你熟悉偏导数和导数,这其实就是这个微分项:如果你不熟悉微积分,不用担心,即使你之前没有看过微积分,或者没有接触过偏导数,在接下来的视频中,你会得到一切你需要知道,如何计算这个微分项的知识。
下一个视频中,希望我们能够给出实现梯度下降算法的所有知识 。
参考视频: 2 - 6 - Gradient Descent Intuition (12 min).mkv
在之前的视频中,我们给出了一个数学上关于梯度下降的定义,本次视频我们更深入研究一下,更直观地感受一下这个算法是做什么的,以及梯度下降算法的更新过程有什么意义。梯度下降算法如下:
描述:对θ复制,使得J(θ)按照梯度下降最快的方向进行,一直迭代下去,最终得到局部最小值,其中α是学习率,它决定了我们能沿着代价函数下降程度最大的方向向下迈出的步子有多大。
对于这个问题,求导的目的,基本上可以说取这个红点的切线,就是这样一条红色的直线,刚好与函数相切于这一点,让我们看看这条红色直线的斜率,就是这条刚好与函数曲线相切的这条直线,这条直线的斜率正好是这个三角形的高度除以这个水平长度,现在,这条线有一个正斜率,也就是说它有正导数,因此,我得到的新的θ1,θ1更新后等于θ1减去一个正数乘以α。
梯度下降法的更新规则:
参考视频: 3 - 1 - Matrices and Vectors (9 min).mkv
如图:这个是4×2矩阵,即4行2列,如m为行,n为列,那么m×n即4×2。
矩阵的维数即行数×列数
参考视频: 3 - 2 - Addition and Scalar Multiplication (7 min).mkv
参考视频: 3 - 3 - Matrix Vector Multiplication (14 min).mkv
矩阵和向量的乘法如图:m×n的矩阵乘以n×1的向量得到m×1的向量。
算法举例:
参考视频: 3 - 4 - Matrix Matrix Multiplication (11 min).mkv
矩阵乘法:
m×n矩阵乘以n×o矩阵,变成m×o矩阵。
如果这样说不好理解的话就举一个例子来说明一下,比如说现在有两个矩阵和,那么它们的乘积就可以表示为图中所示的形式。
参考视频: 3 - 5 - Matrix Multiplication Properties (9 min).mkv
矩阵乘法的性质:
矩阵的乘法不满足交换律:A×B≠B×A
满足结合律:A×(B×C)=(A×B)×C
单位矩阵:在矩阵的乘法中,有一种矩阵起着特殊的作用,如同数的乘法中的1,我们称这种矩阵为单位矩阵.它是个方阵,一般用I或者E 表示,本讲义都用I代表单位矩阵,从左上角到右下角的对角线(称为主对角线)上的元素均为1以外全都为0。如:
参考视频: 3 - 6 - Inverse and Transpose (11 min).mkv
**矩阵的逆:**如矩阵A是一个m×m矩阵(方阵),如果有逆矩阵,则AA-1=A-1A=I
一般在OCTAVE或者MATLAB中进行计算矩阵的逆矩阵。
**矩阵的转置:**设A为m×n矩阵(m行n列),第i行j列的元素是a(i,j),即A=a(i,j)
定义A的转置为n×m阶的矩阵B,满足B=a(i,j),即b(i,j)=a(j,i),记AT=B
将A所有元素,绕着一条,从第一行第一列元素出发的,右下方45度的射线作镜面反转,即得到A的转置。
矩阵转置的基本性质:
matlab中矩阵转置:直接打一撇x=y’