作者 | 求求你们别学了 编辑 | 汽车人
原文链接:https://zhuanlan.zhihu.com/p/642370818
点击下方卡片,关注“自动驾驶之心”公众号
ADAS巨卷干货,即可获取
点击进入→自动驾驶之心【求职交流】技术交流群
本文只做学术分享,如有侵权,联系删文
1资料:
李沐大神动手学深度学习:https://www.bilibili.com/video/BV1if4y147hS/?vd_source=8ed772220b41b8f6cd35f3f86fbccdf3
深度学习500问:https://github.com/scutan90/DeepLearning-500-questions
最全面的深度学习笔记:https://github.com/AccumulateMore/CV
2重要知识点:
1、为什么需要BN?
避免梯度消失的过程。在神经网络训练的时候,随着网络层数的加深,激活函数的输入值的整体分布,逐渐向激活函数的上下限靠近,导致在反向传播时,基层的梯度消失。BN通过规范化的手段,将越来越偏的分布拉到标准化的输入,可以使梯度变大,加快收敛的速度。)。
BN可以用在全连接层、卷积层 ,但是作用的维度不一样。全连接层作用在特征维度上,二维输入样本*特征。但是对于卷积层来说,每个像素可以看做一个样本,B,W,H,C。样本数可以看做B*W*H(与全连接层对应),只在通道维进行norm 。
2、为什么resnet效果会好?
降低了网络在加深时的优化难度;缓解了BP反向传播时的梯度消失问题;实现了前馈过程中的低层特征的复用。网络加深效果不一定好,激活函数会损失信息,层数加多并不能学习到一个恒等映射,更复杂的模型区域更大,可能学偏,反而更远。而如果下一层包含上一层的,可以保证加深层数效果不会变得更差。ResNet的初衷,就是让网络拥有这种恒等映射的能力,能够在加深网络的时候,至少能保证深层网络的表现至少和浅层网络持平。
3、如何解决过拟合?
正则化 2. Early Stopping 3. Dropout 4. 数据增强 5.减小模型复杂度
1)重新清洗数据,导致过拟合的一个原因也有可能是数据不纯导致的,如果出现了过拟合就需要我们重新清洗数据。
2)增大数据的训练量,还有一个原因就是我们用于训练的数据量太小导致的,训练数据占总数据的比例过小。
3)采用正则化方法。正则化方法包括L0正则、L1正则和L2正则,而正则一般是在目标函数之后加上对于的范数。但是在机器学习中一般使用L2正则,下面看具体的原因。
L0范数是指向量中非0的元素的个数。L1范数是指向量中各个元素绝对值之和,也叫“稀疏规则算子”(Lasso regularization)。两者都可以实现稀疏性,既然L0可以实现稀疏,为什么不用L0,而要用L1呢?个人理解一是因为L0范数很难优化求解(NP难问题),二是L1范数是L0范数的最优凸近似,而且它比L0范数要容易优化求解。所以大家才把目光和万千宠爱转于L1范数。
L2范数是指向量各元素的平方和然后求平方根。可以使得W的每个元素都很小,都接近于0,但与L1范数不同,它不会让它等于0,而是接近于0。L2正则项起到使得参数w变小加剧的效果,但是为什么可以防止过拟合呢?一个通俗的理解便是:更小的参数值w意味着模型的复杂度更低,对训练数据的拟合刚刚好(奥卡姆剃刀),不会过分拟合训练数据,从而使得不会过拟合,以提高模型的泛化能力。还有就是看到有人说L2范数有助于处理 condition number不好的情况下矩阵求逆很困难的问题(具体这儿我也不是太理解)。
4)采用dropout方法。这个方法在神经网络里面很常用。dropout方法是ImageNet中提出的一种方法,通俗一点讲就是dropout方法在训练的时候让神经元以一定的概率不工作。
4、如何解决欠拟合
1)添加其他特征项,有时候我们模型出现欠拟合的时候是因为特征项不够导致的,可以添加其他特征项来很好地解决。
2)减少正则化参数,正则化的目的是用来防止过拟合的,但是现在模型出现了欠拟合,则需要减少正则化参数。
增加模型复杂度。
5、如何解决样本不平衡?
1、重采样。2、 focal loss 3、数据增强
6、什么是转置卷积(反卷积)?
在语义分割中,如果一直用卷积缩小图片,无法做到像素级别的输出(输出和输入都是同一个大小维度)。因此需要转置卷积。卷积:框(输入)和框(核)点乘,获得一个k*k的框。(矩阵点乘矩阵) 转置卷积:框(输入)和核的一个像素点相乘,获得一个k*k的框。(矩阵乘元素)
上采样的过程中,可以选择转置卷积和线性插值。转置卷积可以学到更多。线性插值可以用来初始化转置卷积的核。转置卷积又称为反卷积 (Deconvolution) 和部分跨越卷积 (Fractionally strided Convolution),用于对图像进行上采样。转置卷积不是还原卷积,是把形状还原,但里面的值都不同。用来获得像素级别的输出。
7、正则化为什么能降低过拟合?
正则化之所以能够降低过拟合的原因在于,正则化是结构风险最小化的一种策略实现。
给loss function加上正则化项,能使得新得到的优化目标函数h = f+normal,需要在f和normal中做一个权衡(trade-off),如果还像原来只优化f的情况下,那可能得到一组解比较复杂(一组很复杂的权重w使f最小,如果加上正则化,增加的|w|就很大,增加loss),但是这样会使得正则项normal比较大,那么h就不是最优的,因此可以看出加正则项能让解更加简单,符合奥卡姆剃刀理论,同时也比较符合在偏差和方差(方差表示模型的复杂度)分析中,通过降低模型复杂度,得到更小的泛化误差,降低过拟合程度。
8、L1正则化和L2正则化的区别?
L1正则化就是在loss function后边所加正则项为L1范数,加上L1范数容易得到稀疏解(0比较多)。L2正则化就是loss function后边所加正则项为L2范数的平方,加上L2正则相比于L1正则来说,得到的解比较平滑(不是稀疏),但是同样能够保证解中接近于0(但不是等于0,所以相对平滑)的维度比较多,降低模型的复杂度。
L1使权重稀疏,L2使权重平滑。L1优点是能够获得sparse模型,对于large-scale的问题来说这一点很重要,因为可以减少存储空间;AL2优点是实现简单,能够起到正则化的作用。缺点就是L1的优点:无法获得sparse模型。
9、为什么L1正则化更容易获得稀疏解?
从上边图中我们可以看出:
如果不加L1和L2正则化的时候,对于线性回归这种目标函数凸函数的话,我们最终的结果就是最里边的紫色的小圈圈等高线上的点。
当加入L1正则化的时候,我们先画出 w1 +w2=F的图像,也就是一个菱形,代表这些曲线上的点算出来的1范数w1+w2 都为F。那我们现在的目标是不仅 是原曲线算得值要小(越来越接近中心的紫色圈圈),还要使得这个菱形越小越好(F越小越好)。那么还和原来样的话,过中心紫色圈圈的那个菱形明显很大,因此我们要取到一个恰好的值。
我们经过观察可以看到,几乎对于很多原函数等高曲线,和某个菱形相交的时候及其容易相交在坐标轴(比如上图),也就是说最终的结果,解的某些维度及其容易是0,比如上图最终解是 w = (0,x) ,这也就是我们所说的L1更容易得到稀疏解 (解向量中0比较多) 的原因。
10、为什么参数越小代表模型越简单?
越是复杂的模型,越是尝试对所有样本进行拟合,包括异常点。这就会造成在较小的区间中产生较大的波动,这个较大的波动也会反映在这个区间的导数比较大。
只有越大的参数才可能产生较大的导数。因此参数越小,模型就越简单。
11、实现参数的稀疏有什么好处?
因为参数的稀疏,在一定程度上实现了特征的选择。一般而言,大部分特征对模型是没有贡献的。这些没有用的特征虽然可以减少训练集上的误差,但是对测试集的样本,反而会产生干扰。稀疏参数的引入,可以将那些无用的特征的权重置为0.
12、L1范数和L2范数为什么可以避免过拟合?
加入正则化项就是在原来目标函数的基础上加入了约束。当目标函数的等高线和L1,L2范数函数第一次相交时,得到最优解。
L1范数:L1范数符合拉普拉斯分布,是不完全可微的。表现在图像上会有很多角出现。这些角和目标函数的接触机会远大于其他部分。就会造成最优值出现在坐标轴上,因此就会导致某一维的权重为0 ,产生稀疏权重矩阵,进而防止过拟合。
L2范数:L2范数符合高斯分布,是完全可微的。和L1相比,图像上的棱角被圆滑了很多。一般最优值不会在坐标轴上出现。在最小化正则项时,可以是参数不断趋向于0.最后活的很小的参数。
13、为什么会出现梯度爆炸和梯度消失?
梯度爆炸和梯度消失是深度学习模型训练中常见的两种问题,主要发生在训练深度神经网络时,特别是在训练深度循环神经网络(RNN)时。由于链式法则
梯度爆炸:在深度神经网络中,如果每一层的权重都较大,那么在反向传播过程中,梯度会随着层数的增加而指数级增大,这就是梯度爆炸。梯度爆炸会导致模型权重更新过大,使得模型无法收敛,甚至可能导致数值溢出。
梯度消失:相反,如果每一层的权重都较小,那么在反向传播过程中,梯度会随着层数的增加而指数级减小,这就是梯度消失。梯度消失会导致模型权重更新过小,使得模型学习速度变慢,甚至无法学习。
这两种问题都与深度神经网络的深度和权重初始化有关,也与激活函数的选择有关。
14、怎么解决梯度爆炸和梯度消失
梯度裁剪(Gradient Clipping):这是一种常用的防止梯度爆炸的技术,它通过设置一个阈值,当梯度的模大于这个阈值时,将梯度缩放到这个阈值,从而防止梯度过大。
权重初始化:合适的权重初始化可以在一定程度上缓解梯度消失和梯度爆炸问题。例如,Xavier初始化和He初始化就是两种常用的权重初始化方法。
使用ReLU及其变种:ReLU激活函数及其变种(如Leaky ReLU、PReLU等)可以在一定程度上缓解梯度消失问题,因为它们在正数区间的梯度为常数。
批量归一化(Batch Normalization):批量归一化可以使得每一层的输入都有相同的分布,从而缓解梯度消失和梯度爆炸问题。
残差连接restnet(Residual Connection):在深度神经网络中添加残差连接可以使得梯度直接通过残差连接反向传播,从而缓解梯度消失问题。
使用门控循环单元(GRU)或长短期记忆(LSTM):这两种类型的循环神经网络都设计了门机制,可以有效地缓解循环神经网络中的梯度消失问题。
15、手写sigmoid函数,其与softmax的区别,与逻辑回归的关系?
Sigmoid函数与Softmax函数的区别
Sigmoid函数和Softmax函数都可以用于二分类问题,但是Softmax函数更常用于多分类问题。
Sigmoid函数将输入映射到0到1之间,可以理解为输出是属于某一类的概率。
Softmax函数将一组输入向量转换为一组(在0,1)范围内的输出向量,且输出向量的总和为1,可以理解为一组概率分布。
Sigmoid函数与逻辑回归的关系
逻辑回归是一种常用的分类算法,其核心思想是利用Sigmoid函数将线性回归的输出映射到(0,1)区间,从而得到一个概率值,用于二分类问题。所以,Sigmoid函数是逻辑回归的一个重要组成部分。或者说,二者等同。
3小笔记:
lr太大的时候,可能会出现nan
平方损失和绝对差值,差别不大。但绝对差值原点不可导
loss为什么要求平均,防止下降太大。给学习率除也是等效的
X[mask]没有mask*X好,GPU和CPU都是。矩阵乘法很快
cudnn是用来并行加速的,但是会有随机性。(大数吃小数?每次结果可能不一样)
网络结构不一定有那么重要,要看数据预处理,以及数据质量
NAS让超参数也训练
3*3卷积最快了,5*5可以用两个3*3代替
多层卷积可以看做是图像的多层纹理的特征
数据是很贵的,数据非常贵。nas是有钱人的游戏
net.eval() 评估模式,开启后不会算梯度
Relu 计算简单、sigmoid容易出现梯度消失
梯度爆炸一般不是由激活函数导致的(导数一般不会大于1),由每个层输出值很大
权重衰退,一般取e-3 (-2,-3,-4),效果一般(对全连接和卷积层都可以用 )
dropout ,更有效更适用。(在全连接层用,不在卷积层用)
出现nan(梯度爆炸),inf(除0)时,建议把学习率调小
梯度归一化与batch normalization不相同
resnet能缓解数值稳定性问题
孪生网络(图片和文本),两个输入时加入权重
GPU是硬件,cuda是开发的SDK。类似CPU和C++的区别
MLP即为几个全连接层,也就是线性层nn.linear
卷积层是特殊的全连接层。平移不变性、局部性。数字信号处理里面有
卷积层的权重(核参数)是自己学习得来的。
损失图像抖动很厉害,数据随机性太大,学习率太大。
卷积3*3比5*5快,简单,能构建比较大的模型
卷积最重要的超参数,通道数,需要认真设置
1*1卷积层可以融合不同通道的信息,很受欢迎。等于1*1的全连接
高宽不变时一般不改变通道数,高宽减小一半一般增加一倍通道数
每个通道去学习不一样的模式,之间是不共享参数的
池化层目的:解决卷积层的位置敏感性,使具有一定的平移不变性(用得少)
时序、文本多用一维卷积
CNN explainer 可以看每个通道学到了什么东西。增加直观理解
imageNet数据集很常用
批量归一化 BN:固定每一层的均值和方差并学习出适合的偏移和缩放。作用在激活函数的前面或者全连接层卷积层的输入上。可以加快收敛速度(学习率可加大),一般不改变模型精度。
resnet34/50/152(yyds),可以训练很深的网络,现在所有网络或多或少都会使用
增加数据比调参更有用,调参容易过拟合
batch小,lr学习率就不能太大,之间有关联
数据增强方法:背景噪音、改变图片的颜色形状亮度色温(随机增强)、翻转切割变色
(torchvision库中有图片的增广代码)。防止过拟合,甚至可以使测试精度更高。mix-up增广
num_work根据GPU的性能设定
微调:迁移学习,在深度学习中最重要的技术。尽量从微调开始,而不是随机初始化参数迁移学习的参数在网上可以下载,有训练好了的。imagenet是常用的预训练模型。微调对学习率不敏感,可以填小一点。
图片分类的预训练模型可以用在目标检测中,都是抽特征
转置卷积:增大输入的高宽。与卷积相反。也称做反卷积。(与线性插值相比),用于语义分割。把图片变大(上采样)
样式迁移:将样式图片中的样式迁移到内容图片上,得到合成图片。(滤镜)
卷积核通道数 = 输入特征图的通道数
输出特征图的通道数 = 卷积核的个数
文末福利!
欢迎大家加入【自动驾驶之薪】知识星球!自动驾驶之薪依托于公众号自动驾驶之心,是一个主打求职的交流平台,主要面向自动驾驶、AI与CV算法、工程落地相关岗位的求职者。内部会分享一些校招、社招、实习面试攻略、面试题和面经,找工作需要的学习资料也是非常丰富,并通过我们与各大自动驾驶公司的合作获得内推机会,还有简历制作经验、答疑等。
星球涉及的求职大方向包括:自动驾驶感知/定位/融合/仿真、通用深度学习,计算机视觉,SLAM,移动机器人,产品经理,大数据分析,C/C++开发等。
① 全网独家视频课程
BEV感知、毫米波雷达视觉融合、多传感器标定、多传感器融合、多模态3D目标检测、点云3D目标检测、目标跟踪、Occupancy、cuda与TensorRT模型部署、协同感知、语义分割、自动驾驶仿真、传感器部署、决策规划、轨迹预测等多个方向学习视频(扫码学习)
视频官网:www.zdjszx.com② 国内首个自动驾驶学习社区
近2000人的交流社区,涉及30+自动驾驶技术栈学习路线,想要了解更多自动驾驶感知(2D检测、分割、2D/3D车道线、BEV感知、3D目标检测、Occupancy、多传感器融合、多传感器标定、目标跟踪、光流估计)、自动驾驶定位建图(SLAM、高精地图、局部在线地图)、自动驾驶规划控制/轨迹预测等领域技术方案、AI模型部署落地实战、行业动态、岗位发布,欢迎扫描下方二维码,加入自动驾驶之心知识星球,这是一个真正有干货的地方,与领域大佬交流入门、学习、工作、跳槽上的各类难题,日常分享论文+代码+视频,期待交流!
③【自动驾驶之心】技术交流群
自动驾驶之心是首个自动驾驶开发者社区,聚焦目标检测、语义分割、全景分割、实例分割、关键点检测、车道线、目标跟踪、3D目标检测、BEV感知、多模态感知、Occupancy、多传感器融合、transformer、大模型、点云处理、端到端自动驾驶、SLAM、光流估计、深度估计、轨迹预测、高精地图、NeRF、规划控制、模型部署落地、自动驾驶仿真测试、产品经理、硬件配置、AI求职交流等方向。扫码添加汽车人助理微信邀请入群,备注:学校/公司+方向+昵称(快速入群方式)