張志鑫,高健,趙大威
1. 海裝沈陽局,黑龍江 哈爾濱 150001
2. 哈爾濱工程大學 智能科學與工程學院,黑龍江 哈爾濱 150001
路徑規劃在諸多領域有著廣泛應用,如機器人[1]、無人艇[2]等。傳統的路徑規劃算法,如人工勢場法[3]、A*算法[4]、蟻群算法[5]、遺傳算法[6]等,在復雜的環境中無法處理復雜高維環境信息,而且容易陷入局部最優。強化學習是一種不需先驗知識并與環境進行互動試錯迭代獲取反饋獎勵信息來優化策略的智能算法,已經逐步成為無人艇在未知環境下路徑規劃的研究重點[7]。傳統強化學習方法受到動作空間和樣本空間維數的限制,同樣難以處理更接近實際環境的復雜情形。近年來,以神經網絡作為函數逼近器的強化學習得到了迅速發展。最新的深度強化學習框架在從游戲[8]到連續機器人控制[9]的各種任務中表現出了出色的性能,多數深度強化學習研究都采用了前饋神經網絡來解決可以用馬爾可夫模型[10]建模的任務。Song 等[11]提出一種有效的Q 學習方法。Su 等[12]提出了將強化學習的方法加入路徑規劃的理論。Tan 等[13]提出基于 Dijkstra 算法的強化學習路徑規劃的理論。目前,在決策過程中,使用循環神經網絡的強化學習框架越來越受到人們的關注[14]。循環神經網絡的一個優點在于其解決時間序列問題的能力。對于強化學習來說,智能體與環境交互所產生的數據顯然是時間相關的數據序列,為了更好地訓練神經網絡,使之盡可能的收斂,一般使用記憶回放的技術來消除數據之間的時間關聯性。而循環神經網絡是非常適合于對這類具有時間關聯數據序列的處理。本文提出一種基于雙層循環神經網絡雙層循環神經網絡(recurrent neural network, RNN)和Actor-Critic 結構的水面無人艇 (unmanned surface vessel, USV)路徑規劃算法。
強化學習算法依據策略更新方式的不同,可以分為基于價值[15]的間接方法和基于策略[16]的直接方法2 種。基于價值的方法通過計算每個狀態-動作對的值函數Q(s,a) 來尋找最佳策略,其中典型的就是深度Q 學習網絡(deep Q-learning network, DQN)。基于策略的方法則不同,這種算法不需要估算價值函數,而是直接用神經網絡去擬合策略函數,通過訓練去更新策略參數,直接生成最佳策略。這其中有代表性的則是策略梯度。這2 種算法各有特點,同時也有各自的短板。對于基于價值的方法,其缺點除了不能直接得到動作值輸出,難以擴展到連續動作空間上之外,還存在由于采樣不足導致的高偏差的問題,根據估算得到的價值函數與實際的值函數之間的誤差是很難消除的。而基于策略的方法,則屬于蒙特卡羅類方法,因為要對大量的狀態軌跡進行采樣,而每個狀態軌跡之間的差異可能是巨大的,結果就引入了高方差和較大的梯度噪聲,進而導致訓練的不穩定和策略收斂困難。為了解決高方差和高偏差之間的矛盾,可以把它們結合在一起,利用2 類方法各自的優勢,取長補短,這就是Actor-Critic 方法[17]。
對于Actor-Critic 框架來說,需要2 種輸出網絡,一種負責管理產生決策的Actor 網絡,一種負責管理評價決策結果的Critic 網絡,并且二者都還在不斷更新,這樣互補式的訓練方法有時候也會比單純的決策網絡系統和值函數網絡系統更為高效。網絡的結構如圖1 所示。

圖1 Actor-Critic 的網絡結構
Actor-Critic 算法從名稱上看包括執行者網絡(Actor)和評價者網絡(Critic)2 個組成部分。其中Actor 網絡用于逼近策略函數,與DQN 算法是基于價值不同,Actor 的網絡輸出不是Q 值,而是直接輸出動作Action 來和環境進行交互。因此,由于Actor 使用的是策略梯度函數,在基于策略的強化學習方式下,可以對策略進行近似描述。此時策略π可被表述為一個含有參數θ的函數,s表示狀態,a表示動作,策略就是一個概率函數,表征某個狀態下采取某個動作的概率為
此時的目標優化函數為
式(1)的目標優化函數選擇狀態值函數V(s),狀態值函數也是累計獎勵G的數學期望E(G)。
對式(1)取梯度得:
式(2)為策略梯度公式,對狀態值函數的直接估算并不方便,在保持策略梯度恒定的情況下,策略梯度可改寫為
式中δ有多種形式,一般比較常見的是時間差分形式:
式中 γ為每次迭代的折扣率。
Actor-Critic 網絡的參數更新順序是先更新Critic 網絡再更新Actor 網絡, α 與 β表示2 個網絡參數更新的學習率,分別對狀態值函數與策略函數求梯度,使用梯度下降法進行參數更新。
評價者網絡(Critic)為
執行者網絡(Actor)為
神經網絡可以當做是能夠擬合任意函數的黑盒子,只要訓練數據足夠,給定特定的輸入,就能得到希望的輸出。然而全連接網絡只能單獨的處理一個個的輸入,前一個輸入和后一個輸入是完全沒有關系的。但是,某些任務需要能夠更好地處理序列的信息,即前面的輸入和后面的輸入有關系的序列。為了解決這類問題,循環神經網絡出現了。圖2 為循環神經網絡的結構。

圖2 循環神經網絡的結構
循環神經網絡的輸入除了來自于輸入層中的Xt,還有著一種循環的網絡結構來提供上一段時間的隱含狀態St-1。在每一段時間,循環神經網絡在讀取了Xt和St-1后會產生新的隱含狀態St,從而產生原本時間的輸出Ot。循環神經網絡中當前的狀態St,是由上一時刻的狀態St-1與當前的輸入Xt所共同確定的。因此描述循環神經網絡的計算過程為
通過式(3)、式(4)反復迭代就可以將t時刻之前的多個時間步的狀態輸入到網絡,基于這個性質,循環神經網絡可以很好地處理時間序列的輸入。
人們處理復雜現象的方式是將它分解成一些小的、可控的過程。例如“做餡餅”便是由許多高級別的動作所構成的任務,取面粉、打蛋、設置烘烤溫度等。人們為了可以更迅速獲得新任務,依靠的便是將曾經學習的基本操作結合起來,而即便每個步驟都可能需要由數百萬個基礎動作所組成,比如讓不同的肌肉做出不同的動作。當前的強化學習算法的目標大多是在較低級的行為上做暴力搜索,在處理問題的時間進行大規模的嘗試。對一個必須順序進行更多操作的任務而言,這種工作方式的有效性將會顯得非常低。因此OpenAI 的研發人員們提供了一個基于層次化強化方法的解決方案。這個方案中,智能體使用由多個基礎動作所構成的序列表征更復雜的動作。如此一來,智能體就能夠處理復雜得多的任務:在整個解決方案中,大概只需要2 000 步以內的基礎動作,而層次化策略就能夠將這些動作轉化成由10 個層次動作所構成的序列,因為在這個10 步動作的序列中進行搜尋,就比在2 000 步的序列中進行搜尋有效得多。所以在強化學習問題中,某個任務可能涉及若干個并列的子目標,而每個子目標又能夠通過進行一些更細分的動作(抽象動作/動作組) 來實現。我們希望智能體也能夠很獨立地去將一個任務細分為各個層次,甚至是在學習過程中也能夠很自覺地去認識、發現任務中的動作層級。
神經生物學家已經在大腦皮層區域找到了一個時間尺度的上升層次,這被看作是處理更高層次的意識功能的區域,對應于更慢的時間尺度[18]。另外,人類大腦皮層的神經元之間存在著高度隨機的神經行為。所以,將采用雙層循環神經網絡 (double-layer recurrent neural network,DRNN)作為本文的模型。DRNN 網絡結構參數設置如圖3 所示。

圖3 雙層循環神經網絡的結構
由圖3 可以看出,雙層循環神經網絡包括了高層網絡和下層網絡,高層網絡對應著慢時間尺度,隱藏層狀態隨時間而緩慢變化,提供比較長期的價值函數,高層與低層相連。高層網絡類似于人類大腦做出決策,是相對比較抽象的策略,例如控制身體的某個部位做出一系列動作。底層網絡對應著快時間尺度,隱藏層狀態隨時間而快速變化,提供比較短期的價值函數,在底層接收環境觀測狀態,調整輸出策略。類似人體的下級神經組織,負責人體肌肉器官的具體控制細節。
圖4 顯示了網絡的結構參數,網絡的輸入輸出關系為

圖4 雙層循環神經網絡的參數
網絡的各項參數如式(5)~(8) 所示,其中c(t)為網絡輸入。DRNN 與傳統全連接網絡的輸入有所不同,全連接網絡的輸入一般是狀態向量s,具體對于本文所要研究的路徑規劃來說就是橫坐標x、縱坐標y和目標的偏航角 α等3 個標量所組成的一階張量(向量)。而DRNN 的輸入則為序列,輸入序列的形狀是[8, 16, 8]的三階張量,序列的長度為8(代表一個宏動作為8 個動作所組成的連續動作序列),樣本數量為16,當前狀態s、采取動作a、獲得獎勵r和下一狀態s'共同組成長度為8 的向量,作為輸入張量的第3 個維度。DRNN 的超參數設置如表1 所示。

表1 雙層循環神經網絡的超參數設置
智能體采用Actor-Critic 結構,為了保證Critic網絡參數更新的穩定性,加入目標網絡,共計3 個網絡。同時為了保證動作網絡和評價網絡正確的輸出動作和狀態價值,本文把DRNN 的輸出通過全連接網絡來進行維度變換。放大倍數K只是用來調整輸出大小,本文將其設置為0.15。
基于雙層循環神經網絡的水面無人艇路徑規劃算法具體實現步驟如下:
1) 初始化神經網絡參數 ω、 θ、狀態序列緩存Memory 和訓練循環次數計數器Count;
2) 初始化輸入序列input 和起始狀態s0;
3) 利用Actor 值網絡獲取當前要采取的動作a, 執行動作a獲 得環境反饋:下一狀態st+1、即時獎勵r、結束信號Done 和碰撞信號Collision;
4) 判斷Done 是否為True,是則結束本次訓練,跳轉到2);
5) 將st、a、r、st+1作為狀態動作序列儲存到狀態序列緩存Memory 中,以便從中采樣來訓練神經網絡;
6) 從狀態序列緩存Memory 采樣當前狀態序列輸入input_current 和下一狀態序列輸入input_next,分別輸入到Critic 值網絡和Critic 目標網絡得到當前狀態價值V(st)和下一狀態價值V(st+1);
7) 計算時間差分(temporal difference, TD),并利用TD 更新Critic值網絡的參數 ω。Critic 值網絡的損失函 數選擇均方誤差函數(mean square error,MSE)。時間差分TD 的表達式為
式中i為樣本序號。
Critic 網絡的損失函數定義為TD 誤差的平方:
Critic 網絡參數的更新公式為
8) 將當前狀態序列input 輸入到Actor 值網絡,得到當前狀態序列所對應動作輸出的概率分布。利用時間差分TD 更新Actor 值網絡的參數θ,Actor 網絡的損失函數表達式為
Actor 網絡參數的更新公式為
9) 智能體每執行20 步動作,同步Critic 值網絡與Critic 目標網絡參數;
10) 判斷Collision 是否為True,是則退回到上一狀態,跳轉到3);
11) 判斷Count 是否達到最大值,是則結束訓練,跳轉到2)。
為了便于訓練,本文采取 ε-greedy 策略作為基本策略框架, ε最小值為0.05,初始化為0.9,每次訓練遞減0.000 5 直至0.05。這么做是為了使得策略具備一定的動作探索能力,并且假設Actor網絡的輸出為動作的概率分布p(s,a), δ是符合(0,1)均勻分布的隨機數,那么最終的策略結果為
無人艇在水面航行過程中,會自動地根據地圖信息進行航線優化以避開障礙物。在此過程中,本文假設無人艇每次移動單位長度距離,這樣無人艇的動作空間就是每次移動時轉向的角度大小。一般的智能體,例如室內機器人,其運動方向的變化是45°角甚至是90°角的倍數,這是一種最常用的動作空間。但是也會導致規劃出的路徑軌跡比較長,同時也會導致規劃后的路徑軌跡中有較多的大角度轉向的動作,甚至是180°轉彎,這樣的路線軌跡不滿足無人艇在航行中的操縱特性。因此有必要考慮無人艇在航行過程中的轉向性能,對無人艇的動作空間進行專門優化。無人艇轉向時會產生傾斜,本文使用橫傾角來描述無人艇與水面的傾斜角度,如果橫傾角過大將導致無人艇發生傾覆的可能,因此動作空間的設計務必要保證無人艇在航行及避障中盡可能地保持其航向的穩定或者盡可能地減少其大角度轉彎的次數,確保規劃好的路線軌跡相對光滑,這樣既能夠保障無人艇的航行安全,又可以降低無人艇在航行中的動力損耗。為使無人艇的轉角更為符合其在實際航行中的運動特性,將轉角按照小角度轉向的原則進行設計,動作空間設置為按照指定的方向前進一個單位距離,其中方向設置為正負15°角、正負30°角和0°角,動作空間優化前后示意對比如圖5 所示。圖5(a)為經典強化學習算法的動作空間示意,圖5(b)為根據無人艇的操作特性設計優化的動作空間示意。

圖5 動作空間優化前后示意
1)環境設置:仿真環境本文設置為320 m×320 m 大小的地圖,無人艇的目標就是尋找最優路徑到達目標點。無人艇的狀態定義為一個三元組(x,y,α),其中x和y為無人艇在仿真地圖中的實時坐標, α為無人艇與目標點之間的偏航角。設無人艇的初始坐標為(x0,y0),則實際航向角初始化為θ=arctan(x0,y0),設當前坐標為(x,y),目標坐標為(p,q),則期望航向 β的計算公式為
無人艇的實際航向角θ隨著每次執行動作而改變,設動作a對 應的方向角度為aθ,則θ的更新公式為
偏航角 α定義為
轉向角 Δθ定義為
顯然,在t時刻轉向角 Δθ的數值就是無人艇此時采取的動作角度為aθ。
2)獎勵函數的設計:獎勵的設置也是需要本文精心思考的。不合理的獎勵設置將比一個隨機策略更加糟糕,因為它會錯誤地引導智能體的行為。一般來說,除非到達本文的目標,獎勵的設置是以懲罰性原則為主,并且獎勵規則不宜過于復雜。因此,到達目標給予一個較大的正向獎勵,未到達目標則給予一個小的懲罰是比較通用的獎勵設置。為了減少稀疏獎勵帶來的不利影響,本文針對無人艇進行進一步的獎勵優化,無人艇與環境的交互獎勵規則設置如下:
①無人艇到達最終目標,獎勵+100,目的是給予無人艇一個較大的正向激勵,使得無人艇傾向于移動到目標位置。
②無人艇碰到障礙物或者邊界,獎勵-2,每次碰撞到障礙物或者邊界是不期望發生的動作,因此給予無人艇一個負向懲罰,使得無人艇航行時傾向于避免碰撞障礙或邊界。
③無人艇與目標距離減小(增加),獎勵+1(-1),鼓勵無人艇靠近目標位置的動作,避免無人艇遠離目標位置的動作。
④無人艇的偏航角 α越小,獎勵越大,這是為了鼓勵無人艇減小實際航向與期望航向的偏差,使得無人艇的航線相對平緩,避免無意義的軌跡,減少最終規劃的路徑長度。
⑤無人艇的轉向角 Δθ越小,獎勵越大,這是為了鼓勵無人艇減少轉向的角度,轉向角度過大會增加轉動力矩和無人艇與水面的傾角,會消耗無人艇更多能量降低其續航能力,同時也增大無人艇傾覆的風險。
為了滿足④和⑤的要求,本文取相應角度的余弦值作為獎勵。
利用記憶回放機制時,本文將長度為8 的狀態序列的獎勵進行求和作為這個宏動作的獎勵。這樣的獎勵設置可以允許Critic 網絡對于宏動作的好壞進行評價,增強網絡對于各種動作序列優劣的判斷能力。
本文將在2 張320 m×320 m 的地圖上進行仿真實驗,地圖一個單位代表5 m,無人艇每次沿著當前航向前進5 個單位,即25 m。這是為了減少動作搜索數量,更快速地驗證算法效果。每張地圖訓練2 000 次,每次訓練上限定為500 步,超過500 步還沒有到達最終目標則視為失敗。對比指標有平均步數、平均獎勵、成功率、路徑長度和大角度轉彎次數。為了便于仿真,將障礙物進行矩形膨脹處理。同時,本文將使用全連接神經網絡構建的傳統Actor-Critic 算法作為對照組,增加Q目標網絡來提升迭代的收斂性保證訓練的穩定性,提升訓練效果。
DRNN 與Actor-Critic 的不同就在于用雙層循環神經網絡與全連接網絡組合的方式代替僅使用全連接網絡。為了方便進行對比,3 種算法中的全連接網絡結構基本相同,不同的是本文在DQN 中用其來逼近行為價值函數Q(s,a),Actor-Critic 中逼近狀態價值函數V(s)。仿真環境如圖6所示,矩形塊代表障礙,三角符號代表起始點,五角星則代表目標點。本文訓練2 000 次,最后得出2 種算法的路徑規劃軌跡。

圖6 DRNN 算法和Actor-Critic 算法仿真實驗1
從圖6 可以看到2 種算法最終的路徑規劃軌跡,DRNN 算法規劃的軌跡相對更為平緩,軌跡長度為2 344.82 m,Actor-Critic 算法規劃的軌跡轉彎較多,軌跡長度也更長,為2 499.65 m。
圖7 是另一張地圖的仿真結果,最終效果DRNN算法仍然要好于Actor-Critic 算法。DRNN 算法軌跡長度為2 326.53 m,Actor-Critic 算法的軌跡長度為 2 509.31 m。下面給出了仿真實驗的對比指標數據,如圖8~圖13 所示。

圖7 DRNN 算法和Actor-Critic 算法仿真實驗2

圖8 仿真實驗1 成功率

圖9 仿真實驗2 成功率

圖10 仿真實驗1 累計獎勵

圖11 仿真實驗2 累計獎勵

圖12 仿真實驗1 步數

圖13 仿真實驗2 步數
表2 和表3 列出了2 次仿真實驗的統計數據。

表2 仿真實驗1

表3 仿真實驗2
從2 次仿真實驗的結果可以看到,DRNN 算法相對于Actor-Critic 算法,平均獎勵高、平均步數小、轉彎次數少、路徑更短更光滑;仿真實驗1 中,DRNN 算法成功率從第250 幕開始超越 Actor-Critic 算法;仿真實驗2 中,DRNN 算法成功率從第400 幕開始超越 Actor-Critic 算法,成功率具有顯著優勢。不過由于網絡結構更加復雜,所以DRNN 網絡的訓練需要更多的時間。前期大量的失敗探索導致學習率并不是很高,仿真實驗2 相比實驗1,地圖復雜了一些,因此平均獎勵和成功率均略有下降。
本文提出了一種采用雙層循環神經網絡的USV 路徑規劃方法。利用2 張地圖進行仿真實驗,與Actor-Critic 算法不同,DRNN 的輸入并不是單獨的一個狀態,而是由狀態、動作和獎勵所組成的具有一定長度的序列(宏動作)。因此,宏動作實質上是符合時間順序、邏輯順序的信息序列。RNN 的重要作用就是處理信息序列,它可以用來刻畫某個信息序列中當前的輸出值和先前數據信息中間的關聯。從網絡架構上來看,RNN 會記住歷史信息,并且使用歷史信息影響當前的輸入輸出,基于RNN 結構的DRNN 也具有同樣的性質,由于DRNN 考慮了一定時間內的環境交互歷史,它把之前的一連串動作狀態當成一個狀態來考慮,這有助于神經網絡對于連續動作序列(宏動作)模式的識別。因此DRNN 框架下的Actor網絡和Critic 網絡將會考慮到宏動作而不僅僅是孤立的單個動作。本文從仿真實驗中可以看到DRNN 比一般的全連接網絡具有明顯優勢,平均步數小、平均獎勵高、成功率高,規劃的路徑更短也更光滑。這表明DRNN 可以較快地到達目標,同時訓練次數較少時可以達到更好的效果,改進后的網絡達到了預期目標。