构建机器学习算法和剪枝

1、构建机器学习算法

几乎所有的深度学习算法都可以被描述为一个相当简单的配方:特定的数据集、代价函数、优化过程和模型。

在大多数情况下,优化算法可以定义为求解代价函数梯度为零的正规方程。

通常代价函数至少含有一项使学习过程进行统计估计的成分。最常见的代价函数是负对数似然,最小化代价函数导致的最大似然估计。

组合模型、代价和优化算法来构建学习算法的配方同时适用于监督学习和无监督学习。在某些情况下,由于计算原因,我们不能实际计算代价函数。在这种情况下,只要我们有近似其梯度的方法,那么我们仍然可以使用迭代数值优化近似最小化目标。

2、pruning剪枝

2.1 深度学习减枝背景

随着2012年Alextnet的横空出世,其远超传统方法的分类准确率让深度学习重新走进人们的视野。为提高网络的性能,神经网络逐渐朝着越来越深和越来越宽的方向发展,参数数量随之激增。例如vgg对alexnet进行改进,在简单二分类问题上,实测网络模型大小达到了150MB。而在资源受限的场景中,例如移动设备,计算和存储资源有限,大尺寸网络的模型难以应用。

 

                                                                                       图1

在神经网络中,并不是所有的参数都有着相同的作用。部分参数幅值大,对网络输出的影响显著,某些参数权重接近0,对网络输出的影响微乎其微。如果在神经网络中,找到并删除这些对网络影响较小的参数,那么可以在保持网络性能的前提下,减小网络模型的尺寸,提高模型的计算速度。如何在找到对网络影响较小的参数,如何删除网络的部分参数或结构,怎样在减小网络尺寸的同时,保证网络的性能,这就是剪枝要完成的工作。


2.2 常用剪枝方法

剪枝顾名思义,就是剪去网络中不重要的部分,减小网络的尺寸,简化网络的结构.在实施时,首先通过设定规则,找到要减去的网络结构,在减去该部分结构后,网络性能会受到影响,因此需要重新训练,恢复网络的性能.

                                                                                                    图2

2.2.1神经元和连接剪枝

在对图2左图所示网络进行剪枝,对网络结构中任一神经元的每一个连接(接收上一层的输出),将其与设置的阈值相比较,如果大于该阈值,则保留该连结,如果小与该阈值,则丢弃该连接。当一个神经元大所有连接都被丢弃时,该神经元同样被丢弃。按照这一规则剪枝后的网络结构如图2右所示。

剪枝时阈值的由稀疏度决定,而连接的权重与阈值比较的标准有L1 norm,L2 norm等,最常用的是L1 norm,其简单容易操作。

该方法的实施依赖于mask实现,在tensorflow中有Pruning接口,供实现该剪枝方法。但该方法的优点是原理简单,卷积和全连接层的操作相同,数据压缩程度大,对精度的影响小。但该方法在实施时步骤繁琐,需要分层和迭代的剪枝。此外,由于该方法借助于mask实现,因此模型的大小和在模型的速度难以有明显的提升。

2.2.2卷积核剪枝

                                                                                                           图3

上节卷积核剪枝中剪枝操作借助mask实现的主要原因是要减去的网络结构是不规则的,如果每次剪去一整个网络单元,或者一个全连接的神经元,那么剪枝的操作将被简化,同时不借助mask实现起来也更为便捷。  

卷积核剪枝的基本思路即是如此,每次剪去一整个卷积核。具体的方法是,对某卷积层而言,其中包含了许多卷积核,如上图的kernel matrix的列所示。在对某层进行剪枝时,分别计算每个卷积核的L1 norm(卷积核的所有权值的绝对值之和),小于某阈值的卷积核将被丢弃(注意,计算卷积核的L1 norm时应使用剪枝前的卷积核权值)。该阈值的设定方法与1类似,由稀疏度决定。每剪去一个卷积核,该卷积层输出的feature map将会减少一个,为保证输入feature map和权值维度匹配,应对下一层的输入权值进行调整,将下一层每个kernel中对该feature map进行卷积操作的channel删除,如图3中右边的kernel matrix所示。

需要注意的是,如果网络中使用到了batch norm,则在剪枝时要对batch norm的参数一并处理。

在实施时,有两种训练的方法,一种是从靠近输入层开始,逐层进行剪枝,每剪完一层,重新训练后再进行下一层的剪枝。这种方法的剪枝得到的模型精度较高。另一种方法是同时对所有层进行剪枝,每次剪枝时设置较小的稀疏度,重训后,再设置小稀疏度进行剪枝,如此迭代。这种方法操作起来更简单。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值