深度学习方面的问题
深度学习的实质 及其 与浅层学习的区别
深度学习实质:多隐层+海量数据——>学习有用特征—–>提高分类或预测准确性
区别:(1)DL强调模型深度
(2)DL突出特征学习的重要性:特征变换+非人工
BP算法为什么不能适应于深度学习
BP为传统多层感知机的训练方法,<=5层
问题:(1)梯度越来越稀疏(梯度扩散<—-非凸目标函数)
(2)局部最小
(3)一般,有标签
NOTE:解决其中局部最小值的方法:(1)多组不同随机参数,取最好参数 (2)启发式优化算法:模拟退火 或 遗传 (3)随机梯度下降
CNN卷基层和pooling层的作用
卷积层:特征提取
子采样层/池化层:缩减输入数据的规模
DNN常用的激活函数有哪些,各有什么特点
(1)sigmoid:易饱和(梯度消失),非0均值 (2)tanh,改进了sigmoid的第二个缺点,即它是0均值的 (3)ReLU,收敛快(不容易饱和),求梯度简单(没有指数计算,只需要阈值就可以),有稀疏特性。缺点是神经元容易坏死。
由于ReLU在x<0时梯度为0,这样就导致负的梯度在这个ReLU被置零,而且这个神经元有可能再也不会被任何数据激活。如果这个情况发生了,那么这个神经元之后的梯度就永远是0了,也就是ReLU神经元坏死了,不再对任何数据有所响应。实际操作中,如果你的learning rate 很大,那么很有可能你网络中的40%的神经元都坏死了
解决relu神经元坏死问题
当然,如果你设置了一个合适的较小的learning rate,这个问题发生的情况其实也不会太频繁。
relu的变种
leaky-relu:
$$f(x)=\alpha x,(x < 0)$$
$$f(x)=x,(x>=0)$$
这里的 α 是一个很小的常数。这样,即修正了数据分布,又保留了一些负轴的值,使得负轴信息不会全部丢失。
Parametric ReLU:对于 Leaky ReLU 中的α,通常都是通过先验知识人工赋值的。
然而可以观察到,损失函数对α的导数我们是可以求得的,可不可以将它作为一个参数进行训练呢
Randomized ReLU:
Randomized Leaky ReLU是 leaky ReLU 的random 版本 ,核心思想就是,在训练过程中,α 是从一个高斯分布 U(l,u) 中 随机出来的,然后再测试过程中进行修正(有点像dropout的用法)
什么样的资料不适合用深度学习?
(1)数据量小 (2)没有局部相关性
什么是共线性,跟过拟合有何关联?
共线性:高度相关—>冗余——>过拟合
解决:排除相关、加入权重正则
pooling技术有哪些,有什么作用,有什么区别
pooling的结果是使得特征减少,参数减少,但pooling的目的并不仅在于此。pooling目的是为了保持某种不变性(平移),常用的有mean-pooling,max-pooling和Stochastic-pooling三种。
mean-pooling,即对邻域内特征点只求平均,max-pooling,即对邻域内特征点取最大。根据相关理论,特征提取的误差主要来自两个方面:(1)邻域大小受限造成的估计值方差增大;(2)卷积层参数误差造成估计均值的偏移。一般来说,mean-pooling能减小第一种误差,更多的保留图像的背景信息,max-pooling能减小第二种误差,更多的保留纹理信息。Stochastic-pooling则介于两者之间,通过对像素点按照数值大小赋予概率,再按照概率进行亚采样,在平均意义上,与mean-pooling近似,在局部意义上,则服从max-pooling的准则。
LeCun的“Learning Mid-Level Features For Recognition”对前两种pooling方法有比较详细的分析对比,如果有需要可以看下这篇论文。
其实pooling的目的就是为了使参数量减少,因为根本不需要那么多参数。pooling也只能做到在极小范围内的平移不变性,旋转和 伸缩是做不到的。其实不变性都是特征工程时代的概念了,现在在数据量极大的情况下,样本覆盖了足够多的variance,dnn自动就会把各种不变性学习出来
使用Pooling的目的之一是获取一定的特征不变性,目前用的比较多的是Max Pooling。
max pooling是DCNN的非线性来源之一,然后在现代的深度神经网络中,最大的非线性来源是ReLU类的激活函数。
因此,目前对使用Pooling也存在一定的争议,一些最新的工作已经不在网络的中间层使用pooling层了(或者只在最后一层使用average pooling,比如说network in network)。
缺点在于会丢失信息。
pooling的反向传播
对于mean pooling,真的是好简单:假设pooling的窗大小是2x2, 在forward的时候啊,就是在前面卷积完的输出上依次不重合的取2x2的窗平均,得到一个值就是当前mean pooling之后的值。backward的时候,把一个值分成四等分放到前面2x2的格子里面就好了。如下
forward: [1 3; 2 2] ->2
backward:2-> [0.5 0.5; 0.5 0.5]
max pooling就稍微复杂一点,forward的时候你只需要把2x2窗子里面那个最大的拿走就好了,backward的时候你要把当前的值放到之前那个最大的位置,其他的三个位置都弄成0。如下
forward: [1 3; 2 2] -> 3
backward:3-> [0 3; 0 0]
特征选择的方法
特征选择是特征工程中的重要问题(另一个重要的问题是特征提取),坊间常说:数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限而已。由此可见,特征工程尤其是特征选择在机器学习中占有相当重要的地位。
特征选择方法举例
计算每一个特征与响应变量的相关性:工程上常用的手段有计算皮尔逊系数和互信息系数,皮尔逊系数只能衡量线性相关性而互信息系数能够很好地度量各种相关性
构建单个特征的模型,通过模型的准确性为特征排序,借此来选择特征
通过L1正则项来选择特征:L1正则方法具有稀疏解的特性,因此天然具备特征选择的特性,但是要注意,L1没有选到的特征不代表不重要,原因是两个具有高相关性的特征可能只保留了一个,如果要确定哪个特征重要应再通过L2正则方法交叉检验;
训练能够对特征打分的预选模型:RandomForest和Logistic Regression等都能对模型的特征打分,通过打分获得相关性后再训练最终模型;
通过深度学习来进行特征选择:目前这种手段正在随着深度学习的流行而成为一种手段,尤其是在计算机视觉领域,原因是深度学习具有自动学习特征的能力.
特征选择方法分类
特征选择思维导图
Filter:过滤法,按照发散性或者相关性对各个特征进行评分,设定阈值或者待选择阈值的个数,选择特征。
Wrapper:包装法,根据目标函数(通常是预测效果评分),每次选择若干特征,或者排除若干特征。
Embedded:集成方法,先使用某些机器学习的算法和模型进行训练,得到各个特征的权值系数,根据系数从大到小选择特征。类似于Filter方法,但是是通过训练来确定特征的优劣。
降维:PCA LDA等。
Filter过滤法
方差选择法
使用方差选择法,先要计算各个特征的方差,然后根据阈值,选择方差大于阈值的特征
相关系数法
使用相关系数法,先要计算各个特征对目标值的相关系数以及相关系数的P值
卡方检验
经典的卡方检验是检验定性自变量对定性因变量的相关性
互信息法
经典的互信息也是评价定性自变量对定性因变量的相关性的
Embedded 集成方法
基于惩罚项的特征选择法
L1惩罚项降维的原理在于保留多个对目标值具有同等相关性的特征中的一个
基于树模型的特征选择法
树模型中GBDT也可用来作为基模型进行特征选择
深度学习方法
降维
将原始的样本映射到维度更低的样本空间中。
PCA是为了让映射后的样本具有最大的发散性;而LDA是为了让映射后的样本有最好的分类性能。所以说PCA是一种无监督的降维方法,而LDA是一种有监督的降维方法。
LR相关问题
LR与BP
首先,神经网络的最后一层,也就是输出层,是一个 Logistic Regression (或者 Softmax Regression ),也就是一个线性分类器,中间的隐含层起到特征提取的作用,把隐含层的输出当作特征,然后再将它送入下一个 Logistic Regression,一层层变换。
神经网络的训练,实际上就是同时训练特征提取算法以及最后的 Logistic Regression的参数。为什么要特征提取呢,因为 Logistic Regression 本身是一个线性分类器,所以,通过特征提取,我们可以把原本线性不可分的数据变得线性可分。要如何训练呢,最简单的方法是(随机,Mini batch)梯度下降法
LR为什么使用sigmoid函数
源于sigmoid,或者说exponential family所具有的最佳性质,即maximum entropy的性质。maximum entropy给了logistic regression一个很好的数学解释。为什么maximum entropy好呢?entropy翻译过来就是熵,所以maximum entropy也就是最大熵。熵用在概率分布上可以表示这个分布中所包含的不确定度,熵越大不确定度越大。均匀分布熵最大,因为基本新数据是任何值的概率都均等。而我们现在关心的是,给定某些假设之后,熵最大的分布。也就是说这个分布应该在满足我假设的前提下越均匀越好。比如大家熟知的正态分布,正是假设已知mean和variance后熵最大的分布。首先,我们在建模预测 Y|X,并认为 Y|X 服从bernoulli distribution,所以我们只需要知道 P(Y|X);其次我们需要一个线性模型,所以 P(Y|X) = f(wx)。接下来我们就只需要知道 f 是什么就行了。而我们可以通过最大熵原则推出的这个 f,就是sigmoid。
面试问了如何在海量数据中查找给定部分数据最相似的top200向量,向量的维度也很高. 因为之前了解过其他面蚂蚁金服的朋友,也有问到这个题目的
所以反应比较快,直接就说可以用KD树,聚类,hash,
一天之内两连面,还是问了很多机器学习算法的东西 为什么LR需要归一化或者取对数,为什么LR把特征离散化后效果更好 为什么把特征组合之后还能提升,反正这些基本都是增强了特征的表达能力,或者更容易线性可分吧
在logistic regression (LR)中,这个目标是什么呢?最大化条件似然度。考虑一个二值分类问题,训练数据是一堆(特征,标记)组合,(x1,y1), (x2,y2), .... 其中x是特征向量,y是类标记(y=1表示正类,y=0表示反类)。LR首先定义一个条件概率p(y|x;w)。p(y|x;w)表示给定特征x,类标记y的概率分布,其中w是LR的模型参数(一个超平面)。有了这个条件概率,就可以在训练数据上定义一个似然函数,然后通过最大似然来学习w。这是LR模型的基本原理。
为什么LR把特征离散化后效果更好
逻辑回归属于广义线性模型,表达能力受限;单变量离散化为N个后,每个变量有单独的权重,相当于为模型引入了非线性,能够提升模型表达能力,加大拟合;(哑变量)
特征离散化以后,起到了简化了逻辑回归模型的作用,降低了模型过拟合的风险。
连续特征的离散化:在什么情况下将连续的特征离散化之后可以获得更好的效果?
在工业界,很少直接将连续值作为逻辑回归模型的特征输入,而是将连续特征离散化为一系列0、1特征交给逻辑回归模型,这样做的优势有以下几点:
离散特征的增加和减少都很容易,易于模型的快速迭代;
稀疏向量内积乘法运算速度快,计算结果方便存储,容易扩展;
离散化后的特征对异常数据有很强的鲁棒性:比如一个特征是年龄>30是1,否则0。如果特征没有离散化,一个异常数据“年龄300岁”会给模型造成很大的干扰;
逻辑回归属于广义线性模型,表达能力受限;单变量离散化为N个后,每个变量有单独的权重,相当于为模型引入了非线性,能够提升模型表达能力,加大拟合;
离散化后可以进行特征交叉,由M+N个变量变为M*N个变量,进一步引入非线性,提升表达能力;
特征离散化后,模型会更稳定,比如如果对用户年龄离散化,20-30作为一个区间,不会因为一个用户年龄长了一岁就变成一个完全不同的人。当然处于区间相邻处的样本会刚好相反,所以怎么划分区间是门学问;
特征离散化以后,起到了简化了逻辑回归模型的作用,降低了模型过拟合的风险。
李沐曾经说过:模型是使用离散特征还是连续特征,其实是一个“海量离散特征+简单模型” 同 “少量连续特征+复杂模型”的权衡。既可以离散化用线性模型,也可以用连续特征加深度学习。就看是喜欢折腾特征还是折腾模型了。通常来说,前者容易,而且可以n个人一起并行做,有成功经验;后者目前看很赞,能走多远还须拭目以待。
如何用LR建立一个广告点击的模型:
特征提取—>特征处理(离散化、归一化、onehot等)—>找出候选集—->模型训练,得到结果
LR的过拟合
减少feature个数(人工定义留多少个feature、算法选取这些feature)
正则化(为了方便求解,L2使用较多)
添加正则化后的损失函数变为: $$J(w)=-\frac{1}{N} \sum_{i=1}^N{\left(y_ilog(h_w(x_i))+(1-y_i)log(1-h_w(x_i))\right)} + \lambda ||w||_2$$
同时w的更新变为: $$w:=w-\alpha * \left(h_w(x_j)-y_j)x_i\right) -2\alphaw_j$$
关于LR的多分类:softmax
$$P(Y=a|x)=\frac{exp(w_ax)}{(\sum_{i=1}^k(wix))} ; 1 < a < k$$
这里会输出当前样本下属于哪一类的概率,并且满足全部概率加起来=1
关于softmax和k个LR的选择
如果类别之间是否互斥(比如音乐只能属于古典音乐、乡村音乐、摇滚月的一种)就用softmax
否则类别之前有联系(比如一首歌曲可能有影视原声,也可能包含人声,或者是舞曲),这个时候使用k个LR更为合适
Logistic回归优点:
实现简单;
分类时计算量非常小,速度很快,存储资源低;
缺点:
容易欠拟合,一般准确度不太高
只能处理两分类问题
SVM相关问题
SVM的主要特点
(1)非线性映射-理论基础
(2)最大化分类边界-方法核心
(3)支持向量-计算结果
(4)小样本学习方法 ,最终的决策函数只有少量支持向量决定,避免了“维数灾难” ,少数支持向量决定最终结果—->可“剔除”大量冗余样本+算法简单+具有鲁棒性
(7)学习问题可表示为凸优化问题—->全局最小值
(8)可自动通过最大化边界控制模型,但需要用户指定核函数类型和引入松弛变量
(9)适合于小样本,优秀泛化能力(因为结构风险最小)
(10)泛化错误率低,分类速度快,结果易解释
缺点:
(1)大规模训练样本(m阶矩阵计算)
(2)传统的不适合多分类
(3)对缺失数据、参数、核函数敏感
为什么要引入对偶问题
(1)容易求解 (2)核函数
Note:拉格朗日对偶没有改变最优解,但改变了算法复杂度:原问题—样本维度;对偶问题–样本数量。所以 线性分类&&样本维度<样本数量:原问题求解(liblinear默认);
非线性–升维—一般导致 样本维度>样本数量:对偶问题求解
样本失衡的影响
超平面会靠近样本少的类别。因为使用的是软间隔分类,而如果对所有类别都是使用同样的惩罚系数,则由于优化目标里面有最小化惩罚量,所以靠近少数样本时,其惩罚量会少一些。
对正例和负例赋予不同的C值,例如正例远少于负例,则正例的C值取得较大,这种方法的缺点是可能会偏离原始数据的概率分布;
对训练集的数据进行预处理即对数量少的样本以某种策略进行采样,增加其数量或者减少数量多的样本
样本失衡时,如何评价分类器的性能好坏?
使用ROC曲线
样本没有规范化对SVM有什么影响?
对偶问题的优化目标函数中有向量的内积计算(优化过程中也会有内积计算的,见SMO),径向基核函数中有向量的距离计算,存在值域小的变量会被忽略的问题,影响算法的精度。参考
数据维度大于数据量的对SVM的影响?
这种情况下一般采用线性核(即无核),因为此时特征够用了(很大可能是线性问题),没必要映射到更高维的特征空间。
拉格朗日乘子法 和KKT条件
凸函数
前提条件凸函数:下图左侧是凸函数。
左侧是凸函数
凸的就是开口朝一个方向(向上或向下)。更准确的数学关系就是:
enter description here
或者
enter description here
对于凸问题,你去求导的话,是不是只有一个极点,那么他就是最优点,很合理。
等式条件约束
当带有约束条件的凸函数需要优化的时候,一个带等式约束的优化问题就通过拉格朗日乘子法完美的解决了。
$$min \quad f = 2x_12+3x_22+7x_3^2 \s.t. \quad 2x_1+x_2 = 1 \ \quad \quad \quad 2x_2+3x_3 = 2$$
可以使用
$$min \quad f = 2x_12+3x_22+7x_3^2 +\alpha _1(2x_1+x_2- 1)+\alpha _2(2x_2+3x_3 - 2)$$
这里可以看到与α1,α2相乘的部分都为0,根原来的函数是等价的。所以α1,α2的取值为全体实数。现在这个优化目标函数就没有约束条件了吧。然后求导数。
不等式约束与KKT条件
任何原始问题约束条件无非最多3种,等式约束,大于号约束,小于号约束,而这三种最终通过将约束方程化简化为两类:约束方程等于0和约束方程小于0。
$$min \quad f = x_12-2x_1+1+x_22+4x_2+4 \s.t. \quad x_1+10x_2 > 10 \ \quad \quad \quad 10 x_1-10x_2 < 10$$
现在将约束拿到目标函数中去就变成:
$$L(x,\alpha) = f(x) + \alpha_1g1(x)+\alpha_2g2(x)\ =x_12-2x_1+1+x_22+4x_2+4+ \alpha_1(10-x_1-10x_2 ) +\\alpha_2(10x_1-x_2 - 10)$$
其中g是不等式约束,h是等式约束(像上面那个只有不等式约束,也可能有等式约束)。那么KKT条件就是函数的最优值必定满足下面条件:
(1) L对各个x求导为零;
(2) h(x)=0;
(3) $\sum\alpha_ig_i(x)=0,\alpha_i\ge0$
第三个式子不好理解,因为我们知道在约束条件变完后,所有的g(x)<=0,且αi≥0,然后求和还要为0,无非就是告诉你,要么某个不等式gi(x)=0,要么其对应的αi=0。那么为什么KKT的条件是这样的呢?
SVM的原问题和对偶问题
原问题
原问题
拉格朗日乘子法结果
对偶问题
求导得到
求导得到
代入乘子算式得到
对偶结果
就得到的原问题的对偶问题
对偶问题
为什么要引入对偶算法
对偶问题往往更加容易求解(结合拉格朗日和kkt条件)
可以很自然的引用核函数(拉格朗日表达式里面有内积,而核函数也是通过内积进行映射的)
SVM解决过拟合的方法
决定SVM最优分类超平面的恰恰是那些占少数的支持向量,如果支持向量中碰巧存在异常点就会过拟合,解决的方法是加入松弛变量。
另一方面从损失函数角度看,引入了L2正则。
为什么要把原问题转换为对偶问题?
因为原问题是凸二次规划问题,转换为对偶问题更加高效。
为什么求解对偶问题更加高效?
因为只用求解alpha系数,而alpha系数只有支持向量才非0,其他全部为0.
alpha系数有多少个?
样本点的个数
L1还可以用来选择特征
A 为什么L1可以用来选择特征
B 因为L1的话会把某些不重要的特征压缩为0
A 为什么L1可以把某些特征压缩为0
B 因为(画图)L1约束是正方形的,经验损失最有可能和L1的正方形的顶点相交,L1比较有棱角。所以可以把某些特征压缩为0
SVM优缺点
优点:
使用核函数可以向高维空间进行映射
使用核函数可以解决非线性的分类
分类思想很简单,就是将样本与决策面的间隔最大化
分类效果较好
缺点:
对大规模数据训练比较困难
无法直接支持多分类,但是可以使用间接的方法来做
SMO算法
SMO
SMO是用于快速求解SVM的
它选择凸二次规划的两个变量,其他的变量保持不变,然后根据这两个变量构建一个二次规划问题,这个二次规划关于这两个变量解会更加的接近原始二次规划的解,通过这样的子问题划分可以大大增加整个算法的计算速度
SVM多分类问题
间接法
一对多
其中某个类为一类,其余n-1个类为另一个类,比如A,B,C,D四个类,第一次A为一个类,{B,C,D}为一个类训练一个分类器,第二次B为一个类,{A,C,D}为另一个类,按这方式共需要训练4个分类器,最后在测试的时候将测试样本经过这4个分类器f1(x),f2(x),f3(x)和f4(x),取其最大值为分类器(这种方式由于是1对M分类,会存在偏置,很不实用)
一对一(libsvm实现的方式)
任意两个类都训练一个分类器,那么n个类就需要$n*(n-1)/2$个svm分类器。
还是以A,B,C,D为例,那么需要{A,B},{A,C},{A,D},{B,C},{B,D},{C,D}为目标共6个分类器,然后在预测的将测试样本通过这6个分类器之后进行投票选择最终结果。(这种方法虽好,但是需要$n*(n-1)/2$个分类器代价太大,不过有好像使用循环图来进行改进)
reference
各种机器学习的应用场景分别是什么?例如,k近邻,贝叶斯,决策树,svm,逻辑斯蒂回归