terasoft
深度強化學習

什麼是強化學習?

你需要知道的 3 件事

強化學習是機器學習技術的其中一種,它是透過電腦主體(agent)在動態環境中的反覆試誤的交互作用來學習如何執行任務。這種學習⽅法能夠讓主體(agent)在無人干預且無需明確編碼的情況下,做出⼀系列決策,並使任務的獎勵最大化。

經過強化學習訓練的人工智慧程式在圍棋、西洋棋以及電腦遊戲中擊敗人類玩家。雖然強化學習並非新概念,但深度學習與運算能力的進展,使它在人工智慧領域中取得了顯著成果。

為什麼強化學習很重要?

強化學習、機器學習與深度學習的差異

強化學習是機器學習的一個分支(如圖1所示)。與非監督式和監督式機器學習不同的是,強化學習並不依賴靜態數據庫,而是在動態環境中運作並從收集的經驗中學習。

在訓練期間,主體(agent)與環境反覆互動,從中收集數據點或經驗。並藉此減少訓練前的資料收集、預處理和標記的步驟。而這些步驟在監督式和非監督式學習中通常是必須的。實際上,這代表只要有正確的獎勵機制,強化學習模型就可以開始自主學習行為,而無需(人類)監督。

深度學習涵蓋機器學習的三種類型。強化學習和深度學習並不互斥。複雜的強化學習問題通常會依賴深度類神經網路,而這個領域稱為深度強化學習(Deep Reinforcement Learning)。

圖1. 機器學習的三大類:非監督式學習、監督式學習、強化學習。

強化學習應用範例

經過強化學習訓練的深度類神經網路可以針對複雜的行為編碼。這為那些使用傳統方法處理較為棘手或具挑戰性的應用提供了一種替代方法。例如,在自動駕駛中,類神經網路可以取代駕駛員,並透過同時查看多個感測器(例如相機畫面和光達測量)來決定如何轉動方向盤。如果沒有類神經網路,這些複雜任務通常會被分解成更細項的任務,例如從相機畫面中提取特徵、過濾光達測量結果、融合所有感測器輸出的資料以及根據感測器輸入的資料做出「駕駛」決策。

雖然強化學習整合至生產系統中的應用仍處於評估階段,但某些工業應用已經成為該技術的理想候選者,如:

高階控制:控制非線性系統是一個具有挑戰性的問題,通常透過在不同操作點對系統進行線性化來解決。而強化學習可以直接應用於非線性系統,可提供更加靈活和高效的解決方案。

自動駕駛:有鑑於深度類神經網路在影像應用上的成功,基於攝影機輸入做出駕駛決策是強化學習適合的領域。

機器人技術:強化學習可以應用在機器人抓取,例如教導機器手臂如何操縱各種物體以進行抓取和放置任務。其他機器人應用包括人機協作和機器人之間的協作,進一步提升機器人的靈活性。

調度:調度問題出現在許多場景中,包括交通號誌控制以及協調工廠中的資源以實現特定目標。強化學習是解決組合最佳化問題的理想替代方案。

校準:需要手動校準參數的應用,例如電子控制單元(ECU)校準,是強化學習的理想應用場景之一。透過強化學習,可以自動化最佳參數的調整流程,提高效率並減少人工干預。

強化學習如何運作?

強化學習背後的訓練機制反映了許多真實場景。例如,透過正向增強的方式進行寵物訓練

圖2. 強化學習在狗訓練中的應用。

套用強化學習術語(圖2)進行解釋,在這種情境中,學習的目標是訓練狗(agent)能夠完成任務,而環境(environment) 則是包含狗身邊的環境以及訓練者本身。首先,訓練師發出一個指令或提示,這對狗而言是一次觀察(observation)。接著,狗根據觀察進行一個動作(action)。如果狗的回應接近期望行為,訓練者會給予獎勵(reward),像是零食或玩具。反之,則沒有獎勵。

在訓練初期,狗的行為表現較隨機,例如在命令是「坐下」的時候翻滾,因為這時牠試圖將特定的觀察與行動和獎勵建立聯繫。這種觀察與行動之間的組合稱為策略。從狗的角度來看,理想的情況是牠能對每個指令做出正確的反應,以便獲得最多獎勵。因此,強化學習訓練的核心意義在於「調整」狗的策略,使其學習期望行為,從而獎勵最大化。

訓練完成後,狗應該能夠根據觀察主人並採取正確的行動,例如,在聽到「坐下」時坐下。此時,理論上零食不再是必要的獎勵,但仍然受到歡迎。

以訓練狗的例子來說,我們試想使用自動駕駛系統停車的任務(圖 3)。 目標是透過強化學習訓練車輛中的電腦(agent)將車輛停入正確的車位。與訓犬情況一樣,環境(environment)是指除agent之外的一切,包括車輛的動態特性、附近的其他車輛、天氣狀況等。在訓練期間,電腦 (agent)可以透過讀取各種感測器如攝影機、GPS 和光達以及其他感測器中的資料(observations)來產生駕駛、煞車和加速的指令(actions)。

為了學習如何從觀察中產生正確的操作,電腦(agent)採用試誤法反覆嘗試將車輛停放至正確的位置(策略調整)。每次嘗試的「好壞」可通過獎勵訊號來評估,該訊號用於引導學習過程,使主體逐步掌握最佳停車策略。

圖3. 自主停車中的強化學習

在訓練狗的例子中,訓練發生在狗的腦中。在自主停車的例子中,訓練由訓練演算法處理。這個訓練演算法負責根據從感測器收集而來的資料、動作、與獎賞來調整主體的策略。經過訓練之後,車輛上的電腦只要使用調整過的策略和感測器資料便能進行自主停車。

切記,強化學習並不高效。也就是說,它需要收集主體(agent)與環境(environment)之間的大量互動的訓練數據。例如,AlphaGo,第一個在圍棋比賽中擊敗世界冠軍的計算機程式,也需要經過數天不間斷的訓練,透過數百萬場比賽,累積相當於數千年的人類經驗。所以即使是相對簡單的應用,訓練時間也可能從數分鐘、數小時甚至是數天不等。此外,正確的設置問題也是充滿挑戰,畢竟一系列的設計決策需要經過多次迭代才能達到理想結果。舉例來說,包括選擇適合的類神經網路架構、調整超參數,以及設計獎勵訊號。

強化學習的工作流程

一般透過強化學習訓練主體(agent)的工作流程包括以下幾個步驟(圖4):

圖4. 強化學習工作流程。
一、建立環境(environment)

首先,你需要定義一個可以讓主體(agent)執行強化學習的環境,其中就包括了主體(agent)與環境之間的互動模式。這個環境可以是模擬模型或真實的物理系統,但模擬環境通常是首選,因為它們更加安全並且更允許被測試調整。

二、定義獎賞(Reward)

接下來,具體定義可以讓主體(agent)衡量其表現及任務目標表現的獎勵訊號,以及該訊號如何在環境中被計算。獎勵的設計是一項充滿挑戰且相對困難的工作,往往需要經過多次迭代才能達到理想的效果。

三、建立主體(agent)

接著是建立主體(agent)。該主體(agent)由策略(policy)強化學習訓練演算法組成。因此,你需要執行以下步驟:
a) 選擇一種策略呈現方式(例如使用類神經網路或查找表)。考慮如何建構這些參數和邏輯以成為主體(agent)的策略部分。
b) 選擇適當的訓練演算法。不同的表示方法通常與特定類別的訓練算法相關聯。一般來說,大多數強化學習算法依賴於類神經網路,因為它們在處理大型狀態/動作空間和複雜問題時非常有效。

四、訓練和驗證主體(agent)

設置訓練選項(如停止的標準)並訓練主體(agent)調整策略。在訓練結束後,務必驗證訓練好的策略是否有效。如有必要,重新檢視設計訓練選項,像是獎勵訊號以及策略架構並再次訓練。強化學習的樣本效率已知不高;訓練時間可能因應用的複雜程度而有所不同,從幾分鐘到幾天不等。對於複雜的應用,若將訓練過程平行並行化到多個CPU、GPU和叢集進行計算將可加快速度(如圖5)。

使用並行計算的訓練樣本低效學習問題。
圖5. 使用並行計算的訓練樣本低效學習問題。
五、策略部署

如何呈現已經被訓練好的策略?舉例來說,可以用C/C++或CUDA程式碼等方式來表示。此時的主體(agent)已經作為一個可以獨立的決策的系統。

使用強化學習訓練主體(agent)是一個迭代過程。即使到後期的決策和結果階段,你可能還會需要返回早期的學習階段。例如,如果訓練過程在合理的時間內未能收斂到最佳策略,你可能需要在重新訓練主體(agent)之前更新以下任何內容:

  • 訓練設定
  • 強化學習演算法的配置
  • 策略呈現
  • 獎勵訊號定義
  • 行動和觀察訊號
  • 環境動態

使用MATLAB和Simulink進行強化學習

圖6.Teaching a biped robot to walk with Reinforcement Learning Toolbox.

MATLAB和強化學習工具箱簡化了強化學習任務。透過逐步完成強化學習工作流程,你可以將控制器和決策演算法的操應用在複雜系統(如機器人和自主系統)上,準確來說,你可以:

  • 使用MATLAB和Simulink建立環境和獎勵函式
  • 使用深度類神經網路、多項式和查找表來定義強化學習策略
  • 只需進行少量的程式碼修改即可切換、評估和相互比較流行的強化學習演算法,如DQN、DDPG、PPO和SAC,或還可以根據特定需求開發自訂的演算法。
  • 使用Parallel Computing Toolbox™和MATLAB Parallel Server™通過利用多個GPU、多個CPU、計算叢集和雲端資源來加速訓練強化學習策略
  • 使用MATLAB Coder™和GPU Coder™轉出程式碼並將強化學習策略部署到嵌入式設備上
  • 參考下方範例,開始你的強化學習之旅吧!

快速入門

強化學習入門

強化學習入門

開始使用強化學習方法解決控制問題。