從強化學習基本概念到Q學習的實現,打造自己的迷宮智能體

2020-12-23 機器之心Pro

選自Medium作者:Aneek Das機器之心編譯參與:蔣思源

近年以來,強化學習在人工智慧所充當的角色越來越重要了,很多研究機構和大學都將強化學習與深度學習相結合打造高性能的系統。因此,本文注重描述強化學習的基本概念與實現,希望能為讀者介紹這一機器學習分支的巨大魅力。

強化學習其實也是機器學習的一個分支,但是它與我們常見監督學習和無監督學習又不太一樣。強化學習旨在選擇最優決策,它講究在一系列的情景之下,通過多步恰當的決策來達到一個目標,是一種序列多步決策的問題。該學習算法能幫助我們公式化表達生物體以獎勵為動機(reward-motivated)的行為。比如說,讓一個孩子坐下來安靜地為考試而複習是十分困難的,但如果你在他每次學完一章時獎勵一塊巧克力,那麼他就會明白只有保持學習才能獲得獎勵,因此也就有動力複習備考。而現在,如果這個孩子在備考時沒有明確的方法,他可能會花大量時間學習一個章節而不能及時完成課程大綱。所以我們需要小孩有效率地學,因此如果小孩在一小時內完成某章節,那麼就獎勵大塊巧克力,而超過 1 小時那就只獎勵小塊巧克力。現在他不僅會學習,同時大腦會思考設計出更快完成章節學習的方法。

在這個例子中,孩子就是代表著訓練實體(Agent :與環境交互的對象)。獎勵系統和考試就代表著環境(Environment)。而章節就可以類比為強化學習的狀態(States)。所以孩子們就需要決定哪些章節更重要(即計算每一個章節的值),這也就是價值函數(Value-Function)所做的事。並且小孩每次從一個狀態到另一個狀態就能收到獎勵,而他隨時間完成章節的方式就是策略(Policy)。

強化學習和其他機器學習範式有什麼不同:

沒有大量標註數據進行監督,所以也就不能由樣本數據告訴系統什麼是最可能的動作,訓練主體只能從每一步動作得出獎勵。因此系統是不能立即得到標記的,而只能得到一個反饋,也可以說強化學習是一種標記延遲的監督學習。時間序列的重要性,強化學習不像其他接受隨機輸入的學習方法,其更注重序列型數據,並且下一步的輸入經常依賴於前一狀態的輸入。延遲獎勵的概念,系統可能不會在每步動作上都獲得獎勵,而只有當完成整個任務時才會獲得獎勵。訓練實體的動作影響下一個輸入。如你可以選擇向左走或向右走,那麼當選擇的方向不同時,下一個時間步的輸入也會不同。即選擇不同的動作進入不同的狀態後,當前可選的動作又不一樣。

總的來說,強化學習的目標就是要尋找一個能使得我們獲得最大累積獎賞的策略。因此,強化學習實際上和我們人類與環境的交互方式類似,是一套非常通用的框架,可以用來解決各種各樣的人工智慧的問題。

如上所示,在任何時間步(t),訓練實體會得到一個環境的觀察值(實例)。然後它會從所有可行動作中採取一種,並獲得環境的獎勵和下一個觀察值。所以我們需要為訓練實體提供算法,其所作出的決策應該是以最大化提升結束時的全部獎勵為目的。

歷史與狀態

歷史(History)是描述在環境和訓練實體之間發生的所有事件的變量集合。

訓練實體必須將歷史映射到一個確切的動作中。對於環境,其必須將歷史映射到需要發送的下一組觀察值。因此,訓練實體必須持續保持並儲存大量的信息,這將佔用大量的儲存空間和處理時間。

所以,我們想創建歷史的抽象表徵,它可以儲存足夠的信息以便我們可以選擇下一步動作,這也就是狀態的概念。所以基本上系統的輸出就取決於我們怎樣定義狀態。

在上式中,S 表徵狀態、f 表徵一種能對時間步「t」的歷史求和的函數。

上述表達式中,前一個代表訓練實體的內部表徵,其可以對歷史求和並允許在以後採取動作。而後一個代表環境的內部表徵,其允許發送下一個觀察值。

馬爾可夫狀態(Markov State)

馬爾可夫狀態使用抽象形式儲存過去所有的信息。所以如果訓練實體預測未來的動作,其並不會使用全部的歷史,而是使用馬爾可夫狀態。本質上來說,馬爾可夫狀態儲存的信息並不比歷史少。

所以在給定狀態 St 的情況下求未來狀態 St+1 的概率和給定前面所有狀態求 St+1 的概率相同。這是因為狀態 St 已經將前面所有狀態的信息都嵌入了其中。

序列的遊戲

現在假設有個遊戲發生在餐廳裡,餐廳提供三種食物:甜甜圈、飲料和三明治。現在顧客要求服務員帶五樣食品,且服務員會按順序依次提供這五樣食品。如果顧客喜歡這些食物的順序,那麼服務員將得到獎勵,否則就會得到懲罰。現在服務員第一次提供食物的順序如 S1 所示,他得到了獎勵。

然而,當下一次服務員又以另一個順序帶來五份食品(S2)時,他得到了懲罰。那麼現在第三個序列 S3 的輸出是什麼,獎勵還是懲罰?

這裡的解決方案取決於先前狀態的定義。如果說狀態的定義僅僅只是採用食物序列最後三項的順序,那麼根據 S1 最後三項的結果,S3 序列能獲得獎勵。然而如果根據每個食物出現的數量來定義,那麼 S3 最有可能得到懲罰,因為 S2 和 S3 每一份食物的數量都相同。所以本質上系統的輸出是依賴於狀態的定義。

環境

如果你在電腦上玩自己編寫的象棋,那麼你就很清楚計算機是如何分析怎樣下棋。所以基本上你知道在給定的行動下電腦確定的是哪一步棋。這是一種完全可觀察的環境(Fully Observable Environment)。

現在如果你在玩由其他人編寫的象棋遊戲,你並不知道電腦下一步會怎麼下。所以現在你能做的就是在下一步棋後觀察電腦的下棋。這是一種部分可觀察環境(Partially Observable Environment)。在這種情況下,你能做的就是預測遊戲的內部動態,並期望能對其內部狀態能有一個足夠好的預測。

另外,根據周志華的《機器學習》,我們需注意「機器」與「環境」的界限。例如在種西瓜任務中,環境是西瓜生長的自然世界;在下棋對弈中,環境是棋盤與對手;在機器人控制中,環境是機器人的軀體與物理世界。總之,在環境中狀態的轉移、獎賞的返回是不受機器控制的,機器只能通過選擇要執行的動作來影響環境,也只能通過觀察轉移後的狀態和返回的獎賞來感知環境。

最後總結一下強化學習的概念,強化學習的輸入 是:

狀態 (States) = 環境,例如迷宮的每一格就是一個狀態動作 (Actions) = 在每個狀態下,有什麼行動是容許的獎勵 (Rewards) = 進入每個狀態時,能帶來正面或負面的價值 (utility)

而輸出就是:

策略 (Policy) = 在每個狀態下,你會選擇哪個行動?

如上圖所示,強化學習的思想主要:即訓練實體 (Agent) 不斷地採取動作 (action), 之後轉到下一個狀態 (State), 並且獲得一個獎勵 (reward), 從而進一步更新訓練實體。

在了解了強化學習的基本概念後,我們就可以進一步理解 Q 學習(Q-Learning)的原理和實現。

下面我們將從迷宮尋寶遊戲開始了解 Q 學習的基本概念。該遊戲規則如下:

該遊戲從一個給定的位置開始,即初始狀態(starting state)。在每一個狀態下訓練實體都可以保留原地或選擇向上、下、左、右移動,但不能穿越迷宮的邊界。每個動作都將使得訓練實體進入不同的單元格(即不同的狀態)。現在在某個單元格有一個寶箱(即目標狀態)。此外,迷宮的某些位置/狀態有蛇。因此訓練實體的目標就是通過尋找一條沒有蛇的路徑從起始狀態走到目標狀態。

現在當我們在網格中(即環境中)放置一個訓練實體,它首先會開始探索。它最開始不知道蛇是什麼,也不知道什麼是寶箱或寶箱在哪。所以我們需要給定訓練主體蛇和寶箱的概念,並在每一步動作後給予一定的獎勵。對於每一塊有蛇的單元格(狀態),我們給予-10 的獎勵,而對於寶藏,我們給予+10 的獎勵。現在我們希望訓練實體儘快完成任務(採取最短路徑),因此我們給予其他狀態-1 的獎勵。最後我們給定訓練實體的目標就是最大化最後累積得分。隨著訓練實體的探索,它會知道蛇是有害的,寶藏是有益的,並且它需要儘可能快地得到寶箱。上圖中「-」就表示從起始狀態到目標狀態最短的路徑。

Q 學習(Q-Learning)就嘗試在給定狀態下學習當前值,並採取特定的動作。

現在我們設計一張表格,其中每行是訓練實體的狀態,而每列是訓練實體可能採取的動作。所以上例有 16×5 種可能的狀態-行動對,其中每種狀態都是迷宮中的一個單元格。

首先我們初始化矩陣(上文所述的 16×5 表格)為零矩陣,然後根據不同動作所獲得的獎勵更新矩陣的元素。當然,更新該矩陣的方法為計算貝爾曼方程(Bellman Equation):

「S」代表當前狀態,「a」代表訓練實體在當前狀態下所採取的動作,「S'」代表採取該動作所產生的狀態,「r'」是採取該動作所得到的獎勵。貼現係數(discount factor)「γ」決定了訓練實體對未來獎勵的重視程度,γ越大,訓練實體就會越重視以往經驗,而γ越小,訓練實體只重視眼前的利益。如果說訓練實體向遠離目標狀態的狀態運動,而該狀態遇到蛇的概率減少,那麼實時獎勵將減少,未來獎勵將增加,訓練實體更注重未來的獎勵。

我們將每次迭代(訓練主體的嘗試動作)作為一個 episode。對於每一次 episode,訓練主體將嘗試到達目標狀態,並且對於每一次動作,Q 矩陣元素都會進行一次更新。

現在讓我們了解一下 Q 矩陣是如何計算的(為了更簡潔,我們採用更小的 2×2 迷宮):

Q 矩陣的初始狀態如下(每行代表一個狀態,每列代表一個動作):

U—向上走, D—向下走, L—向左走, R—向右走

獎勵矩陣如下所示:

其中 E 代表空值(NULL,訓練主體不能採取該動作)

算法:

初始化 Q 矩陣為零矩陣,設定「γ」值,完成獎勵矩陣。對於每一 episode,選擇一個隨機起始狀態(在這個案例中,我們嚴格限制起始狀態為-1)。在當前狀態(S)的所有可能動作中選擇一個。作為該動作(a)的結果,訓練主體移往下一個狀態(S')。對於狀態(S')產生的所有可能動作,選擇 Q 值最大的動作。使用貝爾曼方程(Bellman Equation)更新 Q 矩陣。將下一個狀態設置為當前狀態。如果到達目標狀態,結束算法。

我們可以從以下一段偽代碼進一步理解:

現在假設訓練主體從狀態 1 開始,其可以採取動作 D 或 R。如果採取了動作 D,那麼訓練主體到達狀態 3(蛇),並可以採取動作 U 或 R。現在取值γ = 0.8,那麼方程有:

Q(1,D) = R(1,D) + γ*[max(Q(3,U) & Q(3,R))]

Q(1,D) = -10 + 0.8*0 = -10

其中,因為 Q 矩陣還沒有更新,max(Q(3,U) & Q(3,R)) = 0。設定設定踩上蛇的獎勵為-10。現在新的 Q 矩陣的值就如下所示:

現在,狀態 3 為當前狀態,從狀態 3 採取了動作 R。訓練主體就到達狀態 4,並其可以採取動作 U 或 L。

Q(3,R) = R(3,R) + 0.8*[max(Q(4,U) & Q(4,L))]

Q(3,R) = 10 + 0.8*0 = 10

所以,現在訓練主體到達目標狀態 4。接下來終止該進程,並進行更多的訓練直到訓練主體理解了所有狀態和動作,且所有的 Q 矩陣元素成為常數。這也就意味為訓練主體已經嘗試了所有的狀態-動作對。

這一過程的 Python 實現:

最後 Q 矩陣的輸出:

註:為便於理解,機器之心在原文基礎上進行了擴展,原文連結如下:https://medium.com/becoming-human/the-very-basics-of-reinforcement-learning-154f28a79071

相關焦點

  • 強化學習——Q Learning 簡介
    在之前的文章中已經介紹過了,強化學習就是讓智能體(Agent),在與環境的互動過程學習解決問題的最佳路徑的過程。強化學習通常包括這麼幾個重要概念:狀態(State (S))動作(Action(A))獎勵(Reward(R))下面以一個格子世界的例子來解釋這幾個概念,並介紹一下Q Learning是什麼:上圖紅色方框就是我們的智能體,任務是要在4x4的迷宮中找到黃色圓圈的寶藏,並學習到達寶藏的最佳路徑。
  • 深度學習第56講:強化學習簡介與Q-Learning實例
    因為強化學習發展到現在,早已結合了神經網絡迸發出新的活力,強化學習結合深度學習已經形成了深度強化學習(Deep Reinforcement Learning)這樣的新領域,因為強化學習和深度學習之間的關係以及其本身作為人工智慧的一個重要方向,我們都是有必要在系列筆記裡體現一下的。
  • 【強化學習實戰】基於gym和tensorflow的強化學習算法實現
    1新智元推薦【新智元導讀】知乎專欄強化學習大講堂作者郭憲博士開講《強化學習從入門到進階》,我們為您節選了其中的第二節《基於gym和tensorflow的強化學習算法實現》,希望對您有所幫助。同時,由郭憲博士等擔任授課教師的深度強化學習國慶集訓營也將於 10 月 2 日— 6 日在北京舉辦。
  • 深度強化學習核心技術實戰培訓班
    3、掌握多智能體深度強化學習。4、掌握多任務深度強化學習。5、掌握強化學習應用領域Gym Retro遊戲平臺、機器人控制、計算機視覺、自然語言處理。6、實現Gym、Ray仿真環境。7、實際體驗Q Learning實驗、DQN實驗、DDPG實驗。8、為複雜系統的感知決策問題提供解決思路。
  • 深度強化學習-深度Q網絡(DQN)介紹
    強化學習為Agent定義了環境,來實現某些動作以最大化獎勵(這些動作根據policy採取)。對Agent的優化行為的基礎由Bellman方程定義,這是一種廣泛用於求解實際優化問題的方法。為了解決Bellman優化問題,我們使用了一種動態編程的方法。
  • 入門 | 從Q學習到DDPG,一文簡述多種強化學習算法
    雖然已經有大量的強化學習算法,但似乎並沒有什麼文章對它們進行全面比較。每次需要決定將哪些算法應用於特定的任務時,都讓我很糾結。本文旨在通過簡要討論強化學習的設置來解決這個問題,並簡要介紹一些眾所周知的算法。1.
  • 強化學習總體介紹-初步搭建強化學習理論體系(一)
    David Silver系列的筆記.本講會對強化學習整體做一個介紹,也會介紹強化學習中常用的概念,幫助讀者理解,看完本文只需要建立起一個概念體系就行,不需要深究細節,細節在後面會展開說明.目錄關於強化學習強化學習在各種領域都有著它的應用,比如:(1)在計算機科學領域,強化學習是一種機器學習的算法(2)在數學領域,強化學習體現在運籌學的研究(3)在工程師領域,強化學習則體現在最優控制理論 等等.可以說機器學習有三個分支
  • 機器學習系列(二):機器人是如何走出迷宮的?
    在這些設置和條件的情況下,機器人如何能夠通過自學習走出迷宮,也就是說,從迷宮的右上角出來?這是一個典型的強化學習(reinforcement learning)的例子。它直接將機器人的行動和產生的結果聯繫起來,而不需要機器人學習一個複雜的行動和結果的關係。機器人基於行動的獎賞和懲罰來學習如何走出迷宮。當機器人的移動造成了撞到障礙,那麼它收到懲罰-1分。
  • 強化學習系列案例 | 利用Q-learning求解懸崖尋路問題
    快速獲取案例方式:數據酷客公眾號內發送「強化學習」。❞懸崖尋路問題(CliffWalking)是強化學習的經典問題之一,智能體最初在一個網格的左下角中,終點位於右下角的位置,通過上下左右移動到達終點,當智能體到達終點時遊戲結束,但是空間中存在「懸崖」,若智能體進入「懸崖」則返回起點,遊戲重新開始。
  • 深度強化學習從入門到大師:通過Q學習進行強化學習(第二部分)
    深度強化學習從入門到大師:通過Q學習進行強化學習(第二部分)現在我們需要一次又一次地這樣做,直到學習停止。我們製作了一個視頻,我們實現了一個學習與Numpy一起玩Taxi-v2的Q學習代理。使用numpy和OpenAI Taxi-v2?進行Q學習(教程)現在我們知道Q-Learning是如何工作的,我們將逐步實現Q學習算法。代碼的每個部分在下面的Jupyter筆記本中都能找到。
  • 教程 | 深度Q學習:一步步實現能玩《毀滅戰士》的智能體
    機器之心也曾發布過很多介紹強化學習基本理論和前沿進展的文章,比如《專題 | 深度強化學習綜述:從 AlphaGo 背後的力量到學習資源分享(附論文)》。近日,深度學習工程師 Thomas Simonini 在 freeCodeCamp 上發表了介紹深度強化學習的系列文章,已發布的三篇分別介紹了強化學習基本概念、Q 學習以及在《毀滅戰士》遊戲上開發智能體的過程。
  • 強化學習開篇:Q-Learning原理詳解
    ,特開此篇進行強化學習系列算法介紹。目錄1.強化學習是什麼強化學習並不是某一種特定的算法,而是一類算法的統稱,與有監督學習、無監督學習共稱為機器學習的三大分支。針對強化學習最有名的應用應該是近幾年的Alpha go,機器虛擬棋手首次戰勝了棋界高手(下圖即為對戰截圖)。
  • 【深度強化學習】專業解讀「深度強化學習「:從AlphaGo到AlphaGoZero
    環境接收該動作並轉移到下一狀態st+1,智能體接收環境反饋回來的獎賞rt並根據策略選擇下一步動作。強化學習不需要監督信號,在模型未知的環境中平衡探索和利用,其主要算法有Q學習,策略梯度等。Q學習是強化學習最重要的算法之一,其主要更新公式為:其中α是學習率,γ是折扣因子,方括號內表示的是TD誤差。
  • 入門 | 通過 Q-learning 深入理解強化學習
    在這篇文章中,你將學到:(1)Q-learning 的概念解釋和算法詳解;(2)通過 Numpy 實現 Q-learning。那麼問題來了:如何才能夠創建這樣的智能體呢?下面我將介紹第一個策略。假設智能體試圖走遍每一個方塊,並且將其著色。綠色代表「安全」,紅色代表「不安全」。
  • ——《強化學習》從基礎概念、核心原理到應用案例(文末贈書)
    通過本書,讀者可以從零起步了解並掌握強化學習算法,並且能夠快速選擇合適的算法去解決實際問題。更進一步,通過學習本書,讀者能夠豐富對人類自身的認識,並啟發對人機智能之爭更深一層的思考與探索。書中全面系統地描述了強化學習的起源、背景和分類,各類強化學習算法的原理、實現方式以及各算法間的關係,為讀者構建了一個完整的強化學習知識體系;同時包含豐富的經典案例,如各類迷宮尋寶、飛翔小鳥、撲克牌、小車爬山、倒立擺、鐘擺、多臂賭博機、五子棋、AlphaGo、AlphaGo Zero、AlphaZero等,通過給出它們對應的詳細案例說明和代碼描述,讓讀者深度理解各類強化學習算法的精髓。
  • 【活動回顧】用TensorFlow做強化學習
    reward的一個循環,在這個循環之外,knowledge就是給強化學習baseknowledge的基本信息,包括model and planning。這是我們算法的一個細節部分,同樣我們也可以用一些算法來輔助我們強化學習更高效準確的運行,比如一些非監督學習,能夠讓我們環境理解的更好;比如attention and memory一些回放機制可以幫助我們讓強化學習獲得一些性能上的提升;比如multi-agent RL是可以幫我們實現一個多目標多代理的執行,有效的幫我們提高強化學習的運行速度的。最外層就是我們強化學習的一些應用模塊。
  • ...Atari能走迷宮,牛津大學的新型強化學習方法有多牛? | ICLR 2017
    所有這些任務都有一個共同的代表,就像無監督學習一樣,在沒有外在回報的情況下繼續發展。 研究者還介紹了一種將這種表徵重點放在外在回報上的新機制,使學習能夠快速適應與實際任務最相關的方面。 該智能體具有顯著優於在Atari上的目前最先進的技術,平均有880%的專業人員表現,以及在具有挑戰性的第一人稱三維迷宮任務中,平均學習加速10×,平均達到87% 迷宮專家的人類表現。
  • 強化學習和馬爾可夫過程的基本概念
    機器學習一共有三個分支,有監督學習、無監督學習和強化學習。強化學習是系統從環境學習以使得獎勵最大的機器學習。強化學習和有監督學習的不同在於教師信號。強化學習的教師信號是動作的獎勵,有監督學習的教師信號是正確的動作。
  • 玩轉Atari能走迷宮,牛津大學的新型強化學習方法有多牛?|ICLR2017
    所有這些任務都有一個共同的代表,就像無監督學習一樣,在沒有外在回報的情況下繼續發展。 研究者還介紹了一種將這種表徵重點放在外在回報上的新機制,使學習能夠快速適應與實際任務最相關的方面。 該智能體具有顯著優於在Atari上的目前最先進的技術,平均有880%的專業人員表現,以及在具有挑戰性的第一人稱三維迷宮任務中,平均學習加速10×,平均達到87% 迷宮專家的人類表現。
  • 獨家 | 使用Python的OpenAI Gym對Deep Q-Learning的實操介紹(附學習資源)
    所以當我讀到DeepMind提出的不可思議的算法(如AlphaGo和AlphaStar)時,我被吸引了。我想學習如何在我自己的機器上製造這些系統。這讓我進入了深度強化學習(Deep RL)的世界。即使你不喜歡玩遊戲,深度強化學習也很重要。只用看當前使用深度強化學習進行研究的各種功能就知道了: