YOLOV2网络剪枝

对神经网络进行剪枝这个想法并不新奇,可追溯至1900年(Yan Lecun的工作-http://yann.lecun.com/exdb/publis/pdf/lecun-90b.pdf)。其基本的思想是:神经网络的参数众多,但其中有些参数对最终的输出结果贡献不大而显得冗余,剪枝顾名思义,就是要将这些冗余的参数剪掉。

首先,需要根据对最终输出结果的贡献大小来对模型的神经元们排序,然后,舍去那些贡献度低的神经元来,使得模型运行速度更快、模型文件更小。
贡献度的排序指标可以是神经元的权重参数L1/(或者)L2正则化的平均值、激活函数的平均输出值、在验证数据集上不为0的次数或是其他指标。剪枝这些贡献度低的神经元,模型的准确度会有一定的损失(当然我们希望损失得越小越好),因此,剪枝后的模型通常需要更多的训练来使其保证一定的性能。这里要注意的是,如果一次性剪枝的神经元过多,可能会导致模型“损坏”太严重而性能太差。

剪枝的过程就是迭代的过程:https://www.csdn.net/gather_24/MtTaggxsNDQzMy1ibG9n.html
目前剪枝的方法分类有:权重衰减法、灵敏度量化法和根据相关性剪枝

  1. 权重衰减法:通过在网络目标函数中引入表示结构复杂性的正则项来使训练的网络权重趋向稀疏化,缺点是正则化参数 /剪枝阈值对剪枝结果影响很大
  2. 灵敏度量化法:通过设计灵敏度评价指标,衡量网络节点对于网络误差的贡献(灵敏度),删除那些贡献度不高的节点
  3. 根据相关性剪枝:根据网络节点间的相关性或者相关作用进行剪枝,合并相关性较大的节点,去除网络中信息冗余的网路节点。

剪枝算法的步骤
1.正常训练网络
2.权重低于阈值的所有连接都将从网络中删除
3.重新训练网络

首先第一步训练网络不是为了学习最终的权重,而是为了学习每一层的重要性;第二步寻找阈值,首先这个阈值和每一层卷积层精确度的下降程度,即敏感度;所以需要通过剪掉一些参数进行前向训练;第三步重新训练剩下稀疏的网络。

猜你喜欢

转载自blog.csdn.net/jiaqi_ge/article/details/99415597