计算机视觉面试宝典--深度学习机器学习基础篇(三)
作者:互联网
计算机视觉面试宝典–深度学习机器学习基础篇(三)
本篇主要包含数据类问题、正则化、激活函数与梯度以及回归等相关面试经验。
数据类问题
1.样本不平衡的处理方法
①欠采样 - 随机删除观测数量足够多的类,使得两个类别间的相对比例是显著的。虽然这种方法使用起来非常简单,但很有可能被我们删除了的数据包含着预测类的重要信息。
②过采样 - 对于不平衡的类别,我们使用拷贝现有样本的方法随机增加观测数量。理想情况下这种方法给了我们足够的样本数,但过采样可能导致过拟合训练数据。
③合成采样( SMOTE )-该技术要求我们用合成方法得到不平衡类别的观测,该技术与现有的使用最近邻分类方法很类似。问题在于当一个类别的观测数量极度稀少时该怎么做。比如说,我们想用图片分类问题确定一个稀有物种,但我们可能只有一幅这个稀有物种的图片。
④在loss方面,采用focal loss等loss进行控制不平衡样本。
不平衡类别会造成问题有两个主要原因:1.对于不平衡类别,我们不能得到实时的最优结果,因为模型/算法从来没有充分地考察隐含类。2.它对验证和测试样本的获取造成了一个问题,因为在一些类观测极少的情况下,很难在类中有代表性。
2.讲下数据增强有哪些方法
翻转,旋转,缩放,裁剪,平移,添加噪声,有监督裁剪,mixup,上下采样,增加不同惩罚
解决图像细节不足问题(增强特征提取骨干网络的表达能力)
3.过拟合的解决办法
数据扩充/数据增强/更换小网络/正则化/dropout/batch normalization
增加训练数据、减小模型复杂度、正则化,L1/L2正则化、集成学习、早期停止
什么是过拟合
过拟合(overfitting)是指在模型参数拟合过程中的问题,由于训练数据包含抽样误差,训练时,复杂的模型将抽样误差也考虑在内,将抽样误差也进行了很好的拟合。
产生过拟合根本原因:
观察值与真实值存在偏差, 训练数据不足,数据太少,导致无法描述问题的真实分布, 数据有噪声, 训练模型过度,导致模型非常复杂
什么是欠拟合:训练的模型在训练集上面的表现很差,在验证集上面的表现也很差
原因:训练的模型太简单,最通用的特征模型都没有学习到
正则化
正则化的原理:在损失函数上加上某些规则(限制),缩小解空间,从而减少求出过拟合解的可能性。
机器学习中几乎都可以看到损失函数后面会添加一个额外项,常用的额外项一般有两种,一般英文称作 l1-norm 和l2-norm,中文称作 L1正则化 和 L2正则化,或者 L1范数 和 L2范数。
1. L0、L1、L2正则化
L0 范数:向量中非0元素的个数。
L1 范数 (Lasso Regularization):向量中各个元素绝对值的和。
L2 范数(Ridge Regression):向量中各元素平方和再求平方根。
2. L1、L2正则化区别,为什么稀疏的解好?
L1会趋向于产生少量的特征,而其他的特征都是0,而L2会选择更多的特征,这些特征都会接近于0。
实现参数的稀疏有什么好处吗?
一个好处是可以简化模型,避免过拟合。另一个好处是参数变少可以使整个模型获得更好的可解释性。
3.L1正则化和L2正则化的作用
L1正则化可以产生稀疏权值矩阵,即产生一个稀疏模型,可以用于特征选择。
L2正则化可以防止模型过拟合(overfitting);一定程度上,L1也可以防止过拟合。
4.正则化有哪几种,分别有什么作用?
L0 范数和 L1 范数都能够达到使参数稀疏的目的,但 L0 范数更难优化求解,L1 范数是 L0 范数的最优凸近似,而且它比 L0 范数要容易优化求解。
L2 范数不但可以防止过拟合,提高模型的泛化能力,还可以让我们的优化求解变得稳定和快速。L2 范数对大数和 outlier 更敏感。
L1、L2范数,L1趋向于0,但L2不会,为什么?
L1范数更容易产生稀疏的权重,L2范数更容易产生分散的权重
激活函数与梯度
在多层神经网络中,上层节点的输出和下层节点的输入之间具有一个函数关系,这个函数称为激活函数(又称激励函数)。
1.激活函数的意义如下:
①模拟生物神经元特性,接受输入后通过一个阈值模拟神经元的激活和兴奋并产生输出; ②为神经网络引入非线性,增强神经网络的表达能力;③导出神经网络最后的结果(在输出层时)。
常用的激活函数?sigmoid,tanh,ReLU, leaky ReLU, PReLU, ELU,random ReLU等。
①sigmoid
我们通常就用其中最常用的logistic函数来代指sigmoid函数:
f
(
x
)
=
1
1
+
e
−
x
f(x)=\frac{1}{1+e^{-x}}
f(x)=1+e−x1
sigmoid函数和阶跃函数非常相似,但是解决了光滑和连续的问题,同时它还成功引入了非线性。由于其值域处在0~1,所以往往被用到二分类任务的输出层做概率预测。
当输入值大于3或者小于-3时,梯度就非常接近0了,在深层网络中,这非常容易造成“梯度消失”(也就是反向传播时误差难以传递到前面一层)而使得网络很难训练。此外,sigmoid函数的均值是0.5,但是不符合我们对神经网络内数值期望为0的设想。
**特点:**它能够把输入的连续实值变换为0和1之间的输出,特别的,如果是非常大的负数,那么输出就是0;如果是非常大的正数,输出就是1.
**缺点:**缺点1:在深度神经网络中梯度反向传递时导致梯度爆炸和梯度消失,其中梯度爆炸发生的概率非常小,而梯度消失发生的概率比较大。缺点2:Sigmoid 的 output 不是0均值(即zero-centered)。缺点3:其解析式中含有幂运算,计算机求解时相对来讲比较耗时。
②tanh函数
f
(
x
)
=
tanh
(
x
)
=
2
1
+
e
−
2
x
−
1
=
2
sigmoid
(
2
x
)
−
1
tanh
x
=
e
x
−
e
−
x
e
x
+
e
−
x
f(x)=\tanh (x)=\frac{2}{1+e^{-2 x}}-1=2 \operatorname{sigmoid}(2 x)-1 \quad \tanh x=\frac{e^{x}-e^{-x}}{e^{x}+e^{-x}}
f(x)=tanh(x)=1+e−2x2−1=2sigmoid(2x)−1tanhx=ex+e−xex−e−x
这个tanh函数又被称作双曲正切函数,可以看出它的函数范围是(-1,1)而均值为0,解决了上面sigmoid的一个问题。但是不难发现,该函数依旧没有解决梯度消失的问题。
③Relu函数
ReLu函数又叫线性整流单元,应该说是当前最常用的一个激活函数了,尤其是在卷积神经网络和层次较深的神经网络中。
Relu
=
max
(
0
,
x
)
\text { Relu }=\max (0, x)
Relu =max(0,x)
ReLu将x=0处的光滑曲线替换为了折线,这使得它的计算也相对更加简单,而且有助于随机梯度下降算法收敛(有研究指出收敛加速可达6倍)。当然ReLu函数也能够缓解梯度消失的问题。
当然,ReLu还是有一些缺陷的,对于小于0的这部分值,梯度会迅速降为0而不再影响网络训练。这会造成部分神经元从来不被激活,也称作“死区”。这也给了ReLu函数的变种很多发挥空间。
优点:
1)解决了gradient vanishing问题 (在正区间)
2)计算速度非常快,只需要判断输入是否大于0
3)收敛速度远快于sigmoid和tanh
④Leaky ReLu
f
(
x
)
=
max
(
0.01
x
,
x
)
f
(
y
i
)
=
{
y
i
i
f
,
y
i
>
0
0.01
∗
y
i
if,
y
i
≤
0
f(x)=\max (0.01 x, x) \quad f\left(y_{i}\right)=\left\{\begin{array}{rlr} y_{i} & i f, & y_{i}>0 \\ 0.01 * y_{i} & \text { if, } & y_{i} \leq 0 \end{array}\right.
f(x)=max(0.01x,x)f(yi)={yi0.01∗yiif, if, yi>0yi≤0
将x<=0部分调整为f(x)=αx,其中α一般设为一个较小的正数如0.01或0.001。
这样就将小于0部分的梯度从零提高到α,给了这些被抑制部分一定参与网络训练的可能。
⑤PReLu
参数化ReLu(Parameterised ReLu,PReLu)的形式和Leaky ReLu一样,唯一地不同是它将α视作一个可训练的参数而不是人为设定的超参数。这样,就避免了Leaky ReLu中的选定α值的问题。
f
(
y
i
)
=
{
y
i
if,
y
i
>
0
a
i
∗
y
i
if,
y
i
≤
0
f\left(y_{i}\right)=\left\{\begin{array}{rll} y_{i} & \text { if, } & y_{i}>0 \\ a_{i} * y_{i} & \text { if, } & y_{i} \leq 0 \end{array}\right.
f(yi)={yiai∗yi if, if, yi>0yi≤0
⑥andomized Leaky ReLu
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9ehHakWy-1641781766472)(CV总复习–深度学习机器学习基础篇(三).assets/image-20210521102702029.png)]
⑦ELU
f
(
x
)
=
{
x
,
if
x
>
0
α
(
e
x
−
1
)
,
otherwise
f(x)=\left\{\begin{array}{ll} x, & \text { if } x>0 \\ \alpha\left(e^{x}-1\right), & \text { otherwise } \end{array}\right.
f(x)={x,α(ex−1), if x>0 otherwise
ELU也是为解决ReLU存在的问题而提出,显然,ELU有ReLU的基本所有优点,以及:不会有Deal ReLU问题;输出的均值接近0,zero-centered。
它的一个小问题在于计算量稍大。类似于Leaky ReLU,理论上虽然好于ReLU
2.写出Sigmoid、Sigmoid的导数
Sigmoid函数:
f
(
x
)
=
1
1
+
e
−
x
=
(
1
+
e
−
x
)
−
1
\mathrm{f}(\mathrm{x})=\frac{1}{1+e^{-x}}=\left(1+e^{-x}\right)^{-1}
f(x)=1+e−x1=(1+e−x)−1
导数:
f
(
x
)
′
=
f
(
x
)
⋅
[
1
−
f
(
x
)
]
f(x)^{\prime}=f(x) \cdot[1-f(x)]
f(x)′=f(x)⋅[1−f(x)]
3. sigmoid和relu的优缺点
Relu优点:(1)relu函数在大于0的部分梯度为常数,所以不会产生梯度弥散现象.。而对于sigmod函数,在正负饱和区的梯度都接近于0,可能会导致梯度消失现象。(2)Relu函数的导数计算更快,所以使用梯度下降时比Sigmod收敛起来要快很多。
Relu缺点:Relu死亡问题。当 x 是小于 0 的时候,那么从此所以流过这个神经元的梯度将都变成 0;这个时候这个 ReLU 单元在训练中将死亡(也就是参数无法更新),这也导致了数据多样化的丢失(因为数据一旦使得梯度为 0,也就说明这些数据已不起作用)。
Sigmod优点:具有很好的解释性,将线性函数的组合输出为0,1之间的概率。
Sigmodu缺点:(1)激活函数计算量大,反向传播求梯度时,求导涉及除法。(2)反向传播时,在饱和区两边导数容易为0,即容易出现梯度消失的情况,从而无法完成深层网络的训练。
4. softmax和sigmoid在多分类任务中的优劣
多个sigmoid与一个softmax都可以进行多分类.如果多个类别之间是互斥的,就应该使用softmax,即这个东西只可能是几个类别中的一种。如果多个类别之间不是互斥的,使用多个sigmoid。
5.用softmax做分类函数,假如现在要对1w甚至10w类做分类会出现什么问题?
过拟合,怎么解决,面试官让自己想(不能使用softmax,使用三元组损失)
6.梯度爆炸,梯度消失,梯度弥散是什么,为什么会出现这种情况以及处理办法
梯度弥散(梯度消失): 通常神经网络所用的激活函数是sigmoid函数,sigmod函数容易引起梯度弥散。这个函数能将负无穷到正无穷的数映射到0和1之间,并且对这个函数求导的结果是f′(x)=f(x)(1−f(x))表示两个0到1之间的数相乘,得到的结果就会变得很小了。神经网络的反向传播是逐层对函数偏导相乘,因此当神经网络层数非常深的时候,最后一层产生的偏差就因为乘了很多的小于1的数而越来越小,最终就会变为0,从而导致层数比较浅的权重没有更新,这就是梯度消失。
梯度爆炸:就是由于初始化权值过大,前面层会比后面层变化的更快,就会导致权值越来越大,梯度爆炸的现象就发生了。
梯度消失/爆炸是什么?(反向传播中由于链式求导法则的连乘,如果乘数都比较小趋于0,最终传递到网络输入层的梯度会变得很小(梯度消失),如果乘数都很大,最终的梯度也会变得很大(梯度爆炸),其实二者都是因为网络太深导致权值更新不稳定,本质上是因为梯度反向传播中的连乘效应)
梯度消失与梯度爆炸的产生原因
梯度消失:(1)隐藏层的层数过多;(2)采用了不合适的激活函数(更容易产生梯度消失,但是也有可能产生梯度爆炸)
梯度爆炸:(1)隐藏层的层数过多;(2)权重的初始化值过大
梯度消失与梯度爆炸的解决方案
(1)用ReLU、Leaky-ReLU、P-ReLU、R-ReLU、Maxout等替代sigmoid函数。
(2)用Batch Normalization。(3)LSTM的结构设计也可以改善RNN中的梯度消失问题。(4)预训练+微调(5)使用残差网络
回归
1.分类和回归的区别,各举例3个模型
定量输出称为回归,或者说是连续变量预测;定性输出称为分类,或者说是离散变量预测。
常见分类模型有感知机、朴素贝叶斯、逻辑回归(LR)、支持向量机(SVM)、神经网络等;
常见回归模型有线性回归、多项式回归、岭回归(L2正则化)、Lasso回归(L1正则化)等
2.线性回归和逻辑回归的区别
线性回归:利用数理统计中回归分析,来确定两种或两种以上变量间相互依赖的定量关系的一种统计分析方法。一元线性回归分析:y=ax+by=ax+b,只包括一个自变量和一个因变量,且二者的关系可用一条直线近似表示。多元线性回归分析:hθ(x)=θ0+θ1x1+…+θnxn,包括两个或两个以上的自变量,并且因变量和自变量是线性关系。
逻辑回归:逻辑回归(Logistic Regression)是用于处理因变量为分类变量的回归问题,常见的是二分类或二项分布问题,也可以处理多分类问题,它实际上是属于一种分类方法。
逻辑回归的数学表达模型:
h
θ
(
x
)
=
g
(
θ
T
x
)
=
1
1
+
e
−
θ
T
x
(
sigmoid 函数
)
h_{\theta}(x)=g\left(\theta^{T} x\right)=\frac{1}{1+e^{-\theta^{T} x}}(\text { sigmoid 函数 })
hθ(x)=g(θTx)=1+e−θTx1( sigmoid 函数 )
区别:LR通常用于二分类,使用的是交叉熵损失函数;线性回归用于回归,使用的是均方误差损失函数
3.怎么优化LR?就是求解LR
梯度下降、极大似然法。
参考链接
https://www.aiuai.cn/aifarm360.html
https://zhuanlan.zhihu.com/p/38230433
https://bbs.cvmart.net/topics/1699?from=timeline
https://blog.csdn.net/qq_25737169/article/details/78847691
https://blog.csdn.net/weixin_43789661/article/details/112076829
标签:函数,sigmoid,--,梯度,宝典,学习,L2,L1,范数 来源: https://blog.csdn.net/dwf1354046363/article/details/122405063