机器学习与深度学习面试一百题(2)卷积神经网络(持续更新中...)
kernel=3×3,输入是前一层的20个特征映射,因此第三层的每个特征映射有3×3×20个weight,加上bias,每个特征映射对应181个参数。kernel=3×3,输入是前一层的10个特征映射,因此第二层的每个特征映射有3×3×10个weight,加上bias,每个特征映射对应91个参数。由于第二层有20个特征映射,因此需要91×20=1820个参数;kernel=3×3,输入有3个通道(
问:什么是卷积神经网络(CNN)?它主要应用于哪些领域?
卷积神经网络(CNN)是一种用来处理局部和整体相关性的计算网络结构,它的本质是多层感知机,被应用在图像识别、自然语言处理甚至是语音识别领域,因为图像数据具有显著的局部与整体关系,其在图像识别领域的应用获得了巨大的成功。
问:为什么要使用卷积神经网络而不是前馈神经网络?
前馈神经网络存在以下缺点:
1.图像的维度比较高,而前馈神经网络参数个数是层之间乘积之和的形式,所以在处理图像时,前馈神经网络的参数就会极多,导致训练效率低,也容易导致过拟合。而CNN极大减少了参数的个数,从而可以提高训练效率。见下例:
对于200 × 300的RGB图片,假如是由三个卷积层组成的CNN:kernel=3 × 3,stride=2,padding=SAME。 最低层输出10个特征映射(feature map),中间层20个特征映射,最高层30个特征映射。那么CNN中参数的总数目是多少?
第一个卷积层 kernel=3×3,输入有3个通道(RGB图片),因此每个特征映射有3×3×3个weight,加上bias,每个特征映射对应28个参数。由于第一层有10个特征映射,因此有280个参数;
第二个卷积层 kernel=3×3,输入是前一层的10个特征映射,因此第二层的每个特征映射有3×3×10个weight,加上bias,每个特征映射对应91个参数。由于第二层有20个特征映射,因此需要91×20=1820个参数;
第三个卷积层 kernel=3×3,输入是前一层的20个特征映射,因此第三层的每个特征映射有3×3×20个weight,加上bias,每个特征映射对应181个参数。由于第三层有30个特征映射,因此这一层共有181×30=5430个参数。
因此共有280+1820+5430=7530个参数。
而处理同样一张图片,如果使用三层(输入层、隐藏层、输出层)前馈神经网络:隐藏层神经元个数为输入层神经元个数的2/3。使用多少个参数?
输入层:参数个数为=(200 × 300 × 3) × (200 × 300 × 3 × 2/3)= 216000000
隐藏层:参数个数为=(200 × 300 × 3 × 2/3) × 1 = 12000
输出层:参数个数为=1
总参数个数为=216000000 + 12000 + 1 = 216012001个参数
2.输入数据的空间信息被丢失。 因为全连接层的输入层是一维的,如果数据是多维的,比如二维的黑白图片,那么必须把它拉伸为一维数据才可以使用前馈神经网络,但这样就将空间信息丢失了。
因为卷积可以解决上面的两个问题,所以引入卷积代替全连接网络的点积运算。
问:CNN的特点以及优势?
局部连接:可以提取局部特征;
权值共享:减少参数数量,从而降低对时间、空间的消耗,降低训练难度。可以完全共享权值,也可以局部共享权值;
池化操作:池化操作与多层次结构一起,实现了数据的降维,将低层次的局部特征组合成为较高层次的特征,从而对整个图片进行表示;
问:CNN怎样进行权值共享?
权值共享就是滤波器共享,滤波器的参数是固定的,即是用相同的滤波器去扫一遍图像,提取一次特征,得到feature map。在卷积网络中,学好了一个滤波器,就相当于掌握了一种特征,这个滤波器在图像中滑动,进行特征提取,然后所有进行这样操作的区域都会被采集到这种特征,就好比上面的水平线。
问:卷积神经网络的结构是怎样的?每一层的作用都是什么?
层次 | 作用 |
---|---|
输入层 | 卷积网络的原始输入,可以是原始或预处理后的像素矩阵 |
卷积层 | 参数共享、局部连接,利用平移不变性从全局特征图提取局部特征 |
激活层 | 将卷积层的输出结果进行非线性映射 |
池化层 | 进一步筛选特征,可以有效减少后续网络层次所需的参数量 |
全连接层 | 将多维特征展平为2维特征,通常低维度特征对应任务的学习目标(类别或回归值) |
问:卷积操作的作用是什么?
卷积网络中的卷积核参数是通过网络训练出来的。通过卷积核的组合以及随着网络后续操作的进行,卷积操作可获取图像区域不同类型特征;基本而一般的模式会逐渐被抽象为具有高层语义的“概念”表示,也就是自动学习到图像的高层特征。
问:卷积在图像中有什么直观作用?
在卷积神经网络中,卷积常用来提取图像的特征,但不同层次的卷积操作提取到的特征类型是不相同的:
层次 | 特征类型 |
---|---|
浅层卷积 | 边缘特征 |
中层卷积 | 局部特征 |
深层卷积 | 全局特征 |
问:卷积核有哪些基本参数?
-
卷积核大小 (Kernel Size):定义了卷积的感受野,在过去常设为5,如LeNet-5;现在多设为3,通过堆叠3 × 3 3\times33×3的卷积核来达到更大的感受域。
-
卷积核步长 (Stride):定义了卷积核在卷积过程中的步长,常见设置为1,表示滑窗距离为1,可以覆盖所有相邻位置特征的组合;当设置为更大值时相当于对特征组合降采样。
-
填充方式 (Padding):在卷积核尺寸不能完美匹配输入的图像矩阵时需要进行一定的填充策略:(1) 设置为SAME表示对不足卷积核大小的边界位置进行某种填充(通常零填充)以保证卷积输出维度与与输入维度一致;(2) 设置为VALID时则对不足卷积尺寸的部分进行舍弃,输出维度就无法保证与输入维度一致。
-
输入通道数 (In Channels):指定卷积操作时卷积核的深度,默认与输入的特征矩阵通道数(深度)一致;在某些压缩模型中会采用通道分离的卷积方式。
-
输出通道数 (Out Channels):指定卷积核的个数,若设置为与输入通道数一样的大小,可以保持输入输出维度的一致性;若采用比输入通道数更小的值,则可以减少整体网络的参数量。
问:经过卷积输出后的特征图大小如何计算?
设输入特征图大小为m×n,卷积核大小为i×j,卷积核个数为m,卷积步长为s(即横向和纵向都是s),填充为p,则输出特征图大小为u×v×m,ceil为向上取整:
行:u=ceil((m-i+2p+1)÷s)
列:v=ceil((n-j+2p+1)÷s)
层数:m
问:池化操作分为哪几种类型?
最大池化(Max Pooling)
平均池化(Average Pooling)
求和池化(Sum Pooling)
问:典型的卷积神经网络有哪些?它们的特点都是什么?
项目 | Value |
---|---|
LeNet | 首个典型的卷积神经网络。 |
AlexNet | 引入了ReLU、dropout、数据增强。 |
VGGNet | 通过反复堆叠 3x3 的小型卷积核和 2x2 的最大池化层,成功地构筑了 16~19 层深的卷积神经网络,通过不断加深网络结构来提升性能。它强调 CNN 必须够深,视觉数据的层次化表示才有用。深的同时结构简单。 |
GoogLeNet | 大大增加了卷积神经网络的深度。将最后的全连接层都换成了 1x1 的卷积层,大大加速了训练速率。 |
ResNet | 引入了残差网络结构(residual network),借鉴了高速网络的跨层连接的思想,是带有跳跃结构的网络,通过这种残差网络结构,可以把网络层弄的很深,且分类效果很好。 |
问:请简单介绍ResNet的残差网络结构。
残差网络借鉴了高速网络的跨层连接的思想,但是对其进行了改进,残差项原本是带权值的,但 ResNet 用恒等映射代替了它,恒等映射即直接将前一层输出传到后面的思想。ResNet 引入了残差网络结构(residual network),通过这种残差网络结构,可以把网络层弄的很深(据说目前可以达到 1000 多层),并且最终的分类效果也非常好,残差网络的基本结构如下图所示,很明显,该图是带有跳跃结构的:
假设:
神经网络输入:x
期望输出:H(x),即 H(x) 是期望的复杂映射,如果要学习这样的模型,训练的难度会比较大。
此时,如果已经学习到较为饱和的准确率,或者发现下层的误差变大时,接下来的目标就转化为恒等映射的学习,也就是使得输入x近似于输出 H(x),以保持在后面的层次中不会造成精度下降。
上图的残差网络中,通过捷径连接的方式直接将输入x传到输出作为初始结果,输出结果为 H(x)=F(x)+x,当 F(x)=0 时,H(x)=x,也就是恒等映射。于是,ResNet 相当于将学习目标改变了,不再是学习一个完整的输出,而是目标值H(X)和x的差值,也就是所谓的残差 F(x) := H(x)-x,因此,后面的训练目标就是要将残差结果逼近于 0,使到随着网络加深,准确率不下降。
写在后面
这个专栏主要是我在复习过程中总结的一些机器学习与深度学习中可能会涉及到的面试题,以备复试以及未来面试之需,本篇文章聚焦于卷积神经网络部分内容,其中参考了很多博主的总结(见下方参考文章),不过由于学习的不深入,也只是走马观花,问题面覆盖得不够广泛,很多问题总结得也不是很透彻,望读者见谅,希望能给大家的学习带来一点帮助,共同进步!!!
参考文章:
[1] CSDN文章:【机器学习面试题】—— 卷积神经网络: 链接
[2] CSDN文章:卷积神经网络超详细介绍: 链接
更多推荐
所有评论(0)