zoukankan      html  css  js  c++  java
  • 卷积神经网络优化方法

    卷积神经网络优化

    卷积神经网络在减少计算量,加快训练和/或inference的速度,减少存储空间等方面的优化主要有以下几种方案:

    • 改进网络结构
      ResNet网络中的bottleneck结构就是这种方法的典型例子。bottleneck首先通过1x1的卷积层压缩通道数,然后使用3x3的卷积层计算,最后又用1x1的卷积层恢复到原来的通道数(ResNet中通道数压缩比为4)。这种方法大量减少了参数数量,提高了准确率。
    • 压缩预训练好的网络
      (在保证准确率大致不变的情况下,)压缩预训练好的全精度网络模型,达到减少存储空间和加快测试速度的效果。例如 [Deep Compression][DeepCompression] 去除冗余连接,量化参数,并使用Huffman编码进一步压缩参数。
    • 量化
      理论依据是:高精度的参数在表现优异的网络中起到的作用并不是非常重要。方法是:通过量化函数将全精度的数(激化量,参数,甚至是梯度值)映射到有限的整数空间,如:n-bit,三值化 (−1,0,+1), 二值化 (−1,+1)或 (0,1)。使用量化的网络需要重新训练。随着量化范围(指取值范围)的减少,分类准确率一般会随之降低。一般而言,量化之后网络的需要定制的硬件才能发挥其功效,比较适用于FPGA,ASIC。
    • 二值化
      一类比较特殊的量化的方式,只有(−1,1) 或 (0,1), 可以通过XNOR/AND/POPCNT等位操作指令来替代乘法指令。一方面,二值化网络只有两种取值,相比与等价全精度网络,减少了32倍所需的存储空间。另一方面,替代乘法操作,可以大幅度减少计算量。当然,二值化网络的准确率与全精度网络相比还有一定的差距。

    BinaryNet
    Binarized Neural Networks: Training Neural Networks with Weights and Activations Constrained to +1 or −1
    BNN的激活量和参数都被二值化了, 反向传播时使用全精度梯度。有确定性(sign()函数)和随机(基于概率)两种二值化方式。
    XNOR-Net与BWN
    XNOR-Net: ImageNet Classification Using Binary Convolutional Neural Networks
    BWN(Binary-Weights-Networks) 仅有参数二值化了,激活量和梯度任然使用全精度。XNOR-Net是BinaryNet的升级版。
    主要思想:

    1. 二值化时增加了缩放因子,同时梯度函数也有相应改变
    2. XNOR-Net在激活量二值化前增加了BN层
    3. 第一层与最后一层不进行二值化

    QNN
    Quantized Neural Networks: Training Neural Networks with Low Precision Weights and Activations
    对BNN的简单扩展,量化激活函数,有线性量化与log量化两种,其1-bit量化即为BinaryNet。在正向传播过程中加入了均值为0的噪音。
    TWN
    Ternary weight networks
    主要思想就是三值化参数(激活量与梯度精度),参照BWN使用了缩放因子。由于相同大小的filter,三值化比二值化能蕴含更多的信息,因此相比于BWN准确率有所提高。
    TNN
    Ternary Neural Networks for Resource-Efficient AI Applications
    训练时激活量三值化,参数全精度 –> infernce时,激活量,参数都三值化(不使用任何乘法)。用FPGA和ASIC设计了硬件
    TTQ
    Trained Ternary Quantization
    与TWN类似,只用参数三值化,但是正负缩放因子不同,且可训练,由此提高了准确率。ImageNet-18模型仅有3%的准确率下降。
    小结
    以下是Efficient Processing of Deep Neural Networks: A Tutorial and Survey 中对2016年中通过减少精度的方法来优化网络的方法总结。其中,准确率是指使用AlexNet模型在ImageNet的分类任务中得到的准确率,*是指第一层和/或最后一层仍是全精度的。

  • 相关阅读:
    cs
    PC管理端与评委云打分配合步骤及疑难问题汇编,即如何使用PC管理端的云服务管理功能
    B.数据结构(栈和队列)
    13.Python(模块)
    A.数据结构(线性表)
    c.Matlab(数据和函数的可视化)
    b.Matlab(字符串)
    12.Python(装饰器)
    11.Python(生成器)
    10.Python(高级特性)
  • 原文地址:https://www.cnblogs.com/Osler/p/8427918.html
Copyright © 2011-2022 走看看