a.使用具有权值分布Dm的训练数据集学习,得到基本分类器(选取让误差率最低的阈值来设计基本分类器):
其中,Zm是规范化因子,使得Dm+1成为一个概率分布:
从而得到最终分类器,如下:
17LSTM结构推导,为什么比RNN好?深度学习DL模型难推导forgetgate,inputgate,cellstate,hiddeninformation等的变化;因为LSTM有进有出且当前的cellinformaton是通过inputgate控制之后叠加的,RNN是叠乘,因此LSTM可以防止梯度消失或者爆炸
由于对于所有备选的c来说,对应的都是同一个w,所以它们的P(w)是相同的,因此我们只要最大化
即可。其中:
19请大致对比下plsa和LDA的区别。机器学习ML模型中等
20请简要说说EM算法。机器学习ML模型中等
E步:选取一组参数,求出在该参数下隐含变量的条件概率值;
M步:结合E步求出的隐含变量条件概率,求出似然函数下界函数(本质上是某个期望函数)的最大值。
重复上面2步直至收敛。
公式如下所示:
M步公式中下界函数的推导过程:
EM算法一个常见的例子就是GMM模型,每个样本都有可能由k个高斯产生,只不过由每个高斯产生的概率不同而已,因此每个样本都有对应的高斯分布(k个中的某一个),此时的隐含变量就是每个样本对应的某个高斯分布。
GMM的E步公式如下(计算每个样本对应每个高斯的概率):
更具体的计算公式为:
M步公式如下(计算每个高斯的比重,均值,方差这3个参数):
22防止过拟合的方法。机器学习ML基础易过拟合的原因是算法的学习能力过强;一些假设条件(如样本独立同分布)可能是不成立的;训练样本过少不能对整个空间进行分布估计。处理方法:
如下图所示,蓝色的圈圈图代表的是两个特征的等高线。其中左图两个特征X1和X2的区间相差非常大,X1区间是[0,2000],X2区间是[1,5],其所形成的等高线非常尖。当使用梯度下降法寻求最优解时,很有可能走“之字型”路线(垂直等高线走),从而导致需要迭代很多次才能收敛;
而右图对两个原始特征进行了归一化,其对应的等高线显得很圆,在梯度下降进行求解时能较快的收敛。
因此如果机器学习模型使用梯度下降法求最优解时,归一化往往非常有必要,否则很难收敛甚至不能收敛。
一些分类器需要计算样本之间的距离(如欧氏距离),例如KNN。如果一个特征值域范围非常大,那么距离计算就主要取决于这个特征,从而与实际情况相悖(比如这时实际情况是值域范围小的特征更重要)。
这种归一化方法比较适用在数值比较集中的情况。这种方法有个缺陷,如果max和min不稳定,很容易使得归一化结果不稳定,使得后续使用效果也不稳定。实际使用中可以用经验常量值来替代max和min。
经过处理的数据符合标准正态分布,即均值为0,标准差为1,其转化函数为:
其中μ为所有样本数据的均值,σ为所有样本数据的标准差。
经常用在数据分化比较大的场景,有些数值很大,有些很小。通过一些数学函数,将原始值进行映射。该方法包括log、指数,正切等。需要根据数据分布的情况,决定非线性函数的曲线,比如log(V,2)还是log(V,10)等。
24哪些机器学习算法不需要做归一化处理?机器学习ML基础易概率模型不需要归一化,因为它们不关心变量的值,而是关心变量的分布和变量之间的条件概率,如决策树、rf。而像adaboost、svm、lr、KNN、KMeans之类的最优化问题就需要归一化。@管博士:我理解归一化和标准化主要是为了使计算更方便比如两个变量的量纲不同可能一个的数值远大于另一个那么他们同时作为变量的时候可能会造成数值计算的问题,比如说求矩阵的逆可能很不精确或者梯度下降法的收敛比较困难,还有如果需要计算欧式距离的话可能量纲也需要调整所以我估计lr和knn保准话一下应该有好处。至于其他的算法我也觉得如果变量量纲差距很大的话先标准化一下会有好处。@寒小阳:一般我习惯说树形模型,这里说的概率模型可能是差不多的意思。
25对于树形结构为什么不需要归一化?机器学习ML基础易答:数值缩放,不影响分裂点位置。因为第一步都是按照特征值进行排序的,排序的顺序不变,那么所属的分支以及分裂点就不会有不同。对于线性模型,比如说LR,我有两个特征,一个是(0,1)的,一个是(0,10000)的,这样运用梯度下降时候,损失等高线是一个椭圆的形状,这样我想迭代到最优点,就需要很多次迭代,但是如果进行了归一化,那么等高线就是圆形的,那么SGD就会往原点迭代,需要的迭代次数较少。另外,注意树模型是不能进行梯度下降的,因为树模型是阶跃的,阶跃点是不可导的,并且求导没意义,所以树模型(回归树)寻找最优点事通过寻找最优分裂点完成的。
补充:其实本质是由于loss函数不同造成的,SVM用了欧拉距离,如果一个特征很大就会把其他的维度dominated。而LR可以通过权重调整使得损失函数不变。
在工业界,很少直接将连续值作为逻辑回归模型的特征输入,而是将连续特征离散化为一系列0、1特征交给逻辑回归模型,这样做的优势有以下几点:
0.离散特征的增加和减少都很容易,易于模型的快速迭代;
1.稀疏向量内积乘法运算速度快,计算结果方便存储,容易扩展;
2.离散化后的特征对异常数据有很强的鲁棒性:比如一个特征是年龄>30是1,否则0。如果特征没有离散化,一个异常数据“年龄300岁”会给模型造成很大的干扰;
3.逻辑回归属于广义线性模型,表达能力受限;单变量离散化为N个后,每个变量有单独的权重,相当于为模型引入了非线性,能够提升模型表达能力,加大拟合;
4.离散化后可以进行特征交叉,由M+N个变量变为M*N个变量,进一步引入非线性,提升表达能力;
5.特征离散化后,模型会更稳定,比如如果对用户年龄离散化,20-30作为一个区间,不会因为一个用户年龄长了一岁就变成一个完全不同的人。当然处于区间相邻处的样本会刚好相反,所以怎么划分区间是门学问;
6.特征离散化以后,起到了简化了逻辑回归模型的作用,降低了模型过拟合的风险。
李沐曾经说过:模型是使用离散特征还是连续特征,其实是一个“海量离散特征+简单模型”同“少量连续特征+复杂模型”的权衡。既可以离散化用线性模型,也可以用连续特征加深度学习。就看是喜欢折腾特征还是折腾模型了。通常来说,前者容易,而且可以n个人一起并行做,有成功经验;后者目前看很赞,能走多远还须拭目以待。
从名字上来看,熵给人一种很玄乎,不知道是啥的感觉。其实,熵的定义很简单,即用来表示随机变量的不确定性。之所以给人玄乎的感觉,大概是因为为何要取这样的名字,以及怎么用。
熵的概念最早起源于物理学,用于度量一个热力学系统的无序程度。在信息论里面,熵是对不确定性的测量。
事实上,熵的英文原文为entropy,最初由德国物理学家鲁道夫·克劳修斯提出,其表达式为:
它表示一个系系统在不受外部干扰时,其内部最稳定的状态。后来一中国学者翻译entropy时,考虑到entropy是能量Q跟温度T的商,且跟火有关,便把entropy形象的翻译成“熵”。
我们知道,任何粒子的常态都是随机运动,也就是"无序运动",如果让粒子呈现"有序化",必须耗费能量。所以,温度(热能)可以被看作"有序化"的一种度量,而"熵"可以看作是"无序化"的度量。
如果没有外部能量输入,封闭系统趋向越来越混乱(熵越来越大)。比如,如果房间无人打扫,不可能越来越干净(有序化),只可能越来越乱(无序化)。而要让一个系统变得更有序,必须有外部能量的输入。
33熵、联合熵、条件熵、相对熵、互信息的定义。机器学习ML基础中等
联合熵:两个随机变量X,Y的联合分布,可以形成联合熵JointEntropy,用H(X,Y)表示。条件熵:在随机变量X发生的前提下,随机变量Y发生所新带来的熵定义为Y的条件熵,用H(Y|X)表示,用来衡量在已知随机变量X的条件下随机变量Y的不确定性。
且有此式子成立:H(Y|X)=H(X,Y)–H(X),整个式子表示(X,Y)发生所包含的熵减去X单独发生包含的熵。至于怎么得来的请看推导:
简单解释下上面的推导过程。整个式子共6行,其中
相对熵:又称互熵,交叉熵,鉴别信息,Kullback熵,Kullback-Leible散度等。设p(x)、q(x)是X中取值的两个概率分布,则p对q的相对熵是:
在一定程度上,相对熵可以度量两个随机变量的“距离”,且有D(p||q)≠D(q||p)。另外,值得一提的是,D(p||q)是必然大于等于0的。
互信息:两个随机变量X,Y的互信息定义为X,Y的联合分布和各自独立分布乘积的相对熵,用I(X,Y)表示:
且有I(X,Y)=D(P(X,Y)||P(X)P(Y))。下面,咱们来计算下H(Y)-I(X,Y)的结果,如下:
34什么是最大熵。机器学习ML基础易
因此,也就引出了最大熵模型的本质,它要解决的问题就是已知X,计算Y的概率,且尽可能让Y的概率最大(实践中,X可能是某单词的上下文信息,Y是该单词翻译成me,I,us、we的各自概率),从而根据已有信息,尽可能最准确的推测未知信息,这就是最大熵模型所要解决的问题。
相当于已知X,计算Y的最大可能的概率,转换成公式,便是要最大化下述式子H(Y|X):
且满足以下4个约束条件:
简单说下有监督学习和无监督学习的区别。机器学习ML基础易有监督学习:对具有标记的训练样本进行学习,以尽可能对训练样本集外的数据进行分类预测。(LR,SVM,BP,RF,GBDT)无监督学习:对未标记的样本进行训练学习,比发现这些样本中的结构知识。(KMeans,DL)
35了解正则化么。机器学习ML基础易正则化是针对过拟合而提出的,以为在求解模型最优的是一般优化最小的经验风险,现在在该经验风险上加入模型复杂度这一项(正则化项是模型参数向量的范数),并使用一个rate比率来权衡模型复杂度与以往经验风险的权重,如果模型复杂度越高,结构化的经验风险会越大,现在的目标就变为了结构经验风险的最优化,可以防止模型训练过度复杂,有效的降低过拟合的风险。奥卡姆剃刀原理,能够很好的解释已知数据并且十分简单才是最好的模型。
37线性分类器与非线性分类器的区别以及优劣。机器学习ML基础易@伟祺,线性和非线性是针对,模型参数和输入特征来讲的;比如输入x,模型y=ax+ax^2那么就是非线性模型,如果输入是x和X^2则模型是线性的。线性分类器可解释性好,计算复杂度较低,不足之处是模型的拟合效果相对弱些。非线性分类器效果拟合能力较强,不足之处是数据量不足容易过拟合、计算复杂度高、可解释性不好。常见的线性分类器有:LR,贝叶斯分类,单层感知机、线性回归常见的非线性分类器:决策树、RF、GBDT、多层感知机SVM两种都有(看线性核还是高斯核)
40简单说说贝叶斯定理。机器学习ML模型易在引出贝叶斯定理之前,先学习几个定义:
接着,考虑一个问题:P(A|B)是在B发生的情况下A发生的可能性。
贝叶斯定理便是基于下述贝叶斯公式:
上述公式的推导其实非常简单,就是从条件概率推出。
sigmoid的函数表达式如下
因此,sigmoid函数g(z)的图形表示如下(横轴表示定义域z,纵轴表示值域g(z)):
也就是说,sigmoid函数的功能是相当于把一个实数压缩至0到1之间。当z是非常大的正数时,g(z)会趋近于1,而z是非常小的负数时,则g(z)会趋近于0。
压缩至0到1有何用处呢?用处是这样一来便可以把激活函数看作一种“分类的概率”,比如激活函数的输出为0.9的话便可以解释为90%的概率为正样本。
举个例子,如下图(图引自Stanford机器学习公开课)
上图所展示的是取区域最大,即上图左边部分中左上角2x2的矩阵中6最大,右上角2x2的矩阵中8最大,左下角2x2的矩阵中3最大,右下角2x2的矩阵中4最大,所以得到上图右边部分的结果:6834。很简单不是?
54简述下什么是生成对抗网络。深度学习DL扩展中GAN之所以是对抗的,是因为GAN的内部是竞争关系,一方叫generator,它的主要工作是生成图片,并且尽量使得其看上去是来自于训练样本的。另一方是discriminator,其目标是判断输入图片是否属于真实训练样本。更直白的讲,将generator想象成假币制造商,而discriminator是警察。generator目的是尽可能把假币造的跟真的一样,从而能够骗过discriminator,即生成样本并使它看上去好像来自于真实训练样本一样。
56说说梯度下降法。机器学习ML基础中
我们用X1,X2..Xn去描述feature里面的分量,比如x1=房间的面积,x2=房间的朝向等等,我们可以做出一个估计函数:
θ在这儿称为参数,在这儿的意思是调整feature中每个分量的影响力,就是到底是房屋的面积更重要还是房屋的地段更重要。为了如果我们令X0=1,就可以用向量的方式来表示了:
我们程序也需要一个机制去评估我们θ是否比较好,所以说需要对我们做出的h函数进行评估,一般这个进行评估的函数称为损失函数(lossfunction),描述h函数不好的程度,在下面,我们称这个函数为J函数
在这儿我们可以做出下面的一个损失函数:
换言之,我们把对x(i)的估计值与真实值y(i)差的平方和作为损失函数,前面乘上的1/2是为了在求导的时候,这个系数就不见了。
如何调整θ以使得J(θ)取得最小值有很多方法,其中有最小二乘法(minsquare),是一种完全是数学描述的方法,另外一种就是梯度下降法。
梯度下降法的算法流程如下:
1)首先对θ赋值,这个值可以是随机的,也可以让θ是一个全零的向量。
2)改变θ的值,使得J(θ)按梯度下降的方向进行减少。
为了描述的更清楚,给出下面的图:
在上面提到梯度下降法的第一步是给θ给一个初值,假设随机给的初值是在图上的十字点。
然后我们将θ按照梯度下降的方向进行调整,就会使得J(θ)往更低的方向进行变化,如下图所示,算法的结束将是在θ下降到无法继续下降为止。
上面这张图就是描述的一个局部最小点,这是我们重新选择了一个初始点得到的,看来我们这个算法将会在很大的程度上被初始点的选择影响而陷入局部最小点。
下面我将用一个例子描述一下梯度减少的过程,对于我们的函数J(θ)求偏导J:
下面是更新的过程,也就是θi会向着梯度最小的方向进行减少。θi表示更新之前的值,-后面的部分表示按梯度方向减少的量,α表示步长,也就是每次按照梯度减少的方向变化多少。
用更简单的数学语言进行描述步骤2)是这样的:
最好的办法就是走一步算一步,先用脚向四周各个方向都迈出一步,试探一下周围的地势,用脚感觉下哪个方向是下降最大的方向。换言之,每走到一个位置的时候,求解当前位置的梯度,沿着梯度的负方向(当前最陡峭的位置向下)走一步。就这样,每要走一步都根据上一步所在的位置选择当前最陡峭最快下山的方向走下一步,一步步走下去,一直走到我们感觉已经到了山脚。当然这样走下去,我们走到的可能并不一定是真正的山脚,而只是走到了某一个局部的山峰低处。换句话说,梯度下降不一定能够找到全局的最优解,也有可能只是一个局部最优解。当然,如果损失函数是凸函数,梯度下降法得到的解就一定是全局最优解。
梯度上升和梯度下降其实是一个思想,上式中权值更新的+号改为-号也就是梯度上升了。梯度上升用来求函数的最大值,梯度下降求最小值。
这样每次移动的方向确定了,但每次移动的距离却不知道。这个可以由步长(也称学习率)来确定,记为α。这样权值调整可表示为:
总之,梯度下降法的优化思想是用当前位置负梯度方向作为搜索方向,因为该方向为当前位置的最快下降方向,所以也被称为是“最速下降法”。最速下降法越接近目标值,步长越小,前进越慢。梯度下降法的搜索迭代示意图如下图所示:
普通的梯度下降算法在更新回归系数时要遍历整个数据集,是一种批处理方法,这样训练数据特别忙庞大时,可能出现如下问题:
1)收敛过程可能非常慢;
2)如果误差曲面上有多个局极小值,那么不能保证这个过程会找到全局最小值。
为了解决上面的问题,实际中我们应用的是梯度下降的一种变体被称为随机梯度下降。
上面公式中的误差是针对于所有训练样本而得到的,而随机梯度下降的思想是根据每个单独的训练样本来更新权值,这样我们上面的梯度公式就变成了:
经过推导后,我们就可以得到最终的权值更新的公式:
有了上面权重的更新公式后,我们就可以通过输入大量的实例样本,来根据我们预期的结果不断地调整权值,从而最终得到一组权值使得我们的算法能够对一个新的样本输入得到正确的或无限接近的结果。
这里做一个对比
设代价函数为
参数更新为:
i是样本编号下标,j是样本维数下标,m为样例数目,n为特征数目。所以更新一个θj需要遍历整个样本集
i是样本编号下标,j是样本维数下标,m为样例数目,n为特征数目。所以更新一个θj只需要一个样本就可以。
SGD各优化方法在损失曲面上的表现
从上图可以看出,Adagrad、Adadelta与RMSprop在损失曲面上能够立即转移到正确的移动方向上达到快速的收敛。而Momentum与NAG会导致偏离(off-track)。同时NAG能够在偏离之后快速修正其路线,因为其根据梯度修正来提高响应性。
SGD各优化方法在损失曲面鞍点处上的表现
59牛顿法和梯度下降法有什么不同。机器学习ML基础中
牛顿法是一种在实数域和复数域上近似求解方程的方法。方法使用函数f(x)的泰勒级数的前面几项来寻找方程f(x)=0的根。牛顿法最大的特点就在于它的收敛速度很快。
首先,选择一个接近函数f(x)零点的x0,计算相应的f(x0)和切线斜率f'(x0)(这里f'表示函数f的导数)。然后我们计算穿过点(x0,f(x0))并且斜率为f'(x0)的直线和x轴的交点的x坐标,也就是求如下方程的解:
我们将新求得的点的x坐标命名为x1,通常x1会比x0更接近方程f(x)=0的解。因此我们现在可以利用x1开始下一轮迭代。迭代公式可化简为如下所示:
已经证明,如果f'是连续的,并且待求的零点x是孤立的,那么在零点x周围存在一个区域,只要初始值x0位于这个邻近区域内,那么牛顿法必定收敛。并且,如果f'(x)不为0,那么牛顿法将具有平方收敛的性能.粗略的说,这意味着每迭代一次,牛顿法结果的有效数字将增加一倍。
由于牛顿法是基于当前位置的切线来确定下一次的位置,所以牛顿法又被很形象地称为是"切线法"。牛顿法的搜索路径(二维情况)如下图所示:
关于牛顿法和梯度下降法的效率对比:
a)从收敛速度上看,牛顿法是二阶收敛,梯度下降是一阶收敛,前者牛顿法收敛速度更快。但牛顿法仍然是局部算法,只是在局部上看的更细致,梯度法仅考虑方向,牛顿法不但考虑了方向还兼顾了步子的大小,其对步长的估计使用的是二阶逼近。
b)根据wiki上的解释,从几何上说,牛顿法就是用一个二次曲面去拟合你当前所处位置的局部曲面,而梯度下降法是用一个平面去拟合当前的局部曲面,通常情况下,二次曲面的拟合会比平面更好,所以牛顿法选择的下降路径会更符合真实的最优下降路径。
注:红色的牛顿法的迭代路径,绿色的是梯度下降法的迭代路径。
牛顿法的优缺点总结:
优点:二阶收敛,收敛速度快;
缺点:牛顿法是一种迭代算法,每一步都需要求解目标函数的Hessian矩阵的逆矩阵,计算比较复杂。
什么是拟牛顿法(Quasi-NewtonMethods)?机器学习ML基础中
拟牛顿法的本质思想是改善牛顿法每次需要求解复杂的Hessian矩阵的逆矩阵的缺陷,它使用正定矩阵来近似Hessian矩阵的逆,从而简化了运算的复杂度。拟牛顿法和最速下降法一样只要求每一步迭代时知道目标函数的梯度。通过测量梯度的变化,构造一个目标函数的模型使之足以产生超线性收敛性。这类方法大大优于最速下降法,尤其对于困难的问题。另外,因为拟牛顿法不需要二阶导数的信息,所以有时比牛顿法更为有效。如今,优化软件中包含了大量的拟牛顿算法用来解决无约束,约束,和大规模的优化问题。
具体步骤:
拟牛顿法的基本思想如下。首先构造目标函数在当前迭代xk的二次模型:
我们口头中经常说:一般来说,平均来说。如平均来说,不吸烟的健康优于吸烟者,之所以要加“平均”二字,是因为凡事皆有例外,总存在某个特别的人他吸烟但由于经常锻炼所以他的健康状况可能会优于他身边不吸烟的朋友。而最小二乘法的一个最简单的例子便是算术平均。
最小二乘法(又称最小平方法)是一种数学优化技术。它通过最小化误差的平方和寻找数据的最佳函数匹配。利用最小二乘法可以简便地求得未知的数据,并使得这些求得的数据与实际数据之间误差的平方和为最小。用函数表示为:
使误差「所谓误差,当然是观察值与实际真实值的差量」平方和达到最小以寻求估计值的方法,就叫做最小二乘法,用最小二乘法得到的估计,叫做最小二乘估计。当然,取平方和作为目标函数只是众多可取的方法之一。
最小二乘法的一般形式可表示为:
有效的最小二乘法是勒让德在1805年发表的,基本思想就是认为测量中有误差,所以所有方程的累积误差为
我们求解出导致累积误差最小的参数即可:
勒让德在论文中对最小二乘法的优良性做了几点说明:
对于最后一点,从统计学的角度来看是很重要的一个性质。推理如下:假设真值为,为n次测量值,每次测量的误差为,按最小二乘法,误差累积为
这里是一些关键点:Python是解释型语言。这意味着不像C和其他语言,Python运行前不需要编译。其他解释型语言包括PHP和Ruby。
对于给定的输入X,由f(X)给出相应的输出Y,这个输出的预测值f(X)与真实值Y可能一致也可能不一致(要知道,有时损失或误差是不可避免的),用一个损失函数来度量预测错误的程度。损失函数记为L(Y,f(X))。
常用的损失函数有以下几种(基本引用自《统计学习方法》):
70简单介绍下logistics回归?机器学习ML模型易
Logistic回归目的是从特征学习出一个0/1分类模型,而这个模型是将特性的线性组合作为自变量,由于自变量的取值范围是负无穷到正无穷。因此,使用logistic函数(或称作sigmoid函数)将自变量映射到(0,1)上,映射后的值被认为是属于y=1的概率。
假设函数
从而,当我们要判别一个新来的特征属于哪个类时,只需求即可,若大于0.5就是y=1的类,反之属于y=0类。
此外,只和有关,>0,那么,而g(z)只是用来映射,真实的类别决定权还是在于。再者,当时,=1,反之=0。如果我们只从出发,希望模型达到的目标就是让训练数据中y=1的特征,而是y=0的特征。Logistic回归就是要学习得到,使得正例的特征远大于0,负例的特征远小于0,而且要在全部训练实例上达到这个目标。
进一步,可以将假设函数中的g(z)做一个简化,将其简单映射到y=-1和y=1上。映射关系如下:
AlexNet(2012年)
ZFNet(2013年)
VGGNet(2014年)
GoogLeNet(2015年)
微软ResNet(2015年)
区域CNN(R-CNN-2013年,FastR-CNN-2015年,FasterR-CNN-2015年)
生成对抗网络(2014年)
生成图像描述(2014年)
空间转化器网络(2015年)
一切都从这里开始(尽管有些人会说是YannLeCun1998年发表的那篇论文才真正开启了一个时代)。这篇论文,题目叫做“ImageNetClassificationwithDeepConvolutionalNetworks”,迄今被引用6184次,被业内普遍视为行业最重要的论文之一。AlexKrizhevsky、IlyaSutskever和GeoffreyHinton创造了一个“大型的深度卷积神经网络”,赢得了2012ILSVRC(2012年ImageNet大规模视觉识别挑战赛)。稍微介绍一下,这个比赛被誉为计算机视觉的年度奥林匹克竞赛,全世界的团队相聚一堂,看看是哪家的视觉模型表现最为出色。2012年是CNN首次实现Top5误差率15.4%的一年(Top5误差率是指给定一张图像,其标签不在模型认为最有可能的5个结果中的几率),当时的次优项误差率为26.2%。这个表现不用说震惊了整个计算机视觉界。可以说,是自那时起,CNN才成了家喻户晓的名字。
论文中,作者讨论了网络的架构(名为AlexNet)。相比现代架构,他们使用了一种相对简单的布局,整个网络由5层卷积层组成,最大池化层、退出层(dropoutlayer)和3层全卷积层。网络能够对1000种潜在类别进行分类。
AlexNet架构:看上去有些奇怪,因为使用了两台GPU训练,因而有两股“流”。使用两台GPU训练的原因是计算量太大,只能拆开来。
要点
使用ImageNet数据训练网络,ImageNet数据库含有1500多万个带标记的图像,超过2.2万个类别。
使用了图像转化(imagetranslation)、水平反射(horizontalreflection)和补丁提取(patchextraction)这些数据增强技术。
用dropout层应对训练数据过拟合的问题。
使用批处理随机梯度下降训练模型,注明动量衰减值和权重衰减值。
使用两台GTX580GPU,训练了5到6天
为什么重要
Krizhevsky、Sutskever和Hinton2012年开发的这个神经网络,是CNN在计算机视觉领域的一大亮相。这是史上第一次有模型在ImageNet数据库表现这么好,ImageNet数据库难度是出了名的。论文中提出的方法,比如数据增强和dropout,现在也在使用,这篇论文真正展示了CNN的优点,并且以破纪录的比赛成绩实打实地做支撑。
在这篇题为“VisualizingandUnderstandingConvolutionalNeuralNetworks”的论文中,Zeiler和Fergus从大数据和GPU计算力让人们重拾对CNN的兴趣讲起,讨论了研究人员对模型内在机制知之甚少,一针见血地指出“发展更好的模型实际上是不断试错的过程”。虽然我们现在要比3年前知道得多一些了,但论文所提出的问题至今仍然存在!这篇论文的主要贡献在于提出了一个比AlexNet稍微好一些的模型并给出了细节,还提供了一些制作可视化特征图值得借鉴的方法。
除了一些小的修改,整体架构非常类似AlexNet。
AlexNet训练用了1500万张图片,而ZFNet只用了130万张。
随着网络增大,使用的滤波器数量增多。
利用ReLU的激活函数,将交叉熵代价函数作为误差函数,使用批处理随机梯度下降进行训练。
使用一台GTX580GPU训练了12天。
开发可视化技术“解卷积网络”(DeconvolutionalNetwork),有助于检查不同的特征激活和其对输入空间关系。名字之所以称为“deconvnet”,是因为它将特征映射到像素(与卷积层恰好相反)。
DeConvNet
DeConvNet工作的基本原理是,每层训练过的CNN后面都连一层“deconvet”,它会提供一条返回图像像素的路径。输入图像进入CNN之后,每一层都计算激活。然而向前传递。现在,假设我们想知道第4层卷积层某个特征的激活值,我们将保存这个特征图的激活值,并将这一层的其他激活值设为0,再将这张特征图作为输入送入deconvnet。Deconvnet与原来的CNN拥有同样的滤波器。输入经过一系列unpool(maxpooling倒过来),修正,对前一层进行过滤操作,直到输入空间满。
这一过程背后的逻辑在于,我们想要知道是激活某个特征图的是什么结构。下面来看第一层和第二层的可视化。
ConvNet的第一层永远是低层特征检测器,在这里就是对简单的边缘、颜色进行检测。第二层就有比较圆滑的特征了。再来看第三、第四和第五层。
这些层展示出了更多的高级特征,比如狗的脸和鲜花。值得一提的是,在第一层卷积层后面,我们通常会跟一个池化层将图像缩小(比如将32x32x32变为16x16x3)。这样做的效果是加宽了第二层看原始图像的视野。更详细的内容可以阅读论文。
ZFNet不仅是2013年比赛的冠军,还对CNN的运作机制提供了极好的直观信息,展示了更多提升性能的方法。论文所描述的可视化方法不仅有助于弄清CNN的内在机理,也为优化网络架构提供了有用的信息。Deconv可视化方法和occlusion实验也让这篇论文成了我个人的最爱。
VGGNet(2015年)
简单、有深度,这就是2014年错误率7.3%的模型VGGNet(不是ILSVRC2014冠军)。牛津大学的KarenSimonyan和AndrewZissermanMainPoints创造了一个19层的CNN,严格使用3x3的过滤器(stride=1,pad=1)和2x2maxpooling层(stride=2)。简单吧
这里使用3x3的滤波器和AlexNet在第一层使用11x11的滤波器和ZFNet7x7的滤波器作用完全不同。作者认为两个3x3的卷积层组合可以实现5x5的有效感受野。这就在保持滤波器尺寸较小的同时模拟了大型滤波器,减少了参数。此外,有两个卷积层就能够使用两层ReLU。
3卷积层具有7x7的有效感受野。
每个maxpool层后滤波器的数量增加一倍。进一步加强了缩小空间尺寸,但保持深度增长的想法。
图像分类和定位任务都运作良好。
使用Caffe工具包建模。
训练中使用scalejittering的数据增强技术。
每层卷积层后使用ReLU层和批处理梯度下降训练。
使用4台英伟达TitanBlackGPU训练了两到三周。
在我看来,VGGNet是最重要的模型之一,因为它再次强调CNN必须够深,视觉数据的层次化表示才有用。深的同时结构简单。
理解了我们刚才所说的神经网络架构中的简化的概念了吗通过推出Inception模型,谷歌从某种程度上把这一概念抛了出来。GoogLeNet是一个22层的卷积神经网络,在2014年的ILSVRC2014上凭借6.7%的错误率进入Top5。据我所知,这是第一个真正不使用通用方法的卷积神经网络架构,传统的卷积神经网络的方法是简单堆叠卷积层,然后把各层以序列结构堆积起来。论文的作者也强调,这种新的模型重点考虑了内存和能量消耗。这一点很重要,我自己也会经常忽略:把所有的层都堆叠、增加大量的滤波器,在计算和内存上消耗很大,过拟合的风险也会增加。
换一种方式看GoogLeNet:
Inception模型
第一次看到GoogLeNet的构造时,我们立刻注意到,并不是所有的事情都是按照顺序进行的,这与此前看到的架构不一样。我们有一些网络,能同时并行发生反应。
这个盒子被称为Inception模型。可以近距离地看看它的构成。
底部的绿色盒子是我们的输入层,顶部的是输出层(把这张图片向右旋转90度,你会看到跟展示了整个网络的那张图片相对应的模型)。基本上,在一个传统的卷积网络中的每一层中,你必须选择操作池还是卷积操作(还要选择滤波器的大小)。Inception模型能让你做到的就是并行地执行所有的操作。事实上,这就是作者构想出来的最“初始”的想法。
现在,来看看它为什么起作用。它会导向许多不同的结果,我们会最后会在输出层体积上获得极端大的深度通道。作者处理这个问题的方法是,在3X3和5X5层前,各自增加一个1X1的卷积操作。1X1的卷积(或者网络层中的网络),提供了一个减少维度的方法。比如,我们假设你拥有一个输入层,体积是100x100x60(这并不定是图像的三个维度,只是网络中每一层的输入)。增加20个1X1的卷积滤波器,会让你把输入的体积减小到100X100X20。这意味着,3X3层和5X5层不需要处理输入层那么大的体积。这可以被认为是“池特征”(poolingoffeature),因为我们正在减少体积的高度,这和使用常用的最大池化层(maxpoolinglayers)减少宽度和长度类似。另一个需要注意的是,这些1X1的卷积层后面跟着的是ReLU单元,这肯定不会有害。
你也许会问,“这个架构有什么用”这么说吧,这个模型由一个网络层中的网络、一个中等大小的过滤卷积、一个大型的过滤卷积、一个操作池(poolingoperation)组成。网络卷积层中的网络能够提取输入体积中的每一个细节中的信息,同时5x5的滤波器也能够覆盖大部分接受层的的输入,进而能提起其中的信息。你也可以进行一个池操作,以减少空间大小,降低过度拟合。在这些层之上,你在每一个卷积层后都有一个ReLU,这能改进网络的非线性特征。基本上,网络在执行这些基本的功能时,还能同时考虑计算的能力。这篇论文还提供了更高级别的推理,包括的主题有稀疏和紧密联结(见论文第三和第四节)。
整个架构中使用了9个Inception模型,总共超过100层。这已经很深了……没有使用完全连接的层。他们使用一个平均池代替,从7x7x1024的体积降到了1x1x1024,这节省了大量的参数。比AlexNet的参数少了12X在测试中,相同图像的多个剪裁建立,然后填到网络中,计算softmaxprobabilities的均值,然后我们可以获得最后的解决方案。在感知模型中,使用了R-CNN中的概念。Inception有一些升级的版本(版本6和7),“少数高端的GPU”一周内就能完成训练。
GoogLeNet是第一个引入了“CNN各层不需要一直都按顺序堆叠”这一概念的模型。用Inception模型,作者展示了一个具有创造性的层次机构,能带来性能和计算效率的提升。这篇论文确实为接下来几年可能会见到的令人惊叹的架构打下了基础。
想象一个深度CNN架构,再深、再深、再深,估计都还没有ILSVRC2015冠军,微软的152层ResNet架构深。除了在层数上面创纪录,ResNet的错误率也低得惊人,达到了3.6%,人类都大约在5%~10%的水平。
只有3.6%的误差率,这应该足以说服你。ResNet模型是目前最好的CNN架构,而且是残差学习理念的一大创新。从2012年起,错误率逐年下降,我怀疑到ILSVRC2016,是否还会一直下降。我相信,我们现在堆放更多层将不会实现性能的大幅提升。我们必须要创造新的架构。
区域CNN:R-CNN(2013年)、FastR-CNN(2015年)、FasterR-CNN(2015年)
R-CNN的目标是解决物体识别的难题。在获得特定的一张图像后,我们希望能够绘制图像中所有物体的边缘。这一过程可以分为两个组成部分,一个是区域建议,另一个是分类。
论文的作者强调,任何分类不可知区域的建议方法都应该适用。SelectiveSearch专用于RCNN。SelectiveSearch的作用是聚合2000个不同的区域,这些区域有最高的可能性会包含一个物体。在我们设计出一系列的区域建议之后,这些建议被汇合到一个图像大小的区域,能被填入到经过训练的CNN(论文中的例子是AlexNet),能为每一个区域提取出一个对应的特征。这个向量随后被用于作为一个线性SVM的输入,SVM经过了每一种类型和输出分类训练。向量还可以被填入到一个有边界的回归区域,获得最精准的一致性。
非极值压抑后被用于压制边界区域,这些区域相互之间有很大的重复。
FastR-CNN
原始模型得到了改进,主要有三个原因:训练需要多个步骤,这在计算上成本过高,而且速度很慢。FastR-CNN通过从根本上在不同的建议中分析卷积层的计算,同时打乱生成区域建议的顺利以及运行CNN,能够快速地解决问题。
FasterR-CNN
FasterR-CNN的工作是克服R-CNN和FastR-CNN所展示出来的,在训练管道上的复杂性。作者在最后一个卷积层上引入了一个区域建议网络(RPN)。这一网络能够只看最后一层的特征就产出区域建议。从这一层面上来说,相同的R-CNN管道可用。
能够识别出一张图像中的某一个物体是一方面,但是,能够识别物体的精确位置对于计算机知识来说是一个巨大的飞跃。更快的R-CNN已经成为今天标准的物体识别程序。
生成对抗网络(2015年)
按照YannLeCun的说法,生成对抗网络可能就是深度学习下一个大突破。假设有两个模型,一个生成模型,一个判别模型。判别模型的任务是决定某幅图像是真实的(来自数据库),还是机器生成的,而生成模型的任务则是生成能够骗过判别模型的图像。这两个模型彼此就形成了“对抗”,发展下去最终会达到一个平衡,生成器生成的图像与真实的图像没有区别,判别器无法区分两者。
左边一栏是数据库里的图像,也即真实的图像,右边一栏是机器生成的图像,虽然肉眼看上去基本一样,但在CNN看起来却十分不同。
听上去很简单,然而这是只有在理解了“数据内在表征”之后才能建立的模型,你能够训练网络理解真实图像和机器生成的图像之间的区别。因此,这个模型也可以被用于CNN中做特征提取。此外,你还能用生成对抗模型制作以假乱真的图片。
把CNN和RNN结合在一起会发生什么AndrejKarpathy和李飞飞写的这篇论文探讨了结合CNN和双向RNN生成不同图像区域的自然语言描述问题。简单说,这个模型能够接收一张图片,然后输出
很神奇吧。传统CNN,训练数据中每幅图像都有单一的一个标记。这篇论文描述的模型则是每幅图像都带有一句话(或图说)。这种标记被称为弱标记,使用这种训练数据,一个深度神经网络“推断句子中的部分与其描述的区域之间的潜在对齐(latentalignment)”,另一个神经网络将图像作为输入,生成文本的描述。
空间转换器网络(2015年)
最后,让我们来看该领域最近的一篇论文。本文是谷歌DeepMind的一个团队在一年前写的。这篇论文的主要贡献是介绍了空间变换器(SpatialTransformer)模块。基本思路是,这个模块会转变输入图像,使随后的层可以更轻松地进行分类。作者试图在图像到达特定层前改变图像,而不是更改主CNN架构本身。该模块希望纠正两件事:姿势标准化(场景中物体倾斜或缩放)和空间注意力(在密集的图像中将注意力集中到正确的物体)。对于传统的CNN,如果你想使你的模型对于不同规格和旋转的图像都保持不变,那你需要大量的训练样本来使模型学习。让我们来看看这个模块是如何帮助解决这一问题。
传统CNN模型中,处理空间不变性的是maxpooling层。其原因是,一旦我们知道某个特定特性还是起始输入量(有高激活值),它的确切位置就没有它对其他特性的相对位置重要,其他功能一样重要。这个新的空间变换器是动态的,它会对每个输入图像产生不同的行为(不同的扭曲/变形)。这不仅仅是像传统maxpool那样简单和预定义。让我们来看看这个模块是如何工作的。该模块包括:
一个本地化网络,会吸收输入量,并输出应施加的空间变换的参数。参数可以是6维仿射变换。
采样网格,这是由卷曲规则网格和定位网络中创建的仿射变换(theta)共同产生的。
一个采样器,其目的是执行输入功能图的翘曲。
该模块可以放入CNN的任何地方中,可以帮助网络学习如何以在训练过程中最大限度地减少成本函数的方式来变换特征图。
在今年的神经网络顶级会议NIPS2016上,深度学习三大牛之一的YannLecun教授给出了一个关于机器学习中的有监督学习、无监督学习和增强学习的一个有趣的比喻,他说:如果把智能(Intelligence)比作一个蛋糕,那么无监督学习就是蛋糕本体,增强学习是蛋糕上的樱桃,那么监督学习,仅仅能算作蛋糕上的糖霜(图1)。
自从Alex和他的导师Hinton(深度学习鼻祖)在2012年的ImageNet大规模图像识别竞赛(ILSVRC2012)中以超过第二名10个百分点的成绩(83.6%的Top5精度)碾压第二名(74.2%,使用传统的计算机视觉方法)后,深度学习真正开始火热,卷积神经网络(CNN)开始成为家喻户晓的名字,从12年的AlexNet(83.6%),到2013年ImageNet大规模图像识别竞赛冠军的88.8%,再到2014年VGG的92.7%和同年的GoogLeNet的93.3%,终于,到了2015年,在1000类的图像识别中,微软提出的残差网(ResNet)以96.43%的Top5正确率,达到了超过人类的水平(人类的正确率也只有94.9%).Top5精度是指在给出一张图片,模型给出5个最有可能的标签,只要在预测的5个结果中包含正确标签,即为正确
图2.2010-2015年ILSVRC竞赛图像识别错误率演进趋势
伴随着图像分类任务,还有另外一个更加有挑战的任务–图像检测,图像检测是指在分类图像的同时把物体用矩形框给圈起来。从14年到16年,先后涌现出R-CNN,FastR-CNN,FasterR-CNN,YOLO,SSD等知名框架,其检测平均精度(mAP),在计算机视觉一个知名数据集上PASCALVOC上的检测平均精度(mAP),也从R-CNN的53.3%,到FastRCNN的68.4%,再到FasterR-CNN的75.9%,最新实验显示,FasterRCNN结合残差网(Resnet-101),其检测精度可以达到83.8%。深度学习检测速度也越来越快,从最初的RCNN模型,处理一张图片要用2秒多,到FasterRCNN的198毫秒/张,再到YOLO的155帧/秒(其缺陷是精度较低,只有52.7%),最后出来了精度和速度都较高的SSD,精度75.1%,速度23帧/秒。
图3.图像检测示例
图像分割也是一项有意思的研究领域,它的目的是把图像中各种不同物体给用不同颜色分割出来,如下图所示,其平均精度(mIoU,即预测区域和实际区域交集除以预测区域和实际区域的并集),也从最开始的FCN模型(图像语义分割全连接网络,该论文获得计算机视觉顶会CVPR2015的最佳论文的)的62.2%,到DeepLab框架的72.7%,再到牛津大学的CRFasRNN的74.7%。该领域是一个仍在进展的领域,仍旧有很大的进步空间。
图5.图像标注,根据图片生成描述文字
图片标注任务本来是一个半圆,既然我们可以从图片产生描述文字,那么我们也能从文字来生成图片。如图6所示,第一列“一架大客机在蓝天飞翔”,模型自动根据文字生成了16张图片,第三列比较有意思,“一群大象在干燥草地行走”(这个有点违背常识,因为大象一般在雨林,不会在干燥草地上行走),模型也相应的生成了对应图片,虽然生成的质量还不算太好,但也已经中规中矩。
在监督学习任务中,我们都是给定样本一个固定标签,然后去训练模型,可是,在真实环境中,我们很难给出所有样本的标签,这时候,强化学习就派上了用场。简单来说,我们给定一些奖励或惩罚,强化学习就是让模型自己去试错,模型自己去优化怎么才能得到更多的分数。2016年大火的AlphaGo就是利用了强化学习去训练,它在不断的自我试错和博弈中掌握了最优的策略。利用强化学习去玩flyppybird,已经能够玩到几万分了。
图9生成对抗网络生成的一些图片,最后边一列是与训练集中图片最相近的生产图片
生成对抗网络一般是根据随机噪声来生成特定类型的图像等实例,条件生成对抗网络则是根据一定的输入来限定输出,例如根据几个描述名词来生成特定的实例,这有点类似1.5节介绍的由文字生成图像,下图是ConditioanalGenerativeAdversarialNets论文中的一张图片,根据特定的名词描述来生成图片。(注意:左边的一列图片的描述文字是训练集中不存在的,也就是说是模型根据没有见过的描述来生成的图片,右边的一列图片的描述是训练集中存在的)
图12.生成对抗网络做超分辨率的例子,最右边是原始图像
在写本文的过程中,我尽量把论文网址以链接的形式附着在正文中.本文参考的大部分博客和论文整理如下,方便大家和自己以后研究查看。
参考博客
参数初始化
下面几种方式,随便选一个,结果基本都差不多。但是一定要做。否则可能会减慢收敛速度,影响收敛结果,甚至造成Nan等一系列问题。
下面的n_in为网络的输入大小,n_out为网络的输出大小,n为n_in或(n_in+n_out)*0.5
数据预处理方式
训练技巧
Ensemble
Ensemble是论文刷结果的终极核武器,深度学习中一般有以下几种方式
输入是x,经过变换Wx+b和激活函数f得到输出y。相信大家对这个已经非常熟悉了。
在实际应用中,我们还会遇到很多序列形的数据:
如:
序列形的数据就不太好用原始的神经网络处理了。为了建模序列问题,RNN引入了隐状态h(hiddenstate)的概念,h可以对序列形的数据提取特征,接着再转换为输出。先从h1的计算开始看:
图示中记号的含义是:
在很多论文中也会出现类似的记号,初学的时候很容易搞乱,但只要把握住以上两点,就可以比较轻松地理解图示背后的含义。
h2的计算和h1类似。要注意的是,在计算时,每一步使用的参数U、W、b都是一样的,也就是说每个步骤的参数都是共享的,这是RNN的重要特点,一定要牢记。
依次计算剩下来的(使用相同的参数U、W、b):
我们这里为了方便起见,只画出序列长度为4的情况,实际上,这个计算过程可以无限地持续下去。
正如之前所说,一个箭头就表示对对应的向量做一次类似于f(Wx+b)的变换,这里的这个箭头就表示对h1进行一次变换,得到输出y1。
OK!大功告成!这就是最经典的RNN结构,我们像搭积木一样把它搭好了。它的输入是x1,x2,.....xn,输出为y1,y2,...yn,也就是说,输入和输出序列必须要是等长的。
由于这个限制的存在,经典RNN的适用范围比较小,但也有一些问题适合用经典的RNN结构建模,如:
有的时候,我们要处理的问题输入是一个序列,输出是一个单独的值而不是序列,应该怎样建模呢?实际上,我们只在最后一个h上进行输出变换就可以了:
这种结构通常用来处理序列分类问题。如输入一段文字判别它所属的类别,输入一个句子判断其情感倾向,输入一段视频并判断它的类别等等。
输入不是序列而输出为序列的情况怎么处理?我们可以只在序列开始进行输入计算:
还有一种结构是把输入信息X作为每个阶段的输入:
这种1VSN的结构可以处理的问题有:
下面我们来介绍RNN最重要的一个变种:NvsM。这种结构又叫Encoder-Decoder模型,也可以称之为Seq2Seq模型。
原始的NvsNRNN要求序列等长,然而我们遇到的大部分问题序列都是不等长的,如机器翻译中,源语言和目标语言的句子往往并没有相同的长度。
为此,Encoder-Decoder结构先将输入数据编码成一个上下文向量c:
得到c有多种方式,最简单的方法就是把Encoder的最后一个隐状态赋值给c,还可以对最后的隐状态做一个变换得到c,也可以对所有的隐状态做变换。
拿到c之后,就用另一个RNN网络对其进行解码,这部分RNN网络被称为Decoder。具体做法就是将c当做之前的初始状态h0输入到Decoder中:
还有一种做法是将c当做每一步的输入:
由于这种Encoder-Decoder结构不限制输入和输出的序列长度,因此应用的范围非常广泛,比如:
为了解决梯度爆炸问题,ThomasMikolov首先提出了一个简单的启发性的解决方案,就是当梯度大于一定阈值的的时候,将它截断为一个较小的数。具体如算法1所述:
算法:当梯度爆炸时截断梯度(伪代码)
ifthen
在上面的示例图中,神经网络的模块,A,正在读取某个输入x_i,并输出一个值h_i。循环可以使得信息可以从当前步传递到下一步。这些循环使得RNN看起来非常神秘。然而,如果你仔细想想,这样也不比一个正常的神经网络难于理解。RNN可以被看做是同一神经网络的多次复制,每个神经网络模块会把消息传递给下一个。所以,如果我们将这个循环展开:
LSTM同样是这样的结构,但是重复的模块拥有一个不同的结构。不同于单一神经网络层,这里是有四个,以一种非常特殊的方式进行交互。
不必担心这里的细节。我们会一步一步地剖析LSTM解析图。现在,我们先来熟悉一下图中使用的各种元素的图标。
在上面的图例中,每一条黑线传输着一整个向量,从一个节点的输出到其他节点的输入。粉色的圈代表pointwise的操作,诸如向量的和,而黄色的矩阵就是学习到的神经网络层。合在一起的线表示向量的连接,分开的线表示内容被复制,然后分发到不同的位置。
LSTM的关键就是细胞状态,水平线在图上方贯穿运行。细胞状态类似于传送带。直接在整个链上运行,只有一些少量的线性交互。信息在上面流传保持不变会很容易。
LSTM有通过精心设计的称作为“门”的结构来去除或者增加信息到细胞状态的能力。门是一种让信息选择式通过的方法。他们包含一个sigmoid神经网络层和一个pointwise乘法操作。
Sigmoid层输出0到1之间的数值,描述每个部分有多少量可以通过。0代表“不许任何量通过”,1就指“允许任意量通过”!
LSTM拥有三个门,来保护和控制细胞状态。
在我们LSTM中的第一步是决定我们会从细胞状态中丢弃什么信息。这个决定通过一个称为忘记门层完成。该门会读取h_{t-1}和x_t,输出一个在0到1之间的数值给每个在细胞状态C_{t-1}中的数字。1表示“完全保留”,0表示“完全舍弃”。让我们回到语言模型的例子中来基于已经看到的预测下一个词。在这个问题中,细胞状态可能包含当前主语的性别,因此正确的代词可以被选择出来。当我们看到新的主语,我们希望忘记旧的主语。
我们到目前为止都还在介绍正常的LSTM。但是不是所有的LSTM都长成一个样子的。实际上,几乎所有包含LSTM的论文都采用了微小的变体。差异非常小,但是也值得拿出来讲一下。其中一个流形的LSTM变体,就是由Gers&Schmidhuber(2000)提出的,增加了“peepholeconnection”。是说,我们让门层也会接受细胞状态的输入。
上面的图例中,我们增加了peephole到每个门上,但是许多论文会加入部分的peephole而非所有都加。
另一个变体是通过使用coupled忘记和输入门。不同于之前是分开确定什么忘记和需要添加什么新的信息,这里是一同做出决定。我们仅仅会当我们将要输入在当前位置时忘记。我们仅仅输入新的值到那些我们已经忘记旧的信息的那些状态。
sigmoid函数又称logistic函数,应用在Logistic回归中。logistic回归的目的是从特征学习出一个0/1分类模型,而这个模型是将特性的线性组合作为自变量,由于自变量的取值范围是负无穷到正无穷。因此,使用logistic函数将自变量映射到(0,1)上,映射后的值被认为是属于y=1的概率。
例如,对于下图所示的含有3个隐藏层的神经网络,梯度消失问题发生时,接近于输出层的hiddenlayer3等的权值更新相对正常,但前面的hiddenlayer1的权值更新会变得很慢,导致前面的层权值几乎不变,仍接近于初始化的权值,这就导致hiddenlayer1相当于只是一个映射层,对所有的输入做了一个同一映射,这是此深层网络的学习就等价于只有后几层的浅层网络的学习了。
其实梯度爆炸和梯度消失问题都是因为网络太深,网络权值更新不稳定造成的,本质上是因为梯度反向传播中的连乘效应。对于更普遍的梯度消失问题,可以考虑用ReLU激活函数取代sigmoid激活函数。另外,LSTM的结构设计也可以改善RNN中的梯度消失问题。
124SVD和PCA。机器学习ML模型中
125数据不平衡问题。机器学习ML基础易
这主要是由于数据分布不平衡造成的。解决方法如下:
128神经网络模型(NeuralNetwork)因受人类大脑的启发而得名。深度学习DL基础易
神经网络由许多神经元(Neuron)组成,每个神经元接受一个输入,对输入进行处理后给出一个输出,如下图所示。请问下列关于神经元的描述中,哪一项是正确的?
答案:(E)
每个神经元可以有一个或多个输入,和一个或多个输出。
129下图是一个神经元的数学表示。深度学习DL基础易
这些组成部分分别表示为:
-x1,x2,…,xN:表示神经元的输入。可以是输入层的实际观测值,也可以是某一个隐藏层(HiddenLayer)的中间值
-w1,w2,…,wN:表示每一个输入的权重
-bi:表示偏差单元/偏移量(biasunit)。作为常数项加到激活函数的输入当中,类似截距(Intercept)
-a:作为神经元的激励函数(Activation),可以表示为
-y:神经元输出
考虑上述标注,线性等式(y=mx+c)可以被认为是属于神经元吗:
A.是
B.否
答案:(A)
输入只有一个变量,激活函数为线性。所以可以被认为是线性回归函数。
130在一个神经网络中,知道每一个神经元的权重和偏差是最重要的一步。如果知道了神经元准确的权重和偏差,便可以近似任何函数,但怎么获知每个神经的权重和偏移呢?深度学习DL基础易A搜索每个可能的权重和偏差组合,直到得到最佳值B赋予一个初始值,然后检查跟最佳值的差值,不断迭代调整权重C随机赋值,听天由命D以上都不正确的答案:(B)选项B是对梯度下降的描述。
131梯度下降算法的正确步骤是什么?深度学习DL基础易
A.1,2,3,4,5
B.5,4,3,2,1
C.3,2,1,5,4
D.4,3,1,5,2
答案:(D)
132已知:-大脑是有很多个叫做神经元的东西构成,神经网络是对大脑的简单的数学表达。-每一个神经元都有输入、处理函数和输出。-神经元组合起来形成了网络,可以拟合任何函数。-为了得到最佳的神经网络,我们用梯度下降方法不断更新模型给定上述关于神经网络的描述,什么情况下神经网络模型被称为深度学习模型?深度学习DL基础易
A加入更多层,使神经网络的深度增加B有维度更高的数据C当这是一个图形识别的问题时D以上都不正确答案:(A)更多层意味着网络更深。没有严格的定义多少层的模型才叫深度模型,目前如果有超过2层的隐层,那么也可以及叫做深度模型。
133使用CNN时,是否需要对输入进行旋转、平移、缩放等预处理?深度学习DL基础易A需要B不需要答案:(A)把数据传入神经网络之前需要做一系列数据预处理(也就是旋转、平移、缩放)工作,神经网络本身不能完成这些变换。
134下面哪项操作能实现跟神经网络中Dropout的类似效果?(B)深度学习DL基础易ABoostingBBaggingCStackingDMappingDropout可以认为是一种极端的Bagging,每一个模型都在单独的数据上训练,同时,通过和其他模型对应参数的共享,从而实现模型参数的高度正则化。
135下列哪一项在神经网络中引入了非线性?深度学习DL基础易
答案:(B)
修正线性单元是非线性的激活函数。
137下列哪项关于模型能力(modelcapacity)的描述是正确的?(指神经网络模型能拟合复杂函数的能力)深度学习DL基础易
138如果增加多层感知机(MultilayerPerceptron)的隐藏层层数,分类误差便会减小。这种陈述正确还是错误?深度学习DL基础易
并不总是正确。层数增加可能导致过拟合,从而可能引起错误增加。
139构建一个神经网络,将前一层的输出和它自身作为输入。深度学习DL模型易
下列哪一种架构有反馈连接?
140在感知机中(Perceptron)的任务顺序是什么?深度学习DL基础易1随机初始化感知机的权重2去到数据集的下一批(batch)3如果预测值和输出不一致,则调整权重4对一个输入样本,计算输出值A.1,2,3,4B.4,3,2,1C.3,1,2,4D.1,4,3,2答案:(D)
141假设你需要调整参数来最小化代价函数(costfunction),会使用下列哪项技术?深度学习DL基础易
A.穷举搜索
B.随机搜索
C.Bayesian优化
D.梯度下降
142在下面哪种情况下,一阶梯度下降不一定正确工作(可能会卡住)?深度学习DL基础易
D.以上都不正确
143下图显示了训练过的3层卷积神经网络准确度,与参数数量(特征核的数量)的关系。深度学习DL基础易
从图中趋势可见,如果增加神经网络的宽度,精确度会增加到一个特定阈值后,便开始降低。造成这一现象的可能原因是什么?
答案:(C)
144假设我们有一个如下图所示的隐藏层。隐藏层在这个网络中起到了一定的降纬作用。假如现在我们用另一种维度下降的方法,比如说主成分分析法(PCA)来替代这个隐藏层。深度学习DL基础易
那么,这两者的输出效果是一样的吗?
A.是
B.否
PCA提取的是数据分布方差比较大的方向,隐藏层可以提取有预测能力的特征
线性函数不能作为激活函数。
146下列哪个神经网络结构会发生权重共享?深度学习DL模型易
A.卷积神经网络
B.循环神经网络
C.全连接神经网络
D.选项A和B
147批规范化(BatchNormalization)的好处都有啥?深度学习DL基础中A.在将所有的输入传递到下一层之前对其进行归一化(更改)B.它将权重的归一化平均值和标准差C.它是一种非常有效的反向传播(BP)方法D.这些均不是答案:(A)
148在一个神经网络中,下面哪种方法可以用来处理过拟合?(D)深度学习DL基础易ADropoutB分批归一化(BatchNormalization)C正则化(regularization)D都可以对于选项C,分批归一化处理过拟合的原理,是因为同一个数据在不同批中被归一化后的值会有差别,相当于做了dataaugmentatio。
149如果我们用了一个过大的学习速率会发生什么?深度学习DL基础易A神经网络会收敛B不好说C都不对D神经网络不会收敛
150假设我们已经在ImageNet数据集(物体识别)上训练好了一个卷积神经网络。然后给这张卷积神经网络输入一张全白的图片。对于这个输入的输出结果为任何种类的物体的可能性都是一样的,对吗?深度学习DL模型中A对的B不知道C看情况D不对答案:D,已经训练好的卷积神经网络,各个神经元已经精雕细作完工,对于全白图片的输入,其j层层激活输出给最后的全连接层的值几乎不可能恒等,再经softmax转换之后也不会相等,所以"输出结果为任何种类的等可能性一样"也就是softmax的每项均相等,这个概率是极低的。
151当在卷积神经网络中加入池化层(poolinglayer)时,变换的不变性会被保留,是吗?深度学习DL模型中A不知道B看情况C是D否答案:(C)池化算法比如取最大值/取平均值等,都是输入数据旋转后结果不变,所以多层叠加后也有这种不变性。
154对于一个分类任务,如果开始时神经网络的权重不是随机赋值的,二是都设成0,下面哪个叙述是正确的?(C)深度学习DL基础易A其他选项都不对B没啥问题,神经网络会正常开始训练C神经网络可以训练,但是所有的神经元最后都会变成识别同样的东西D神经网络不会开始训练,因为没有梯度改变令所有权重都初始化为0这个一个听起来还蛮合理的想法也许是一个我们假设中最好的一个假设了,但结果是错误的,因为如果神经网络计算出来的输出值都一个样,那么反向传播算法计算出来的梯度值一样,并且参数更新值也一样(w=wαdw)。更一般地说,如果权重初始化为同一个值,网络即是对称的,最终所有的神经元最后都会变成识别同样的东西。
输入图片大小为200×200,依次经过一层卷积(kernelsize5×5,padding1,stride2),pooling(kernelsize3×3,padding0,stride1),又一层卷积(kernelsize3×3,padding1,stride1)之后,输出特征图大小为:
A.95
B.96
C.97
D.98
E.99
F.100
其中,padding指的是向外扩展的边缘大小,而stride则是步长,即每次移动的长度。
这样一来就容易多了,首先长宽一般大,所以我们只需要计算一个维度即可,这样,经过第一次卷积后的大小为:
最终的结果为97。
B.AC(B)
C.A(BC)
D.所以效率都相同
深度学习DL基础易,正确答案:A
180
NaveBayes是一种特殊的Bayes分类器,特征变量是X,类别标签是C,它的一个假定是:()A.各类别的先验概率P(C)是相等的
B.以0为均值,sqr(2)/2为标准差的正态分布
C.特征变量X的各个维度是类别条件独立随机变量
D.P(X|C)是高斯分布
机器学习ML模型中,正确答案:C
朴素贝叶斯的条件就是每个变量相互独立。
181
关于支持向量机SVM,下列说法错误的是()A.L2正则项,作用是最大化分类间隔,使得分类器拥有更强的泛化能力
B.Hinge损失函数,作用是最小化经验分类错误
C.分类间隔为1/||w||,||w||代表向量的模
D.当参数C越小时,分类间隔越大,分类错误越多,趋于欠学习
机器学习ML模型,易,正确答案:C
A正确。考虑加入正则化项的原因:想象一个完美的数据集,y>1是正类,y<-1是负类,决策面y=0,加入一个y=-30的正类噪声样本,那么决策面将会变“歪”很多,分类间隔变小,泛化能力减小。加入正则项之后,对噪声样本的容错能力增强,前面提到的例子里面,决策面就会没那么“歪”了,使得分类间隔变大,提高了泛化能力。
B正确。
C错误。间隔应该是2/||w||才对,后半句应该没错,向量的模通常指的就是其二范数。
D正确。考虑软间隔的时候,C对优化问题的影响就在于把a的范围从[0,+inf]限制到了[0,C]。C越小,那么a就会越小,目标函数拉格朗日函数导数为0可以求出w=求和,a变小使得w变小,因此间隔2/||w||变大
在LogisticRegression中,如果同时加入L1和L2范数,会产生什么效果()
A.可以做特征选择,并在一定程度上防止过拟合
B.能解决维度灾难问题
C.能加快计算速度
D.可以获得更准确的结果
正确答案:ABC
在代价函数后面加上正则项,L1即是Losso回归,L2是岭回归。L1范数是指向量中各个元素绝对值之和,用于特征选择。L2范数是指向量各元素的平方和然后求平方根,用于防止过拟合,提升模型的泛化能力。因此选择A。
在统计模式识分类问题中,当先验概率未知时,可以使用()机器学习ML基础易
A.最小损失准则
B.N-P判决
C.最小最大损失准则
D.最小误判概率准则
正确答案:BC
选项B在贝叶斯决策中,对于先验概率p(y),分为已知和未知两种情况。1.p(y)已知,直接使用贝叶斯公式求后验概率即可;2.p(y)未知,可以使用聂曼-皮尔逊决策(N-P决策)来计算决策面。聂曼-皮尔逊决策(N-P判决)可以归结为找阈值a,即:如果,则x属于w1;如果,则x属于w2;
选项C而最大最小损失规则主要就是使用解决最小损失规则时先验概率未知或难以计算的问题的。
深度神经网络“容易收敛到局部最优”,很可能是一种想象,实际情况是,我们可能从来没有找到过“局部最优”,更别说全局最优了。
人们直观的想象,高维的时候这样的局部极值会更多,指数级的增加,于是优化到全局最优就更难了。然而单变量到多变量一个重要差异是,单变量的时候,Hessian矩阵只有一个特征值,于是无论这个特征值的符号正负,一个临界点都是局部极值。但是在多变量的时候,Hessian有多个不同的特征值,这时候各个特征值就可能会有更复杂的分布,如有正有负的不定型和有多个退化特征值(零特征值)的半定型
在后两种情况下,是很难找到局部极值的,更别说全局最优了。
所以,很可能我们实际上是在“什么也没找到”的情况下就停止了训练,然后拿到测试集上试试,“咦,效果还不错”。
补充说明,这些都是实验研究结果。理论方面,各种假设下,深度神经网络的Landscape的鞍点数目指数增加,而具有较差loss的局部极值非常少。
(3)条件随机场CRF给定一组输入随机变量的条件下另一组输出随机变量的条件概率分布密度。条件随机场假设输出变量构成马尔科夫随机场,而我们平时看到的大多是线性链条随机场,也就是由输入对输出进行预测的判别模型。求解方法为极大似然估计或正则化的极大似然估计。之所以总把HMM和CRF进行比较,主要是因为CRF和HMM都利用了图的知识,但是CRF利用的是马尔科夫随机场(无向图),而HMM的基础是贝叶斯网络(有向图)。而且CRF也有:概率计算问题、学习问题和预测问题。大致计算方法和HMM类似,只不过不需要EM算法进行学习问题。
(4)HMM和CRF对比其根本还是在于基本的理念不同,一个是生成模型,一个是判别模型,这也就导致了求解方式的不同。
CNN常用的几个模型。深度学习DL模型中
名称
特点
LeNet5
没啥特点-不过是第一个CNN应该要知道
AlexNet
引入了ReLU和dropout,引入数据增强、池化相互之间有覆盖,三个卷积一个最大池化+三个全连接层
VGGNet
采用1*1和3*3的卷积核以及2*2的最大池化使得层数变得更深。常用VGGNet-16和VGGNet19
GoogleInceptionNet
这个在控制了计算量和参数量的同时,获得了比较好的分类性能,和上面相比有几个大的改进:1、去除了最后的全连接层,而是用一个全局的平均池化来取代它;2、引入InceptionModule,这是一个4个分支结合的结构。所有的分支都用到了1*1的卷积,这是因为1*1性价比很高,可以用很少的参数达到非线性和特征变换。3、InceptionV2第二版将所有的5*5变成2个3*3,而且提出来著名的BatchNormalization;4、InceptionV3第三版就更变态了,把较大的二维卷积拆成了两个较小的一维卷积,加速运算、减少过拟合,同时还更改了InceptionModule的结构。
微软ResNet残差神经网络(ResidualNeuralNetwork)
1、引入高速公路结构,可以让神经网络变得非常深2、ResNet第二个版本将ReLU激活函数变成y=x的线性函数
(1)随机森林随机森林改变了决策树容易过拟合的问题,这主要是由两个操作所优化的:
1)Boostrap从袋内有放回的抽取样本值
2)每次随机抽取一定数量的特征(通常为sqr(n))。分类问题:采用Bagging投票的方式选择类别频次最高的回归问题:直接取每颗树结果的平均值。
(2)Boosting之AdaBoostBoosting的本质实际上是一个加法模型,通过改变训练样本权重学习多个分类器并进行一些线性组合。而Adaboost就是加法模型+指数损失函数+前项分布算法。Adaboost就是从弱分类器出发反复训练,在其中不断调整数据权重或者是概率分布,同时提高前一轮被弱分类器误分的样本的权值。最后用分类器进行投票表决(但是分类器的重要性不同)。(3)Boosting之GBDT将基分类器变成二叉树,回归用二叉回归树,分类用二叉分类树。和上面的Adaboost相比,回归树的损失函数为平方损失,同样可以用指数损失函数定义分类问题。但是对于一般损失函数怎么计算呢?GBDT(梯度提升决策树)是为了解决一般损失函数的优化问题,方法是用损失函数的负梯度在当前模型的值来模拟回归问题中残差的近似值。注:由于GBDT很容易出现过拟合的问题,所以推荐的GBDT深度不要超过6,而随机森林可以在15以上。
(4)Xgboost这个工具主要有以下几个特点:
(1)公式推导一定要会
(2)逻辑回归的基本概念这个最好从广义线性模型的角度分析,逻辑回归是假设y服从Bernoulli分布。
(3)L1-norm和L2-norm其实稀疏的根本还是在于L0-norm也就是直接统计参数不为0的个数作为规则项,但实际上却不好执行于是引入了L1-norm;而L1norm本质上是假设参数先验是服从Laplace分布的,而L2-norm是假设参数先验为Gaussian分布,我们在网上看到的通常用图像来解答这个问题的原理就在这。但是L1-norm的求解比较困难,可以用坐标轴下降法或是最小角回归法求解。
DropoutasaBayesianApproximation:InsightsandApplications
为什么很多做人脸的Paper会最后加入一个LocalConnectedConv?
以FaceBookDeepFace为例:
DeepFace先进行了两次全卷积+一次池化,提取了低层次的边缘/纹理等特征。后接了3个Local-Conv层,这里是用Local-Conv的原因是,人脸在不同的区域存在不同的特征(眼睛/鼻子/嘴的分布位置相对固定),当不存在全局的局部特征分布时,Local-Conv更适合特征的提取。
211为什么网络够深(Neurons足够多)的时候,总是可以避开较差LocalOptima?
212机器学习中的正负样本
213机器学习中,有哪些特征选择的工程方法?
数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限而已
2.构建单个特征的模型,通过模型的准确性为特征排序,借此来选择特征;
6.通过深度学习来进行特征选择:目前这种手段正在随着深度学习的流行而成为一种手段,尤其是在计算机视觉领域,原因是深度学习具有自动学习特征的能力,这也是深度学习又叫unsupervisedfeaturelearning的原因。从深度学习模型中选择某一神经层的特征后就可以用来进行最终目标模型的训练了。
214在一个n维的空间中,最好的检测outlier(离群点)的方法是()机器学习ML基础易A.作正态分布概率图B.作盒形图C.马氏距离D.作散点图答案:C
216bootstrap数据是什么意思?(提示:考“bootstrap”和“boosting”区别)机器学习ML模型易A.有放回地从总共M个特征中抽样m个特征B.无放回地从总共M个特征中抽样m个特征C.有放回地从总共N个样本中抽样n个样本D.无放回地从总共N个样本中抽样n个样本答案:C。boostrap是提鞋自举的意思(武侠小说作者所说的左脚踩右脚腾空而起).它的过程是对样本(而不是特征)进行有放回的抽样,抽样次数等同于样本总数.这个随机抽样过程决定了最终抽样出来的样本,去除重复之后,占据原有样本的1/e比例。
217“过拟合”只在监督学习中出现,在非监督学习中,没有“过拟合”,这是()机器学习ML基础易A.对的B.错的答案:B我们可以评估无监督学习方法通过无监督学习的指标,如:我们可以评估聚类模型通过调整兰德系数(adjustedrandscore)
220模型的高bias是什么意思,我们如何降低它?机器学习ML基础易A.在特征空间中减少特征B.在特征空间中增加特征C.增加数据点D.B和CE.以上所有答案:Bbias太高说明模型太简单了,数据维数不够,无法准确预测数据,所以,升维吧!
A.7
B.30
C.35
D.Can’tSay
答案:B
239数据科学家可能会同时使用多个算法(模型)进行预测,并且最后把这些算法的结果集成起来进行最后的预测(集成学习),以下对集成学习说法正确的是:
C.在集成学习中使用“平均权重”而不是“投票”会比较好
D.单个模型都是用的一个算法
240在有监督学习中,我们如何使用聚类方法?:
A.我们可以先创建聚类类别,然后在每个类别上用监督学习分别进行学习
B.我们可以使用聚类“类别id”作为一个新的特征项,然后再用监督学习分别进行学习
C.在进行监督学习之前,我们不能新建聚类类别
D.我们不可以使用聚类“类别id”作为一个新的特征项,然后再用监督学习分别进行学习
A.2和4
B.1和2
C.3和4
D.1和3
我们可以为每个聚类构建不同的模型,提高预测准确率。
“类别id”作为一个特征项去训练,可以有效地总结了数据特征。
所以B是正确的
241以下说法正确的是:
A.一个机器学习模型,如果有较高准确率,总是说明这个分类器是好的
B.如果增加模型复杂度,那么模型的测试错误率总是会降低
C.如果增加模型复杂度,那么模型的训练错误率总是会降低
A.1
B.2
C.3
D.1and3
答案:C
考的是过拟合和欠拟合的问题。
242对应GradientBoostingtree算法,以下说法正确的是:
A.当增加最小样本分裂个数,我们可以抵制过拟合
B.当增加最小样本分裂个数,会导致过拟合
C.当我们减少训练单个学习器的样本个数,我们可以降低variance
D.当我们减少训练单个学习器的样本个数,我们可以降低bias
B.2和3
C.1和3
D.1和4
243以下哪个图是KNN算法的训练边界:
A)B
B)A
C)D
D)C
E)都不是
KNN算法肯定不是线性的边界,所以直的边界就不用考虑了。另外这个算法是看周围最近的k个样本的分类用以确定分类,所以边界一定是坑坑洼洼的。
244如果一个训练好的模型在测试集上有100%的准确率,这是不是意味着在一个新的数据集上,也会有同样好的表现?:
A.是的,这说明这个模型的范化能力已经足以支持新的数据集合了
B.不对,依然后其他因素模型没有考虑到,比如噪音数据
答案:B没有一个模型是可以总是适应新数据的。我们不可能可到100%准确率。
245下面的交叉验证方法:
i.有放回的Bootstrap方法
ii.留一个测试样本的交叉验证
iii.5折交叉验证
iv.重复两次的5折教程验证
A.i>ii>iii>iv
B.ii>iv>iii>i
C.iv>i>ii>iii
D.ii>iii>iv>i
所有B是正确的
246变量选择是用来选择最好的判别器子集,如果要考虑模型效率,我们应该做哪些变量选择的考虑?:
1.多个变量其实有相同的用处2.变量对于模型的解释有多大作用3.特征携带的信息4.交叉验证
A.1和4
B.1,2和3
C.1,3和4
D.以上所有
注意,这题的题眼是考虑模型效率,所以不要考虑选项2.
247对于线性回归模型,包括附加变量在内,以下的可能正确的是:
1.R-Squared和AdjustedR-squared都是递增的2.R-Squared是常量的,AdjustedR-squared是递增的3.R-Squared是递减的,AdjustedR-squared也是递减的4.R-Squared是递减的,AdjustedR-squared是递增的
A.1和2
B.1和3
C.2和4
D.以上都不是
答案:D
R-squared不能决定系数估计和预测偏差,这就是为什么我们要估计残差图。但是,R-squared有R-squared和predictedR-squared所没有的问题。每次你为模型加入预测器,R-squared递增或不变.
248对于下面三个模型的训练情况,下面说法正确的是:
1.第一张图的训练错误与其余两张图相比,是最大的2.最后一张图的训练效果最好,因为训练错误最小3.第二张图比第一和第三张图鲁棒性更强,是三个里面表现最好的模型4.第三张图相对前两张图过拟合了5.三个图表现一样,因为我们还没有测试数据集
A.1和3
D.5
249对于线性回归,我们应该有以下哪些假设?:
C.1,2和3
A.1and3
B.1and2
C.1,2and3
D.1
251如果在一个高度非线性并且复杂的一些变量中,一个树模型可能比一般的回归模型效果更好.只是:
A.对的
B.错的
答案:A
252对于维度极低的特征,选择线性还是非线性分类器?非线性分类器,低维空间可能很多特征都跑到一起了,导致线性不可分。1.如果Feature的数量很大,跟样本数量差不多,这时候选用LR或者是LinearKernel的SVM2.如果Feature的数量比较小,样本数量一般,不算大也不算小,选用SVM+GaussianKernel3.如果Feature的数量比较小,而样本数量很多,需要手工添加一些feature变成第一种情况。
253特征向量的缺失值处理1.缺失值较多.直接将该特征舍弃掉,否则可能反倒会带入较大的noise,对结果造成不良影响。2.缺失值较少,其余的特征缺失值都在10%以内,我们可以采取很多的方式来处理:1)把NaN直接作为一个特征,假设用0表示;2)用均值填充;3)用随机森林等算法预测填充
254SVM、LR、决策树的对比。模型复杂度:SVM支持核函数,可处理线性非线性问题;LR模型简单,训练速度快,适合处理线性问题;决策树容易过拟合,需要进行剪枝损失函数:SVMhingeloss;LRL2正则化;adaboost指数损失数据敏感度:SVM添加容忍度对outlier不敏感,只关心支持向量,且需要先做归一化;LR对远点敏感数据量:数据量大就用LR,数据量小且特征少就用SVM非线性核
255什么是ill-condition病态问题?训练完的模型,测试样本稍作修改就会得到差别很大的结果,就是病态问题,模型对未知数据的预测能力很差,即泛化误差大。
256简述KNN最近邻分类算法的过程?1.计算训练样本和测试样本中每个样本点的距离(常见的距离度量有欧式距离,马氏距离等);2.对上面所有的距离值进行排序;3.选前k个最小距离的样本;4.根据这k个样本的标签进行投票,得到最后的分类类别;
257常用的聚类划分方式有哪些?列举代表算法。1.基于划分的聚类:K-means,k-medoids,CLARANS。2.基于层次的聚类:AGNES(自底向上),DIANA(自上向下)。3.基于密度的聚类:DBSACN,OPTICS,BIRCH(CF-Tree),CURE。4.基于网格的方法:STING,WaveCluster。5.基于模型的聚类:EM,SOM,COBWEB。
258下面对集成学习模型中的弱学习者描述错误的是?A.他们经常不会过拟合B.他们通常带有高偏差,所以其并不能解决复杂学习问题C.他们通常会过拟合答案:C,弱学习者是问题的特定部分。所以他们通常不会过拟合,这也就意味着弱学习者通常拥有低方差和高偏差。
260最出名的降维算法是PAC和t-SNE。将这两个算法分别应用到数据「X」上,并得到数据集「X_projected_PCA」,「X_projected_tSNE」。下面哪一项对「X_projected_PCA」和「X_projected_tSNE」的描述是正确的?A.X_projected_PCA在最近邻空间能得到解释B.X_projected_tSNE在最近邻空间能得到解释C.两个都在最近邻空间能得到解释D.两个都不能在最近邻空间得到解释答案(B):t-SNE算法考虑最近邻点而减少数据维度。所以在使用t-SNE之后,所降的维可以在最近邻空间得到解释。但PCA不能。
262为了得到和SVD一样的投射(projection),你需要在PCA中怎样做?A.将数据转换成零均值B.将数据转换成零中位数C.无法做到答案(A):当数据有一个0均值向量时,PCA有与SVD一样的投射,否则在使用SVD之前,你必须将数据均值归0。
263假设我们有一个数据集,在一个深度为6的决策树的帮助下,它可以使用100%的精确度被训练。现在考虑一下两点,并基于这两点选择正确的选项。注意:所有其他超参数是相同的,所有其他因子不受影响。1.深度为4时将有高偏差和低方差2.深度为4时将有低偏差和低方差A.只有1B.只有2C.1和2D.没有一个答案(A):如果在这样的数据中你拟合深度为4的决策树,这意味着其更有可能与数据欠拟合。因此,在欠拟合的情况下,你将获得高偏差和低方差。
264在k-均值算法中,以下哪个选项可用于获得全局最小?A.尝试为不同的质心(centroid)初始化运行算法B.调整迭代的次数C.找到集群的最佳数量D.以上所有答案(D):所有都可以用来调试以找到全局最小。
266假设你使用log-loss函数作为评估标准。下面这些选项,哪些是对作为评估标准的log-loss的正确解释。A.如果一个分类器对不正确的分类很自信,log-loss会严重的批评它。B.对一个特别的观察而言,分类器为正确的类别分配非常小的概率,然后对log-loss的相应分布会非常大。C.log-loss越低,模型越好D.以上都是答案为(D)
267下面哪个选项中哪一项属于确定性算法?A.PCAB.K-MeansC.以上都不是答案为(A):确定性算法表明在不同运行中,算法输出并不会改变。如果我们再一次运行算法,PCA会得出相同的结果,而k-means不会。
268特征向量的归一化方法有哪些?线性函数转换,表达式如下:y=(x-MinValue)/(MaxValue-MinValue)对数函数转换,表达式如下:y=log10(x)反余切函数转换,表达式如下:y=arctan(x)*2/PI减去均值,除以方差:y=(x-means)/variance
270RF与GBDT之间的区别与联系?1)相同点:都是由多棵树组成,最终的结果都是由多棵树一起决定。2)不同点:a组成随机森林的树可以分类树也可以是回归树,而GBDT只由回归树组成b组成随机森林的树可以并行生成,而GBDT是串行生成c随机森林的结果是多数表决表决的,而GBDT则是多棵树累加之和d随机森林对异常值不敏感,而GBDT对异常值比较敏感e随机森林是减少模型的方差,而GBDT是减少模型的偏差f随机森林不需要进行特征归一化。而GBDT则需要进行特征归一化
272下面哪个/些超参数的增加可能会造成随机森林数据过拟合?A树的数量B树的深度C学习速率答案为(B):通常情况下,我们增加树的深度有可能会造成模型过拟合。学习速率并不是随机森林的超参数。增加树的数量可能会造成欠拟合。
273目标变量在训练集上的8个实际值[0,0,0,1,1,1,1,1],目标变量的熵是多少?A.-(5/8log(5/8)+3/8log(3/8))B.5/8log(5/8)+3/8log(3/8)C.3/8log(5/8)+5/8log(3/8)D.5/8log(3/8)–3/8log(5/8)答案为(A)
277类域界面方程法中,不能求线性不可分情况下分类问题近似或精确解的方法是?(D)A伪逆法-径向基(RBF)神经网络的训练算法,就是解决线性不可分的情况B基于二次准则的H-K算法:最小均方差准则下求得权矢量,二次准则解决非线性问题C势函数法-非线性D感知器算法-线性分类算法
278机器学习中做特征选择时,可能用到的方法有?(E)A、卡方B、信息增益C、平均互信息D、期望交叉熵E以上都有
输入张量形状:(time_steps,n_samples,dim_input)输出张量形状:(time_steps,n_samples,dim_output)注:同样是保留了Mini-batchgradientdescent的训练方式,但不同之处在于多了timestep这个维度。Recurrent的任意时刻的输入的本质还是单个向量,只不过是将不同时刻的向量按顺序输入网络。所以你可能更愿意理解为一串向量asequenceofvectors,或者是矩阵。