干货 | SHAREit(茄子)算法工程师面试题整理

七月在线实验室

共 3863字,需浏览 8分钟

 ·

2021-12-24 20:35


问题1:模型有过拟合的现象,过拟合怎么办?


1、降低模型复杂度

2、增加更多的训练数据:使用更大的数据集训练模型

3、数据增强

4、正则化:L1、L2、添加BN层

5、添加Dropout策略

6、Early Stopping

7、重新清洗数据:把明显异常的数据剔除

8、使用集成学习方法:把多个模型集成在一起,降低单个模型的过拟合风险



问题2:L1正则和L2正则有啥区别?


(1)L1是模型各个参数的绝对值之和。

       L2是模型各个参数的平方和的开方值。


(2)L1会趋向于产生少量的特征,而其他的特征都是0。

因为最优的参数值很大概率出现在坐标轴上,这样就会导致某一维的权重为0 ,产生稀疏权重矩阵

       L2会选择更多的特征,这些特征都会接近于0。 

最优的参数值很小概率出现在坐标轴上,因此每一维的参数都不会是0。当最小化||w||时,就会使每一项趋近于0。


(3)L1的作用是为了矩阵稀疏化。假设的是模型的参数取值满足拉普拉斯分布。

       L2的作用是为了使模型更平滑,得到更好的泛化能力。假设的是参数是满足高斯分布。



问题3:dropout介绍一下,训练测试有啥不一样的地方?


dropout在训练时,以一定的概率p来drop掉相应的神经网络节点,以(1-p)的概率来保留相应的神经网络节点,这相当于每一次训练时模型的网络结构都不一样,也可以理解为训练时添加了不同的数据,所以能够有效减少过拟合。


问题呢,是出在测试时,因为训练的时候以概率p drop了一些节点,比如dropout设置为0.5,隐藏层共有6个节点,那训练的时候有3个节点的值被丢弃,而测试的时候这6个节点都被保留下来,这就导致了训练和测试的时候以该层节点为输入的下一层的神经网络节点获取的期望会有量级上的差异。


为了解决这个问题,在训练时对当前dropout层的输出数据除以(1-p),之后再输入到下一层的神经元节点,以作为失活神经元的补偿,以使得在训练时和测试时每一层的输入有大致相同的期望。



问题4:GBDT与Xgboost的区别


1、传统的GBDT以CART树作为基学习器,XGBoost还支持线性分类器,这个时候XGBoost相当于L1和L2正则化的逻辑斯蒂回归(分类)或者线性回归(回归);


2、传统的GBDT在优化的时候只用到一阶导数信息,XGBoost则对代价函数进行了二阶泰勒展开,得到一阶和二阶导数;


3、XGBoost在代价函数中加入了正则项,用于控制模型的复杂度。从权衡方差偏差来看,它降低了模型的方差,使学习出来的模型更加简单,放置过拟合,这也是XGBoost优于传统GBDT的一个特性;


4、shrinkage(缩减),相当于学习速率(XGBoost中的eta)。XGBoost在进行完一次迭代时,会将叶子节点的权值乘上该系数,主要是为了削弱每棵树的影响,让后面有更大的学习空间。(GBDT也有学习速率);


5、列抽样:XGBoost借鉴了随机森林的做法, 支持列抽样, 不仅防止过 拟合,还能减少计算;


6、对缺失值的处理: 对于特征的值有缺失的样本,XGBoost还可以自动 学习出它的分裂方向;


7、XGBoost工具支持并行。Boosting不是一种串行的结构吗?怎么并行 的?注意XGBoost的并行不是tree粒度的并行,XGBoost也是一次迭代完才能进行下一次迭代的(第t次迭代的代价函数里包含了前面t-1次迭代的预测值)。


XGBoost的并行是在特征粒度上的。我们知道,决策树的学习最耗时的一个步骤就是对特征的值进行排序(因为要确定最佳分割点),XGBoost在训练之前,预先对数据进行了排序,然后保存为block结构,后面的迭代 中重复地使用这个结构,大大减小计算量。这个block结构也使得并行成为了可能,在进行节点的分裂时,需要计算每个特征的增益,最终选增益最大的那个特征去做分裂,那么各个特征的增益计算就可以开多线程进行。


 

问题5:LightGBM与XGBoost的区别


1、xgboost采用的是level-wise的分裂策略,而lightGBM采用了leaf-wise的策略,区别是xgboost对每一层所有节点做无差别分裂,可能有些节点的增益非常小,对结果影响不大,但是xgboost也进行了分裂,带来了不必要的开销。leaft-wise的做法是在当前所有叶子节点中选择分裂收益最大的节点进行分裂,如此递归进行,很明显leaf-wise这种做法容易过拟合,因为容易陷入比较高的深度中,因此需要对最大深度做限制,从而避免过拟合。


2、lightgbm使用了基于histogram的决策树算法,这一点不同与xgboost中的 exact 算法,histogram算法在内存和计算代价上都有不小优势。

(1)内存:直方图算法的内存消耗为(#data* #features * 1Bytes)(因为对特征分桶后只需保存特征离散化之后的值),而xgboost的exact算法内存消耗为:(2 * #data * #features* 4Bytes),因为xgboost既要保存原始feature的值,也要保存这个值的顺序索引,这些值需要32位的浮点数来保存。

(2)计算:预排序算法在选择好分裂特征计算分裂收益时需要遍历所有样本的特征值,时间为(#data),而直方图算法只需要遍历桶就行了,时间为(#bin)



问题6:特征工程怎么做的?


数据预处理:处理缺失值、图片数据扩充、处理异常值、处理类别不平衡问题


特征缩放:归一化、正则化


特征编码:序号编码(Ordinal Encoding)、独热编码(One-hot Encoding)、二进制编码(Binary Encoding)


离散化


特征选择:过滤式(filter)、包裹式(wrapper)、嵌入式(embedding)


特征提取:降维、图像特征提取、文本特征提取



问题7:1*1卷积核作用


实现跨通道的交互和信息整合


进行卷积核通道数的降维和升维


对于单通道feature map 用单核卷积即为乘以一个参数,而一般情况都是多核卷积多通道,实现多个feature map的线性组合


可以实现与全连接层等价的效果。如在faster-rcnn中用1x1xm的卷积核卷积n(如512)个特征图的每一个位置(像素点),其实对于每一个位置的1x1卷积本质上都是对该位置上n个通道组成的n维vector的全连接操作。


 

问题8:常用评估指标介绍下


准确率(Accuracy)


即所有分类正确的样本占全部样本的比例

 

精确率/查准率(Precision)

定义:


即预测是正例的结果中,确实是正例的比例。Precision同样是衡量误检

 

查全率(Recall)

定义:


即所有正例的样本中,被找出的比例。Recall同样是衡量漏检

 

F1-score

定义:


衡量Precision 和 Recall 之间的联系。

 

ROC 和 AUC

AUC是一种模型分类指标,且仅仅是二分类模型的评价指标。AUC是Area Under Curve的简称,那么Curve就是 ROC(Receiver Operating Characteristic),翻译为"接受者操作特性曲线"。也就是说ROC是一条曲线,AUC是 一个面积值。

 

Precision-Recall曲线

PR曲线的横坐标是精确率P,纵坐标是召回率R。

此时曲线上的点就对应F1。P-R曲线同样可以用AUC衡量,AUC大的曲线越好。

 

IOU和mIOU


就是IOU(Intersection over Union),交集占并集的大小。

公式其实很简单,就是交集占并集的大小。

mIOU一般都是基于类进行计算的,将每一类的IOU计算之后累加,再进行平均,得到的就是mIOU。


AP和mAP

AP(average Precision)和mAP(mean average Precision)常用于目标检测任务中。AP就是每一类的Precision的平均值。而mAP是所有类的AP的平均值。




— 推荐阅读 —

最新大厂面试题


干货资料


AI开源项目论文


NLP ( 自然语言处理 )


CV(计算机视觉)


推荐


阅读原文”领取PDF!

浏览 34
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报