网络基础

卷积层参数量

  1. 普通卷积

    卷积参数kwkhCinCout+Coutk_w *k_h*C_{in}*C_{out}+C_{out} (加偏置)

    输出图像大小Cout=Cin+2paddingkernelstride+1\lceil C_{out} = \frac{C_{in}+2*padding-kernel}{stride} +1 \rceil

    乘法次数kernelkernelCinCoutWoutHoutkernel*kernel*C_{in}*C_{out}*W_{out}*H_{out} (输出图的每个像素点计算)

  2. 深度可分离卷积

    卷积参数(kwkh1+1)Cin+(11Cin+1)Cout(k_w *k_h*1+1)*C_{in}+(1*1*C_{in}+1)*C_{out} (加偏置)

    乘法次数kernelkernelCoutWoutHoutkernel*kernel*C_{out}*W_{out}*H_{out}

  3. 反卷积

    卷积参数kwkhCinCout+Coutk_w *k_h*C_{in}*C_{out}+C_{out} (加偏置)

    输出图像大小Cout=Cin+(Cin1)(stride1)\lceil C_{out} = C_{in} + (C_{in}-1)(stride-1) \rceil

  4. 全连接

    卷积参数FinFoutF_{in}*F_{out}

    乘法次数FinFoutF_{in}*F_{out}

FLOPs(floating point operations)浮点运算数,计算量。分为乘法与加法:

  • 乘法为 kernelkernelCinCoutWoutHoutkernel*kernel*C_{in}*C_{out}*W_{out}*H_{out}
  • 加法为 (kernelkernel1)CinCoutWoutHout(kernel*kernel-1)*C_{in}*C_{out}*W_{out}*H_{out}
  • 如有偏置项 CinCoutWoutHoutC_{in}*C_{out}*W_{out}*H_{out}

总结为 2kernelkernelCinCoutWoutHout2*kernel*kernel*C_{in}*C_{out}*W_{out}*H_{out}

池化的作用

  • 下采样
  • 降维,去除冗余信息,对特征进行压缩,减少参数量
  • 实现非线性
  • 扩大感受野
  • 实现不变性:平移不变性、旋转不变性和尺度不变性

归一化 BN IN LN GN

激活函数

  1. Sigmoid
    • 输出范围在0-1之间,作为预测概率的输出模型比较合适
    • 导数范围在(0, 0.25]区间,在[-1, 1]区间比较敏感,梯度平滑
    • 容易导致梯度消失
    • 输出不是以0为中心,降低权重更新效率
    • 指数运算较慢
  2. Tanh
    • 当输入较大或较小时,输出几乎是平滑的,梯度较小,不利于权重更新
    • 输出以0为中心
    • 一般二分类问题中,tanh用于隐藏层,而sigmoid用于输出层
  3. ReLU
    • 输出是非零中心化,影响梯度下降效率
    • 神经元在训练时容易未激活,当一次不恰当更新后,在以后的训练过程中用于不会被激活
    • 计算高效
    • 很有很好的稀疏性
    • 右侧梯度恒定,缓解了梯度消失的问题,加速梯度下降的收敛速度
  4. Leaky ReLU
    • 左侧带泄漏,避免永远不被激活
    • PReLU引入可学习的参数
  5. Softmax
    • 用于多分类任务,各种概率彼此相关
    • 在零点不可微
    • 负输入的梯度为零,会产生永不激活的死亡神经元

残差连接的作用

  • 残差连接解决了深层网络的训练问题,防止梯度消失;
  • 解决了神将网络的退化问题(权重矩阵的退化)

虽然梯度范数大,但如果网络的可用自由度对范数的贡献不均衡时,即每个层中只有少量的隐藏单元对不同的输入改变激活值,而大部分的隐藏单元对不同的输入都是相同的反映,那么整个权重矩阵的秩不高,并且随着网络层数的增加,连乘后使得整个秩变得更低。残差连接打破了网络的对称性

数据与训练

过拟合与欠拟合

欠拟合:欠拟合是指不能很好的从训练数据中,学习到有用的数据模式,从而针对训练集测试集,均不能获得很好的预测效果。

原因:

  • 模型复杂度低
  • 特征量少

解决方法:

  • 增加特征数
  • 增加模型复杂度
  • 减少正则化系数
  • Boosting:组合许多“弱”分类器来产生一个强大的分类器组。

过拟合:过拟合是指过于精确地匹配了特定数据集,导致获得的模型不能良好地拟合其他数据或预测未来的观察结果的现象。具体表现就是最终模型在训练集上效果好,在测试集上效果差,模型泛化能力弱。

原因:

  • 训练集噪声过大
  • 样本有误
  • 模型复杂度太高,特征维度高

解决方法:

  • 数据上:获取更多的数据、数据增强、验证集、交叉验证
  • 降低模型复杂度,特征降维
  • 正则化
  • 加入噪声
  • dropout
  • early stopping

梯度消失与梯度爆炸

梯度消失和梯度爆炸的根源主要是因为深度神经网络结构以及反向传播算法。
可以总结成2类原因:深层网络的结构;不合适的损失函数,比如Sigmoid函数。梯度爆炸一般出现在深层网络和权值初始化值太大的情况下。

解决方法:

  • 预训练与微调
  • 梯度剪切,对梯度设置阈值,防止梯度爆炸
  • 权重正则化
  • relu、leakyrule(每层网络梯度更新速度一样),梯度是常数
  • BN,归一化消除了权重参数放大缩小带来的影响
  • 残差,避免梯度消失
  • LSTM的结构设计(细胞状态)

数据不均衡

  1. 从数据角度可以获取更多的数据、对数量多的类别样本进行下采样、生成样本较少类别的数据、在惩罚因子中改变权重,(改变数据后,要使训练样本与测试样本概率分布一致)
  2. 从评价指标的角度可以选择PR曲线而非ROC曲线,不要只看ACC,可以根据实际需求观察precision/recall/mAP等
  3. 从算法的角度可以选择对样本不敏感的算法(树模型),集成学习或者转换任务类型

数据增强

  • 基于样本变换的数据增强
  1. 单样本增强——几何变换类(翻转、旋转、裁剪、变形、缩放等)、颜色变换类(噪声、模糊、颜色变换、擦除、填充等)

  2. 多样本数据增强:SMOTE(基于插值的方法)、SamplePairing(训练集中随机抽取两张图片分别经过基础数据增强操作(如随机翻转等)处理后经像素以取平均值的形式叠加合成一个新的样本,标签为原样本标签中的一种)、mixup(使用线性插值得到新样本数据)

    SMOTE:常用于样本均衡学习,核心思想是从训练集随机同类的两近邻样本合成一个新的样本,其方法可以分为三步:计算同类样本之间的欧氏距离,确定K近邻;随机选取一个近邻,生成新的样本

    SamplePairing:核心思想是从训练集随机抽取的两幅图像叠加合成一个新的样本(像素取平均值),使用第一幅图像的label作为合成图像的正确label

    Mixup:核心思想是按一定的比例随机混合两个训练样本及其标签,这种混合方式不仅能够增加样本的多样性,且能够使决策边界更加平滑,增强了难例样本的识别,模型的鲁棒性得到提升。

  • 基于深度学习的数据增强
  1. 特征空间数据增强:将样本映射为网络层的低维向量,在特征空间进行组合变换;
  2. 基于生成模型的数据增强:通过VAE与GAN生成样本;
  3. 基于风格迁移的数据增强(内容损失是特征图之间的L2距离,风格损失是特征图的GRAM矩阵之间的L2距离)
  4. 基于元学习的数据增强

常用损失函数