Pytorch实战_神经网络的压缩(Network Compression)

1. 神经网络的压缩

对于一些大型的神经网络,它的网络结构是十分复杂的(听说华为的一些神经网络有上亿的神经元组成),我们很难在很小的设备中(比如我们的apple watch)上面将这个这个神经网络放上去。这就要求我们能有能力将神经网络进行压缩,也就是 Network Compression

李宏毅老师在课程中提到了5中神经网络的压缩方式:

  1. Network Pruning
  2. Knowledge Distillation
  3. Parameter Quantization
  4. Architec Design
  5. Dynamic Computation

下面我们来一一简单地介绍

1.1 Network Pruning

神经网络的修剪主要是从两个角度去完成:

  • 权重的重要性
  • 神经元的重要性

其中权重的重要性可以使用常见的 L1 或者 L2 范数去刻画;而神经元的重要性可以通过该神经元在给定数据集时不为零的次数来决定。(仔细想想,这和决策树的剪枝也挺像的)。从下面两幅图,我们也可以看出两种修剪方式的不同。通常情况下,为了使得我们的网络更好搭建,我们选择根据神经元的重要性进行修剪。
在这里插入图片描述
在这里插入图片描述

1.2 Knowledge Distillation

Knowledge Distillation 就是训练一个小的网络去模拟已经训练出来的大网络的输出结果。如下图所示,小的网络的输出应该尽量和大网络的输出一致。我们一般通过交叉熵损失来衡量这种一致性的好坏。
在这里插入图片描述

有时候,我们会去让小网络去模拟一群大网络集成后的结果,具体操作如下图所示:
在这里插入图片描述

1.3 Parameter Quantization

Parameter Quantization 的主要思想是使用聚类的方法将相似的权重聚在一起,并统一使用一个值去代替。如下图所示:
在这里插入图片描述

1.4 Architec Design

Architec Design 是通过改变网络的结构,以使得网络的参数大大减少。我们先来看一个例子。这个例子有点像矩阵分解里面的 SVD ,对于一个 N × M N \times M N×M 的全连接层,我们通过在其中再加一个长度为 K K K 的线性层,来达到减少参数的目的。我们可以近似地把这个操作看做将 N × M N \times M N×M 的矩阵用 N × K N \times K N×K K × M K \times M K×M 两个矩阵的乘积去代替,当 K K K 远小于 M M M

  • 5
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值