1. 前言
從本章起,我們開始解決更貼近實際的問題。前面提到我們接觸過的問題有一個特點,即我們可以知道環境運轉的細節,具體說就是知道狀態轉移概率\(P(s_{t+1}|s_t,a_t)\)。對蛇棋來說,我們可以看到蛇棋的棋盤,也就可以了解到整個游戲的全貌,這時我們相當於站在上帝視角,能夠看清一切情況。
在很多實際問題中,我們無法得到游戲的全貌,也就是說,狀態轉移的信息\(P(s_{t+1}|s_t, a_t)\)無法獲得。
一般來說,我們知曉狀態轉移概率的問題稱為“基於模型”的問題(Model-based),將不知曉的稱為“無模型”問題(Model-free)。后面我們要繼續升級我們的問題,模擬一個真人去玩游戲,無法知道所有游戲的全貌。
2. Model-free原理
- 確定一個初始策略(這和前面的算法一致)。
- 用這個策略進行游戲,得到一些游戲序列(Episode):\({s_1,a_1,s_2,a_2,...,s_n,a_n}\)
- 一旦游戲的輪數達到一定數目,就可以認為這些游戲序列代表了當前策略與環境交互的表現,就可以將這些序列聚合起來,得到狀態對應的值函數。
- 得到了值函數,就相當於完成了策略評估的過程,這樣就可以繼續按照策略迭代的方法進行策略改進的操作,得到更新后的策略。如果策略更新完成,則過程結束;否則回到步驟2。
上面的流程十分清晰地介紹了學習的過程,此時學習的關鍵就落在了下面兩個問題上。
- 如何得到這些游戲序列?
- 如何使用序列進行評估?
我們用2個方法介紹Model-free的過程,本篇介紹“蒙特卡羅法(Monte Carlo Method)”和下一篇介紹“時序差分法(Temporal Difference Method)”
3. 蒙特卡羅法原理
3.1 如何使用序列進行評估
本節我們介紹蒙特卡羅法。在前面的章節里,我們曾介紹當環境信息,也就是狀態轉移概率已知時,可以使用Bellman公式,通過不斷迭代得到狀態-行動值函數:
然后通過值函數進行策略改進。而在無模型問題中,狀態轉移概率將無法知曉。於是我們需要把公式轉變為
看到了等號右邊的期望,我們很自然地聯想到了蒙特卡羅法,它是一種通過隨機采樣估計期望值的方法,假設我們通過一些方法,從狀態\(s_t\)和行動\(a_t\)開始不斷地與環境交互,得到了大量的樣本序列
得到對應的回報序列
其中N代表隨機采樣的輪數,K代表到達結束的步數。
然后我們有一個狀態-行動值函數的公式:
通過大量的隨機采樣,上面這個公式能夠比較號的描述初始的狀態-行動值函數。
3.2 狀態-行動值函數更新
令狀態行動價值為\(q\),當前的時間為\(t\),積累的數量為\(N\),我們要求的值為\(q^N_t\),當前已知的值為\(q^{N-1}_t\)和\(N\),每一個時刻的價值為\(q'^i_t\),於是可以得到:
我們觀察下,上面公式很像梯度下降法\(\theta_t=\theta_{t-1}-\alpha\nabla{J}\),因為我們想要值函數盡量大,所以這里是一個梯度上升的過程。
3.3 蒙特卡羅法步驟
以上就是蒙特卡羅法的全部內容,我們可以將它的算法全過程總結如下。
- 讓Agent和環境交互后得到交互序列。
- 通過序列計算出每一時刻的價值。
- 將這些價值累積到值函數中進行更新。
- 根據更新的值函數更新策略”
4. 探索與利用
4.1 如何得到這些游戲序列
那么,為了達到和基於模型的算法接近的效果,我們首先要做的是確保當前的問題有遍歷所有狀態-行動對的可能。
在一些狀態非常多的環境中,我們很難遍歷所有的狀態,這里采用一種叫\(\epsilon-greedy\)的算法,首先隨機生成一個0~1的數,然后用這個隨機數進行判斷,如果隨機數小於某個值\(\epsilon\),就采用完全隨機的方式產生行動,此時每個行動產生的概率是一樣的;如果隨機數不小於某個值\(\epsilon\),就選擇當前的最優策略。
\(\epsilon-greedy\)算法實際上是在解決強化學習中的一個經典問題:探索與利用。這是兩種與環境交互的策略。
- 探索:是指不拘泥於當前的表現,選擇一些不同於當前策略的行動。
- 利用:就是持續使用當前的最優策略,盡可能地獲得更多的回報。
5. 總結
蒙特卡羅法是第一個不基於模型的強化問題求解方法。它可以避免動態規划求解過於復雜,同時還可以不事先知道環境轉化模型,因此可以用於海量數據和復雜模型。但是它也有自己的缺點,這就是它每次采樣都需要一個完整的狀態序列。如果我們沒有完整的狀態序列,或者很難拿到較多的完整的狀態序列,這時候蒙特卡羅法就不太好用了,也就是說,我們還需要尋找其他的更靈活的不基於模型的強化問題求解方法。