深度学习中的网络设计技术(一) ——理论概述

一、网络设计

(1) 网路设计要点

网络设计考虑重点:1. 精度 2.容量 3. 效率
精度:网络预测样本的精度(TP / (TP +FP))
容量:容纳数据量的多少,神经元越多,容量越大。
效率:网络运行的效率,这是一个很重要的指标。

总结:层次要深,信息要充分融合,计算量要足够小。

(2)、网络计算成本

在这里插入图片描述

H x W 表示输出特征图的空间大小,N代表输入通道数,K x K 代表卷积核的大小,M代表输出通道数,那么标准卷积的计算成本就变成了H * W * N * K * K * M
这里重要的一点就是,标准卷积的计算成本与以下因素成比例:
(1) 输出特征图的空间大小 H * W
(2) 卷积核的大小 K * K
(3)输入通道和输出通道的数量N x M

从以上几个因素对网络的性能进行改进。

(3) 高效的卷积网络

高效的网络应该具备以下特点:

  1. 参数量小,占用内存低
  2. 效率高
  3. 计算量低
  4. 并行化程度高
  5. 性能与大的网络模型相当

二、网络设计技术

(1) 网络深度的设计

为什么加深网络可以提升性能?
答:1. 更深的网络模型具有更好的非线性表达能力。2. 网络更深每一层要做的事情更加简单,各个深度的网络各司其职。

具体设计怎样的深度?
答:一般常见的深度是5~8层,不超过30层。

加深网络容易出现的问题?
答:

  1. 达到一定深度后性能反而下降,难以优化。
  2. 更加容易过拟合。
  3. PLD (processing level deprivation )现象,网络无法学到简单但是必要的函数来描述数据
  4. PLS (processing level saturation)现象,网络的浅层饱和,无法发挥网络的性能。
(2) 网络宽度的设计

宽度:一般都指输出的通道数。

网络宽度变大有什么作用?
答:网络宽度变大会提取更加丰富的不同颜色和纹理信息。如:AlexNet 第一个卷积层输出96个通道,使它提取更加丰富的特征信息。

一般网络宽度怎么设置?
答: 1. 第一层输出通道32 即可,此后逐渐增加,计算量随通道数的增加为O(N ^2)。 但提高网络宽度可以提高性能,在达到一定临界点后饱和。

网络宽度设计的原则?
答:

  1. 主流模型第一个卷积层宽度不超过64,加宽后参数的增长量比较块。
  2. 增加网络宽度比增加网络深度更有利于性能的提升,但是计算量也增加的较快。
  3. 多使用1 * 1 卷积、分组卷积、 跨层连接等技术。
(3) Dropout 和 BN 设计
  1. Dropout基本结构

它的主要思想就是:在训练神经网络的每一轮迭代中,随机地关闭一些神经元,以此降低神经网络的复杂程度
Dropout可以有效的缓解过拟合的发生,在一定程度上达到正则化的效果,它能够提高模型的泛化能力。
在这里插入图片描述对于一个有n个节点的神经网络,有了dropout后,就可以看作是2^n个模型的集合了,消除或者减弱了神经元节点间的联合,降低了网络对单个神经元的依赖,从而增强泛化能力。

  1. Dropout的优点
  1. 使用dropout正则化的神经网络,不会过分依赖于某个或某些特征,使得权重分散。因为在每一轮迭代中隐藏层的任何一个结点都有可能被删除,那么原本属于它的权重就会被分配到其他结点上,多次迭代平均下来,就能降低对某个特征或者是某个结点的依赖了。
  2. 缓解Relu的dead issue 。dead issue 是指:一个非常大的梯度流过一个 ReLU 神经元,更新过参数之后,这个神经元再也不会对任何数据有激活现象了,那么这个神经元的梯度就永远都会是 0.
  1. Dropout 使用的注意事项
  1. Dropout降低了模型的性能,所以对于原本需要容量为N的网络才能解决的问题,现在需要N/p, p表示保留该节点的概率,这个概率一般是0.5~0.9之间,在测试的时候需要乘以p。
  2. Dropout 相当于增加了噪声,造成梯度的损失,所以需要更大的学习率和动量项,训练更久才能收敛。
  1. BN 概述
    BN(Batch Normalization), 归一化分布,增强梯度有效性。
    在这里插入图片描述
  1. Batch Normalization的作用是他适用的归一化过程不只是输入层,甚至同样适用于神经网络的深度隐藏层。
  2. 在用于隐藏层时,我们也许不想隐藏单元值必须是平均值0和方差1(比如使用sigmoid函数的时候)。
  3. 有了γ和β两个参数后,我们可以确保所有Z(i)的值是我们想赋予的任意值(均值和方差由两个参数γ和β控制)。
  4. 它的真正作用是保证隐藏的单元均已使用均值和方差标准化(即:Z(i)有固定的均值和方差)
  1. BN 的优点
  1. 调整了数据的分布,不考虑激活函数,它让每一层的输出归一化到均值为0,方差为1的分布,这保证了梯度的有效性,减轻了对参数初始化的依赖。
  2. 训练更快,可以使用更高的学习率。
  3. 使得损失平面更加平滑。
  1. BN 使用注意事项
  1. 小的Batchsize不稳定
  2. 尝试Layer Normalization、group Normalization、instance Normalization等变种。
(4) 卷积核、步长、池化的设计

1、 卷积核设计

大型卷积核比较少用,3 * 3 卷积核用的较多。
为什么要使用3 * 3 卷积核:1. 使用多个较小的卷积核代替大的卷积核,使得网络层数增加,所以非线性表达能力增强。2. 小的卷积核使得网络参数量减少,更加容易训练。

2、步长设计

  1. 保证输出分辨率的情况下,分类任务中网络低层的分辨率很重要,对于目标检测/图像分割等任务,需要同时保证最后特在图的分辨率。所以一般第一个卷积层步长不超过2,如果步长过大就会影响图片的分辨率,进而影响后续特征的提取。
  2. 建议: a. 使用带步长的卷积代替池化 b. 前两个卷积层不要超过2倍的下采样率。
  3. 高性能网络可以采用大卷积核+大采样率。

3、池化设计

  1. 刚开始训练网络的时候,池化确实有利于提高抗变形能力,不管池不池化,模型最后学习完都能获得同样的抗变形能力。
  2. 初始化的时候不同的池化方法是有差异的,但是学习完之后不管什么池化方法效果都差不多。

(5)卷积方式的使用和设计

  1. 卷积拆分(分组卷积)
  2. 通道补偿和特征重用:
    a. 提升单层通道利用率:特征通道补偿
    b. 提升多层通道利用率:密集连接网络
  3. 分数 + 整数的分组卷积

(6) 剪枝

剪枝发生在模型训练完之后。它的步骤:

  1. 训练一个网络
  2. 删除权重小于一定阈值的连接,得到稀疏网络。
  3. 对稀疏网络再训练

(7) 量化

量化:从高精度(位宽)转化成低精度(位宽),如32位浮点数到8位。
量化分为:权重量化 输入量化 激活值量化 误差量化
量化优点:a. 更小的模型尺寸 b.更低的内存和缓存 c.更快的计算d. 更低的功耗

(8) 通道混洗

import torch
x = torch.randn(1, 6, 6, 6)
x = x.reshape(1, 2, 3, 6, 6)# 分组,每组3个通道
x = x.permate(0, 2, 1, 3, 4)# 交换轴
x = x.reshape(1, 6, 6, 6)# 重新变为1,6,6,6
print(x)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章