優(yōu)化算法筆記(一)優(yōu)化算法的介紹

(一)優(yōu)化算法的介紹

(以下描述,均不是學(xué)術(shù)用語,僅供大家快樂的閱讀)

1.1(what)什么是優(yōu)化算法?

? ? ? ? 我們常見常用的算法有排序算法,字符串遍歷算法,尋路算法等。這些算法都是為了解決特定的問題而被提出。

? ? ? ? 算法本質(zhì)是一種按照固定步驟執(zhí)行的過程。

? ? ? ? 優(yōu)化算法也是這樣一種過程,是一種根據(jù)概率按照固定步驟尋求問題的最優(yōu)解的過程。與常見的排序算法、尋路算法不同的是,優(yōu)化算法不具備等冪性,是一種概率算法。算法不斷的迭代執(zhí)行同一步驟直到結(jié)束,其流程如下圖。

優(yōu)化算法流程圖


1.1.1什么是等冪性?

? ? ? ? 等冪性即對于同樣的輸入,輸出是相同的


圖1魚與熊掌誰更重?

? ? ? ? 比如圖1,對于給定的魚和給定的熊掌,我們在相同的條件下一定可以知道它們誰更重,當(dāng)然,相同的條件是指魚和熊掌處于相同的重力作用下,且不用考慮水分流失的影響。在這些給定的條件下,我們(無論是誰)都將得出相同的結(jié)論,魚更重或者熊掌更重。我們可以認(rèn)為,秤是一個(gè)等冪性的算法(工具)。


圖2魚與熊掌更愛誰。

? ? ? ? 現(xiàn)在把問題變一變,問魚與熊掌你更愛哪個(gè),那么現(xiàn)在,這個(gè)問題,每個(gè)人的答案可能不會(huì)一樣,魚與熊掌各有所愛。說明喜愛這個(gè)算法不是一個(gè)等冪性算法。當(dāng)然你可能會(huì)問,哪個(gè)更重,和更喜歡哪個(gè)這兩個(gè)問題一個(gè)是客觀問題,一個(gè)是主觀問題,主觀問題沒有確切的答案的。當(dāng)我們處理主觀問題時(shí),也會(huì)將其轉(zhuǎn)換成客觀問題,比如給喜歡魚和喜歡熊掌的程度打個(gè)分,再去尋求答案,畢竟計(jì)算機(jī)沒有感情,只認(rèn)0和1(量子計(jì)算機(jī)我不認(rèn)識(shí)你)。

1.1.2什么是概率算法?

? ? ? ? 說完了等冪性,再來說什么是概率算法。簡單來說就是看臉、看人品、看運(yùn)氣的算法。


圖3燒根香


? ? ? ? 有一場考試,考試的內(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é)霸為了考滿分所以無視重點(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é)霸人呢,哪去了快來學(xué)習(xí)啊,不是說學(xué)習(xí)一時(shí)爽,一直學(xué)習(xí)一直爽嗎,快來啊,還等什么。

? ? ? ? 這時(shí),如果重點(diǎn)內(nèi)容遠(yuǎn)少于書本內(nèi)容時(shí),學(xué)渣的學(xué)習(xí)策略有了優(yōu)勢——花費(fèi)的時(shí)間和精力較少。但是同時(shí),學(xué)渣的分?jǐn)?shù)也是一個(gè)未知數(shù),可能得到80分也可能拿到100分,分?jǐn)?shù)完全取決于重點(diǎn)內(nèi)容與題目的契合度,契合度越高,分?jǐn)?shù)越高。對學(xué)渣來說,自己具體能考多少分無法由自己決定,但是好在能夠知道大概的分?jǐn)?shù)范圍。

? ? ? ? 學(xué)霸的學(xué)習(xí)策略是一種遍歷性算法,他會(huì)遍歷、通讀全部內(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à)來獲取最高的收益,在現(xiàn)實(shí)中體現(xiàn)于節(jié)省時(shí)間,使用很少的時(shí)間得到一個(gè)不與最優(yōu)解相差較多的結(jié)果。

? ? ? ? “莊子:吾生也有涯,而知也無涯;以有涯隨無涯,殆矣。”的意思是:人生是有限的,但知識(shí)是無限的(沒有邊界的),用有限的人生追求無限的知識(shí),是必然失敗的。

? ? ? ? 生活中概率算法(思想)的應(yīng)用其實(shí)比較廣泛,只是我們很少去注意罷了。關(guān)于概率算法還衍生出了一些有趣的理論,比如墨菲定律和幸存者偏差,此處不再詳述。



1.1.3迭代過程

? ? ? ? 上面說到,優(yōu)化算法就是不停的執(zhí)行同樣的策略、步驟直到結(jié)束。為什么要這樣呢?因?yàn)閮?yōu)化算法是一種概率算法,執(zhí)行一次操作就得到最優(yōu)結(jié)果幾乎是不可能的,重復(fù)多次取得最優(yōu)的概率也會(huì)增大。

? ? ? ? 栗子又來了,要從1-10這10個(gè)數(shù)中取出一個(gè)大于9的數(shù),只取1次,達(dá)到要求的概率為10%,取2次,達(dá)到要求的概率為19%。

? ? ? ? 可以看出取到第10次時(shí),達(dá)到要求的概率幾乎65%,取到100次時(shí),達(dá)到要求的概率能接近100%。優(yōu)化算法就是這樣簡單粗暴的來求解問題的嗎?非也,這并不是一個(gè)恰當(dāng)?shù)睦樱驗(yàn)槊看稳?shù)的操作之間是相互獨(dú)立的,第2次取數(shù)的結(jié)果不受第1次取數(shù)結(jié)果的影響,假設(shè)前99次都沒達(dá)到要求,那么再取一次達(dá)到要求的概率跟取一次達(dá)到要求的概率相同。

? ? ? ? 優(yōu)化算法中,后一次的計(jì)算會(huì)依賴前一次的結(jié)果,以保證后一次的結(jié)果不會(huì)差于前一次的結(jié)果。這就不得不談到馬爾可夫鏈了。

1.1.4什么是馬爾可夫鏈?


? ? ? ? 由鐵組成的鏈叫做鐵鏈,同理可得,馬爾可夫鏈就是馬爾可夫組成的鏈。

馬爾可夫組成的鏈

? ? ? ? 言歸正傳, 馬爾可夫鏈(Markov Chain, MC),描述的是狀態(tài)轉(zhuǎn)移的過程中,當(dāng)前狀態(tài)轉(zhuǎn)移的概率只取決于上一步的狀態(tài),與其他步的狀態(tài)無關(guān)。簡單來說就是當(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ù)中取,這樣一來,達(dá)到目標(biāo)的概率應(yīng)該會(huì)顯著提升。還是用數(shù)據(jù)說話。


? ? ? ? 取1次達(dá)到要求的概率仍然是P(t=1)=10\%

? ? ? ? 取2次內(nèi)達(dá)到要求的概率為P(t=2)=P(t=1)+\frac{1}{10}\sum_{i=2}^{10} \frac{1}{i} =29.29\%

? ? ? ? 取3次內(nèi)達(dá)到要求的概率為P(t=3)=P(t=2)+\frac{1}{10}\sum_{i=2}^{10} \frac{1}{i}\sum_{j=2}^i\frac{1}{j}   =50.64\%

? ? ? ? 取4次內(nèi)……太麻煩了算了不算了

? ? ? ? 可以看出基于馬爾可夫鏈來取數(shù)時(shí),3次內(nèi)能達(dá)到要求的概率與不用馬爾可夫鏈時(shí)取6次的概率相當(dāng)。說明基于馬爾可夫鏈的概率算法求解效率明顯高于隨機(jī)概率算法。那為什么不將所有的算法都基于馬爾可夫鏈呢?原因一,其實(shí)現(xiàn)方式不是那么簡單,例子中我們規(guī)定了取數(shù)的規(guī)則是復(fù)合馬爾可夫鏈的,而在其他問題中我們需要建立適當(dāng)?shù)膹?fù)合馬爾科夫鏈的模型才能使用。原因二,并不是所有的問題都符合馬爾科夫鏈條件,比如原子內(nèi)電子出現(xiàn)的位置,女朋友為什么會(huì)生(lou)氣,彩票號(hào)碼的規(guī)律等,建立模型必須與問題有相似之處才能較好的解決問題。

1.2(where)什么領(lǐng)域、業(yè)務(wù)需要或者能/不能使用優(yōu)化算法?

? ? ? ? 介紹完了優(yōu)化算法,再來討論討論優(yōu)化算法的使用場景。

? ? ? ? 前面說了優(yōu)化算法是一種概率算法,無法保證一定能得到最優(yōu)解,故如果要求結(jié)果必須是確定、穩(wěn)定的值,則無法使用優(yōu)化算法求解。

? ? ? ? 例1,求城市a與城市b間的最短路線。如果結(jié)果用來修建高速、高鐵,那么其結(jié)果必定是唯一確定的值,因?yàn)樾蘼反缤链缃穑仨氝x取最優(yōu)解使花費(fèi)最少。但如果結(jié)果是用來趕路,那么即使沒有選到最優(yōu)的路線,我們可能也不會(huì)有太大的損失。

? ? ? ? 例2,求城市a與城市b間的最短路線,即使有兩條路徑,路徑1和路徑2,它們從a到b的距離相同,我們也可以得出這兩條路徑均為滿足條件的解。現(xiàn)在將問題改一下,求城市a到城市b耗時(shí)最少的線路。現(xiàn)在我們無法馬上得出確切的答案,因?yàn)樽疃痰木€路可能并不是最快的路線,還需要考慮到天氣,交通路況等因素,該問題的結(jié)果是一個(gè)動(dòng)態(tài)的結(jié)果,不同的時(shí)間不同的天氣我們很可能得出不同的結(jié)果。

? ? ? ? 現(xiàn)實(shí)生產(chǎn)、生活中,也有不少的場景使用的優(yōu)化算法。例如我們的使用的美圖軟件,停車場車牌識(shí)別,人臉識(shí)別等,其底層參數(shù)可能使用了優(yōu)化算法來加速參數(shù)計(jì)算,其參數(shù)的細(xì)微差別對結(jié)果的影響不太大,需要較快的得出誤差范圍內(nèi)的參數(shù)即可;電商的推薦系統(tǒng)等也使用了優(yōu)化算法來加速參數(shù)的訓(xùn)練和收斂,我們會(huì)發(fā)現(xiàn)每次刷新時(shí),推給我們的商品都有幾個(gè)會(huì)發(fā)生變化,而且隨著我們對商品的瀏覽,系統(tǒng)推給我們的商品也會(huì)發(fā)生變化,其結(jié)果是動(dòng)態(tài)變化的;打車軟件的訂單系統(tǒng),會(huì)根據(jù)司機(jī)和客人的位置,區(qū)域等來派發(fā)司機(jī)給客人,不同的區(qū)域,不同的路況,派發(fā)的司機(jī)也是動(dòng)態(tài)變化的。

? ? ? ? 綜上我們可以大致總結(jié)一下推薦、不推薦使用優(yōu)化算法的場景的特點(diǎn)。



1.3(how)如何使用優(yōu)化算法?

? ? ? ? 前面說過,優(yōu)化算法處理的問題都是客觀的問題,如果遇到主觀的問題,比如“我孰與城北徐公美”,我們需要將這個(gè)問題進(jìn)行量化而轉(zhuǎn)換成客觀的問題,如身高——“修八尺有余”,“外貌——形貌昳麗”,自信度——“明日徐公來,孰視之,自以為不如;窺鏡而自視,又弗如遠(yuǎn)甚”,轉(zhuǎn)化成客觀問題后我們可以得到各個(gè)解的分?jǐn)?shù),通過比較分?jǐn)?shù),我們就能知道如何取舍如何優(yōu)化。這個(gè)轉(zhuǎn)化過程叫做問題的建模過程,建立的問題模型實(shí)際上是一個(gè)函數(shù),這個(gè)函數(shù)對優(yōu)化算法來說是一個(gè)黑盒函數(shù),即不需要知道其內(nèi)部實(shí)現(xiàn)只需要給出輸入,得到輸出。


? ? ? ? 在優(yōu)化算法中這個(gè)黑盒函數(shù)叫做適應(yīng)度函數(shù)優(yōu)化算法的求解過程就是尋找適應(yīng)度函數(shù)最優(yōu)解的過程,使用優(yōu)化算法時(shí)我們最大的挑戰(zhàn)就是如何將抽象的問題建立成具體的模型,一旦合適的模型建立完成,我們就可以愉快的使用優(yōu)化算法來求解問題啦。(“合適”二字談何容易)


? ? ? ? 優(yōu)化算法的大致介紹到此結(jié)束,后面我們會(huì)依次介紹常見、經(jīng)典的優(yōu)化算法,并探究其參數(shù)對算法性能的影響。

——2019.06.20

[目錄]

[下一篇 優(yōu)化算法筆記(二)優(yōu)化算法的分類]

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
禁止轉(zhuǎn)載,如需轉(zhuǎn)載請通過簡信或評論聯(lián)系作者。

推薦閱讀更多精彩內(nèi)容