人工智能发展史(七)CNN卷积神经网络那些事儿

在大风中紧紧抓住你的帽子,紧紧抓住你的希望,别忘了给你的钟上发条。明天是新的一天。 by怀特

首先祝大家平安夜快乐,明天的圣诞节快乐~

这周我们用最通俗的解释方法来聊聊最近几年非常火热的CNN卷积神经网络,并以最基础的LeNet-5为大家分析基本的卷积神经网络元部件,让大家能够在短时间内对CNN有更为直观的理解和认识。

1

BP神经网络在图像处理技术上的缺点

假设现在我们需要解决的任务是手写体数字的识别,根据前几次学习,我们的第一反应是采用BP神经网络来做一个分类问题。我们假设图片的大小是50*50,那么BP神经网络是否是一个明智的选择呢?

我们看看上图,传统的BP神经网络,采用全连接的方式,那么对于50*50的图片有2500个输入,同时有2500*n个权值(n为隐层节点的个数),这就需要很多的样本去训练,导致计算困难。因此,看来BP并不是合适的选择,那么怎样应对呢?

首要的任务是看能否减少权值?怎样减少?这就要感谢,1962年Hubel和Wiesel通过对猫的视觉皮层细胞的研究,提出感受野(receptive field)的概念,而且在1984年日本学者 Fukushima基于感受野概念提出了神经认知机(neocognitron),这也可以看做是卷积神经网络的第一个实现网络,也是感受野概念在AI领域的首次应用。那么,到底什么是“感受野”?通俗的解释就是动物的视野是“局部的”,随着物体的局部信息的移动,并不是所有的神经元受到刺激,而是相应的局部神经元受到刺激。受到这种启发,我们是否可以将上面的全连接模式改成如下的局部连接模式?

也就是说局部连接模式会有若干套不同的权值,而且在每次卷积的过程中(对于每个特征图来说)每一套权值都是共享的,这样就可以大大减少权值的数量,降低计算量,并且更符合实际的视觉行为,最终达到“局部连接,权值共享”的优势。至于什么是卷积,数学上的解释非常多,这里大家看下面这张图就可以了。

这张图非常形象,假设我们的图片是7*7的图片,采用BP神经网络,就需要49个权值,但是我们采用一个5*5的卷积核,在整张图片上进行移动卷积,此时我们只用了25个权值,并且将图片降维到了一个3*3的局部特征图。具体的步骤是讲蓝色的小方块中的值与对应的5*5的权值进行相乘并进行加和(线性加和),并加上一个偏置值,然后将得到的一个数值经过激活函数f()后作为绿色的方块中的值,我们将这样的步骤称为卷积层操作,一般用C层来表示。

以上讲述的其实就是卷积神经网络最为突出和重要的思想和方法。

2

LeNet-5

LeNet-5是Yann LeCun在1998年设计的用于手写数字识别的卷积神经网络,是早期卷积神经网络中最有代表性的实验系统之一。因此,也是我们入门CNN最为经典和基础的网络结构,下面我们就看看其网络结构图:

上图中就是LeNet-5的网络架构图,包括输入输出层,一共有8层,下面我们就就每一层给大家进行详细的分析。

输入层和C1层:

输入层是一个32*32的图片。我们选用的是5*5的卷积核,共25个不同的权值,而且在卷积过程中是共享的,那么根据上面的分析,我们知道对于C1层的特征图的大小应该为(32-5)+1=28,也就是28*28的大小。那么可能会有同学问,为什么C1层有6张不同的特征图?这是因为我们采用了6个不同的5*5的卷积核分别得到了6个不同的28*28的特征图。那么,问题来了?请问输入到C1层中一共有多少连接数和权值数目?大家可以先手算一下,连接数答案是:(5*5+1)*(28*28*6)=122304个,其中1为偏置值,我们一般将偏置值也当做一个神经元连接;权值数目为:(5*5+1)*6=156。

S2层:

S2层是一个下采样层,也叫池化层,简单的说,由4个点下采样为1个点,也就是由2*2的4个数的加权平均或者取最大值,那么这样输出就是一个28/2=14的14*14的特征图了。

看上图,和卷积层,最大的区别就是池化作用于图像中不重合的区域,这样就再次将特征图进行了压缩。

C3层:

首先观察C3层,有16个特征图,大小是10*10,S2是6张14*14的图,其中对于从14*14到10*10的过程是因为我们仍然采用了5*5的卷积核。但是从6张特征图到16张特征图是怎样得到的是这里的难点。其实我们只需要按照一定的顺序组合这些层就可以了。具体的组合规则,在 LeNet-5 系统中给出了下面的表格:

简单的说,例如对于C3层第0张特征图,其每一个节点与S2层的第0张特征图,第1张特征图,第2张特征图,总共3个5*5个节点相连接。后面依次类推,而且C3层每一张特征映射图的权值是相同的。问题又来了,该层有多少连接数和多少权值呢?连接数的答案:[(5*5*3)+1]*(10*10)*6+[(5*5*4)+1]*(10*10)*9+[(5*5*6)+1]*(10*10)*1=151600个连接数;权值个数呢?答案是:(5*5*3+1)*6+(5*5*4+1)*9+(5*5*6+1)*1=1516个权值。计算的过程是对网络理解非常有促进作用的,所以希望大家能够动动手指手算一下,有不清楚的欢迎大家留言或者私信。

S4层:

S4 层是在C3层基础上的一个池化层,前面已述。在后面的层由于每一层节点个数比较少,这个比较简单,不再赘述。

C5层:

C5层是一个卷积层,有120个特征图,每个C5单元与S4层的S4层所有的16个单元进行连接,所以这里也就可以理解为是一个全连接层。连接数和权值个数为:(5*5*16+1)*120=48120。

F6层:

全连接层,连接数为(120+1)*84=10164。

3

LeNet-5的训练算法

上面分析LeNet-5的结构,下面我们分析一下其大概的训练步骤,其训练算法和传统的BP算法差不多,主要包括4步,这4步被分为两个阶段:

第一个阶段:向前传播阶段

(1)从样本集中取一个样本(X,Y),将X送入网络输入。

(2)计算相应的实际输出。在此阶段,讯息从输入层经过诸暨的变化,传送到输出层,这个过程也是网络在训练正常运行时的执行过程。

第二个阶段:向后传播阶段

(1)算出实际输出与相应的理想输出之间的差值。

(2)按照误差最小化的方法反向传播调整权值。

4

总结

本周我们详细为大家介绍了CNN中最经典的LeNet-5的基本结构和训练步骤,可以直观地了解一个卷积神经网络的基本构建方法,为分析、构建更复杂、更多层的卷积神经网络做准备。

其实到目前为止,各种卷积神经网络的发展已经非常迅速,网络结构也层出不穷,例如AlexNet,VGG系列,GoogLeNet,Inception系列,ResNet等等,这些网络的出现也不断刷新了人们对深度学习的期望和认识,但是作为CNN在DL中的开衫鼻祖,LeNet-5的精髓任然在所有的网络中都能找到影子,因此希望大家可以好好体会LeNet-5的精髓。本来今天还要和大家一起来分享AlexNet,但是由于篇幅的原因就没有加进来,不过在今后我们会在其他系列的文章中继续介绍和分享其他的CNN模型,敬请期待。

由于精力有限,文中难免有一些错误,请读者不吝赐教!

系列预告Next

《人工智能发展史(八)之RNN循环神经网络那些事儿》

《人工智能发展史(九)之ResNet残差网络那些事儿》

《人工智能发展史(十)之强化学习那些事儿》

《人工智能发展史(十一)之计算机博弈那些事儿》

关注有惊喜!

深度学习那些事

深度Deeper

关注微信号每周收听我们的消息

如果喜欢,请点赞~

本文来自企鹅号 - 迁移学习媒体

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏机器之心

教程 | 一文简述如何使用嵌套交叉验证方法处理时序数据

22130
来自专栏Fish

Andrew Ng的机器学习课程概述(三)

第十三章 无监督学习 首先讲的K-mean聚类原理还是挺简单的。就是你要分K个类,你就选择K个点做中心点,然后让所有的点进行计算,离哪个点最近,就选择成为这个点...

19780
来自专栏marsggbo

DeepLearning.ai学习笔记(三)结构化机器学习项目--week2机器学习策略(2)

一、进行误差分析 很多时候我们发现训练出来的模型有误差后,就会一股脑的想着法子去减少误差。想法固然好,但是有点headlong~ 这节视频中吴大大介绍了一个...

20860
来自专栏AI研习社

我搭的神经网络不 work 该怎么办!看看这 11 条新手最容易犯的错误

每个人在调试神经网络的时候,大概都遇到过这样一个时刻: 什么鬼!我的神经网络就是不 work!到底该怎么办! 机器学习博客 TheOrangeDuck 的作者,...

31340
来自专栏Python爱好者

白话深度学习与TensorFlow(一)

24070
来自专栏计算机视觉战队

检测与识别人与目标之间的互动

深度学习有在新的高度得到大家的认可,并驱使更多的爱好者去学习、去探索,已不仅仅在图像、视频及语音领域得到重视。现在在SLAM、NLP、医学、经济学等领域都得到愈...

15330
来自专栏钱塘大数据

【报告】一篇文章详解深度学习的原理和运用

作者:数据挖掘与数据分析 深度学习 ( Deep Learning ) 是机器学习 ( Machine Learning ) 中近年来备受重视的一支,深度学习根...

36460
来自专栏书山有路勤为径

改善深层神经网络-设置机器学习应用

这有一个常见的误区,在机器学习发展的小数据时代,常见做法是将所有数据三七分,70%训练集,30%测试集或者60%训练集,20%验证集,20%测试集,这是机器学习...

7120
来自专栏人工智能LeadAI

从零开始用Python搭建超级简单的点击率预估模型

本篇是一个基础机器学习入门篇文章,帮助我们熟悉机器学习中的神经网络结构与使用。 日常中习惯于使用Python各种成熟的机器学习工具包,例如sklearn、Ten...

12910
来自专栏新智元

计算成本降低35倍!谷歌发布手机端自动设计神经网络MnasNet

【新智元导读】神经结构自动搜索是最近的研究热点。谷歌大脑团队最新提出在一种在移动端自动设计CNN模型的新方法,用更少的算力,更快、更好地实现了神经网络结构的自动...

8810

扫码关注云+社区

领取腾讯云代金券