点击上方 “小白学视觉 ”,选择加" 星标 "或“ 置顶 ”
重磅干货,第一时间送达
作者:
陈恩加
https://zhuanlan.zhihu.com/p/48374690
本文已由作者
授权转载,禁二次转载
【导读】实习加秋招忙的要死,今年算法又难找真是让人透心凉。贴一些自己平时整理的知识点,有点凌乱,以后有新的会接着补充。部分截图或文字也许来自平时看过他人博客过后的总结,侵删。
1、dropout的原理:
可以把dropout看成是 一种ensemble方法,每次做完dropout相当于从原网络中找到一个更瘦的网络
强迫神经元和其他随机挑选出来的神经元共同工作,减弱了神经元节点间的联合适应性,增强泛化能力
使用dropout得到更多的局部簇,同等数据下,簇变多了,因而区分性变大,稀疏性也更大
2、维数灾难:
高维空间训练得到的分类器相当于低维空间的一个复杂非线性分类器,这类分类器容易产生过拟合
如果一直增加维度,原有的数据样本会越来越稀疏,要避免过拟合就需要不断增加样本
数据的稀疏性使得数据的分布在空间上是不同的,在高维空间的中心比边缘区域具有更大的稀疏性(举例,正方体和内切圆到超立方体和超球面,随着维度趋于无穷,超球面体积趋向于0而超立方体体积永远是1)
3、伪标签技术:
将test数据集中的数据加入到train数据集中,其对应的标签为基于原有数据集训练好的模型预测得到的
伪标签技术在一定程度上起到一种正则化的作用。如果训练开始就直接使用该技术,则网络可能会有过拟合风险,但是如果经过几轮训练迭代后(只是用原有训练集数据)将训练集和未打标签的数据一起进行训练,则会提升网络的泛化能力
操作过程中一般每个batch中的1/4到1/3的数据为伪标签数据
4、为什么SSD对小目标检测效果不好:
5、Xception,ResNext和ShuffleNet:
ResNext中,作者提到cardinality的概念,表示对通道进行分组
Xception中,卷积对每一个通道进行单独计算,也就是cardinality等于通道数,如果有N维通道输出,那么Cardinality就等于N(depth-wise separable convolution)
group convolution的优点:卷积操作把所有的通道信息考虑在内,可能是一种信息浪费,卷积参数有限,产生的结构难免会有一定相关性,有可能造成过拟合(类似于全连接层)
ShuffleNet就对group conv后的通道进行交换,得到更加均匀融合后的通道
6、绘制ROC的标准和快速方法以及ROC对比PR曲线的优势:
标准方法:横坐标为FPR, 纵坐标为TPR, 设置一个区分正负预测结果的阈值并进行动态调整,从最高得分(实际上是正无穷)开始逐渐下降,描出每个阈值对应的点最后连接
快速方法:根据样本标签统计出正负样本数,将坐标轴根据样本数进行单位分割,根据模型预测结果将样本进行排序后,从高到低遍历样本,每遇到一个正样本就沿纵轴方向绘制一个单位长度的曲线,反之则沿横轴,直到遍历完成
PR曲线的横坐标是Recall,纵坐标是Precision,相对于PR曲线来说,当正负样本发生剧烈变化时,ROC曲线的形状能够基本保持不变,而PR曲线的形状会发生剧烈改变
7、核函数
K(x1, x2) = φ(x1)'φ(x2)
8、L0、L1和L2范数:
L0范数:很难优化求解(NP难问题)
L1范数:是L0的最优凸近似(L1是L0的最紧的凸放松),且具有特征自动选择和使得模型更具解释性的优点
L2范数:使得权重接近于0但是不等于0,有利于处理条件数不好情况下矩阵求逆问题(条件数用来衡量病态问题的可信度,也就是当输入发生微小变化的时候,输出会发生多大变化,即系统对微小变动的敏感度,条件数小的就是well-conditioned的,大的就是ill-conditioned的),对于线性回归来说,如果加上L2规则项,原有对XTX(转置)求逆就变为可能,而目标函数收敛速率的上界实际上是和矩阵XTX的条件数有关,XTX的 condition number 越小,上界就越小,也就是收敛速度会越快;另外从优化的角度来看,加入规则项实际上是将目标函数变成λ强凸,这样可以保证函数在任意一点都存在一个非常漂亮的二次函数下界,从而能通过梯度更快找到近似解。总结就是:L2范数不但可以防止过拟合,还可以让我们的优化求解变得稳定和快速。
9、逆卷积(或者叫转置卷积)的实质:
10、空洞卷积及其优点:
11、Fast RCNN中位置损失为何使用Smooth L1:
12、Batch Normalization:
使用BN的原因是网络训练中每一层不断改变的参数会导致后续每一层输入的分布发生变化,而学习的过程又要使每一层去适应输入的分布,因此不得不降低网络的学习率,并且要小心得初始化(internal covariant shift)
如果仅通过归一化方法使得数据具有零均值和单位方差,则会降低层的表达能力(如使用Sigmoid函数时,只使用线性区域)
BN的具体过程(注意第三个公式中分母要加上epsilon)
注意点:在测试过程中使用的均值和方差已经不是某一个batch的了,而是针对整个数据集而言。因此,在训练过程中除了正常的前向传播和反向求导之外,我们还要记录每一个Batch的均值和方差,以便训练完成之后按照下式计算整体的均值和方差
另一个注意点:在arxiv六月份的preprint论文中,有一篇叫做“How Does Batch Normalization Help Optimization?”的文章,里面提到BN起作用的真正原因和改变输入的分布从而产生稳定性几乎没有什么关系,真正的原因是BN使对应优化问题的landscape变得更加平稳,这就保证了更加predictive的梯度以及可以使用更加大的学习率从而使网络更快收敛,而且不止BN可以产生这种影响,许多正则化技巧都有这种类似影响
13、Dual Path Network:
ResNet结构通过跨层参数共享和保留中间特征的方式,有效较低特征冗余度,重复利用已有特征,但难以利用高层信息再发掘低层特征
DenseNet每一层都重新在之前所有层的输出中重新提取有用信息,可以有效利用高层信息再次发掘底层新特征,但存在特征冗余
DPN网络可以理解为在ResNeXt的基础上引入了DenseNet的核心内容,使得模型对特征的利用更加充分
14、超参数搜索方法:
网格搜索:在所有候选的参数选择中,通过循环遍历,尝试每一种可能性,表现最好的参数就是最终的结果
贝叶斯优化:贝叶斯优化其实就是在函数方程不知的情况下根据已有的采样点预估函数最大值的一个算法。该算法假设函数符合高斯过程(GP)
随机搜索:已经发现,简单地对参数设置进行固定次数的随机搜索,比在穷举搜索中的高维空间更有效。这是因为事实证明,一些超参数不通过特征变换的方式把低维空间转换到高维空间,而在低维空间不可分的数据,到高维空间中线性可分的几率会高一些。具体方法:核函数,如:高斯核,多项式核等等。
基于梯度:计算相对于超参数的梯度,然后使用梯度下降优化超参数。
15、LR如何解决低维不可分问题:
16、Boosting和Bagging:
Boosting主要思想是将一族弱学习器提升为强学习器的方法,具体原理为:先从初始训练集训练出一个基学习器,再根据基学习器的表现对训练样本分布进行调整,来训练下一个基学习器,如此重复进行直至学习器数目达到了事先要求,最终进行学习器的加权结合
Bagging是并行式集成学习方法最著名的代表,具体做法是对样本进行有放回的采样,然后基于每个采样训练集得到一个基学习器,再将它们进行组合。在预测时,对于分类任务通常使用简单投票法,对回归任务使用简单平均法
17、梯度下降和牛顿法的区别:
18、DenseNet的要点:
由于前后层之间的Identity function,有效解决了梯度消失问题,并且强化了特征的重用和传播
相比ResNet输出通过相加的方式结合从而阻碍信息的传播,DN通过串联方式结合
串联要求特征图大小一致,故把pooling操作放在transition layer中
为防止靠后的串联层输入通道过多,引入bottleneck layer,即1x1卷积。文中把引入bottleneck layer的网络成为DenseNet-B
在transition layer中进一步压缩通道个数的网络成为DN-C(输入m个通道,则输出θm个通道,0
(以下网址是一些我觉得非常赞的文章,以目标检测为主)
19、关于Faster RCNN一篇非常精彩的博文解说
,来自troy labs团队:
20、关于one-shot目标检测原理
一篇非常精彩的综述博文(不过文章真的很长很长...................)
21、关于目标检测的几篇博文
(来自Medium一位我很喜欢的大叔,名字叫
Jonathan Hui,目测应该是华人,目前有1.6k的followers)
Region based类型:
medium.com/@jonathan_hu
one-shot类型:
medium.com/@jonathan_hu
YOLO各个版本:
medium.com/@jonathan_hu
22、关于YOLO的一份PPT
,解说非常生动形象(不过是针对v1老版本的)
docs.google.com/present
23、常见激活函数特点
sigmoid:输入值很大时对应的函数值接近1或0,处于函数的饱和区,导致梯度几乎为0,造成梯度消失问题
Relu:解决梯度消失问题,但是会出现dying relu现象,即训练过程中,有些神经元实际上已经"死亡“而不再输出任何数值
Leaky Relu:f = max(αx, x),解决dying relu问题,α的取值较大时比较小时的效果更好。它有一个衍生函数,parametric Leaky Relu,在该函数中α是需要去学习的
ELU:避免dying神经元,并且处处连续,从而加速SGD,但是计算比较复杂
激活函数的选择顺序:ELU>Leaky Relu及其变体>Relu>tanh>sigmoid
24、Softmax交叉熵损失
使用交叉熵损失的原因是它求导结果简单,易于计算,最后结果中Softmax损失函数对应于每一项概率的偏导即为通过Softmax计算出的概率向量中对应真正结果的那一维减1。比如通过若干层计算,最后得到某个训练样本对应的分类得分为[1, 5, 3],那么通过Softmax计算得到概率分别为[0.015, 0.886, 0.117],假设样本正确的分类为第二类,则对应每项的偏导为[0.015, 0.886-1, 0.117],根据这个向量就可以进行反向传播了
25、mean pooling和max pooling的反向传播
主要原则是需要保证传递的loss(或者梯度)总和不变。
mean pooling的前向传播就是把一个patch中的值求取平均来做pooling,那么反向传播的过程也就是把某个元素的梯度等分为n份分配给前一层,这样就保证池化前后的梯度(残差)之和保持不变
max pooling的前向传播是把patch中最大的值传递给后一层,而其他像素的值直接被舍弃掉。那么反向传播也就是把梯度直接传给前一层某一个像素,而其他像素不接受梯度,也就是为0。max pooling操作和mean pooling操作不同点在于需要记录下池化操作时到底哪个像素的值是最大,也就是max id,这个变量就是记录最大值所在位置的,因为在反向传播中要用到
26、如何理解卷积、池化等、全连接层等操作: