1.1 欢迎

https://www.bilibili.com/video/BV164411b7dx?p=1

第一节主要讲了什么是机器学习,机器学习能做些什么事情

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

你或许每天都在不知不觉中使用了机器学习的算法。每次,你打开谷歌、必应,搜索到你需要的内容,正是因为他们有良好的学习算法。谷歌和微软实现了学习算法来排行网页。每次,你用Facebook或苹果的图片分类程序他能认出你朋友的照片,这也是机器学习。每次您阅读您的电子邮件垃圾邮件筛选器,可以帮你过滤大量的垃圾邮件这也是一种学习算法。对我来说,我感到激动的原因之一是有一天做出一个和人类一样聪明的机器。实现这个想法任重而道远,许多AI研究者认为,实现这个目标最好的方法是通过让机器试着模仿人的大脑学习。

在这门课中,你还讲学习到关于机器学习的前沿状况。但事实上只了解算法、数学并不能解决你关心的实际的问题。所以,我们将花大量的时间做练习,从而你自己能实现每个这些算法,从而了解内部机理

那么,为什么机器学习如此受欢迎呢?原因是,机器学习不只是用于人工智能领域

我们创造智能的机器,有很多基础的知识。比如,我们可以让机器找到AB之间的最短路径,但我们仍然不知道怎么让机器做更有趣的事情,如web搜索、照片标记、反垃圾邮件。我们发现,唯一方法是让机器自己学习怎么来解决问题。所以,机器学习已经成为计算机的一个能力。

现在它涉及到各个行业和基础科学中。

吴恩达老师从事于机器学习,但他每个星期都跟直升机飞行员、生物学家、很多计算机系统程序员交流(我在斯坦福大学的同事同时也是这样)和平均每个星期会从硅谷收到两、三个电子邮件,这些联系他的人都对将学习算法应用于他们自己的问题感兴趣。这表明机器学习涉及的问题非常广泛。有机器人、计算生物学、硅谷中大量的问题都收到机器学习的影响。

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

手写识别:现在我们能够非常便宜地把信寄到这个美国甚至全世界的原因之一就是当你写一个像这样的信封,一种学习算法已经学会如何读你信封,它可以自动选择路径,所以我们只需要花几个美分把这封信寄到数千英里外。

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

最后学习算法被用来理解人类的学习和了解大脑。

我们将谈论如何用这些推进我们的AI 梦想。几个月前,一名学生给我一篇文章关于最顶尖的12个IT技能。拥有了这些技能HR绝对不会拒绝你。这是稍显陈旧的文章,但在这个列表最顶部就是机器学习的技能。所以我认为需求远远没有被满足,现在学习“机器学习”非常好。

在接下来的章节中,我们将开始给更正式的定义,什么是机器学习。然后我们会开始学习机器学习的主要问题和算法你会了解一些主要的机器学习的术语,并开始了解不同的算法,用哪种算法更合适

1.2什么是机器学习?

https://www.bilibili.com/video/BV164411b7dx?p=2

没有统一的定义,以下是经典的定义,供于理解

Arthur Samuel,他定义机器学习为,在进行特定编程的情况下,给予计算机学习能力的领域。


Samuel的定义可以回溯到50年代,他编写了一个西洋棋程序。这程序神奇之处在于,编程者自己并不是个下棋高手。但因为他太菜了,于是就通过编程,让西洋棋程序自己跟自己下了上万盘棋。通过观察哪种布局(棋盘位置)会赢,哪种布局会输,久而久之,这西洋棋程序明白了什么是好的布局,什么样是坏的布局。然后就牛逼大发了,程序通过学习后,玩西洋棋的水平超过了Samuel。这绝对是令人注目的成果。
尽管编写者自己是个菜鸟,但因为计算机有着足够的耐心,去下上万盘的棋,没有人有这耐心去下这么多盘棋。通过这些练习,计算机获得无比丰富的经验,于是渐渐成为了比Samuel更厉害的西洋棋手。
上述是个有点不正式的定义,也比较古老。


另一个年代近一点的定义,由Tom Mitchell提出,来自卡内基梅隆大学。Tom定义的机器学习是,一个好的学习问题定义如下,他说,一个程序被认为能从经验E中学习,解决任务T**,达到性能度量值P,当且仅当,有了经验E后,经过P评判,程序在处理T时的性能有所提升。


经验E就是程序上万次的自我练习的经验
任务T就是下棋
性能度量值P就是它在与一些新的对手比赛时,赢得比赛的概率

翻译以上定义,即一个程序被认为可以从上万次下棋经验(E)中学习,并运用于今后的棋局(T)中,而且达到一定的胜率§。也就是不断学习E,通过胜率P来评判改进,使得今后程序在处理T任务的性能不断提升。

抽象为:程序在任务T的性能在得到经验E之后,会提高性能度量P


今后学习一个概念后,可能展现例子进行验证

例子:我们假设您的电子邮件程序会观察收到的邮件是否被你标记为垃圾邮件。在这种Email客户端中,你点击“垃圾邮件”按钮,报告某些Email为垃圾邮件,不会影响别的邮件。基于被标记为垃圾的邮件,您的电子邮件程序能更好地学习如何过滤垃圾邮件。请问,在这个设定中,任务T、经验E、性能度量P是什么是什么?

吴恩达机器学习字幕 吴恩达机器学课程讲义_数据


T:给邮件分类

E:观察你会将哪些邮件视为垃圾邮件

P:判断垃圾邮件的准确率


通过上述定义,我们希望能过根据学习算法,提高我们的P


学习算法

目前有各种不同类型的学习算法,监督学习和无监督学习

监督学习:我们教会计算机做某件事情

无监督学习:让计算机自己学习

其他:强化学习和推荐系统等各种术语。

接下来两节会给出更深的定义以及如何使用。

其一:我们将花费最多的精力来讨论这两种学习算法。

其二:会花费大量时间的任务是了解应用学习算法的实用建议。

吴恩达老师非常注重这部分内容。。给你讲授学习算法就好像给你一套工具,相比于提供工具,可能更重要的,是教你如何使用这些工具。例如,只提供钓鱼工具,而不教你如何使用,这样的教法并不好。你拥有这些工具,但更重要的是,你要学会如何恰当地使用这些工具。会用与不会用的人之间,存在着鸿沟。尤其是知道如何使用这些机器学习算法的,与那些不知道如何使用的人。我们学习这些机器学习、人工智能的最佳实践以及如何让它们工作,我们该如何去做,硅谷和世界各地最优秀的人是怎样做的。

1.3监督学习

https://www.bilibili.com/video/BV164411b7dx?p=3 由例子,引出监督学习更正式的定义

吴恩达机器学习字幕 吴恩达机器学课程讲义_吴恩达机器学习字幕_02

收集了一些房价的数据。横轴表示房子的面积,单位是平方英尺,纵轴表示房价,单位是千美元。那基于这组数据,假如你有一个朋友,他有一套750平方英尺房子,现在他希望把房子卖掉,他想知道这房子能卖多少钱。
机器学习算法将会怎么帮助你呢?我们应用学习算法,可以在这组数据中画一条直线,或者换句话说,拟合一条直线,根据这条线我们可以推测出,这套房子可能卖$$150,00。当然这不是唯一的算法。可能还有更好的,比如我们不用直线拟合这些数据,用二次方程去拟合可能效果会更好。根据二次方程的曲线,我们可以从这个点推测出,这套房子能卖接近。
稍后我们将讨论如何选择学习算法,如何决定用直线还是二次方程来拟合。两个方案中有一个能让你朋友的房子出售得更合理。这些都是学习算法里面很好的例子。

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


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


再举一个例子

吴恩达机器学习字幕 吴恩达机器学课程讲义_数据集_03


假设说你想通过查看病历来推测乳腺癌良性与否,让我们来看一组数据:这个数据集中,横轴表示肿瘤的大小,纵轴上,我标出1和0表示是或者不是恶性肿瘤。我们之前见过的肿瘤,如果是恶性则记为1,不是恶性,或者说良性记为0。

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


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


因为这几个离散的输出分别对应良性,第一类第二类或者第三类癌症,在分类问题中我们可以用另一种方式绘制这些数据点。

吴恩达机器学习字幕 吴恩达机器学课程讲义_人工智能_04

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


吴恩达机器学习字幕 吴恩达机器学课程讲义_吴恩达机器学习字幕_05

在这个例子中,我们知道病人的年龄和肿瘤的大小,并且有两组病人,良心用圈表示,恶心用叉表示。假设有一个朋友,很不幸有一个瘤(粉色表示),在给定的数据集上,学习算法可以在数据上画出一条直线,设法将恶心肿瘤和良性肿瘤分开,观察朋友肿瘤处在是良性区域,预测良性肿瘤的概率大于恶心的概率。

在这个例子中,我们有两种特征(年龄和肿瘤大小),其他学习算法往往会有不止一种特征。通常采用这些特征,比如肿块密度,肿瘤细胞尺寸的一致性和形状的一致性等等,还有一些其他的特征。这就是我们即将学到最有趣的学习算法之一。在一些学习问题中,你希望不只用3种或5种特征。相反,你想用无限多种特征,好让你的算法可以利用大量的特征,或者说线索来做推测。那你怎么处理无限多个特征,甚至怎么存储这些特征都存在问题,你电脑的内存肯定不够用。**我们以后会讲一个算法,叫支持向量机,里面有一个巧妙的数学技巧,能让计算机处理无限多个特征。**想象一下,我没有写下这两种和右边的三种特征,而是在一个无限长的列表里面,一直写一直写不停的写,写下无限多个特征,事实上,我们能用算法来处理它们。

回顾

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

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

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

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

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

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

1.4无监督学习

https://www.bilibili.com/video/BV164411b7dx?p=4

吴恩达机器学习字幕 吴恩达机器学课程讲义_人工智能_06

在上节中,已经介绍了监督学习。回想当时的数据集,如图表所示,这个数据集中每条数据都已经标明是阴性或阳性,即是良性或恶性肿瘤。所以,对于监督学习里的每条数据,我们已经清楚地知道,训练集对应的正确答案,是良性或恶性了。

吴恩达机器学习字幕 吴恩达机器学课程讲义_吴恩达机器学习字幕_07

在无监督学习中,我们已知的数据。看上去有点不一样,不同于监督学习的数据的样子,即无监督学习没有任何的标签。所以我们已知数据集,却不知如何处理,也未告知每个数据点是什么。相当于给出一个数据集。并从数据中找到某种结构。针对数据集,无监督学习就能判断出数据有两个不同的聚集簇。这是一个,那是另一个,二者不同。是的,无监督学习算法可能会把这些数据分成两个不同的簇。所以叫做聚类算法。事实证明,它能被用在很多地方。

例子

吴恩达机器学习字幕 吴恩达机器学课程讲义_数据集_08


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


吴恩达机器学习字幕 吴恩达机器学课程讲义_人工智能_09


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


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

吴恩达机器学习字幕 吴恩达机器学课程讲义_数据集_10

无监督学习或聚集有着大量的应用。

例子1:它用于组织大型计算机集群。有些朋友在大数据中心工作,那里有大型的计算机集群,他们想解决什么样的机器易于协同地工作,如果你能够让那些机器协同工作,你就能让你的数据中心工作得更高效。

例子2:应用于社交网络的分析。所以已知你朋友的信息,比如你经常发email的,或是你Facebook的朋友、谷歌+圈子的朋友,我们能否自动地给出朋友的分组呢?即每组里的人们彼此都熟识,认识组里的所有人?还有市场分割。

例子3:许多公司有大型的数据库,存储消费者信息。所以,你能检索这些顾客数据集,自动地发现市场分类,并自动地把顾客划分到不同的细分市场中,你才能自动并更有效地销售或不同的细分市场一起进行销售。这也是无监督学习,因为我们拥有所有的顾客数据,但我们没有提前知道是什么的细分市场,以及分别有哪些我们数据集中的顾客。我们不知道谁是在一号细分市场,谁在二号市场,等等。那我们就必须让算法从数据中发现这一切。

例子4:无监督学习也可用于天文数据分析,这些聚类算法给出了令人惊讶、有趣、有用的理论,解释了星系是如何诞生的。这些都是聚类的例子,聚类只是无监督学习中的一种。

实现无监督学习算法的案例,鸡尾酒算法


有个宴会房间里满是人,都在聊天,这么多人同时在聊天,声音彼此重叠,你几乎听不到你面前那人的声音。假设,在一个这样的鸡尾酒宴中的两个人,他俩同时都在说话,我们放两个麦克风在房间中,因为这些麦克风在两个地方,离说话人的距离不同,则每个麦克风记录下不同的声音。听起来像是两份录音被叠加到一起。通过这个鸡尾酒算法,会区分出两个音频资源。这两个音频资源可以合成为之前的录音,实际上,假设一个英国人和法国人用不同的语言数1-10,鸡尾酒算法的第一个输出结果是:

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建软件原型,因为软件在Octave中可以令人难以置信地、快速地实现这些学习算法。这里的这些函数比如SVM支持向量机)函数,奇异值分解Octave里已经建好了。如果你试图完成这个工作,但借助C++或JAVA的话,你会需要很多很多行的代码,并链接复杂的C++或Java库。所以,你可以实现这些算法,借助C++或JavaPython,它只是用这些语言来实现会更加复杂。(编者注:这个是当时的情况,现在Python变主流了)

许多人其实就是,使用一种工具像Octave来做第一步的学习算法的原型搭建,只有在你已经让它工作后,你才移植它到C++或Java或别的语言。