在之前的BLOG里,我们通过实例讲解了如何通过神经网络来解决逻辑运算的假设模型,这篇BLOG就让我们通过几个例子一起看看神经网络下的多元分类问题吧。
行人与车辆的分类
这一部分,我想和大家一同通过例子了解如何用神经网络做多类别分类。在多类别分类中,通常有不止一个类别需要我们去区分。比如车辆种类的分辨,手写数字辨识的问题登顶。因此你也许已经开始好奇,究竟应该怎样处理这些多类别分类的问题呢。
我们处理多类别分类的方法实际上是基于一对多神经网络算法而延伸出来的。让我们来看这样一个例子,是一个有关计算机视觉的例子。这个例子和我们识别汽车的例子很像,但与之不同的是现在我们希望处理的,是四个类别的分类问题。我们给出一幅图片,需要确定图上是什么,是一个行人、一辆汽车 、还是一辆摩托车 、亦或是一辆卡车:
对于这样一个问题我们的做法是建立一个具有四个输出单元的神经网络。也就是说此时神经网络的输出是一个四维向量:
因此现在输出的向量中有四个元素,而我们要做的是对向量中的输出元素进行分辨。第一个元素代表图上是不是一个行人,第二个元素代表它是不是一辆汽车,第三个元素代表它是不是摩托车,第四个元素代表它是不是一辆卡车。因此当图片上是一个行人时,我们希望这个神经网络输出[1 0 0 0],当图片是一辆轿车时我们希望它输出[0 1 0 0],当图片是一辆摩托车时我们希望它输出[0 0 1 0]……以此类推:
所以这和我们之前学习多元逻辑回归时讨论过的一对多方法是一样的,只不过现在我们有四个逻辑回归的分类器,而我们需要对四个分类器中每一个都分别进行识别分类。因此,我们给我们的神经网络一个训练集,其中包含的是我们四种类别之一,而我们神经网络输出的向量中 1 的位置则代表了计算机对这个图片的判别结果:
当然这里只是很粗略地介绍了大致的思路,具体怎么实现这个神经网络模型,我们会在后面的BLOG中继续讲解。
手写数字的分类
下面这个例子来源于著名的 Yann LeCun 教授的早期例子,他是神经网络研究早期的奠基者之一,也是这一领域的大牛,他的很多理论和想法现在都已经被应用于各种各样的产品和应用中,遍布于全世界。下面我会分享一个早期他使用神经网络的算法进行手写数字的辨识的例子。
你也许记得在很早之前的BLOG里,我提到过关于神经网络的一个早期成就就是应用神经网络去读取邮政编码,以帮助我们进行邮递。这个例子就是其中一种尝试,这就是为了解决这个问题而尝试采用的一种算法,我们来看下图:
上图中的紫色框是输入区域,表示的是手写字符,它们将被传递给神经网络;红色框表示通过该网络第一个隐藏层运算后特征量的可视化结果,因此通过第一个隐藏层可视化结果显示的是探测出的不同特征,即不同边缘和边线,所以会长得有些不太一样;绿色框则是下一个隐藏层的可视化结果,蓝色框则是再下一层的隐藏层。后面的隐藏层可能已经比较模糊不好理解了,可能如果要想看出隐藏层到底在进行怎样的运算是比较困难的,因为其远远超出了第一个隐藏层的效果。但不管怎样最终这些学习后的特征量将被送到最后一层,也就是输出层并且在最后作为结果显示出来。最终预测到的结果就是这个神经网络辨识出的手写数字的值,即我们黄色圈圈里的结果。
下面我们先来看看视频中的一些截图,展现了这个神经网络算法的强大功能。
它可以识别受干扰的图像:
可以识别弯曲的图像:
可以识别破损的图像:
可以识别带阴影的图像:
甚至可以识别抽象的图像:
下面我分享出自己从课程中剪辑的视频,大家可以下载一同感受一下:
其实其中的原理就是第一层计算出一些特征,然后下一层再计算出一些稍复杂的特征,然后是更复杂的特征……最后这些特征被传递给最后一层逻辑回归分类器上,使其准确地预测出神经网络“看”到的数字。
结语
通过这篇BLOG,相信你已经对神经网络解决多类别分类问题有一些想法了。之后我们会一同学习更加细节的部分。最后希望你喜欢这篇BLOG!