机器学习算法工程师面试知识点汇总

  • 机器学习
    • 梯度下降
    • k-means
    • 1 × 1卷积核
    • 模型
      • SVM
    • Bagging & Boosting
    • 随机森林
    • 激活函数
      • Sigmod
      • tanh
      • ReLU
      • ELU
      • Softmax
    • 性能评估指标

机器学习

梯度下降

https://blog.csdn.net/qq_41800366/article/details/86583789

J是关于Θ的一个函数,我们当前所处的位置为Θ0点,要从这个点走到J的最小值点,也就是山底。首先我们先确定前进的方向,也就是梯度的反向,然后走一段距离的步长,也就是α,走完这个段步长,就到达了Θ1这个点!

α:学习率,不要走太快,错过了最低点

梯度前加一个负号,就意味着朝着梯度相反的方向前进!我们在前文提到,梯度的方向实际就是函数在此点上升最快的方向!而我们需要朝着下降最快的方向走,自然就是负的梯度的方向,所以此处需要加上负号。

为什么采用梯度下降?
反向传播(用于优化神网参数):根据损失函数计算的误差通过反向传播的方式,指导深度网络参数的更新优化。

采取反向传播的原因:首先,深层网络由许多线性层和非线性层堆叠而来,每一层非线性层都可以视为是一个非线性函数(非线性来自于非线性激活函数),因此整个深度网络可以视为是一个复合的非线性多元函数。

我们最终的目的是希望这个非线性函数很好的完成输入到输出之间的映射,也就是找到让损失函数取得极小值。所以最终的问题就变成了一个寻找函数最小值的问题,

梯度消失和梯度爆炸
梯度消失和梯度爆炸本质上是一样的,都是因为网络层数太深而引发的梯度反向传播中的连乘效应。

Sigmod导数图像

Sigmoid导数的取值范围在0~0.25之间,而我们初始化的网络权值通常都小于1,因此,当层数增多时,小于0的值不断相乘,最后就导致梯度消失的情况出现。

同理,梯度爆炸的问题也就很明显了,就是当权值过大时,导致 |导数 * w | > 1,最后大于1的值不断相乘,就会产生梯度爆炸。


k-means

K-Means(聚类)
分类:有标签,根据数据已知的特点
聚类:聚类的目的也是把数据分类,但是事先我是不知道如何去分的,完全是算法自己来判断各条数据之间的相似性,相似的就放在一起。在聚类的结论出来之前,我完全不知道每一类有什么特点,一定要根据聚类的结果通过人的经验来分析,看看聚成的这一类大概有什么特点。

K-Means聚类算法中的最常用的一种,算法最大的特点是简单,好理解,运算速度快,但是只能应用于连续型的数据,并且一定要在聚类前需要手工指定要分成几类。

  1. 首先输入k的值,即我们希望将数据集经过聚类得到k个分组。
  2. 从数据集中随机选择k个数据点作为初始大哥(质心,Centroid)
  3. 对集合中每一个小弟,计算与每一个大哥的距离(距离的含义后面会讲),离哪个大哥距离近,就跟定哪个大哥。
  4. 这时每一个大哥手下都聚集了一票小弟,这时候召开人民代表大会,每一群选出新的大哥(其实是通过算法选出新的质心)。选新大哥,这里要注意选大哥的方法是每个人X坐标的平均值和Y坐标的平均值组成的新的点,为新大哥,也就是说这个大哥是“虚拟的”
  5. 如果新大哥和老大哥之间的距离小于某一个设置的阈值(表示重新计算的质心的位置变化不大,趋于稳定,或者说收敛),可以认为我们进行的聚类已经达到期望的结果,算法终止。
  6. 如果新大哥和老大哥距离变化很大,需要迭代3~5步骤。

优化:

  • 初始聚类中心点选取尽量分散

1 × 1卷积核

作用:降维、升维、跨通道交互、增加非线性


模型

SVM

https://zhuanlan.zhihu.com/p/31886934

支持向量机(support vector machines, SVM)是一种二分类模型,它的基本模型是定义在特征空间上的间隔最大的线性分类器,间隔最大使它有别于感知机

原理:求解能够正确划分训练数据集并且几何间隔最大的分离超平面


Bagging & Boosting

Bootstraping
助法(Bootstraping)是一种模型验证(评估)的方法。其以自助采样法(Bootstrap Sampling)为基础,即有放回的采样或重复采样。

具体做法是:在含有 m 个样本的数据集中,每次随机挑选一个样本, 将其作为训练样本,再将此样本放回到数据集中,这样有放回地抽样 m 次,生成一个与原数据集大小相同的数据集,这个新数据集就是训练集=。这样有些样本可能在训练集中出现多次,有些则可能从未出现。原数据集中大概有 36.8% 的样本不会出现在新数据集中。因此,我们把这些未出现在新数据集中的样本作为验证集。把前面的步骤重复进行多次,这样就可以训练出多个模型并得到它们的验证误差,然后取平均值,作为该模型的验证误差。

Baggging 和Boosting都是模型融合的方法,可以将弱分类器融合之后形成一个强分类器,而且融合之后的效果会比最好的弱分类器更好。
Bagging和Boosting的区别(面试准备)
Bagging:
并行化聚合方法

  1. 从原始样本集中抽取训练集。每轮从原始样本集中使用Bootstraping的方法抽取n个训练样本。共进行k轮抽取,得到k个训练集。(k个训练集之间是相互独立的)

  2. 每次使用一个训练集得到一个模型,k个训练集共得到k个模型。(注:这里并没有具体的分类算法或回归方法,我们可以根据具体问题采用不同的分类或回归方法,如决策树、感知器等)

  3. 对分类问题:将上步得到的k个模型采用投票的方式得到分类结果;
    对回归问题:计算上述模型的均值作为最后的结果。(所有模型的重要性相同)

Boosting:
顺序化聚合方法

AdaBoosting方式每次使用的是全部的样本,每轮训练改变样本的权重。下一轮训练的目标是找到一个函数f 来拟合上一轮的残差。当残差足够小或者达到设置的最大迭代次数则停止。Boosting会减小在上一轮训练正确的样本的权重,增大错误样本的权重。(对的残差小,错的残差大)

Bagging和Boosting的区别:
1)样本选择上:

Bagging:训练集是在原始集中有放回选取的,从原始集中选出的各轮训练集之间是独立的。
Boosting:每一轮的训练集不变,只是训练集中每个样例在分类器中的权重发生变化。而权值是根据上一轮的分类结果进行调整。

2)样例权重:

Bagging:使用均匀取样,每个样例的权重相等
Boosting:根据错误率不断调整样例的权值,错误率越大则权重越大。

3)预测函数:

Bagging:所有预测函数的权重相等。
Boosting:每个弱分类器都有相应的权重,对于分类误差小的分类器会有更大的权重。

4)并行计算:

Bagging:各个预测函数可以并行生成
Boosting:各个预测函数只能顺序生成,因为后一个模型参数需要前一轮模型的结果。

5)bagging减少variance,boosting减少bias
Bagging对样本重采样,对每一重采样得到的子样本集训练一个模型,最后取平均。由于子样本集的相似性以及使用的是同种模型,因此各模型有近似相等的bias和variance。
bagging后的bias和子模型接近
另一方面,若各子模型独立,则有
若各子模型完全相同,则
bagging方法得到的各子模型是有一定相关性的,属于上面两个极端状况的中间态,因此可以一定程度降低variance。希望模型能够具有更好的鲁棒性,也就是稳定性,希望避免过拟合,显然这就是在减少variance。

boosting从优化角度来看,是用forward-stagewise这种贪心法去最小化损失函数。boosting是在sequential地最小化损失函数,其bias自然逐步下降。但由于是采取这种sequential、adaptive的策略,各子模型之间是强相关的,于是子模型之和并不能显著降低variance。所以说boosting主要还是靠降低bias来提升预测精度。


随机森林


激活函数

https://blog.csdn.net/tyhj_sf/article/details/79932893

为什么需要激活函数?
如果没有激活函数,每一层节点的输入都是上层输出的线性函数,很容易验证,无论你神经网络有多少层,输出都是输入的线性组合这种情况就是最原始的感知机(Perceptron)了,那么网络的逼近能力就相当有限。
引入非线性函数作为激励函数,这样深层神经网络表达能力就更加强大(不再是输入的线性组合,而是几乎可以逼近任意函数)。


Sigmod


特点:
它能够把输入的连续实值变换为0和1之间的输出,特别的,如果是非常大的负数,那么输出就是0;如果是非常大的正数,输出就是1。完成二分类
缺点:

  1. 在中间斜率比较大的地方是神经元的敏感区,在两边斜率很平缓的地方是神经元的抑制区。当输入稍微远离了坐标原点,函数的梯度就变得很小了,几乎为零。由于sigmod导数处于 [0, 0.25],会导致梯度消失(初始权值小于1)和梯度爆炸(初始权值 * 导数 > 1)。
  2. sigmod输出 [0, 1],不是0均值。后一层的神经元将得到上一层输出的非0均值的信号作为输入。如x > 0 , f = w x + b, 那么对w求局部梯度则都为正,这样在反向传播的过程中w要么都往正方向更新,要么都往负方向更新,导致有一种捆绑的效果,使得收敛缓慢。 当然了,如果按batch去训练,那么那个batch可能得到不同的信号,
  3. 幂运算计算耗时

tanh



特点:
同sigmod,在输入很大或是很小的时候,输出都几乎平滑,梯度很小,不利于权重更新。

改进:
tanh的输出区间是在(-1,1)之间,而且整个函数是以0为中心的


ReLU



优点:

  1. 在[0, +∞] 激活函数导数为1,解决了梯度消失
  2. 线性计算,计算速度非常快
  3. 收敛速度远快于sigmoid和tanh

缺点:

  1. 输出不是0中心
  2. [ -∞, 0] 时候ReLU是未激活的, 反向传输更新参数是,有的参数会永远不被更新(负数输入)。Dead ReLU问题

ELU



优点:

  1. 不会有Dead ReLU 问题
  2. 输出均值接近0
    缺点:
    幂运算,运算量较高

Softmax

多分类


该元素的softmax值,就是该元素的指数与所有元素指数和的比值。该元素的softmax值,就是该元素的指数与所有元素指数和的比值。


性能评估指标

混淆矩阵(confusion matrix)


True Positive(真正,TP):将正类预测为正类数
True Negative(真负,TN):将负类预测为负类数
False Positive(假正,FP):将负类预测为正类数误报 (Type I error)
False Negative(假负,FN):将正类预测为负类数→漏报 (Type II error)

  1. 准确率(Accuracy)

    被分对样本数 / 所有样本数
    Error rate = 1 - Accuracy

缺点:
在正负样本不平衡的情况下,准确率这个评价指标有很大的缺陷。

  1. 精确度(Precision)/ 查准率

    被分为正例中 实际有多少正例的比例

  2. 召回率(Recall)/ 查全率

    在所有正例中,有多少正例实际被分为正例
    查准率和查全率往往互相矛盾,无法兼顾,所有需要同时考虑二者 --> F1 score,PR曲线。

  3. F1 Score

    包含了Precision和Recall的综合评价指标。越高越好


  1. ROC(Receiver Operating Characteristic)曲线

    TP_rate = TP / P = P个正样本中被正确划分为正的数量 / 真实正样本个数
    FP_rate = FP / N = N个负样本中被错误划分为正的数量 / 真实负样本个数
  • 曲线与FP_rate轴围成的面积(记作AUC)越大,说明性能越好,即图上L2曲线对应的性能优于曲线L1对应的性能。即:曲线越靠近A点(左上方)性能越好,曲线越靠近B点(右下方)曲线性能越差。
  • 位于C-D线上的点说明算法性能和random猜测是一样的–如C、D、E点。位于C-D之上(即曲线位于白色的三角形内)说明算法性能优于随机猜测–如G点,位于C-D之下(即曲线位于灰色的三角形内)说明算法性能差于随机猜测–如F点。
  1. PR(Precision-Recall)曲线

    平衡点(BEP)是P=R时的取值,如果这个值较大,则说明学习器的性能较好。

机器学习算法工程师面试知识点汇总相关推荐

  1. 机器学习算法工程师面试集锦(更新中)

    机器学习算法工程师面试集锦(更新中) 面试问题汇总 常用的损失函数 介绍交叉验证 特征选择方法 机器学习项目的一般步骤 经验风险最小化与结构风险最小化 训练决策树时的参数是什么 在决策树的节点处分割标 ...

  2. kmeans聚类算法_机器学习/算法校招面试考点汇总(附面试题和答案)【持续更新】_笔经面经...

    以下不作为机器学习/算法工程师的学习路径,只是汇总的校招机器学习/算法工程师面试考点(因为还有笔试考点,后面结合在一起给大家学习路径),后续会为大家更新10w+字数的机器学习/算法工程师校招面试题库, ...

  3. 深度学习算法工程师面试知识点总结(四)

    这是算法工程师面试知识点总结的第四篇,有兴趣的朋友可以看看前三篇的内容: 深度学习算法工程师面试知识点总结(一) 深度学习算法工程师面试知识点总结(二) 深度学习算法工程师面试知识点总结(三) 基于t ...

  4. Linux运维工程师面试知识点汇总(一)

    Linux运维工程师面试知识点汇总(一) 一.Linux命令知识点 1.查看/var/log/下的文件数 2.shell下随机密码生成(32位) 3.随机生成8位密码(大小写和数字混合) 4.随机生成 ...

  5. 机器学习-算法工程师 -面试/笔试准备-重要知识点梳理

    原文地址:http://blog.csdn.net/lrs1353281004/article/details/79529818 整理了一下机器学习-算法工程师需要掌握的机器学习基本知识点,并附上了网 ...

  6. 华为算法工程师面试经历汇总

    一.概述 华为公司组织架构较为庞大,其总体组织架构图如下所示: 其中,较为知名的2012实验室,其下面包括的二级部门有:中央硬件工程学院.海思.研发能力中心.中央软件院.诺亚方舟实验室: 其中中央软件 ...

  7. 机器学习算法工程师面试学习经验

    作为一个过来人,分享一点我的经验. 先介绍一下自己,本人是国内读的数学本科,北美top统计系硕士毕业,之后在FLAG之一的总部核心部门做数据科学家.期间面试过20-30名candidate. 想要找到 ...

  8. 深度学习算法工程师面试知识点总结(一)

    深度学习算法工程师岗位需要具有的技术栈初步总结如下: 这个总结并不是很完整,这个方向所需要的知识体系非常的庞大,例如高等数学基础.线性代数.概率论的基础,这对很多的同学来说是一个比较大的挑战.还需要针 ...

  9. 机器学习算法工程师面试总结

    转自北邮人论坛 2017年即将过去,今年是忙碌的一年,从2月17还没开学就来学校,到现在12月初,工作的事情终于尘埃落定,现将这一段经历写下来,希望能帮助来年找工作的学弟学妹,同时,对自己来说,也是一 ...

最新文章

  1. python培训比较好的机构有哪些-上海python培训比较好的机构
  2. react state成员
  3. Azure SQL 数据库最新版本现已提供预览版
  4. Spark SQL(二)之DataSet操作
  5. ubuntu+eclipse+svn
  6. 此时我的waga2012源码情绪也平静了许多
  7. 打开多网页用服务器系统好吗,如何在打开多个网页后,只需在一个网页上操作,其他网页都会同步操作?...
  8. MAC Eclipse 快捷键
  9. 常用工具及插件下载, [复制链接]
  10. Java 获取两个日期之间的日期
  11. WCF作为SAO技术的核心:契约
  12. 273.整数转换英文表示
  13. weblogic 自定义错误页面_使用 Nginx 容器为 Traefik 配置高性能通用错误页面
  14. JNI中调用Java函数
  15. MATLAB数据拟合时出错
  16. vue中index.html文件为什么可以使用模板语法
  17. 最短路:dijkstra算法
  18. 麒麟芯片鸿蒙芯片高通骁龙,麒麟和骁龙两款处理器,选哪一款比较好,看完这三点你就明白了...
  19. 为什么显示D盘可用空间不多,但是明明包括隐藏文件也没有用那么多内存?(内含解决方案)
  20. 这平安夜,我们来用python演奏一首铃儿响叮当吧

热门文章

  1. 来源:微型计算机 类别:教育科技 ,虚拟现实技术网络课件写作系统.doc
  2. 财务自由之路——为什么选择淘宝(下)
  3. 使用WinAVI配合TMPGEnc DVD Author將多个mpg檔燒成一塊DVD
  4. 2012年Q1机锋市场移动TOP20分析:中国网民很寂寞
  5. 关于人生,理想和抉择的对话
  6. Java:100以内加法练习程序!
  7. 《敏捷个人》周刊 第11期 (可下载)
  8. 火狐中国版历史版本pc_为什么选择Firefox,以及如何在PC上获取它?
  9. java模拟加速匀速减速_Android学习之 动画加速减速 匀速控制
  10. 清华学霸讲计算机,清华学霸退学再战高考,疯狂举动只因痴迷这个专业