強化學習——簡介

前言

我最先了解到強化學習還是看見論文中有使用強化學習算法去玩遊戲,並且玩得比人類還好,之後AlphaGo系列的圍棋機器人戰勝世界高手也讓我更進一步知道了強化學習的威力。本系列強化學習筆記將以DeepMind AlphaGo的主要研究人員David Silver《深度強化學習》視頻公開課以及強化學習聖經——《Reinforcement Learning:An Introduction》(Second edition)的內容爲主,並穿插介紹一些我學習過程中的實踐案例。

強化學習的範疇

機器學習,深度學習大家都很熟悉,實際上強化學習也屬於機器學習的一種,其關係如下圖所示

之所以強化學習有別於其他機器學習方法,主要體現在以下四點:

  • 沒有監督數據,只有獎勵信號;
  • 反饋的信號具有滯後性,不及時;
  • 時間(序列)是一個重要因素;
  • 當前的動作影響後續接收的數據。

強化學習也是一種多學科交叉的產物,它本身是一種決策科學,所以在許多學科分支中都可以找到它的身影。

所以強化學習應用廣泛,比如:直升機特技飛行、遊戲AI、投資管理、發電站控制、讓機器人模仿人類行走等。

強化學習的提出

強化學習就是學習如何根據一個環境狀態去決定如何行動,使得最後的獎勵最大。強化學習中兩個最重要的特徵就是試錯(trial-and-error)和滯後獎勵(delayed reward)。比如在訓練走迷宮的AI時,我們的學習者(Agent)不會被告知下一步該如何走,而是通過嘗試不同的走法,得到不同的獎勵。但是,這個獎勵可能不會立即得到,比如得走出迷宮以後才能得到獎勵。

獎勵(Rewards)

  • 獎勵是一個標量反饋信號;
  • 表明agent在時刻的表現如何;
  • agent的任務就是最大化積累的獎勵。

序列決策(Sequential Decision Making)

  • 目標:選擇一個可以使未來獎勵最大的動作(actions);
  • 這個動作可能產生一個長遠的結果;
  • 獎勵可能有滯後性;
  • 可能犧牲眼前的獎勵而獲得長遠的獎勵更有用(比如投資理財)。

學習者和環境(Agent &Environment)

如下圖所示,圖中的人腦可以看做Agent,地球可以看做Environment。每個時刻tt ,Agent得到對環境的觀測OtO_t,並執行動作 AtA_t ,接着環境因爲Agent的動作產生新的觀測 Ot+1O_{t+1} ,同時反饋給Agent一個標量值的獎勵 RtR_t

歷史和狀態(history&state)

在Agent和環境進行交互的時候,會產生一連串的觀測,動作和獎勵,即歷史(history)
Ht=O1,R1,A1,,At1,Ot,RtH_{t}=O_{1}, R_{1}, A_{1}, \ldots, A_{t-1}, O_{t}, R_{t}
將要發生的事情(Agent要做什麼動作、環境將產生什麼觀測和獎勵),完全取決於歷史。而狀態(state)就是決定將要發生事情的信息。通常狀態是歷史的函數:
St=f(Ht)S_{t}=f\left(H_{t}\right)

環境狀態

環境狀態 SteS_{t}^{e} 是環境的一種私有呈現,它包含了用於下一步產生觀測和獎勵的全部信息,而這些信息對Agent來說通常是不可見的,即使可見也通常含有很多無關的信息。

Agent狀態

Agent狀態 StaS_{t}^{a} 是Agent內部的一種呈現。包含了用於產生下一步動作的全部信息,這些信息就是強化學習算法需要的信息,它可以由歷史的某種函數所表示:
Sta=f(Ht)S_{t}^{a}=f\left(H_{t}\right)

信息狀態

信息狀態又稱爲馬爾科夫狀態(Markov state),它包含了來自歷史所有有用的信息。一個狀態具有馬爾科夫性質,當且僅當
P[St+1St]=P[St+1S1,,St]\mathbb{P}\left[S_{t+1} | S_{t}\right]=\mathbb{P}\left[S_{t+1} | S_{1}, \ldots, S_{t}\right]
也就是說,如果信息狀態是可知的,那麼所有歷史信息都可以丟掉,僅需要前一個狀態的信息。比如環境狀態和歷史狀態就具有馬爾科夫性質。

完全觀測環境

完全觀測(Full observability)環境即Agent可以直接觀測環境狀態:
Ot=Sta=SteO_{t}=S_{t}^{a}=S_{t}^{e}
這也是我所說的強化學習形式——馬爾科夫決策過程(Markov decision process, MDP)

部分觀測環境

部分觀測(Partial observability)環境即Agent不能直接觀測環境狀態,此時
StaSteS_{t}^{a} \neq S_{t}^{e}
比如下面幾個例子:

  • 一個可拍照的機器人個體對於其周圍環境的觀測並不能說明其絕對位置,它必須自己去估計自己的絕對位置,而絕對位置則是非常重要的環境狀態特徵之一;
  • 一個交易員只能看到當前的交易價格,但他不知道價格趨勢,什麼推動了價格的變化等;
  • 一個撲克牌玩家只能看到自己的牌和其他已經出過的牌,而不知道整個環境(包括對手的牌)狀態。

這就是部分觀測馬爾科夫決策過程(Partial observable Markov decision process, POMDP)。Agent必須自己去構建 StaS_{t}^{a} ,比如

  • 記住全部歷史: Sta=HtS_{t}^{a}=H_{t}
  • 創建環境狀態的概率分佈: Sta=(P[Ste=s1],,P[Ste=sn])S_{t}^{a}=\left(\mathbb{P}\left[S_{t}^{e}=s^{1}\right], \ldots, \mathbb{P}\left[S_{t}^{e}=s^{n}\right]\right) ,這個概率向量決定了狀態。
  • 循環神經網絡(RNN): Sta=σ(St1aWs+OtW0)S_{t}^{a}=\sigma\left(S_{t-1}^{a} W_{s}+O_{t} W_{0}\right) ,即使用線性組合的方式把最近的agent狀態與最近的觀測結合起來,就可以得到最新的狀態。

Agent的組成元素

策略(Policy)

策略定義了agent的行爲方式,是從狀態到行爲的一個映射,策略可以是一個簡單的函數 a=π(s)a=\pi(s),也可以是一個查詢表或者就是隨機的π(as)=P(At=aSt=s)\pi(a | s)=\mathbb{P}\left(A_{t}=a | S_{t}=s\right)

值函數(Value Function)

值函數是一個對未來獎勵的預測,用來評價當前狀態的好壞程度。比如,當Agent面臨狀態1和狀態2(對應動作1和動作2)時,該如何選擇?當然是選擇獎勵最大的,而值函數就是用來預測這個獎勵的。數學形式如下
vπ(s)=E[Rt+1+γRt+2+γ2Rt+3+St=s]v_{\pi}(s)=\mathbb{E}\left[R_{t+1}+\gamma R_{t+2}+\gamma^{2} R_{t+3}+\ldots | S_{t}=s\right]
可見,值函數是基於策略的。

模型(Model)

模型並不是環境本身,但是對於預測環境變化很有用處,這有利於Agent決定下一步的行動。模型至少要解決兩個問題:一是狀態轉化概率,即預測下一個可能狀態發生的概率:
Pssa=P[St+1=sSt=s,At=a]P_{s s^{\prime}}^{a}=\mathbb{P}\left[S_{t+1}=s^{\prime} | S_{t}=s, A_{t}=a\right]
另一個是預測可能獲得的即時獎勵:
Rssa=E[Rt+1St=s,At=a]R_{s s^{\prime}}^{a}=\mathbb{E}\left[R_{t+1} | S_{t}=s, A_{t}=a\right]
但是,模型並不是構建一個個體所必需的。

Agent分類

下面這張圖,大概就把分類說清楚了。即在有無環境模型的分類下分爲基於策略的或者基於值函數的或者基於兩者一起的。

學習和規劃(Learning & Planning)

根據初始環境模型是否已知決定了強化學習的兩種方式:學習和規劃。當初始環境未知時,agent需要與環境不斷交互,從而提升策略。而環境模型已知時,agent就不需要與環境進行交互,只需根據模型進行計算即可,從未提升策略。

探索和利用(Exploration & Exploitation)

強化學習類似於一個試錯的學習,個體需要從其與環境的交互中發現一個好的策略,同時又不至於在試錯的過程中丟失太多的獎勵。探索和利用是個體進行決策時需要平衡的兩個方面。

一個形象的比方是,當你去一個餐館喫飯,“探索”意味着你對嘗試新餐廳感興趣,很可能會去一家以前沒有去過的新餐廳體驗,“利用”則意味着你就在以往喫過的餐廳中挑一家比較喜歡的,而不去嘗試以前沒去過的餐廳。這兩種做法通常是一對矛盾,但對解決強化學習問題又都非常重要。

預測和控制(Prediction & Control)

在強化學習裏,我們經常需要先解決關於預測(prediction)的問題,而後在此基礎上解決關於控制(Control)的問題。預測:給定一個策略,評價未來。可以看成是求解在給定策略下的價值函數(value function)的過程。控制:找到一個好的策略來最大化未來的獎勵。


歡迎關注我的公衆號“野風同學”,一個程序員的自我成長之路,持續分享機器學習基礎與應用、LeetCode面試算法和Python基礎與應用等技術乾貨文章,同時也經常推薦高質量軟件工具、網站和書籍。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章