【机器学习】《动手学深度学习 PyTorch版》李沐深度学习笔记(ResNet、ResNeXt)

ResNet、ResNeXt、迁移学习

1、为什么要选择残差网络(ResNet)

在VGG中,卷积网络达到了19层,在GoogLeNet中,网络史无前例的达到了22层。那么,网络的精度会随着网络的层数增多而增多吗?在深度学习中,网络层数增多一般会伴着下面几个问题:

1.计算资源的消耗(使用GPU集群)
2.模型容易过拟合(扩大数据集、Droupout、批量归一化、正则化、初始化参数调整等等方法)
3.梯度消失/梯度爆炸问题的产生(批量归一化)

随着网络层数的增加,网络发生了退化(degradation)的现象:随着网络层数的增多,训练集loss逐渐下降,然后趋于饱和,当你再增加网络深度的话,训练集loss反而会增大
注意:这并不是过拟合,因为在过拟合中训练loss是一直减小的。
【机器学习】《动手学深度学习 PyTorch版》李沐深度学习笔记(ResNet、ResNeXt)_第1张图片

当网络退化时,浅层网络能够达到比深层网络更好的训练效果,这时如果我们把低层的特征传到高层,那么效果应该至少不比浅层的网络效果差,我们可以当前层特征添加一条直接映射到下一层来达到此效果。
【机器学习】《动手学深度学习 PyTorch版》李沐深度学习笔记(ResNet、ResNeXt)_第2张图片

在前向传输的过程中,随着层数的加深,Feature Map包含的图像信息会逐层减少,而ResNet的直接映射的加入,保证了下一层的网络一定比前一层包含更多的图像信息。基于这种使用直接映射来连接网络不同层直接的思想,残差网络应运而生。(退化现象)
![在这里插入图片描述](https://img-blog.csdnimg.cn/d16a7b4b4b414d37ab14719d34ebb070.png
【机器学习】《动手学深度学习 PyTorch版》李沐深度学习笔记(ResNet、ResNeXt)_第3张图片

ResNet总结

【机器学习】《动手学深度学习 PyTorch版》李沐深度学习笔记(ResNet、ResNeXt)_第4张图片注意:
1.主分支与捷径分支的输出特征矩阵大小必须相同
2.resnet实线和虚线的区别:虚线部分是对特征矩阵的深度、高和宽都变换了,实线部分没有变化【机器学习】《动手学深度学习 PyTorch版》李沐深度学习笔记(ResNet、ResNeXt)_第5张图片
【机器学习】《动手学深度学习 PyTorch版》李沐深度学习笔记(ResNet、ResNeXt)_第6张图片

3、ResNeXt网络结构(CVPR2017)

这个网络结构是基于ResNet的,是ResNet的增强版。关于ResNet可以看上一篇的内容。在这篇文章中,ResNeXt最大的一个亮点就是ResNeXt单元中引入了一种新的维度称为“cardinality”,它代一个ResNeXt单元内相同的转换的个数,即分组的大小。实验表明,其它条件不变的情况下,增大cardinality的大小可以增大分类的准确率。
【机器学习】《动手学深度学习 PyTorch版》李沐深度学习笔记(ResNet、ResNeXt)_第7张图片
如图所示,上面是论文提出的ResNeXt模块的三种的等价形式,第一种是输入的256通道特征图,通过32个11的卷积,生成32个通道数为4的特征图,然后每个组进行33的卷积,然后通过11的卷积升维到256通道,最后32个组的结果相加融合。第二种和第一种类似,只不过32组先进行concat,然后再通过11的卷积升维。第三种是先通过11的卷积降维为128通道的特征图,然后通过分组卷积后concat,最后用11的卷积进行升维。这里的分组卷积主要是来自于AlexNet。ResNeXt-50的整体网络结构如下(只是将ResNet单元换成了ResNeXt单元),而ResNeXt-101以及ResNeXt-152的结构也与此类推:
【机器学习】《动手学深度学习 PyTorch版》李沐深度学习笔记(ResNet、ResNeXt)_第8张图片
ResNeXt单元的设计遵循:1)如果生成相同尺寸的特征图,那么这些分组共享相同的超参数(卷积核尺寸和通道数);2)当特征图的尺寸下采样2倍时,特征图的通道数需要增加为原来的两倍,比如对于第一阶段的残差块的通道数为256时,分为32组,每组通道为数为4;而对于第二阶段的残差块通道数为512时,分为32组,每组的通道就为8。依此类推,通道数逐渐翻倍。

4、实验对比

【机器学习】《动手学深度学习 PyTorch版》李沐深度学习笔记(ResNet、ResNeXt)_第9张图片
【机器学习】《动手学深度学习 PyTorch版》李沐深度学习笔记(ResNet、ResNeXt)_第10张图片

5、ResNeXt总结

1.使用分组让参数变得更少(是之前的1/g,g是组的个数)
2.错误率更低

6、迁移学习

【机器学习】《动手学深度学习 PyTorch版》李沐深度学习笔记(ResNet、ResNeXt)_第11张图片
【机器学习】《动手学深度学习 PyTorch版》李沐深度学习笔记(ResNet、ResNeXt)_第12张图片
【机器学习】《动手学深度学习 PyTorch版》李沐深度学习笔记(ResNet、ResNeXt)_第13张图片
【机器学习】《动手学深度学习 PyTorch版》李沐深度学习笔记(ResNet、ResNeXt)_第14张图片
注:不管有多少层,下边接近数据的也能拿到很大的梯度进行更新。

7、参考

文章:https://blog.csdn.net/jerry_liufeng/article/details/119710269
论文:《Aggregated Residual Transformations for Deep Neural Network》
视频:霹雳吧啦Wz

你可能感兴趣的:(深度学习,人工智能)