主編推薦 深度學習和強化學習在組合優化方面有哪些應用?


主編推薦 | 深度學習和強化學習在組合優化方面有哪些應用?

編者按

2017年阿里巴巴的一篇用深度強化學習求解3維裝箱問題的論文引發了深度學習和強化學習在組合優化問題方面應用的深入探討。一部分先驅的研究者嘗試用深度學習和強化學習的角度去看待組合優化問題的求解,相關的前沿探索性研究也逐步展開。單純的采用基於Search的傳統數學優化方法是否有着局限性,基於深度學習和強化學習的Learning to Search方法是否能有着較好的應用前景?本文就帶你簡單了解一下深度學習和強化學習在組合優化方面的研究進展。

文章作者:莫思雨,王晶, 
責任編輯:

文章發表於微信公眾號【運籌OR帷幄】:主編推薦 | 深度學習和強化學習在組合優化方面有哪些應用?
歡迎原鏈接轉發,轉載請私信@運籌OR帷幄獲取信息,盜版必究。
敬請關注和擴散本專欄及同名公眾號,會邀請全球知名學者發布運籌學、人工智能中優化理論等相關干貨、知乎Live及行業動態:『運籌OR帷幄』大數據人工智能時代的運籌學

一. 深度學習和強化學習求解組合優化問題思路簡介

組合優化問題由於多半屬於NP-hard問題,傳統的數學優化方法目前很難求到精確解。神經網絡是否能幫助組合優化問題的求解一直以來都是一個非常有趣和前沿的話題。回顧神經網絡發展歷史,早在1982年就有采用Hopfield神經網絡來求解TSP問題(旅行商問題)。Hopfield神經網絡是一種遞歸神經網絡,從輸出到輸入均有反饋連接,每一個神經元跟所有其他神經元相互連接,又稱為全互聯網絡。對Hopfield神經網絡的研究更是引領了八十年代人工智能研究的復興。

近些年來深度學習在圖片識別等任務上取得了前所未有的效果,強化學習也在AlphoGo上大顯神通。那么深度學習和強化學習的突飛猛進的研究成果是否能夠助力組合優化問題的求解呢?最近2-3年來在人工智能頂級會議NIPS, ICML 上,關於這方面的探索性的研究也逐漸展露頭角。本文先做一個簡單的解讀,便於研究組合優化的同學深入了解這些先驅性的探索工作。

這里先從宏觀上說一下深度學習和強化學習如何幫助求解組合優化問題。

 

1組合優化的序列決策可以由深度學習或強化學習來替代

組合優化問題大多數情況下都是涉及到決策順序,即序列的決策問題,例如對於TSP問題就是決定以什么順序訪問每一個城市,例如對於Job shop問題(加工車間調度問題)就是決定以什么順序在機器上加工工件。而深度神經網絡里邊的遞歸神經網絡恰好可以完成從一個序列到另一個序列的映射問題,因此可以借用遞歸神經網絡來直接求解組合優化問題完全是一種可行的方案。另外一套方案就是采用強化學習,強化學習天生就是做序列決策用的,那么組合優化問題里邊的序列決策問題完全也可以用強化學習來直接求解,其難點是怎么定義state, reward。

 

2求解組合優化的經典算法可以由強化學習幫助指導算法策略

分支定界算法是一種最常見的求解整數規划問題的方法。關於分支定界算法可以參考這篇:【學界】混合整數規划/離散優化的精確算法--分支定界法及優化求解器 。分支定界算法的效率取決於從哪個變量 branch 和 node selection兩個因素,如果branch 和 node selection的策略比較好,那么分支定界算法可以很快的剪枝或者可以很快的得到比較好的界,就可以大大提升分支定界算法的效率。目前對於 branch 和 node selection的策略還沒有公認的太好的方法。傳統的方法基本上都是一些簡單的啟發式規則,那么強化學習可以幫助我們有效的給出一個 branch 和 node selection的策略。這樣的一種策略也被稱為Learning to search,有別於以往單純的基於Search的傳統優化方法,Learning to search還是在優化過程中引入學習的概念幫助更加有效的搜索最優解。

2014年在NIPS會議上,文章[5]是比較早的一個用機器學習算法來學習分支定界算法里邊的 branch 和 node selection的策略的。到了2017年,加拿大蒙特利爾的Andrea Lodi還寫了一個survey [5],里邊總結了各種關於Learning to search的研究的進展情況,寫得非常全面。目前這方面的研究也處於探索中,值得我們有所期待。

 

二. 專為組合優化求解而誕生的神經網絡 -- Pointer Network 介紹

前面談到了組合優化問題很多時候就是進行序列決策,而Pointer Network就是非常適合求解組合優化問題的一種神經網絡。Pointer Network(后面簡稱Ptr-Net)是基於Sequence-to-Sequence網絡生成的一種新的網絡架構。Ptr-Net與Sequence-to-Sequence類似,都是解決從一個序列到另一個序列的映射問題,不同的是Ptr-Net針對的序列問題更加特殊:輸出序列的內容與輸入序列的內容完全一致,只是序列的順序發生了改變。這種問題在實際中常見的應用就是組合優化問題,因此Ptr-Net首次建立了神經網絡與組合優化問題的聯系。

下面我們簡單介紹一下Ptr-Net的基本原理,這里不涉及公式推導,若感興趣,可以參看論文:

相信對深度學習有一定了解的同學對Sequence-to-Sequence模型並不陌生,它利用一個RNN將輸入映射為一個嵌入(embedding),在利用另一個RNN將嵌入映射成為輸出,這兩個RNN我們分別稱之為encoding和decoding。然而在實際這種結構忽略了一個十分重要的問題:輸出序列每個元素都與輸入序列的一個或多個元素存在某種聯系。注意力機制(Attention Machanisim)正是為了解決這一問題而被提出,在計算輸出序列時,它會通過某種方式得到該輸出序列某一個位置的元素與輸入序列每一個位置關聯的權重,然后將輸入序列與該權重以一定的方式組合來影響輸出。Ptr-Net正是利用了注意力機制解決了對輸入序列排序的問題。通過注意力機制,可以計算出當前輸出與輸入序列關系最大的元素,那么我們就將輸入序列的元素作為該輸出元素,每一個輸出元素都像有一個指針一樣指向輸入元素,Pointer Network因此得名。需要注意的是,每個輸入元素只能被一個輸出元素所指,這樣就避免了輸入元素的重復出現,下圖給出Ptr-Net的基本結構圖:

三. 相關資料匯總與點評

關於深度學習和強化學習在組合優化的應用這里無法一一對每一種方法進行詳細的介紹。相信通過前兩小節的科普,您已經對這個研究領域有了初步的認識。如果想進行更深的研究和探討,本文收集了近年來關於深度學習和強化學習在組合優化問題求解上的一些比較關鍵的資料,並對其進行了簡單的點評和概括,方便有興趣的童鞋進一步深入了解。

1. Pointer Network:

這篇是后面幾篇的基礎。Pointer Network是脫胎於Google提出的Sequence-to-Sequence的網絡結構。先把數據導入Encoder,再通過Decoder返回指針指向Encoder輸出的位置或者序號,顧名Pointer Network。

2. Neural combinatorial optimization with reinforcement learning:

代碼實現參考:

https://github.com/pemami4911/neural-combinatorial-rl-pytorch higgsfield/np-hard-deep-reinforcement-learning

Google Brain的這篇借用pointer network加上attention mechanism,采用了policy gradient和actor-critic進行訓練求解TSP問題,在文中也求解了knapsack的問題。以個人實現的經驗來說,moving average的效果比actor-critic訓練更穩定一些,actor-critic的收斂速度更快,但是沿用文中參數的訓練,結果不穩定。

3. Reinforcement learning for solving vehicle routing problem:

代碼實現參考:

mveres01/pytorch-drl4vrp

Leigh University發的這篇的基礎是前面兩篇。因為TSP和VRP問題其實對輸入數據的順序不敏感,所以文中簡化的pointer network的encoding過程,直接進行embedding,因此也采用了不同的Attention方式進行Decoder。該文主要延伸Pointer Network到解VRP問題,也解了TSP問題,和之前的進行了對比,結果和效率上都有所提升。

4. Learning Combinatorial Optimization Algorithms over Graphs:

 

 

作者的github:

Hanjun-Dai/graph_comb_opt

這篇和之前的Pointer Network不同,作者把TSP問題當作Graph來處理,先graph embedding的思路(structure to vector),然后采用reinforce算法進行訓練。從small scale training transfer到large scale表現也還不錯。作者是用c++寫的,后來也發了pytorch版本,但是底層還是c++。我用pytorch實現了一下,但是原文中graph embedding也是屬於訓練的部分,在pytorch的實現中涉及多重graph的backward。如果有深入了解的,可以交流一下。

5. Attention: Learn to solve routing problems!

原作者的github:

wouterkool/attention-tsp

ICLR2019的一篇。這篇的整體思路就是大舉使用了Attention機制,建立了求解組合優化問題的Attention Model。Attention的基礎來源於Vaswani的Attention is all you Need. 這篇涉及的問題包羅萬象,求解了各種tsp和vrp變種,以及其它組合優化問題,可謂Attention在組合優化問題上好好利用了一把。

6. 倉儲優化中的beer game問題:

文中用deep reinforcement learning的方法,分別對4個agent(manufacturing, distributor, warehouse, retailer) 建立network,然后用一個feedback scheme去讓agent向一個目標前進。主要使用在倉儲補貨的一個游戲中。

當然還有很多其他學者的工作,這里只是列舉一下案例。TSP和VRP問題用深度學習的求解思路主要是encoder + decoder,encoder和decoder可以結合很多Attention的機制。但是當前深度學習或者深度強化學習求解組合優化問題局限於一些簡單的場景,而且訓練好的模型可擴展性差,在實際運用中還有待商榷。如有相關研究的同學,可以一起交流一下。個人github: jingw2 - Overview

 

四. 總結

關於深度學習和強化學習求解組合優化問題的研究目前還處於一個探索階段,必須承認的是目前的這些研究思路比較新奇,但是就當下的情況來看短期內難以撼動傳統數學優化和組合優化的方法。

深度學習,強化學習並非萬能的靈葯,但學科的交叉融合是一個必然的趨勢,對於學習傳統組合優化和數學優化的研究者應該持有一個樂觀的態度去做一些全新的交叉研究的嘗試,對於深度學習,強化學習的研究來說也可以嘗試把戰場從圖像識別,自然語言處理上轉移到組合優化問題上來,幫助組合優化問題更好的求解。

注:本文第一部分和第四部分由 運籌OR副主編 王源創作,第二部分作者 莫思雨,第三部作者 王晶(斯坦福大學碩士,現任某廠算法工程師,負責實時調度等算法和模型開發),其中第三部分來自

深度學習或強化學習在組合優化方面有哪些應用?


參考文獻:

[1] Hu H, Zhang X, Yan X, et al. Solving a new 3d bin packing problem with deep reinforcement learning method[J]. arXiv preprint arXiv:1708.05930, 2017.

[2]Khalil E B. Machine Learning for Integer Programming[C]//IJCAI. 2016: 4004-4005.

[3]He H, Daume III H, Eisner J M. Learning to search in branch and bound algorithms[C]//Advances in neural information processing systems. 2014: 3293-3301.

[4]Comments on: On learning and branching: a survey

[5]Lodi A, Zarpellon G. On learning and branching: a survey[J]. TOP, 2017: 1-30.

[6]Dai H, Khalil E B, Zhang Y, et al. Learning Combinatorial Optimization Algorithms over Graphs[J]. arXiv preprint arXiv:1704.01665, 2017.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM