机器学习算法工程师面试题及答案,个别没有写

1快速排序
2介绍下逻辑回归;损失函数;代价函数;加正则化项的作用。
https://blog.csdn.net/jk123vip/article/details/80591619
分类和回归是机器学习可以解决两大主要问题,从预测值的类型上看,连续变量预测的定量输出称为回归;离散变量预测的定性输出称为分类。例如:预测明天多少度,是一个回归任务;预测明天阴、晴、雨,就是一个分类任务。
线性回归

预测函数
在一维特征空间,线性回归是通过学习一条直线hθ(x)=θ0+θ1x1,使得这条直线尽可能拟合所有已有的看到的点y(观测数据),并希望未看到的数据(测试数据)也尽可能落在这条线上(泛化性能),hθ是预测值,y是实际值。

损失函数
那么怎样评价它对于观测到的数据点拟合得好坏呢?所以需要对我们做出的假设h进行评估,一般这个函数成为损失函数(loss function)
很直观的想法是希望预测值与实际值尽可能接近,即看预测值与实际值之间的均方误差是否最小,定义线性回归损失函数为
J(θ)=1/2m∑(hθ(x(i))−y(i))2
所以现在变成了一个优化问题,即找到要找到令损失函数J(θ)J最小的θ。定义均方误差有着非常好的几何含义,对应常用的欧式距离(Euclidean distance),基于均方误差最小化进行模型求解的方法称为“最小二乘法”(least square method)。
最小二乘法
最小二乘法是一种完全数学描述的方法,用矩阵表示J(θ)=1/2(Xθ−Y)2,展开并对其求偏导,令偏导∂J(θ)/∂θ=0即可得到所求的θ
θ=(XTX)−1XTY
然而现实任务中当特征数量大于样本数时,XTX不满秩,此时θ有多个解;而且当数据量大时,求矩阵的逆非常耗时;对于不可逆矩阵(特征之间不相互独立),这种正规方程方法是不能用的。所以,还可以采用梯度下降法,利用迭代的方式求解θ。

梯度下降法
梯度下降法是按下面的流程进行的:
1)首先对θ赋值,这个值可以是随机的,也可以让θ是一个全零的向量。
2)改变θ的值,使得θ按梯度下降的方向进行减少。

逻辑回归(Logistic Regression)
逻辑回归由于存在易于实现、解释性好以及容易扩展等优点,被广泛应用于点击率预估(CTR)、计算广告(CA)以及推荐系统(RS)等任务中。逻辑回归虽然名字叫做回归,但实际上却是一种分类学习方法。
线性回归完成的是回归拟合任务,而对于分类任务,我们同样需要一条线,但不是去拟合每个数据点,而是把不同类别的样本区分开来。

这样求出的θ3θ3和θ4θ4就会非常小,接近0,得到一个近似的二次函数。
一般来说,正规化背后的思路就是,如果我们的参数值对应一个较小值的话(参数值比较小),那么往往我们会得到一个形式更简单的假设。
但更一般地说,如果我们像惩罚θ3θ3和θ4θ4这样惩罚其它参数,那么我们往往可以得到一个相对较为简单的假设。
实际上,这些参数的值越小,通常对应于越光滑的函数,也就是更加简单的函数。因此就不易发生过拟合的问题。
假如我们有非常多的特征,我们并不知道其中哪些特征我们要惩罚,我们将对所有的特征进行惩罚,并且让代价函数最优化算法来选择这些惩罚的程度。我们需要修改代价函数,在后面添加一个正则项,收缩每个参数。

3激活函数,传统的激活函数和现在的激活函数有什么不同
https://blog.csdn.net/cyh_24/article/details/50593400
激活函数通常有如下一些性质:
非线性: 当激活函数是线性的时候,一个两层的神经网络就可以逼近基本上所有的函数了。但是,如果激活函数是恒等激活函数的时候(即f(x)=xf(x)=x),就不满足这个性质了,而且如果MLP使用的是恒等激活函数,那么其实整个网络跟单层神经网络是等价的。
可微性: 当优化方法是基于梯度的时候,这个性质是必须的。
单调性: 当激活函数是单调的时候,单层网络能够保证是凸函数。
f(x)≈xf(x)≈x: 当激活函数满足这个性质的时候,如果参数的初始化是random的很小的值,那么神经网络的训练将会很高效;如果不满足这个性质,那么就需要很用心的去设置初始值。
输出值的范围: 当激活函数输出值是 有限 的时候,基于梯度的优化方法会更加 稳定,因为特征的表示受有限权值的影响更显著;当激活函数的输出是 无限 的时候,模型的训练会更加高效,不过在这种情况小,一般需要更小的learning rate.
这些性质,也正是我们使用激活函数的原因!

  1. http://cs231n.github.io/neural-networks-1/
  2. https://zhuanlan.zhihu.com/p/21462488
  3. http://blog.csdn.net/cyh_24/article/details/50593400

4神经网络为什么能火起来

当数据量小的时候,神经网络的作用还没有彻底显示出来,但是,当带标签的数据量特别大的时候我们就会发现神经网络的准确率是稳定的比其他高。由图发现,很多模型在数据量大的时候就会基于水平值,因为这些模型无法处理海量的数据。但规模巨大的神经网络就可以再次提升准确率。为什么神经网络发展这么快,因为现在能获取的数据远远大于传统数据,CPU硬件也做的越来越好,深度学习的算法也有了很大的创新(算法创新可以提升迭代速度,更快的获得实验结果)。
5与早起的神经网络相比,现在的神经网络为什么可以拟合线性和非线性函数
样本变量不需要那么多,因为神经网络的信息存储能力有限,过多的样本会造成一些有用的信息被丢弃。如果样本数量过多,应增加隐层节点数或隐层数目,才能增强学习能力。一、隐层数一般认为,增加隐层数可以降低网络误差(也有文献认为不一定能有效降低),提高精度,但也使网络复杂化,从而增加了网络的训练时间和出现“过拟合”的倾向。一般来讲应设计神经网络应优先考虑3层网络(即有1个隐层)。一般地,靠增加隐层节点数来获得较低的误差,其训练效果要比增加隐层数更容易实现。对于没有隐层的神经网络模型,实际上就是一个线性或非线性(取决于输出层采用线性或非线性转换函数型式)回归模型。因此,一般认为,应将不含隐层的网络模型归入回归分析中,技术已很成熟,没有必要在神经网络理论中再讨论之。二、隐层节点数在BP 网络中,隐层节点数的选择非常重要,它不仅对建立的神经网络模型的性能影响很大,而且是训练时出现“过拟合”的直接原因,但是目前理论上还没有一种科学的和普遍的确定方法。 目前多数文献中提出的确定隐层节点数的计算公式都是针对训练样本任意多的情况,而且多数是针对最不利的情况,一般工程实践中很难满足,不宜采用。事实上,各种计算公式得到的隐层节点数有时相差几倍甚至上百倍。为尽可能避免训练时出现“过拟合”现象,保证足够高的网络性能和泛化能力,确定隐层节点数的最基本原则是:在满足精度要求的前提下取尽可能紧凑的结构,即取尽可能少的隐层节点数。研究表明,隐层节点数不仅与输入/输出层的节点数有关,更与需解决的问题的复杂程度和转换函数的型式以及样本数据的特性等因素有关。
https://blog.csdn.net/zkq_1986/article/details/52117095
6激活函数
https://blog.csdn.net/tyhj_sf/article/details/79932893
神经网络中的每个神经元节点接受上一层神经元的输出值作为本神经元的输入值,并将输入值传递给下一层,输入层神经元节点会将输入属性值直接传递给下一层(隐层或输出层)。在多层神经网络中,上层节点的输出和下层节点的输入之间具有一个函数关系,这个函数称为激活函数(又称激励函数)。

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

有哪些激活函数,都有什么性质和特点?
早期研究神经网络主要采用sigmoid函数或者tanh函数,输出有界,很容易充当下一层的输入。
近些年Relu函数及其改进型(如Leaky-ReLU、P-ReLU、R-ReLU等)在多层神经网络中应用比较多。下面我们来总结下这些激活函数:

特点:
它能够把输入的连续实值变换为0和1之间的输出,特别的,如果是非常大的负数,那么输出就是0;如果是非常大的正数,输出就是1.
缺点:
sigmoid函数曾经被使用的很多,不过近年来,用它的人越来越少了。主要是因为它固有的一些 缺点。
缺点1:在深度神经网络中梯度反向传递时导致梯度爆炸和梯度消失,其中梯度爆炸发生的概率非常小,而梯度消失发生的概率比较大。首先来看Sigmoid函数的导数,如下图所示:

原文:https://blog.csdn.net/tyhj_sf/article/details/79932893
7梯度下降,两个sample估计权重的,用SBB和所有的数据二者的区别

8K-means 怎么迭代的
K-means 算法的基本步骤:

1.从 n个数据对象任意选择 k 个对象作为初始聚类中心迭代
2.通过把每个点分配给最近的聚类中心,从而形成K个类 重新计算每个类的聚类中心
3.终止 如果计算后,聚类中心不发生改变

看图:仔细看每张图的变化 更易理解 (k = 2)

K-means 算法优点

算法框架清晰,简单,容易理解。
本算法确定的k个划分到达平方误差最小。当聚类是密集的,且类与类之间区别明显时,效果较好。
对于处理大数据集,这个算法是相对可伸缩和高效的,计算的复杂度为O(NKt),其中N是数据对象的数目,t是迭代的次数。一般来说,K<<N,t<<N 。
K-means 算法缺点
K-means算法中k是事先给定的,这个k值的选定是非常难以估计的。
算法的时间开销是非常大的。
K-means算法对异常数据很敏感。在计算质心的过程中,如果某个数据很异常,在计算均值的时候,会对结果影响非常大。
原文:https://blog.csdn.net/u011808673/article/details/81296623

9数据处理流程,特征提取方面的工作做过吗?
10CNN RNN
https://blog.csdn.net/lff1208/article/details/77717149
11聚类 什么是聚类
12逻辑回归是怎么进行分类的,空间和时间复杂度
13框架 tensorflow
14github 代码吃透 运行
15自然语言处理了解吗?

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章