吴恩达机器学习(八)——神经网络模型

一、非线性假设(神经网络模型)

下面几个例子来阐述神经网络算法的目的,这几个问题的解决都依赖于研究复杂的非线性分类器。
在这里插入图片描述

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

事实上,当多项式项数足够多时,那么可能你能够得到一个,分开正样本和负样本的分界线, 当只有两项时,比如 x1、x2 这种方法确实能得到不错的结果,因为你可以把x1和x2的所有组合都包含到多项式中,但是对于许多复杂的机器学习问题,涉及的项往往多于两项。

房价预测的问题:假设现在要处理的是房子在未来半年内,能被卖出去的概率,这是一个分类问题。对于不同的房子有可能就有上百个特征,对于这类问题,如果要包含所有的二次项,在n=100的情况下,最终也有5000个二次项,随着特征个数n的增加。二次项的个数大约以n^2的量级增长,因此要包含所有的 二次项是很困难的,所以这可能不是一个好的做法。
在这里插入图片描述
而且由于项数过多,最后的结果很有可能是过拟合的。此外,在处理这么多项时,也存在运算量过大的问题。当然,你也可以试试只包含上边这些二次项的子集,但是由于忽略了太多相关项,在处理类似左上角的数据时,不可能得到理想的结果。5000个二次项看起来已经很多了,而现在假设包括三次项或者三阶项,大概17000个三次项,这并不是一个好做法。

举个例子:关于计算机视觉中的一个问题。假设你想要使用机器学习算法来训练一个分类器,使它检测一个图像,来判断图像是否为一辆汽车,我们取出这幅图片中的一小部分,将其放大。比如图中这个红色方框内的部分,当人眼看到一辆汽车时,计算机实际上看到的却是这个 一个数据矩阵,它们表示了像素强度值,告诉我们图像中每个像素的亮度值。因此,对于计算机视觉来说问题就变成了:根据这个像素点亮度矩阵来告诉我们这些数值代表一个汽车门把手。
在这里插入图片描述

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

为了理解引入非线性分类器的必要性,我们从学习算法的训练样本中挑出一些汽车图片和一些非汽车图片,我们从其中每幅图片中挑出一组像素点 pixel1和pixel2。

在坐标系中画上更多的新样本,用’’+"表示汽车图片用“-”表示非汽车图片,我们现在需要一个非线性分类器来尽量分开这两类样本。

这个分类问题中特征空间的维数是多少? 假设我们用5050像素的图片,一共2500个像素点。因此,我们的特征向量的元素数量 n=2500,特征向量X 包含了所有像素点的亮度值。如果我们用的是RGB彩色图像,每个像素点包含红、绿、蓝三个子像素,那么我们的特征向量的元素数量就变为n=7500。因此,如果我们非要通过包含所有的二次项来解决这个非线性问题,那么,这就是式子中的所有条件。 xixj 连同开始的2500像素,总共大约有300万个。这计算成本太高了并不是一个解决复杂非线性问题的好办法 。

二、神经元和大脑

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

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

当你想模拟大脑时,是指想制造出与人类大脑作用效果相同的机器,对吧?

大脑可以学会去 以看而不是听的方式处理图像,学会处理我们的触觉。

我们能学习数学,学着做微积分。

大脑能处理各种不同的令人惊奇的事情。

似乎如果你想要模仿它,你得写很多不同的软件来模拟所有,大脑告诉我们的这些五花八门的奇妙的事情。不过能不能假设大脑做所有这些不同事情的方法。不需要用上千个不同的程序去实现。相反的,大脑处理的方法,只需要一个单一的学习算法就可以了? 尽管这只是一个假设。
在这里插入图片描述

不过让我和你分享一些这方面的证据:大脑的这一部分,这一小片红色区域是你的听觉皮层。你现在正在理解我的话,这靠的是耳朵。耳朵接收到声音信号,并把声音信号传递给你的,听觉皮层正因如此你才能明白我的话。

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

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

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

从这个意义上说,如果人体有同一块脑组织可以处理光、 声或触觉信号,那么也许存在一种学习算法 可以同时处理视觉、听觉和触觉,而不是需要运行上千个不同的程序,或者上千个不同的算法来做这些大脑所完成的成千上万的美好事情,也许我们需要做的就是找出一些近似的或实际的大脑学习算法,然后实现它。

大脑通过自学掌握如何处理这些不同类型的数据,在很大的程度上,可以猜想如果我们把几乎任何一种传感器接入到大脑的几乎任何一个部位的话,大脑就会学会处理它。
在这里插入图片描述

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

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

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

还有一些离奇的例子:如果你在青蛙身上插入第三只眼,青蛙也能学会使用那只眼睛。

这些例子非常令人惊奇,如果你能把几乎任何传感器接入到大脑中,大脑的学习算法就能找出学习数据的方法 并处理这些数据。从某种意义上来说,如果我们能找出大脑的学习算法,然后在计算机上执行大脑学习算法或与之相似的算法。 也许这将是我们向人工智能迈进做出的最好的尝试。人工智能的梦想就是有一天能制造出真正的智能机器。

三、神经网络模型

运用神经网络时,我们该如何表示我们的假设或模型:

在这里插入图片描述
神经网络是在模仿大脑中的神经元或者神经网络时发明的,因此,要解释如何表示模型假设,我们先来看单个神经元在大脑中是什么样的。

我们的大脑中充满了这样的神经元,神经元是大脑中的细胞,其中有两点值得我们注意:一是神经元有像这样的细胞主体,二是神经元有一定数量的输入神经。

这些输入神经叫做树突,可以把它们想象成输入电线。它们接收来自其他神经元的信息。神经元的输出神经叫做轴突,这些输出神经是用来给其他神经元 传递信号或者传送信息的。

简而言之,神经元是一个计算单元。它从输入神经接受一定数目的信息,并做一些计算。然后将结果通过它的轴突传送到其他节点,或者大脑中的其他神经元。

这就是所有 人类思考的模型: 我们的神经元把自己的收到的消息进行计算,并向其他神经元传递消息。
在这里插入图片描述

输入x1、x2、x3,输出为hθ(x)=1/(1+e(-θTX)),这是一个非常简单的模型来模拟神经元的工作。我们将神经元模拟成一个逻辑单元,黄色圆圈类似于神经元,一个有s型函数或者逻辑函数作为激励函数的人工神经元,在神经网络术语中,激励函数只是对类似非线性函数g(z)的另一个术语称呼。θ为模型的参数,有时候也叫“权重”, x0是偏置神经单元,因为x0总是等于1,有时会画出来,有时不会画出来,这取决于是否对例子有益。, x1 x2 x3 类似于输入神经, h(x)为输出神经。
在这里插入图片描述

神经网络其实就是这些不同的神经元组合在一起的集合。具体来说,这里是我们的输入单元x0 x1 x2和 x3,神经元a(2)1 a(2)2 和a(2)3(a(2)0也是额外的偏置单元,它的值也是1),最后一层输出假设函数h(x)计算的结果。

这个例子中,我们有一个输入层—第1层,一个隐藏层— 第2层,一个输出层—第3层。但实际上,任何非输入层或非输出层的层就被称为隐藏层。
在这里插入图片描述

a上标(j) 下标i表示:第j层的第i个神经元或激励 ,所谓激励(activation)是指由一个具体神经元读入,计算并输出的值。

在这里,我们有三个输入单元和三个隐藏单元。这样一来参数矩阵控制了我们来自三个输入单元,三个隐藏单元的映射。因此θ(1)将变成一个3乘4维的矩阵。

更一般的,如果一个网络在第j 层有Sj个单元,在j+1层有Sj+1个单元,那么矩阵θ(j) 即控制第j层到 第j+1层映射的矩阵的维度为Sj+1 * (Sj+1)

最后,在输出层,我们还有一个单元,它计算 h(x) 这个也可以写成a(3)1(第三层,第一个元素)

四、模型表示

前向传播的向量化实现
在这里插入图片描述

这些z值都是一个线性组合,是输入值θ0 θ1 θ2 θ3与 x0 x1 x2 x3的加权线性组合,我可以定义a(1) 等于向量x 。这个计算h(x)的过程也称为前向传播(forward propagation) 。这样命名是因为我们从输入层的激励开始,然后进行前向传播给隐藏层并计算隐藏层的激励。然后,我们继续前向传播,并计算输出层的激励。这个从输入层到隐藏层再到输出层,依次计算激励的过程叫前向传播。
在这里插入图片描述
在这里插入图片描述

我们将输入层隐藏掉,可见特征项a1 a2 a3它们是作为输入来学习的。具体来说,就是从第一层映射到第二层的函数,这个函数由其他一组参数θ(1)决定。

所以在神经网络中,它没有用输入特征x1 x2 x3 来训练逻辑回归,而是自己训练逻辑回归的作为输入。a1 a2 a3 可以想象如果在θ(1)中选择不同的参数, 有时可以学习到一些很有趣和复杂的特征。就可以得到一个更好的假设,比使用原始输入x1 x2或x3时得到的假设更好,下一节会讲为什么。

你还可以用其他类型的图来表示神经网络,神经网络中神经元相连接的方式称为神经网络的架构,所以说架构是指不同的神经元是如何相互连接的。

五、应用

实例讲述神经网络是如何计算关于输入的复杂的非线性函数

我们先来看两个简单的问题:

第一个与运算,第二个是或运算

PS:直线上的数字,例如-30、+30,是权重θ。图形上的函数g(x)是一个S型的函数。

在这里插入图片描述
在这里插入图片描述

以下实现与运算和先非再与
在这里插入图片描述

结合上面讲到的运算,来实现同或运算
在这里插入图片描述

思路,同或就是两个相同的二进制结果为1。相同就是x1,x2(第一层)经过与运算(第二层第一个神经元),X运算(第二层第二个神经元),再经过或运算(第三层的神经元)后得到同或运算(输出)。

在输入层中,我们只有原始输入值,然后我们建立了一个隐藏层用来计算稍微复杂一些的输入量的函数,然后通过添加另一个隐藏层,我们得到了一个更复杂一点的函数,这就是关于神经网络可以计算较复杂函数的某种直观解释。

六、多类别分类

如何用神经网络做多类别分类,之前说到二元分类,我们可以用一个输出表示,0或者1。

对于多元分类问题,我们不再使用一个输出表示成1,2,…10;而是是使用向量来表示,如下所示:

例如最后输出层的第一个神经元,1表示它是人,0表示它非人。输出层的第二个神经元,1表示它是汽车,0表示它非汽车…通过最后的输出向量可以判断它是什么,即对多类别进行分类。

在这里插入图片描述
参考资料 07 机器学习(吴恩达):非线性假设(神经网络模型)
吴恩达机器学习 – 神经网络学习

发布了80 篇原创文章 · 获赞 140 · 访问量 64万+

猜你喜欢

转载自blog.csdn.net/linjpg/article/details/104108582