卷积神经网络分为卷积层、池化层、全连接层、softmax层。
卷积层:卷积核与输入层中的一个区域相连,计算内积后加上权重。
激活函数层:激活函数层包括在卷积层中,将相连的神经元进行激活,通常使用ReLu激活函数 m a x ( 0 , x ) max(0,x) max(0,x)。
池化层:又称为下采样层,通常包括max pooling和average pooling,不会改变通道数量。
全连接层:将特征图拉直,转化为1 × \times × 1 × \times × 4096的向量。
softmax层:将全连接层4096个神经元转化为1000个类别,通过计算交叉熵使得每个类别对应一个概率值,最后通过将概率值排序,得到结论
卷积层有两个特点:局部感知和权值共享
局部感知: 在提取图片特征时,只需得到图片的某一些特征,而一些模式化特征比整张图片小很多,并且一个神经元不需要看到整个图片发现模式。所以,让每个卷积核只与输入图片的一个局部区域连接,该连接空间的大小叫做神经元的感受野(receptive field),它的尺寸是一个超参数。其通道数量总与输入的通道数相同即在空间维度(宽高)上是局部的,而在深度上总是和输入数据的深度一致。
权值共享: 由于同样的模式可能出现在不同的区域,所有采用权值共享的方法,该方法对不同的感受野使用的卷积核参数相同,当权值共享时就相当于卷积核扫过了一整张图片。在卷积层中使用权值共享是用来控制参数的数量。
激活函数层: 通常使用非线性激活函数 m a x ( 0 , x ) max(0,x) max(0,x)。
它的作用是组建降低特征图的维度,减少参数数量,也能有效控制过拟合和进行特征的融合。池化层包含最大值池化和平均池化。无需参数需要学习。
全连接层就是普通的神经网络,具有全局感受野可去除空间信息,换句话说全连接层和卷积层之间的唯一不同就是卷积层中的卷积核只与输入图片的一个局部区域连接,并且在卷积列中的卷积核共享参数,类比到全连接层则是全局感受野,等效于全局卷积。
softmax层是以交叉熵损失函数为基础的一层,对应最后一个全连接输出的1000个类别,根据交叉损失函数计算出1000类标签的概率值。
特点:将实数值压缩到(0,1);所有元素和为1。
AlexNet由5个卷积层和3个全连接层组成,其中卷积层中使一些最大池化层以及3个全连接层后的1000个softmax输出。为加快训练速度采用非饱和线性函数和能进行高效卷积运算的GPU实现。为减少全连接层中的过拟合,采用了数据增强、dropout正则化两种防止过拟合的方法。
局部响应归一实现了一种模仿真实神经元的横向抑制,从而在使用不同内核计算的神经元输出之间产生较大的竞争。它是指在某个batch中某个位置(x,y)上跨通道方向上的归一化。
数据增强有两种方式:数据增强 × \times × 10、图像像素去中心化
Dropout会以50%的概率将隐藏层的神经元输出置为0,以这种方法被置0的神经元不参与网络的前馈和反向传播。因此,每次给网络提供了输入后,神经网络都会采用一个不同的结构,但这些结构都权重共享。这种技术减少了神经元的复杂适应性,因为神经元无法依赖于其他特定的神经元而存在。它被迫学习更强大更鲁棒的功能。测试时,我们试着使用了所有的神经元,并将它们的输出乘以0.5。最后使用Dropout的网络可以更好地解决过拟合现象。
VGG-16的核心思想就是将大卷积核转化多个小卷积核替代:5 × \times × 5卷积用2个3 × \times × 3卷积代替;7 × \times × 7卷积用3个3 × \times × 3卷积代替。
为什么提出Inception?
在提出GoogLeNet之前,为提高网络性能只能提高网络的深度和宽度(增加隐藏层和各层神经元的数量),但这种方法存在问题:
将本来一个串行的网络结构替换为四个分支并行,分别为1 × \times × 1卷积、3 × \times × 3卷积、5 × \times × 5卷积和一个max pooling层。采用大小不同的卷积核意味着感受野的大小不同,可得到不同的尺寸,再再此的基础上增加了3个1 × \times × 1卷积,避免了5 × \times × 5卷积计算量太大的问题。
Inception的作用: 替代了人工确定卷积层中过滤器的类型或者是否创建卷积层和池化层,让网络自己学习它具体需要什么参数。
替代了人工确定卷积层中过滤器的类型或者是否创建卷积层和池化层,让网络自己学习它具体需要什么参数。
有一个深层分类器和浅层分类器,为防止梯度消失。
Inception-V2的主要贡献是提出Batch Normalization,其次改进了部分v1。
Batch Normalization
在训练深度网络时作者提出一个问题“Internal Covariate Shift”。这是由于在训练过程中,网络参数变化所致。具体来说,对于一个神经网络,第n层的输入就是第n-1层的输出,在训练过程中每训练一轮参数就会发送变化,对于一个网络相同的输入,但n-1层的输出却不一样,这导致了第n层的输入也不一样,为解决这个问题提出了Batch Normalization。
Batch Normalization层是一个可学习、有参数的网络层,其本质是在网络的每一层输入的时候,又插入了一个归一化层先做一个归一化处理,用于重新调整数据的分布,然后再进入网络的下一层。使用了近似白化的预处理对数据进行规范化到(0,1)的操作。
Batch Normalization同时解决Internal Covariate Shift问题(内部neuron的数据分布发 生变化),允许较高学习率,取代部分Dropout。
Inception-V3的主要贡献是进一步改进Inception模块。
分解卷积核尺寸:
取消辅助分类器: 只留下深层分类器,取消浅层辅助分类器。
改变降低特征图尺寸的方式: 有两个通道,一个是卷积层,一个是pooling层,两个通道生成的特征图大小一样,concat在一起即可。
Inception-V4就是将Inception-V2和Res Net结合。
ResNet的主要贡献就是增加了一个skip connection将残差和恒等映射结合。
为什么引入ResNet? 这是由于网络的加深会造成梯度爆炸和梯度消失的问题。
https://blog.csdn.net/weixin_39953502/article/details/80966046
https://blog.csdn.net/weixin_39953502/article/details/81027477
https://blog.csdn.net/Love_wanling/article/details/64906206
https://blog.csdn.net/fengbingchun/article/details/114167581
https://blog.csdn.net/sunny_yeah_/article/details/89430124
https://blog.csdn.net/ai_faker/article/details/115935086
https://zhuanlan.zhihu.com/p/52802896