当前位置: 首页>編程日記>正文

图像算法岗面试指南

图像算法岗面试指南

最近都在忙面试的事,总结一些图像算法岗常见问题跟大家分享。有些是附上大佬帖子链接,整理难免有些许错误,请及时与本人联系,不胜感激!

0.最大似然和最小二乘区别?
看似最小二乘估计与最大似然估计在推导得到的结果很相似,但是其前提条件必须引起大家的注意!!!
对于最小二乘估计,最合理的参数估计量应该使得模型能最好地拟合样本数据,也就是估计值和观测值之差的平方和最小,其推导过程如下所示。其中Q表示误差,Yi表示估计值,Yi’表示观测值。
在这里插入图片描述

对于最大似然法,最合理的参数估计量应该使得从模型中抽取该n组样本观测值的概率最大,也就是概率分布函数或者说是似然函数最大。显然,这是从不同原理出发的两种参数估计方法。因此最大似然法需要已知这个概率分布函数,一般假设其满足正态分布函数的特性,在这种情况下,最大似然估计和最小二乘估计是等价的,也就是说估计结果是相同的,但是原理和出发点完全不同。其推导过程如下所示
在这里插入图片描述

最小二乘法以估计值与观测值的差的平方和作为损失函数,极大似然法则是以最大化目标值的似然概率函数为目标函数,从概率统计的角度处理线性回归并在似然概率函数为高斯函数的假设下同最小二乘建立了的联系。

1.xboosting如何处理缺失值?

很多的机器学习算法都无法提供缺失值的自动处理,都需要人为地去处理,但是xgboost模型却能够处理缺失值,也就是说模型允许缺失值存在。
关于缺失值的处理将其看与稀疏矩阵的处理看作一样。在寻找split point的时候,不会对该特征为missing的样本进行遍历统计,只对该列特征值为non-missing的样本上对应的特征值进行遍历,通过这个技巧来减少了为稀疏离散特征寻找split point的时间开销。在逻辑实现上,为了保证完备性,会分别处理将missing该特征值的样本分配到左叶子结点和右叶子结点的两种情形,计算增益后选择增益大的方向进行分裂即可。可以为缺失值或者指定的值指定分支的默认方向,这能大大提升算法的效率。如果在训练中没有缺失值而在预测中出现缺失,那么会自动将缺失值的划分方向放到右子树。

2.生成模型和判别模型区别?

  • 判别式模型举例:要确定一个羊是山羊还是绵羊,用判别模型的方法是从历史数据中学习到模型,然后通过提取这只羊的特征来预测出这只羊是山羊的概率,是绵羊的概率。

  • 生成式模型举例:利用生成模型是根据山羊的特征首先学习出一个山羊的模型,然后根据绵羊的特征学习出一个绵羊的模型,然后从这只羊中提取特征,放到山羊模型中看概率是多少,在放到绵羊模型中看概率是多少,哪个大就是哪个。

  • 细细品味上面的例子,判别式模型是根据一只羊的特征可以直接给出这只羊的概率(比如logistic regression,这概率大于0.5时则为正例,否则为反例),而生成式模型是要都试一试,最大的概率的那个就是最后结果~补充20180524:在机器学习中任务是从属性X预测标记Y,判别模型求的是P(Y|X),即后验概率;而生成模型最后求的是P(X,Y),即联合概率。从本质上来说:判别模型之所以称为“判别”模型,是因为其根据X“判别”Y;而生成模型之所以称为“生成”模型,是因为其预测的根据是联合概率P(X,Y),而联合概率可以理解为“生成”(X,Y)样本的概率分布(或称为 依据);具体来说,机器学习已知X,从Y的候选集合中选出一个来,可能的样本有(X,Y_1), (X,Y_2), (X,Y_3),……,(X,Y_n),实际数据是如何“生成”的依赖于P(X,Y),那么最后的预测结果选哪一个Y呢?那就选“生成”概率最大的那个吧~

  • 概率图分为有向图(bayesian network)与无向图(markov random filed)。在概率图上可以建立生成模型或判别模型。有向图多为生成模型,无向图多为判别模型。

判别模型(Discriminative Model),又可以称为条件模型,或条件概率模型。估计的是条件概率分布(conditional distribution),p(class|context)。利用正负例和分类标签,主要关心判别模型的边缘分布。其目标函数直接对应于分类准确率。 (判别模型多数放在分类)

  • 主要特点:寻找不同类别之间的最优分类面,反映的是异类数据之间的差异。

  • 优点:
    (1)分类边界更灵活,比使用纯概率方法或生产模型得到的更高级;
    (2)能清晰的分辨出多类或某一类与其他类之间的差异特征;
    (3)在聚类、视角变化、部分遮挡、尺度改变等方面效果较好;
    (4)适用于较多类别的识别;
    (5)判别模型的性能比生成模型要简单,比较容易学习。

  • 缺点:
    (1)不能反映训练数据本身的特性,即能力有限,可以告诉你的是1还是2,但没有办法把整个场景描述出来;
    (2)缺少生成模型的优点,即先验结构的不确定性;
    (3)黑盒操作,即变量间的关系不清楚,不可视。

  • 常见的主要有:logistic regression、SVMs、traditional neural networks、Nearest neighbor、Conditional random fields。

  • 主要应用:Image and document classification、Biosequence analysis、Time series prediction。

生成模型(Generative Model),又叫产生式模型。估计的是联合概率分布(joint probability distribution),p(class, context)=p(class|context)*p(context)。用于随机生成的观察值建模,特别是在给定某些隐藏参数情况下。在机器学习中,或用于直接对数据建模(用概率密度函数对观察到的样本数据建模),或作为生成条件概率密度函数的中间步骤。通过使用贝叶斯规则可以从生成模型中得到条件分布。如果观察到的数据是完全由生成模型所生成的,那么就可以拟合生成模型的参数,从而仅可能的增加数据相似度。但数据很少能由生成模型完全得到,所以比较准确的方式是直接对条件密度函数建模,即使用分类或回归分析。与描述模型的不同是,描述模型中所有变量都是直接测量得到。

  • 所以生成模型和判别模型的主要区别在于:添加了先验概率
    即:生成模型:p(class, context)=p(class|context)*p(context)
    判别模型: p(class|context)

  • 主要特点:(1)一般主要是对后验概率建模,从统计的角度表示数据的分布情况,能够反映同类数据本身的相似度;(2)只关注自己的类本身(即点左下角区域内的概率),不关心到底决策边界在哪。

  • 优点:
    (1)实际上带的信息要比判别模型丰富;
    (2)研究单类问题比判别模型灵活性强;
    (3)模型可以通过增量学习得到;
    (4)能用于数据不完整(missing data)情况;
    (5)很容易将先验知识考虑进去。

  • 缺点:
    (1)容易会产生错误分类;
    (2)学习和计算过程比较复杂。

  • 常见的主要有:Gaussians、Naive Bayes、Mixtures of multinomials、Mixtures of Gaussians、Mixtures of experts、HMMs、Sigmoidal belief networks、Bayesian networks、Markov random fields。

  • 主要应用:
    (1)传统基于规则的或布尔逻辑系统正被统计方法所代替;
    (2)医学诊断。

  • 注:所列举的生成模型也可以用判决模型的方法来训练,比如GMM或HMM,训练的方法有EBW(Extended Baum Welch),或最近Fei Sha提出的Large Margin方法。过去的报告认为判别模型在分类问题上比生成表现更加好(比如Logistic Regression与Naive Bayesian的比较,再比如HMM与Linear Chain CRF的比较)。当然,生成模型的图模型也有一些难以代替的地方,比如更容易结合无标注数据做semi-or-un-supervised learning。

3.svm种类?
-s svm类型:SVM设置类型(默认0)
0 – C-SVC:C-支持向量分类机;参数C为惩罚系数,C越大表示对错误分类的惩罚越大,适当的参数C对分类Accuracy很关键。
1 --v-SVC:v-支持向量分类机;由于C的选取比较困难,用另一个参数v代替C。C是“无意义”的,v是有意义的。(与C_SVC其实采用的模型相同,但是它们的参数C的范围不同,C_SVC采用的是0到正无穷,该类型是[0,1]。)
2 – 一类SVM:​单类别-支持向量机,不需要类标号,用于支持向量的密度估计和聚类。
3 – e -SVR:ε-支持向量回归机,不敏感损失函数,对样本点来说,存在着一个不为目标函数提供任何损失值的区域。
4 – v-SVR:n-支持向量回归机,由于EPSILON_SVR需要事先确定参数,然而在某些情况下选择合适的参数却不是一件容易的事情。而NU_SVR能够自动计算参数。

SVM叫做支持向量机,它的目标是为确定一个分类超平面,从而将不同的数据分隔开

支持向量机分类:

支持向量机分为三种,线性可分支持向量机,线性支持向量机以及非线性支持向量机。
当训练数据线性可分时,通过最大化硬间隔,学习一个线性分类器,这种称之为线性可分支持向量机(硬间隔支持向量机);(所谓硬间隔就是线性可分)
当训练数据近似线性可分时,通过最大化软间隔,也学习一个线性分类器,即线性支持向量机;
当训练数据线性不可分时,通过使用核技巧及软间隔最大化,学习非线性支持向量机
4.L1、L2正则化区别?
L范数(L1 norm)是指向量中各个元素绝对值之和,也有个美称叫“稀疏规则算子”(Lasso regularization)。比如 向量A=[1,-1,3],那么A的L1范数为 |1|+|-1|+|3|.简单总结一下就是: L1范数: 为x向量各个元素绝对值之和。 L2范数:为x向量各个元素平方和的1/2次方,L2范数又称Euclidean范数或者Frobenius范数Lp范数:为x向量各个元素绝对值p次方和的1/p次方.在支持向量机学习过程中,L1范数实际是一种对于成本函数求解最优的过程,因此,L1范数正则化通过向成本函数中添加L1范数,使得学习得到的结果满足稀疏化,从而方便人类提取特征,即L1范数可以使权值稀疏,方便特征提取。 L2范数可以防止过拟合,提升模型的泛化能力。L1和L2的差别,为什么一个让绝对值最小,一个让平方最小,会有那么大的差别呢?看导数一个是1一个是w便知, 在靠进零附近, L1以匀速下降到零, 而L2则完全停下来了. 这说明L1是将不重要的特征(或者说, 重要性不在一个数量级上)尽快剔除, L2则是把特征贡献尽量压缩最小但不至于为零. 两者一起作用, 就是把重要性在一个数量级(重要性最高的)的那些特征一起平等共事(简言之, 不养闲人也不要超人)。

5.谈谈你的项目经历?
自由发挥
6.GBDT和XGBoosts的区别是什么?
首先介绍一下boosting思想,每次训练单个弱分类器时,都将上一次分错的数据权重提高一点再进行当前单个弱分类器的学习,这样往后执行,训练出来的单个弱分类器就会越在意那些容易分错的点,最终通过加权求和的方式组合成一个最终的学习器

gradent boosting 是boosting的一种,每一次构建单个学习器时,是在之前建立的模型的损失函数的梯度下降方向, GB与Adaboost的区别在于:

AdaBoost是通过提升错分数据点的权重来定位模型的不足。

Gradient Boosting是通过算梯度(gradient)来定位模型的不足 。

主要思想是,每一次建立单个学习器时,是在之前建立的模型的损失函数的梯度下降方向,损失函数越大,说明模型越容易出错,如果我们的模型能够让损失函数持续的下降,则说明我们的模型在不停的改进,而最好的方式就是让损失函数在其梯度方向上下降。

GBDT=GB+DT(decision tree),即基分类器为决策树时,这里的决策树是回归树

Xgboost 是GB算法的高效实现,其中基分类器除了可以使CART也可以是线性分类器

几大区别:
传统GBDT以CART作为基分类器,xgboost还支持线性分类器,这个时候xgboost相当于带L1和L2正则化项的逻辑斯帝回归或者线性回归 传统GBDT在优化时只用到了一阶导数,而xgboost对代价函数进行了二阶泰勒展开,用到了一阶和二阶导数 xgboost加入了正则项,防止过拟合 shrinkage,相当于学习率,在每完成一次迭代后,会乘上这个系数,削减每棵树的影响 列抽样,借鉴随机森林的做法,支持列抽样,不仅能降低过拟合,还能减少计算。

7.在k-means与kNN,我们用的是欧氏距离来计算最近的邻居之间的距离。为什么不用曼哈顿距离?

曼哈顿距离只计算水平或者垂直距离,有维度的限制,而欧氏距离可用于任何空间的距离计算问题,因为,数据点可以存在于任何空间,如国际象棋棋盘,象和车所做的移动是由曼哈顿距离计算的,因为他们是在各自的水平和垂直方向做的运动
8.简单说说特征工程?
特征工程是利用数据领域的相关知识来创建能够使机器学习算法达到最佳性能的特征的过程,从数学的角度来讲,特征工程就是人工地去设计输入变量X

9.简要说说一个完整机器学习项目的流程?

a.抽象成数学问题(确定是一个分类问题、回归问题还是聚类问题,明确可以获得什么样的数据)
b.获取数据(数据要具有代表性,对数据的量级也要有一个评估,多少样本,多少特征,对内存的消耗,考虑内存是否能放得下,如果放不下考虑降维或者改进算法,如果数据量太大,考虑分布式)
c.特征预处理和特征选择(数据清洗,归一化、缺失值处理、去除共线性等,另外筛选出显著特征、反复理解业务,有时候数据特征选择的好,依靠简单的算法也能得出良好稳定的结果,需要进行特征有效性分析,如相关系数、卡方检验、平均互信息、条件熵、后验概率、逻辑回归权重等方法)
d.训练模型与调优(现在很多算法都已经封装成黑箱供人使用,正则考察的是调参的技术,需要对算法额原理深入理解,能发现问题的症结,来提出良好的调优方案)
e.模型诊断(确定调优的方向,如欠拟合 过拟合这种情况,一般过拟合是增加数据量和降低模型复杂度的思路,欠拟合是增加特征,增加模型复杂度)
f.模型融合(一般提升模型主要在前期的数据清洗和预处理部分,以及后面的模型融合下功夫,有时候会通过在已有预训练模型上进行再融合和调参节省时间,并能取得不错的效果)
g.上线运行(模型在线上运行效果直接决定模型的成败,运行的速度、资源消耗成都、稳定性等是否可以接受)

10.哪些机器学习算法不需要做归一化处理?

概率模型不需要归一化,因为他们不关心变量的值,而是关心变量的分布和变量之间的条件概率,如决策树、RF。而像Adaboost、GBDT、SVM、LR、KNN、KMeans之类的最优化问题就需要归一化

11.如何解决梯度消失和梯度膨胀?
梯度消失:根据链式法则,当每一层神经元对上一层的输出的偏导乘上权重结果都小于1的话,那么即使这个结果是0.99,经过多层传播之后,误差的输入层的偏导会趋于0,可以用relu激活函数来解决,因为relu=max(0,X),偏导数为1,不会造成梯度消失,而弊端是有可能会产生死神经元

梯度膨胀:每一层神经元对上一层的输出偏导乘上权重结果都大于1的话,经过多层传播之后,误差对输入层的偏导会无穷大,也可以通过激活函数来解决
12.为什么朴素贝叶斯如此朴素?

因为朴素贝叶斯有个重要的假设前提,也就是假设样本的所有特征之间是相互独立的,而这个在现实世界中是不真实的,因此说其很朴素

13.在机器学习中,为何要经常对数据归一化?

归一化后加快了梯度下降求最优解的速度(两个特征量纲不同,差距较大时,等高线较尖,根据梯度下降可能走之字形,而归一化后比较圆走直线) 归一化有可能提高精度 (一些分类器需要计算样本之间的距离,如果一个特征值域范围非常大,那么距离计算就主要取决于这个特征,这是不合理的)

14.协方差与相关性的区别?

相关性是协方差的标准化格式,协方差本身很难做比较,例如,如果我们计算工资和年龄的协方差,因为这两个变量有不同的度量,所以我们会得到不能做比较的不同的协方差,为了解决这个问题,我们计算相关性来得到一个介于-1和1之间的值,就可以忽略它们各自不同的度量

15.如何解决数据不平衡问题?
采样,对小样本进行加噪声采样,对大样本进行下采样 进行特殊的加权,如在Adaboost中或者SVM 采用对不平衡数据集不敏感的算法 改变评价标准:用AUC|ROC来进行评价 考虑数据的先验分布

16.什么是卷积?

对图像和滤波矩阵做内积的操作就是所谓的卷积操作,也是卷积神经网络的名字来源

17.什么是CNN的池化pool层?
池化指的是在区域内取平均或者最大

18.什么是生成对抗网络?

GAN网络有两个重要的概念,一个是generator,主要作用是生成图片,尽量使其看上去来自于训练样本,一个是discriminator,主要作用是判断输入图片是否属于训练样本,所以这就是被称为对抗的网络,举例赝品家和鉴赏家

19.梯度下降法找到的一定是下降最快的方向么?

并不是,它只是目标函数在当前的点的切平面上下降最快的方向,牛顿方向才一般被认为是下降最快的方向

20.特征工程的问题

特征工程包括数据与特征处理、特征选择和降维三部分。数据与特征处理包括:

1.数据选择、清洗、采样

数据格式化;

数据清洗,填充缺失值、去掉脏数据,将不可信的样本丢掉,缺省值极多的字段考虑不用;

采样:针对正负样本不平衡的情况,当正样本远大于负样本时,且量都很大时,使用下采样,量不大时,可采集更多的数据或oversampling或修改损失函数;采样过程中可利用分层抽样保持不同类别数据的比例。

2.不同类型数据的特征处理

数值型:幅度调整/归一化、log等变化、统计值(例如max、min、mean、std)、离散化、分桶等

类别型:one-hot编码等

时间型:提取出连续值的持续时间和间隔时间;提取出离散值的“年”、“月”、“日”、“一年中哪个星期/季度”、“一周中的星期几”、“工作日/周末”等信息

文本型:使用If-idf特征

统计型:加减平均、分位线、次序、比例

意义:

对数据进行预处理,可提高数据质量,提高挖掘质量。对数据进行清洗可填充缺失值、光滑噪声数据,识别和删除离群点数据,保证数据的一致性;

使用正确的采样方法可解决因数据不平衡带来的预测偏差;

对不同的数据类型进行不同的特征处理有助于提高特征的可用性,例如对数值型数据进行归一化可将数据转化到统一量纲下;对类别型数据,可用one-hot编码方法将类别数据数字化,数字化特征之后可更用来计算距离、相似性等;可从时间型数据当中提取中更多的时间特征,例如年、月和日等,这些特征对于业务场景以及模型的预测往往有很大的帮助。统计型特征处理有助于从业务场景中挖掘更丰富的信息。

特征选择包括:

1.Filter:使用方差、Pearson相关系数、互信息等方法过滤特征,评估单个特征和结果值之间的相关程度,留下Top相关的特征部分。

2.Wrapper:可利用“递归特征删除算法”,把特征选择看做一个特征子集搜索问题,筛选各种特征子集,用模型评估效果。

3.Embedded:可利用正则化方式选择特征,使用带惩罚项的基模型,除了选择出特征外,同时也进行了降纬。

意义:

-剔除对结果预测不大的特征,减小冗余,选择有意义的特征输入模型,提高计算性能。

降维:

方法:主成分分析法(PCA)和线性判别分析(LDA)

意义:通过PCA或LDA方法,将较高纬度样本空间映射到较低维度的样本空间,从而达到降纬的目的,减少模型的训练时间,提高模型的计算性能。

21.过拟合的解决方法

正则化(L1正则化,L2正则化),
扩增数据集,
特征的筛选,
earlyimgstopping,
dropout

22.SVM中什么时候用线性核什么时候用高斯核?
当数据的特征提取的较好,所包含的信息量足够大,很多问题是线性可分的那么可以采用线性核。若特征数较少,样本数适中,对于时间不敏感,遇到的问题是线性不可分的时候可以使用高斯核来达到更好的效果。
23.inception模块的作用?
通过堆叠多种不同尺度的卷积核,加宽网络宽度,在保证参数量的前提下提升了性能,使得网络能够适应多尺度的特征

24.Resnet之后还有什么网络?
出现了新的网络结构DenseNet, SENet,先简单介绍一下densenet,任意两层之间都有连接,将每一层学到的特征传送给之后的所有层,除去深度和宽度,在feature上做到极致化,实现特征的重复利用,并且将每一层设计的很窄,每层只学习很少的特征图,在保证精度的情况下减少了计算量
25.决策树处理缺失值?
缺失值问题可以从三个方面来考虑

a.在选择分裂属性的时候,训练样本存在缺失值,如何处理?(计算分裂损失减少值时,忽略特征缺失的样本,最终计算的值乘以比例(实际参与计算的样本数除以总的样本数))
假如你使用ID3算法,那么选择分类属性时,就要计算所有属性的熵增(信息增益,Gain)。假设10个样本,属性是a,b,c。在计算a属性熵时发现,第10个样本的a属性缺失,那么就把第10个样本去掉,前9个样本组成新的样本集,在新样本集上按正常方法计算a属性的熵增。然后结果乘0.9(新样本占raw样本的比例),就是a属性最终的熵。

b.分类属性选择完成,对训练样本分类,发现样本属性缺失怎么办?(将该样本分配到所有子节点中,权重由1变为具有属性a的样本被划分成的子集样本个数的相对比率,计算错误率的时候,需要考虑到样本权重)
比如该节点是根据a属性划分,但是待分类样本a属性缺失,怎么办呢?假设a属性离散,有1,2两种取值,那么就把该样本分配到两个子节点中去,但是权重由1变为相应离散值个数占样本的比例。然后计算错误率的时候,注意,不是每个样本都是权重为1,存在分数。

c.训练完成,给测试集样本分类,有缺失值怎么办?(分类时,如果待分类样本有缺失变量,而决策树决策过程中没有用到这些变量,则决策过程和没有缺失的数据一样;否则,如果决策要用到缺失变量,决策树也可以在当前节点做多数投票来决定(选择样本数最多的特征值方向)。)
(U)如果有单独的缺失分支,使用此分支。©把待分类的样本的属性a值分配一个最常出现的a的属性值,然后进行分支预测。(S)根据其他属性为该待分类样本填充一个属性a值,然后进行分支处理。(F)在决策树中属性a节点的分支上,遍历属性a节点的所有分支,探索可能所有的分类结果,然后把这些分类结果结合起来一起考虑,按照概率决定一个分类。(H)待分类样本在到达属性a节点时就终止分类,然后根据此时a节点所覆盖的叶子节点类别状况为其分配一个发生概率最高的类。

26.基础的图像处理知识
a.腐蚀与膨胀、开闭运算
对于二值图像,使用合适大小、形状结构元素(Structure Element)对图像中的每一个元素进行操作;
腐蚀:将图像中每一个点与结构元素进行比对,如果完全一致,则保留该点;如果不一致,将该点去除;
膨胀:将图像中每一个点与结构元素进行比对,如果完全一致,则保留该点;如果不一致,以该点为中心点,利用结构元素为模板对该点进行扩充。
开运算:先腐蚀后膨胀,目的是去除图像中的一些孤立块,减少噪声;
闭运算:先膨胀后腐蚀,目的是减少空洞、合并同类。
b.图像的缩放算法
最近邻算法、双线性插值、双三次插值
c.图像特征提取方法
HOG、LBP、SIFT、SURF

27.第一类误差和第二类误差有什么区别?
第一类误差指的是假正率,第二类指的是假负率。简单来说,第一类误差意味着假设为真的情况下,作出了拒绝原假设的一种错误推断。第二类误差意味着假设为假的情况下,做出了接受原假设的一种错误判断。

举个例子:第一类误差,你误判一个男的他怀孕了。第二类误差,你误判了一位其实已经怀孕的女子没怀孕。
28.什么是傅立叶变换?
傅立叶变换是将一般函数分解成对称函数叠加的一般方法。
29.概率和似然有什么区别?
该链接较为通俗
30.深度学习中Dropout原理解析
点这里,很详细
31.为什么用 smooth-L1 loss?
损失函数:L1 loss, L2 loss, smooth L1 loss
接着点

32.了解多线程吗?

1.单进程单线程:一个人在一个桌子上吃菜。
2.单进程多线程:多个人在同一个桌子上一起吃菜。
3.多进程单线程:多个人每个人在自己的桌子上吃菜。

多线程的问题是多个人同时吃一道菜的时候容易发生争抢,例如两个人同时夹一个菜,一个人刚伸出筷子,结果伸到的时候已经被夹走菜了。。。此时就必须等一个人夹一口之后,在还给另外一个人夹菜,也就是说资源共享就会发生冲突争抢。
a.对于 Windows 系统来说,【开桌子】的开销很大,因此 Windows 鼓励大家在一个桌子上吃菜。因此 Windows 多线程学习重点是要大量面对资源争抢与同步方面的问题。
b.对于 Linux 系统来说,【开桌子】的开销很小,因此 Linux 鼓励大家尽量每个人都开自己的桌子吃菜。这带来新的问题是:坐在两张不同的桌子上,说话不方便。因此,Linux 下的学习重点大家要学习进程间通讯的方法。

–补充:

有人对这个开桌子的开销很有兴趣。
开桌子的意思是指创建进程。开销这里主要指的是时间开销。可以做个实验:创建一个进程,在进程中往内存写若干数据,然后读出该数据,然后退出。此过程重复 1000 次,相当于创建/销毁进程 1000 次。在我机器上的测试结果是: UbuntuLinux:耗时 0.8 秒 Windows7:耗时 79.8 秒 两者开销大约相差一百倍。
这意味着,在 Windows 中,进程创建的开销不容忽视。换句话说就是,Windows 编程中不建议你创建进程,如果你的程序架构需要大量创建进程,那么最好是切换到 Linux 系统。大量创建进程的典型例子有两个,一个是 gnu autotools 工具链,用于编译很多开源代码的,他们在 Windows 下编译速度会很慢,因此软件开发人员最好是避免使用 Windows。另一个是服务器,某些服务器框架依靠大量创建进程来干活,甚至是对每个用户请求就创建一个进程,这些服务器在 Windows 下运行的效率就会很差。这"可能"也是放眼全世界范围,Linux 服务器远远多于 Windows 服务器的原因。
–再次补充:
如果你是写服务器端应用的,其实在现在的网络服务模型下,开桌子的开销是可以忽略不计的,因为现在一般流行的是按照 CPU 核心数量开进程或者线程,开完之后在数量上一直保持,进程与线程内部使用协程或者异步通信来处理多个并发连接,因而开进程与开线程的开销可以忽略了。另外一种新的开销被提上日程:核心切换开销。
现代的体系,一般 CPU 会有多个核心,而多个核心可以同时运行多个不同的线程或者进程。当每个 CPU 核心运行一个进程的时候,由于每个进程的资源都独立,所以 CPU 核心之间切换的时候无需考虑上下文。当每个 CPU 核心运行一个线程的时候,由于每个线程需要共享资源,所以这些资源必须从 CPU 的一个核心被复制到另外一个核心,才能继续运算,这占用了额外的开销。换句话说,在 CPU 为多核的情况下,多线程在性能上不如多进程。因而,当前面向多核的服务器端编程中,需要习惯多进程而非多线程。
33.训练时的方差和偏差有什么区别?
偏差:描述的是预测值(估计值)的期望与真实值之间的差距。偏差越大,越偏离真实数据,如下图第二行所示。

方差:描述的是预测值的变化范围,离散程度,也就是离其期望值的距离。方差越大,数据的分布越分散,如下图右列所示。
在这里插入图片描述
34.深度学习难分样本挖掘(Hard Mining)
概念:对于分类来说:

正样本:我们想要正确分类出的类别所对应的样本,例如,我们需要对一张图片分类,确定是否属于猫,那么在训练的时候,猫的图片就是正样本。
负样本:根据上面的例子,不是猫的其他所有的图片都是负样本
难分正样本(hard positives):错分成负样本的正样本,也可以是训练过程中损失最高的正样本
难分负样本(hard negatives):错分成正样本的负样本,也可以是训练过程中损失最高的负样本
易分正样本(easy positive):容易正确分类的正样本,该类的概率最高。也可以是训练过程中损失最低的正样本
易分负样本(easy negatives):容易正确分类的负样本,该类的概率最高。也可以是训练过程中损失最低的负样本。

再参看这篇文章

35.Triplet Loss 损失函数
Triplet Loss是深度学习中的一种损失函数,用于训练差异性较小的样本,如人脸等, Feed数据包括锚(Anchor)示例、正(Positive)示例、负(Negative)示例,通过优化锚示例与正示例的距离小于锚示例与负示例的距离,实现样本的相似性计算。

先看此博文

再看此博文

36.Embedding 的理解
近年来,从计算机视觉到自然语言处理再到时间序列预测,神经网络、深度学习的应用越来越广泛。在深度学习的应用过程中,Embedding 这样一种将离散变量转变为连续向量的方式为神经网络在各方面的应用带来了极大的扩展。该技术目前主要有两种应用,NLP 中常用的 word embedding 以及用于类别数据的 entity embedding。
可以总结一下,embedding 有以下 3 个主要目的:

  • 在 embedding 空间中查找最近邻,这可以很好的用于根据用户的兴趣来进行推荐。
  • 作为监督性学习任务的输入。
  • 用于可视化不同离散变量之间的关系。

详细参看知乎大佬文章

37.检测评价函数 intersection-over-union ( IOU )

在目标检测的评价体系中,有一个参数叫做 IoU ,简单来讲就是模型产生的目标窗口和原来标记窗口的交叠率。具体我们可以简单的理解为: 即检测结果(DetectionResult)与 Ground Truth 的交集比上它们的并集,即为检测的准确率 IoU :
生成图:
在这里插入图片描述
原图:

在这里插入图片描述
38.图像的下采样Subsampling 与 上采样Upsampling

缩小图像(或称为下采样(subsampled)或降采样(downsampled))的主要目的:

1、使得图像符合显示区域的大小;

2、生成对应图像的缩略图。

放大图像(或称为上采样(upsampling)或图像插值(interpolating))的主要目的是放大原图像,从而可以显示在更高分辨率的显示设备上。

对图像的缩放操作并不能带来更多关于该图像的信息, 因此图像的质量将不可避免地受到影响。然而,确实有一些缩放方法能够增加图像的信息,从而使得缩放后的图像质量超过原图质量的。
39.样本不均衡的分类问题 怎么解决?

  • 对数据进行采用的过程中通过相似性同时生成并插样“少数类别数据”,叫做SMOTE算法
  • 对数据先进行聚类,再将大的簇进行随机欠采样或者小的簇进行数据生成
  • 把监督学习变为无监督学习,舍弃掉标签把问题转化为一个无监督问题,如异常检测
  • 先对多数类别进行随机的欠采样,并结合boosting算法进行集成学习

除了以上提到的一些看起来略微复杂的算法,最简单的算法无外乎三种,在大部分教材中都有涉猎:

  • 对较多的那个类别进行欠采样(under-sampling),舍弃一部分数据,使其与较少类别的数据相当
  • 对较少的类别进行过采样(over-sampling),重复使用一部分数据,使其与较多类别的数据相当
  • 阈值调整(threshold moving),将原本默认为0.5的阈值调整到 较少类别/(较少类别+较多类别)即可
    当然很明显我们可以看出,第一种和第二种方法都会明显的改变数据分布,我们的训练数据假设不再是真实数据的无偏表述。在第一种方法中,我们浪费了很多数据。而第二类方法中有无中生有或者重复使用了数据,会导致过拟合的发生。

因此欠采样的逻辑中往往会结合集成学习来有效的使用数据,假设正例数据n,而反例数据m个。我们可以通过欠采样,随机无重复的生成(k=n/m)个反例子集,并将每个子集都与相同正例数据合并生成k个新的训练样本。我们在k个训练样本上分别训练一个分类器,最终将k个分类器的结果结合起来,比如求平均值。这就是一个简单的思路,也就是Easy Ensemble。

但不难看出,其实这样的过程是需要花时间处理数据和编程的,对于很多知识和能力有限的人来说难度比较大。特此推荐两个简单易行且效果中上的做法:

  • 简单的调整阈值,不对数据进行任何处理。此处特指将分类阈值从0.5调整到正例比例
  • 使用现有的集成学习分类器,如随机森林或者xgboost,并调整分类阈值

提出这样建议的原因有很多。首先,简单的阈值调整从经验上看往往比过采样和欠采样有效 [6]。其次,如果你对统计学知识掌握有限,而且编程能力一般,在集成过程中更容易出错,还不如使用现有的集成学习并调整分类阈值。
40.怎么做数据增强?
我们常常会遇到数据不足的情况。比如,你遇到的一个任务,目前只有小几百的数据,然而,你知道目前现在流行的最先进的神经网络都是成千上万的图片数据。你知道有人提及大的数据集是效果好的保证。对自己数据集小感到失望,你怀疑在我的小数据集上能使我的“最先进的”神经网络能表现好吗?

答案是:是!在我们开始是这件事发生之前,我们需要先反思几个问题。
具体看人家怎么总结的,好好看
41.有从 loss 层面考虑过吗?
看看人家热乎的论文是怎么在loss上做数据增强的
42.了解 focalloss 吗?
何恺明大神文章,您细品
43.优化器一般用什么?adam 的原理是?
优化器种类
adam的原理
44.一般怎么训练?为什么开始学习率要大一点,batchsize 为啥开始也要小一点?
自由发挥
45.PyTorch中的nn.Conv1d与nn.Conv2d
1.nn.Conv1d用于一维向量(词向量)
2.nn.Conv2d用于二维向量(图片)
46.模型融合
一般来说,通过融合多个不同的模型,可能提升机器学习的性能,这一方法在各种机器学习比赛中广泛应用,比如在kaggle上的otto产品分类挑战赛中取得冠军和亚军成绩的模型都是融合了1000+模型的“庞然大物”。

常见的集成学习&模型融合方法包括:简单的Voting/Averaging(分别对于分类和回归问题)、Stacking、Boosting和Bagging。
47.LR
与其他算法区别:

  • 与 SVM
    相同点:
    都是分类算法,本质上都是在找最佳分类超平面;
    都是监督学习算法;
    都是判别式模型,判别模型不关心数据是怎么生成的,它只关心数据之间的差别,然后用差别来简单对给定的一个数据进行分类;
    都可以增加不同的正则项。
    不同点:
    LR 是一个统计的方法,SVM 是一个几何的方法;
    SVM 的处理方法是只考虑 Support Vectors,也就是和分类最相关的少数点去学习分类器。而逻辑回归通过非线性映射减小了离分类平面较远的点的权重,相对提升了与分类最相关的数据点的权重;
    损失函数不同:LR 的损失函数是交叉熵,SVM 的损失函数是 HingeLoss,这两个损失函数的目的都是增加对分类影响较大的数据点的权重,减少与分类关系较小的数据点的权重。对 HingeLoss 来说,其零区域对应的正是非支持向量的普通样本,从而所有的普通样本都不参与最终超平面的决定,这是支持向量机最大的优势所在,对训练样本数目的依赖大减少,而且提高了训练效率;
    LR 是参数模型,SVM 是非参数模型,参数模型的前提是假设数据服从某一分布,该分布由一些参数确定(比如正太分布由均值和方差确定),在此基础上构建的模型称为参数模型;非参数模型对于总体的分布不做任何假设,只是知道总体是一个随机变量,其分布是存在的(分布中也可能存在参数),但是无法知道其分布的形式,更不知道分布的相关参数,只有在给定一些样本的条件下,能够依据非参数统计的方法进行推断。所以 LR 受数据分布影响,尤其是样本不均衡时影响很大,需要先做平衡,而 SVM 不直接依赖于分布;
    LR 可以产生概率,SVM 不能;
    LR 不依赖样本之间的距离,SVM 是基于距离的;
    LR 相对来说模型更简单好理解,特别是大规模线性分类时并行计算比较方便。而 SVM 的理解和优化相对来说复杂一些,SVM 转化为对偶问题后,分类只需要计算与少数几个支持向量的距离,这个在进行复杂核函数计算时优势很明显,能够大大简化模型和计算。

  • 与朴素贝叶斯
    朴素贝叶斯和逻辑回归都属于分类模型,当朴素贝叶斯的条件概率 [公式] 服从高斯分布时,它计算出来的 P(Y=1|X) 形式跟逻辑回归是一样的。
    两个模型不同的地方在于:
    逻辑回归是判别式模型 p(y|x),朴素贝叶斯是生成式模型 p(x,y):判别式模型估计的是条件概率分布,给定观测变量 x 和目标变量 y 的条件模型,由数据直接学习决策函数 y=f(x) 或者条件概率分布 P(y|x) 作为预测的模型。判别方法关心的是对于给定的输入 x,应该预测什么样的输出 y;而生成式模型估计的是联合概率分布,基本思想是首先建立样本的联合概率概率密度模型 P(x,y),然后再得到后验概率 P(y|x),再利用它进行分类,生成式更关心的是对于给定输入 x 和输出 y 的生成关系;
    朴素贝叶斯的前提是条件独立,每个特征权重独立,所以如果数据不符合这个情况,朴素贝叶斯的分类表现就没逻辑会好了。

  • LR范围非常大,面试不要轻易说自己了解LR,除非真的了解。。。
    看吧

48.牛顿法和梯度下降法
牛顿法简介
下图是两种方法的图示表示,红色为牛顿下降法,绿色为梯度下降法,从图中直观的感觉是,红色线短,下降速度快。因为牛顿下降法是用二次曲面去拟合当前的局部曲面,而梯度下降法是用平面去拟合当前的局部曲面,一般用二次曲面拟合的更好,所以一般牛顿算法收敛快。

在这里插入图片描述
49.矩阵论,泛函分析学过没?概率论学过没?
50.vgg16 和 resnet50 哪个网络计算次数 更多?
51.double 和 float 哪种显卡计算能力更强?哪种单位时间 吞吐量大?
52.常用的激活函数有哪些,优缺点是什么?
这里详解

53.从参数数量角度 防止过拟合的手段是?

54.为什么开始学习率要大一点,batchsize 为啥开始也要小一点?
55.为什么样本方差(sample variance)的分母是 n-1?
56.字节飞书数据分析实习面试:
1)自我介绍
2)介绍一个简历里奖项的:题目、你负责什么部分、产生什么样的结果
3)使用的模型是?XGboost相比于其他模型的优势以及调参
4)业务题:如果飞书的会议功能的DAU突然下降分析原因?
5)硬要你再憋一个原因呢?
6)如何建立指标评价一个云文档在传播过程中的重要性?
7)技术题:求每个用户前三次访问时间;求每日新增用户数。
57.中心化和标准化
这里先介绍下数据的中心化和标准化,在回归问题和一些机器学习算法中通常要对原始数据进行中心化和标准化处理,也就是需要将数据的均值调整到0,标准差调整为1, 计算过程很简单就是将所有数据减去平均值后再除以标准差:

在这里插入图片描述

这样调整后的均值:

[公式]

调整后的标准差:

在这里插入图片描述

之所以需要进行中心化其实就是个平移过程,将所有数据的中心平移到原点。而标准化则是使得所有数据的不同特征都有相同的尺度Scale, 这样在使用梯度下降法以及其他方法优化的时候不同特征参数的影响程度就会一致了。

未完待续!不定期更新!


https://www.fengoutiyan.com/post/14624.html

相关文章:

  • 算法岗需要什么知识
  • 图像识别面试题
  • 算法岗和开发岗
  • 移动端 图像 算法
  • 算法岗面试问题
  • 图像相似度算法
  • 图像旋转算法
  • 图像处理面试题
  • 鏡像模式如何設置在哪,圖片鏡像操作
  • 什么軟件可以把圖片鏡像翻轉,C#圖片處理 解決左右鏡像相反(旋轉圖片)
  • 手機照片鏡像翻轉,C#圖像鏡像
  • 視頻鏡像翻轉軟件,python圖片鏡像翻轉_python中鏡像實現方法
  • 什么軟件可以把圖片鏡像翻轉,利用PS實現圖片的鏡像處理
  • 照片鏡像翻轉app,java實現圖片鏡像翻轉
  • 什么軟件可以把圖片鏡像翻轉,python圖片鏡像翻轉_python圖像處理之鏡像實現方法
  • matlab下載,matlab如何鏡像處理圖片,matlab實現圖像鏡像
  • 圖片鏡像翻轉,MATLAB:鏡像圖片
  • 鏡像翻轉圖片的軟件,圖像處理:實現圖片鏡像(基于python)
  • canvas可畫,JavaScript - canvas - 鏡像圖片
  • 圖片鏡像翻轉,UGUI優化:使用鏡像圖片
  • Codeforces,CodeForces 1253C
  • MySQL下載安裝,Mysql ERROR: 1253 解決方法
  • 勝利大逃亡英雄逃亡方案,HDU - 1253 勝利大逃亡 BFS
  • 大一c語言期末考試試題及答案匯總,電大計算機C語言1253,1253《C語言程序設計》電大期末精彩試題及其問題詳解
  • lu求解線性方程組,P1253 [yLOI2018] 扶蘇的問題 (線段樹)
  • c語言程序設計基礎題庫,1253號C語言程序設計試題,2016年1月試卷號1253C語言程序設計A.pdf
  • 信奧賽一本通官網,【信奧賽一本通】1253:抓住那頭牛(詳細代碼)
  • c語言程序設計1253,1253c語言程序設計a(2010年1月)
  • 勝利大逃亡英雄逃亡方案,BFS——1253 勝利大逃亡
  • 直流電壓測量模塊,IM1253B交直流電能計量模塊(艾銳達光電)
  • c語言程序設計第三版課后答案,【渝粵題庫】國家開放大學2021春1253C語言程序設計答案
  • 18轉換為二進制,1253. 將數字轉換為16進制
  • light-emitting diode,LightOJ-1253 Misere Nim
  • masterroyale魔改版,1253 Dungeon Master
  • codeformer官網中文版,codeforces.1253 B
  • c語言程序設計考研真題及答案,2020C語言程序設計1253,1253計算機科學與技術專業C語言程序設計A科目2020年09月國家開 放大學(中央廣播電視大學)
  • c語言程序設計基礎題庫,1253本科2016c語言程序設計試題,1253電大《C語言程序設計A》試題和答案200901
  • 肇事逃逸車輛無法聯系到車主怎么辦,1253尋找肇事司機