携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第25天,上一篇文章中,我们介绍了卷积神经网络,卷积层的定义,常见的卷积操作,池化层,上采样,激活曾,BathNorm层,全连接层,Dropout层,损失层。
今天,我们来介绍经典卷积神经网络结构,优化器,学习率和卷积神经网络添加正则化的方法。
-
1.1 经典卷积神经网络结构介绍
我们在设计网络的时候尽量选择轻量级的网络结构,就是在保证模型性能的情况下,尽量去压缩计算量 以及参数量
-
1.1.1 串联结构的典型代表
-
LeNet,AlexNet,ZFNet
-
VGGNet
- 由牛津大学计算机视觉组和Google Deepmind共同设计
- 为了研究网络深度对模型准确度的影响,并采用小卷积堆叠的方式,来搭建整个网络结构
- 主要用来提取特征
-
1.1.2 跳连结构的典型代表
-
ResNet
- 在2015年由何凯明团队提出,引入跳连的结构来防止梯度消失的问题,进而可以进一步加大网络深度
- 网络的深度可以达到50到101
- 扩展结构:ResNeXt,DenseNet,WideResNet,ResNet In ResNet,Inception-ResNet等
-
1.1.3 并行结构的典型代表
-
InceptionV1-V4(GoogLeNet)
- 在设计网络结构时,不仅强调网络的深度,也会考虑网络的宽度(同一个维度的情况下channel的数量),并将这种结构定义为Inception结构(一种网中网(Network In Network)的结构,即原来的结点也是一个网络)
-
1.1.4 轻量型结构的典型代表
-
MobileNetV1
- 由Google团队提出,并发表与CVPR-2017,主要目的时为了设计能够用于移动端的网络结构。
- 使用Depth-wise Swparabele Convolution的卷积方式代替传统卷积方式,以达到减少网络权值参数的目的
- MobileNetV2(和ResNet结合)/V3(采用网络搜索)
- SqueezeNet/ShuffleNetV1/V2等
-
1.1.5 多分枝网络结构的典型代表
-
多分枝结构
- 主要解决相似性问题
- SiameseNet
- TripletNet
- QuadrupletNet
- 多任务网络
- 等等
-
1.1.6 attention结构的典型代表
在循环神经网络中使用的比较多,在卷积神经网络中也有很重要的作用
- Attention机制
- 对于全局信息,注意力机制会重点关注一些特殊的目标区域,也就是所谓的注意力焦点,进而利用有限的注意力资源对信息进行筛选,提高信息处理的准确性和效率
- one-hot分布或者soft的软分布
- Soft-Attention 或者Hard-Attention
- 可以作用在特征图上,尺度空间上,channel尺度上,不同时刻历史特征上等
- ResNet+Attention
- SENet/Channel Attention
-
1.2 学习率
主要针对网络参数优化的时候采用梯度下降算法的时候如何去调节参数优化的步长
- 学习率作为监督学习以及深度学习中重要的超参,其决定着目标函数能否收敛到局部最小值以及何时收敛到最小值
- 合适的学习率能够使目标函数在合适的时间内收敛到局部最小值
- torch.optim.lr_schedule
- ExponentialLR(可以定义学习率按照指数进行衰减)
- ReducelROnPlateau
- CyclicLR
- 等
-
1.3 优化器
在进行BP算法时候,对参数如何进行学习,如何进行调节
-
GD、BGD(考虑全部样本)、SGD(考虑一个样本)、MBGD(mini-batch)
- 引入了随机性和噪声
- batchsize调整到128或者256比较稳定,
- 每一个batch是不存在联系的,如果某个batch存在噪声,那么在学习的时候,震荡就会比较大,模型收敛的稳定性,完全依赖于每一个batch的样本质量。
-
Monentum、NAG等
- 加入动量原则,具有加速梯度下降的作用
-
AdaGrad,RMSProp,Adam、AdaDelta
- 自适应学习率
-
torch.optim.Adam
- 从实验的结果上看,收敛速度是非常快的,收敛的效果非常好
-
1.4 卷积神经网络添加正则化
由于卷积神经网络的层数比较深,参数量也比较大,所以模型的复杂性会比较高,如果,不添加正则化的话,可以收敛性会有问题,由于参数量比较大,模型容易过拟合,所以在训练神经网络的时候,都会添加正则化
正则化是为了结构最小化
loss是为了风险最小化
- L1正则:参数绝对值的和,是对L0正则的逼近,实现稀疏化,有一个点不可导
- L2正则:参数的平方和(Pytorch自带,weight_decay),对L1正则的逼近,是一个二次曲线
- optimizer = torch.optim.SGD(model.parameters(), lr=0.01, weight_decay=0.001)