天天看點

帶你讀《強化學習:原理與Python實作》之一:初識強化學習第1章

智能系統與技術叢書 點選檢視第二章 點選檢視第三章 強化學習:原理與Python實作

帶你讀《強化學習:原理與Python實作》之一:初識強化學習第1章
肖智清 著

第1章

初識強化學習

強化學習(Reinforcement Learning,簡稱RL,又譯為“增強學習”)這一名詞來源于行為心理學,表示生物為了趨利避害而更頻繁實施對自己有利的政策。例如,我每天工作中會根據政策決定做出各種動作。如果我的某種決定使我升職加薪,或者使我免遭處罰,那麼我在以後的工作中會更多采用這樣的政策。據此,心理學家Ivan Pavlov在1927年發表的專著中用“強化”(reinforcement)這一名詞來描述特定刺激使生物更趨向于采用某些政策的現象。強化行為的刺激可以稱為“強化物”(reinforcer)。因為強化物導緻政策的改變稱為“強化學習”。

心理學家Jack Michael于1975年發表文章《Positive and negative reinforcement, a distinction that is no longer necessary》,說明了強化包括正強化(positive reinforcement)和負強化(negative reinforcement),其中正強化使得生物趨向于獲得更多利益,負強化使得生物趨向于避免損害。在前面例子中,升職加薪就是正強化,免遭處罰就是負強化。正強化和負強化都能夠起到強化的效果。

人工智能(Artificial Intelligence,AI)領域中有許多類似的趨利避害的問題。例如,著名的圍棋AI程式AlphaGo可以根據不同的圍棋局勢下不同的棋。如果它下得好,它就會赢;如果下得不好,它就會輸。它根據下棋的經驗不斷改進自己的棋藝,這就和行為心理學中的情況如出一轍。是以,人工智能借用了行為心理學的這一概念,把與環境互動中趨利避害的學習過程稱為強化學習。

本章介紹人工智能領域中強化學習的基礎知識,闡述強化學習的學習方法,并給出強化學習中智能體和環境互動的程式設計執行個體。

1.1 強化學習及其關鍵元素

在人工智能領域中,強化學習是一類特定的機器學習問題。在一個強化學習系統中,決策者可以觀察環境,并根據觀測做出行動。在行動之後,能夠獲得獎勵。強化學習通過與環境的互動來學習如何最大化獎勵。例如,一個走迷宮的機器人在迷宮裡遊蕩(見圖1-1)。機器人觀察周圍的環境,并且根據觀測來決定如何移動。錯誤的移動會讓機器人浪費寶貴的時間和能量,正确的移動會讓機器人成功走出迷宮。在這個例子中,機器人的移動就是它根據觀測而采取的行動,浪費的時間能量和走出迷宮的成功就是給機器人的獎勵(時間能量的浪費可以看作負獎勵)。

帶你讀《強化學習:原理與Python實作》之一:初識強化學習第1章

強化學習的最大特點是在學習過程中沒有正确答案,而是通過獎勵信号來學習。在機器人走迷宮的例子中,機器人不會知道每次移動是否正确,隻能通過花費的時間能量以及是否走出迷宮來判斷移動的合理性。

一個強化學習系統中有兩個關鍵元素:獎勵和政策。

帶你讀《強化學習:原理與Python實作》之一:初識強化學習第1章

獎勵(reward):獎勵是強化學習系統的學習目标。學習者在行動後會接收到環境發來的獎勵,而強化學習的目标就是要最大化在長時間裡的總獎勵。在機器人走迷宮的例子中,機器人花費的時間和能量就是負獎勵,機器人走出迷宮就可以得到正獎勵。

帶你讀《強化學習:原理與Python實作》之一:初識強化學習第1章

政策(policy):決策者會根據不同的觀測決定采用不同的動作,這種從觀測到動作的關系稱為政策。強化學習的學習對象就是政策。強化學習通過改進政策以期最大化總獎勵。政策可以是确定性的,也可以不是确定性的。在機器人走迷宮的例子中,機器人根據目前的政策來決定如何移動。

強化學習試圖修改政策以最大化獎勵。例如,機器人在學習過程中不斷改進政策,使得以後能更快更省事地走出迷宮。

強化學習與監督學習和非監督學習有着本質的差別。

  • 強化學習與監督學習的差別在于:對于監督學習,學習者知道每個動作的正确答案是什麼,可以通過逐漸比對來學習;對于強化學習,學習者不知道每個動作的正确答案,隻能通過獎勵信号來學習。強化學習要最大化一段時間内的獎勵,需要關注更加長遠的性能。與此同時,監督學習希望能将學習的結果運用到未知的資料,要求結果可推廣、可泛化;強化學習的結果卻可以用在訓練的環境中。是以,監督學習一般運用于判斷、預測等任務,如判斷圖檔的内容、預測股票價格等;而強化學習不适用于這樣的任務。
  • 強化學習與非監督學習的差別在于:非監督學習旨在發現資料之間隐含的結構;而強化學習有着明确的數值目标,即獎勵。它們的研究目的不同。是以,非監督學習一般用于聚類等任務,而強化學習不适用于這樣的任務。

1.2 強化學習的應用

基于強化學習的人工智能已經有了許多成功的應用。本節将介紹強化學習的一些成功案例,讓你更直覺地了解強化學習,感受強化學習的強大。

  • 電動遊戲:電動遊戲,主要指玩家需要根據螢幕畫面的内容進行操作的遊戲,包括主機遊戲吃豆人(PacMan,見圖1-2)、PC遊戲星際争霸(StarCraft)、手機遊戲Flappy Bird等。很多遊戲需要得到盡可能高的分數,或是要在多方對抗中獲得勝利。同時,對于這些遊戲,很難獲得在每一步應該如何操作的标準答案。從這個角度看,這些遊戲的遊戲AI需要使用強化學習。基于強化學習,研發人員已經開發出了許多強大的遊戲AI,能夠超越人類能夠得到的最佳結果。例如,在主機Atari 2600的數十個經典遊戲中,基于強化學習的遊戲AI已經在将近一半的遊戲中超過人類的曆史最佳結果。
    帶你讀《強化學習:原理與Python實作》之一:初識強化學習第1章
  • 棋盤遊戲:棋盤遊戲是圍棋(見圖1-3)、黑白翻轉棋、五子棋等桌上遊戲的統稱。通過強化學習可以實作各種棋盤運動的AI。棋盤AI有着明确的目标—提高勝率,但是每一步往往沒有絕對正确的答案,這正是強化學習所針對的場景。Deepmind公司使用強化學習研發出圍棋AI AlphaGo,于2016年3月戰勝圍棋頂尖選手李世石,于2017年5月戰勝排名世界第一的圍棋選手柯潔,引起了全社會的關注。截至目前,最強的棋盤遊戲AI是DeepMind在2018年12月發表的AlphaZero,它可以在圍棋、日本将棋、國際象棋等多個棋盤遊戲上達到最高水準,并遠遠超出人類的最高水準。
帶你讀《強化學習:原理與Python實作》之一:初識強化學習第1章
  • 自動駕駛:自動駕駛問題通過控制方向盤、油門、刹車等裝置完成各種運輸目标(見圖1-4)。自動駕駛問題既可以在虛拟環境中仿真(比如在電腦裡仿真),也可能在現實世界中出現。有些任務往往有着明确的目标(比如從一個指定地點到達另外一個指定地點),但是每一個具體的動作卻沒有正确答案作為參考。這正是強化學習所針對的任務。基于強化學習的控制政策可以幫助開發自動駕駛的算法。
帶你讀《強化學習:原理與Python實作》之一:初識強化學習第1章

1.3 智能體/環境接口

強化學習問題常用智能體/環境接口(Agent-Environment Interface)來研究(見圖1-5)。

智能體/環境接口将系統劃分為智能體和環境兩個部分。

  • 智能體(agent)是強化學習系統中的決策者和學習者,它可以做出決策和接受獎勵信号。一個強化學習系統裡可以有一個或多個智能體。我們并不需要對智能體本身進行模組化,隻需要了解它在不同環境下可以做出的動作,并接受獎勵信号。
  • 環境(environment)是強化系統中除智能體以外的所有事物,它是智能體互動的對象。環境本身可以是确定性的,也可以是不确定性的。環境可能是已知的,也可能是未知的。我們可以對環境模組化,也可以不對環境模組化。

智能體/環境接口的核心思想在于分隔主觀可以控制的部分和客觀不能改變的部分。例如,在工作的時候,我是決策者和學習者。我可以決定自己要做什麼,并且能感覺到獲得的獎勵。我的決策部分和學習部分就是智能體。同時,我的健康狀況、困倦程度、饑餓狀況則是我不能控制的部分,這部分則應當視作環境。我可以根據我的健康狀況、困倦程度和饑餓狀況來進行決策。

注意:強化學習問題不一定要借助智能體/環境接口來研究。

在智能體/環境接口中,智能體和環境的互動主要有以下三個環節:

智能體觀測環境,可以獲得環境的觀測(observation),記為;

智能體根據觀測做出決策,決定要對環境施加的動作(action),記為;

環境受智能體動作的影響,改變自己的狀态(state),記為,并給出獎勵(reward),記為。

在這三個環節中,觀測、動作和獎勵R是智能體可以直接觀測到的。

注意:狀态、觀測、動作不一定是數量(例如标量或矢量),也可以是“感覺到餓”、“吃飯”這樣一般的量。在本書中用無襯線字型表示這樣的量。獎勵總是數量(而且往往是數量中的标量),本書中用襯線字型表示數量(包括标量或矢量)。

絕大多數的強化學習問題是按時間順序或因果順序發生的問題。這類問題的特點是具有先後順序,并且先前的狀态和動作會影響後續的狀态等。例如,在玩電腦遊戲時,遊戲随着時間不斷進行,之前玩家的每個動作都可能會影響後續的局勢。對于這樣的問題,我們可以引入時間名額,記時刻的狀态為,觀測為,動作為,獎勵為Rt。

注意:用智能體/環境接口模組化的問題并不一定要模組化成和時間有關的問題。有些問題一共隻需要和環境互動一次,就沒有必要引入時間名額。例如,以不同的方式投擲一個給定的骰子并以點數作為獎勵,就沒有必要引入時間名額。

在很多任務中,智能體和環境是在離散的時間步驟上互動的,這樣的問題可以将時間名額離散化,模組化為離散時間智能體/環境接口。具體而言,假設互動的時間為。在時刻,依次發生以下事情:

  • 智能體觀察環境得到觀測;
  • 智能體根據觀測決定做出動作;
  • 環境根據智能體的動作,給予智能體獎勵并進入下一步的狀态。

注意:智能體/環境接口問題不一定能時間上離散化。有些問題在時間上是連續的,需要使用偏微分方程來模組化環境。連續時間的問題也可以近似為離散時間的問題。

在智能體/環境接口的基礎上,研究人員常常将強化學習進一步模組化為Markov決策過程。本書第2章會介紹Markov決策過程。

1.4 強化學習的分類

強化學習的任務和算法多種多樣,本節介紹一些常見的分類(見圖1-6)。

帶你讀《強化學習:原理與Python實作》之一:初識強化學習第1章

1.4.1 按任務分類

根據強化學習的任務和環境,可以将強化學習任務作以下分類。

  • 單智能體任務(single agent task)和多智能體任務(multi-agent task):顧名思義,根據系統中的智能體數量,可以将任務劃分為單智能體任務和多智能體任務。單智能體任務中隻有一個決策者,它能得到所有可以觀察到的觀測,并能感覺全局的獎勵值;多智能體任務中有多個決策者,它們隻能知道自己的觀測,感受到環境給它的獎勵。當然,在有需要的情況下,多個智能體間可以交換資訊。在多智能體任務中,不同智能體獎勵函數的不同會導緻它們有不同的學習目标(甚至是互相對抗的)。在本書沒有特别說明的情況下,一般都是指單智能體任務。
  • 回合制任務(episodic task)和連續性任務(sequential task):對于回合制任務,可以有明确的開始狀态和結束狀态。例如在下圍棋的時候,剛開始棋盤空空如也,最後棋盤都擺滿了,一局棋就可以看作是一個回合。下一個回合開始時,一切重新開始。也有一些問題沒有明确的開始和結束,比如機房的資源排程。機房從啟用起就要不間斷地處理各種資訊,沒有明确的結束又重新開始的時間點。
  • 離散時間環境(discrete time environment)和連續時間環境(continuous time environment):如果智能體和環境的互動是分步進行的,那麼就是離散時間環境。如果智能體和環境的互動是在連續的時間中進行的,那麼就是連續時間環境。
  • 離散動作空間(discrete action space)和連續動作空間(continuous action space):這是根據決策者可以做出的動作數量來劃分的。如果決策得到的動作數量是有限的,則為離散動作空間,否則為連續動作空間。例如,走迷宮機器人如果隻有東南西北這4種移動方式,則其為離散動作空間;如果機器人向360°中的任意角度都可以移動,則為連續動作空間。
  • 确定性環境任務(deterministic environment)和非确定性環境(stochastic environ-ment):按照環境是否具有随機性,可以将強化學習的環境分為确定性環境和非确定性環境。例如,對于機器人走固定的某個迷宮的問題,隻要機器人确定了移動方案,那麼結果就總是一成不變的。這樣的環境就是确定性的。但是,如果迷宮會時刻随機變化,那麼機器人面對的環境就是非确定性的。
  • 完全可觀測環境(fully observable environment)和非完全可觀測環境(partially observable environment):如果智能體可以觀測到環境的全部知識,則環境是完全可觀測的;如果智能體隻能觀測到環境的部分知識,則環境是非完全可觀測的。例如,圍棋問題就可以看作是一個完全可觀測的環境,因為我們可以看到棋盤的所有内容,并且假設對手總是用最優方法執行;撲克則不是完全可觀測的,因為我們不知道對手手裡有哪些牌。

1.4.2 按算法分類

從算法角度,可以對強化學習算法作以下分類。

  • 同策學習(on policy)和異策學習(off policy):同策學習是邊決策邊學習,學習者同時也是決策者。異策學習則是通過之前的曆史(可以是自己的曆史也可以是别人的曆史)進行學習,學習者和決策者不需要相同。在異策學習的過程中,學習者并不一定要知道當時的決策。例如,圍棋AI可以邊對弈邊學習,這就算同策學習;圍棋AI也可以通過閱讀人類的對弈曆史來學習,這就算異策學習。
  • 有模型學習(model-based)和無模型學習(model free):在學習的過程中,如果用到了環境的數學模型,則是有模型學習;如果沒有用到環境的數學模型,則是無模型學習。對于有模型學習,可能在學習前環境的模型就已經明确,也可能環境的模型也是通過學習來獲得。例如,對于某個圍棋AI,它在下棋的時候可以在完全了解遊戲規則的基礎上虛拟出另外一個棋盤并在虛拟棋盤上試下,通過試下來學習。這就是有模型學習。與之相對,無模型學習不需要關于環境的資訊,不需要搭建假的環境模型,所有經驗都是通過與真實環境互動得到。
  • 回合更新(Monte Carlo update)和時序差分更新(temporal difference update):回合制更新是在回合結束後利用整個回合的資訊進行更新學習;而時序差分更新不需要等回合結束,可以綜合利用現有的資訊和現有的估計進行更新學習。
  • 基于價值(value based)和基于政策(policy based):基于價值的強化學習定義了狀态或動作的價值函數,來表示到達某種狀态或執行某種動作後可以得到的回報。基于價值的強化學習傾向于選擇價值最大的狀态或動作;基于政策的強化學習算法不需要定義價值函數,它可以為動作配置設定機率分布,按照機率分布來執行動作。
  • 深度強化學習(Deep Reinforcement Learning,DRL)算法和非深度強化學習算法。如果強化學習算法用到了深度學習,則這種強化學習可以稱為深度強化學習算法。

值得一提的是,強化學習和深度學習是兩個獨立的概念。一個學習算法是不是強化學習和它是不是深度學習算法是互相獨立的(見圖1-7)。如果一個算法解決了強化學習的問題,這個算法就是強化學習的算法;如果一個算法用到了深度神經網絡,這個算法就是深度學習算法。一個強化學習算法可以是深度學習算法,也可以不是深度學習算法;一個深度學習算法可以是強化學習算法,也可以不是強化學習算法。對于強化學習算法而言,在問題規模比較小時,能夠獲得精确解;當問題規模比較大時,常常使用近似的方法。深度學習則利用神經網絡來近似複雜的輸入/輸出關系。對于規模比較大的強化學習問題,可以考慮利用深度學習來實作近似。如果一個算法既是強化學習算法,又是深度學習算法,則可以稱它是深度強化學習算法。例如,很多電動遊戲AI需要讀取螢幕顯示并據此做出決策。對螢幕資料的解讀可以采用卷積神經網絡這一深度學習算法。這時,這個AI就用到了深度強化學習算法。

帶你讀《強化學習:原理與Python實作》之一:初識強化學習第1章

1.5 如何學習強化學習

本節介紹強化學習需要的預備知識,以及如何學習強化學習,本節中還提供了一些參考資料。

1.5.1 學習路線

在正式學習強化學習前,需要了解一些預備的知識。在理論知識方面,你需要會機率論,了解機率、條件機率、期望等概念。要學習強化學習的最新進展,特别是AlphaGo等明星算法,你需要學習微積分和深度學習。在學習過程中往往需要程式設計實作來加深對強化學習的了解。這時你需要掌握一門程式設計語言。本書将使用Python 3作為程式設計語言。對于第6章到第9章的深度學習算法,配套的實作将基于深度學習庫TensorFlow。本書不介紹這些預備知識。

要學習強化學習理論,需要了解強化學習的概念,并了解強化學習的模組化方法。目前絕大多數的研究将強化學習問題模組化為Markov決策過程。Markov決策過程有幾種固定的求解模式。規模不大的問題可以求得精确解,規模太大的問題往往隻能求得近似解。對于近似算法,可以和深度學習結合,得到深度強化學習算法。最近引起廣泛關注的明星算法,如AlphaGo使用的算法,都是深度強化學習算法。本書第2章介紹Markov決策過程,第3章到第9章介紹Markov決策問題的求解,其中也涵蓋了大多經典的深度強化學習算法。

在強化學習的學習和實際應用中,難免需要通過程式設計來實作強化學習算法。強化學習算法需要運作在環境中。Python擴充庫Gym是最廣泛使用的強化學習實驗環境。本書1.6節将介紹強化學習實驗環境Gym庫的安裝。強化學習算法需要和環境互動。本書各章節在介紹理論知識的同時,都會涉及強化學習算法的實作。本書第10章到第12章通過一些比較大型的例子來示範強化學習的綜合應用。

1.5.2 學習資源

本書作為一套完整的強化學習教程,将引領讀者實作從入門到精通。同時,如果還希望閱讀英文教程對照參考,推薦Richard Sutton等在2018年出版的《Reinforcement Learning: An Introduction(第2版)》。該書和本書使用相同的數學符号和技術術語,和本書完全相容。

1.6 案例:基于Gym庫的智能體/環境互動

強化學習算法需要在難易适中的合适環境裡才能發揮出其強大的功能。在本節中,我們将安裝和應用影響力巨大的強化學習環境庫—Gym庫。

Gym庫(

https://gym.openai.com/

)是OpenAI推出的強化學習實驗環境庫。它用Python語言實作了離散時間智能體/環境接口中的環境部分。除了依賴少量商業庫外,整個項目是開源免費的。

Gym庫内置上百種實驗環境,包括以下幾類。

  • 算法環境:包括一些字元串處理等傳統計算機算法的實驗環境。
  • 簡單文本環境:包括幾個用文本表示的簡單遊戲。
  • 經典控制環境:包括一些簡單幾何體的運動,常用于經典強化學習算法的研究。
  • Atari遊戲環境:包括數十個Atari 2600遊戲,具有像素化的圖形界面,希望玩家盡可能争奪高分。
  • 二維方塊(Box2D)環境:包括一些連續性控制的任務。
  • MuJoCo環境:利用收費的MuJoCo運動引擎進行連續性控制任務。
  • 機械控制環境:關于機械臂的抓取和控制等。

Gym環境清單可參見網址

https://gym.openai.com/envs/

本節我們将安裝并使用Gym庫,通過一個完整的執行個體來示範智能體與環境的互動。

1.6.1 安裝Gym庫

Gym庫在Windows系統、Linux系統和macOS系統上都可以安裝。本節與你一起在Anaconda 3環境裡安裝Gym庫。

請在安裝Gym前更新Python和pip。更新pip的指令是:

pip install --upgrade pip

安裝Gym可以選擇最小安裝和完整安裝。最小安裝的方法是在安裝環境(如Anaconda 3的管理者模式)裡輸入下列指令:

pip install gym

但是,這樣安裝的Gym庫隻包括少量的内置環境,如算法環境、簡單文字遊戲環境和經典控制環境。在此可以先使用這些環境。Gym庫完整安裝的方法見第10章。

注意:本書後續章節的實戰環節将反複使用Gym庫,請務必安裝。前幾章配套的案例隻需要用到Gym的最小安裝,而最後的綜合案例需要依賴最小安裝以外的完整安裝。本書各章節配套執行個體需要使用的Gym庫範圍見表1-1。

帶你讀《強化學習:原理與Python實作》之一:初識強化學習第1章

1.6.2 使用Gym庫

本節介紹Gym庫的使用。

要使用Gym庫,當然首先要導入Gym庫。導入Gym庫的方法顯然是:

import gym

在導入Gym庫後,可以通過make() 函數來得到環境對象。每一個環境都有一個ID,它是形如“Xxxxx-vd”的Python字元串,如'CartPole-v0'、'Taxi-v2'等。環境名稱最後的部分表示版本号,不同版本的環境可能有不同的行為。使用取出環境'CartPole-v0'的代碼為:

env = gym.make('CartPole-v0')

想要檢視目前Gym庫已經注冊了哪些環境,可以使用以下代碼:

帶你讀《強化學習:原理與Python實作》之一:初識強化學習第1章

每個環境都定義了自己的觀測空間和動作空間。環境env的觀測空間用env.observa-tion_space表示,動作空間用env.action_space表示。觀測空間和動作空間既可以是離散空間(即取值是有限個離散的值),也可以是連續空間(即取值是連續的)。在Gym庫中,離散空間一般用gym.spaces.Discrete類表示,連續空間用gym.spaces.Box類表示。例如,環境'MountainCar-v0'的觀測空間是Box(2,),表示觀測可以用2個float值表示;環境'MountainCar-v0'的動作空間是Dicrete(3),表示動作取值自。對于離散空間,gym.spaces.Discrete類執行個體的成員n表示有幾個可能的取值;對于連續空間,Box類執行個體的成員low和high表示每個浮點數的取值範圍。

接下來使用環境對象env。首先,初始化環境對象env,代碼為:

env.reset()

該調用能傳回智能體的初始觀測,是np.array對象。

環境初始化後就可以使用了。使用環境的核心是使用環境對象的step()方法。step()方法接收智能體的動作作為參數,并傳回以下4個參數。

  • 觀測(observation):np.array對象,表示觀測,和env.reset()傳回值的意義相同。
  • 獎勵(reward):float類型的值。
  • 本回合結束訓示(done):bool類型的數值。Gym庫裡的實驗環境大多都是回合制的。這個傳回值可以訓示在目前動作後遊戲是否結束。如果遊戲結束了,可以通過“env.reset()”開始下一回合。
  • 其他資訊(info):dict類型的值,含有一些調試資訊。不一定要使用這個參數。

env.step() 的參數需要取自動作空間。可以使用以下語句從動作空間中随機選取一個動作:

action = env.action_space.sample()

每次調用env.step() 隻會讓環境前進一步。是以,env.step()往往放在循環結構裡,通過循環調用來完成整個回合。

在env.reset()或env.step()後,可以用以下語句以圖形化的方法顯示目前環境。

env.render()

使用完環境後,可以使用下列語句關閉環境:

env.close()

注意:如果繪制了實驗的圖形界面視窗,那麼關閉該視窗的最佳方式是調用env.close()。試圖直接關閉圖形界面視窗可能會導緻記憶體不能釋放,甚至會導緻當機。

測試智能體在Gym庫中某個任務的性能時,學術界一般最關心100個回合的平均回合獎勵。至于為什麼是100個回合而不是其他回合數(比如128個回合),完全是習慣使然,沒有什麼特别的原因。對于有些環境,還會指定一個參考的回合獎勵值,當連續100個回合的獎勵大于指定的值時,就認為這個任務被解決了。但是,并不是所有的任務都指定了這樣的值。對于沒有指定值的任務,就無所謂任務被解決了或者沒有被解決。

1.6.3 小車上山

本節通過一個完整的例子來學習如何與Gym庫中的環境互動。本節選用的例子是經典的控制任務:小車上山(MountainCar-v0)。本節主要關心互動的Python代碼,而不詳細介紹這個控制任務及其求解。任務的具體描述和求解方式會在第6章中介紹。

首先我們來看看這個任務的觀測空間和動作空間,可以通過執行代碼清單1-1實作。

帶你讀《強化學習:原理與Python實作》之一:初識強化學習第1章

這段代碼的運作結果為:

觀測空間 = Box(2,)

動作空間 = Discrete(3)

觀測範圍 = [-1.2 -0.07] ~ [0.6 0.07]

動作數 = 3

運作結果告訴我們,觀測空間是形狀為(2,)的浮點型np.array,而動作空間是取的int型數值。

接下來考慮智能體。智能體往往是我們自己實作的。代碼清單1-2給出了一個智能體類—BespokeAgent類。智能體的decide()方法實作了決策功能,而learn()方法實作了學習功能。代碼清單1-2給出的BespokeAgent類是一個比較簡單的類,它隻能根據給定的數學表達式進行決策,并且不能有效學習。是以它并不是一個真正意義上的強化學習智能體類。但是,用于示範智能體和環境的互動已經足夠了。

帶你讀《強化學習:原理與Python實作》之一:初識強化學習第1章

接下來我們試圖讓智能體與環境互動。代碼清單1-3中的play_once() 函數可以讓智能體和環境互動一個回合。這個函數有4個參數。

  • 參數env是環境類。
  • 參數agent是智能體類。
  • 參數render是bool類型變量,訓示在運作過程中是否要圖形化顯示。如果函數參數render為True,那麼在互動過程中會調用env.render()以顯示圖形化界面,而這個界面可以通過調用env.close()關閉。
  • 參數train是bool類型的變量,訓示在運作過程中是否訓練智能體。在訓練過程中應當設定為True,以調用agent.learn()函數;在測試過程中應當設定為False,使得智能體不變。

這個函數有一個傳回值episode_reward,是float類型的數值,表示智能體與環境互動一個回合的回合總獎勵。

帶你讀《強化學習:原理與Python實作》之一:初識強化學習第1章
帶你讀《強化學習:原理與Python實作》之一:初識強化學習第1章

借助于代碼清單1-1給出的環境、代碼清單1-2給出的智能體和代碼清單1-3給出的互動函數,我們可以用下列代碼讓智能體和環境互動一個回合,并在互動過程中圖形化顯示。互動完畢後,可用env.close()語句關閉圖形化界面。

帶你讀《強化學習:原理與Python實作》之一:初識強化學習第1章

為了系統評估智能體的性能,下列代碼求出了連續互動100回合的平均回合獎勵。小車上山環境有一個參考的回合獎勵值,如果當連續100個回合的平均回合獎勵大于,則認為這個任務被解決了。BespokeAgent類對應的政策的平均回合獎勵大概就在左右。

帶你讀《強化學習:原理與Python實作》之一:初識強化學習第1章

1.7 本章小結

本章介紹了強化學習的概念和應用,學習了強化學習的分類,講解了強化學習的學習路線和學習資源。我們還學習了強化學習環境庫Gym的使用。後續幾個章節将介紹強化學習的理論,并且利用Gym庫實踐相關理論。

本章要點

帶你讀《強化學習:原理與Python實作》之一:初識強化學習第1章

強化學習是根據獎勵信号以改進政策的機器學習方法。政策和獎勵是強化學習的核心元素。強化學習試圖找到最大化總獎勵的政策。

帶你讀《強化學習:原理與Python實作》之一:初識強化學習第1章

強化學習不是監督學習,因為強化學習的學習過程中沒有參考答案;強化學習也不是非監督學習,因為強化學習需要利用獎勵信号來學習。

帶你讀《強化學習:原理與Python實作》之一:初識強化學習第1章

強化學習的應用包括棋牌運動、自動控制、電動遊戲。

帶你讀《強化學習:原理與Python實作》之一:初識強化學習第1章

強化學習任務常用智能體/環境接口模組化。學習和決策的部分稱為智能體,其他部分稱為環境。智能體向環境執行動作,從環境得到獎勵和回報。

帶你讀《強化學習:原理與Python實作》之一:初識強化學習第1章

按智能體的數量分,強化學習任務可以分為單智能體任務和多智能體任務。按環境是否有明确的終止狀态分,強化學習任務可以分為回合制任務和連續性任務。按照時間是否可以離散可以分為離散時間和連續時間。動作空間可以劃分為離散動作空間和連續動作空間。環境可以劃分為确定性環境和非确定性環境。按照環境是否完全可以觀測分,可以分為完全可觀測環境和非完全可觀測環境。

帶你讀《強化學習:原理與Python實作》之一:初識強化學習第1章

強化學習算法可以按照學習的政策和決策的行為政策是否相同分為同策學習和異策學習。按照是否需要環境模型,分為有模型學習和無模型學習。按照政策更新時機可以分為回合更新和時序差分更新。更新價值函數的學習方法稱為基于價值的學習,直接更新政策的機率分布的學習方法稱為基于政策的學習。如果一個強化學習算法用到了深度學習,則它是深度強化學習算法。

帶你讀《強化學習:原理與Python實作》之一:初識強化學習第1章

Python擴充庫Gym是OpenAI推出的免費強化學習實驗環境。Gym庫的使用方法是:使用env = gym.make(環境名)取出環境,使用env.reset()初始化環境,使用env.step(動作)執行一步環境,使用env.render()顯示環境,使用env.close()關閉環境。