人工智能如今已渗入到生活中的各个方面。从引人关注的围棋、象棋对手,到手机支付、手机解锁中的人脸识别,都运用了人工智能。

 


围棋人工智能

 

人工智能具备很多人类的感知和识别能力,能自动完成一定的任务,例如识别声音、认出人脸和做出决策等等。

 



人工智能 AI

 

如何自动完成任务?以图像识别为例,在以前,我们会给计算机输入一系列规则让它推理(rule-basedreasoning),它采用特征点归类的方法来辨别图像,但这很难能准确地识别。

 

 

如果我们告诉计算机左边是萝卜,那它可能会以为右边的甜筒也是胡萝卜。


要想实现真正的人工智能,人们研究出了机器学习。


机器学习简单说就是,编写出一套算法,使计算机能“自动”地进行学习。我们不需要输入大量规则,只需用少量的规则建造一个模型,计算机就可以通过学习来创造新的数据,从而对新事物做出分析和判断。

 



通过学习左边的 1,可以判断出右边也是 1


之前我们示范过,如何用一个神经网络,写出一套机器学习算法,来自动识别未知的图像。

 


一个 4 层的神经网络
输入层经过几层算法得到输出层

 

实现机器学习的方法有很多,近年被人们讨论得多的方法就是深度学习。


深度学习是一种实现机器学习的技术,它是用深度神经网络来实现机器学习,网络深度比原始网络加深了数十甚至上百倍。


增强学习也可以达到机器学习的效果,感兴趣的小伙伴可以上网搜索,在此暂时没有推荐的书籍。

 


一个 34 层的深度神经网络

 

这种网络可以解决什么问题呢? 其中最热门的就是图像识别问题。


比如计算机拿到一些猫的照片后,可以识别出中华田园猫和其他种类的猫,然后分类。这种看似很废的用处,如果运用到医疗领域,比如分辨好的和病变的器官,或是目前大热的人脸识别,都将改变人类的生活。

 



人脸识别

 

从 2010 年开始,为了更好地发展图像识别技术,人们建立了图像数据库 ImageNet,甚至举办了基于数据库的识别大赛 ILSVRC,比比看谁的图像识别方法更好。

 


ImageNet 数据库

 

深度学习在比赛上得到了很好的成绩,因此受到更多人的重视并发展。在这之前,发展受限主要是因为芯片和显卡带不动(运算量实在太大了)。

旧的图像识别方法

无论在深度学习普及之前还是之后,对于图像处理大都是将图像转换成一个向量之后进行计算,从而进行分类。根本的问题就是,如何用一个高维的向量来表示一个图片。


表示方法有很多,比如采用提取图像的定向梯度直方图得到特征,并对所提取的特征进行处理。这样确保能尽量保留每一类物体图片的特征,从而区分出不同的图片。


然而,采用这种特征提取方法的计算机识别率并不高,错误率仍然接近 28%,比人类笨太多了。下面介绍几种深度学习的方法,它们使识别错误率极大地降低。


卷积神经网络:AlexNet

在 2012 年,深度学习第一次被运用到 ImageNet 比赛中。其效果非常显著, 错误率从前一年的 26% 直接降低到 16%。

 


那一年,夺冠的图像识别神经网络被称为 AlexNet,本质是卷积神经网络(ConvolutionalNeural Network)。

 


AlexNet 结构


卷积神经网络是一类采用卷积层,池化层和全连接层的神经网络。它不去具体地查看每一个像素点之间的关系,而是对每一小块区域进行编码。


多层神经网络的编码复杂程度较高,所以分类的结果也比较准确。我们以识别字母 A 为例,简单地解释一下原理。

 


C:卷基层;S:池化层;F:全连接层

 

假设我们要编码 A(INPUT)的右下角,那被指向的 C1(第二个框)的点就代表了 A 被选出的区域。C1 一共有 6 张,每张的同一个位置都在编码这个区域。S2(第三个框)是池化层,对上一层(C1 )进行简化。C2 上有一个小框指向 S2,说明这块区被简化。S2 又被选出一块指向 C3(第四个框),表示这块区域在 C3 上被编码。

 

全连接层用几个数字表示一块区域。F6(右二)用 84 个数据来代表前面的 120 个数据,最后 OUTPUT 则为输出 10 个数据,这 10 个数据就代表了一开始的 A。(此处应有掌声!!!)
卷积相当于两个图像之间、像素点与像素点之间一一对应的乘法,再进行求和。


图形处理器 -GPU(Graphics ProcessingUnit)

由于采用多层的神经网络,且每一层的结果都是一个高维的特征图像,所以计算量也相当大,在 AlexNet 中就需要确定 6 千万个参数来确定这个网络。


那么多的网络光靠 CPU 可能算不来,只能借助 GPU 来计算。GPU 是什么呢?

 


GPU 工作原理
看不懂就掠过吧,不重要

 

CPU 只有 8 个可以计算的核,一次只能运行 8 个进程,而 GPU 中带有成百上千个核,一次可以进行成百上千次计算(也叫并行计算),可以确定网络和参数。


更深更精确的网络:GoogleNet 与 VGGNet

2014 年,又诞生了两种经典的深度神经网络,GoogleNet 和 VGGNet。他们都是基于卷积神经网络的深度神经网络,和 AlexNet 的基本原理基本一致。这两个网络除了深度不一样,自身也各有特色。


GoogleNet

网络参数量过多会导致训练时的效果好,但测试时的效果差(这也叫过拟合现象),GoogleNet 可以解决这个问题。它采用了“InceptionModule”卷积结构,可以得到一个稀疏的网络结构来缓解这种现象,提高测试时的准确率。

 



Inception Module

 

其总的架构如下图:

 



VGGNet

 

和 GoogleNet 不一样的是,VGGNet 采用了更传统的卷积神经网络,结构也比较简单。其卷积核全部采用了小卷积核,可以尽量减少参数的数量和计算量。

 



VGGNet

 

这两种网络都将错误率降低至 7.5% 以下,但是仍然和人类的错误率有一点差距。


理论上,在一定的深度范围内,网络越深,准确率就会越高(这点在 VGG 的论文中有实验的证明,文末附有相关阅读)。但若超出范围,即使网络再深下去,准确率也没有明显提高。那么,网络深度真的到头了么?

将网络深度发挥到极致:ResNet

事实证明并没有。2015 年,ILSVRC 中一个更深的网络诞生了——ResNet。


ResNet 的网络基本原理和卷积神经网络一样,但直接将原来最深 22 层的深度神经网络扩展到了 152 层。


ResNet-34 网络的卷积核基本都和 VGGNet 一样采用小卷积核,它最大的特点是用到了余项函数,在两层的卷积层之间有直接的神经网络连接。这样的好处是,当我们使用反向传播算法来计算卷积层变化率时,梯度变化不会减小到 0。


梯度也是偏微分,它越大就说明需要越大的力度优化网络,所以我们要不断地减小梯度,但若小到等于 0,它就相当于无效了。


ResNet 的诞生也得益于 GPU 的并行计算越来越先进,GPU 的显存从原来的 4G 级别扩展到了 12G 级别,可以完成更大的计算量。

 


一块先进的 GPU

 

ResNet 的图像识别错误率低至 3.6%,这是什么概念?这么说吧,人类测试的错误率是 5%,也就是人工智能比人类更智能了!

 

无监督学习的实例:GAN 网络

以上的深度学习方法都是监督学习,笼统地说,就是给计算机一些例子和答案,让它去学习。但有时,例子根本就没有答案,这就需要用到无监督学习了。最近比较受瞩目的是 GAN(生成对抗网络),它不属于图像识别,而是可以生成图像!

 



网络生成图像

 

一般别人只使用单个的深层神经网络,而 GAN 用了两个相互竞争的网络,互相通过零和游戏进行竞争,最后还会给出判定,如果一方胜利,那另一方就失败。

 

这两个网络如何“画”出我们想要的图像呢?


假设我们要生成一个艺术风格的图像,这两个网络就可以看作是生成器和判别器。生成器的任务就是生成一个艺术的图像,判别器的任务就是判断这个图像到底艺不艺术。

 


生成器对比真实数据和生成数据

 

GAN 完成训练的标志就是,它无法相对于另一个网络取得进步(就是没办法画得更好了!)。完成得最理想的效果就是,判别器没办法区分出真实的数据和生成器产生的数据。

 

 

GAN 的对抗其实和人类很像。比如熊孩子在学写字,老师在旁边检查,那熊孩子就是生成器,老师就是判别器。如果有一天,老师再也挑不出熊孩子写字的毛病了,熊孩子就荣升乖孩子,写字训练就结束了。

 


上面为样本,下面为生成图
最终会被对比和判别

 

深度学习的运用

比较常见的深度学习应用就是图像识别。在监控领域,我们可以自动识别人脸和汽车,人脸识别也是用了深度学习之后才有较高的准确率。

 


监控识别

 

另一个应用就是机器翻译。传统的机器翻译是将语言规则提取出来,然后再人工去添加各种特征,永远无法覆盖所有的语言现象。比如,北方的机器翻译不出南方人的话。


近年来,各大翻译软件都用了深度学习技术,利用神经网络改进关键模块,通用性大大地增强,南北差异再也不是问题了!

 

◆◆◆

可以看出,深度学习不仅作用于图像,还可以延伸到更广的领域。


随着学界对深度学习研究越来越成熟,更深层且功能更强大的神经网络不断地被开发。并且,各种计算器件比如 CPU 和 GPU 在不断强化,甚至出现了更高效的器件比如 FPGA,相信未来,这项技术会带我们进入一个更智能的世界。