斯坦福机器学习课程 第四周 (1)神经网络引入

非线性假设

视频地址

接下来的课程中,我将为大家介绍一种叫做“神经网络”(Neural Network)的机器学习算法。我们首先来讨论神经网络的表层结构,在后来的课程中再来具体讨论学习算法。

神经网络算法实际上是一个相对古老的算法,并且沉寂了一段时间。不过到了现在,它又称为许多机器学习问题的首选技术。

那么我们已经有了线性回归,和逻辑回归,为什么还需要学习神经网络这个算法呢?为了阐述研究神经网络的目的,我们首先来看几个机器学习问题作为例子。这几个例子都依赖于研究复杂的非线性分类器。

线性回归对于非线性假设的不可行性分析

考虑这个监督学习分类的问题:

我们已经有了对应的训练集,如果利用逻辑回归算法来解决这个问题,我们首先要构造一个包含很多非线性项的逻辑回归函数:

$$
g(\theta_{0} + \theta_{1}x_{1} + \theta_{2}x_{2} + \theta_{3}x_{1}x_{2} + \theta_{4}x_{1}^{2}x_{2} + \theta_{5}x_{1}^{3}x_{2} + \theta_{6}x_{1}x_{2}^{2} + …)
$$

这里$g()$函数依然是一个S型函数,即Logistic函数。

当多项式数足够多时,你可能可以得到一个分开正样本和负样本的分界线:

当你只有两项时,这种方法确实能得到不错的结果,因为你完全可以把$x_{1}$和$x_{2}$的所有组合都包含到多项式中。但对于许多复杂的机器学习问题,涉及的项往往多于两项。

我们之前讨论过房价预测的问题,假设你现在处理的是关于住房的分类问题,而不是一个回归问题。假设你对一栋房子的多方面特点都有所了解,你想预测房子在未来半年内能被卖出去的概率,这是一个分类问题。我们可以想出多达上百个特征。对于这类问题,如果要包含所有的二次项,最终的多项式也可能有很多项:

$$
x_{1}^{2},x_{1}x_{2},x_{1}x_{3},x_{1}x_{4}…x_{1}x_{100},x_{2}^{2},x_{2}x_{3}…
$$

对于100个特征的情况下,会有5050个二次项组合。而且随着特征数量的增加,二次项的个数大约以$O(n^{2})$的量级增长,其中$n$是原始项(特征)的个数。

因此,包含所有的二次项是困难的,所以这可能不是一个好方法,而且由于项数过多,最后的结果很有可能是过拟合的。此外,这里也存在运算量过大的问题。

当然,你也可以只考虑上面这些二次项的子集,比如$x_{1}^{2},x_{2}^{2},x_{3}^{2}…x_{100}^{2}$,这样就能将二次项的数量大幅减少了,但是却忽略了太多的相关项,在处理问题的时候,不可能得到理想的结果。

5000多个二次项已经很多了,如果我们还要引入三次项,那么我们的项的个数将以$O(n^{3})$的量级增长,当有100个特征的情况下,大约有170000个三次项组合。所以,当特征个数增大时,这些高阶多项式项数将以几何级数递增,特征空间也随之急剧膨胀。因此,当特征数量较多时,通过这种方式来构建分类器,并不是一个好办法。

图像识别中使用线性回归的不可行性举例

对于许多实际的机器学习问题,特征个数$n$是很大的,举个关于计算机视觉中的一个例子:

假设你想要使用机器学习算法来训练一个分类器,使它检测一个图像来判断图像是否为一辆汽车,很多人可能会很好奇,这对计算机视觉来说有什么难的?当你们看到下面这幅图时,下面是一辆车,这是一目了然的事情,你肯定会觉得很奇怪,为什么学习算法竟可能会不知道图像是什么:

为了解答这个问题,我们取出图像的一小部分,将其放大,结果表明,当人眼看到一辆汽车时,计算机实际上看到的却是这样一个数据矩阵:

这个矩阵中的每个元素表示了像素强度值,告诉我们图像中每个像素的亮度值。因此,对于计算机视觉来说,问题就变成了根据这个像素点亮度矩阵,来告诉我们这些数值代表一个汽车门把手。

具体而言,当使用机器学习算法构造一个汽车识别器时,我们要想出一个带标签的样本集,其中一些样本是各类汽车,另一部分样本是其他任何东西。将这个样本集输入给学习算法以训练出一个分类器,训练完毕后,我们输入一幅新的图片,让分类器来判定“这是什么东西?”理想情况下,分类器能识别出这是一辆汽车。

为了理解引入非线性分类器的必要性,我们从学习算法的训练样本中挑出一些汽车的图片,和一些非汽车的图片,让我们从其中每幅图片中挑出一组像素点,在坐标系中标出这幅汽车的位置:

汽车的位置取决于像素点1和像素点2的亮度,让我们用同样的方法标出其他图片中汽车的位置:

观察这张图片两个相同的像素位置的像素亮度,这两点都有着不同的像素亮度,所以在这幅图中,它们处于不同的位置。

我们继续画上两个非汽车样本,并且用”-“表示非汽车:

随着样本数量的增多,我们将发现这两类数据分布在坐标系中的不同区域:

因此我们现在需要一个非线性分类器,来尽量分开这两类样本:

这个分类问题中,特征空间的维度是多少呢?假设我们使用$50*50$像素的图片,虽然这个图片尺寸很小,但依然有2500个像素点。因此我们的特征数量$n$是2500个,特征向量$X$包含了所有像素点的亮度值。如果存储的是每个像素点的灰度值(典型的计算机图片表示方法),那么每个元素值应该介于0到255之间。如果图片存储形式是RGB模式,每个像素点包含红、绿、蓝三个子像素,那么$n=7500$。

因此,如果我们非要通过包含所有的二次项来解决这个非线性问题,那么,这个式子的所有条件的个数大约是300万个:

显然,这数字大的有些离谱了,计算成本太高了。

神经网络和大脑

视频地址

神经网络是一种很古老的算法,它最初产生的目的是制造能模拟大脑的机器,在这门课中,我将向你们介绍神经网络。因为它能很好的解决不同的机器学习问题而不只因为它们在逻辑上行得通。这节课中,主要介绍一些神经网络的背景知识,由此我们能知道可以用它们来做什么。

神经网络产生的原因是人们想尝试设计出模仿大脑的算法。从某种意义上说,想要建立学习系统,那么为什么不去模仿我们所认识的,最神奇的学习机器–人类的大脑呢?

神经网络逐渐兴起于二十世纪八九十年代应用得非常广泛,但由于各种原因,在90年代的后期应用减少了,但是最近,神经网络又东山再起了,其中一个原因是,神经网络是计算量有些偏大的算法。然而,大概是由于近些年计算机的运行速度变快,才足以真正运行起大规模的神经网络,正是由于这个原因,和其他一些我们后面会讨论到的技术因素,使得如今的神经网络对于许多应用来说是最先进的技术。

当你想模拟大脑时,是指想制造出与人类大脑作用效果相同的机器,对吧?大脑可以学会去以看而不是听的方式处理图像,学会处理我们的触觉,我们能学习数学,学着做微积分。而且大脑能处理各种不同的令人惊奇的事情,似乎如果你想要模仿它,你得写很多不同的软件来模拟所有大脑告诉我们的这些五花八门的奇妙的事情。不过能不能假设大脑做所有这些不同事情的方法不需要用上千个不同的程序去实现,相反的,大脑处理的方法只需要一个单一的学习算法就可以了?尽管这只是一个假设,不过我可以和你分享一些这方面的证据:

大脑的这一小片红色区域,是你的听觉皮层。你现在正在听到的声音,靠的是耳朵接收到声音信号,并把声音信号传递给你的听觉皮层,正因如此你才能明白我的话。

神经系统科学家做了下面这个有趣的实验:

把耳朵到听觉皮层的神经切断,在这种情况下将其重新接到一个动物的大脑上,这样从眼睛到视神经的信号最终将传到听觉皮层。如果这样做了,那么结果表明听觉皮层将会学会“看”,这里“看”代表了我们所知道的每层含义。所以如果你对动物这样做,那么动物就可以完成视觉辨别任务,它们可以看图像,并根据图像做出适当的决定。它们正是通过脑组织中的这个部分完成的。

来看另一个例子:

这块红色的脑组织是你的躯体感觉皮层,这是你用来处理触觉的。如果你做一个和刚才类似的重接实验,那么躯体感觉皮层也能学会”看“。这个实验和其它一些类似的实验被称为神经重接实验

从这个意义上说,如果人体有同一块脑组织可以处理光、声或触觉信号,那么也许存在一种学习算法,可以同时处理视觉、听觉和触觉,而不是需要运行上千个不同的程序,或者上千个不同的算法来做这些大脑所完成的成千上万的美好事情。也许我们需要做的就是找出一些近似的,或实际的大脑学习算法,然后实现它。大脑通过自学掌握如何处理这些不同类型的数据,在很大的程度上可以猜想如果我们把几乎任何一种传感器接入到大脑的几乎任何一个部位的话,大脑就会学会处理它。

下面再举几个例子:

这张图是用舌头学会“看”的一个例子,这实际上是一个名为BrainPort的系统,它现在正在FDA(美国食品和药物管理局)的临床试验阶段,它能帮助失明人士看见事物。它的原理是:你在前额上带一个灰度摄像头,面朝前它就能获取你面前事物的低分辨率的灰度图像,你连一根线到舌头上安装的电极阵列上,那么每个像素都被映射到你舌头的某个位置上,可能电压值高的点对应一个暗像素,电压值低的点对应于亮像素,即使依靠它现在的功能,使用这种系统就能让你我在几十分钟里就学会用我们的舌头“看”东西。

这是第二个例子:

关于人体回声定位(或者说人体声纳),你可以通过弹响指或者咂舌头来实现,现在有失明人士确实在学校里接受这样的培训,并学会解读从环境反弹回来的声波模式—这就是声纳。如果你搜索YouTube之后就会发现,有些视频讲述了一个令人称奇的孩子,他因为癌症眼球惨遭移除,虽然失去了眼球但是通过打响指,他可以四处走动而不撞到任何东西。他能滑滑板,他可以将篮球投入篮框中,注意这是一个没有眼球的孩子。

第三个例子是触觉皮带:

如果你把它戴在腰上,蜂鸣器会响,而且总是朝向北时发出嗡嗡声。它可以使人拥有方向感。用类似于鸟类感知方向的方式。

还有一些离奇的例子:

如果你在青蛙身上插入第三只眼,青蛙也能学会使用那只眼睛。

因此,如果你能把几乎任何传感器接入到大脑中,大脑的学习算法就能找出学习数据的方法,并处理这些数据。

从某种意义上来说,如果我们能找出大脑的学习算法,然后在计算机上执行 大脑学习算法或与之相似的算法,也许这将是我们向人工智能迈进做出的最好的尝试。人工智能的梦想就是有一天能制造出真正的智能机器,当然我不是教神经网络的,介绍它只因为它可能为我们打开一扇进入遥远的人工智能梦的窗户。对于我个人来说,它也是我研究生涯中致力于的一个项目,但我在这节课中讲授神经网络的原因,主要是对于现代机器学习应用,它是最有效的技术方法。因此在接下来的一些课程中,我们将开始深入到神经网络的技术细节。那么你就可以将它们应用到现代机器学习的应用中,并利用它们很好地解决问题。但对我来说,使我兴奋的原因之一,就是它或许能给我们一些启示,让我们知道当我们在思考未来有什么样的算法能以与人类相似的方式学习时,我们能做些什么。

坚持原创技术分享,您的支持将鼓励我继续创作!