什麼時候使用蒙特卡洛方法:
蒙特卡洛方法適用於免模型的強化學習任務。(“免模型學習”對應於一類現實的強化
學習任務,在該類任務中,環境的轉移概率、獎賞函數往往很難得知,甚至很難知道環境中一共有多少狀態,因此,在該類學習任務中,學習算法不依賴於環境建模。)
爲什麼使用蒙特卡洛方法:
在免模型情形下,由於模型未知而導致無法做全概率展開,策略迭代酸中的策略無法評估,此時,只能通過在環境中執行選擇的動作,來觀察轉移的概率和得到的獎賞。
什麼是蒙特卡洛方法:
其主要思想是通過多次“採樣”,然後求取平均累積獎賞來作爲期望累積獎賞的近似。需要注意:和策略迭代算法不同,模型未知時,對狀態值函數V的估計是有一定困難的,於是我們將估計對象從V轉變爲Q,即估計每一對“狀態-動作”的值函數。
First-visit MC Method and Every-visit MC Method
First-visit MC Method:對於每一個被採樣的episode,在進行對狀態值函數或者“狀態-動作”值函數進行估計時,只考慮第一個被訪問的狀態或者動作-狀態對。
Every-visit MC Method:對於每一個被採樣的episode,在進行對狀態值函數或者“狀態-動作”值函數進行估計時,考慮了每一個被訪問的狀態或者動作-狀態對。
蒙特卡羅與動態規劃不同點:
- 在動態規劃算法中需要知道下一個狀態對應的概率分佈,而在蒙特卡洛算法中不需要。即不需要計算p(s′,r|s,a)。
- 蒙特卡洛方法估計的對象是一個狀態或者一個動作狀態對,因此對每個狀態的估計是相互獨立的。
- 蒙特卡羅計算複雜度獨立於狀態的數目
Monte Carlo Estimation of Action Values
有模型的學習:
根據“狀態-動作”值函數可以很好地估計狀態值函數,狀態值函數可以充分確定策略。
免模型的學習:
對狀態值函數的估計並不充分,智能精確地估計每一個動作對應的“狀態-
動作”值函數。其原因在於:在真實的episodes中,對於一個已經被確定的策略,有
些存在的動作狀態對不一定會被訪問到。
針對該種情況,提出如下兩種解決方法:
(1)探索性開端(相當於隨機初始化);
(2)隨機策略,在每個狀態下選擇任何動作的概率都是非0的。
Monte Carlo Control
蒙特卡洛方法的整體思路是:模擬 -> 抽樣 -> 估值。
用蒙特卡洛方法估計最優策略——廣義的策略迭代:
(1)更新值函數,使其逼近當前策略下值函數的真實值;
(2)根據當前的值函數改善當前的策略;
不斷的循環迭代,使值函數和策略都逼近最優。
結合通用策略迭代(GPI)的思想。
下面是蒙特卡洛方法的一個迭代過程:
- 策略評估迭代
(1) 探索 - 選擇一個狀態(s, a)。
(2) 模擬 - 使用當前策略π,進行一次模擬,從當前狀態(s, a)到結束,隨機產生一段真實迭代序列(episode)。
(3) 抽樣 - 獲得這段序列上的每個狀態(s, a)的回報G(s,a),記錄G(s,a)到集合Returns(s,a)。
(4) 估值 - q(s, a) = Returns(s, a)的平均值。
(因爲狀態(s, a)可能會被多次選擇,所以狀態(s, a)有一組回報值。) - 策略優化 - 使用新的行動價值q(s,a)優化策略π(s)。
蒙特卡洛方法收斂的兩個條件:
(1)探索性開端;
(2)無限多episodes;一般會針對所有的狀態-行動,或者一個起始(s0,a0)下的所有狀態-行動。這也說明持續探索(continual
exploration)是蒙特卡洛方法的主題。
實際算法中對無限多episodes的假設處理的方法是:
(1)保證在每一步的策略估計中逼近qπk,即要確保出錯概率和估計偏差的幅度有上界;
(2)放棄完整的策略估值(極端情況:值迭代)。
On-policy and Off-policy
On-policy:
指的是被評估和被改善的是同一個策略。
Off-policy:
指的是被評估和被改善的策略 與 產生數據的策略是不同的策略。
數學基礎——Important Sampling
目標:
求函數f在概率分佈p下的期望值,即爲
方法:
從“提議分佈”中採樣,對目標分佈進行估計
對應到Off-policy Method中:
目標分佈p -> 目標策略
提議分佈q -> 行爲策略
函數值f(z) -> 值函數
其中,目標策略可以表示爲:
重要性採樣比爲:
在普通的重要性採樣下(τ(s)爲所有時間序列中s被訪問的次數):,這種採樣無偏,方差大
在有權重的重要性採樣下:,這種採樣有偏,方差小
Incremental Implementation
蒙特卡羅估計可以寫爲遞增性形式。假設我們有一系列得回報G1,G2,...,Gn−1,所有都是從同一個狀態開始的,並且有隨機的權重Wi,所以有估計爲:
當又得到一個新的回報Gn的時候,應該如下進行更新:
則最終的程序框架爲: