一、论文与视频学习
1.ResNet
1.1 网络结构
虚线是调整步距,目的是为了可相加。
浅层不需要,其通过最大池化下采样得到的输出刚好是实现残差结构所需要的输入shape,深层需要。
1.2网络亮点
- 超深的网络结构(突破1000层)。
- 提出了residual模块(残差模块)。
- 使用Batch Normalization(标准化处理)加速训练(不再使用dropout方法)。
1.3针对问题
- 随着网络不断加深,会出现梯度消失或梯度爆炸的问题
- 退化问题(层数深的效果反而不好)
1.4具体
(1)residual结构
左边在主分支上经过一些操作得到的一个特征矩阵,再与输入的特征矩阵进行相加,再进行RELU激活函数操作。这需要保证整体操作中的特征矩阵们的维度差别不大。
右边加上了两个1×1卷积层。第一个进行降维,第二个回归256。主要目的是为了减少参数。
(2)Batch Normalization
目的是为了是一个batch的feature map,满足均值为0方差为1的分布规律。该方法能够加速网络训练并且提升准确率。
i.需要注意的问题:
- 训练时要将traning设置为True,验证时设置为False。
- batch size尽可能设置大一些,设置小后表现可能很糟糕,设置的越大求的均值和方差越接近整个训练集的均值和方差
- 最好把BN层放在卷积层和激活层之间,而且卷积层不要使用偏置bias。
(3)迁移学习
先学习通用的,再训练学习特殊的,节省了时间。
优势:
- 能够快速的训练出一个理想的结果
- 当数据集较小的时候,也能训练出理想的效果
学习方式:
- 载入权重后训练所有参数
- 载入权重后只训练最后几层参数
- 载入权重后在原网络基础上再添加一层全连接层,仅训练最后一个全连接层
2.ResNeXt
对ResNet的改进。
2.1改进
下面的block模块,在数学计算上完全等价。
最终将原来的block替换成©中的block。
二、代码作业
ResNet结果:
为了训练方便,这里eopch设为1,但是能够得到相对不错的结果,证明了其神经网络优越性。相信epoch更多的情况下,能够更加收敛取得更好结果。
LeNet结果:
LeNet是依据高老师博客的内容进行训练的。
对比:
虽然ResNet只训练了一个EOPCH,但是效果明显好于LeNet。
三、思考题
1.Residual learning原理
通过创造两条途径,使得:下一层的值=输入的值+经过冗余层计算的值,用残差的方法解决了梯度消失或者爆炸,以及神经网络的退化问题。使得神经网络的层数可以大大增加,也能够取得较好的效果。
2.Batch Normailization原理
使卷积以后的feature map满足均值为0,方差为1的分布规律,接入激活函数后不会发生意外情况。而BN,首先会统计每个通道数目所有点的像素值,求得均值和方差,然后在每个通道上分别用该点的像素值减均值除方差得到该点的像素值,最后将其接入到激活函数中。
3.为什么分组卷积可以提升准确率?即然分组卷积可以提升准确率,同时还能降低计算量,分数数量尽量多不行吗?
因为分组卷积能够在保证参数数量不发生爆炸的情况下尽可能增加深度。
但是分组卷积的一个重要弊端是组与组之间没有信息流通的渠道,导致网络的特征提取能力下降。所以分组卷积的数量也是个要慎重考虑的问题。