导航:首页 > 源码编译 > 现代优化算法pdf

现代优化算法pdf

发布时间:2023-01-29 17:05:25

Ⅰ 《高效算法竞赛、应试与提高必修128例》pdf下载在线阅读,求百度网盘云资源

《高效算法》([法] Christoph Dürr)电子书网盘下载免费在线阅读

资源链接:

链接:https://pan..com/s/17jSKaBY6XgJIvU0DczbbOA

提取码:ettv

书名:高效算法

作者:[法] Christoph Dürr

译者:史世强

出版社:人民邮电出版社

出版年份:2018-5

页数:204

内容简介:

本书旨在探讨如何优化算法效率,详细阐述了经典算法和特殊算法的实现、应用技巧和复杂度验证过程,内容由浅入深,能帮助读者快速掌握复杂度适当、正确率高的高效编程方法以及自检、自测技巧,是参加ACM/ICPC、Google Code Jam 等国际编程竞赛、备战编程考试、提高编程效率、优化编程方法的参考书目。

作者简介:

Christoph Dürr

法国国家科学研究院研究员,巴黎皮埃尔-玛丽•居里大学博士生导师,Operation Research科研组研究主任。

Jill-Jênn Vie

法国高等电力学院博士、算法讲师,担任法国高等师范学院Paris-Saclay团队在ACM竞赛中的算法导师;曾任法国国际编程大赛Prologin主席,并于2014年获Google RISE Award。

Ⅱ 传统优化算法和现代优化算法包括哪些.区别是什么

1. 传统优化算法一般是针对结构化的问题,有较为明确的问题和条件描述,如线性规划,二次规划,整数规划,混合规划,带约束和不带约束条件等,即有清晰的结构信息;而智能优化算法一般针对的是较为普适的问题描述,普遍比较缺乏结构信息。

2. 传统优化算法不少都属于凸优化范畴,有唯一明确的全局最优点;而智能优化算法针对的绝大多数是多极值问题,如何防止陷入局部最优而尽可能找到全局最优是采纳智能优化算法的根本原因:对于单极值问题,传统算法大部分时候已足够好,而智能算法没有任何优势;对多极值问题,智能优化算法通过其有效设计可以在跳出局部最优和收敛到一个点之间有个较好的平衡,从而实现找到全局最优点,但有的时候局部最优也是可接受的,所以传统算法也有很大应用空间和针对特殊结构的改进可能。

3. 传统优化算法一般是确定性算法,有固定的结构和参数,计算复杂度和收敛性可做理论分析;智能优化算法大多属于启发性算法,能定性分析却难定量证明,且大多数算法基于随机特性,其收敛性一般是概率意义上的,实际性能不可控,往往收敛速度也比较慢,计算复杂度较高。

Ⅲ 优化算法笔记(七)差分进化算法

(以下描述,均不是学术用语,仅供大家快乐的阅读)
差分进化算法(Differential Evolution Algorithm,DE)是一种基于群体的进化算法,它模拟了群体中的个体的合作与竞争的过程。算法原理简单,控制参数少,只有交叉概率和缩放比例因子,鲁棒性强,易于实现。
差分进化算法中,每一个个体的基因表示待求问题的一个候选解。每次迭代将先进行变异操作,选择一个或多个个体的基因作为基,然后选择不同的个体的差分来构成差分基因,最后将作为基的基因与差分基因相加来得出新的个体。交叉操作将新的个体将于父代的对应个体交叉,然后进行选择操作,比较交叉后的个体与父代的对应个体,选择较优的个体保留至下一代。在迭代完成之后将选择种群中最优个体的基因作为解。
差分进化算法可以算是我所使用过的优化算法中大魔王级别的算法,虽然它每个方面都没有强到离谱,但是综合起来的效果好于大多数算法。它就像一个每个科目都能考到90分(百分制)的学生,虽然没门课都不是最优秀的,但是论综合,论总分,它有极大的概率是第一名。

在我研究优化算法的小路上,我的目标就是找到一个能打败大魔王或是能在大多数方面压制魔王的算法。

这次的主角就选魔王军吧(或者蚁王军,为了与蚁群算法区别还是叫魔王军吧),个体则称之为魔王兵。
魔王兵的能力取决于它们的基因,它们可以根据环境或者需要改变自己的基因使得自己更加强大,更方便的处理问题,问题的维度与基因维度相同。

表示第i个魔王兵在进化了第t次后的基因,该个体有D位基因。
与遗传算法同为进化算法的差分进化算法,它们的操作(算子)也都非常相似的,都是交叉,变异和选择,流程也几乎一样(遗传算法先交叉后变异,差分进化算法先变异后交叉)。

说到差分进化算法中的变异,我就想到一句论语 “三人行,必有我师焉。择其善者而从之,其不善者而改之。” ,其实这句论语已经向我们说明了差分进化算法的整个流程:
“三人行,必有我师焉”——变异,交叉。
“择其善者而从之,其不善者而改之”——选择。
差分进化算法中,当一个魔王兵变异时,它会先找来3个小伙伴,当然是随机找来3个小伙伴,避免同化。在一个小伙伴的基因上加上另外两个小伙伴基因之差作为自己的目标基因。其变异公式如下:

表示第i个魔王兵找到了编号为r1、r2和r3的三个魔王兵,当然了i、r1、r2、r3为互不相同的整数,F为缩放比例因子,通常 ,一般取F=0.5。 为第i个魔王兵交叉后的目标基因图纸,不过这是个半成品,再经过交叉后,目标基因图纸才算完成。
其实现在我们已经有了5个基因图纸了 ,接下来将进行交叉操作。由于变异操作,差分进化算法的种群中个体数至少为4,即魔王军中至少有4个小兵。

交叉操作中,魔王兵i会将目标基因图纸 进行加工得到 ,加工过程如下:

其中 。 为交叉概率,其值越大,发生交叉的概率越大,一般取 。 为{1,2,…,D}中的随机整数,其作用是保证交叉操作中至少有一维基因来自变异操作产生的基因,不能让交叉操作的努力白费。
从公式上可以看出交叉操作实际上是从变异操作得出的基因图纸上选择至少一位基因来替换自己的等位基因,得到最终的基因图纸。

选择操作相对简单,魔王兵i拿到了最终的基因图纸 ,大喊一声,进化吧,魔王兵i的基因改变了。它拿出了能力测量器fitness function,如果发现自己变强了,那么就将基因 保留到下一代,否则它选择放弃进化,让自己还原成 。

实验又来啦,还是那个实验 ,简单、易算、好画图。
实验1 :参数如下

图中可以看出在第20代时,群体已经非常集中了,在来看看最终得出的结果。

这结果真是好到令人发指,恶魔在心中低语“把其他的优化算法都丢掉吧”。不过别往心里去,任何算法都有优缺点,天下没有免费的午餐,要想获得某种能力必须付出至少相应的代价。
实验2:
将交叉率CR设为0,即每次交叉只选择保留一位变异基因。

看看了看图,感觉跟实验1中相比没有什么变化,那我们再来看看结果。

结果总体来说比实验1好了一个数量级。为什么呢?个人感觉应该是每次只改变一位基因的局部搜索能力比改变多位基因更强。下面我们将交叉率CR设为1来看看是否是这样。
实验3:
将交叉率CR设为1,即每次交叉只选择保留一位原有基因。

实验3的图与实验1和实验2相比好像也没什么差别,只是收敛速度好像快了那么一点点。再来看看结果。

发现结果比实验2的结果还要好?那说明了实验2我得出的结论是可能是错误的,交叉率在该问题上对差分进化算法的影响不大,它们结果的差异可能只是运气的差异,毕竟是概率算法。
实验4:
将变异放缩因子设为0,即变异只与一个个体有关。

收敛速度依然很快,不过怎么感觉结果不对,而且个体收敛的路径好像遗传算法,当F=0,时,差分进化算法退化为了没有变异、选择操作的遗传算法,结果一定不会太好。

果然如此。下面我们再看看F=2时的实验。
实验5:
将变异放缩因子设为2。

实验5的图可以明显看出,群体的收敛速度要慢了许多,到第50代时,种群还未完全收敛于一点,那么在50代时其结果也不会很好,毕竟算法还未收敛就停止进化了。

结果不算很好但也算相对稳定。

通过上面5个实验,我们大致了解了差分进化算法的两个参数的作用。
交叉率CR,影响基因取自变异基因的比例,由于至少要保留一位自己的基因和变异的基因导致CR在该问题上对算法性能的影响不大(这个问题比较简单,维度较低,影响不大)。
变异放缩因子F,影响群体的收敛速度,F越大收敛速度越慢,F绝对值越小收敛速度越快,当F=0是群体之间只会交换基因,不会变异基因。

差分进化算法大魔王已经如此强大了,那么还有什么可以改进的呢?当然有下面一一道来。
方案1 .将3人行修改为5人行,以及推广到2n+1人行。
实验6:
将3人行修改为5人行,变异公式如下:

五人行的实验图看起来好像与之前并没有太大的变化,我们再来看看结果。

结果没有明显提升,反而感觉比之前的结果差了。反思一下五人行的优缺点,优点,取值范围更大,缺点,情况太多,减慢搜索速度。

可以看出算法的收敛速度比之前的变慢了一点,再看看结果。

比之前差。

差分进化算法的学习在此也告一段落。差分进化算法很强大,也很简单、简洁,算法的描述都充满了美感,不愧是大魔王。不过这里并不是结束,这只是个开始,终将找到打败大魔王的方法,让新的魔王诞生。
由于差分进化算法足够强,而文中实验的问题较为简单导致算法的改进甚至越改越差(其实我也不知道改的如何,需要大量实验验证)。在遥远的将来,也会有更加复杂的问题来检验魔王的能力,总之,后会无期。
以下指标纯属个人yy,仅供参考

目录
上一篇 优化算法笔记(六)遗传算法
下一篇 优化算法笔记(八)人工蜂群算法

优化算法matlab实现(七)差分进化算法matlab实现

Ⅳ 优化算法笔记(十八)灰狼算法

(以下描述,均不是学术用语,仅供大家快乐的阅读)
灰狼算法(Grey Wolf Algorithm)是受灰狼群体捕猎行为启发而提出的算法。算法提出于2013年,仍是一个较新的算法。目前为止(2020)与之相关的论文也比较多,但多为算法的应用,应该仍有研究和改进的余地。
灰狼算法中,每只灰狼的位置代表了解空间中的一个可行解。群体中,占据最好位置的三只灰狼为狼王及其左右护法(卫)。在捕猎过程中这三只狼将带领着狼群蛇皮走位,抓捕猎物,直至找到猎物(最优解)。当然狼王不会一直是狼王,左右护法也是一样,每一轮走位后,会根据位置的优劣重新选出新的狼王和左右护法。狼群中的每一只灰狼会向着(也可能背向)这三只位置最优的灰狼移动一定的距离,来决定这一步自己将如何走位。简单来说, 灰狼个体会向则群体中最优的三个个体移动

很明显该算法的主角就是灰狼了。

设定目标灰狼为
,当前灰狼的为 ,则该灰狼向着目标灰狼移动后的位置 可以由一下公式计算得出:

灰狼群体中位置最好的三只灰狼编号为1,2,3,那么当前的灰狼i通过观察灰狼1、灰狼2和灰狼3,根据公式(1)得出的三个位置为Xi1,Xi2,Xi3。那么灰狼i将要移动到的位置可以根据以下供述计算得出:

可以看出该灰狼的目标位置是通过观察三只头狼得到的三个目标位置的所围成的区域的质心。(质心超出边界时,取值为边界值)。

灰狼算法的论文描述很多,但是其公式和流程都非常简单,主要对其参数A和C的作用效果进行了详细描述。
C主要决定了新位置相对于目标灰狼的方位,而A则决定新位置向目标靠近还是远离目标灰狼。当|A|>=1时,为远离目标,表现出更强的全局搜索能力,|A|<1时靠近目标,表现出更强的局部搜索能力。

适应度函数 。
实验一:

看看这图像和结果,效果好极了。每当我这么认为时,总会出现意想不到的转折。
修改一下最优解位置试一试, 。
实验二 : 。

其结果比上面的实验差了不少,但我觉得这才是一个优化算法应有的搜索图像。其结果看上去较差只是因为迭代次数较少,收敛不够迅速,这既是优点也是缺点,收敛慢但是搜索更细致。
仔细分析灰狼算法的流程,它并没有向原点靠近的趋势,那只能理解为算法群体总体上向着群体的中心移动。 猜想 :当初始化群体的中心恰好是正解时,算法的结果将会非常的好。
下面使用 ,并将灰狼的初始位置限定在(50,100)的范围内,看看实验图像是否和实验二的图像一致。

实验三 . ,初始种群取值范围为(50,100)

这图像和结果跟实验一的不是一样的吗?这说明从实验二中得出的猜想是错误的。

从图像和结果上看,都和实验二非常相似,当解在解空间的中心时但不在原点时,算法的结果将差一些。
为什么会这样呢?从算法的流程上看,灰狼算法的各个行为都是关于头狼对称的,当最优解在原点且头狼在附近时,公式(1)将变为如下:

实验五 . ,三只头狼添加贪心算法。

从图像可以看出中心的三个点移动的频率要比其他点的移动频率低。从结果上可以看出其结果相对稳定了不少,不过差距非常的小,几乎可以认为是运气好所导致。如果所有的个体都添加贪心算法呢?显然,算法的全局搜索能力将进一步减弱,并且更容易向群体中心收敛,这并不是一个好的操作。

实验六 . ,
在实验五的基础上为狼群添加一个统一的步长,即每只狼每次向着目标狼移动的距离不能大于其步长,将其最大步长设为1,看看效果。

从图像可以看出,受到步长的约束每只狼的移动距离较小,在结束时还没有收敛,其搜索能力较强但收敛速度过慢且极易陷入局部最优。现在将最大步长设置为10(1/10解空间范围)使其搜索能力和收敛速度相对平衡,在看看效果。

从图像可以看出,算法的收敛速度快了不少,但从结果可知,相较于实验五,算法的提升并不太大。
不过这个图像有一种似曾相识的感觉,与萤火虫算法(FireFly Algorithm)差不多,仔细对比这两个算法可以发现, 灰狼算法相当于萤火虫算法的一个简化 。实验六种对灰狼算法添加步长的修改,让其离萤火虫算法更近了一步。

实验七 . ,
在实验六的基础上让最大步长随着迭代次数增加递减。

从实验七的图像可以看出,种群的收敛速度好像快了那么一点,结果也变好了不少。但是和改进后的萤火虫算法相比仍然有一定的差距。
灰狼算法在全局搜索和局部搜索上的平衡已经比较好了,尝试过对其进行改进,但是修改使搜索能力更强时,对于局部最优的函数求解效果很差,反之结果的精度较低,总体而言修改后的算法与原算法相差无几。

灰狼算法是根据灰狼群体的捕猎行动而提出的优化算法,其算法流程和步骤非常简单,数学模型也非常的优美。灰狼算法由于没有贪心算法,使得其有着较强的全局搜索能力同时参数A也控制了算法的局部搜索范围,算法的全局搜索能力和局部搜索能力比较平衡。
从算法的优化图像可以看出,灰狼算法和萤火虫算法非常的相似。可以认为,灰狼算法是对萤火虫算法的一种改进。萤火虫算法向着由于自己的个体飞行,而灰狼算法则的条件更为苛刻,向着群体前三强前进,萤火虫算法通过步长控制搜索范围,而灰狼算法则直接定义搜索范围参数A,并令A线性递减。
灰狼算法的结构简单,但也不容易改进,数次改进后只是改变了全局搜索能力和局部搜索能力的比例,综合能力并没有太大变化。
由于原点对于灰狼算法有着隐隐的吸引力,当测试函数目标值在原点时,其结果会异常的好。因此,灰狼算法的实际效果没有论文中的那么好,但也不差,算是一个中规中矩的优化算法。
参考文献
Mirjalili S , Mirjalili S M , Lewis A . Grey Wolf Optimizer[J]. Advances in Engineering Software, 2014, 69:46-61. 提取码:wpff

以下指标纯属个人yy,仅供参考

目录
上一篇 优化算法笔记(十七)万有引力算法
下一篇 优化算法笔记(十九)头脑风暴算法

优化算法matlab实现(十八)灰狼算法matlab实现

Ⅳ 优化算法笔记(二)优化算法的分类

(以下描述,均不是学术用语,仅供大家快乐的阅读)

在分类之前,我们先列举一下常见的优化算法(不然我们拿什么分类呢?)。
1遗传算法Genetic algorithm
2粒子群优化算法Particle Swarm Optimization
3差分进化算法Differential Evolution
4人工蜂群算法Artificial Bee Colony
5蚁群算法Ant Colony Optimization
6人工鱼群算法Artificial Fish Swarm Algorithm
7杜鹃搜索算法Cuckoo Search
8萤火虫算法Firefly Algorithm
9灰狼算法Grey Wolf Optimizer
10鲸鱼算法Whale Optimization Algorithm
11群搜索算法Group search optimizer
12混合蛙跳算法Shuffled Frog Leaping Algorithm
13烟花算法fireworks algorithm
14菌群优化算法Bacterial Foraging Optimization
以上优化算法是我所接触过的算法,没接触过的算法不能随便下结论,知之为知之,不知为不知。其实到目前为止优化算法可能已经有几百种了,我们不可能也不需要全面的了解所有的算法,而且优化算法之间也有较大的共性,深入研究几个之后再看其他优化算法上手速度会灰常的快。
优化算法从提出到现在不过50-60年(遗传算法1975年提出),虽种类繁多但大多较为相似,不过这也很正常,比较香蕉和人的基因相似度也有50%-60%。当然算法之间的相似度要比香蕉和人的相似度更大,毕竟人家都是优化算法,有着相同的目标,只是实现方式不同。就像条条大路通罗马,我们可以走去,可以坐汽车去,可以坐火车去,也可以坐飞机去,不管使用何种方式,我们都在去往罗马的路上,也不会说坐飞机去要比走去更好,交通工具只是一个工具,最终的方案还是要看我们的选择。

上面列举了一些常见的算法,即使你一个都没见过也没关系,后面会对它们进行详细的介绍,但是对后面的分类可能会有些许影响,不过问题不大,就先当总结看了。
再对优化算法分类之前,先介绍一下算法的模型,在笔记(一)中绘制了优化算法的流程,不过那是个较为简单的模型,此处的模型会更加复杂。上面说了优化算法有较大的相似性,这些相似性主要体现在算法的运行流程中。
优化算法的求解过程可以看做是一个群体的生存过程。

有一群原始人,他们要在野外中寻找食物,一个原始人是这个群体中的最小单元,他们的最终目标是寻找这个环境中最容易获取食物的位置,即最易存活下来的位置。每个原始人都去独自寻找食物,他们每个人每天获取食物的策略只有采集果实、制作陷阱或者守株待兔,即在一天之中他们不会改变他们的位置。在下一天他们会根据自己的策略变更自己的位置。到了某一天他们又聚在了一起,选择了他们到过的最容易获取食物的位置定居。
一群原始人=优化算法中的种群、群体;
一个原始人=优化算法中的个体;
一个原始人的位置=优化算法中个体的位置、基因等属性;
原始人变更位置=优化算法中总群的更新操作;
该位置获取食物的难易程度=优化算法中的适应度函数;
一天=优化算法中的一个迭代;
这群原始人最终的定居位置=优化算法所得的解。
优化算法的流程图如下:

对优化算法分类得有个标准,按照不同的标准分类也会得到不一样的结果。首先说一下我所使用的分类标准(动态更新,有了新的感悟再加):

按由来分类比较好理解,就是该算法受何种现象启发而发明,本质是对现象分类。

可以看出算法根据由来可以大致分为有人类的理论创造而来,向生物学习而来,受物理现象启发。其中向生物学习而来的算法最多,其他类别由于举例有偏差,不是很准确,而且物理现象也经过人类总结,有些与人类现象相交叉,但仍将其独立出来。
类别分好了,那么为什么要这么分类呢?

当然是因为要凑字数啦,啊呸,当然是为了更好的理解学习这些算法的原理及特点。
向动物生存学习而来的算法一定是一种行之有效的方法,能够保证算法的效率和准确性,因为,如果使用该策略的动物无法存活到我们可以对其进行研究,我们也无法得知其生存策略。(而这也是一种幸存者偏差,我们只能看到行之有效的策略,但并不是我们没看到的策略都是垃圾,毕竟也发生过小行星撞地球这种小概率毁灭性事件。讲个冷笑话开cou心一shu下:一只小恐龙对他的小伙伴说,好开心,我最喜欢的那颗星星越来越亮了(完)。)但是由于生物的局限性,人们所创造出的算法也会有局限性:我们所熟知的生物都生存在三维空间,在这些环境中,影响生物生存的条件比较有限,反应到算法中就是这些算法在解决较低维度的问题时效果很好,当遇到超高维(维度>500)问题时,结果可能不容乐观,没做过实验,我也不敢乱说。

按更新过程分类相对复杂一点,主要是根据优化算法流程中更新位置操作的方式来进行分类。更新位置的操作按我的理解可大致分为两类:1.跟随最优解;2.不跟随最优解。
还是上面原始人的例子,每天他有一次去往其他位置狩猎的机会,他们采用何种方式来决定今天自己应该去哪里呢?
如果他们的策略是“跟随最优解”,那么他们选取位置的方式就是按一定的策略向群体已知的最佳狩猎位置(历史最佳)或者是当前群体中的最佳狩猎位置(今天最佳)靠近,至于是直线跑过去还是蛇皮走位绕过去,这个要看他们群体的策略。当然,他们的目的不是在最佳狩猎位置集合,他们的目的是在过去的途中看是否能发现更加好的狩猎位置,去往已经到过的狩猎地点再次狩猎是没有意义的,因为每个位置获取食物的难易程度是固定的。有了目标,大家都会朝着目标前进,总有一日,大家会在谋个位置附近相聚,相聚虽好但不利于后续的觅食容易陷入局部最优。
什么是局部最优呢?假设在当前环境中有一“桃花源”,拥有上帝视角的我们知道这个地方就是最适合原始人们生存的,但是此地入口隐蔽“山有小口,仿佛若有光”、“初极狭,才通人。”,是一个难以发现的地方。如果没有任何一个原始人到达了这里,大家向着已知的最优位置靠近时,也难以发现这个“桃源之地”,而当大家越聚越拢之后,“桃源”被发现的可能性越来越低。虽然原始人们得到了他们的解,但这并不是我们所求的“桃源”,他们聚集之后失去了寻求“桃源”的可能,这群原始人便陷入了局部最优。

如果他们的策略是“不跟随最优解”,那么他们的策略是什么呢?我也不知道,这个应该他们自己决定。毕竟“是什么”比“不是什么”的范围要小的多。总之不跟随最优解时,算法会有自己特定的步骤来更新个体的位置,有可能是随机在自己附近找,也有可能是随机向别人学习。不跟随最优解时,原始人们应该不会快速聚集到某一处,这样一来他们的选择更具多样性。
按照更新过程对上面的算法分类结果如下

可以看出上面不跟随最优解的算法只有遗传算法和差分进化算法,他们的更新策略是与进化和基因的重组有关。因此这些不跟随最优解的算法,他们大多依据进化理论更新位置(基因)我把他们叫做进化算法,而那些跟随群体最优解的算法,他们则大多依赖群体的配合协作,我把这些算法叫做群智能算法。

目前我只总结了这两种,分类方法,如果你有更加优秀的分类方法,我们可以交流一下:

目录
上一篇 优化算法笔记(一)优化算法的介绍
下一篇 优化算法笔记(三)粒子群算法(1)

Ⅵ 优化算法总结

本文介绍一下机器学习和深度学习中常用的优化算法和优化器以及一些其他我知道的优化算法,部分算法我也没有搞懂,就先记录下来以后慢慢研究吧.*_*.

1.梯度下降算法(Gradient Descent)

梯度下降法可以参考我另一篇文章 机器学习-线性回归 里的讲解,这里就不在重复叙述.这里需要强调一下,深度学习里常用的SGD,翻译过来是随机梯度下降,但是实质是mini-batch梯度下降(mini-batch-gd),或者说是两者的结合更准确一些.

SGD的优点是,算法简单,计算量小,在函数为凸函数时可以找到全局最优解.所以是最常用的优化算法.缺点是如果函数不是凸函数的话,很容易进入到局部最优解而无法跳出来.同时SGD在选择学习率上也是比较困难的.

2.牛顿法

牛顿法和拟牛顿法都是求解无约束最优化问题的常用方法,其中牛顿法是迭代算法,每一步需要求解目标函数的海森矩阵的逆矩阵,计算比较复杂.

牛顿法在求解方程根的思想:在二维情况下,迭代的寻找某一点x,寻找方法是随机一个初始点x_0,目标函数在该点x_0的切线与x坐标轴的交点就是下一个x点,也就是x_1.不断迭代寻找x.其中切线的斜率为目标函数在点x_0的导数(梯度),切必过点(x_0,f(x_0)).所以迭代的方程式如图1,为了求该方程的极值点,还需要令其导数等于0,也就是又求了一次导数,所以需要用到f(x)的二阶导数.

在最优化的问题中,牛顿法提供了一种求解的办法. 假设任务是优化一个目标函数f, 求函数ff的极大极小问题, 可以转化为求解函数f导数等于0的问题, 这样求可以把优化问题看成方程求解问题(f的导数等于0). 剩下的问题就和牛顿法求解方程根的思想很相似了.

目标函数的泰勒展开式:

化简后:

这样就得到了与图1相似的公式,这里是二维的,在多维空间上,求二阶导数就是求海森矩阵,因为是分母,所以还需要求海森矩阵的逆矩阵.

牛顿法和SGD的区别:

牛顿法是二阶求导,SGD是一阶求导,所以牛顿法要收敛的更快一些.SGD只考虑当前情况下梯度下降最快的方向,而牛顿法不仅考虑当前梯度下降最快,还有考虑下一步下降最快的方向.

牛顿法的优点是二阶求导下降速度快,但是因为是迭代算法,每一步都需要求解海森矩阵的逆矩阵,所以计算复杂.

3.拟牛顿法(没搞懂,待定)

考虑到牛顿法计算海森矩阵比较麻烦,所以它使用正定矩阵来代替海森矩阵的逆矩阵,从而简化了计算过程.

常用的拟牛顿法有DFP算法和BFGS算法.

4.共轭梯度法(Conjugate Gradient)

共轭梯度法是介于最速下降法与牛顿法之间的一个方法,它仅需利用一阶导数信息,但克服了最速下降法收敛慢的缺点,又避免了牛顿法计算海森矩阵并求逆的缺点.共轭梯度法不仅是解决大型线性方程组最有用的方法之一,也是解大型非线性最优化最有效的算法之一.

5.拉格朗日法

参考SVM里的讲解 机器学习-SVM

6.动量优化法(Momentum)

动量优化法主要是在SGD的基础上,加入了历史的梯度更新信息或者说是加入了速度更新.SGD虽然是很流行的优化算法,但是其学习过程很慢,因为总是以同样的步长沿着梯度下降的方向.所以动量是为了加速学习的方法.

其中第一行的减号部分是计算当前的梯度,第一行是根据梯度更新速度v,而α是新引进的参数,在实践中,α的一般取值为 0.5,0.9 和 0.99.和学习率 一样,α 也会随着时间不断调整.一般初始值是一个较小的值,随后会慢慢变大.

7.Nesterov加速梯度(NAG, Nesterov accelerated gradient)

NAG是在动量优化算法的基础上又进行了改进.根据下图可以看出,Nesterov 动量和标准动量之间的区别体现在梯度计算上, Nesterov 动量中,梯度计算在施加当前速度之后.因此,Nesterov 动量可以解释为往标准动量方法中添加了一个校正因子

8.AdaGrad算法

AdaGrad算法,自适应优化算法的一种,独立地适应所有模型参数的学习率,缩放每个参数反比于其所有梯度历史平均值总和的平方根.具有代价函数最大梯度的参数相应地有个快速下降的学习率,而具有小梯度的参数在学习率上有相对较小的下降.通俗一点的讲,就是根据实际情况更改学习率,比如模型快要收敛的时候,学习率步长就会小一点,防止跳出最优解.

其中g是梯度,第一行的分母是计算累计梯度的平方根, 是为了防止分母为0加上的极小常数项,α是学习率.

Adagrad的主要优点是不需要人为的调节学习率,它可以自动调节.但是依然需要设置一个初始的全局学习率.缺点是随着迭代次数增多,学习率会越来越小,最终会趋近于0.

9.RMSProp算法

RMSProp修改 AdaGrad 以在非凸设定下效果更好,改变梯度积累为指数加权的移动平均.AdaGrad旨在应用于凸问题时快速收敛.

10.AdaDelta算法

11.Adam算法

Adam是Momentum和RMSprop的结合体,也就是带动量的自适应优化算法.

12.Nadam算法

13.模拟退火算法

14.蚁群算法

15.遗传算法

动量是为了加快学习速度,而自适应是为了加快收敛速度,注意学习速度快不一定收敛速度就快,比如步长大学习速度快,但是很容易跳出极值点,在极值点附近波动,很难达到收敛.

未完待定....

参考:

《统计学习方法》  李航    着

《深度学习》  花书

Ⅶ 优化算法笔记(一)优化算法的介绍

(以下描述,均不是学术用语,仅供大家快乐的阅读)

        我们常见常用的算法有排序算法,字符串遍历算法,寻路算法等。这些算法都是为了解决特定的问题而被提出。

        算法本质是一种按照固定步骤执行的过程。

        优化算法也是这样一种过程,是一种根据概率按照固定步骤寻求问题的最优解的过程。与常见的排序算法、寻路算法不同的是,优化算法不具备等幂性,是一种 概率算法 。算法不断的 迭代 执行同一步骤直到结束,其流程如下图。

        等幂性即 对于同样的输入,输出是相同的 。

        比如图1,对于给定的鱼和给定的熊掌,我们在相同的条件下一定可以知道它们谁更重,当然,相同的条件是指鱼和熊掌处于相同的重力作用下,且不用考虑水分流失的影响。在这些给定的条件下,我们(无论是谁)都将得出相同的结论,鱼更重或者熊掌更重。我们可以认为,秤是一个等幂性的算法(工具)。

        现在把问题变一变,问鱼与熊掌你更爱哪个,那么现在,这个问题,每个人的答案可能不会一样,鱼与熊掌各有所爱。说明喜爱这个算法不是一个等幂性算法。当然你可能会问,哪个更重,和更喜欢哪个这两个问题一个是客观问题,一个是主观问题,主观问题没有确切的答案的。当我们处理主观问题时,也会将其转换成客观问题,比如给喜欢鱼和喜欢熊掌的程度打个分,再去寻求答案,毕竟计算机没有感情,只认0和1(量子计算机我不认识你)。

        说完了等幂性,再来说什么是概率算法。简单来说就是看脸、看人品、看运气的算法。

        有一场考试,考试的内容全部取自课本,同时老师根据自己的经验给同学们划了重点,但是因为试卷并不是该老师所出,也会有考试内容不在重点之内,老师估计试卷中至少80%内容都在重点中。学霸和学渣参加了考试,学霸为了考满分所以无视重点,学渣为了pass,因此只看了重点。这样做的结果一定是score(学霸)>=score(学渣)。

        当重点跟上图一样的时候,所有的内容都是重点的时候,学霸和学渣的学习策略变成了相同的策略,则score(学霸)=score(学渣)。但同时,学渣也要付出跟学霸相同的努力去学习这些内容,学渣心里苦啊。

        当课本如下图时

        学霸?学霸人呢,哪去了快来学习啊,不是说学习一时爽,一直学习一直爽吗,快来啊,还等什么。

        这时,如果重点内容远少于书本内容时,学渣的学习策略有了优势——花费的时间和精力较少。但是同时,学渣的分数也是一个未知数,可能得到80分也可能拿到100分,分数完全取决于重点内容与题目的契合度,契合度越高,分数越高。对学渣来说,自己具体能考多少分无法由自己决定,但是好在能够知道大概的分数范围。

        学霸的学习策略是一种遍历性算法,他会遍历、通读全部内容,以保证满分。

        学渣的学习策略则是一种概率算法,他只会遍历、学习重点内容,但至于这些重点是不是真重点他也不知道。

        与遍历算法相比,概率算法的结果具有不确定性,可能很好,也可能很差,但是会消耗更少的资源,比如时间(人生),空间(记忆)。概率算法的最大优点就是 花费较少的代价来获取最高的收益 ,在现实中体现于节省时间,使用很少的时间得到一个不与最优解相差较多的结果。

        “庄子:吾生也有涯,而知也无涯;以有涯随无涯,殆矣。”的意思是:人生是有限的,但知识是无限的(没有边界的),用有限的人生追求无限的知识,是必然失败的。

        生活中概率算法(思想)的应用其实比较广泛,只是我们很少去注意罢了。关于概率算法还衍生出了一些有趣的理论,比如墨菲定律和幸存者偏差,此处不再详述。

        上面说到,优化算法就是不停的执行同样的策略、步骤直到结束。为什么要这样呢?因为优化算法是一种概率算法,执行一次操作就得到最优结果几乎是不可能的,重复多次取得最优的概率也会增大。

        栗子又来了,要从1-10这10个数中取出一个大于9的数,只取1次,达到要求的概率为10%,取2次,达到要求的概率为19%。

        可以看出取到第10次时,达到要求的概率几乎65%,取到100次时,达到要求的概率能接近100%。优化算法就是这样简单粗暴的来求解问题的吗?非也,这并不是一个恰当的例子,因为每次取数的操作之间是相互独立的,第2次取数的结果不受第1次取数结果的影响,假设前99次都没达到要求,那么再取一次达到要求的概率跟取一次达到要求的概率相同。

        优化算法中,后一次的计算会依赖前一次的结果,以保证后一次的结果不会差于前一次的结果。这就不得不谈到马尔可夫链了。

        由铁组成的链叫做铁链,同理可得,马尔可夫链就是马尔可夫组成的链。

        言归正传, 马尔可夫链(Markov Chain, MC) ,描述的是 状态转移的过程中,当前状态转移的概率只取决于上一步的状态,与其他步的状态无关 。简单来说就是当前的结果只受上一步的结果的影响。每当我看到马尔可夫链时,我都会陷入沉思,生活中、或者历史中有太多太多与马尔可夫链相似的东西。西欧封建等级制度中“附庸的附庸不是我的附庸”与“昨天的努力决定今天的生活,今天的努力决定明天的生活”,你的下一份工作的工资大多由你当前的工资决定,这些都与马尔可夫链有异曲同工之处。

        还是从1-10这10个数中取出一个大于9的数的这个例子。基于马尔可夫链的概率算法在取数时需要使当前取的数不小于上一次取的数。比如上次取到了3,那么下次只能在3-10这几个数中取,这样一来,达到目标的概率应该会显着提升。还是用数据说话。

        取1次达到要求的概率仍然是

        取2次内达到要求的概率为

        取3次内达到要求的概率为

        取4次内……太麻烦了算了不算了

        可以看出基于马尔可夫链来取数时,3次内能达到要求的概率与不用马尔可夫链时取6次的概率相当。说明基于马尔可夫链的概率算法求解效率明显高于随机概率算法。那为什么不将所有的算法都基于马尔可夫链呢?原因一,其实现方式不是那么简单,例子中我们规定了取数的规则是复合马尔可夫链的,而在其他问题中我们需要建立适当的复合马尔科夫链的模型才能使用。原因二,并不是所有的问题都符合马尔科夫链条件,比如原子内电子出现的位置,女朋友为什么会生(lou)气,彩票号码的规律等,建立模型必须与问题有相似之处才能较好的解决问题。

        介绍完了优化算法,再来讨论讨论优化算法的使用场景。

        前面说了优化算法是一种概率算法,无法保证一定能得到最优解,故如果要求结果必须是确定、稳定的值,则无法使用优化算法求解。

        例1,求城市a与城市b间的最短路线。如果结果用来修建高速、高铁,那么其结果必定是唯一确定的值,因为修路寸土寸金,必须选取最优解使花费最少。但如果结果是用来赶路,那么即使没有选到最优的路线,我们可能也不会有太大的损失。

        例2,求城市a与城市b间的最短路线,即使有两条路径,路径1和路径2,它们从a到b的距离相同,我们也可以得出这两条路径均为满足条件的解。现在将问题改一下,求城市a到城市b耗时最少的线路。现在我们无法马上得出确切的答案,因为最短的线路可能并不是最快的路线,还需要考虑到天气,交通路况等因素,该问题的结果是一个动态的结果,不同的时间不同的天气我们很可能得出不同的结果。

        现实生产、生活中,也有不少的场景使用的优化算法。例如我们的使用的美图软件,停车场车牌识别,人脸识别等,其底层参数可能使用了优化算法来加速参数计算,其参数的细微差别对结果的影响不太大,需要较快的得出误差范围内的参数即可;电商的推荐系统等也使用了优化算法来加速参数的训练和收敛,我们会发现每次刷新时,推给我们的商品都有几个会发生变化,而且随着我们对商品的浏览,系统推给我们的商品也会发生变化,其结果是动态变化的;打车软件的订单系统,会根据司机和客人的位置,区域等来派发司机给客人,不同的区域,不同的路况,派发的司机也是动态变化的。

        综上我们可以大致总结一下推荐、不推荐使用优化算法的场景的特点。

        前面说过,优化算法处理的问题都是客观的问题,如果遇到主观的问题,比如“我孰与城北徐公美”,我们需要将这个问题进行量化而转换成客观的问题,如身高——“修八尺有余”,“外貌——形貌昳丽”,自信度——“明日徐公来,孰视之,自以为不如;窥镜而自视,又弗如远甚”,转化成客观问题后我们可以得到各个解的分数,通过比较分数,我们就能知道如何取舍如何优化。这个转化过程叫做问题的建模过程,建立的问题模型实际上是一个函数,这个函数对优化算法来说是一个黑盒函数,即不需要知道其内部实现只需要给出输入,得到输出。

        在优化算法中这个黑盒函数叫做 适应度函数 , 优化算法的求解过程就是寻找适应度函数最优解的过程 ,使用优化算法时我们最大的挑战就是如何将抽象的问题建立成具体的模型,一旦合适的模型建立完成,我们就可以愉快的使用优化算法来求解问题啦。(“合适”二字谈何容易)

        优化算法的大致介绍到此结束,后面我们会依次介绍常见、经典的优化算法,并探究其参数对算法性能的影响。

——2019.06.20

[目录]

[下一篇 优化算法笔记(二)优化算法的分类]

阅读全文

与现代优化算法pdf相关的资料

热点内容
怎么查家里电器耗电量app 浏览:502
原神一直显示重新连接服务器怎么办 浏览:808
一般用途轴流式压缩机 浏览:922
没学历的怎么学编程 浏览:893
华为的隐藏相册无法加密 浏览:778
联通套餐app怎么设置 浏览:748
关于删除链表的算法描述 浏览:893
标准盘和压缩盘的区别 浏览:46
银行存款验证码JAVA编程 浏览:110
word转pdf软件免费版 浏览:139
公主连结安卓台服怎么下载 浏览:550
注册江苏银行app怎么注册 浏览:800
中兴怎么下载app视频 浏览:679
服务器审计是什么 浏览:518
华为删除的app怎么彻底卸载 浏览:574
编程时调试快捷键 浏览:6
安卓手机玩亚服怎么下载 浏览:341
思域压缩机多少钱 浏览:697
程序员代码合适吗 浏览:288
复利计算法律保护 浏览:741