算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制。算法优化是指对算法的有关性能进行优化,如时间复杂度、
空间复杂度、正确性、
健壮性。由于算法应用情景变化很大,算法优化可以使算法具有更好泛化能力。
简介
算法优化是指对算法的有关性能进行优化,如时间复杂度、
空间复杂度、正确性、健壮性。大数据时代到来,算法要处理数据的数量级也越来越大以及处理问题的场景千变万化。为了增强算法的处理问题的能力,对算法进行优化是必不可少的。算法优化一般是对算法结构和
收敛性进行优化。
算法的基本特征
一个算法应该具有以下五个重要的特征:
有穷性(Finiteness)
算法的有穷性是指算法必须能在执行有限个步骤之后终止;
确切性(Definiteness)
算法的每一步骤必须有确切的定义;
输入项(Input)
一个算法有0个或多个输入,以刻画运算对象的初始情况,所谓0个输入是指算法本身定出了初始条件;
输出项(Output)
一个算法有一个或多个输出,以反映对输入数据加工后的结果。没有输出的算法是毫无意义的;
可行性(Effectiveness)
算法中执行的任何计算步骤都是可以被分解为基本的可执行的操作步,即每个计算步都可以在有限时间内完成(也称之为有效性)。
算法常见评定标准
同一问题可用不同算法解决,而一个算法的质量优劣将影响到算法乃至程序的效率。算法分析的目的在于选择合适算法和改进算法。一个算法的评价主要从时间复杂度和空间复杂度来考虑。
时间复杂度
算法的时间复杂度是指执行算法所需要的计算工作量。一般来说,计算机算法是问题规模n 的函数f(n),算法的时间复杂度也因此记做。
T(n)=Ο(f(n))
因此,问题的规模n 越大,算法执行的时间的增长率与f(n) 的增长率正相关,称作渐进时间复杂度(Asymptotic Time Complexity)。
空间复杂度
算法的空间复杂度是指算法需要消耗的内存空间。其计算和表示方法与时间复杂度类似,一般都用复杂度的渐近性来表示。同时间复杂度相比,空间复杂度的分析要简单得多。
正确性
算法的正确性是评价一个算法优劣的最重要的标准。
可读性
算法的可读性是指一个算法可供人们阅读的容易程度。
健壮性
健壮性是指一个算法对不合理数据输入的反应能力和处理能力,也称为容错性。
泛化能力
泛化能力(generalization ability)是指
机器学习算法对新鲜样本的适应能力。学习的目的是学到隐含在数据对背后的规律,对具有同一规律的学习集以外的数据,经过训练的网络也能给出合适的输出,该能力称为泛化能力。通常期望经训练样本训练的网络具有较强的泛化能力,也就是对新输入给出合理响应的能力。应当指出并非训练的次数越多越能得到正确的输入输出映射关系。网络的性能主要用它的泛化能力来衡量。
常见算法优化方法
随机搜索
随机搜索(random search)是利用
随机数求极小点而求得
函数近似的
最优解的
方法。
变量允许的变化区间,不断
随机地而不是有
倾向性产生随机点,并计算其约束函数和
目标函数的值,对满足
约束条件的点,逐个比较其目标
函数的值,将坏的点抛弃,保留好的点,最后便得到最优解的近似解。这种方法是建立在
概率论的基础上,所取随机点越多,则得到最优解的
概率也就越大。由于大多数
计算机程序库中有随机数发生器,所以应用这种方法是很方便的。但是其计算
精度较差、
效率较低。随机搜索一般用于
粗选或
普查。常用的方法有
随机跳跃法,
随机走步法等。
梯度下降法
梯度下降法是一个
最优化算法,通常也称为最速下降法。最速下降法是求解无约束优化问题最简单和最古老的方法之一,虽然现在已经不具有实用性,但是许多有效算法都是以它为基础进行改进和修正而得到的。最速下降法是用
负梯度方向为搜索方向的,最速下降法越接近目标值,步长越小,前进越慢。
遗传算法
遗传算法也是受自然科学的启发。这类算法的运行过程是先随机生成一组解,称之为种群。在优化过程中的每一步,算法会计算整个种群的成本函数,从而得到一个有关题解的排序,在对题解排序之后,一个新的种群----称之为下一代就被创建出来了。首先,我们将当前种群中位于最顶端的题解加入其所在的新种群中,称之为精英选拔法。新种群中的余下部分是由修改最优解后形成的全新解组成。
常用的有两种修改题解的方法。其中一种称为变异,其做法是对一个既有解进行微小的、简单的、随机的改变;修改题解的另一种方法称为交叉或配对,这种方法是选取最优解种的两个解,然后将它们按某种方式进行组合。尔后,这一过程会一直重复进行,直到达到指定的迭代次数,或者连续经过数代后题解都没有改善时停止。
模拟退火法
模拟退火法是受物理学领域启发而来的一种优化算法。退火是指将合金加热后再慢慢冷却的过程。模拟退火也是从一个随机解开始,然后朝着某个方向变化。算法最为关键的部分在于,如果新的解成本值更低,那么新的解则会替代当前解,和爬山法类似,不过,如果成本值更高的话,这个解仍然有可能替代当前解。模拟退火算法之所以管用,不仅因为它总是会接受一个更优的解,而且还因为它在退火过程的开始阶段会接受表现比较差的解。随着退火过程的不断进行,算法越来越不可接受较差的解。