深度学习 面试总结

防止过拟合和欠拟合的方法

防止过拟合的方法:数据增强,正则化(也就是权重衰减),BN,降低模型复杂度,Dropout。
欠拟合:增加模型复杂度,减少正则化参数

RNN/LSTM总结

RNN/LSTM总结

还是蛮好记的~~

卷积的两大特性: 稀疏交互/局部连接(先局部后整体)、参数共享(减少参数、平移不变性)~~其实就是共享卷积核

相对于全连接,卷积只有卷积核大小的每一个局部的链接,所以是局部连接。

Dropout: 原理是集成学习(bagging),每个节点都有一定的概率被选择,N个节点相当于2**N个模型的集成。共享大部分参数,小部分参数不同。 ~~~~作用是增强泛化能力,防止过拟合(减弱全体神经元的关联性)。

BN:原理就是在每层神经网络的输入之前归一化,每一个batch的同一个channel归一化。作用是:增强网络的泛化能力,防止过拟合,加快训练和收敛的速度。

防止过拟合的方法:数据增强,正则化(也就是权重衰减),BN,降低模型复杂度,Dropout。

Inception

1、inceptionv1:引入稀疏特性和将全连接层转换成稀疏连接
v1版本使用了不同大小的卷积核,不同大小的感受野拼接意味着不同尺度特征的融合。增加网络宽度的好处,来源于不同尺度的卷积核并联,从而实现了对multi-scale特征的利用。卷积核大小采用1、3和5,主要是为了方便对齐。设定卷积步长stride=1之后,只要分别设定pad=0、1、2,那么卷积之后便可以得到相同维度的特征,然后这些特征就可以直接拼接在一起了。但是带来了一个问题,计算成本大大增加,不仅仅5x5就卷积计算成本高,concatenate会增加每层feature map的数量,因此提出了1x1卷积(NIN)用来降维。googlenet就用了inception v1的结构,还用到了auxiliary loss,防止梯度消失。

2、v2版本将v1中的**55卷积替换成了两个33,可以减少参数。更进一步,将33卷积替换成了31和1*3卷积,**可以更进一步减少参数。任意nxn的卷积都可以通过1xn卷积后接nx1卷积来替代。

3、Inception-v3比Inception-v2增加了几种处理:(1)RMSProp优化器;(2)使用了LabelSmoothing;(3)77卷积变成了17和7*1的卷积核叠加;(4)辅助分类器使用了 BatchNorm。 同时输入图像大小变成299*299。

4、v4结合resnet,引入Residual Block能显著加快训练速度

在这里插入图片描述
inceptionv2:
55可以换成两个33–
在这里插入图片描述

靠后面的33和55可以转换为13+31/15+51
在这里插入图片描述

Inceptionv4:
加入short-cut的思想,最简单看模块A:
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

ResNext 与 Resnet
Resnet就不用说了,残差连接。
ResNext是对残差块结构的一个小改进。对瓶颈结构缩小了瓶颈比,并将中间的普通卷积改成分组卷积。可以在不提高参数量的前提下,提高准确率,同时减小了超参数的数量。

下面是Resnet的残差块,相比,ResNext就是针对右边的残差块,第一个通道输出增大为128,然后分组卷积(33),再11输出。
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

BN的作用–BN针对的是送入下一层网络的输入X

1、加快网络的训练和收敛的速度(如果每一层的分布都不同,每次迭代都要拟合不同的数据分布,必然不利于收敛),增强泛化能力 — 如果训练集和测试机的分布不同,泛化能力就降低了。通过批量归一化可以避免。
2、控制梯度爆炸, 防止梯度消失(在sigmoid激活函数里,参数越大,梯度越接近于0.)
在这里插入图片描述

3、防止过拟合
确保网络中的各层即使参数发生了变化,输入和输出的数据分布也不会发生较大变化,从而避免内部协变量偏移现象。训练更加稳定,对初始值不再那么敏感,有利于使用较大的学习率来加速收敛。

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
一般把BN放在激活层之前,可以避免BN破坏非线性激活的分布,使得数据点不会落在非线性激活的饱和区域,比如SIGMOID,所以避免了梯度消失。

什么是全局平均池化,作用

目的:替代全连接层
效果:减少参数数量,减少计算量,减少过拟合。~~全连接层参数量相对多得多,全剧平均池化参数为0,只有计算量。
举例:下图是四分类,全连接层得到四个神经元;而全局平均池化是得到四个特征图,对整个特征图进行求平均,再送入softmax层得到输出。
意义:对整个网络从结构上做正则化防止过拟合,剔除了全连接层黑箱子操作的特征,直接赋予了每个channel实际的类别意义
在这里插入图片描述

SPP空间金字塔池化

分成1个格子、四个格子、16个格子,再分别对格子进行池化。
在这里插入图片描述
(1)直接对整个区域池化,每层得到一个点,共256个点,构成一个1x256的向量

(2)将区域划分成2x2的格子,每个格子池化,得到一个1x256的向量,共2x2=4个格子,最终得到4个1x256的向量

(3)将区域划分成4x4的格子,每个格子池化,得到一个1x256的向量,共4x4=16个格子,最终得到16个1x256的向量

将三种划分方式池化得到的结果进行拼接,得到(1+4+16)256=21256的特征。

SE

SE-layer 注意力模块,如下图所示,SE-layer(Squeeze-Excitation)
首先对卷积得到的特征图进行 Squeeze 操作(Global pooling:由hwc2 ===> 11c2),得到 channel 级的全局特征,然后对全局特征进行 Excitation 操作,学习各个 channel 间的关系,也得到不同channel 的权重,最后乘以原来的特征图得到最终特征。本质上,SE 模块是在channel 维度上做 attention 或者 gating 操作,这种注意力机制让模型可以更加关注信息量最大的 channel 特征,而抑制那些不重要的 channel 特征。
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

class SELayer(nn.Module):
    def __init__(self, channel, reduction=16):
        super(SELayer, self).__init__()
        self.avg_pool = nn.AdaptiveAvgPool2d(1)
        self.fc = nn.Sequential(
            nn.Linear(channel, channel // reduction, bias=False),
            nn.ReLU(inplace=True),
            nn.Linear(channel // reduction, channel, bias=False),
            nn.Sigmoid()
        )

    def forward(self, x):
        b, c, _, _ = x.size()
        y = self.avg_pool(x).view(b, c)
        y = self.fc(y).view(b, c, 1, 1) # 因为每个像素都乘以这个y,所以等同于HW内每个都相同,直接expand_as
        return x * y.expand_as(x)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值