什么是算法中的剪枝?

什么是算法中的剪枝?

看点:

什么是剪枝?
剪枝的原则有那些?
最常见的剪枝策略有哪些?
剪枝都有哪几类?
近三年最新剪枝技术及论文推荐?
推荐国内论文网站

什么是剪枝?

我们都知道搜索算法一般是基于两种方法来进行的( 深度优先 DFS 和广度优先 BFS ),而这两算法都是基于二叉搜索树的进行的。学过数据结构和算法的都知道二叉搜索树存在很多的分支,很难一次性拿到想要的结果,尤其是当输入参数较大时,二叉搜索树的分支大规模增加的时候,此时,由于搜索过程需要走很多条完全于与结果不相关的路线,所以剪枝思想就出现了。


剪枝一种可以提高搜索算法时间和空间效率的技巧,经过剪枝和其他优化策略优化过的算法在执行效率上远超一般未经剪枝的算法。甚至有些暴力搜索过不了时限的算法,也可以通过各种剪枝+优化大大缩短算法运行时间,成功通过时效限制。由此可见剪枝对于搜索算法的重要性。因此,剪枝对于学习算法和在工作中与算法打交道的人来说都是一类不得不学的知识点。


剪枝的原则有那些?

正确性

枝条不是想怎么剪就怎么剪的,如果瞎剪反而有可能把程序中最重要且影响到最后结果的几个枝剪掉,这样反而会让程序运行失败,剪枝和程序也就一起失去了意义. 所以,剪枝的前提是一定要保证不丢失正确的结果.

准确性

在保证正确性的基础上,我们再对问题进行细致的分析之后,应该采用合适的判断手段,使除了最优解以外的枝条尽可能多的被剪去,以达到程序“最优化”的目的. 剪枝的准确性, 是衡量一个优化算法好坏的标准.

高效性

设计优化程序的根本目的,是要减少搜索的次数,使程序运行的时间减少. 但为了使搜索次数尽可能的减少,我们又必须花工夫设计出一个准确性较高的优化算法,而当算法的准确性升高,其判断的次数必定增多,从而又导致耗时的增多,这便引出了矛盾. 因此,如何在优化与效率之间寻找一个平衡点,使得程序的时间复杂度尽可能降低,同样是非常重要的. 倘若一个剪枝的判断效果非常好,但是它却需要耗费大量的时间来判断、比较,结果整个程序运行起来也跟没有优化过的没什么区别,这样就太得不偿失了.

最常见的剪枝策略有哪些?

【1】 微观策略:从问题本身出发,发现剪枝条件

【2】 宏观策略:从整体出发,发现剪枝条件。

【3】 注意提高效率,这是关键,最重要的。


剪枝都有哪几类?

1、可行性剪枝

所谓可行性剪枝,就是如当前状态和题意不符,并且由于题目可以推出,往后的所有情况和题意都不符,那么就可以进行剪枝,直接把这种情况及后续的所有情况判负,直接返回。


2、排除等效冗余

所谓排除等效冗余,就是当几个枝桠具有完全相同的效果的时候,只选择其中一个走就可以了。


3、最优性剪枝

所谓最优性剪枝,是在我们用搜索方法解决最优化问题的时候的一种常用剪枝方法。当搜到一半的时候,发现比已经搜索到的最优解差,则该方案肯定是不行的,即刻停止搜索,进行回溯。


4、顺序剪枝

普遍来讲,搜索的顺序是不固定的,对一个问题来讲,算法可以进入搜索树的任意的一个子节点。但假如我们要搜索一个最小值,而非要从最大值存在的那个节点开搜,就可能存在搜索到最后才出解。而我们从最小的节点开搜很可能马上就出解。这就是顺序剪枝的一个应用。一般来讲,有单调性存在的搜索问题可以和贪心思想结合,进行顺序剪枝。


5、记忆化

记忆化搜索其实是搜索的另外一个分支。在这里简单介绍一下记忆化的原理:

就是记录搜索的每一个状态,当重复搜索到相同的状态的时候直接返回。


近三年最新剪枝技术及论文推荐

2020最新剪枝算法:CVPR 2020 Oral | DMCP: 可微分的深度模型剪枝算法解读

2020推荐剪枝论文:卷积神经网络的加速与压缩方法研究

2019推荐论文1:Pruning from Scratch (2019)

2019推荐论文2:Adversarial Neural Pruning (2019)

2019推荐论文3:Rethinking the Value of Network Pruning (ICLR 2019)

2019推荐论文4:Network Pruning via Transformable Architecture Search (NeurIPS 2019)

2019推荐论文5:Self-Adaptive Network Pruning (ICONIP 2019)

2019推荐论文6:Structured Pruning of Large Language Models (2019)


推荐国内论文网站:

编辑于 2021-01-21 17:27