‘壹’ 进化算法入门读书笔记(一)
这里我参考学习的书籍是:
《进化计算的理论和方法》,王宇平,科学出版社
《进化优化算法:基于仿生和种群的计算机智能方法》,[美]丹·西蒙,清华大学出版社。
进化算法是 求解优化问题 的一种算法,它是 模仿生物进化与遗传原理 而设计的一类随机搜索的优化算法。
不同的作者称进化算法有不同的术语,以下。注:这里仅列举出了我自己比较容易混淆的一些,并未全部列出。
进化计算: 这样能强调算法需要在 计算机上 实施,但进化计算也可能指不用于优化的算法(最初的遗传算法并不是用于优化本身,而是想用来研究自然选择的过程)。因此,进化优化算法比进化计算更具体。
基于种群的优化: 它强调进化算法一般是让问题的候选解 种群 随着时间的进化以得到问题的更好的解。然而许多进化算法每次迭代只有单个候选解。因此,进化算法比基于种群的优化更一般化。
计算机智能/计算智能: 这样做常常是为了区分进化算法与专家系统,在传统上专家系统一直被称为人工智能。专家系统模仿演绎推理,进化算法则模仿归纳推理。进化算法有时候也被看成是人工智能的一种。计算机智能是比进化算法更一般的词,它包括神经计算、模糊系统、人工生命这样的一些技术,这些技术可应用于优化之外的问题。因此,进化计算可能比计算机智能更一般化或更具体。
由自然启发的计算/仿生计算: 像差分进化和分布估计算法这些进化算法可能并非源于自然,像进化策略和反向学习这些进化算法与自然过程联系甚微。因此,进化算法比由自然启发的算法更一般化,因为进化算法包括非仿生算法。
机器学习: 机器学习研究由经验学到的计算机算法,它还包括很多不是进化计算的算法,如强化学习、神经网络、分簇、SVM等等。因此,机器学习比进化算法更广。
群智能算法: 一些人认为群智能算法应与进化算法区分开,一些人认为群智能算法是进化算法的一个子集。因为群智能算法与进化算法有相同的执行方式,即,每次迭代都改进问题的候选解的性能从而让解的种群进化。因此,我们认为群智能算法是一种进化算法。
进化算法的简单定义可能并不完美。在进化算法领域术语的不统一会让人困惑,一个算法是进化算法如果它通常被认为是进化算法,这个戏谑的、循环的定义一开始有些麻烦,但是一段时间后,这个领域工作的人就会习惯了。
优化几乎适用于生活中的所有领域。除了对如计算器做加法运算这种过于简单的问题,不必用进化算法的软件,因为有更简单有效的算法。此外对于每个复杂的问题,至少应该考虑采用进化算法。
一个优化问题可以写成最小化问题或最大化问题,这两个问题在形式上很容易互相转化:
函数 被称为目标函数,向量 被称为独立变量,或决策变量。我们称 中元素的个数为问题的维数。
优化问题常常带有约束。即在最小化某个函数 时,对 可取的值加上约束。不举例。
实际的优化问题不仅带有约束,还有多个目标。这意味着我们想要同时最小化不止一个量。
例子:
这里评估这个问题的一种方式是绘制 作为函数 的函数的图:
如图,对在实线上的 的值,找不到能同时使 和 减小的 的其他值,此实线被称为 帕累托前沿 ,而相应的 的值的集合被称为帕累托集。(此处的帕累托最优问题十分重要,可以参考这个链接来学习和理解: 多目标优化之帕累托最优 - 知乎 ,非常清晰易懂。)
该例子是一个非常简单的多目标优化问题,它只有两个目标。实际的优化问题通常涉及两个以上的模目标,因此很难得到它的帕累托前沿,由于它是高维的,我们也无法将它可视化。后面的章节将会仔细讨论多目标进化优化。
多峰优化问题是指问题不止一个局部最小值。上例中的 就有两个局部最小值,处理起来很容易,有些问题有很多局部最小值,找出其中的全局最小值就颇具挑战性。
对于前面的简单例子,我们能用图形的方法或微积分的方法求解,但是许多实际问题除了有更多独立变量、多目标,以及带约束之外更像上面的Ackley函数这样,对于这类问题,基于微积分或图形的方法就不够用了,而进化算法却能给出更好的结果。
到现在为止我们考虑的都是连续优化问题,也就是说,允许独立变量连续地变化。但有许多优化问题中的独立变量智能在一个离散集合上取值。这类问题被称为组合优化问题。如旅行商问题。
对于有 个城市的旅行商问题,有 个可能的解。对于一些过大的问题,硬算的方法不可行,像旅行商这样的组合问题没有连续的独立变量,因此不能利用导数求解。除非对每个可能的解都试一遍,不然就无法确定所得到的组合问题的解是否就是最好的解。进化算法对这类大规模、多维的问题,它至少能帮我们找出一个好的解(不一定是最好的)。
‘贰’ 镐庝箞瀛︿範浜哄伐鏅鸿兘锛
绗涓姝ワ细澶崭範绾挎т唬鏁般傦纸瀛︽福镄勭嚎浠e缮浜嗗ソ澶-_-||锛
镍掑缑鐪嬩功灏辩洿鎺ョ敤浜呜宪钖岖殑钬斺旈夯鐪佺悊宸ュ叕寮璇撅细绾挎т唬鏁帮纴娣卞叆娴呭嚭鏁堟灉𨰾旂兢锛屼互钖庝细鐢ㄥ埌镄凷VD銆佸笇灏斾集鐗圭┖闂寸瓑閮芥湁浠嬬粛锛
骞垮憡锛氲竟鐪嬭竟镐荤粨浜嗕竴濂楃玛璁 GitHub - zlotus/notes-linear-algebra: 绾挎т唬鏁扮玛璁般
绗浜屾ワ细鍏ラ棬链哄櫒瀛︿範绠楁硶銆
杩樻槸锲犱负姣旇缉镍掞纴涔熷氨鐩存帴鐢ㄤ简镢楀悕镄勨斺旀柉鍧︾忓ぇ瀛﹀叕寮璇 锛氭満鍣ㄥ︿範璇剧▼锛屽惔鎭╄揪鏁欐巿镄勮佺増cs229镄勮嗛戯纴璁茬殑闱炲父缁嗭纸绠楁硶镄勭洰镙->鏁板︽帹婕->浼浠g爜锛夈傝繖濂楁暀绋嫔敮涓镄勭己镣瑰湪浜庢病链変粙缁嶆渶杩戝ぇ𨱔镄勭炵粡缃戠粶锛屼絾鍏跺疄杩欎篃绠楁槸浼樼偣锛岃╂垜鏄庣槠浜嗙畻娉曢兘链夊悇镊镄勫簲鐢ㄩ嗗烟锛屽苟涓嶆槸镓链夐梾棰橀兘闇瑕佺敤绁炵粡缃戠粶𨱒ヨВ鍐筹绂
澶氲翠竴镣癸纴杩欎釜璇剧▼閲岃︾粏浠嬬粛镄勫唴瀹规湁锛氢竴鑸绾挎фā鍨嬨侀珮鏂绯诲垪妯″瀷銆丼VM鐞呜哄强瀹炵幇銆佽仛绫荤畻娉曚互鍙奅M绠楁硶镄勫悇绉岖浉鍏冲簲鐢ㄣ丳CA/ICA銆佸︿範鐞呜恒侀┈灏斿彲澶绯诲垪妯″瀷銆傝惧爞绗旇板湪锛欳S 229: Machine Learning (Course handouts)锛屽悓镙烽潪甯歌︾粏銆
骞垮憡锛氲竟鐪嬭竟镐荤粨浜嗕竴濂楃玛璁 GitHub - zlotus/notes-LSJU-machine-learning: 链哄櫒瀛︿範绗旇
绗涓夋ワ细灏濊瘯鐢ㄤ唬镰佸疄鐜扮畻娉曘
渚濈劧锲犱负姣旇缉镍掞纴缁х画鐩存帴浣跨敤浜呜宪钖岖殑钬斺旀満鍣ㄥ︿範 | Coursera 锛岃缮鏄钖存仼杈炬暀鎺堢殑璇剧▼锛屽彧涓嶈繃杩欎釜鏄鏋佺亩鐗堢殑cs229锛屽嚑涔庡氨鏄鏁欐庝箞鍦╩atlab閲屽揩阃熷疄鐜颁竴涓妯″瀷锛堣繖濂楁暀绋嬮噷链夌炵粡缃戠粶锘烘湰姒傚康鍙婂疄鐜帮级銆傝繖濂楄剧▼镄勭己镣规槸闅惧害姣旇缉浣庯纴鎺ㄥ艰繃绋嬮潪甯哥亩鐣ワ纴浣嗘槸杩欎篃鏄瀹幂殑浼樼偣钬斺旇╂垜涓撴敞浜庢妸鐞呜鸿浆鍖栨垚浠g爜銆
骞垮憡锛氢綔涓氩弬钥 GitHub - zlotus/Coursera_Machine_Learning_Exercises: Machine Learning by Andrew Ng from Coursera
绗锲涙ワ细镊宸卞疄鐜板姛鑳藉畬鏁寸殑妯″瀷钬斺旇繘琛屼腑銆
杩樻槸锲犱负姣旇缉镍掞纴鎼滃埌浜哻s231n镄勮剧▼瑙嗛 CS231n Winter 2016 - YouTube 锛屾潕椋为炴暀鎺堢殑璇撅纴涓昏茶缮链堿ndrej Karpathy鍜孞ustin Johnson锛屼富瑕佷粙缁嶅嵎绉绁炵粡缃戠粶鍦ㄥ浘镀忚瘑鍒/链哄櫒瑙呜夐嗗烟镄勫簲鐢锛埚墠闱㈢炵粡缃戠粶镄勪唬镰佹病鍐椤燂纻杩欓棬璇惧寘浣犲棬鍒扮垎~鍒板勯兘鏄浠庨浂镓嫔啓~锛夈傝繖闂ㄨ剧▼镄勪綔涓氩氨镟磋创蹇冧简锛岀洿鎺ョ敤Jupyter Notebook甯幂疆镄勶纴鍙浠ユ湰鍦拌繍琛屽苟镊宸辨镆ラ敊璇銆备富瑕佷娇鐢≒ython浠ュ强Python绯诲垪镄勭戝﹁$畻搴掳纸Scipy/Numpy/Matplotlib锛夈傝惧爞绗旇扮殑缈昏疟鍙浠ュ弬钥 鏅鸿兘鍗曞厓 - 鐭ヤ箮涓撴爮锛屼富瑕佺敱鐭ュ弸𨱒滃㈢炕璇戯纴鍐欑殑闱炲父濂絶
鍦ㄥ氲翠竴镣癸纴杩欓棬璇惧圭▼搴忓憳𨱒ヨ存瘆杈冭蛋蹇冿纴锲犱负杩欎釜涓嶅儚涓娄竴姝ヤ腑鐢╩atlab瀹炵幇镄勪綔涓氶偅镙峰亸钖戠畻娉曞拰妯″瀷锛岃繖闂ㄨ剧敤Python瀹炵幇镄勬ā鍨嫔悓镞舵敞閲嶈蒋浠跺伐绋嬶纴鍖呮嫭甯歌佺殑灏佽卨ayer镄刦orward/backward銆佽嚜瀹氢箟缁勫悎layer銆佸备綍灏唋ayer缁勬垚缃戠粶銆佸备綍鍦ㄧ绣缁滀腑闆嗘垚batch-normalization鍙奷ropout绛夊姛鑳姐佸备綍鍦ㄥ嶆潅妯″瀷涓嫔仛姊搴︽镆ョ瓑绛夛绂链钖庝竴涓浣滀笟涓杩樻湁镓嫔姩瀹炵幇RNN鍙婂叾锘哄弸LSTM銆佺紪鍐欐湁锷╀簬璋冭瘯镄凛NN鍙瑙嗗寲锷熻兘銆丢oogle镄凞eepDream绛夌瓑銆傦纸锅氩畬浣滀笟锘烘湰灏卞彲浠ョ湅镍傜幇鍦ㄦ祦琛岀殑钖勭嶅浘鐗囬庢牸鍙樻崲绋嫔簭浜嗭纴濡 cysmith/neural-style-tf锛夊彟澶栵纴杩欓棬璇剧殑浣滀笟瀹炵幇闱炲父鎺ㄥ磭computational graph锛屼笉鐭ラ亾鏄涓嶆槸鎴戠殑骞昏??瑕佹敞镒忕殑鏄璁插笀A.K镄勮阃熷囧揩镞犳瘆锛屽ソ鍦╕ouTube链夎嚜锷ㄧ敓鎴愯В璇磋瘝镄勫姛鑳斤纴鍑嗙‘鐜囱缮涓嶉敊锛屽彲浠ュ綋瀛楀箷鐪嬨
骞垮憡锛氢綔涓氩弬钥 GitHub - zlotus/cs231n: CS231n Convolutional Neural Networks for Visual Recognition (winter 2016) 锛堟垜镄勫湪浣滀笟镄刵otebook涓婂姞浜嗕竴浜涙帹瀵兼紨绠楀摝~鍙浠ョ敤𨱒ュ弬钥:D锛