3.2 卷积神经网络进阶-Vggnet-Resnet
4.2.2 卷积神经网络进阶(Vggnet-Resnet)
-
VGGNet
-
调参经验
- 更深层次的神经网络
- 多使用3*3的卷积核
- 2个3x3的卷积层可以看做一层5x5的卷积层
- 3个3x3的卷积层可以看做一层7x7的卷积层
- 1x1的卷积层可以看做是非线性变换
- 每经过一个pooling层,通道数目翻倍
-
视野域:2个3*3 = 1个5*5,因为,他们可以看到的视野区域是一样的
image.png- 好处:
- 2层比1层更多一次的非线性变换
- 参数降低28%(
(5*5-2*3*3)/5*5
)
- 好处:
-
多使用1*1的卷积核
1*1的卷积核相当于一次非线性变换。(当卷积核是1*1的时候,相当于是在做全连接,只不过这个全连接是纵向的,是在通道上的)
我们可以通过这种方式对通道进行降维的操作,即使得输出通道的数目小于输入通道的数目
1*1的卷积核可以在加多个这种操作的情况下也不损失信息
image.png -
从11层递增至19层的过程
每一个版本都是在每一层的后面加一些卷积层,这是因为开始输入的图像比较大,计算比较耗时,不过经过两个maxpooling之后,图像就变的比较小了,这个时候多加几个卷积层之后所耗的损失也没有那么大
image.pngLRN 归一化,已经快过时了
基于VGGVet,我们可以配置出各种各样的网络机构,总体参数样本也可以保持不变
-
训练技巧
- 先训练浅层网络如A ,再去训练深层网络
- 多尺度输入
- 不同的尺度训练多个分类器,然后做ensemble
- 随机使用不同的尺度缩放然后输入进分类器进行训练
-
-
ResNet
VGGNet是将网络层次加深,但是加深到一定程度以后,再加深效果也不能提升效果了。ResNet就是解决了这样一个问题,可以让网络不停的加深,最多可以加深到1000多层
image.png-
加深层次的问题
-
模型深度达到某个程度后继续加深会导致训练集准确率下降
image.png image.png
-
-
加深层次的问题解决
- 假设:深层网络更难优化而不是学不到东西,ResNet基于这种假设解决了这个加深层次的问题
- 深层网络至少可以和浅层网络持平
- y=x,虽然增加了深度,但误差不会增加
- 假设:深层网络更难优化而不是学不到东西,ResNet基于这种假设解决了这个加深层次的问题
-
模型结构
-
Identity部分是恒等变化
这样如果F(x)=0,也就是说F(x)没有学到东西,那么我们可以把他忽略掉,而保留恒等变换X,这样至少可以让他和浅层的神经网络持平
但是他的层次会更深,这样一旦Fx确实学到了一些东西,那么他就可以继续增强这个效果
image.png -
F(x)是残差学习,ResNet叫做残差网络,这是ResNet的一个基本原理
-
ResNet-34与ResNet-101使用的子结构(34,101代表层次)
image.png下面是更多的层次结构的说明
方括号里的是残差子结构。经过卷积层之后没有全连接层,因为没有了全连接层,我们就可以将全连接层的参数分摊到卷积层,在这里参数数目可以一定程度上反映模型的容量,参数数目越多,就可以学到更多的东西。
但是参数数目多会导致过拟合,为了使得模型容量是一定的,我们在这里就弱化了全连接层,强化了卷积层
image.png
-
-
- 先用一个普通的卷积层, stride=2
- 再经过一个3*3的max_ _pooling
- 再经过残差结构
- 没有中间的全连接层,直接到输出
- 残差结构使得网络需要学习的知识变少,容易学习
- 残差结构使得每一层的数据分布接近,容易学习