首页 > 代码库 > 机器学习之神经网络模型-上(Neural Networks: Representation)
机器学习之神经网络模型-上(Neural Networks: Representation)
在这篇文章中,我们一起来讨论一种叫作“神经网络”(Neural Network)的机器学习算法,这也是我硕士阶段的研究方向。我们将首先讨论神经网络的表层结构,在之后再具体讨论神经网络学习算法。
神经网络实际上是一个相对古老的算法,并且沉寂了一段时间,不过到了现在它又成为许多机器学习问题的首选技术。
1. Non-linear Hypotheses
之前我们已经介绍过线性回归和逻辑回归算法了,那为什么还要研究神经网络?
为了阐述研究神经网络算法的目的,我们首先来看几个机器学习问题作为例子。这几个问题的解决都依赖于复杂的非线性分类器。
考虑这个监督学习分类的问题,我们已经有了对应的训练集,如果利用逻辑回归算法来解决这个问题,首先需要构造一个包含很多非线性项的逻辑回归函数,这里 g 仍是 s 型函数 (即f(x)=1/(1+e^-x) )。我们能让函数包含很多像这样的多项式项,事实上,当多项式项数足够多时那么可能你能够得到一个分开正样本和负样本的分界线。
1
例如当只有两项时比如 x1 和 x2,这种方法确实能得到不错的结果,因为你可以把 x1 和 x2 的所有组合都包含到多项式中,但是对于许多复杂的机器学习问题而言,涉及的项往往多于两项。
例如我们之前已经讨论过房价预测的问题,假设现在要处理的是关于住房的分类问题,而不是一个回归问题。假设你对一栋房子的多方面特点都有所了解,你想预测房子在未来半年内能被卖出去的概率,这是一个分类问题。
我们可以想出很多特征,对于不同的房子有可能就有上百个特征,对于这类问题如果要包含所有的二次项,即使只包含二项式或多项式的计算,最终的多项式也可能有很多项,比如 x1^2、x1x2、x1x3 、x1x4 直到x1x100 ,接着还有x2^2、x2x3等等很多项。因此即使只考虑二阶项,也就是说两个项的乘积x1乘以x1等等类似于此的项,那么 ,在n=100的情况下最终也有 5050 个二次项。
而且渐渐地随着特征个数n的增加,二次项的个数大约以n^2的量级增长,其中 n 是原始项的个数,即我们之前说过的 x1 到 x100 这些项。事实上二次项的个数大约是 (n^2)/2 ,因此要包含所有的二次项是很困难的,所以这可能不是一个好的做法。
而且由于项数过多,最后的结果很有可能是过拟合的,此外在处理这么多项时也存在运算量过大的问题。当然,我们也可以试试只包含上边这些二次项的子集。例如,我们只考虑x1^2 、x2^2、x3^2直到 x100^2 这些项,这样就可以将二次项的数量大幅度减少,减少到只有100个二次项。但是由于忽略了太多相关项,在处理类似左上角的数据时,不可能得到理想的结果。
实际上,如果只考虑 x1 的平方到 x100 的平方这一百个二次项,那么你可能会拟合出一些特别的假设。比如,可能拟合出一个椭圆状的曲线,但是肯定不能拟合出像左上角这个数据集的分界线,所以5000个二次项看起来已经很多了。
而现在假设还得包括三次项,例如x1x2x3、x12x2 、x10x11 x17等等,类似的三次项有很多很多,事实上,三次项的个数是以n^3的量级增加。当n=100时,可以计算出来最后能得到大概17000个三次项。
所以,当初始特征个数 n 增大时,这些高阶多项式项数将以几何级数递增,特征空间也随之急剧膨胀。当特征个数 n 很大时,如果找出附加项来建立一些分类器,这并不是一个好做法。对于许多实际的机器学习问题,特征个数 n 是很大的。
2
我们看看下边这个例子,这是关于计算机视觉中的一个问题。假设你想要使用机器学习算法来训练一个分类器,使它检测一个图像是否为一辆汽车。很多人可能会好奇,觉得这对计算机视觉来说有什么难的。
当我们自己看这幅图像时里面有什么是一目了然的事情,你肯定会很奇怪,为什么学习算法竟可能会不知道图像是什么。
为了解答这个疑问,我们取出这幅图片中的一小部分,将其放大。比如图中,这个红色方框内的部分。实际上,当人眼看到一辆汽车时,计算机实际上看到的却是这样一个数据矩阵。
它们表示了像素强度值,告诉我们图像中每个像素的亮度值。因此,对于计算机视觉来说问题就变成了,根据这个像素点亮度矩阵来告诉我们这些数值是否代表一个汽车门把手。
具体而言,当用机器学习算法构造一个汽车识别器时,我们要想出一个带标签的样本集,其中一些样本是各类汽车,而另一部分样本是其他任何东西。将这个样本集输入给学习算法以训练出一个分类器,当训练完毕后,我们输入一幅新的图片,让分类器判定“这是什么东西?”理想情况下,分类器能识别出这是一辆汽车。
为了理解引入非线性分类器的必要性,我们从学习算法的训练样本中挑出一些汽车图片和一些非汽车图片。让我们从其中每幅图片中挑出一组像素点
例如上图像素点1的位置和像素点2的位置。
在坐标系中标出这幅汽车的位置,其在坐标系中的位置取决于像素点1和像素点2的亮度。让我们用同样的方法在坐标系中标出其他图片中汽车的位置。接着我们在坐标系中继续画上两个非汽车样本。
然后我们继续在坐标系中画上更多的新样本,用‘‘+"表示汽车图片,用“-”表示非汽车图片,我们将发现汽车样本和非汽车样本分布在坐标系中的不同区域,因此我们现在需要一个非线性分类器,来尽量分开这两类样本。
这个分类问题中特征空间的维数是多少?显然在真实的情况下,我们不可能只取两个像素点来作为特征。假设我们用50*50像素的图片,注意,我们的图片已经足够小了哦。长宽只各有50个像素,但这依然是2500个像素点,因此,我们的特征向量的元素数量 n=2500。特征向量X包含了所有像素点的亮度值。
对于典型的计算机图片表示方法,如果存储的是每个像素点的灰度值 (色彩的强烈程度),那么每个元素的值应该在 0 到 255 之间。因此,这个问题中 n=2500。
但是这只是使用灰度图片的情况,如果我们用的是RGB彩色图像,每个像素点包含红、绿、蓝三个子像素,那么 n=7500。
因此,如果我们非要通过包含所有的二次项来解决这个非线性问题,那么仅仅二次项 xi * xj 总共大约有300万个(25002/2 ),这数字大得有点离谱了。对于每个样本来说,要发现并表示所有这300万个项,这计算成本太高了。因此,只是简单的增加二次项或者三次项之类的逻辑回归算法并不是一个解决复杂非线性问题的好办法。因为当 n 很大时,将会产生非常多的特征项。
接下来,我们会讨论解神经网络,它在解决复杂的非线性分类问题上,被证明是是一种好得多的算法,即使你的输入特征空间或输入的特征维数 n 很大,也能轻松搞定。
2. Neurons and the Brain
神经网络是一种很古老的算法,它最初产生的目的是制造能模拟大脑的机器。我们将会讨论神经网络,因为它能很好地解决不同的机器学习问题,而不只因为它们在逻辑上行得通。
神经网络产生的原因是人们想尝试设计出模仿大脑的算法。从某种意义上说,如果我们想要建立学习系统那为什么不去模仿我们所认识的最神奇的学习机器——人类的大脑呢?
神经网络逐渐兴起于二十世纪八九十年代,应用得非常广泛。但由于各种原因在90年代的后期应用减少了,其中一个原因是神经网络是一种计算量有些偏大的算法,但是最近神经网络又东山再起了,大概由于近些年计算机的运行速度变快,才足以真正运行起大规模的神经网络。
正是由于这个原因和其他一些我们后面会讨论到的技术因素,如今的神经网络对于许多应用来说是最先进的技术。
当你想模拟大脑时,是指想制造出与人类大脑作用效果相同的机器。大脑可以学会去以看而不是听的方式处理图像,学会处理我们的触觉。我们能学习数学,学习计算微积分,而且大脑能处理各种不同的令人惊奇的事情。似乎如果你想要模仿它,你得写很多不同的软件来模拟所有大脑告诉我们的这些
五花八门的奇妙的事情。
不过能不能假设大脑做所有这些不同事情的方法,不需要用上千个不同的程序去实现,相反,大脑处理的方法只需要一个单一的学习算法就可以了呢?
尽管这只是一个假设,不过让我和你分享一些这方面的证据。
如图,大脑的这一部分,这一小片红色区域是你的听觉皮层,如果你通过我说的话来理解我想要表达的内容,那么这靠的是耳朵接收到声音信号并把声音信号传递给你的听觉皮层,正因如此,你才能明白我的话。
神经系统科学家做了一个有趣的实验,把耳朵到听觉皮层的神经切断。在这种情况下,将其重新接到一个动物的大脑上,这样从眼睛到视神经的信号最终将传到听觉皮层,如果这样做了,那么结果表明听觉皮层将会学会“看”。
所以,如果你对动物这样做那么动物就可以完成视觉辨别任务,它们可以看图像,并根据图像做出适当的决定。它们正是通过脑组织中的这个部分完成的。
下面再举另一个例子,这块红色的脑组织是你的躯体感觉皮层,这是你用来处理触觉的。如果你做一个和刚才类似的重接实验,那么躯体感觉皮层也能学会“看”,这个实验和其它一些类似的实验被称为神经重接实验。从这个意义上说,如果人体有同一块脑组织可以处理光、声或触觉信号,那么也许存在一种学习算法可以同时处理视觉、听觉和触觉,而不是需要运行上千个不同的程序或者上千个不同的算法来做这些。
大脑所完成的成千上万的美好事情,也许我们需要做的就是找出一些近似的或实际的大脑学习算法,然后实现它,大脑通过自学掌握如何处理这些不同类型的数据,在很大的程度上可以猜想,如果我们把几乎任何一种传感器接入到大脑的几乎任何一个部位的话,大脑就会学会处理它。
下面再举几个例子,左上角的这张图是用舌头学会“看”的一个例子。这实际上是一个名为BrainPort的系统,它现在正在FDA (美国食品和药物管理局)的临床试验阶段,它能帮助失明人士看见事物。它的原理是,你在前额上带一个灰度摄像头,它就能获取你面前事物的低分辨率的灰度图像。你连一根线到舌头上安装的电极阵列上,那么每个像素都被映射到你舌头的某个位置上。可能电压值高的点对应一个暗像素,电压值低的点对应于亮像素。
即使依靠它现在的功能,使用这种系统就能让你我在几十分钟里就学会用我们的舌头“看”东西。
下面是第二个例子,关于人体回声定位或者说人体声纳。你有两种方法可以实现,你可以弹响指或者咂舌头。现在有失明人士确实在学校里接受这样的培训,并学会解读从环境反弹回来的声波模式—这就是声纳。
如果你搜索 YouTube 之后,就会发现有些视频讲述了一个令人称奇的孩子,他因为癌症眼球惨遭移除,虽然失去了眼球,但是通过打响指他可以四处走动而不撞到任何东西。他能滑滑板,他可以将篮球投入篮框中。
第三个例子是触觉皮带,如果你把它戴在腰上,蜂鸣器会响,而且总是朝向北时发出嗡嗡声。它可以使人拥有方向感,用类似于鸟类感知方向的方式。
还有一些离奇的例子,如果你在青蛙身上插入第三只眼,青蛙也能学会使用那只眼睛。
因此,这将会非常令人惊奇。如果你能把几乎任何传感器接入到大脑中,大脑的学习算法就能找出学习数据的方法并处理这些数据。从某种意义上来说
如果我们能找出大脑的学习算法,然后在计算机上执行大脑学习算法或与之相似的算法,也许这将是我们向人工智能迈进做出的最好的尝试。
机器学习之神经网络模型-上(Neural Networks: Representation)