(一)優(yōu)化算法的介紹
(以下描述少孝,均不是學(xué)術(shù)用語(yǔ),僅供大家快樂(lè)的閱讀)
1.1(what)什么是優(yōu)化算法熬苍?
? ? ? ? 我們常見(jiàn)常用的算法有排序算法,字符串遍歷算法,尋路算法等稍走。這些算法都是為了解決特定的問(wèn)題而被提出。
? ? ? ? 算法本質(zhì)是一種按照固定步驟執(zhí)行的過(guò)程柴底。
? ? ? ? 優(yōu)化算法也是這樣一種過(guò)程婿脸,是一種根據(jù)概率按照固定步驟尋求問(wèn)題的最優(yōu)解的過(guò)程。與常見(jiàn)的排序算法柄驻、尋路算法不同的是狐树,優(yōu)化算法不具備等冪性,是一種概率算法鸿脓。算法不斷的迭代執(zhí)行同一步驟直到結(jié)束抑钟,其流程如下圖。
1.1.1什么是等冪性野哭?
? ? ? ? 等冪性即對(duì)于同樣的輸入在塔,輸出是相同的。
? ? ? ? 比如圖1蛔溃,對(duì)于給定的魚(yú)和給定的熊掌,我們?cè)谙嗤臈l件下一定可以知道它們誰(shuí)更重篱蝇,當(dāng)然贺待,相同的條件是指魚(yú)和熊掌處于相同的重力作用下,且不用考慮水分流失的影響态兴。在這些給定的條件下狠持,我們(無(wú)論是誰(shuí))都將得出相同的結(jié)論疟位,魚(yú)更重或者熊掌更重瞻润。我們可以認(rèn)為,秤是一個(gè)等冪性的算法(工具)甜刻。
? ? ? ? 現(xiàn)在把問(wèn)題變一變,問(wèn)魚(yú)與熊掌你更愛(ài)哪個(gè)得院,那么現(xiàn)在傻铣,這個(gè)問(wèn)題,每個(gè)人的答案可能不會(huì)一樣祥绞,魚(yú)與熊掌各有所愛(ài)非洲。說(shuō)明喜愛(ài)這個(gè)算法不是一個(gè)等冪性算法鸭限。當(dāng)然你可能會(huì)問(wèn),哪個(gè)更重两踏,和更喜歡哪個(gè)這兩個(gè)問(wèn)題一個(gè)是客觀問(wèn)題败京,一個(gè)是主觀問(wèn)題,主觀問(wèn)題沒(méi)有確切的答案的梦染。當(dāng)我們處理主觀問(wèn)題時(shí)赡麦,也會(huì)將其轉(zhuǎn)換成客觀問(wèn)題,比如給喜歡魚(yú)和喜歡熊掌的程度打個(gè)分帕识,再去尋求答案泛粹,畢竟計(jì)算機(jī)沒(méi)有感情,只認(rèn)0和1(量子計(jì)算機(jī)我不認(rèn)識(shí)你)肮疗。
1.1.2什么是概率算法晶姊?
? ? ? ? 說(shuō)完了等冪性,再來(lái)說(shuō)什么是概率算法伪货。簡(jiǎn)單來(lái)說(shuō)就是看臉帽借、看人品、看運(yùn)氣的算法超歌。
? ? ? ? 有一場(chǎng)考試砍艾,考試的內(nèi)容全部取自課本,同時(shí)老師根據(jù)自己的經(jīng)驗(yàn)給同學(xué)們劃了重點(diǎn)巍举,但是因?yàn)樵嚲聿⒉皇窃摾蠋熕龃嗪桑矔?huì)有考試內(nèi)容不在重點(diǎn)之內(nèi),老師估計(jì)試卷中至少80%內(nèi)容都在重點(diǎn)中懊悯。學(xué)霸和學(xué)渣參加了考試蜓谋,學(xué)霸為了考滿分所以無(wú)視重點(diǎn),學(xué)渣為了pass炭分,因此只看了重點(diǎn)桃焕。這樣做的結(jié)果一定是score(學(xué)霸)>=score(學(xué)渣)。
? ? ? ? 當(dāng)重點(diǎn)跟上圖一樣的時(shí)候捧毛,所有的內(nèi)容都是重點(diǎn)的時(shí)候观堂,學(xué)霸和學(xué)渣的學(xué)習(xí)策略變成了相同的策略,則score(學(xué)霸)=score(學(xué)渣)呀忧。但同時(shí)师痕,學(xué)渣也要付出跟學(xué)霸相同的努力去學(xué)習(xí)這些內(nèi)容,學(xué)渣心里苦啊而账。
? ? ? ? 當(dāng)課本如下圖時(shí)
? ? ? ? 學(xué)霸胰坟?學(xué)霸人呢,哪去了快來(lái)學(xué)習(xí)啊泞辐,不是說(shuō)學(xué)習(xí)一時(shí)爽笔横,一直學(xué)習(xí)一直爽嗎竞滓,快來(lái)啊,還等什么吹缔。
? ? ? ? 這時(shí)虽界,如果重點(diǎn)內(nèi)容遠(yuǎn)少于書(shū)本內(nèi)容時(shí),學(xué)渣的學(xué)習(xí)策略有了優(yōu)勢(shì)——花費(fèi)的時(shí)間和精力較少涛菠。但是同時(shí)莉御,學(xué)渣的分?jǐn)?shù)也是一個(gè)未知數(shù),可能得到80分也可能拿到100分俗冻,分?jǐn)?shù)完全取決于重點(diǎn)內(nèi)容與題目的契合度礁叔,契合度越高,分?jǐn)?shù)越高迄薄。對(duì)學(xué)渣來(lái)說(shuō)琅关,自己具體能考多少分無(wú)法由自己決定,但是好在能夠知道大概的分?jǐn)?shù)范圍讥蔽。
? ? ? ? 學(xué)霸的學(xué)習(xí)策略是一種遍歷性算法涣易,他會(huì)遍歷、通讀全部?jī)?nèi)容冶伞,以保證滿分新症。
? ? ? ? 學(xué)渣的學(xué)習(xí)策略則是一種概率算法,他只會(huì)遍歷响禽、學(xué)習(xí)重點(diǎn)內(nèi)容徒爹,但至于這些重點(diǎn)是不是真重點(diǎn)他也不知道。
? ? ? ? 與遍歷算法相比芋类,概率算法的結(jié)果具有不確定性隆嗅,可能很好,也可能很差侯繁,但是會(huì)消耗更少的資源胖喳,比如時(shí)間(人生),空間(記憶)贮竟。概率算法的最大優(yōu)點(diǎn)就是花費(fèi)較少的代價(jià)來(lái)獲取最高的收益丽焊,在現(xiàn)實(shí)中體現(xiàn)于節(jié)省時(shí)間,使用很少的時(shí)間得到一個(gè)不與最優(yōu)解相差較多的結(jié)果坝锰。
? ? ? ? “莊子:吾生也有涯粹懒,而知也無(wú)涯重付;以有涯隨無(wú)涯顷级,殆矣∪返妫”的意思是:人生是有限的弓颈,但知識(shí)是無(wú)限的(沒(méi)有邊界的)帽芽,用有限的人生追求無(wú)限的知識(shí),是必然失敗的翔冀。
? ? ? ? 生活中概率算法(思想)的應(yīng)用其實(shí)比較廣泛导街,只是我們很少去注意罷了。關(guān)于概率算法還衍生出了一些有趣的理論纤子,比如墨菲定律和幸存者偏差搬瑰,此處不再詳述。
1.1.3迭代過(guò)程
? ? ? ? 上面說(shuō)到控硼,優(yōu)化算法就是不停的執(zhí)行同樣的策略泽论、步驟直到結(jié)束。為什么要這樣呢卡乾?因?yàn)閮?yōu)化算法是一種概率算法翼悴,執(zhí)行一次操作就得到最優(yōu)結(jié)果幾乎是不可能的,重復(fù)多次取得最優(yōu)的概率也會(huì)增大幔妨。
? ? ? ? 栗子又來(lái)了鹦赎,要從1-10這10個(gè)數(shù)中取出一個(gè)大于9的數(shù),只取1次误堡,達(dá)到要求的概率為10%古话,取2次,達(dá)到要求的概率為19%锁施。
? ? ? ? 可以看出取到第10次時(shí)煞额,達(dá)到要求的概率幾乎65%,取到100次時(shí)沾谜,達(dá)到要求的概率能接近100%膊毁。優(yōu)化算法就是這樣簡(jiǎn)單粗暴的來(lái)求解問(wèn)題的嗎?非也基跑,這并不是一個(gè)恰當(dāng)?shù)睦踊槲拢驗(yàn)槊看稳?shù)的操作之間是相互獨(dú)立的,第2次取數(shù)的結(jié)果不受第1次取數(shù)結(jié)果的影響媳否,假設(shè)前99次都沒(méi)達(dá)到要求栅螟,那么再取一次達(dá)到要求的概率跟取一次達(dá)到要求的概率相同。
? ? ? ? 優(yōu)化算法中篱竭,后一次的計(jì)算會(huì)依賴前一次的結(jié)果力图,以保證后一次的結(jié)果不會(huì)差于前一次的結(jié)果。這就不得不談到馬爾可夫鏈了掺逼。
1.1.4什么是馬爾可夫鏈吃媒?
? ? ? ? 由鐵組成的鏈叫做鐵鏈,同理可得,馬爾可夫鏈就是馬爾可夫組成的鏈赘那。
? ? ? ? 言歸正傳, 馬爾可夫鏈(Markov Chain, MC),描述的是狀態(tài)轉(zhuǎn)移的過(guò)程中,當(dāng)前狀態(tài)轉(zhuǎn)移的概率只取決于上一步的狀態(tài),與其他步的狀態(tài)無(wú)關(guān)刑桑。簡(jiǎn)單來(lái)說(shuō)就是當(dāng)前的結(jié)果只受上一步的結(jié)果的影響。每當(dāng)我看到馬爾可夫鏈時(shí)募舟,我都會(huì)陷入沉思祠斧,生活中、或者歷史中有太多太多與馬爾可夫鏈相似的東西拱礁。西歐封建等級(jí)制度中“附庸的附庸不是我的附庸”與“昨天的努力決定今天的生活琢锋,今天的努力決定明天的生活”,你的下一份工作的工資大多由你當(dāng)前的工資決定呢灶,這些都與馬爾可夫鏈有異曲同工之處吩蔑。
? ? ? ? 還是從1-10這10個(gè)數(shù)中取出一個(gè)大于9的數(shù)的這個(gè)例子√钐В基于馬爾可夫鏈的概率算法在取數(shù)時(shí)需要使當(dāng)前取的數(shù)不小于上一次取的數(shù)烛芬。比如上次取到了3,那么下次只能在3-10這幾個(gè)數(shù)中取飒责,這樣一來(lái)赘娄,達(dá)到目標(biāo)的概率應(yīng)該會(huì)顯著提升。還是用數(shù)據(jù)說(shuō)話宏蛉。
? ? ? ? 取1次達(dá)到要求的概率仍然是
? ? ? ? 取2次內(nèi)達(dá)到要求的概率為
? ? ? ? 取3次內(nèi)達(dá)到要求的概率為
? ? ? ? 取4次內(nèi)……太麻煩了算了不算了
? ? ? ? 可以看出基于馬爾可夫鏈來(lái)取數(shù)時(shí)遣臼,3次內(nèi)能達(dá)到要求的概率與不用馬爾可夫鏈時(shí)取6次的概率相當(dāng)。說(shuō)明基于馬爾可夫鏈的概率算法求解效率明顯高于隨機(jī)概率算法拾并。那為什么不將所有的算法都基于馬爾可夫鏈呢揍堰?原因一,其實(shí)現(xiàn)方式不是那么簡(jiǎn)單嗅义,例子中我們規(guī)定了取數(shù)的規(guī)則是復(fù)合馬爾可夫鏈的屏歹,而在其他問(wèn)題中我們需要建立適當(dāng)?shù)膹?fù)合馬爾科夫鏈的模型才能使用。原因二之碗,并不是所有的問(wèn)題都符合馬爾科夫鏈條件蝙眶,比如原子內(nèi)電子出現(xiàn)的位置,女朋友為什么會(huì)生(lou)氣褪那,彩票號(hào)碼的規(guī)律等幽纷,建立模型必須與問(wèn)題有相似之處才能較好的解決問(wèn)題。
1.2(where)什么領(lǐng)域博敬、業(yè)務(wù)需要或者能/不能使用優(yōu)化算法友浸?
? ? ? ? 介紹完了優(yōu)化算法,再來(lái)討論討論優(yōu)化算法的使用場(chǎng)景偏窝。
? ? ? ? 前面說(shuō)了優(yōu)化算法是一種概率算法收恢,無(wú)法保證一定能得到最優(yōu)解武学,故如果要求結(jié)果必須是確定、穩(wěn)定的值派诬,則無(wú)法使用優(yōu)化算法求解劳淆。
? ? ? ? 例1链沼,求城市a與城市b間的最短路線默赂。如果結(jié)果用來(lái)修建高速、高鐵括勺,那么其結(jié)果必定是唯一確定的值缆八,因?yàn)樾蘼反缤链缃穑仨氝x取最優(yōu)解使花費(fèi)最少疾捍。但如果結(jié)果是用來(lái)趕路奈辰,那么即使沒(méi)有選到最優(yōu)的路線,我們可能也不會(huì)有太大的損失乱豆。
? ? ? ? 例2奖恰,求城市a與城市b間的最短路線,即使有兩條路徑宛裕,路徑1和路徑2瑟啃,它們從a到b的距離相同,我們也可以得出這兩條路徑均為滿足條件的解】現(xiàn)在將問(wèn)題改一下蛹屿,求城市a到城市b耗時(shí)最少的線路。現(xiàn)在我們無(wú)法馬上得出確切的答案岩榆,因?yàn)樽疃痰木€路可能并不是最快的路線错负,還需要考慮到天氣,交通路況等因素勇边,該問(wèn)題的結(jié)果是一個(gè)動(dòng)態(tài)的結(jié)果犹撒,不同的時(shí)間不同的天氣我們很可能得出不同的結(jié)果。
? ? ? ? 現(xiàn)實(shí)生產(chǎn)粒褒、生活中油航,也有不少的場(chǎng)景使用的優(yōu)化算法。例如我們的使用的美圖軟件怀浆,停車場(chǎng)車牌識(shí)別谊囚,人臉識(shí)別等,其底層參數(shù)可能使用了優(yōu)化算法來(lái)加速參數(shù)計(jì)算执赡,其參數(shù)的細(xì)微差別對(duì)結(jié)果的影響不太大镰踏,需要較快的得出誤差范圍內(nèi)的參數(shù)即可;電商的推薦系統(tǒng)等也使用了優(yōu)化算法來(lái)加速參數(shù)的訓(xùn)練和收斂沙合,我們會(huì)發(fā)現(xiàn)每次刷新時(shí)奠伪,推給我們的商品都有幾個(gè)會(huì)發(fā)生變化,而且隨著我們對(duì)商品的瀏覽,系統(tǒng)推給我們的商品也會(huì)發(fā)生變化绊率,其結(jié)果是動(dòng)態(tài)變化的谨敛;打車軟件的訂單系統(tǒng),會(huì)根據(jù)司機(jī)和客人的位置滤否,區(qū)域等來(lái)派發(fā)司機(jī)給客人脸狸,不同的區(qū)域,不同的路況藐俺,派發(fā)的司機(jī)也是動(dòng)態(tài)變化的炊甲。
? ? ? ? 綜上我們可以大致總結(jié)一下推薦、不推薦使用優(yōu)化算法的場(chǎng)景的特點(diǎn)欲芹。
1.3(how)如何使用優(yōu)化算法卿啡?
? ? ? ? 前面說(shuō)過(guò),優(yōu)化算法處理的問(wèn)題都是客觀的問(wèn)題菱父,如果遇到主觀的問(wèn)題颈娜,比如“我孰與城北徐公美”,我們需要將這個(gè)問(wèn)題進(jìn)行量化而轉(zhuǎn)換成客觀的問(wèn)題浙宜,如身高——“修八尺有余”官辽,“外貌——形貌昳麗”,自信度——“明日徐公來(lái)梆奈,孰視之野崇,自以為不如;窺鏡而自視亩钟,又弗如遠(yuǎn)甚”乓梨,轉(zhuǎn)化成客觀問(wèn)題后我們可以得到各個(gè)解的分?jǐn)?shù),通過(guò)比較分?jǐn)?shù)清酥,我們就能知道如何取舍如何優(yōu)化扶镀。這個(gè)轉(zhuǎn)化過(guò)程叫做問(wèn)題的建模過(guò)程,建立的問(wèn)題模型實(shí)際上是一個(gè)函數(shù)焰轻,這個(gè)函數(shù)對(duì)優(yōu)化算法來(lái)說(shuō)是一個(gè)黑盒函數(shù)臭觉,即不需要知道其內(nèi)部實(shí)現(xiàn)只需要給出輸入,得到輸出辱志。
? ? ? ? 在優(yōu)化算法中這個(gè)黑盒函數(shù)叫做適應(yīng)度函數(shù)蝠筑,優(yōu)化算法的求解過(guò)程就是尋找適應(yīng)度函數(shù)最優(yōu)解的過(guò)程,使用優(yōu)化算法時(shí)我們最大的挑戰(zhàn)就是如何將抽象的問(wèn)題建立成具體的模型揩懒,一旦合適的模型建立完成什乙,我們就可以愉快的使用優(yōu)化算法來(lái)求解問(wèn)題啦。(“合適”二字談何容易)
? ? ? ? 優(yōu)化算法的大致介紹到此結(jié)束已球,后面我們會(huì)依次介紹常見(jiàn)臣镣、經(jīng)典的優(yōu)化算法辅愿,并探究其參數(shù)對(duì)算法性能的影響。
——2019.06.20