本文结合《百面机器学习》一书进行整理。
(1)为什么需要对数值类型的特征做归一化?
对数值类型归一化可以将所有的特征都统一到一个大致相同的数值区间内。
常用方法:
1. 线性函数归一化(对原始数据进行线性变换,使结果映射到[0,1]范围内)
公式 :
2. 零均值归一化(将原始数据映射到均值为0,标准差为1的分布上)
公式:
为什么需要对数值型特征做归一化呢?我们不妨借助随机梯度下降的实例来
说明归一化的重要性。假设有两种数值型特征,x1的取值范围为 [0, 10],x2的取值
范围为[0, 3],于是可以构造一个目标函数符合图1.1(a)中的等值图。
优解。如果将x1和x2归一化到相同的数值区间后,优化目标的等值图会变成图
1.1(b)中的圆形,x1和x2的更新速度变得更为一致,容易更快地通过梯度下降找
到最优解。 (梯度方向垂直等高线,所以梯度垂直等高线走)。
(2)问题 在对数据进行预处理时,应该怎样处理类别型特征?
类别型特征(Categorical Feature):主要是指性别(男、女)、血型(A、B、
AB、O)等只在有限选项内取值的特征。
1. 序号编码:
序号编码通常用于处理类别间具有大小关系的数据。例如成绩,可以分为
低、中、高三档,并且存在“高>中>低”的排序关系。序号编码会按照大小关系对
类别型特征赋予一个数值ID,例如高表示为3、中表示。
2. 独热编码(one-hot)
独热编码通常用于处理类别间不具有大小关系的特征。独热编码会把血型变成一个4维稀疏 向量,A型血表示为(1, 0, 0, 0),B型血表示为(0, 1, 0, 0),AB型表示为(0, 0,
1, 0),O型血表示为(0, 0, 0, 1)。(类别如果过多,可以考虑稀疏存储)
3. 二进制编码
二进制编码主要分为两步,先用序号编码给每个类别赋予一个类别ID,然后
将类别ID对应的二进制编码作为结果。以A、B、AB、O血型为例,表1.1是二进制
编码的过程。A型血的ID为1,二进制表示为001;B型血的ID为2,二进制表示为
010;
二进制且维数少于独热编码,节省了存储空间。
(3)为什么要做组合特征?
为了提高复杂关系的拟合能力,在特征工程中经常会把一阶离散特征进行两两组合,这样就构成了高阶的组合特征。
例如做影视推荐模型的时候,有语言(中文,英文)和类型(电影,电视剧)这两种离散特征,做了组合特征之后,变成了2x2=4个特征:语言=中文类型=电影,语言=中文类型=电视剧,语言=英文类型=电影,语言=英文类型=电视剧。
在做组合特征的时候,如果只是简单的进行两两组合,很容易导致参数过多、多拟合等问题,而且并不是所有的特征组合都有意义。所以该怎么进行有效的特征组合呢,最常用的是基于决策树的特征组合寻找方法,在将训练数据构造成一棵决策树之后,每一条从根节点到叶节点的路径都可以看成是一种特征组合的方式。
以点击预测问题为例,假设原始输入特征包含年龄、性别、用户
类型(试用期、付费)、物品类型(护肤、食品等)4个方面的信息,并且根据原
始输入和标签(点击/未点击)构造出了决策树,如图1.2所示。
于是,每一条从根节点到叶节点的路径都可以看成一种特征组合的方式。具
体来说,就有以下4种特征组合的方式。
(1)“年龄<=35”且“性别=女”。
(2)“年龄<=35”且“物品类别=护肤”。
(3)“用户类型=付费”且“物品类型=食品”。
(4)“用户类型=付费”且“年龄<=40”。
(4)问题 在图像分类任务中,训练数据不足会带来什么问题?如何缓解数据量不足带
来的问题?
具体到图像分类任务上,训练数据不足带来的问题主要表现在过拟合方面。
解决方法:
1. 简化模型
正则化(L1/2 )、集成学习、Dropout超参数等;
2. 数据扩充(Data Augmentation)
(1)一定程度内的随机旋转、平移、缩放、裁剪、填充、左右翻转等,这些
变换对应着同一个目标在不同角度的观察结果。
(2)对图像中的像素添加噪声扰动,比如椒盐噪声、高斯白噪声等。
(3)颜色变换。
(4)改变图像的亮度、清晰度、对比度、锐度等。
评估指标:
准确率(Accuracy):准确率是指分类正确的样本占总样本个数的比例
精确率(Precision):精确率是指分类正确的正样本个数占分类器判定为正样本的样本个数的比例。
召回率(Recall):是指分类正确的正样本个数占真正的正样本个数的比例
均方根误差 (Root Mean Square Error,RMSE)
(5)准确率的局限性。
当样本分布不均衡时,即使准确率很高,也可能得出错误结论。比如样本中负样本占
99%时,分类器把所有样本都预测为负样本也可以获得99%的准确率。
(6)精确率与召回率的权衡。
Precision值和Recall值是既矛盾又统一的两个指标,为了提高Precision值,分
类器需要尽量在“更有把握”时才把样本预测为正样本,但此时往往会因为过于保
守而漏掉很多“没有把握”的正样本,导致Recall值降低。
为了综合评估一个排序模型的好坏,不仅要看模型在不同Top N下的Precision@N和Recall@N,而且最好绘制出模型的P-R(Precision-Recall)曲线。
P-R曲线的横轴是召回率,纵轴是精确率。对于一个排序模型来说,其P-R曲
线上的一个点代表着,在某一阈值下,模型将大于该阈值的结果判定为正样本,
小于该阈值的结果判定为负样本,此时返回结果对应的召回率和精确率。整条P-R
曲线是通过将阈值从高到低移动而生成的。图2.1是P-R曲线样例图,其中实线代表
模型A的P-R曲线,虚线代表模型B的P-R曲线。原点附近代表当阈值最大时模型的
精确率和召回率。
(7)平方根误差的“意外”。
一般情况下,RMSE能够很好地反映回归模型预测值与真实值的偏离程度。但
在实际问题中,如果存在个别偏离程度非常大的离群点(Outlier)时,即使离群点
数量非常少,也会让RMSE指标变得很差。也就是数据中存在噪声,会使RMSE变差。但是模型本身判断很准确。
解决方法:
第一:如果我 们认定这些离群点是“噪声点”的话,就需要在数据预处理的阶段把这些噪声点过
滤掉。
第二,如果不认为这些离群点是“噪声点”的话,就需要进一步提高模型的预测能力,将离群点产生的机制建模进去(这是一个宏大的话题,这里就不展开
讨论了)。
第三,可以找一个更合适的指标来评估该模型。关于评估指标,其实是存在比RMSE的鲁棒性更好的指标,比如平均绝对百分比误差(Mean Absolute Percent Error,MAPE),它定义为
相比RMSE,MAPE相当于把每个点的误差进行了归一化,降低了个别离群点带来的绝对误差的影响。
(8)什么事ROC曲线
理解ROC曲线之前,我们先捋一下概念:
TP:P个正样本中模型预测为正的个数
TN:N个负样本中模型预测为正的个数
FP:P个正样本中模型预测为负的个数
FN: N个负样本中模型预测为负的个数
如果记住:P是positive,N是negtive,PN是样本本身标签。T是预测为true,F是预测为False。
这样记就很容易啦!
下面研究ROC曲线:
ROC曲线的横坐标为假阳性率(False Positive Rate,FPR);纵坐标为真阳性率(True Positive Rate,TPR)。FPR和TPR的计算方法分别为:
P是真实的正样本的数量,N是真实的负样本的数量。
(9)如何计算AUC
AUC指的是ROC曲线下的面积大小,该值能够量化地反映基于ROC曲线衡量出的模型性能。计算AUC值只需要沿着ROC横轴做积分就可以了。由于ROC曲线一般都处于y=x这条直线的上方(如果不是的话,只要把模型预测的概率反转成1−p就可以得到一个更好的分类器),所以AUC的取值一般在0.5~1之间。AUC越大,说明分类器越可能把真正的正样本排在前面,分类性能越好。
过同样被经常用来评估分类和排序模型的P-R曲线。相比 P-R曲线,ROC曲线有一个特点,当正负样本的分布发生变化时,ROC曲线的形状能够基本保持不变,而P-R曲线的形状一般会发生较剧烈的变化。
举例来说,图2.3是ROC曲线和P-R曲线的对比图,其中图2.3(a)和图2.3(c)是ROC曲线,图2.3(b)和图2.3(d)是P-R曲线,图2.3(c)和图2.3(d)则是将测试集中的负样本数量增加10倍后的曲线图。
在很多实际问题中,正负样本数量往往很不均衡。比如,计算广告领域经常涉及转化率模型,正样本的数量往往是负样本数量的1/1000甚至1/10000。若选择不同的测试集,P-R曲线的变化就会非常大,而ROC曲线则能够更加稳定地反映模型本身的好坏。所以,ROC曲线的适用场景更多,被广泛用于排序、推荐、广告等领域。但需要注意的是,选择P-R曲线还是ROC曲线是因实际问题而异的,如果研究者希望更多地看到模型在特定数据集上的表现,P-R曲线则能够更直观地反映其性能。
(10)为什么要使用余弦距离而不是欧式距离
对于两个向量A和B,其余弦相似度定义为 :
即两个向量夹角的余弦,关注的是向量之间的角度关系,并不关心它们的绝对大小,其取值范围是[−1,1]。
当一对文本相似度的长度差距很大、但内容相近,如果使用词频或词向量作为特征,在特征空间中的的欧氏距离通常很大;而如果使用余弦相似度的话,之间的夹角可能很小,因而相似度高。此外,在文本、圄像、视频等领域,研究的对象的特征维度往往很高,余弦相似度在高维情况下依然保持相同时为1 ,正交时为0 ,相反时为-1的性质,而欧民距离的数值则受维度的影响,范围不固定,并且含义也比较模糊。
总体来说, 欧氏距离体现数值上的绝对差异,而余弦距离体现方向上的相对差异。
(11) 在模型评估过程中,有哪些主要的验证方法,它们的优缺点是什么?
1. Holdout检验
Holdout 检验是最简单也是最直接的验证方法,它将原始的样本集合随机划分成训练集和验证集两部分。比方说,对于一个点击率预测模型,我们把样本按照70%~30% 的比例分成两部分,70% 的样本用于模型训练;30% 的样本用于模型验证,包括绘制ROC曲线、计算精确率和召回率等指标来评估模型性能。
Holdout 检验的缺点很明显,即在验证集上计算出来的最后评估指标与原始分 组有很大关系。为了消除随机性,研究者们引入了“交叉检验”的思想。‘
总结一下:就是验证集,测试集随机分。最后的评估指标与分组大小有很大关系,不够客观。
2. 交叉验证
k-fold交叉验证:首先将全部样本划分成k个大小相等的样本子集;依次遍历这k个子集,每次把当前子集作为验证集,其余所有子集作为训练集,进行模型的训练和评估;最后把k次评估指标的平均值作为最终的评估指标。在实际实验中,k经常取10。
留一验证:每次留下1个样本作为验证集,其余所有样本作为测试集。样本总数为n,依次对n个样本进行遍历,进行n次验证,再将评估指标求平均值得到最终的评估指标。在样本总数较多的情况下,留一验证法的时间开销极大。事实上,留一验证是留p验证的特例。留p验证是每次留下p个样本作为验证集,而从n个元素中选择p个元素有 种可能,因此它的时间开销更是远远高于留一验证,故而很少在实际工程中被应用。(不过这种开销大,因为n个样本需要训练n次,测试n次,另外还可能导致过拟合,还是k折大法好)。
3.自助法 (针对小样本数据)
自助法是基于自助采样法的检验方法。对于总数为n的样本集合,进行n次有放回的随机抽样,得到大小为n的训练集。n次采样过程中,有的样本会被重复采样,有的样本没有被抽出过,将这些没有被抽出的样本作为验证集,进行模型验证,这就是自助法的验证过程。
(小知识)当样本数很大时,大约有36.8%的样本从未被选择过,可作为验证集。这个结果是通过概率计算得到的。
(12) 超参数有哪些调优方法?
1. 网格搜索:
网格搜索可能是最简单、应用最广泛的超参数搜索算法,它通过查找搜索范围内的所有的点来确定最优值。如果采用较大的搜索范围以及较小的步长,网格搜索有很大概率找到全局最优值。然而,这种搜索方案十分消耗计算资源和时间,特别是需要调优的超参数比较多的时候。因此,在实际应用中,网格搜索法一般会先使用较广的搜索范围和较大的步长,来寻找全局最优值可能的位置;然后会逐渐缩小搜索范围和步长,来寻找更精确的最优值。这种操作方案可以降低所需的时间和计算量,但由于目标函数一般是非凸的,所以很可能会错过全局最优值。
总结就是:在搜索范围内所有的点确定最优质,资源消耗大。如果先使用较大的步长确定可能范围,在缩小范围搜索,可能会错过最优值。
2. 随机搜索
随机搜索的思想与网格搜索比较相似,只是不再测试上界和下界之间的所有值,而是在搜索范围中随机选取样本点。它的理论依据是,如果样本点集足够大,那么通过随机采样也能大概率地找到全局最优值,或其近似值。随机搜索一般会比网格搜索要快一些,但是和网格搜索的快速版一样,它的结果也是没法保证的。(当然既然是随机的肯定有可能错过全局最优值)。
3. 贝叶斯优化算法
贝叶斯优化算法在寻找最优最值参数时,采用了与网格搜索、随机搜索完全不同的方法。网格搜索和随机搜索在测试一个新点时,会忽略前一个点的信息;而贝叶斯优化算法则充分利用了之前的信息。贝叶斯优化算法通过对目标函数形状进行学习,找到使目标函数向全局最优值提升的参数。具体来说,它学习目标函数形状的方法是,首先根据先验分布,假设一个搜集函数;然后,每一次使用新的采样点来测试目标函数时,利用这个信息来更新目标函数的先验分布;最后,算法测试由后验分布给出的全局最值最可能出现的位置的点。对于贝叶斯优化算法,有一个需要注意的地方,一旦找到了一个局部最优值,它会在该区域不断采样,所以很容易陷入局部最优值。为了弥补这个缺陷,贝叶斯优化算法会在探索和利用之间找到一个平衡点,“探索”就是在还未取样的区域获取采样点;而“利用”则是根据后验分布在最可能出现全局最值的区域进行采样。
老实说不是很明白,有兴趣可以参考:
贝叶斯优化/Bayesian Optimization - 知乎
(13) 在模型评估过程中,过拟合和欠拟合具体是指什么现象?
过拟合是指模型对于训练数据拟合呈过当的情况,反映到评估指标上,就是模型在训练集上的表现很好,但在测试集和新数据上的表现较差。欠拟合指的是模型在训练和预测时表现都不好的情况。图2.5形象地描述了过拟合和欠拟合的区别。
可以看出,图2.5(a)是欠拟合的情况,拟合的黄线没有很好地捕捉到数据的特征,不能够很好地拟合数据。图2.5(c)则是过拟合的情况,模型过于复杂,把噪声数据的特征也学习到模型中,导致模型泛化能力下降,在后期应用过程中很容易输出错误的预测结果。
(14) 能否说出几种降低过拟合和欠拟合风险的方法?
小tip:对方差和偏差的理解可以参考射箭:
比如:运动员多次射箭偏离靶心,但是偏离的位置基本聚集在一起,这种情况就是方差小,偏差大,如果每次不仅偏离靶心,还很分散则方差大,偏差也大。如果每次基本命中靶心,则防擦好偏差都小。
从偏差与方差的角度来分析模型常常会有四种情况:
降低“过拟合”风险的方法
1. 从数据入手,获得更多的训练数据。或者对原始数据集进行扩充
2. 降低模型复杂度。在数据较少时,模型过于复杂是产生过拟合的主要因素,适当降低模型复杂度可以避免模型拟合过多的采样噪声。例如,在神经网络模型中减少网络层数、神经元个数等;在决策树模型中降低树的深度、进行剪枝等。
3. 正则化方法。给模型的参数加上一定的正则约束,比如将权值的大小加入到损失函数中这样,
4. 集成学习方法。集成学习是把多个模型集成在一起,来降低单一模型的过拟合风险,如Bagging方法。
降低“欠拟合”风险的方法
1. 添加新特征。当特征不足或者现有特征与样本标签的相关性不强时,模型容易出现欠拟合。通过挖掘“上下文特征”“ID类特征”“组合特征”等新的特征,往往能够取得更好的效果。在深度学习潮流中,有很多模型可以帮助完成特征工程,如因子分解机、梯度提升决策树、Deep-crossing等都可以成为丰富特征的方法。
2. 增加模型复杂度。简单模型的学习能力较差,通过增加模型的复杂度可以使模型拥有更强的拟合能力。例如,在线性模型中添加高次项,在神经网络模64型中增加网络层数或神经元个数等。
3. 减小正则化系数。正则化是用来防止过拟合的,但当模型出现欠拟合现象时,则需要有针对性地减小正则化系数。
(15) 在空间上线性可分的两类点,分别向SVM分类的超平面上做投影,这些点在超平面上的投影仍然是线性可分的吗?
首先介绍一下SVM:
SVM:将数据映射到高维空间,并寻找一个超平面对数据进行分离。
明确下题目中的概念,线性可分的两类点,即通过一个超平面可以将两类点完全分开,但是现在题目是将两类点映射到超平面上,然后判断是不是可分的。
显然一眼望去,这些点在分类超平面(绿色直线)上相互间隔,并不是线性可分的。但实际上,对于任意线性可分的两组点,它们在SVM分类的超平面上的投影 都是线性不可分的。(推导参见百面机器学习)
(SVM内容没有总结完,百面机器学习中剩下的SVM部分涉及到公式推导,不容易理解,面试的时候应该不会涉及,留待空闲时间在此整理)
(16)逻辑回归相比于线性回归,有何异同?
两者最本质的区别是逻辑回归处理的是分类问题,线性回归处理的是回归问题。
逻辑回归又可以认为是广义线性回归的一种特殊形式,其特殊之处在于其目标(label/target)的取值服从二元分布。
参考:
线性回归和逻辑回归的区别_炸奥利奥的小奶油的专栏-CSDN博客
引出了什么是广义线性回归:
在线性回归中,基于如下假设:
1)数据x和y之间是线性关系;
2)数据是从高斯分布中采样产生的。
广义线性模型中放宽了对数据生成的分布的要求,可以是高斯分布、伯努利分布、多项分布、Gamma分布、Beta分布等等,而这些分布必须都属于指数族分布。
(17)当使用逻辑回归处理多标签的分类问题时,有哪些常见做法,分别应用于哪些场景,它们之间又有怎样的关系?
首先,如果一个样本只对应于一个标签,我们可以假设每个样本属于不同标签的概率服从于几何分布,使用多项逻辑回归(Softmax Regression)来进行分类 。
当存在样本可能属于多个标签的情况时,我们可以训练k个二分类的逻辑回归分类器。第i个分类器用以区分每个样本是否可以归为第i类,训练该分类器时,需要把标签重新整理为“第i类标签”与“非第i类标签”两类。通过这样的办法,我们就解决了每个样本可能拥有多个标签的情况。
(18)决策树介绍
女生相亲过程举例:
决策树是一种自上而下,对样本数据进行树形分类的过程,由结点和有向边组成。结点分为内部结点和叶结点,其中每个内部结点表示一个特征或属性,叶结点表示类别。从顶部根结点开始,所有样本聚在一起。经过根结点的划分,样本被分到不同的子结点中。再根据子结点的特征进一步划分,直至所有样本都被归到某一个类别(即叶结点)中。决策树作为最基础、最常见的有监督学习模型,常被用于分类问题和回归问题。
决策树的生成包含了特征选择、树的构造、树的剪枝三个过程。
(19) 决策树有哪些常用的启发函数?
启发函数:就是在选取最优决策树的过程中通过启发函数来构建一个好的决策树。
常用的决策树算法有ID3、C4.5、CART:
ID3—— 最大信息增益
C4.5——最大信息增益比
CART——最大基尼指数(Gini)
首先,ID3是采用信息增益作为评价标准,除了“会写代码”这一逆天特征外,会倾向于取值较多的特征。因为,信息增益反映的是给定条件以后不确定性减少的程度,特征取值越多就意味着确定性更高,也就是条件熵越小,信息增益越大。这在实际应用中是一个缺陷。比如,我们引入特征“DNA”,每个人的DNA都不同,如果ID3按照“DNA”特征进行划分一定是最优的(条件熵为0),但这种分类的泛化能力是非常弱的。因此,C4.5实际上是对ID3进行优化,通过引入信息增益比,一定程度上对取值比较多的特征进行惩罚,避免ID3出现过拟合的特性,提升决策树的泛化能力。
其次,从样本类型的角度,ID3只能处理离散型变量,而C4.5和CART都可以处理连续型变量。C4.5处理连续型变量时,通过对数据排序之后找到类别不同的分割线作为切分点,根据切分点把连续属性转换为布尔型,从而将连续型变量转换多个取值区间的离散型变量。而对于CART,由于其构建时每次都会对特征进行二值划分,因此可以很好地适用于连续性变量。 从应用角度,ID3和C4.5只能用于分类任务,而CART(Classification and Regression Tree,分类回归树)从名字就可以看出其不仅可以用于分类,也可以应 用于回归任务(回归树使用最小平方误差准则)。
此外,从实现细节、优化过程等角度,这三种决策树还有一些不同。比如,ID3对样本特征缺失值比较敏感,而C4.5和CART可以对缺失值进行不同方式的处理;ID3和C4.5可以在每个结点上产生出多叉分支,且每个特征在层级之间不会复用,而CART每个结点只会产生两个分支,因此最后会形成一颗二叉树,且每个特征可以被重复使用;ID3和C4.5通过剪枝来权衡树的准确性与泛化能力,而CART直接利用全部数据发现所有可能的树结构进行对比。
(20) 如何对决策树进行剪枝?
一棵完全生长的决策树会面临一个很严重的问题,即过拟合。决策树的剪枝通常有两种方法,预剪枝(Pre-Pruning)和后剪枝(Post- Pruning)。
预剪枝,即在生成决策树的过程中提前停止树的增长。而后剪枝,是在已生成的过拟合决策树上进行剪枝,得到简化版的剪枝决策树。
预剪枝
预剪枝的核心思想是在树中结点进行扩展之前,先计算当前的划分是否能带来模型泛化能力的提升,如果不能,则不再继续生长子树。此时可能存在不同类别的样本同时存于结点中,按照多数投票的原则判断该结点所属类别。预剪枝对于何时停止决策树的生长有以下几种方法。
(1)当树到达一定深度的时候,停止树的生长。
(2)当到达当前结点的样本数量小于某个阈值的时候,停止树的生长。
(3)计算每次分裂对测试集的准确度提升,当小于某个阈值的时候,不再继续扩展。
预剪枝具有思想直接、算法简单、效率高等特点,适合解决大规模问题。但 如何准确地估计何时停止树的生长(即上述方法中的深度或阈值),针对不同问题会有很大差别,需要一定经验判断。且预剪枝存在一定局限性,有欠拟合的风险,虽然当前的划分会导致测试集准确率降低,但在之后的划分中,准确率可能会有显著上升。
后剪枝
后剪枝的核心思想是让算法生成一棵完全生长的决策树,然后从最底层向上计算是否剪枝。剪枝过程将子树删除,用一个叶子结点替代,该结点的类别同样按照多数投票的原则进行判断。同样地,后剪枝也可以通过在测试集上的准确率进行判断,如果剪枝过后准确率有所提升,则进行剪枝。相比于预剪枝,后剪枝方法通常可以得到泛化能力更强的决策树,但时间开销会更大。
常见的后剪枝方法包括错误率降低剪枝(Reduced Error Pruning,REP)、悲观剪枝(Pessimistic Error Pruning,PEP)、代价复杂度剪枝(Cost Complexity Pruning,CCP)、最小误差剪枝(Minimum Error Pruning,MEP)、CVP(Critical Value Pruning)、OPP(Optimal Pruning)等方法。
(21)大致介绍一下非监督学习
非监督学习的输入数据没有标签信息,需要通过算法模型来挖掘数据内在的结构和模式。非监督学习主要包含两大类学习方法:数据聚类和特征变量关联。
聚类算法往往是通过多次迭代来找到数据的最优分割, 而特征变量关联则是利用各种相关性分析方法来找到变量之间的关系。
(22)简述K均值算法的具体步骤。
基本思想是:通过迭代方式寻找K个簇(Cluster)的一种划分方案,使得聚类结果对应的代价函数最小。特别地,代价函数可以定义为各个样本距离所属簇中心点的误差平方和 。
具体步骤:
首先数据预处理,如归一化,离群点处理。然后按照下面方式:
随机选择K个点作为初始质心
repeat
将每个点指派到最近的质心,形成K个簇
重新计算每个簇的质心
until 簇不发生变化或达到最大迭代次数
(23) K均值算法的优缺点是什么?如何对其进行调优?
缺点:
1. 容易受初值(即原始簇)和离群点影响造成结果不稳定。
2. 结果通常不是全局最优而是局部最优。
3. 无法很好解决数据分布不平衡情况,不如一类是另一类数量的100倍。
优点:
对于大数据集,K mens相对是高效的,它的计算复杂度是O(NKt)接近于线性,其中N是数据对象的数目,K是聚类的簇数,t是迭代的轮数。尽管算法经常以局部最优结束,但一般情况下达到的局部最优已经可以满足聚类的需求。
如何调优:基本是针对他的缺点进行处理
1. 数据归一化和离群点处理。
K均值聚类本质上是一种基于欧式距离度量的数据划分方法,均值和方差大的维度将对数据的聚类结果产生决定性的影响,所以未做归一化处理和统一单位的数据是无法直接参与运算和比较的。同时,离群点或者少量的噪声数据就会对均值产生较大的影响,导致中心偏移,因此使用K均值聚类算法之前通常需要对数据做预处理。
2. 合理选择K值。
K值的选择是K均值聚类最大的问题之一,这也是K均值聚类算法的主要缺点。实际上,我们希望能够找到一些可行的办法来弥补这一缺点,或者说找到K值的合理估计方法。但是,K值的选择一般基于经验和多次实验结果。例如采用手肘法,我们可以尝试不同的K值,并将不同K值所对应的损失函数画成折线,横轴为K的取值,纵轴为误差平方和所定义的损失函数,然后选取一个比较好的K值。
手肘法是一个经验方法,缺点就是不够自动化,因此研究员们又提出了一些更先进的方法,其中包括比较有名的Gap Statistic方法。(具体可以参考百面机器学习P113)。
(24)针对K均值算法的缺点,有哪些改进的模型?
K均值算法的主要缺点如下。
1. 需要人工预先确定初始K值,且该值和真实的数据分布未必吻合。
2. K均值只能收敛到局部最优,效果受到初始值很大。
3. 易受到噪点的影响。
4. 样本点只能被划分到单一的类中。
改进模型:
■ K-means++算法
假设已经选取了n个初始聚类中心(0 聚类中心越远的点会有更高的概率被选为第n+1个聚类中心。在选取第一个聚类中心(n=1)时同样通过随机的方法。可以说这也符合我们的直觉,聚类中心当然是 互相离得越远越好。当选择完初始点后,K-means++后续的执行和经典K均值算法相同,这也是对初始值选择进行改进的方法等共同点。 ■ ISODATA算法 当K值的大小不确定时,可以使用ISODATA算法。ISODATA的全称是迭代自组织数据分析法。在K均值算法中,聚类个数K的值需要预先人为地确定,并且在整个算法过程中无法更改。而当遇到高维度、海量的数据集时,人们往往很难准确地估计出K的大小。ISODATA算法就是针对这个问题进行了改进,它的思想也很直观。当属于某个类别的样本数过少时,把该类别去除;当属于某个类别的样本数过多、分散程度较大时,把该类别分为两个子类别。 ISODATA算法在K均值算法的基础之上增加了两个操作,一是分裂操作,对应着增加聚类中心数;二是合并操作,对应着减少聚类中心数。ISODATA算法是一个比较常见的算法,其缺点是需要指定的参数比较多,不仅仅需要一个参考的聚类数量K,还需要制定3个阈值。 (25) 高斯混合模型介绍: 这里只大致说一下,具体参见百面机器学习P120 高斯混合模型与K均值算法的相同点是,它们都是可用于聚类的算法;都需要指定K值;都是使用EM算法来求解;都往往只能收敛于局部最优。而它相比于K均值算法的优点是,可以给出一个样本属于某类的概率是多少;不仅仅可以用于聚类,还可以用于概率密度的估计;并且可以用于生成新的样本点。 K-Means算法对数据点的聚类进行了“硬分配”,即每个数据点只属于唯一的聚类;而GMM的EM解法则基于后验概率分布,对数据点进行“软分配”,即每个单独的高斯模型对数据聚类都有贡献,不过贡献值有大有小。 (26) 以聚类问题为例,假设没有外部标签数据,如何评估两个聚类算法的优劣? 略: (27) 有监督学习涉及的损失函数有哪些?请列举并简述它们的特点。 1. Zero-one Loss(0-1损失) 它是一种较为简单的损失函数,如果预测值与目标值不相等,那么为1,否则为0,即: 2. 交叉熵损失函数 在使用似然函数最大化时,其形式是进行连乘,但是为了便于处理,一般会套上log,这样便可以将连乘转化为求和,由于log函数是单调递增函数,因此不会改变优化结果。因此log类型的损失函数也是一种常见的损失函数,如在LR(Logistic Regression, 逻辑回归)中使用交叉熵(Cross Entropy)作为其损失函数。即: 3. 平方误差损失(Square Loss) Square Loss即平方误差,常用于回归中。即: 对式(6)加和再求平均即MSE: 平方损失函数是光滑函数,能够用梯度下降法进行优化。然而,当预测值距离真实值越远时,平方损失函数的惩罚力度越大,因此它对异常点比较敏感。为了解 决该问题,可以采用绝对损失函数 . 4. 绝对损失函数(Absolute Loss) Absolute Loss即绝对值误差,常用于回归中。即: 5. Hinge Loss Hinge损失可以用来解决间隔最大化问题,如在SVM中解决几何间隔最大化问题,其定义如下: 6. Exponential Loss Exponential Loss为指数误差,常用于boosting算法中,如AdaBoost。即: 各种损失函数图形如下: 参考: 损失函数有哪些 - 知乎 回归损失函数与分类损失函数: 机器学习从业者必知的5种回归损失函数 - 知乎 (28)机器学习中的优化问题,哪些是凸优化问题,哪些是非凸优化问题?请各举一个例子。 凸优化问题有支持向量机、线性回归、逻辑回归等,非凸优化问题有主成分分析、低秩模型(如矩阵分解)、深度神经网络模型等。 主题推导参考百面机器学习 P159 (29)无约束优化问题的优化方法有哪些? 经典的优化算法可以分为直接法和迭代法两大类。 直接法需要满足两个条件,一个是损失函数是凸函数,可以进行梯度求解,第二个是函数有闭式解。迭代法就是对函数进行泰勒展开 主题推导参考百面机器学习 P163 (30) 当训练数据量特别大时,经典的梯度下降法存在什么问题,需要做如何改进? 经典的梯度下降法在每次对模型参数进行更新时,需要遍历所有的训练数据。当训练样本很大时,这需要很大的计算量,耗费很长的计算时间,在实际应用中基本不可行。 优点: 为了解决该问题,随机梯度下降法(Stochastic Gradient Descent,SGD)用单个训练样本的损失来近似平均损失,随机梯度下降法用单个训练数据即可对模型参数进行一次更新,大大加快了收敛速率。该方法也非常适用于数据源源不断到来的在线更新场景。 优点: 3. 不易于并行实现。 为了降低随机梯度的方差,从而使得迭代算法更加稳定,也为了充分利用高度优化的矩阵运算操作,在实际应用中我们会同时处理若干训练数据,该方法被称为小批量梯度下降法(Mini-Batch Gradient Descent)。是对批量梯度下降以及随机梯度下降的一个折中办法。其思想是:每次迭代 使用 ** batch_size** 个样本来对参数进行更新。 优点: (30) 随机梯度下降法失效的原因 以及解决方法—— 摸着石头下山。 梯度下降发因为每一次梯度是随机的,如果遇到鞍点梯度为0,可能会停止。或者遇到山谷,可能会来回反弹震荡。导致不收敛或者收敛速度慢。 解决办法: 1. 动量(Momentum)方法 如果这一时刻更新度与上一时刻更新度的方向相同,则会加速。反之,则会减速。加动量的优势有两点: 2. Adam方法 Adam方法将惯性保持和环境感知这两个优点集于一身。一方面,Adam记录梯度的一阶矩(first moment),即过往梯度与当前梯度的平均,这体现了惯性保持;另一方面,Adam还记录梯度的二阶矩(second moment),即过往梯度平方与当前梯度平方的平均,这类似AdaGrad方法,体现了环境感知能力,为不同参数产生自适应的学习速率。 Adam 算法和传统的随机梯度下降不同。随机梯度下降保持单一的学习率(即 alpha)更新所有的权重,学习率在训练过程中并不会改变。而 Adam 通过计算梯度的一阶矩估计和二阶矩估计而为不同的参数设计独立的自适应性学习率。 (31)深度前馈网络 深度前馈网络(Deep Feedforward Networks)是典型的深度学习模型。由于从输入到输出的过程中不存在与模型自身的反馈连接,此类模型被称为“前馈”。 深度前馈网络是一类网络模型的统称,我们常见的多层感知机、自编码器、 限制玻尔兹曼机,以及卷积神经网络等,都是其中的成员。 (32)常用激活函数及其公式。 Sigmoid激活函数的形式为 : Tanh激活函数的形式为 : ReLU激活函数的形式为: (33)为什么Sigmoid和Tanh激活函数会导致梯度消失的现象? 可以参考刚才Sigmod和Tanh的图,假设函数为f(z),当z很大或者很小时时,f(z)的导数会趋近于0,造成梯度消失的现象。 (34)ReLU系列的激活函数相对于Sigmoid和Tanh激活函数的优点是什么?它们有什么局限性以及如何改进? ■ 优点 1. 从计算的角度上,Sigmoid和Tanh激活函数均需要计算指数,复杂度 高,而ReLU只需要一个阈值即可得到激活值。 2. ReLU的非饱和性可以有效地解决梯度消失的问题,提供相对宽的激活 边界。 3. ReLU的单侧抑制提供了网络的稀疏表达能力。 ■ 局限性 ReLU的局限性在于其训练过程中会导致神经元死亡的问题。这是由于函数导致负梯度在经过该ReLU单元时被置为0,且在之后也不被任何数据激活,即流经该神经元的梯度永远为0,不对任何数据产生响应。在实际训练中,如果学习率(Learning Rate)设置较大,会导致超过一定比例的神经元不可逆死亡,进而参数梯度无法更新,整个训练过程失败。 为解决这一问题,人们设计了ReLU的变种Leaky ReLU(LReLU),其形式表示为 : LReLU与ReLU的区别在于, 当z<0时其值不为0,而是一个斜率为a的线性函数,一般a为一个很小的正常数, 这样既实现了单侧抑制,又保留了部分负梯度信息以致不完全丢失。但另一方 面,a值的选择增加了问题难度,需要较强的人工先验或多次重复训练以确定合适 的参数值。 (34)平方误差损失函数和交叉熵损失函数分别适合什么场景? 一般来说,平方损失函数更适合输出为连续,并且最后一层不含Sigmoid或Softmax激活函数的神经网络;交叉熵损失则更适合二分类或多分类的场景。 为什么不用MSE作为分类的损失函数:logistic回归和softmax回归使用交叉熵而不用欧氏距离是因为前者的目标函数是凸函数,可以求得全局极小值点;用欧氏距离(MSE)是非凸函数,则无法保证。 (34)神经网络训练时是否可以将全部参数初始化为0? 考虑全连接的深度神经网络,同一层中的任意神经元都是同构的,它们拥有相同的输入和输出,如果再将参数全部初始化为同样的值,那么无论前向传播还是反向传播的取值都是完全相同的。学习过程将永远无法打破这种对称性,最终同一网络层中的各个参数仍然是相同的。因此随机初始化。 (35)为什么Dropout可以抑制过拟合?它的工作原理和实现? 深度学习模型训练时候使用dropout实际上只是让部分神经元在当前训练批次以一定的概率不参与更新,这样使得每一轮迭代获得的模型都是不一样的。减少过拟合的风险,增强泛化能力。 预测的时候则不需要dropout。 (36)批量归一化的基本动机与原理是什么?在卷积神经网络中如何使用? 随着网络的训练,每一层的参数会让这一层的输出结果的数据的分布与输入不同,即喂给后一层的输入数据分布发生变化,另外,由于每一批(Batch)的数据分布也会存在不同,致使网络在每次迭代面对新的一批数据时都需要拟合(适应)不同的数据分布,这间接增大了训练的复杂度以及过拟合的风险。 Batch Normalization方法是针对每一批数据,在网络的每一层输入之前增加归一化处理(均值为0,标准差为1),将所有批数据强制在统一的数据分布下(正态分布)。 1. 稀疏交互 对于全连接网络,任意一对输入与输出神经元之间都产生交互,形成稠密的连接结构,如图所示,神经元si与输入的所有神经元xj均有连接。 而在卷积神经网络中,卷积核尺度远小于输入的维度,这样每个输出神经元仅与前一层特定局部区域内的神经元存在连接权重(即产生交互),我们称这种特性为稀疏交互,如图9所示。可以看到与稠密的连接结构不同,神经元si仅与前一层中的xi−1、xi和xi+1相连。 稀疏交互的物理意义是,通常图像、文本、语音等现实世界中的数据都具有局部的特征结构,我们可以先学习局部的特征,再将局部的特征组合起来形成更复杂和抽象的特征。以人脸识别为例,最底层的神经元可以检测出各个角度的边缘特征(见图(a));位于中间层的神经元可以将边缘组合起来得到眼睛、鼻子、嘴巴等复杂特征(见图b));最后,位于上层的神经元可以根据各个器官的组合检测出人脸的特征(见图(c))。 2. 参数共享(Parameter Sharing) 所谓的权值共享就是说,给一张输入图片,用一个filter去扫这张图,filter里面的数就叫权重,这张图每个位置是被同样的filter扫的,所以权重是一样的,也就是共享。 参数共享是指在同一个模型的不同模块中使用相同的参数,它是卷积运算的固有属性。全连接网络中,计算每层的输出时,权值参数矩阵中的每个元素只作用于某个输入元素一次;而在卷积神经网络中,卷积核中的每一个元素将作用于每一次局部输入的特定位置上。根据参数共享的思想,我们只需要学习一组参数集合,而不需要针对每个位置的每个参数都进行优化,从而大大降低了模型的存储需求。 参数共享的物理意义是使得卷积层具有平移等变性。假如图像中有一只猫,那么无论它出现在图像中的任何位置,我们都应该将它识别为猫,也就是说神经网络的输出对于平移变换来说应当是等变的。 (38) 常用的池化操作有哪些?池化的作用是什么? 池化主要包括括均值池化(mean pooling)、最大池化(max pooling)等,特殊的池化方式还包括对相邻重叠区域的池化以及空间金字塔池化。 相邻重叠区域的池化,顾名思义,是采用比窗口宽度更小的步长,使得窗口在每次滑动时存在重叠的区域。空间金字塔池化主要考虑了多尺度信息的描述,例如同时计算1×1、2×2、4×4的矩阵的池化并将结果拼接在一起作为下一网络层的输 入。 作用: 池化操作除了能显著降低参数量外,还能够保持对平移、伸缩、旋转操作的不变性。平移不变性是指输出结果对输入的小量平移基本保持不变。例如,输入为(1,5,3),最大池化将会取5,如果将输入右移一位得到(0,1,5),输出的结果仍将为5。对伸缩的不变性(一般称为尺度不变性)可以这样理解,如果原先神经元在最大池化操作之后输出5,那么在经过伸缩(尺度变换)之后,最大池化操作在该神经元上很大概率的输出仍然是5。因为神经元感受的是邻域输入的最大值,而并非某一个确定的值。 (39) ResNet的提出背景和核心理论是什么? 深度神经网络的层数决定了模型的容量,然而随着神经网络层数的加深,优化函数越来越陷入局部最优解。同时,随着网络层数的增加,梯度消失的问题更加严重,这是因为梯度在反向传播 时会逐渐衰减。 ResNet的提出背景是解决或缓解深层的神经网络训练中的梯度消失问题。假设有一个L层的深度神经网络,如果我们在上面加入一层,直观来讲得到的L+1层深度神经网络的效果应该至少不会比L层的差。因为我们简单地设最后一层为前一层的拷贝(用一个恒等映射即可实现),并且其他层维持原来的参数即可。然而在进行反向传播时,我们很难找到这种形式的解。实际上,通过实验发现,层数更深的神经网络反而会具有更大的训练误差。在CIFAR-10数据集上的一个结果如图所示,56层的网络反而比20层的网络训练误差更大,这很大程度上归结于深 度神经网络的梯度消失问题。 ResNet通过调整网络结构来解决上述问题。首先考虑两层神经网络的简单叠加(见(a)),这时输入x经过两个网络层的变换得到H(x),激活函数采用 ReLU。反向传播时,梯度将涉及两层参数的交叉相乘,可能会在离输入近的网络 层中产生梯度消失的现象。ResNet把网络结构调整为,既然离输入近的神经网络层较难训练,那么我们可以将它短接到更靠近输出的层,如(b)所示。输入x经过两个神经网络的变换得到F(x),同时也短接到两层之后,最后这个包含两层的神经网络模块输出H(x)=F(x)+x。这样一来,F(x)被设计为只需要拟合输入x与目标输出H(x)的残差H(x)-x ,残差网络的名称也因此而来。如果某一层的输出已经较好的拟合了期望结果,那么多加入一层不会使得模型变得更差,因为该层的输出将直接被短接到两层之后,相当于直接学习了一个恒等映射,而跳过的两层只需要拟合上层输出和目标之间的残差即可。 (40) 集成学习分哪几种?他们有何异同? 集成学习(ensemble learning)是一类机器学习框架,通过构建并结合多个学习器来完成学习任务。 1. Boosting Boosting方法训练基分类器时采用串行的方式,各个基分类器之间有依赖。 它的基本思路是将基分类器层层叠加,每一层在训练的时候,对前一层基分类器分错的样本,给予更高的权重。测试时,根据各层分类器的结果的加权得到最终结果。 2. Bagging Bagging与Boosting的串行训练方式不同,Bagging方法在训练过程中,各基分类器之间无强依赖,可以进行并行训练。其中很著名的算法之一是基于决策树基分类器的随机森林(Random Forest)。为了让基分类器之间互相独立,将训练集分为若干子集(当训练样本数量较少时,子集之间可能有交叠)。Bagging方法更像是一个集体决策的过程,每个个体都进行单独学习,学习的内容可以相同,也可以不同,也可以部分重叠。但由于个体之间存在差异性,最终做出的判断不会 完全一致。在最终做决策时,每个个体单独作出判断,再通过投票的方式做出最后的集体决策。 (41) 集成学习有哪些基本步骤?请举几个集成学习的例子 集成学习一般可分为以下3个步骤。 1. 找到误差互相独立的基分类器。 2. 训练基分类器。 3. 合并基分类器的结果。 合并基分类器的方法有voting和stacking两种。前者是用投票的方式,将获得最多选票的结果作为最终的结果。后者是用串行的方式,把前一个基分类器的结果输出到下一个分类器,将所有基分类器的输出结果相加(或者用更复杂的算法融合,比如把各基分类器的输出作为特征,使用逻辑回归作为融合模型进行最后的结果预测)作为最终的输出。以Adaboost为例,其基分类器的训练和合并的基本步骤如下。 1. 确定基分类器:这里可以选取ID3决策树作为基分类器。事实上,任何 分类模型都可以作为基分类器,但树形模型由于结构简单且较易产生随机性所以 比较常用。 2. 训练基分类器: 3. 合并基分类器:给定一个未知样本z,输出分类结果为加权投票的结果从Adaboost的例子中我们可以明显地看到Boosting的思想,对分类正确的样本降低了权重,对分类错误的样本升高或者保持权重不变。在最后进行模型融合的过程中,也根据错误率对基分类器进行加权融合。错误率低的分类器拥有更大的“话语权”。 (42)常用的基分类器是什么? 1. 决策树可以较为方便地将样本的权重整合到训练过程中,而不需要使用过采样的方法来调整样本权重。 2. 决策树的表达能力和泛化能力,可以通过调节树的层数来做折中。 3. 数据样本的扰动对于决策树的影响较大,因此不同子样本集合生成的决策树基分类器随机性较大,这样的“不稳定学习器”更适合作为基分类器。此外,在决策树节点分裂的时候,随机地选择一个特征子集,从中找出最优分裂属性,很好地引入了随机性。除了决策树外,神经网络模型也适合作为基分类器,主要由于神经网络模型也比较“不稳定”,而且还可以通过调整神经元数量、连接方式、网络层数、初始权值等方式引入随机性。 (43)可否将随机森林中的基分类器,由决策树替换为线性分类器或K-近邻?请解释为什么? 随机森林属于Bagging类的集成学习。Bagging的主要好处是集成后的分类器的方差,比基分类器的方差小。Bagging所采用的基分类器,最好是本身对样本分布较为敏感的(即所谓不稳定的分类器),这样Bagging才能有用武之地。线性分类器或者K-近邻都是较为稳定的分类器,本身方差就不大,所以以它们为基分类器使用Bagging并不能在原有基分类器的基础上获得更好的表现,甚至可能因为Bagging的采样,而导致他们在训练中更难收敛,从而增大了集成分类器的偏差。 (44)什么是偏差和方差 偏差指的是由所有采样得到的大小为m的训练数据集训练出的所有模型的输出的平均值和真实模型输出之间的偏差。偏差通常是由于我们对学习算法做了错误的假设所导致的,比如真实模型是某个二次函数,但我们假设模型是一次函数。由偏差带来的误差通常在训练误差上就能体现出来。 方差指的是由所有采样得到的大小为m的训练数据集训练出的所有模型的输出的方差。方差通常是由于模型的复杂度相对于训练样本数m过高导致的,比如一共有100个训练样本,而我们假设模型是阶数不大于200的多项式函数。由方差带来的误差通常体现在测试误差相对于训练误差的增量上。 (45)如何从减小方差和偏差的角度解释Boosting和Bagging的原理? Bagging能够提高弱分类器性能的原因是降低了方差,Boosting能够提升弱分类器性能的原因是降低了偏差。 再从模型的角度理解这个问题,对n个独立不相关的模型的预测结果取平均,方差是原来单个模型的1/n。在训练好一个弱分类器后,我们需要计算弱分类器的错误或者残差,作为下一个分类器的输入。这个过程本身就是在不断减小损失函数,来使模型不断逼近“靶心”,使得模型偏差不断 降低。但Boosting的过程并不会显著降低方差。 (46)梯度提升决策树(Gradient Boosting Decision Tree,GBDT)的基本原理是什么? Gradient Boosting是Boosting中的一大类算法,其基本思想是根据当前模型损失函数的负梯度信息来训练新加入的弱分类器,然后将训练好的弱分类器以累加的形式结合到现有模型中。 (47)梯度提升和梯度下降的区别和联系是什么? 表是梯度提升算法和梯度下降算法的对比情况。可以发现,两者都是在每一轮迭代中,利用损失函数相对于模型的负梯度方向的信息来对当前模型进行更新,只不过在梯度下降中,模型是以参数化形式表示,从而模型的更新等价于参数的更新。而在梯度提升中,模型并不需要进行参数化表示,而是直接定义在函数空间中,从而大大扩展了可以使用的模型种类。 (48)GBDT的优点和局限性有哪些? ■ 优点 1. 预测阶段的计算速度快,树与树之间可并行化计算。 2. 在分布稠密的数据集上,泛化能力和表达能力都很好,这使得GBDT在Kaggle的众多竞赛中,经常名列榜首。 3. 采用决策树作为弱分类器使得GBDT模型具有较好的解释性和鲁棒性,能够自动发现特征间的高阶关系,并且也不需要对数据进行特殊的预处理如归一化等。 ■ 局限性 1. GBDT在高维稀疏的数据集上,表现不如支持向量机或者神经网络。 3. GBDT在处理文本分类特征问题上,相对其他模型的优势不如它在处理数值特征时明显。 3. 训练过程需要串行训练,只能在决策树内部采用一些局部并行的手段提高训练速度。 (49)XGBoost与GBDT的联系和区别有哪些? 1. GBDT是机器学习算法,XGBoost是该算法的工程实现。 2. 在使用CART作为基分类器时,XGBoost显式地加入了正则项来控制模型的复杂度,有利于防止过拟合,从而提高模型的泛化能力。 3. GBDT在模型训练时只使用了代价函数的一阶导数信息,XGBoost对代价函数进行二阶泰勒展开,可以同时使用一阶和二阶导数。 4. 传统的GBDT采用CART作为基分类器,XGBoost支持多种类型的基分类器,比如线性分类器。 5. 传统的GBDT在每轮迭代时使用全部的数据,XGBoost则采用了与随机森林相似的策略,支持对数据进行采样。 6. 传统的GBDT没有设计对缺失值进行处理,XGBoost能够自动学习出缺失值的处理策略。 参考:《百面机器学习算法工程师带你去面试》
1. 一次迭代是对所有样本进行计算,此时利用矩阵进行操作,实现了并行。
2. 由全数据集确定的方向能够更好地代表样本总体,从而更准确地朝向极值所在的方向。当目标函数为凸函数时,BGD一定能够得到全局最优。
缺点:
1. 当样本数目 m 很大时,每迭代一步都需要对所有样本计算,训练过程会很慢。
1. 由于不是在全部训练数据上的损失函数,而是在每轮迭代中,随机优化某一条训练数据上的损失函数,这样每一轮参数的更新速度大大加快。
缺点:
1. 准确度下降。由于即使在目标函数为强凸函数的情况下,SGD仍旧无法做到线性收敛。
2. 可能会收敛到局部最优,由于单个样本并不能代表全体样本的趋势。
1. 通过矩阵运算,每次在一个batch上优化神经网络参数并不会比单个数据慢太多。
2. 每次使用一个batch可以大大减小收敛所需要的迭代次数,同时可以使收敛到的结果更加接近梯度下降的效果。(比如上例中的30W,设置batch_size=100时,需要迭代3000次,远小于SGD的30W次)
3. 可实现并行化。
缺点:
1. batch_size的不当选择可能会带来一些问题。