李宏毅《机器学习》课程笔记(作业七:模型压缩)

有多种模型压缩的方法。

第一个是网络剪枝,因为神经网络往往是过度参数化,所以删掉一部分网络参数。先训练好一个大的神经网络,然后评估每个参数是否重要,评估方法其实就是看是否接近0。然后把不重要的东西移除。用新的网络重新训练一下,update一下参数,可以把损伤移除。注意一次不删掉很多,怕恢复不回来,所以迭代地删除参数。

那么为什么不直接训练一个小的神经网络呢?因为小的神经网络比较难训练。大的NN比较好优化。有个大乐透假设,每个小的网络是复式彩票中的一个,所以容易训练出来。

是删除权重好,还是删除神经元。如果直接删权重的可能导致网络不规则,不适合实现和gpu加速。所以具体实现上是设置为0。一般删除神经元的话比较容易实现和加速。

知识精馏的方法:在大网络以外重新训练一个小的网络,训练数据用大网络的输出。这样可以使得两个网络越接近越好。也就是student去跟teacher学。神奇的是,这样的方法可以处理他从来没有见过的类型。 还有一个好处是可以用多个模型ensemble的输出作为teacher来训练。非常强大。

参数量化,这个我会,哈哈。他的极致是只使用正负一来表示一个神经网络的参数,可以同时维护一个实数值的和一个二元值的网络。有点像近似算法里面的rounding。

架构设计:可以考虑在两层之间加入一个比较窄的一个隐层,这样可以有效减少参数量,但是降低了网络转换的秩。面对卷积神经网络的时候可以这样做,挺巧妙的。

动态计算:当看到手机电量不够的时候就选择一个计算量小的方案。可以存储多个不同深度的网络,或者只训练中间结果,把中间层的结果直接输出分类结果。

你可能感兴趣的:(机器学习,深度学习)