写在前面:CV算法工程师面试时,除了考察项目经验和技术深度,基础知识点的提问也必不可少。这部分如果答不上来,面试印象会大打折扣,因此建议着重记忆。另外的【附加实战经验】部分为个人调参经验,供参考~
1. 什么是过拟合和欠拟合?
过拟合:模型在训练集表现好,测试集表现不好。一般是因为模型太大,或训练数据太少。
欠拟合:模型在训练集和测试集的表现都不好。一般是因为模型太小。
2. 抑制过拟合的方法
常见标准答案:
(1) L1/L2正则化。
(2) 数据增强:平移、旋转、翻转、随机裁剪等。
(3) Dropout:训练时神经元以概率p置0(推理时的计算方式:输入乘以1-p)。
(4) Early stopping:早停法,当模型在验证集上的表现下降的时候,停止训练。
附加实战经验:
(1) BatchNorm层冻结,否则小模型容易过拟合。
(2) 小batch size先训练。
(3) 减少可训练层的数目。
3. L1/L2正则化权重衰减
L1正则化: loss计算时加一项,参数的L1范数,各元素的绝对值之和。得到的参数会更加稀疏。
L2正则化: loss计算时加一项,参数的L2范数,各元素的平方和。使网络权重倾向于选择更小的值,这样不同特征对结果的影响相对均衡,不会受一些噪点影响,提升了泛化性。
附加实战经验:
(1) ResNet50衰减系数一般1e-4,移动端小网络如MobileNet一般1e-5。
(2) L2系数太大抑制过拟合,但可能会欠拟合,尤其对于小网络参数量不足的情况。
(3) 数据集小时,网络容易过拟合,这时L2系数可以适当调大。
4. 类别不均衡解决方法
(1) 重采样: 样本量少的类别使用重采样,样本量多的类别使用欠采样。
(2) 重加权:算loss时,样本量少的类别,loss权重大一些。
(3) 损失函数:使用focal loss,在交叉熵loss的基础上增加动态调整因子,把易分样本的loss拉低,使网络更加关注难样本的分类
(4) 数据合成: 使用AIGC合成样本,或者数据挖掘方法(爬虫获取无标签数据,使用训练好的模型预测得到伪标签)。
5. BatchNorm层
一种正则化技术,用来抑制过拟合。
训练时:假设输入tensor形状为[N, C, H, W],则
(1) 在一个Channel内,对NHW做平均,得到均值维度[1, C, 1, 1],同理计算方差;
(2) 输入tensor减均值,除以方差(加sigma防止除0);
(3) 乘以可学习参数alpha加beta还原。
推理时:用训练过程中保存下来的滑动均值和滑动方差。
6. pool层
(1) 最大池化:正向:邻域取最大值作为输出,反向:最大位置是回传梯度,其它位置为0。
(2) 平均池化:正向:邻域算平均值作为输出,反向:均匀回传给输入位置。
7. 学习率策略
(1) 常用:piece wise分段式,常用方式;Cosine decay,无需调整超参,性能鲁棒,一般用这个收敛较为缓慢,轮数要多一些。
(2) 学习率和batch_size要按线性比例调整。
(3) 初始学习率一般跟数据集有关。
8. BN、LN、IN、GN的区别
假设输入tensor的形状为[N, C, H, W],对应batch_size,通道数,高度,宽度。
(1) BN 批归一化:计算均值和标准差时,在一个channel内,对HW和Batch做平均,均值维度[1, C, 1, 1]。CNN常用,batch size小的时候,效果可能不太好。
(2) LN 层归一化:计算均值和标准差时,在一个batch内,对HW和Channel做平均,均值维度[B, 1, 1, 1]。RNN或transformer用。
(3) IN 实例归一化: 算均值和标准差时,同时固定channel和batch,对HW做平均,均值维度[B, C, 1, 1]。图像风格迁移任务用,结果依赖于某一个实例。
(4) GN 组归一化:计算均值和标准差时,固定batch且对channel做分组,分组内对HW做平均,[B, C/g, 1, 1]。