[Intensive Reading]从AlexNet理解卷积神经网络的一般结构

[Intensive Reading]从AlexNet理解卷积神经网络的一般结构2012年AlexNet在ImageNet大赛上一举夺魁,开启了深度学习的时代,虽然后来大量比AlexNet更快速更准确的卷积神经网络结构相继出现,但是AlexNet作为开创者依旧有着很多值得学习参考的地方,它为后续的CNN甚至是R-CNN等其他网络都定下了基调,所以下面我们将从AlexNet入手,理解卷积神经网络的一般结构。先给出AlexNet的一些参数和结构图:卷积层:5层全连接层…

大家好,又见面了,我是你们的朋友全栈君。

2012年AlexNet在ImageNet大赛上一举夺魁,开启了深度学习的时代,虽然后来大量比AlexNet更快速更准确的卷积神经网络结构相继出现,但是AlexNet作为开创者依旧有着很多值得学习参考的地方,它为后续的CNN甚至是R-CNN等其他网络都定下了基调,所以下面我们将从AlexNet入手,理解卷积神经网络的一般结构。
这里写图片描述

先给出AlexNet的一些参数和结构图:
卷积层:5层
全连接层:3层
深度:8层
参数个数:60M
神经元个数:650k
分类数目:1000类

AlexNet结构图:
这里写图片描述
由于当时的显卡容量问题,AlexNet 的60M个参数无法全部放在一张显卡上操作,所以采用了两张显卡分开操作的形式,其中在C3,R1,R2,R3层上出现交互,所谓的交互就是通道的合并,是一种串接操作。


卷积层

CNN中卷积层的作用

CNN中的卷积层,在很多网络结构中会用conv来表示,也就是convolution的缩写。卷积层在CNN中扮演着很重要的角色——特征的抽象和提取,这也是CNN区别于传统的ANN或SVM的重要不同,在传统机器学习算法中,我需要人为的指定特征是什么,比如经典的HOG+SVM的行人检测方案,HOG就是一种特征提取方法。所以我们送入SVM分类器中的其实HOG提取出来的特征,而不是图片的本身。而在卷积神经网络中,大部分特征提取的工作在卷积层自动完成了,越深越宽的卷积层一般来说就会有更好的表达能力。

卷积层如何操作

CNN中的卷积层操作与图像处理中的卷积是一样的,都是一个卷积核对图像做自上而下,自左而右的加权和操作,不同指出在于,在传统图像处理中,我们人为指定卷积核,比如Soble,我们可以提取出来图像的水平边缘和垂直边缘特征。而在CNN中,**卷积核的尺寸是人为指定的,但是卷积核内的数全部都是需要不断学习得到的。**比如一个卷积核的尺寸为 3 × 3 × 3 3\times3\times3 3×3×3,分别是宽,高和厚度,那么这一个卷积核中的参数有27个。
在这里需要说明一点:
卷积核的厚度=被卷积的图像的通道数
卷积核的个数=卷积操作后输出的通道数
这两个等式关系在理解卷积层中是非常重要的!!举一个例子,输入图像尺寸 5 × 5 × 3 5\times5\times3 5×5×3(宽/高/通道数),卷积核尺寸: 3 × 3 × 3 3\times3\times3 3×3×3(宽/高/厚度),步长:1,边界填充:0,卷积核数量:1。用这样的一个卷积核去卷积图像中某一个位置后,是将该位置上宽3,高3,通道3上27个像素值分别乘以卷积核上27个对应位置的参数,得到一个数,依次滑动,得到卷积后的图像,这个图像的通道数为1(与卷积核个数相同),图像的高宽尺寸如下公式:
( 5 − 3 + 2 × 0 ) 1 + 1 = 3 \frac{\left ( 5-3+2\times0 \right )}{1}+1=3 1(5−3+2×0)​+1=3
所以,卷积后的图像尺寸为: 3 × 3 × 1 3\times3\times1 3×3×1(宽/高/通道数)

AlexNet中的卷积层

在AlexNet中,卷积层是上图所示的C1…C5,一共5层。而每次卷积后的结果在上图中可以看到,比如经过卷积层C1后,原始的图像变成了55*55的尺寸,一共有96个通道,分布在2张3G的显卡上,所以上图中一个立方体的尺寸是 55 × 55 × 48 55\times55\times48 55×55×48,48是通道数目(后面会详细的说明),而在这个立方体里面还有一个 5 × 5 × 48 5\times5\times48 5×5×48的小立方体,这个就是C2卷积层的核尺寸,48是核的厚度(后面会详细说明)。这样我们就能看到它每一层的卷积核尺寸以及每一层卷积之后的尺寸。我们按照上面的说明,推到下每一层的卷积操作:

需要说明的是,虽然AlexNet网络都用上图的结构来表示,但是其实输入图像的尺寸不是 224 × 224 × 3 224\times224\times3 224×224×3,而应该是 227 × 227 × 3 227\times227\times3 227×227×3,大家可以用244的尺寸推导下,会发现边界填充的结果是小数,这显然是不对的,在这里就不做推导了。

输入层: 227 × 227 × 3 227\times227\times3 227×227×3
C1: 96 × 11 × 11 × 3 96\times11\times11\times3 96×11×11×3 (卷积核个数/宽/高/厚度)
C2: 256 × 5 × 5 × 48 256\times5\times5\times48 256×5×5×48(卷积核个数/宽/高/厚度)
C3: 384 × 3 × 3 × 256 384\times3\times3\times256 384×3×3×256(卷积核个数/宽/高/厚度)
C4: 384 × 3 × 3 × 192 384\times3\times3\times192 384×3×3×192(卷积核个数/宽/高/厚度)
C5: 256 × 3 × 3 × 192 256\times3\times3\times192 256×3×3×192(卷积核个数/宽/高/厚度)

针对这五层卷积,说明一下三点:
1.推导下C1后的输出是什么:
用 11 × 11 × 3 11\times11\times3 11×11×3的卷积核卷积 227 × 227 × 3 227\times227\times3 227×227×3的图像,卷积后的尺寸是 55 × 55 × 1 55\times55\times1 55×55×1。这是因为:
( 227 − 11 + 2 × 0 ) 4 + 1 = 55 \frac{\left ( 227-11+2\times0 \right )}{4}+1=55 4(227−11+2×0)​+1=55
卷积核的个数为96,但是48个在一张显卡上,剩余48个在另一张显卡上。所以单张显卡上的通道数为48,2为显卡个数。
最后的输出:$55\times55\times48\times2 $
而剩下的层数与上述推导式相同的,我们可以逐层确定输出是什么。
2.注意推到过程中的池化操作
在C1,C2,C5的卷积操作后,图像做了最大池化(后面会说),这会影响输出图片的尺寸。
3.C3卷积层的特殊性
这里写图片描述
看下上面这张图,由于分显卡操作,上一层的输出通道数(也就是卷积核的个数)总会是下一层卷积层卷积核厚度的2倍。但是C3是特殊的,这是为啥呢?????
这里写图片描述
因为在这里做了通道的合并,也就是一种串接操作,所以一个卷积核卷积的不再是单张显卡上的图像,而是两张显卡的图像串在一起之后的图像,串在一起之后的通道数就是256,所以卷积核的厚度为256。
这里写图片描述
这也就是为什么,在这个图上要画两个33128的卷积核,他想表达的意思就是实际的卷积核尺寸是 3 × 3 × 256 3\times3\times256 3×3×256!(上面这个结论是我猜的)


池化层与激活层

严格上说池化层与卷积层不属于CNN中的单独的层,也不记入CNN的层数内,所以我们一般直说AlexNet一共8层,有5层卷积层与3层全连接层。但是在这里为了逻辑上清晰,就把他们单独拿出来说明下:

池化层

池化操作(Pooling)用于卷积操作之后,其作用在于特征融合和降维,其实也是一种类似卷积的操作,只是池化层的所有参数都是超参数,都是不用学习得到的。
这里写图片描述
上面这张图解释了最大池化(Max Pooling)的操作过程,核的尺寸为 2 × 2 2\times2 2×2,步长为2,最大池化的过程是将 2 × 2 2\times2 2×2尺寸内的所有像素值取最大值,作为输出通道的像素值。
除了最大池化外,还有平均池化(Average Pooling),也就是将取最大改为取平均。
一个输入为 224 × 224 × 64 224\times224\times64 224×224×64的图像,经过最大池化后的尺寸变为 112 × 112 × 64 112\times112\times64 112×112×64,可以看到池化操作的降维改变的是图像的宽高,而不改变通道数。

激活层

池化操作用于卷积层内,而激活操作则在卷积层和全连接层都会用到,由于之前我已经写过关于激活函数的博客,在这里只简单说明下,具体内容大家可以在 理解激活函数在神经网络模型构建中的作用这个博客中了解。
深层网络中一般使用ReLU多段线性函数作为激活函数,如下图所示,其作用在于增加非线性。
这里写图片描述
在全连接层中的激活过程就很好理解了,因为全连接层内所有的神经元的输出都是一个数,只要这个数x>0,则x=x;x<0,则x=0。
在卷积层中的激活针对的是每一个像素值,比如某卷积层输出中某个通道中i行j列像素值为x,只要这个数x>0,则x=x;x<0,则x=0。


全连接层

全连接层的作用

CNN中的全连接层与浅层神经网络中的作用是一样的,负责逻辑推断,所有的参数都需要学习得到。有一点区别在于第一层的全连接层用于链接卷积层的输出,它还有一个作用是去除空间信息(通道数),是一种将三维矩阵变成向量的过程(一种全卷积操作),其操作如下:
这里写图片描述
输入图像是 W × H × C W\times H \times C W×H×C,那么卷积核的尺寸为 W × H × C W\times H\times C W×H×C,这样的话整个输入图像就变成了一个数,一共有k个数(第一层全连接层后的神经元个数),就有K个这样的 W × H × C W\times H\times C W×H×C的卷积核。所以全连接层(尤其是第一层)的参数量是非常可怕的,也是由于这个弊端,后来的网络将全连接取消了,这个有机会再说。
AlexNet中的全连接层

再回到AlexNet结构,R1,R2,R3就是全连接层。R2,R3很好理解,在这里主要说明下R1层:
输入图像: 13 × 13 × 256 13\times13\times256 13×13×256
卷积核尺寸: 13 × 13 × 256 13\times13\times256 13×13×256 个数 2048 × 2 2048\times2 2048×2
输出尺寸:4096(列向量)
从最开始的结构中可以看到,R1中也有通道的交互:
这里写图片描述
所以串接后的通道数是256,全卷积的卷积核尺寸也就是 13 × 13 × 256 13\times13\times256 13×13×256,一个有4096个这样尺寸的卷积核分别对输入图像做4096次的全卷积操作,最后的结果就是一个列向量,一共有4096个数。这些数的排布其实就相当于传统神经网了里面的第一个隐藏层而已,通过R1后,后面的链接方式和ANN就没有区别了。要学习的参数也从卷积核参数变成了全连接中的权系数。


Softmax层

Softmax作用

Softmax层也不属于CNN中单独的层,一般要用CNN做分类的话,我们习惯的方式是将神经元的输出变成概率的形式,Softmax就是做这个的:
这里写图片描述
这个很好理解,显然Softmax层所有的输出相加为1。即:
这里写图片描述
而某一个输出的就是概率,最后我们按照这个概率的大小确定到底属于哪一类。
这里写图片描述
AlexNet中的Softmax

AlexNet最后的分类数目为1000,也就是最后的输出为1000,输入为4096,中间通过R3链接,R3就是最后一层了,全连接的第3层,所有层数的第8层。
到这里,AlexNet的所有结构就都说完了!说完了!说完了!,下面补充一些东西,算是一些延伸吧。


AlexNet 中60M参数

AlexNet只有8层,但是它需要学习的参数有60000000个,相比如他的层数,这是一个很可怕的数字了,我们来计算下这些参数都是怎么来的:
C1: 96 × 11 × 11 × 3 96\times11\times11\times3 96×11×11×3(卷积核个数/宽/高/厚度) 34848个
C2: 256 × 5 × 5 × 48 256\times5\times5\times48 256×5×5×48(卷积核个数/宽/高/厚度) 307200个
C3: 384 × 3 × 3 × 256 384\times3\times3\times256 384×3×3×256(卷积核个数/宽/高/厚度) 884736个
C4: 384 × 3 × 3 × 192 384\times3\times3\times192 384×3×3×192(卷积核个数/宽/高/厚度) 663552个
C5: 256 × 3 × 3 × 192 256\times3\times3\times192 256×3×3×192(卷积核个数/宽/高/厚度) 442368个
R1: 4096 × 6 × 6 × 256 4096\times6\times6\times256 4096×6×6×256(卷积核个数/宽/高/厚度) 37748736个
R2: 4096 × 4096 4096\times4096 4096×4096 16777216个
R3: 4096 × 1000 4096\times1000 4096×1000 4096000个

在R1中卷积核尺寸是 6 × 6 × 256 6\times6\times256 6×6×256而不是 13 × 13 × 256 13\times13\times256 13×13×256是因为经过了最大池化。可以看到,全连接层(尤其是第一层)参数数量占了绝大部分。


CNN的发展

在AlexNet问世之后,CNN以一个很快的速度发展,截止到2017年,已经有了多代的网络结构问世,深度、宽度上也越来越大,效率和正确率上也越来越好:
AlexNet—NiN—VGG—GoogLeNet—ResNet
在这些结构中:
NiN 引入 1 × 1 1\times1 1×1卷积层(Bottleneck layer)和全局池化;
VGG将 7 × 7 7\times7 7×7替换成三个 3 × 3 3\times3 3×3;
GoogLeNet引入了Inception模块;
ResNet引入了直连思想;
DenseNet引入稠密链接,将当前的层与之后的所有层直连。
其中的一些网络甚至替换了AlexNet中提出的一些思想,但是CNN大体上结构依旧遵循着AlexNet,甚至还有很多传统ANN的思想存在。
这里写图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/149191.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 计算机错误代码0x 00000006,什么原因造成了蓝屏 电脑蓝屏错误代码介绍

    计算机错误代码0x 00000006,什么原因造成了蓝屏 电脑蓝屏错误代码介绍电脑蓝屏是在上网的时候再常见到的现象了,造成电脑蓝屏的原因很多,所以微软在操作系统中设计了蓝屏代码,让大家电脑在出现蓝屏的时候能够及时的发现是什么原因造成了蓝屏。一般蓝屏代码都位于屏幕提示文字的第一段或者倒数第三段,但是蓝屏代码都是以“***Stop”开头。编号代码含意00×00000000作业完成。10×00000001不正确的函数。20×00000002系统找不到指定的档案。…

    2022年5月15日
  • mysql的服务已经停止,无法启动的解决办法

    mysql的服务已经停止,无法启动的解决办法(1)如果之前装过mysql的,把mysql的server卸载掉,连带MySQLServer5.7\data文件一起清干净(2)重新装好后,输入netstartmysql还是无法启动服务,这个时候,输入以下指令     mysqld–remove删除mysql服务     mysqld–install安装服务     mysqld

    2022年7月27日
  • SSL/TLS 双向认证(一) — SSL/TLS 工作原理

    SSL/TLS 双向认证(一) — SSL/TLS 工作原理本文部分参考:https://www.wosign.com/faq/faq2016-0309-03.htmhttps://www.wosign.com/faq/faq2016-0309-04.htmhttp://blog.csdn.net/hherima/article/details/52469674一:SSL/TLS介绍什么是SSL,什么是TLS呢?官话说SSL是安全套…

    2022年5月29日
  • rider 2022 激活-激活码分享2022.01.27

    (rider 2022 激活)最近有小伙伴私信我,问我这边有没有免费的intellijIdea的激活码,然后我将全栈君台教程分享给他了。激活成功之后他一直表示感谢,哈哈~https://javaforall.net/100143.htmlIntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,上面是详细链接哦~1TCF…

    2022年3月31日
  • 亚信安全发布2021年挖矿病毒专题报告,聚焦挖矿病毒进化与治理

    亚信安全发布2021年挖矿病毒专题报告,聚焦挖矿病毒进化与治理供稿|亚信安全出品|CSDN云计算近日,《亚信安全2021年挖矿病毒专题报告》正式发布(以下简称《报告》)。《报告》以2021年亚信安全威胁情报与服务运营部门所监测、分析和处置的挖矿病毒事件为基础,对各类挖矿病毒和攻击进行分析梳理与情况总结,并且深度探究未来可能会演化的方向,以此帮助更多用户,以更安全、更高效、更全面的行动做出安全规划,为挖矿病毒治理提供了参考路径。2021年挖矿病毒大事件全面回顾2021全年,亚信安全共拦截挖矿病毒516,443次。《报告》基于此整体梳.

    2022年5月20日
  • idea git 使用(idea开发工具怎么使用)

    简介以下会介绍Git在IDEA中的使用,包含大多数的开发场景,这里是用Github做远程仓库,假设小组中有两个人,队长A,和队员B场景一:队长A创建项目并提交到远程Git仓库场景二:队员B从远程Git仓库上获取项目源码场景三:队员B修改了部分源码,提交到远程仓库场景四:队长A从远程仓库获取队员B的提交场景五:队员B接受了一个新功能的任务,创建了一个分支并在分支上开发场景六:队员B把…

    2022年4月17日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号