以蟻羣算法爲例,學習智能算法需要注意哪些問題?

在研究生期間,我當時對一個問題十分懷疑,那就是蟻羣算法有什麼用,相信很多人或許都對這個問題有過質疑。因爲我目前沒有見過蟻羣算法用在哪個實際問題上過。或許有人蔘加過公司的一些工作面試,但是很少公司需要你掌握蟻羣算法的。我們自己也嘗試用蟻羣算法解決機器人路徑規劃問題,其中的弊端我們或許也知道,那就是根本達不到實時性的要求,因爲計算複雜度太高了。再就是進化計算所共有的缺點,需要一定的時間來收斂,實際上我們可能並不需要高精度的解。還有就是拿蟻羣算法用來解決TSP問題,雖然這個問題來自於實際的生產過程,那就是爲PC板打孔的順序,怎麼樣的打孔順序可以最有效。下面這個圖可以說是我們課題組整體的一個情況了,理論方面,就是用來解決旅行商問題,實際問題就是用來解決機器人路徑規劃問題。
在這裏插入圖片描述
但是我們應該大家都有類似的感覺,就是工作過程中我們用不到我們研究生期間學到的知識。所以我當時決定讀博一定要找一個解決實際問題的研究方向。我們都希望自己的研究能夠用在實踐生產中,能夠提高我們的生活水平,這樣我們才能夠爲社會創造更大的價值,我們自身也就能拿到更高的薪水,享受更高質量的生活。於是,我現在轉到了深度學習方向,用深度學習的技術解決實際的問題。
在這個過程中,我發現了我對之前的那個問題有了新的認識。這裏,我先列出一個提綱,我將要分享什麼內容:
1) 先不分析蟻羣算法有什麼用,先說明蟻羣算法想要解決什麼問題——組合優化問題
2) 科研過程中的兩條主要路徑——理論研究和應用,分別對應於科學家和工程師
3) 蟻羣算法帶給我的東西
4) 我現在對蟻羣算法的感受和一些想法

蟻羣算法想要解決什麼問題?

首先,我說說蟻羣算法想要解決什麼問題。爲什麼我不說蟻羣算法有什麼用呢?實際上我們說蟻羣算法就是一個方法,能用來幹什麼取決我們使用的人,雖然部分也取決於算法本身。蟻羣算法好比一把鐵錘,你說鐵錘能用來幹啥?我們可以用鐵錘來幹很多事情,但是大部分人都只用它來幹少數的事情。事實上,假如哪一天你發現用一把鐵錘做出了一件別人從來沒有幹過的事情,你或許也比較成功了。蟻羣算法也一樣,用來幹什麼則取決於我們自己。有的人能用一張白紙折出美麗的藝術品,也有人用一張紙畫一幅畫,也有人有一張紙點燃了一頓美妙的晚餐。這時候,我們就要知道蟻羣算法的一般規律了,它可以用來解決什麼問題,假如緣木求魚或許就會浪費我們的時間了。
我們說蟻羣算法就是用來解決組合優化問題的。更大的來講,是優化問題。優化問題是我們生產實踐過程中極其重要的一個問題了。我們先來看看連續優化問題,我現在的課題就是屬於連續優化問題的範疇。在高中和大學階段,相信大家都學過導數微分的概念,拿最簡單的例子來說,就是求一元二次方程的極值問題。我們就可以使用一階導數和二階導數來求這個方程的極大值或極小值。這個問題中導數的概念就特別重要了。但是類似的優化問題就必須要滿足可以求導這個條件,也就是可導,更廣泛來說就是可微。牛頓也憑藉着這個法則建立起了他的科學帝國。說到這裏我們只需要記住一點,那就是連續優化是需要滿足一定條件的,但是很不幸的是,這個條件在一些問題中並不滿足。

在這裏插入圖片描述

這類問題就是組合優化問題,也可以說是離散優化問題,換句話說是無法求導的。這裏我就不分析什麼是可以求導什麼是不可以求導了。在解決組合優化問題中,有一類就是智能算法,也叫做進化算法,在進化算法中,有一種方法就叫做蟻羣算法。現在我們如果知道了蟻羣算法,就好比拿着一個工具在揹包裏,你就可以用它來幹一些事情了。然而很不幸,我們有時候並不知道用它可以幹什麼。於是問題就是:假如你能找到一個事情,你能使用蟻羣算法解決它,那麼你也就是做出了自己的貢獻了,而這也就是我們的任務,需要我們不斷去努力的方向。

科技——科研的兩條腿:科學和技術,理論與應用

以上就是對第一個問題的解釋,蟻羣算法是用來解決什麼問題的。而在那期間我也順便解釋了什麼是科研過程中的一條主要路徑——應用方面,就是使用一個算法,一個工具。簡單來說就是你知道了一種工具,然後你需要去應用它。而這也就是本文的第二個主題。
另一方面就是如何改良工具或者發明一種新的工具了。還是拿上面的用一張白紙的例子,雖然一張白紙可以用來幹很多事情,比如折出一個藝術品以及畫畫。人類的某個先驅就發現畫畫的紙不能太粗糙,否則墨水容易散開,畫出的畫就不太好看。所以他就想有一種新的紙,能夠滿足這種需求,終於有一天他發現了一種不容易滲透的紙,安徽的宣紙不是爲畫畫而生,但是用來寫字可就是太好了。這裏就對應着改良算法了,在我們課題組的研究過程中,我想大家對改良應該是不陌生了。我們大部分工作都是在前人的基礎上增減一些東西以滿足新的特徵。
除了改良以外,人類中還有一些天才在合適的機會下找到了一種全新的東西,滿足同樣的需求但是卻更簡單更好用。秦始皇統一六國的時候中國還在使用竹簡來記錄,那時的學富五車也就不過是今天一本書的內容。但是一個天才突然發現用布來記錄文字更好,再後來中國人還發明瞭紙來記錄。這可不得了,一下子就進入歷史記錄了,成爲中國四大發明之一。從竹簡到布再到紙張,就是一種新的發現或者發明了。而這也對應着科學中的理論研究道路。
20世紀八、九十年代,智能算法中的遺傳算法可是大火特火,不亞於當下的深度學習、人工智能。到了1991年,Dorigo發明了蟻羣算法,這也是一種理論上的創新。後來,還有ant colony system (ACS),以及MMAS,他們都是理論上的研究,他們就針對於設計出一個更好的蟻羣算法出來,而不考慮他們用在哪個事情上。相信我們課題組對於這個應該不陌生,我們大部分的SCI論文都是用來提升蟻羣算法性能的,無論你是更快收斂還是跳出局部最優。
然而,我的感覺是:尤其是對於我們沒有實踐經驗的新人來說,我們研究過多的理論會使我們心虛。這大概是正常的吧,對於科技這兩條路(一個是科學,一個是技術,科學主要偏向於理論研究,技術更偏向於應用),我們只認識了其中的一個方面,相當於我們人的兩條腿,長期使用一條腿估計有點不平衡的感覺。
於是,整合前面兩點,我現在的感覺是這樣的:對於工具我們當然要越多越好,萬一哪一天我們用上了也不錯。另一方面就是對知識體系全面性的認識,無論是對問題本身還是對科技兩方面的認識。這個全面性的認識最磨練人,需要堅持不懈。我想這裏可以借用毛澤東對待資產階級兩面派的態度作爲概括:有理有利有節。有理就是知道我們要朝着全面性出發,這是一個理念,要有目的性的去做,也要有關係的去做,順藤摸瓜而不是東一榔頭西一棒槌。有利就是針對我們當下的情況做出對我們有利的事情,比如我們課題組研究蟻羣算法,我們就完全可以先從蟻羣算法瞭解,然後以這個爲眼,爲着力點漸漸發散開,瞭解遺傳算法,瞭解組合優化算法,瞭解優化等等。有節也是重要的,那就是說要節制自己,因爲一條路上你完全不必全部走一遍,可以留一些,懂得適可而止。在對蟻羣的理論有一定了解之後大膽的去應用它,去找屬於我們自己的不同榮譽,如呂金秋師兄從ROS系統上突破,從柵格法到MAKLINK。張晨師姐和於清平師姐從軟著上着手,還包括智慧城市的一些比賽,而劉楷師兄主要着力於蟻羣算法的理論分析,包括收斂性證明。而我和我下一屆在導師新課題的指導上,從合作博弈入手,尤其是16屆(陳佳,袁汪凰,李娟,朱豔,尹元元)和17屆她們在蟻羣多種羣上做了大量的工作。如果不懂得節制自己,那麼必然會在某一個方面花太多的時間和精力,自然就會失去全面性。

麻雀雖小五臟俱全——蟻羣算法和機器學習也是相通的

以下再說第三點:我從蟻羣算法所得到的東西。俗話說麻雀雖小但五臟俱全,蟻羣算法中的一些基本概念也就是更普遍的知識。我們在剛開始就能弄明白其中的道理或者說注意到其中的玄機則對以後的研究或者工作中所遇到的問題都會有很大的好處。這裏給出我現在的一些思考,以問題的形式列出,供大家參考:
1) 探索和開發的含義,(這也是機器學習中的重要概念,特別是增強學習),或許有人看到保留最優解是很多算法中都用到的技巧。
2) 全局最優和局部最優,(連續優化中也有這個概念)
3) 信息素更新的公式爲什麼是那個樣子,可以結合(梯度更新中的更新公式),還可以結合支持向量機中嚴格邊界和soft margin的關係。例如我們的優化目標和優化約束條件,如何同時優化他們呢?
4) 控制參數alpha和beta是什麼機理?相對重要性又是什麼東西。
5) 超參數是什麼,這裏是的alpha和beta就是超參數?那麼如何選擇超參數?這和深度學習乃至機器學習中超參數的選擇都是一樣基本概念。
簡而言之,直到最近我才意識到對蟻羣算法基本理論上的認識對我是有極大作用的。我說這句話也是想穩定一下我們課題組一些新人的心,之前已經有人未來也將有人和我當時有同樣的疑問,假如我能稍微令後來者釋然一些,我將榮幸之至。雖然當時有很多疑問,好在現在大部分都得到了解決。而且更加堅信基本理論學習會帶給我們超越算法本身的認識,即使也有一定的侷限性。

蟻羣算法與深度學習能夠結合?

關於本文第四點——對蟻羣算法的感受,我想也就順理成章了。那就是從基本理論開始,然後做一些實踐上的應用,最後發散開來看,把自己的知識體系擴大些。當然,這些過程都是需要精力的,都是需要時間的。有些可以同時進行,而有些有順序。
對於蟻羣算法的基本規範也需要了解——組合優化問題。換言之,只要是組合優化問題,不能使用導數優化的,我們或許都可以拿蟻羣算法去試一試,另外不要試圖走所謂的捷徑,試錯乃是必要的,沒有人能一下子成功——畢竟,愛迪生髮明電燈可是試了很多種材料。
這裏我也給出我現在關注的一些深度學習和蟻羣算法相關的幾個ideas,畢竟現在深度學習太火,這樣的應用也是好發文章,也是促進自己學習和思考的一個較好方式,畢竟人是有倆個屬性的,即使社會性乃是人的本質屬性,但是人的物質性也是實現社會性的根本條件——簡單說就是人需要生存,需要錢,需要物質:
1) 用蟻羣算法來優化深度學習過程中的超參數選擇。Regularized Evolution for Image Classifier Architecture Search這篇論文就是其中的最新文章之一。
2) Evolutionary Generative Adversarial Networks,這篇文章將遺傳算法用在對抗生成網絡(GAN)中,我現在主要研究GAN,所以曾經關注過這篇文章。
不過,想要真正的做出東西來,恐怕還有一定的路要走。而第一個idea或許更加簡單一些,只需要瞭解一下我們的優化空間,至於優化空間的具體含義可以不必如此清楚。

爲何要點贊?

如果本文解決了你的困惑,不妨點個贊鼓勵一下。
不管你信不信,也不管你同不同意,實際上,你的每一次點贊都標誌着你自身的進步。而打賞乃是點讚的高級形式
曾經有無數個點讚的機會,但是我都沒有好好珍惜,假如時光可以倒流,我一定爲他們也爲自己點贊。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章