机器学习秋招复习知识点

1.逻辑回归为什么用交叉熵损失函数而不用平方误差函数?

答: 因为平方误差函数得到的损失函数,是一个非凸函数,求解时很容易陷入局部最优,而交叉熵损失函数是一个凸函数,通过凸优化算法很容易得到最优解。
在这里插入图片描述
在这里插入图片描述
交叉熵作为损失函数时,参数 w的梯度只和当前预测值与实际值的差值有关,没有受到sigmoid导数的影响,且真实值与预测值相差越大,梯度越大,更新速度越快。
逻辑回归为什么用sigmoid作为激活函数:因为逻辑回归是假设分布服从过一个伯努利分布,而sigmoid是伯努利分布的指数形式。
交叉熵损失函数是为了预测的数据分布与真实的数据分布之间差异越小越好。

对于随机变量,有两个单独的概率分布,KL散度可以用来表示这两个分布之间的差异,不具有对称性。
实际上KL散度 = 交叉熵 - 熵,但因为数据的分布A是固定的,所以最小化KL散度等价于最小化交叉熵。

熵:可以表示一个事件A的自信息量,也就是A包含多少信息。
KL散度:可以用来表示从事件A的角度来看,事件B有多大不同。
交叉熵:可以用来表示从事件A的角度来看,如何描述事件B。

深度学习中交叉熵函数的优势:

因为在训练中主要依靠的是损失函数的梯度,沿着梯度下降的方向去调整参数。
如果使用均方误差函数,参数的梯度和激活函数的梯度成正比,激活函数的梯度越大,参数的调整幅度越大。常用的sigmoid函数的梯度在输入较大的时候梯度比较小,导致初始输入激活函数的误差越大,下降速度越缓慢,训练速度也就越慢。
sigmoid的函数曲线(横轴表示输入,纵轴表示输出):
从图中看出,初始输入(也就是误差)越大,梯度越小,下降就会越缓慢;
在这里插入图片描述

使用的是交叉熵损失函数的话,它的梯度直接和当前的输出值与实际值之间的误差相关,误差越大,梯度越大,参数调整的也就越快,训练速度也就越快,所以用交叉熵损失函数的训练效果比均方误差要好。
交叉熵的梯度更新公式:
交叉熵的梯度更新公式
具体见:交叉熵代价函数(作用及公式推导)

2.解决非线性问题时,SVM采用核技巧,逻辑回归为什么不用?

答:SVM只有少量的支持向量参与到核函数运算中,计算复杂度不高,而逻辑回归如果要使用核技巧,所有的样本点都要参与运算,计算复杂度太高。

3.为什么要引入核函数?

  1. 解决线性不可分
  2. 解决在高维空间中计算困难的问题

4.SVM为什么对噪声、缺失的特征值敏感?

SVM没有针对缺失值作特殊处理,而且SVM希望样本在特征空间中线性可分,所以特征空间的好坏很重要,缺失特征值对训练结果又很大影响。
当噪声成为支持向量的时候,对模型的影响是非常大的。

5.XGboost节点分裂依靠什么?

遍历特征的所有值,依次寻找使得损失函数前后相差最大的进行分裂。

6.SVM优缺点

优点:

  1. 解决高维特征的分类问题和回归问题很有效,特征维度大于样本数时仍然有很好的效果;
  2. 仅仅使用一部分的支持向量来做超平面的决策,无需依赖所有的数据;
  3. 有核函数可以使用,可以灵活的解决各种非线性的分类回归问题;
  4. 样本量不是海量数据的时候,准确率高,泛华能力强;

缺点:

  1. 如果特征维度远大于样本数时,效果一般;
  2. 样本量非常大时,核函数的映射维度非常高,计算量大,不太适合使用;
  3. 非线性问题的核函数没有通用标准,难以选择合适的核函数;
  4. 对缺失数据敏感。

7.SVM为什么要求解对偶问题

原始问题是一个凸二次规划问题,但对偶问题更容易求解;
原始问题是最后的求解是对w、b求解,复杂度和特征的维度有关,其维数是训练样本的特征维数 + 1, 对偶问题是对α求解,其维数等于样本个数,所以svm对高维空间中较稀疏的样本表现较好;
满足KKT条件时,原始问题的解和对偶问题解是等价的;
自然引入核函数,推广到非线性模型;
不把参数w、b消去,无法得到内积形式;

8.SVM在大样本上数据表现

SVM算法对大规模训练样本难以实现,求解二次规划涉及M阶矩阵的运算,M数量很大时,将耗费大量的时间和内存。

9.LR和SVM区别联系

相同点:

  1. SVM和 lr都是分类算法;
  2. 如果不考虑核函数,都是线性分类算法,即分类决策面都是线性的;
  3. 都是监督学习算法;

不同点:
1.SVM只考虑离分类面最近的支持向量,而lr考虑所有的数据点;SVM不依赖于数据分布,分类平面不受一类点影响,LR则受所有数据点的影响;
4. 非线性问题时,SVM可以采用核函数方法,而LR不采用;
因为 SVM 只需要计算支持向量,而lr需要计算所有数据点,计算复杂度太高;
5. SVM损失函数自带正则化;
6. LR可以输出概率,SVM不行,结果没有概率意义;
7. LR的损失函数是为了减少分类错误,SVM使决策面到所有样本的距离最大;

核函数的选择:
1.线性核,主要用于线性可分的情况,参数少,速度快;
2.RBF核,主要用于线性不可分,参数多,分类结果依赖于参数;

如果特征数量大,跟数量差不多,可以选取LR或者线性核函数的SVM;
如果特征数量小, 样本数量一般,SVM+高斯核;
如果特征数量小,样本数量多,手工添加一些feature变成第一种;

两个算法的目的都是增加对分类影响较大的数据点的权重,减少与分类关系较小的数据点的权重。SVM通过只考虑支持向量,也就是和分类最相关的少数点。而逻辑回归通过非线性映射,大大减小了离分类平面较远的点的权重,相对提升了与分类最相关的权重。

逻辑回归相对来说,更容易解释,模型更简单,特别是大规模线性分类时比较方便。

10,方差和偏差

1.偏差度量了学习算法的期望预测和真实结果的偏离程度,即学习算法本身的拟合能力;
2.方差度量了同样大小的训练集变动所导致的学习性能变化,即刻画了数据扰动所造成的影响;(未知数据在模型上的性能表现);
3.噪声则表达了当前任务上任何学习算法所能达到的期望泛化误差的下界;

11.过拟合

1.数据增强;

  1. 从数据源头获取更多数据;
  2. 数据增强;
  3. 根据当前数据集生成;

2.使用合适模型(数据太少+模型太复杂);

  1. early stopping;
  2. 限制权值,也叫正则化;
  3. 网络增加噪声;
  4. 减少网络的复杂度;

3.集成模型;

  1. bagging;
  2. boosting;
  3. dropout;

12.梯度和方向导数之间的区别

方向导数:是某个方向上的偏导数,假如一个函数有m个自变量,对m个自变量各自求偏导,就会得到m个方向的偏导数;
梯度:是指方向导数中,会使得函数变化最大的方向。它是一个矢量,其方向上的导数最大,大小刚好就是方向导数的大小;

13.评价指标AUC的含义

物理意义:随机给定一个正样本和一个负样本, 用一个分类器进行分类预测,正样本的得分比负样本的得分要大的概率;

计算方式:
对于二分类, 先画出 ROC曲线,曲线的每一个点表示一个阈值,分类对所有样本进行打分预测,打分大于阈值的认为是正类,小于阈值的是负类。将打分从大到小排序,依次从大到小调整阈值大小,坐标横轴是假阳率,纵轴是真阳率,每个不同的阈值最终都会得出不同的(假阳率,真阳率),也就是一个个坐标点,连接起来就是ROC曲线。

随着阈值的降低,被认为是正类的样本数越来越多,那么正样本的召回率是一直在增大,相反负样本的召回率在减小。如果正样本的召回率增加的速度大于负样本的召回率的下降速度,说明分类器效果还是不错的。

精准率:所找到的信息中有多少是用户真正感兴趣的,预测的结果中,预测为正样本中,有多少结果是正确的。
召回率:有多少用户感兴趣的信息被找出来了,预测正确的正样本数,占预测结果的比例。

真阳率(真正率):真正的样本率,即标签为正预测也为正的样本数,占实际为正的所有样本数比例;
假阳率(假正率):假的正样本率,即标签为负预测却为正的样本数,占所有实际为负的样本数比例;

14.缺失值如何处理(特征工程)

1.缺失值较多的特征,直接舍弃;
2.用0、均值、中值填充;
3. 用上下数据进行填充;
4. 插值法填充,通过两点估计中间的值;
5. 用算法预测缺失值

15.FM算法

主要目标:
解决数据稀疏的情况下,特征组合(为什么要特征组合?没有考虑到特征与特征之间的关系)的问题;
优点:
1.可以在非常稀疏的数据中,进行合理的参数估计;
2.FM的时间复杂度是线性的;
3.FM是一个通用模型,可以用于任何特征为实值的情况;

普通的线性模型都是将各个特征独立考虑,没有考虑到特征与特征之间的相互关系。
简单起见,考虑二阶交叉的情况下,具体模型为:
在这里插入图片描述
模型的前部分就是LR模型,后半部分交叉项即特征的组合。当交叉项全为0时,退化为LR模型。从公式中可以看出,组合特征的参数一共有n(n - 1)/2 , 任意两个参数都是独立的。
在数据稀疏的情况下,二次项参数非常难以训练,每个参数的训练都需要大量xi 和 xj 非零的样本,由于样本本就稀疏,这样的样本会非常少。

16.调参经验

Adaboost调参:
sklearn库中,adaboost支持两种方法,AdaBoostClassifier和AdaBoostRegressor,一个用于分裂,另一个回归。

分类器使用两种算法实现,SAMME 和 SAMME.R,回归则是Adaboost.R2.

调参首先对框架,具体参数有:
1。base_estimator:弱分类器,需要支持样本权重。分类时默认使用CART分类树,回归时则是CART回归树。如果选择的算法是SAMME.R,对应的弱分类器就需要支持概率预测;
2. algorithm:SAMME使用弱分类器的分类效果作为弱学习器权重,SAMME.R使用预测概率大小来作为弱分类器的权重。默认是SAMME.R,由于是概率连续值,迭代一般比SAMME快。
3. loss:只有回归时有,有线性、平方、指数三种。
4. n_estimators:弱分类器的迭代次数,一般是50;
5. learning_rate:每个弱学习器的权重缩减系数。

接下来是对弱分类器的参数,对于决策树而言主要有最大特征数、树的深度、内部节点再划分所需的最小样本数、叶子节点最少的样本数、叶子节点最小的样本权重、最大叶子节点数;

17.adaboost

缺点:
对异常样本敏感,异常样本可能在迭代中获得较高的权重。
优点:
1.作为分类器时,精度很高;
2.使用各种回归分裂模型来构建弱学习器,非常灵活;
3. 构造简单,易于理解;
4. 不容易发生过拟合;

18 L1的损失函数不可导?

损失函数不可导时,最小二乘法和梯度下降法不再适用,可以用坐标轴下降法和最小角回归法、近端梯度下降
坐标轴下降法:沿着坐标轴的方向去下降,梯度下降沿着梯度的负方向下降,他们都是迭代法。

和梯度下降法比较:

  1. 坐标下降,每次迭代中,沿着一个坐标方向进行一维搜索,固定其他的坐标方向,找到一个函数的局部最小值,而梯度下降总是沿着梯度的负方向求函数的局部最小值;
  2. 坐标下降是一种非梯度优化,依次使用不同的坐标方向进行迭代,一个周期的一维搜索过程相对于一个梯度下降的迭代;
  3. 梯度下降的方向利用导数信息来确定搜索方向,该方向可能不与任何坐标轴平行。坐标轴下降是利用坐标方向进行搜索;
  4. 两者都是迭代方法,每轮迭代,都需要O(MN)的计算量,m为样本数,n为特征维度;

19.连续特征的离散化

优势:

  1. 离散特征的增加和减少都很快,易于模型的迭代;
  2. 稀疏向量的内机乘法运算速度快,计算结果方便存储;
  3. 离散后的特征对异常数据有很强的鲁棒性;
  4. 逻辑回归属于广义线性模型,表达能力受限,单变量离散化为N个以后,每个变量有单独的权重,相对于为模型引入了非线性,提升了模型的表达能力;
  5. 离散化后可以进行特征交叉,有 m + n 变成 m * n, 进一步引入非线性,提升表达能力;
  6. 特征离散化后,模型会更稳定,例如一个年龄20-30,不会因为用户增长了一岁就变成完全不同的人;
  7. 特征离散化以后,起到了简化逻辑回归模型的作用,降低了模型过拟合的风险。

20.XGBoost处理缺失值

xgboost把缺失值当做稀疏矩阵对待,确实数据会被分到左子树和右字数分别计算损失,选择较优的那个。如果训练中没有缺失值,而预测时出现了,默认被分到右子树。

决策树处理缺失值:
1. 数值型变量的缺失值用中位数替换,描述型变量确实用对应类别中出现最多的数值代替。
2. 还是使用中位数和出现次数最多的数替换,对需要替换的数据先和其他数据做相似度测量。

21.RNN中的梯度消失和梯度爆炸

RNN在所有的时间步中共享参数(U,V,W),因此每个输出的梯度不仅取决于当前时间步的计算,还取决于以前的时间步计算。例如为了计算 t = 4 的梯度,还需要反向传播前3个步骤的梯度并求和(BPTT,时间反向传播)。

RNN模型如果需要实现长期记忆,需要将当前的计算与前面所有的计算连乘,计算量会暴增。
使用BPTT训练的普通RNN由于梯度消失和爆炸而难以学习长期依赖关系。

梯度消失是因为,激活函数tanh的导数在0-1之间,反向传播时更新前面的参数时,当参数初始化为小于1的时候,反向传播需要计算之前的导数,会产生一个连乘,而小于1的数连乘容易导致梯度消失;

梯度爆炸,当初始化足够大时候,tanh函数的导数连乘后大于 1, 导致偏导会极大,因而梯度爆炸;

22.LSTM问题

LSTM有三个输入(当前时刻网络的输入、上一时刻网络的输出h(t-1)、上一时刻的记忆单元状态),两个输出(当前输出值、当前时刻的记忆单元状态)。
在这里插入图片描述
第一步:
h(t - 1)是基于C(t - 1)的输出,可以理解为基于C(t - 1)的预测,
遗忘门: 对原有的记忆信息进行选择性的保留和遗忘;
第二步:
在这里插入图片描述

输入门:首先对原有的信息进行筛选,对新的信息进行筛选,然后将两个部分的信息结合到一起,C(t -1)成为C(t)。
当前的新状态以多大程度更新到记忆单元中。
第三步:
在这里插入图片描述

输出门:根据当前的C(t)产生h(t)
当前的输出多大程度上取决于当前的记忆单元;

23.共享参数

卷积神经网络的参数共享体现在,每个时间步中的卷积核是相同的,

24.XGBoost和GBDT的区别?

  1. 传统gbdt以CART作为基分类器,而xgboost还支持线性分类器,这个时候xgboost相当于带L1、L2正则化的逻辑斯提回归或者线性分类问题;
  2. GBDT只用到了一阶导数信息,而xgboost则对代价函数作了二阶泰勒展开,同时利用到了一阶和二阶导数。(xgboost支持自定义代价函数,只要函数一阶和二阶导存在);
  3. xgboost在代价函数中加入了正则项,用于控制模型的复杂度。正则项降低了模型的方差,防止过拟合现象;
  4. shinkage,相当于学习速率。xgboost在完成一次迭代后,会将叶子节点的权重乘以该系数,主要是为了削减每棵树的影响,让后面有更大的学习空间;
  5. 列抽样,xgboost借鉴了随机森林的做法,支持列抽样,不仅能降低过拟合,还减少了计算量;
  6. 对缺失值的处理,分别将有缺失值的样本分配到左叶子节点和右叶子节点,选择增益大的方向归类。如果训练集中没有缺失值而测试集中出现缺失值,需要为缺失值指定默认的分支方向;
  7. xgboost支持并行。并行是在特征粒度上进行的,决策树最耗时的一个步骤就是对特征的值进行排序(确定最佳分割点),xgboost在训练之前对数据进行预排序,保存为block结构,后续迭代中重复使用。节点分裂时,需要计算每个特征的增益,最终选择增益最大的那个特征进行分裂。
  8. 可并行的近似直方图算法;

25.一维卷积核有什么用

1*1的卷积核易于升维、降维。
若卷积核数量与输入相同,则单纯的向网络增加了非线性;

26.逻辑回归解决非线性

1.使用核技巧;2.特征离散化,特征组合;

27.SVM做回归问题

回归的优化目标函数可以和分类问题保持一致,
在这里插入图片描述
但约束问题不是最大化不同类别间支持向量的距离,用模型的输出与真实输出之间的均方差来计算损失,SVM允许真实与预测之间存在一定的偏差,只有当两者之间的偏差大于阈值时,才计算损失。相当于以模型为中心,构建了一个宽度为2倍阈值的间隔带,训练样本若落入间隔带中,则被认为是正确的。

28.SVD,奇异值分解原理

普通对矩阵作特征分解时,矩阵必须为方阵。当行列不一样时,可以用SVD来求解。
假设 矩阵A是一个 m * n 的矩阵,定义矩阵的SVD分解为:
在这里插入图片描述
中间是个 m * n的矩阵,除了主对角线上的元素外全为0,主对角线上的每个值称为奇异值,左边是m * m 的矩阵,右边是 n * n的矩阵。
左奇异矩阵可以用来对行数进行压缩,右奇异矩阵用于对列数即特征维度压缩,也即是PCA降维。
特征值矩阵是奇异值矩阵的平方。
SVD可以用于PCA降维,来做数据压缩和去噪,也可以用于推荐算法,将用户和喜好的矩阵作特征分解,进而得到隐含的用户需求来做推荐。

29.池化的作用

均值池化:
通过对领域内特征数值求平均来实现,能够抑制由于领域大小受限造成估计值方差增大的现象,特点是对背景的保留效果好。

最大池化:
取领域内的最大值实现,抑制网络参数误差造成估计均值偏移的现象,特点是更好的提取纹理信息。

池化本质是降采样,除了能够降低参数量之外,还能保持对平移、伸缩、旋转操作的不变性。

30.dropout内部实现

没有dropout之前的计算公式:
在这里插入图片描述
加入dropout之后:
在这里插入图片描述
伯努利函数,是以概率p随机生成一个只有0,1的向量。

让某个神经元以概率p停止工作,其实就是让他的激活函数值以概率 p 变为 0 。

预测阶段时,每个神经元的权重参数都要乘以概率 p。
或者在dropout之后,对激活值向量进行缩放,乘以1/(1 - P)。

为什么要缩放:训练的时候随机丢弃一些神经元,预测的时候就不能这样做了。如果丢弃的话,会带来结果不稳定的问题。补偿方案,就是对每个神经元的权重乘以 P,这样在总体上,使得测试数据和训练数据大致是一样的。

为什么能够解决过拟合?

  1. 模型集成;
  2. 减少神经元之间的复杂的共适应关系。因为dropout导致两个神经元不一定每次在一个网络中出现,这样权值的更新不在依赖于有固定关系的隐含节点的共同作用,阻止了某些特征仅仅在其他特定特征下才有效果的情况,这样就迫使网络去学习更鲁棒的特征。

实现代码:

# coding:utf-8
import numpy as np

# dropout函数的实现
def dropout(x, level):
    if level < 0. or level >= 1: #level是概率值,必须在0~1之间
        raise ValueError('Dropout level must be in interval [0, 1[.')
    retain_prob = 1. - level

    # 我们通过binomial函数,生成与x一样的维数向量。binomial函数就像抛硬币一样,我们可以把每个神经元当做抛硬币一样
    # 硬币 正面的概率为p,n表示每个神经元试验的次数
    # 因为我们每个神经元只需要抛一次就可以了所以n=1,size参数是我们有多少个硬币。
    random_tensor = np.random.binomial(n=1, p=retain_prob, size=x.shape) #即将生成一个0、1分布的向量,0表示这个神经元被屏蔽,不工作了,也就是dropout了
    print(random_tensor)

    x *= random_tensor
    print(x)
    x /= retain_prob

    return x

31.权值共享

图片的底层特征是与特征在图片中位置无关,而高级特征一般是与位置有关的,这时就要用局部全连接层或者全连接层。

32.LSTM解决梯度消失

多层网络中,影响梯度大小的因素有两个,权重和激活函数的偏导。深层的梯度是多个激活函数偏导乘积的形式来计算。如果这些偏导比较小或者为0,那么梯度容易消失。相反,如果偏导比较大,就有可能梯度爆炸。
解决方案:
选择一个合适的激活函数,它的梯度在一个合理的范围内。LSTM使用gate函数,有选择的让一部分信息通过。gate是由一个sigmoid函数和一个逐点乘积操作组成,sigmoid输出1或者0,用来判断通过还是阻止。所以当gate打开,梯度就不会消失;关闭,梯度不会爆炸。

33.CART分类回归树

回归树:
使用平方误差最小化准进行选择特征并划分,每个叶子节点给出的预测值,是划分到该叶子节点的所有样本目标值的均值。
要确定最优划分,还需要遍历所有属性,以及所有的取值来分别尝试划分并计算在此种划分情况下的最小平方误差,选取最小的作为此次划分。

分类树:
使用Gini指数最小化准则选择特征划分。基尼指数表示集合的不确定性,最小化误分类的概率。从数据集中随机抽取两个样本,其类别不一致的概率。基尼指数越小,纯度越高。

基尼指数与熵:

  1. 基尼指数计算不需要计算对数,更高效;
  2. 基尼指数更偏向于连续属性,熵更偏向于离散属性;

34. GBDT

  1. DT:全都是回归树,核心就是累加所有的树的结果作为最终结果,只有回归的结果累加起来才有意义,分类结果累加是没有意义的。
  2. GB:每一颗树学习的是之前所有树的残差,目标是减小残差。

gbdt中的Shrinkage思想:
它认为每次走一小步来逼近结果的效果,比每次迈一大步很快逼近结果的方式更容易防止过拟合。它不完全信任每次学习到残差,累加时只选取残差的一部分作为结果,通过多学习几棵树来弥补不足。
每次学习到的残差乘以step参数。
本质上,为每一刻树设置了一个weight,累加时需要乘以这个weight。
shinkage能够减少过拟合。

GBDT对异常值敏感。
优点:

  1. 每一次的残差计算实际上变相的增大了分错样本的权重,而对已经分对的样本都趋向于0.
  2. Grident体现在,残差是全局最优的绝对方向。

35. 一个事件的几率(odds)

指该事件发生与不发生的概率比值。

36. XGBoost

xgboost的目标函数表达式分为两部分,第一部分为loss function,第二部分为regularization。正则项包含两部分,一部分是提升树叶子节点的数量,控制树的复杂度,可以达到剪枝的效果。另一部分是每棵树的叶子节点的权重的平方和。
在这里插入图片描述

通过目标函数,xgboost的每棵子树倾向于学习较简单的树。另外当正则项参数为 0 时,目标表达式就会退化为传统的gradient tree boosting 模型。

对决策树来说,连续值特征进行划分时通常比较困难,因为连续值特征往往取值较多。通常做法是先按特征值进行排序,在按顺序计算增益选择划分点。xgboost的做法是在训练之前,预先按特征取值对样本进行排序。

由于预先保存为block结构,所以对叶节点进行分裂时,每个特征的增益计算就可以开多线程进行计算,训练速度由此提升。而且这种block结构也支持列抽样,每次从所有block特征中选择一个子集作为候选分裂特征就可以了。

当数据量非常大难以被加载到内存时或者在分布式环境中,近似分裂算法,将连续特征离散化,对于某个特征,首先根据特征分布寻找若干个分位点,分成不同的集合,根据分位点将相应样本划分到桶中。遍历特征时,只要对每个桶内的样本统计值进行累加统计,寻找最佳分裂点进行分裂。

37.深度可分离卷积

深度可分离卷积,首先独立的对各个通道进行卷积操作,然后再将不同通道之间的信息进行融合。
假如输入是 row × col × chan, 首先对三维数据作纵向上的卷积,也就是各个通道分开卷积,最终的输出通道与原始的输入通道保持一致,没有变化,即new_row × new_col × chan。这一步之后,再进行横向上的卷积,用 1 × 1 × new_chan的卷积核进行计算,得到的输出就是 new_row × new_col × new_chan的新数据。因为是1 × 1的卷积运算,所以也可以叫逐点卷积。

优点:
深度可分离卷积比普通卷积减少了所需要的参数,重要的是深度可分离卷积将以往普通卷积操作同时考虑通道和区域变成,卷积先只考虑区域,然后再考虑通道,实现了通道和区域的分离。

其中1×1 的内核,一个明显的目的是增加或减少图像的深度。如果卷积有太多或太少的通道,利用1×1可以进行平衡。还有另一种说法,1×1核的主要目的是应用非线性。在神经网络的每一层之后,都可以应用一个激活层。无论是relu、softmax还是其他,激活层都具有非线性。直线的组合仍然是直线,非线性层扩展了模型的可能性,这也是通常使深度网络优于宽度网络的原因。为了不显著增加参数量和计算量的情况下增加非线性层的数量,可以应用一个1×1的卷积核后再添加一个激活层,这有助于给网络增加一层深度。

38.分组卷积

普通卷积会对输入的数据整体上做一个卷积操作,分组卷积则是将数据纵向分为几组,每组分开用不同的卷积核进行运算后,再讲每组结果concat拼接起来。最终输出的通道数和普通卷积一样。
本身,分组卷积的设计就是为了减少对硬件设备的要求,它极大的减少了卷积运算的参数量。

39.空洞卷积

空洞卷积是针对图像语义分割问题中下采样会降低图像分辨率、对视信息而提出的一种卷积策略。利用添加空洞扩大感受野,让原本大小假如为3 × 3 (dilated rate= 1)的感受野,在相同计算量的情况下,拥有5 × 5 的感受野(dilated rate = 2), 从而无需下采样。

比普通卷积层多了一个超参数扩张率(dilated rate),指的是卷积核处理数据时卷积核中各参数的间距大小,空洞的位置全填进去 0 。相同的计算条件下,空洞卷积提供了更大的感受野。当网络层需要较大的感受野,但计算资源有限而无法提高卷积核数量或者大小时,可以考虑空洞卷积。

40.虚拟变量(哑变量)

它是人为虚设的一个变量,通常取值为0或1,来反映某个变量的不同属性。

原始的多分类变量转化为哑变量,每个哑变量表示某两个级别或若干个级别之间的差异,通过构建回归模型,每一个哑变量都能得出一个估计的回归系数,从而使回归的结果更容易解释,更具有实际意义。

对于具有n个分类属性的某一自变量,通常需要1个属性作为参照物,因此可以产生n - 1个虚拟变量。
比如血型A、B、O、AB,如果直接赋值为1、2、3、4,他们在数值上是具有从小到大的顺序关系,而实际上上它们之间应该不具有这种关系,直接将其带入到模型中是不合理的,此时需要将其转化为虚拟变量。

41.五中不同的归一化方式

ICS(internal covariate shift)现象:对于神经网络的各层输出,由于它们经过了层内的操作,其分布于各层对应的输入分布显然不同,而且差异会随着网络深度增大而增大,高层的输入分布变化会非常剧烈。

ICS会导致什么问题:1.上层参数需要不断适应新的输入数据分布,降低学习速度。2.下层输入的变化可能趋向于变大或变小,导致上层落入饱和区,使得学习速度变慢。3.每层的更新会影响到其它层。
为什么不用白化:

  • 白化计算成本太高;
  • 白化过程改变了网络每一层的分布;

normalization的权重伸缩不变性:
权重伸缩不变性是指,当权重按照常量进行伸缩时,得到的规范化后的值不变。权重伸缩变性可以有效的提高反向传播的效率,还具有参数正则化的效果。

假设输入是N×C×H×W,样本数、通道数、行、列;

Batch Normalization:
1.BN的计算是把每个通道的NHW单独拿出来作归一化处理;
2. 针对每一个channel 都有一组参数,用来恢复这层网络需要学到的分布;
3. batch size 越小,BN的效果也越差,因为计算中得到的均值和方差不能代表全局;

Layer Normalization:
1.把每个CHW单独拿出来,不受batchsize影响;
2.常用在RNN中,但如果输入特征区别大,不建议使用它做归一化处理;

Instance Normalization:
1.把每个HW单独拿出来作归一化处理,不受通道和batchsize的影响;

Group Normalization:
1.先把通道C分为G组,然后把每个分开的ghw单独拿出来作归一化处理,最后G组合并成新的CHW。
2.属于介于LN拟合IN之间的方法;

Switchable Normalization:
1.将BN、LN、IN结合,赋予权重,让网络自己去学习归一化应该使用什么方法。

42.GRU

GRU背后的原理和LSTM极其相似,也是利用门控机制控制输入、记忆等信息而在当前时间步做出预测。GRU有两个门,分别是重置门、更新门
重置门决定了如何将新的输入信息与前面的记忆结合,更新门决定了将之前的记忆保留程度。如果将重置门设为1,更新门设为0,则退化为传统RNN。

GRU和LSTM的区别在于:

  1. GRU有两个门(重置门、更新门),而LSTM有三个门(输入门、遗忘门、输出门)。
  2. GRU并不会控制并保留内部记忆(c_t),且没有LSTM中输出门。
  3. LSTM中的输入与遗忘门对应于GRU的更新门,重置门直接作用于前面的隐藏状态。
  4. 计算输出时并不用二阶非线性。

43.特征比数据量大时,选择什么样的分类器?

如果训练集很小,那么由于训练集的分布可能并不会接近于真实分布,这个时候高偏差/低方差的分类要比低偏差/高方差的分类器效果要好,因为在小样本数据集上低偏差可能就意味着过拟合。当训练集增大时,训练集分布越来越接近于真实分布,这时的低偏差就很重要了。

44.决策树如何处理缺失值

C4.5是通过概率权重的方法处理缺失值。

分两步:第一步,特征值缺失的情况下,计算所有特征的信息增益或则增益率时候,降低缺失值较多的特征的权重来体现信息的缺失。第二步,选定该划分特征,但样本缺失了该划分特征,将样本同时划分到所有子节点,不过要调整样本的权重。

45.那些机器学习算法不需要做归一化/标准化

为什么需要归一化/标准化?
前提:归一化/标准化实质上都是一种线性变化,线性变换不会改变原始数据的数值排序,这决定了归一化/标准化不会造成数据失效,反而能提高数据表现;

  1. 梯度下降求解需要(等高线);
  2. 无量纲化;
  3. 避免数值过大引起的问题;

通过梯度下降求解的模型一般都是需要归一化的,比如线性回归、逻辑回归、KNN、SVM、神经网络;
树模型不需要归一化;

归一化能提高梯度下降求最优解的速度,归一化之前如果数据处于一个相差较大的范围,比如1到1000,那么特征形成的等高线会非常尖,使用梯度下降进行求解时,很可能走之字路线,从而导致很多次迭代才能收敛。归一化后,等高线收缩到一个相对较圆的区间内,求解时能很快收敛。
归一化有可能提高精度;

标准化是:均值为0, 方差为1;
归一化:将特征向量缩放到系统数值范围,[0,1]或者[-1, 1];
非线性归一化:利用数学函数,将原始值进行映射,例如指数、正切、log等,经常用在数据分化比较大的地方。

归一化和标准化区别:

  1. 归一化是将样本特征值转换到同一量纲下,数据被映射到[0, 1]或[-1, 1]区间内,仅由变量的极值确定。
  2. 标准化是按特征矩阵的列处理数据,通过求z-score的方法,将数据转换为标准正态分布,和整体样本分布相关,每个样本点都能对标准化产生影响。

相同点:都能消除由于不同量纲所引起的误差,且都是一种线性变换,对向量按比例压缩再平移。

什么时候用归一化,什么时候用标准化?

  • 对输出结果范围有要求,数据较稳定、不存在极端的最大最小值,用归一化;
  • 数据存在较多噪音或异常值,用标准化。

神经网络必须归一化/标准化

  1. 数值问题。归一化/标准化可以避免一些不必要的数值问题,输入变量的数量级未必会引起数值问题,但要引起也不是很困难。比如tanh的非线性区间在[-1.7, 1.7]左右,意味着要使神经元有效,tanh的输入应该在1左右。这时输入x如果较大,权值就必须小,两者相乘容易发生数值溢出(Python中 421 × 0.002345 == 0.421 × 2.345 就不成立)。
  2. 求解需要。a.初始化,如果权值初始化在[-1, 1]而输入没有归一化且过大,神经元会饱和,梯度下降非常慢。b.梯度,过大数值在计算梯度更新时也会出现数值问题。c.学习率,梯度非常大,学习率就必须小,因此学习率的选择需要参考输入的范围,不如直接将数据归一化

树模型为什么不需要归一化?
树模型不需要归一化,因为他们不关心变量的值,而是关心变量之间的分布、变量间的条件概率。
数值的缩放不影响分裂点位置。按照特征值进行排序的,排列顺序不变,所属的分支以及分裂点就不变。

46.svm中的支持向量

线性不可分的情况下,对偶问题中的解中α > 0对应的样本点,称为支持向量。

47.stacking和blending集成方法

stacking:将训练集拆分成k个大小相似但互不相交的子集,选择其中一个作为测试集,剩余未训练集,一次轮换,得到k个弱学习器以及对应的输出,将k个输出作为新的训练集训练一个新的次学习器,作为最终的学习器。
弱分类器尽量使用多种算法,防止过拟合。
blending:将原始训练集分成两部分,在第一部分上训练多个模型,预测另一部分的结果,将结果作为新的特征继续训练。
个体学习器性能相近的时候,使用平均融合,相差较大时,用加权平均。

blending和stacking相比:

  1. 比stacking简单,不用k折验证;
  2. blending中两层使用的训练数据不同,避免信息泄露;
  3. blending杜数据的划分,导致第二轮数据较少,可能会过拟合;
  4. stacking使用多次的cv会比较稳健。

48.带dropout的决策树(DART)

xgboost:多棵树共同决策,所有决策树的结果累加起来作为最终结果;
问题:首先加入模型的决策树对模型的贡献非常大,较为靠后的树只影响到少部分样本,而对大部分的样本贡献微乎其微,容易导致模型过拟合并且对少数初始生成的树过度敏感。
xgboost采用缩减方法,为每一棵树设定一个很小的学习率,在一定程度上缓解了过拟合。

DART:将dropout技术引入,应用到增强树中,在训练过程中暂时丢弃部分已经生成的树,使模型中树的贡献更加均衡,防止模型过拟合。
DART在MART的基础上做了两处优化,第一处是在计算梯度时,仅仅从现有的模型中随机选择一个子集,通过该树子集创建新模型,计算新模型的负梯度,通过新的回归树去拟合该负梯度;
第二处是在对新增加的树进行标准化,因为新训练的树会尽力缩小模型和理想模型的差距,而丢弃树集也会缩小该差距,两者共同作用会导致模型过拟合。DART对新树进行标准化,按照丢弃树的数量,对新树进行等比例缩放,确保丢弃树和丢弃树集中的树在相同数量级。

49.判别式模型和生成式模型

判别式模型:对条件概率分布进行建模,如LR、SVM、神经网络等等;

生成式模型:对联合概率分布进行建模,如贝叶斯、高斯混合模型;

50. 激活函数的优缺点

1.sigmoid函数
在这里插入图片描述

  1. 便于求导的连续平滑函数,输出在(0,1)范围内,输出范围有限;
  2. 容易出现梯度消失现象,输出不是0均值,导致后面几层的输入都是非0均值的,会对梯度产生影响。假设输入为正数或负数,那么对w的导数也总是正数或负数,这样在传播过程中要么都往正方向更新,要么都往负方向更新,导致了一种捆绑现象,收敛缓慢;
  3. 幂运算相对耗时;

2.tanh激活函数
在这里插入图片描述

  1. 输出是0均值的,但仍存在梯度消失线性;

3.relu激活函数

在这里插入图片描述

  1. 收敛速度快,不会产生梯度消失;
  2. 计算复杂度低,不需要进行指数运算;
  3. 输出不是0均值;
  4. 某些神经元可能永远不会被激活,导致相应的参数永远不会被更新

51. PCA为什么要做中心化

PCA是将高维数据投影到某个低维空间中,并使得其方差尽量大。如果数据中有特征数值特别大,那么它在整个误差计算上的比重就很大,在投影时候,为了逼近原始数据,整个投影会去努力逼近最大的那个特征,而忽略了其他较小的特征。

从计算角度看,如果用梯度下降计算PCA,对数据进行中心化会加快收敛速度;

52.GBDT为什么用残差不用梯度

一阶泰勒展开可以证明负梯度方向是下降最快的方向。而拟合残差只是考虑到损失函数为评分误差的特殊情况,负梯度是更加广义上的拟合项。
代价函数除了loss还有正则项,正则中有参数和变量,很多情况下只拟合残差loss会变小但是正则变大,代价函数不一定就小。梯度的本质也是一种方向导数,综合了各个方向的变化,选择了一个最优下降方向。所以再有正则项的情况下就不再是拟合残差时损失函数最小了,所以需要计算损失函数的梯度。

53.lstm中可以用relu激活函数吗?

不可以。lstm中都是饱和函数,当前输入达到一定值后,输出就不会发生明显变化了。如果采用非饱和函数,难以实现门控的效果。

54.lightgbm

LightGBM是XGBoost的改进版,添加了很多新的方法进行改进模型。

1.特征并行。lgb并没有垂直的切分数据集,而是每个worker都有全量的训练数据。每个worker在基于局部的特征集找到最优分裂特征,worker间传输最优分裂信息,并得到全局最优分裂信息。每个worker基于全局最优分裂信息,在本地进行数据分裂。
2.数据并行。归并来自不同worker的不同特征子集的直方图,然后再局部归并的直方图中找到最优局部信息,最终找到最优的分裂信息。
3.投票并行。每个worker中选出top k个分裂特征,将每个worker选出的特征进行汇总,得出全局特征。

和xgboost对比:
1.xgboost采用基于预排序的决策树算法,每遍历一个特征就需要计算一次特征的增益;lgb使用基于直方图的决策树算法,直方图的优化算法只需要计算k次。
2.xgboost使用按层生长的决策树策略,lgb则采用带有深度限制的按叶子节点算法。在分裂次数相同的情况下,leaf-wise可以降低更多的误差,但会产生较深的树,导致过拟合;
3.优化了特征并行和数据并行算法,还增加了投票并行方案。

猜你喜欢

转载自blog.csdn.net/yaogepila/article/details/107307748
今日推荐