写给小白的人工智能教程(下)

上周的内容说明了基本的人工神经网络,我们知道了在使用这个网络时,是要经过前向传播、反向传播和梯度下降调整权值的过程的,整体的运作流程没有太大问题,但整体的结构组成上,在具体应用时还有很多问题。这一部分,就具体介绍当前人工智能领域一直在使用的一种网络模型。

四、传统人工神经网络的改进

在提及人工智能的时候,大都还会提及深度学习(Deep Learning)一词。这里的“学习”其实就是我们上面讲的调整网络中权值的过程;“深度”其实是说一个神经网络的层数有特别多,在图5中,只有五层,当问题很复杂时,往往需要几十到几百层,就是网络很深的意思。

当问题比较复杂时候,必然需要使用较多层的神经网络模型,但是如果是上面这种传统的人工神经网络结构,后一层的每个神经元都和前一层的每一个神经元相连接(可参考图5),当层数多、神经元数量多的时候,权值的个数也会非常庞大,可能有上百万个权值,一次反向传播调整几百万个权值参数,必然需要很大的计算能力和时间,这也是为什么人工神经网络在几十年前就提出了,但一直没有得到“重用“,就是因为层数增加是可以解决复杂问题,但是基于当时的计算能力,无法有效的训练好它,还是没办法使用它解决问题。

随着硬件发展,计算机的计算能力也在提升,但是我们不能等着硬件的发展,在网络结构上还应该做一些改进才行。于是就有了卷积神经网络模型(就是2012年,图像识别竞赛上一举成名的那个网络结构),这个网络也是目前处理所有与图像、视频相关的用的最多的网络结构。

之所以叫卷积神经网络,是因为网络中主要做的运算就是“卷积运算”,但具体卷积运算是怎么进行操作的,可以参考图4。图4展示的就是卷积计算中的具体的一步,每一步运算结果得到的是一个数。

图4 卷积计算

如果还是不太理解卷积计算,就把它看成是和加、减、乘、除一样的,是一种运算方式就好了。

也就是这种特殊的运算方式,大大减少了神经网络中权值的数量,从而使的模型的训练变的可能了。

图5 人工神经网络

这是前面讲过的传统人工神经网络,全连接的情况,每一根连线都表示有一个权值,可以看到这么几个神经元,参数就已经很多了。

图6 卷积神经网络结构

卷积神经网络使参数减少,一方面在于,不再是后一层一个神经元连接前一层全部神经元,而是后面一个对应前面一层中一定区域内的神经元。如上图6所示,也就是左边橙色的6x5区域的神经元,到下一层,就变成一个神经元了,这一个神经元就是我们用一个固定的6x5矩阵(30个数,组成的方阵,我们称为卷积核,其实就是一堆数字组成的方阵,而且我们会多次用它)与橙色区域经行卷积计算(这里卷积计算的效果就是,两堆数进行计算,结果是得到一个数),就得到了一个数,然后将卷积核整体向右移动,横着遍历一遍再向下移动,直到走过左边所有神经元,每次移动的长度称为步长,是我们自己决定的,一般是取1。

图7 卷积神经网络中某一层中卷积计算

如图7所示,绿色就是所说的卷积核,这个卷积核没经过一次卷积计算,移动一格,直到遍历所以数据。虚线的小格子,是为了方便计算采取的一些技巧或者说规则,不用管它,明白下一层神经元的数据,就是以这样方式从上一层计算得来的就好了。

在这样的计算基础下,权值不再是后一个神经元与前一层每一个神经元之间的连接,也就是说,上图6中的“连线”不再表示参数数量,此时的参数是我们用来做卷积计算的那个方阵(也就是卷积核),这个方阵总共也就6x5=30个参数,就可以计算得到下一层神经元;左边是28x28个神经元,右边是24x24,如果全连接的方式,就需要24x24x28x28=451584这么多权值。

这里面还涉及一种“池化”的操作减少权值数量,不再具体说明,但就从上面,就可以明显感觉卷积神经网络的权值数目比传统神经网络在相同层数下,数量是少很多的。

卷积神经网络也就是中间计算方式有点不同,训练它同样是要经过前向传播、反向传播和梯度下降调整参数,这些都是一样。

五、卷积神经网络是怎么做到人脸识别的?

首先,明白一点,图像是二维的,所以图像本身其实就是一堆数字组成的方阵(矩阵),这些数字就叫像素值,用ps软件无限放大图片,好像就可以看到具体的数字。所以,对于图像处理的问题,你就把它看成是一堆数字就可以,所以计算机是可以接收的。

再说一下,人脸检测和人脸识别的区别,检测就是判断有没有人脸,而识别是在检测出有没有人脸基础上,进一步判断这个是谁。所以应用人脸识别的地方都需要事先录入要识别的人。从个人角度想想,当你看到一些照片,从而认出不同的人,谁是谁,是因为你看到了不同的人长相是不一样的,我们可以说这些不同的人脸具有不同的“特征“,比如大眼睛、高鼻梁、圆脸等等类似的,我们也正是通过这些特征判断出不同的人来,让计算及实现人脸识别也是这样的。

经过上面的笼统介绍,应该大概知道卷积神经网络是个什么东西,就是一堆神经元,按照我们规定的形式组合和计算。那么就是这样组合和计算规则,怎么就能进行人脸识别了呢?

首先,一个卷积神经网络能够识别人脸,它是经过了学习的,也就是我们说的是经过训练的,就是事先弄了许多人脸的照片,每个照片都有对应的标签说明照片上是“谁”,我们让网络进行前向传播,计算出一个output,我们将output与事先的标签(这个标签就是target)组成损失函数,来决定预测的对不对,然后经行反向传播调整权值。

我们用上万张图像训练,经过上万次的反复的前向传播、计算损失、反向传播、调整参数这样的过程,最终网网络就自动“记住”了如何去提取特征,如果给一张图像应该提取图像中哪些特征来判断是谁(具体提取了什么特征,我们可以通过可视化看到,但是为什么网络这样提取我们还有很多是无法解释的,这也是神经网络模型的一个“问题”所在,就是可解释性很差)。神经网络训练好后,你再给它一张图像,他就能识别出来谁。

所以,其实人工智能、深度学习听上去很高大上,其实中间过程也就这么回事,就是一群机智的大佬,给计算机制定了一系列的“规则”,告诉它要实现的目标,然后把数据和答案输入模型,就开始计算,计算完了就可以了。其中可解释性是很差的,我只能说这样做确实有效果,但它为什么有效果,有时候是说不清楚的。这也反映出前面提到的,人工智能是数据驱动的,针对某个问题,要使用深度学习方法,要事先准备好数据才行,而且是大量数据,量不够也是不行的。

六、总结

深度学习技术中,除了卷积神经网络,还有循环神经网络(主要用于自然语言处理,机器翻译等)、生成对抗网络等等,本质上都是神经网络,只是神经元组合规则什么的不同,从而实现了不同的功能,用于不同的场景。

还有目前比较火热的无人驾驶,之前谷歌的AlphaZero,它们主要的技术是前面提过的强化学习,它本身用的网络也还是卷积神经网络或者循环神经网络等,但它又增加了很多巧妙的规则或者策略,使得网络本身能够“自主学习”,这个有点复杂,就不多说了,知道人工智能里面还有强化学习这个神奇的东西就好了。

目前人工智能领域,处理图像、视频相关的问题,基本上使用的都是上面提到的卷积神经网络结构,差别主要就是结构、卷积核、训练技巧等,本质上没有差别,而且使用它也就是前向传播和反向传播调整整个网络权值的过程,就是这么个过程,不论是循环神经网络、生成对抗网络,都是这样的,所以说深度学习、人工智能其实并没有多么高大上。但是,它神奇的地方就在于,当你拥有大量有效数据,就是通过这么简单的操作,就得到了很好的效果,实际问题就得到了很好的解决。

七、说点其他的

首篇教程文章到此结束,万事开头难还是有点道理的,从想写到写好,中间过去了有一个多月的时间。

本来也是想着一周发一个完整的简单的教程,没想到真正写出来之后,竟然这么多的内容,只好分成了两周。

这个公众号就当是分享和记录一些自己了解或正在学习的内容的了,有想了解了也可以给公众号发消息留言,而且这种公众号推送是没有提醒的,根本不会打扰你的,哈哈~~~

参考:

[1] Michael A. Nielsen,“Neural Networks and Deep Learning”, Determination Press, 2015。

[2]Kim S, Casper R. Applications of Convolution in Image Processingwith MATLAB [J],2013.

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180630G13AF600?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券