十个深度学习高频面试问题

总结十个深度学习高频面试问题。


一、过拟合/欠拟合

降低过拟合

首先是数据角度,然后是特征角度,模型角度,分算法的角度。

  • 数据角度
    • 增加数据(GAN,图像增强,NLP机器翻译)
    • 交叉验证k-fold
    • bootstrapping out of bag包外估计
  • 特征角度
    • 特征选择
    • 降维
  • 模型角度
    • 正则化罚参数(看后面正则化)
    • 更简单模型
    • 减少迭代次数
    • 集成学习(RF,GBDT) (关于GBDT XGboost后面
  • 分算法的角度
    • SVM —— 引入松弛变量
    • 决策树 —— 剪枝(预剪枝,后剪枝)
    • 深度学习
      • dropout bagging所有模型独立,训练到收敛,dropout共享参数,训练一小部分
      • batch normalization BN归一化+训练每个batch得到方差+求均值方差的期望调整BN函数
    • BP
      • early stopping
      • regularization

降低欠拟合

从特征角度和模型角度(包括正则化)

  • 加入新的特征
    • 交叉组合特征(联想深度学习一般步骤)
    • 深度学习: 因子分解,deep-crossing,自编码器
  • 增加模型复杂度
    • 线性:增加高次项
    • 神经网络:增加层数和神经元
  • 减小正则化系数

二、公式推导

BP反向传播的4个基本公式

利用链式法则求梯度下降法的梯度(每日一推)


三、激活函数

分类

  • sigmoid
  • tanh
  • relu

为什么引入非线性激活函数

深层神经网络不再是线性,可以逼近任何函数

为什么relu

  • sigmoid 梯度不好求
  • 深层网络 sigmoid 梯度消失(见梯度爆炸和梯度消失)
  • relu使网络稀疏,缓解过拟合

relu的优缺点

  • 分段线性,梯度大(不会梯度消失)—,收敛快,使一部分神经元为0,使网络稀疏
  • 某些神经元不会被激活

leaky-relu

max(0,z)+a*min(0,z) a为小值 a=-1为绝对值整流 a可学习为参数化整流

其他激活函数

  • 线性
  • softmax
  • 径向基函数RBF
  • softplus
  • 硬双曲正切

四、正则化问题

正则化参数引入先验分布,降低复杂度,提高泛化能力

BN是一种正则化方法,见上面(参数初始化)

L1/L2 范数正则化

  • L1 先验:拉普拉斯分布 使特征稀疏,便于提取
  • L2 先验:高斯分布 防止过拟合,提高泛化

dropout

集成方法bagging,多个数据集,重复采样

dropout,从基础网络去除部分单元后的子网络


五、正负样本不均衡

  • 采样
    • 上采样 小众类多份
    • 下采样 大众类剔除一部分
    • 减少信息损失
      • EasyEnsemble —— ensemble 模型融合 多次下采样
      • BalanceCascade —— boosting 增量训练 先训练下采样,正确的不放回,再训练第二个分类器
      • NearMiss —— KNN挑选大众样本
  • 数据合成
    • SMOTE方法 样本生成更多数据
  • 加权/罚函数
  • 一分类或异常检测(高斯分布)

六、梯度消失和梯度爆炸

链式求导

激活函数求导,大于一,导致梯度爆炸,小于一,梯度消失

解决方案

  • 预训练加微调 DBN寻找局部最优(DBN
  • 梯度剪切 设置梯度的阈值 防止梯度爆炸
  • 正则化 防止梯度爆炸
  • relu leakyrelu elu等激活函数
  • BN
  • 残差结构
  • LSTM

七、 CNN

结构

    • 去均值
    • 归一化
    • PCA
    • CONV 卷积 局部感知,权值共享
    • RELU 激励 激活函数,收敛快,求梯度简单
    • POOL 池化 区域平均,降维
    • FC 全连接

特点

  • 局部感知- 局部特征
  • 权重共享 - 降低训练难度
  • 池化 - 降维
  • 多层次

感受野

感受野是卷积神经网络(CNN)每一层输出的特征图(feature map)上的像素点在原始输入图像上映射的区域大小

增大的方法: dilated空洞卷积,池化,增大卷积核

RF = 1 #待计算的feature map上的感受野大小
  for layer in (top layer To down layer):
    RF = ((RF -1)* stride) + fsize
    
后一层的fsize-1,乘上stride,然后加上当前层的fsize

复杂度分析

  • 时间复杂度

M2K2CinCout
M 每个卷积核输出特征图的边长
K 每个卷积核的边长
Cin 输入通道数
Cout 输出通道数

  • 空间复杂度

累加K2CinCout 与输入数据大小无关


八、 RNN LSTM


九、 模型压缩和加速方法

分为四个类别,参数修剪和共享,低秩分解,迁移/压缩卷积滤波器,知识精炼

参数修剪和共享

模型量化和二进制化

网络量化通过减少表示每个权重所需的比特数来压缩原始网络

缺陷:此类二元网络的准确率在处理大型 CNN 网络如 GoogleNet 时会大大降低。另一个缺陷是现有的二进制化方法都基于简单的矩阵近似,忽视了二进制化对准确率损失的影响。

剪枝和共享

  • 偏差权重衰减
  • 最优脑损伤
  • 最有脑手术

缺陷:剪枝和共享方法存在一些潜在的问题。首先,若使用了 L1 或 L2 正则化,则剪枝方法需要更多的迭代次数才能收敛,此外,所有的剪枝方法都需要手动设置层的敏感度,即需要精调超参数,在某些应用中会显得很冗长繁重。

设计结构化矩阵

如果一个 m x n 阶矩阵只需要少于 m×n 个参数来描述,就是一个结构化矩阵(structured matrix)。通常这样的结构不仅能减少内存消耗,还能通过快速的矩阵-向量乘法和梯度计算显著加快推理和训练的速度。

低秩分解和稀疏性

一个典型的 CNN 卷积核是一个 4D 张量,需要注意的是这些张量中可能存在大量的冗余。而基于张量分解的思想也许是减少冗余的很有潜力的方法。而全连接层也可以当成一个 2D 矩阵,低秩分解同样可行。

缺陷:低秩方法很适合模型压缩和加速,该方法补充了深度学习的近期发展,如 dropout、修正单元(rectified unit)和 maxout。但是,低秩方法的实现并不容易,因为它涉及计算成本高昂的分解操作。另一个问题是目前的方法逐层执行低秩近似,无法执行非常重要的全局参数压缩,因为不同的层具备不同的信息。最后,分解需要大量的重新训练来达到收敛。

迁移/压缩卷积滤波器

将变换矩阵应用到层或滤波器Φ(·) 来对整个网络模型进行压缩

缺陷:将迁移信息应用到卷积滤波器的方法需要解决几个问题。首先,这些方法的性能可与宽/平坦的架构(如 VGGNet)相媲美,但是无法与较窄/特殊的架构(如 GoogleNet、Residual Net)相比。其次,迁移假设有时过于强大以致于无法指导算法,使得在某些数据集上的结果不稳定。

知识精炼

KD 压缩框架,即通过遵循学生-教师的范式减少深度网络的训练量,这种学生-教师的范式即通过软化教师的输出而惩罚学生。该框架将深层网络(教师)的集成压缩为相同深度的学生网络。

缺点:基于 KD 的方法能令更深的模型变得更加浅而显著地降低计算成本。但是也有一些缺点,例如 KD 方法只能用于具有 Softmax 损失函数分类任务,这阻碍了其应用。另一个缺点是模型的假设有时太严格了,以至于其性能有时比不上其它方法。


补充

完整机器学习项目流程

  1. 抽象建模
  2. 获取数据
  3. 特征预处理
  4. 训练模型调优
  5. 模型诊断
  6. 模型融合
  7. 上线

线性与非线性

  • 线性分类器解释性好,复杂度低 LR 贝叶斯 单层感知机 线性回归
  • 非线性拟合能力强 决策树 RF GBDT 多层感知机
  • SVM 看线性核还是高斯核

归一化

优点: 提高梯度下降法的速度,有可能提高精度

  • 线性归一化
  • 标准差归一化
  • 非线性归一化

caution: 概率模型不需要归一化,比如决策树,RF ; LR不用归一化 ; SVM 欧氏距离,要做归一化


Author: Ykk
Link: https://ykksmile.top/posts/60220/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.