ML_CV面试求职1,持续更新20190710

Subject1: 面试过亚马逊、特斯拉、三星、优步、华为等大公司(20190710)

偏差和方差之间的协调(权衡)是什么?

  回答:偏差度量了学习算法的期望预测与真实结果的偏离程度,即刻画了学习算法本身的拟合能力;方差度量了同样大小的训练集的变动所导致的学习性能的变化,即刻画了数据扰动所造成的影响;噪声则表达了学习问题本省的难度。偏差-方差分解说明,泛化能力是由学习算法的能力、数据的充分性以及学习任务本身的难度所共同决定的,给定学习任务,为了取得好的泛化性能,需使偏差较小,即能够充分拟合数据,并使方差较小,使数据扰动产生的影响最小。在这里插入图片描述
  在一个实际系统中,Bias与Variance往往是不能兼得的。如果要降低模型的Bias,就一定程度上会提高模型的Variance,反之亦然。造成这种现象的根本原因是,我们总是希望试图用有限训练样本去估计无限的真实数据。当我们更加相信这些数据的真实性,而忽视对模型的先验知识,就会尽量保证模型在训练样本上的准确度,这样可以减少模型的Bias。但是,这样学习到的模型,很可能会失去一定的泛化能力,从而造成过拟合,降低模型在真实数据上的表现,增加模型的不确定性。相反,如果更加相信我们对于模型的先验知识,在学习模型的过程中对模型增加更多的限制,就可以降低模型的variance,提高模型的稳定性,但也会使模型的Bias增大。Bias与Variance两者之间的trade-off是机器学习的基本主题之一,机会可以在各种机器模型中发现它的影子。

权衡偏差与方差:
  模型过于简单时,容易发生欠拟合(high bias);模型过于复杂时,又容易发生过拟合(high variance)。为了达到一个合理的 bias-variance 的平衡,此时需要对模型进行认真地评估。这里简单介绍一个有用的cross-validation技术K-fold Cross Validation (K折交叉验证),
  这个方法将帮助我们获得模型关于泛化误差(generalization error)的可信的估计,所谓的泛化误差也即模型在新数据集上的表现。在训练数据上面,我们可以进行交叉验证(Cross-Validation)。
  K折交叉验证,初始采样分割成K个子样本,一个单独的子样本被保留作为验证模型的数据,其他K-1个样本用来训练。交叉验证重复K次,每个子样本验证一次,我们便可获得 k 个模型及其性能评价。平均K次的结果或者使用其它结合方式,最终得到一个单一估测。

  当K值大的时候, 我们会有更少的Bias(偏差), 更多的Variance。
  当K值小的时候, 我们会有更多的Bias(偏差), 更少的Variance。

什么是梯度下降?

  回答:梯度下降是迭代法的一种,可以用于求解最小二乘问题(线性和非线性都可以)。在求解机器学习算法的模型参数,即无约束优化问题时,梯度下降(Gradient Descent)是最常采用的方法之一,另一种常用的方法是最小二乘法。在求解损失函数的最小值时,可以通过梯度下降法来一步步的迭代求解,得到最小化的损失函数和模型参数值。反过来,如果我们需要求解损失函数的最大值,这时就需要用梯度上升法来迭代了。在机器学习中,基于基本的梯度下降法发展了两种梯度下降方法,分别为随机梯度下降法和批量梯度下降法。

解释过拟合和欠拟合以及如何解决(优化)?

  回答:

  1. 过拟合:通俗一点地来说过拟合就是模型把数据学习的太彻底,以至于把噪声数据的特征也学习到了,这样就会导致在后期测试的时候不能够很好地识别数据,即不能正确的分类,模型泛化能力太差。

  解决方法:
  1)、重新清洗数据,导致过拟合的一个原因也有可能是数据不纯导致的,如果出现了过拟合就需要我们重新清洗数据。
  2)、增大数据的训练量,还有一个原因就是我们用于训练的数据量太小导致的,训练数据占总数据的比例过小。
  3)、采用正则化方法。正则化方法包括 L 0 , L 1 , L 2 L_0,L_1,L_2 L0L1L2正则,而正则一般是在目标函数之后加上对于的范数,但是在机器学习中一般使用 L 2 L_2 L2正则。
  4)、采用dropout方法。这个方法在神经网络里面很常用。dropout方法是ImageNet中提出的一种方法,通俗一点讲就是dropout方法在训练的时候让神经元以一定的概率不工作(目前谷歌已经申请了专利)。

  1. 欠拟合:欠拟合就是模型没有很好地捕捉到数据特征,不能够很好地拟合数据

  解决方法:
  1)、添加其他特征项,有时候我们模型出现欠拟合的时候是因为特征项不够导致的,可以添加其他特征项来很好地解决。例如,“组合”、“泛化”、“相关性”三类特征是特征添加的重要手段,无论在什么场景,都可以照葫芦画瓢,总会得到意想不到的效果。除上面的特征之外,“上下文特征”、“平台特征”等等,都可以作为特征添加的首选项。
  2)、添加多项式特征,这个在机器学习算法里面用的很普遍,例如将线性模型通过添加二次项或者三次项使模型泛化能力更强。例如上面的图片的例子。
  3)、减少正则化参数,正则化的目的是用来防止过拟合的,但是现在模型出现了欠拟合,则需要减少正则化参数。

如何应对“维度的诅咒”?

  回答:一种简单的方法就是增加机器学习数据集的大小,以便通过增加训练实例的数量来减少数据库的稀疏性。但这实际上是不可能的,因为随着维数的增加,所需数量的训练实例呈指数增长。例如100个特征,我们需要比世界上的源自更多的训练实例,因为他们彼此相距0.1个距离;因此解决这个问题的可行方法是减少维数即降维

什么是正则化,我们为什么要使用它,并给出一些常见方法的例子?

  回答:正则化,英文名字:Regularizaiton-Regular-Regularize,其实就是规则化,制定一种约束,这是一种对对象进行限制以满足某一特定目的的处理方法。
  为什么:规则化就是说给需要训练的目标函数加上一些规则(限制),让他们不要自我膨胀。

  1. 从模型修正上看,起了一个trade-off作用,用于平衡学习过程中两个基本量,名字诸如bias-variance、拟合能力-泛化能力、损失函数-推广能力、经验风险-结构风险等等;
  2. 从模型求解上看,正则化提供了一种唯一解的可能,众所周知,光用最小二乘拟合可能出现无数组解,加个L1或L2正则化项能有唯一解,即楼上所言不适定性

  例子
在这里插入图片描述
在这里插入图片描述

解释主成分分析法 (PCA)?

  回答:PCA(Principal Component Analysis),即主成分分析方法,是一种使用最广泛的数据降维算法。PCA的主要思想是将n维特征映射到k维上,这k维是全新的正交特征也被称为主成分,是在原有n维特征的基础上重新构造出来的k维特征。PCA的工作就是从原始的空间中顺序地找一组相互正交的坐标轴,新的坐标轴的选择与数据本身是密切相关的。其中,第一个新坐标轴选择是原始数据中方差最大的方向,第二个新坐标轴选取是与第一个坐标轴正交的平面中使得方差最大的,第三个轴是与第1,2个轴正交的平面中方差最大的。依次类推,可以得到n个这样的坐标轴。通过这种方式获得的新的坐标轴,我们发现,大部分方差都包含在前面k个坐标轴中,后面的坐标轴所含的方差几乎为0。于是,我们可以忽略余下的坐标轴,只保留前面k个含有绝大部分方差的坐标轴。事实上,这相当于只保留包含绝大部分方差的维度特征,而忽略包含方差几乎为0的特征维度,实现对数据特征的降维处理。
  事实上,通过计算数据矩阵的协方差矩阵,然后得到协方差矩阵的特征值特征向量,选择特征值最大(即方差最大)的k个特征所对应的特征向量组成的矩阵。这样就可以将数据矩阵转换到新的空间当中,实现数据特征的降维。
  由于得到协方差矩阵的特征值特征向量有两种方法:特征值分解协方差矩阵、奇异值分解协方差矩阵,所以PCA算法有两种实现方法:基于特征值分解协方差矩阵实现PCA算法、基于SVD分解协方差矩阵实现PCA算法。

为什么在神经网络中ReLU比Sigmoid更好更常用 ?

  回答:主要是因为它们gradient特性不同。sigmoid和tanh的gradient在饱和区域非常平缓,接近于0,很容易造成梯度消失的问题,减缓收敛速度。梯度消失在网络层数多的时候尤其明显,是加深网络结构的主要障碍之一。相反,Relu的gradient大多数情况下是常数,有助于解决深层网络的收敛问题。Relu的另一个优势是在生物上的合理性,它是单边的,相比sigmoid和tanh,更符合生物神经元的特征。
  而提出sigmoid和tanh,主要是因为它们全程可导。还有表达区间问题,sigmoid和tanh区间是0到1,或着-1到1,在表达上,尤其是输出层的表达上有优势。
   ReLU更容易学习优化。因为其分段线性性质,导致其前传,后传,求导都是分段线性。而传统的sigmoid函数,由于两端饱和,在传播过程中容易丢弃信息:
  第一个问题:为什么引入非线性激励函数
  如果不用激励函数(其实相当于激励函数是f(x) = x),在这种情况下你每一层输出都是上层输入的线性函数,很容易验证,无论你神经网络有多少层,输出都是输入的线性组合,与没有隐藏层效果相当,这种情况就是最原始的感知机(Perceptron)了。
  正因为上面的原因,我们决定引入非线性函数作为激励函数,这样深层神经网络就有意义了(不再是输入的线性组合,可以逼近任意函数)。最早的想法是sigmoid函数或者tanh函数,输出有界,很容易充当下一层输入(以及一些人的生物解释balabala)。
  第二个问题:为什么引入Relu呢
  第一,采用sigmoid等函数,算激活函数时(指数运算),计算量大,反向传播求误差梯度时,求导涉及除法,计算量相对大,而采用Relu激活函数,整个过程的计算量节省很多。
  第二,对于深层网络,sigmoid函数反向传播时,很容易就会出现梯度消失的情况(在sigmoid接近饱和区时,变换太缓慢,导数趋于0,这种情况会造成信息丢失),从而无法完成深层网络的训练。
  第三,Relu会使一部分神经元的输出为0,这样就造成了网络的稀疏性,并且减少了参数的相互依存关系,缓解了过拟合问题的发生

什么是数据标准化,我们为什么需要它?

  回答:数据标准化是非常重要的预处理步骤,用于对数值进行调节,使其拟合特定的范围,以确保在反向传播过程中更好地收敛。一般来说,这可以归结为减去每个数据点的均值,再除以其标准差。如果我们不这样做,那么一些特征(那些高量级的)将在成本函数中得到更多的权重(如果一个高量级的特征变化了1%,那么这个变化是相当大的,但是对于较小量级的特征来说,它是相当小的)。数据标准化使得所有特征的权重相等。

解释降维,在哪里会用到以及它的好处?

  回答:降维是通过减少所考虑的特征变量数量来得到一组主变量(也就是重要特征)的过程。特性的重要性取决于特征变量对数据信息表示的贡献,并取决于你使用哪种技术。决定使用哪种技术取决于反复试验和偏好。通常从线性技术开始,当结果不拟合时,就转向非线性技术。数据集降维的潜在好处有:

  1. 减少所需存储空间
  2. 加速计算(例如在机器学习算法),维度低意味着更少的计算,维度低也意味着可以使用不适合高维度的算法
  3. 删除冗余特征,例如没有意义同时用平方米和平方英里来存储地形的大小(可能是数据采集存在缺陷)
  4. 降低数据维度到2D或3D可能允许我们绘图和可视化它们,如观察模式,给我们深刻见解
  5. 太多的特征或太复杂的模型可能导致过度拟合。

如何处理数据集中丢失或损坏的数据?

  回答:你可以在数据集中找到丢失/损坏的数据,你可以删除这些行或列,或者用另一个值(插值法)替换它们。在Pandas中,有两个非常有用的方法: i s n u l l ( ) isnull() isnull() d r o p n a ( ) dropna() dropna(),它们将帮助您找到丢失或损坏数据的数据列,并删除这些值。如果希望用占位符值(例如0)填充无效值,可以使用 f i l l n a ( ) fillna() fillna()方法。

解释一种聚类算法?

  回答:这里有一篇很受欢迎的文章,是关于数据科学家需要知道的5种聚类算法,用各种可视化图形详细解释了每种算法。

你将如何进行探索性数据分析(EDA)?

  回答:EDA的目标是在应用预测模型之前从数据中收集一些见解,也就是获得一些信息。基本上,你希望以一种从粗到细的方式进行EDA。我们从获得一些高层次的全局见解开始。看看一些不平衡的类。看看每个类的均值和方差。查看前几行,看看它是关于什么的。运行 P a n d a s d f . i n f o ( ) {Pandas df.info()} Pandasdf.info()来查看哪些特性是连续的、分类的、它们的类型(int、float、string)。接下来,删除在分析和预测中不无用的列。这些可能是看起来无用的列,其中一个是许多行具有相同的值(即该列没有给我们很多信息),或者它丢失了很多值。我们还可以用该列中最常见的值或中值填充缺失的值。现在我们可以开始做一些基本的可视化。从高层次的东西开始。为特征是分类和有少数组的做一些条形图。最后类的条形图。看看最“宽泛的特征”。对这些单独的特征创建一些可视化,以尝试获得一些基本见解。现在我们可以开始更具体的。在两个或三个特性之间创建可视化。特性是如何相互关联的?你还可以用PCA查看哪些特征包含最多的信息。将一些特性组合在一起,看看它们之间的关系。例如,当A = 0和B = 0时,类会发生什么?当A = 1,B = 0时呢?比较不同的特征。例如,如果特征A可以是“女性”或“男性”,那么我们可以将特征A与他们呆在哪个小屋相对照,看看男性和女性是否住在不同的小屋。除了条形图、散点图和其他基本图外,我们还可以绘制PDF/CDF、重叠图等。查看一些统计数据,如分布、p值等。最后,是时候创建ML模型了。从简单的贝叶斯和线性回归开始。如果你发现很糟糕或者数据是高度非线性的,那就使用多项式回归、决策树或者SVMs。可以根据EDA中特征的重要性选择它们。如果你有很多数据,你可以使用神经网络。检查ROC曲线。精度、回忆

你如何知道应该使用哪种机器学习模型?

  回答:虽然人们应该时刻牢记“天下没有免费的午餐”,但还是有一些基本原则的。这里写了一篇关于如何选择合适的回归模型的文章。这个备忘单也很棒!
在这里插入图片描述

为什么我们对图像使用卷积而不仅仅是FC层?

  回答:这个问题很有趣,因为公司通常不会问这个问题。正如你所料,我从一家专注于计算机视觉的公司得到了这个问题。这个答案有两部分。首先,卷积保存、编码并实际使用了图像中的空间信息。如果我们只使用FC层,就不会有相关的空间信息。其次,卷积神经网络(CNNs)具有部分内建的平移方差,因为每个卷积核都充当自己的滤波器/特征检测器。

什么使CNNs不受平移影响?

  回答:如上所述,每个卷积核都充当自己的滤波器/特征检测器。假设你在做物体检测,物体在图像中的什么位置并不重要因为我们要以滑动窗口的方式对整个图像进行卷积。

为什么分类CNNs 有最大池化?

  回答:正如你所预料的,这是为了计算机视觉中的一个角色。CNN中的最大池化允许你减少计算,因为你的特征图在池化之后更小。你不会丢失太多的语义信息,因为你正在进行最大限度的激活。也有一种理论认为,最大池效应在一定程度上增加了CNNs的不受平移影响性。看看吴恩达关于最大池化的好处视频。

为什么分段CNNs通常具有编码器-解码器风格/结构?

  回答:编码器CNN基本上可以被认为是一个特征提取网络,而解码器利用这些信息通过“解码”特征并向上放大到原始图像大小来预测图像的片段。

什么是批量标准化,它为什么有效?

  回答:深度神经网络的训练是复杂的,因为每一层的输入分布在训练过程中会随着前一层参数的变化而变化。批量标准化的目的是使每一层的输入标准化,使它们的平均输出激活为0,标准偏差为1。每一层中的每一个小批都会进行处理,即单独计算小批的均值和方差,然后标准化。这类似于网络输入的标准化。这有什么帮助呢?我们知道对网络输入进行标准化有助于其学习。但是网络只是一系列层,其中一层的输出成为下一层的输入。这意味着我们可以把神经网络中的任何一层看作是更小的后续网络的第一层。我们将神经网络看作是一系列相互馈入的神经网络,在应用激活函数之前对一层的输出进行标准化,然后将其馈入下一层(子网络)。

如何处理不平衡的数据集?

  回答:有一篇关于这个的文章

为什么要使用很多小的卷积核,比如3x3,而不是几个大的?

  回答:这在VGGNet的论文中得到了很好的解释。有两个原因:首先,你可以使用几个较小的内核而不是几个较大的内核来获得相同的接收域并捕获更多的空间信息,但是使用较小的内核可以使用较少的参数和计算。其次,因为使用更小的内核,你将使用更多的过滤器,使用更多的激活函数,因此CNN将学习到更有鉴别性的映射函数。

你还有其他相关的项目吗?

  解析:在这里,你将真正在你的研究和他们的业务之间建立联系。你有没有做过什么事或学过什么技能,可能与他们的业务或你申请的职位有关? 不必是100%相关,只是某种程度上相关,这样你就可以证明你能够直接为公司增加很多价值。

解释一下你目前的硕士研究?什么成功了?没有失败了?未来的发展方向?

  解析:和上一个问题一样!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值