文章目录
- 一.深度学习
- 二.机器学习
-
- 2.1 简述meanshift的过程
- 2.2 交叉熵来源和应用
- 2.3 机器学习中集成学习(Bagging, Boosting和Stacking)的简述和区别
- 2.4 分类和回归的评价指标
- 2.5 XGBoost与GBDT的联系和区别有哪些?
- 2.6 为什么XGBoost要用泰勒展开,优势在哪里?
- 2.7 由二叉树双分支节点数计算叶子节点数
- 2.8 决策树优缺点
- 2.9 牛顿法和拟牛顿法
- 2.10 Hessian矩阵和Jacobian矩阵
- 2.11 SVM的优缺点
- 2.12 kmeans收敛性
- 2.13 XGBoost为什么采用负梯度拟合误差?
- 2.14 XGBoost对缺失值是怎么处理的?
- 2.15 XGBoost为什么可以并行训练?
- 2.16 逻辑斯特回归为什么要对特征进行离散化。
- 2.17 分类问题可以使用MSE(均方误差)作为损失函数吗?
- 2.18 梯度消失、梯度爆炸的解决方法
- 2.19 过拟合原因和解决方法
- 三.图像分割
- 四.数据结构
- 五.Python
- 六.数据分析SQL
- 七·推荐算法
- 八·基础知识
一.深度学习
1.1 如何计算参数量和计算量?
例:输入是m×m×c的图像,卷积核大小是k×k,其输出是n×n×d,也表示卷积核的数量是d,其总参数是多少,总的乘法计算量是多少?
总参数:c×k×k×d
总乘法计算量:c×k×k×n×n×d
计算量解释如下:
对于输出featuremap上某一个channel的点,经过如下两步得到:
- 卷积核k×k与输入的每个channel卷积,把每个channel上的内容加起来,就得到最后一个点。那么输出featuremap上每个点的计算量为c×k×k
- 输出featuremap上有n×n×d个点,所以总乘法计算量:c×k×k×n×n×d
(参考:https://www.cnblogs.com/gezhuangzhuang/p/10922568.html)
1.2 特征工程怎么做的(可能会问到项目里用了哪些)?
- 数值类型转换:幅度调整/归一化,统计值(包括max, min, mean, std等),离散化(把连续值转成非线性数据),柱状分布(离散化后统计每个区间的个数做柱状图)。
- 类别类型:one-hot编码、Hash编码成词向量、柱状图(Histogram)映射
- 统计型:加减平均(商品价格高于平均价格多少,用户在某个品类下消费超过平均用户多少,用户连续登录天数超过平均多少)、分位线(商品属于售出商品价格的多少分位线处)、次序型(排在第几位)、比例类(电商中,好/中/差评比例,你已超过全国百分之…的同学)
- 组合特征:拼接型(简单的组合特征。例如挖掘用户对某种类型的喜爱,对用户和类型做拼接。正负权重,代表喜欢或不喜欢某种类型)、模型特征组合(用GBDT产出特征组合路径或将组合特征和原始特征一起放进LR训练)
1.3 简述残差网络ResNet
- 问:网络简述
答:在深度学习中,网络层数增多一般会伴着下面几个问题。(1)计算资源的消耗(2)模型容易过拟合、退化()(3)梯度消失/梯度爆炸。
ResNet使用了一个新的思想,假设我们涉及一个网络层,存在最优化的网络层次,那么往往我们设计的深层次网络是有很多网络层是冗余层的。那么我们希望这些冗余层能够完成恒等映射,保证经过该恒等层的输入和输出完全相同。具体哪些层是恒等层,网络训练的时候自己会判断出来。 - 问:为什么 VGG 比 ResNet 浅很多,两者的参数量却相当?
答:两个原因,一是因为 ResNet省略了全连接层,二是因为 ResNet采用了 bottle-neck(building block) 结构。 - 问:为什么叫残差?
答:
X是我们的拟合的函数,H(x)就是具体的数据点,通过训练使的拟合的值X加上F(x)得到具体数据点的值,因此 F(x)就是残差了。其中,X系数为1是为了防止反向传播过程中的梯度消失或者梯度爆炸。
1.4 简述LSTM网络
参考:https://www.jianshu.com/p/95d5c461924c
LSTM与RNN的区别:
- RNN没有细胞状态;LSTM通过细胞状态记忆信息。
- RNN激活函数只有tanh;LSTM通过输入门、遗忘门、输出门引入sigmoid函数并结合tanh函数,添加求和操作,减少梯度消失和梯度爆炸的可能性。
- RNN只能够处理短期依赖问题;LSTM既能够处理短期依赖问题,又能够处理长期依赖问题。
1.5 Transformer
- 问:QKV分别代表什么?
答:Q:查询向量
K:表示被查询信息与其他信息相关性的向量
V:表示被查询信息的向量
一个很形象的解释方法:你有一个问题Q,然后去搜索引擎里面搜,搜索引擎里面有好多文章,每个文章V有一个能代表其正文内容的标题K,然后搜索引擎用你的问题Q和那些文章V的标题K进行一个匹配,看看相关度(QK —>attention值),然后你想用这些检索到的不同相关度的文章V来表示你的问题,就用这些相关度将检索的文章V做一个加权和,那么你就得到了一个新的Q’,这个Q’融合了相关性强的文章V更多信息,而融合了相关性弱的文章V较少的信息。这就是注意力机制,注意力度不同,重点关注(权值大)与你想要的东西相关性强的部分,稍微关注(权值小)相关性弱的部分。
x的注意力权重,由x自己来决定,所以叫自注意力。
1.5 BN
- BN的作用:BN可以加速模型训练,防止‘梯度爆炸’,提高网络泛化能力。
加速训练:Batch Gradient Descent使用多个梯度的均值来更新权重,用相对少的训练次数遍历完整个训练集,也正是因为平均了多个样本的梯度,许多样本对神经网络的贡献就被其他样本平均掉了,相当于在每个epoch中,训练集的样本数被缩小了。batch中每个样本的差异性越大,这种弊端就越严重。BN首先是把所有的samples的统计分布标准化,降低了batch内不同样本的差异性,然后又允许batch内的各个samples有各自的统计分布。所以,BN的优点自然也就是允许网络使用较大的学习速率进行训练,加快网络的训练速度(减少epoch次数),提升效果。
提高泛化能力:省去过拟合中dropout、L2正则项参数的选择问题,采用BN算法后,可以移除这两项了参数,或者可以选择更小的L2正则约束参数了,因为BN具有提高网络泛化能力的特性; - 为什么需要BN?
神经网络学习过程本质就是为了学习数据分布,一旦训练数据与测试数据的分布不同,那么网络的泛化能力也大大降低。
网络一旦训练起来,参数就要更新,除了输入层的数据外(因为输入层数据,我们已经人为的为每个样本归一化),后面网络每一层的输入数据分布是一直在发生变化的,因为在训练的时候,前面层训练参数的更新将导致后面层输入数据分布的变化。以网络第二层为例:网络的第二层输入,是由第一层的参数和input计算得到的,而第一层的参数在整个训练过程中一直在变化,因此必然会引起后面每一层输入数据分布的改变。BN的提出,就是要解决在训练过程中,中间层数据分布发生改变的情况。 - BN的过程?
(1)求每一个训练批次数据的均值
(2)求每一个训练批次数据的方差
(3)使用求得的均值和方差对该批次的训练数据做归一化,获得0-1分布。其中ε是为了避免除数为0时所使用的微小正数。
(4)尺度变换和偏移:将xi乘以γ调整数值大小,再加上β增加偏移后得到yi,这里的γ是尺度因子,β是平移因子。这一步是BN的精髓,由于归一化后的xi基本会被限制在正态分布下,使得网络的表达能力下降。为解决该问题,我们引入两个新的参数:γ,β。 γ和β是在训练时网络自己学习得到的。
1.6 1x1卷积的作用
- 灵活的控制特征图的深度
- 减少参数
- 实现了跨通道的信息组合,并增加了非线性特征
1.7 为什么3x3卷积被广泛应用
因为通过串联两个3x3的卷积核可以达到5x5卷积核的感受野,同时降低了模型的参数量。并且多个3x3卷积核的串联有更多的激活函数,有更强的非线性表达能力。
二.机器学习
2.1 简述meanshift的过程
2.2 交叉熵来源和应用
- 交叉熵能够衡量同一个随机变量中的两个不同概率分布的差异程度,在机器学习中就表示为真实概率分布与预测概率分布之间的差异。交叉熵的值越小,模型预测效果就越好。
- 交叉熵在分类问题中常常与softmax是标配,softmax将输出的结果进行处理,使其多个分类的预测值和为1,再通过交叉熵来计算损失。