【2017CS231n】第十五讲:神经网络模型压缩和加速(硬件、算法层面)

一.算法

1.剪枝

不是所有的神经网络连接都有用。
减少连接,但不降低准确性。
尝试性:剪枝,训练不断重复,找到对准确性影响最高的那一部分连接。

2.参数共享

1.98 2.09 1.92 1.87 都用2来表示,不是所有权重都需要用精确的数字来表示,这样反而可能会造成过拟合。
思路:所有权重聚类,如果相近,就用聚类质心来表示其他数。
霍夫曼编码:对经常出现使用的权重采用霍夫曼编码

3.量化

用标准浮点数训练一个网络,统计每一层的权重和激活值。最大值到最小值,多少位数字可以表示(如果可以用4位数表示,则不用32位,降低了冗余)。

4.低秩近似

可以将卷积层分解成两步卷积。

5.二元/三元权重

再极端一些,只用0 -1 1三个数表示网络中的权重。

6.Winograd卷积


二.硬件

TPU:针对深度学习设计的专用硬件

    但是仅仅拥有好的硬件,而不能发挥硬件全部的性能也不可以。

    计算量和存储带宽决定硬件整体性能的两大因素。

    由于存储带宽限制,为了降低延迟,只能将数据分成很多小批次来处理。这没有发挥出硬件应有的性能。我们希望更少的内存读写来降低存储带宽的需求:压缩模型。

    任何数乘以0都得0,这些数据不需要计算也不需要保留(稀疏权重:0*A=0,稀疏激活值:W*0=0);近似表示;权值共享机制,可以用4位而不是32位来表示每一个权值。
    通过上述方法,降低存储带宽的需求,更好的发挥硬件性能。

三.训练

1.并行

数据并行:同时读取处理两张图片
模型并行:切分图片或卷积权重来切分模型

2.混合精度训练

16位和32位混合使用:16位进行乘法运算,32位进行加法运算,输出的权值转成32位存储。

3.模型Distillation(模型精简)

    我们有了GoogleNet、VGG等训练好的高级的网络模型,使这些训练好的模型去训练一些简单的网络。就像几个老师教一个学生一样,使学生学到老师的本领。
    这时我们不使用车、猫、狗等这些硬标签,而是使用几个模型一起给出的结果。例如GooglNet给出狗的概率是90%,猫的概率是10%。这里需要一个软标签,狗的概率是30%,猫的概率是20%。狗的概率依然高于猫所以预测仍然准确。此时使用了软标签来训练网络。

4.密-疏-密训练(更好的正则化)


猜你喜欢

转载自blog.csdn.net/poulang5786/article/details/80918769
今日推荐