CS231 第十五讲 深度学习的方法及硬件
课程视频地址:https://study.163.com/courses-search?keyword=CS231
课程主页:http://cs231n.stanford.edu/2017/
这一讲主要从运行效率方面介绍深度学习。
这一讲主要介绍从算法和硬件的角度提升深度学习的效率,内容主要分为以下四个部分:
首先是高效推断的算法:
高效推断的算法
1.剪枝
剪枝的思路很简单,首先训练神经网络,然后去掉低于某个阈值的权重,接着重新训练:
图示如下:
实验表明,这样做基本能保持神经网络的性能,甚至更好:
注意剪枝改变了权重的分布:
2.权重共享
权重共享的思路是将大小相近的权重近似为同一个数,这样可以减少内存的开销:
整个流程如下:
来看一个具体例子:
那么这样做的实际效果如何呢?实验表明,我们只要存储少量的有效数据就可以达到原来模型的性能:
还可以用Huffman编码存储权重,这样可以存储更多有效数字。实际中,剪枝和权重共享可以一起使用,把这两部分结合在一起,得到下图:
3.量化
量化的思路很简单,首先用浮点数的形式进行训练,然后统计权重的信息,将权重转化为定点数,减少内存开销,最后产生的效果也非常好:
4.低秩近似
低秩近似的思路是用多个低维子空间表示某一层神经网络,例子如下:
5.二元/三元网络
二元/三元网络的思路非常大胆——只用两个或三个权重表示神经网络。具体的步骤是在训练时用全部权重,预测时只使用两到三个权重,实验表明,这种方法的效果还不错,可以大大加快预测过程。
6.Winograd转换
Winograd转换可以高效进行卷积操作,过程如下:
这里没有说太多细节,整体思路是先将滤波器转换为矩阵,然后用逐点乘法,最后再变换回结果,算法可以提升几倍效率。
高效推断的硬件
这部分介绍硬件,这里简单过一下,比较有名的芯片如下:
Google TPU
TPU专门设计用于训练神经网络,它做矩阵运算的速度非常快:
EIE
EIE是老师自己设计的芯片,思路是应用刚刚介绍的算法,这可以大大加速:
高效训练的算法
1.并行
首先有数据并行,即一次训练多个数据:
参数更新如下:
其次是模型并行,通过分割权重来进行:
最后是超参数并行,即并行训练很多个网络。
该部分总结如下:
2.16位浮点数和32位浮点数的混合精度
首先看下16位浮点数和32位浮点数消耗的能量差异:
混合精度就是同时使用两者,可以在保证精度的同时减少内存以及能量消耗:
实验表明,这种做法的效果也非常好。
3.模型蒸馏
模型蒸馏的思路是利用大型神经网络来“教”小型神经网络,使其达到接近的效果:
方法是使用软标签:
数学上,可以使用参数$T$来得到更柔和的分布:
4.DSD: Dense-Sparse-Dense Training
DSD的过程为先训练模型,然后减枝训练,最后恢复模型再重新训练:
该方法的直觉是先学习树干,然后学习树叶:
实验结果表明,这种方法可以带来非常不错的效果。
高效训练的硬件
这部分主要介绍一些硬件,从略。