構建強化學習系統,你需要先了解這些背景知識

 2017-11-13 12:11:00.0

原標題:構建強化學習系統,你需要先了解這些背景知識

強化學習(RL)是關於序列決策的一種工具,它可以用來解決科學研究、工程文理等學科的一系列問題,它也是圍棋程序 AlphaGo 的重要組成部分。本文旨在分享 85 頁強化學習課本中最重要的內容,我們從最基礎的馬爾科夫決策過程開始一步步構建形式化的強化學習框架,然後再詳細探討貝爾曼方程以打好強化學習的基礎。當然,如果你想更全面地瞭解這一主題,建議閱讀 Richard Sutton 和 Andrew Barto 的著作《Reinforcement Learning: An Introduction》。

監督學習 vs 評估學習

對於很多感興趣的問題,監督學習無法提供我們需要的靈活性。監督學習和強化學習之間的主要區別在於收到的反饋是評估性的還是指導性的。指導性反饋提示如何達到目標,而評估性反饋告訴你達到目標的程度。監督學習一般是基於指導性反饋來解決問題,而強化學習則基於評估性反饋解決問題。圖像分類是一個帶有指導性反饋的監督問題,當算法嘗試分類特定數據時,它將從指導性反饋中瞭解到哪個是真正的類別。而評估性反饋僅僅告訴你目標的達成的程度,如果你使用評估性反饋訓練分類器,那麼你的分類器可能會說「我認爲這是一隻倉鼠」,然後它將得到 50 分。但是,由於沒有任何語境信息,我們不知道這 50 分是什麼。我們需要進行其他分類,探索這 50 分代表我們是正確還是錯誤的。或許 10000 是一個更好的分值,但是我們還是不知道它是什麼,除非我們嘗試對其他數據點進行分類。

強化學習說:猜到是倉鼠會收到兩個金色星星和一個笑臉,而猜測是沙鼠,則會收到一個銀色星星和一個大拇指。

在我們感興趣的很多問題中,評估性反饋更加直觀,易於使用。例如,想象一個控制數據中心溫度的系統。指導性反饋似乎沒有什麼用處,那麼你如何告訴算法給定時間步中每個組件的正確設置是什麼呢?此時評估性反饋將發揮作用。你可以獲取關於特定時間階段使用的電量或平均溫度,甚至過熱機器的數量等反饋數據。這事實上就是谷歌使用強化學習解決該問題的方式。現在,讓我們趕快來了解強化學習吧。

馬爾科夫決策過程

假定我們知道狀態 s,如果未來的狀態條件獨立於過去的狀態,那麼狀態 s 符合馬爾科夫屬性。這意味着 s 描述了所有過去狀態直至當前狀態。如果這很難理解,通過實例會更好懂。想象一個在空中飛起的球,它的狀態由位置和速度決定,並足以描述其當前和下一個時間步的位置(不考慮外界影響的物理模型)。因此,這一狀態具備馬爾科夫屬性。但是,如果我們只知道球的位置而不知道其速度,它的狀態則不是馬爾科夫。當前狀態並未收納所有過去的狀態,我們還需要過去時間步的狀態信息才能構建球的恰當模型。

強化學習通常可以建模爲一個馬爾科夫決策過程,即 MDP,它是一個有向圖,具有節點和邊的狀態,可以描述馬爾科夫狀態之前的轉化。下面是一個簡單實例:

一個簡單的馬爾科夫決策過程。

這一 MDP 展示了「學習」的馬爾科夫決策過程。首先你在一個「不理解」的狀態中,接着你面臨着兩個可能的動作(action)——學習或者不學習。如果你選擇不學習,則有 100% 的可能性返回到不理解的狀態裏。然而,如果你選擇學習,則可能性降低爲 20%,即你有 80% 的可能性進入理解狀態。

實際上,我確定進入理解狀態的可能性要高於 80%。MDP 的核心其實很簡單,對於一個狀態你可以採取一系列動作,而採取一個動作之後,會有一些關於你要轉入狀態的分佈。正如在採取不學習動作的情況中,這一轉化也可以很好地被確定。

強化學習的目標是學習如何採取動作,從而把更多時間花在更有價值的狀態中。爲了一個有價值的狀態,我們需要更多的 MDP 信息。你無需一個 MDP 教你便懂得不吃東西就會餓死,但是強化學習智能體可不這樣。

你不需要MDP來告訴自己餓了要吃飯,但是強化學習的智能體需要它。

這一 MDP 增加了獎勵。每次轉入一個狀態,你會收到一個獎勵。在這個實例中,由於捱餓你獲得了一個負面獎勵,由於餓死而獲得了一個更大的負面獎勵。如果你吃飽了,則獲得一個正面獎勵。現在我們的 MDP 已經徹底成型,可以開始思考如何採取動作以獲取最大獎勵。

由於這個 MDP 很簡單,我們很容易看到獲取高獎勵的方式就是呆在高獎勵區域,即餓了就吃。在這一模型中當我們吃飽了就沒有太多其他選擇,但我們會不可避免地再次飢餓,並立即選擇吃東西。強化學習感興趣的問題具有更大更復雜的馬爾科夫決策過程,並且通常在我們實際探索之前,無法獲得這種策略的任何信息。

形式化強化學習問題

現在我們已經有了很多所需的基本組成,下一步需要了解強化學習中使用的術語。最重要的組成是智能體(agent)和環境(environment)。智能體是被間接控制的,存在於環境中。通過回顧 MDP 可以看到,智能體可以在給定的狀態下選擇對它而言有顯著影響的動作。然而,智能體並不能完全控制環境的動態。環境會接收這些動作,然後返回新的狀態和獎勵。

圖片來自 Sutton 和 Barto 的《Reinforcement Learning: an Introduction》

這張圖片很好地解釋了智能體和環境之間的互動。在某個時間步 t,智能體處於狀態 s_t,採取動作 a_t。然後環境返回一個新的狀態 s_t+1 和一個獎勵 r_t+1。獎勵處於時間步 t+1 的原因是它是由環境在 t+1 的狀態 s_t+1 中返回的,因此令它們保持一致更加合理(如圖中所示)。

前半部分主要概述了強化學習的基本概念與組成部分,在上文中我們概述了強化學習問題的一般框架,並已經預備好學習如何最大化獎勵函數以訓練強化學習模型。在下一部分中,我們將進一步學習狀態價值(state value)函數和動作價值(action value)函數,以及爲解決強化學習問題奠定了算法基礎的貝爾曼方程。此外,我們還將探索一些簡單且高效的動態規劃解決方案。當然,下一部分只是簡要地概述貝爾曼方程。

理解強化學習:貝爾曼方程

對強化學習最重要的方程的逐步推導、解釋,解開神祕面紗。

在前面內容中,我們學習了 MDP 和強化學習框架的主要部分。接下來,我們將在這個理論的基礎上學習價值函數和貝爾曼方程。

獎勵和回報(return)

正如之前所討論的,強化學習智能體需要學習最大化累積未來獎勵(cumulative future reward)。描述累積未來獎勵的術語是回報,通常用 R 表示,並對特定時間步的回報加上一個下標 t。使用數學符號表示爲:

如果這個序列是無窮的,可能最終會得到無限大的回報,這對於問題的定義來說沒有什麼意義。因此,只有獎勵的序列是有限的,該方程纔是有意義的。總是有終點的任務被稱爲陣發性的(episodic),陣發性問題的一個不錯的例子是卡片遊戲。事件片段起始於給每個人發牌,並由於遊戲的特定規則不可避免地會走向結束。然後,另一個片段將從發牌開始下一個回合。

相比使用未來累積獎勵作爲回報,更常使用的是未來累積折現獎勵(future cumulative discounted reward):

其中 0<γ<1。以這種方式定義回報有兩個好處,一個是這種定義可用於無窮序列的回報,更早期的獎勵有大得多的權重,這意味着比起更遙遠的未來,我們更關心即將發生的獎勵。選擇的γ越小,這種傾向就越明顯。從γ等於 0 和 1 的兩個極端例子就能理解,如果γ等於 1,這個方程就變成了對所有的獎勵都同樣的關心,無論在什麼時候。另一方面,當γ等於 0 的時候,這個方程就變成只關心即將發生的獎勵,並對後面的所有獎勵都不關心,這會使模型變得極端短視。它將會採取對當前回報最大的動作,而不會考慮該動作的任何未來影響。

策略

一個強化學習策略可以寫爲 π(s, a),它描述了一種動作的方式。策略函數的輸入爲狀態(state)和動作(action),並返回在輸入狀態的情況下采取輸入動作的概率。因此,對於一個給定的狀態,該狀態下所有動作 a 的策略函數值之和一定爲 1。在下面的案例中,如果我們的狀態是「hungry」,那麼可採取的兩種動作「Eat」或「Dont Eat」,並且當前狀態下這兩個動作的策略函數和爲 1。

我們的策略函數應該要描述每一個狀態下動作的選擇方案。所以一個等概率的隨機策略將簡單地將動作「Eat」或「Dont Eat」的概率設爲相等,即π(hungry, E)=0.5、π(hungry, E bar)=0.5、π(full, E bar)=1,其中 E 爲動作「Eat」,E bar 爲動作「Dont Eat」。這也就說明在「hungry」狀態下選擇動作「Eat」或「Dont Eat」的概率相等。

我們在強化學習中的目標是學習一個最優的策略 π*,它將告訴我們如何選擇一個動作以獲得最大的回報。上圖是非常簡單的案例,我們很容易看出來最優策略就是在 hungry 狀態下選擇動作 Eat,即π*(hungry, E) = 1.0。在該案例中最優的策略是確定性的,即每一個狀態都有最優的一個動作。這種確定性情況可以寫爲π*(s) = a,它代表着策略函數即將狀態映射到具體動作的一個函數。

價值函數

爲了學習最優策略,我們使用了價值函數。強化學習中有兩種價值函數:狀態價值函數 V(s) 和動作價值函數 Q(s, a)。

狀態價值函數在遵循一個策略時描述狀態的值。根據策略π,狀態價值函數的期望回報是:

注意:即使是在同樣的環境中,價值函數也會根據策略的不同而發生變化。原因在於狀態的值取決於動作,在特定狀態下采取的動作會影響期望獎勵的值。還要注意期望的重要性。(期望即加權平均值;字面意義上即你期望看到的回報。)我們使用期望的原因之一是到達一個狀態後發生的事情存在一定的隨機性。你可能有一個隨機策略,這意味着我們需要結合所有不同動作的結果。此外,轉移函數(transition function)也可能是隨機的,這意味着我們最終的狀態可能不是 100% 的概率。記住上面的例子:當你選擇一個動作時,環境將回報下一個狀態。它可能回報多個狀態,即使在給定一個動作的前提下。我們將更多地把它當作貝爾曼方程。期望會考慮所有隨機性。

我們使用的另一個價值函數是動作價值函數。該函數告訴我們使用特定策略時某個狀態中採取一個動作的值。在策略 π中,給定狀態和動作情況下,期望回報爲:

狀態價值函數的注意事項同樣適用於動作價值函數。期望根據策略考慮未來動作的隨機性,以及環境回報狀態的隨機性。

貝爾曼方程

Richard Bellman 是一位美國應用數學家,他推導出了以下方程,使得我們能夠開始解決馬爾科夫決策過程(MDP)。貝爾曼方程在強化學習中非常普遍,也是理解強化學習算法工作原理所必須瞭解的。但是在我們學習貝爾曼方程之前,需要一些有用的符號。這些符號定義如下:

p 是轉移概率(transition probability)。如果我們在狀態 s 處開始,並實施動作 a,則會得到狀態 s'和概率

是我們在狀態 s 處開始,實施動作 a,進入狀態 s'得到的期望(或平均)獎勵(reward)的另一種符號。

最後,瞭解了這些,我們就可以推導出貝爾曼方程了。我們認爲貝爾曼方程是一個狀態價值函數。使用回報的概念,我們將重寫方程(1):

如果我們將第一個獎勵從和中拆分出來,我們可以將方程重寫爲:

這裏的期望解釋瞭如果我們繼續維持狀態 s、策略π,回報將如何發展。期望可以通過總結所有可能的動作與返回狀態來明確寫出。接下來的兩個方程可以幫助我們完成下一步。

通過結合上面兩個期望的計算公式,我們可以將狀態價值函數寫爲如下形式:

現在請注意,方程(1)與這個方程的末尾形式相同。我們可以替換它,得到:

動作價值函數的貝爾曼方程可以用同樣的方式進行推導。本文結尾有具體過程,其結果如下:

貝爾曼方程的重要性在於它可以讓我們藉助其他狀態的值表達某個狀態的值。這意味着如果我們知道 s_t+1 的值,我們就可以很輕鬆地算出 s_t 的值。這爲迭代計算每個狀態的值創造了很多機會,如果我們知道下一個狀態的值,我們就可以知道當前狀態的值。最重要的是我們需要記住一些編號方程。最後,有了貝爾曼方程,我們就可以開始瞭解如何計算最優策略,構建我們的第一個強化學習智能體了。

下一步:動態規劃

在隨後的文章中,我們還將討論使用動態規劃計算最優策略,它也是高級算法的基礎。同時,這也是我們第一次編寫強化學習算法的機會。我們還將探究策略迭代與價值迭代的優勢與劣勢。

動作價值函數的貝爾曼方程:與推導狀態價值函數的貝爾曼方程過程相同,我們得到了一系列方程,從方程(2)開始:

文章來源:機器之心