博主的github鏈接,歡迎大家來訪問~:https://github.com/Sh-Zh-7
強化學習經典算法實現地址:https://github.com/Sh-Zh-7/reinforce-learning-impl
1. 什麼是on-policy,什麼是off-policy
其實這個概念我們之前已經提到了,這裏不妨再提一下:
- on-policy就是獲取數據的動作和最終策略的動作是一致的,比如Sarsa。
- off-policy就是獲取數據的動作和最終策略的動作不一致,比如QLearning。
從這種定義我們也可以得知:我們的強化學習流程中涉及到兩個關鍵流程:一個是選擇用來獲取數據的動作,另一個則是我們最終用來選擇動作的策略。
2. Behavior policy和Target policy
on-policy其實挺符合我們直覺的,問題是off-policy爲什麼要有兩種策略?
先給個定義好了:
- 用來與環境互動產生數據的策略,即在訓練過程中做決策。這種策略叫做behavior policy。
- 而目標策略在行爲策略產生的數據中不斷學習、優化,即學習訓練完畢後拿去應用的策略。這種策略叫做target policy。
強 化學習方面主要有兩個問題,一個叫做exploitation,另一個叫做exploration。我們獲得數據,就是屬於exploration,這是 我們behavior policy所做的事情;我們訓練我們的策略,就是屬於exploitation,是我們target policy所做的事情。
3. 數學背景
(1)Coverage
有些人可能會覺得很疑惑,你採用兩個不同的策略,爲什麼可行?答案是,確實不太可行,我們得加一點約束。
首先既然是用來“探索”的behavior policy,它產生的數據能給我們的target policy訓練,那他能採用的動作肯定是target policy的超集把,用數學的語言來描述,就是:
爲了能從行爲策略b(即behavior policy)產生的樣本回合(Episode)中評估(學習)策略 ,我們要求當執行策略時中的每個動作都有一定概率發生,也就是時,必有(逆命題不一定成立)。這種要求稱爲“包含”(Coverage)。
(2)Importance sampling
Importance sampling的核心在於採樣。現在你有兩種分佈,你可以在其中一種分佈中採樣x,來得到第二種分佈的f(x)的期望。這一點和我們的on-policy和off-policy很像。
這個做法的一個注意點是:我們的兩個分佈不能相差太多,反例如下圖所示:
4. PPO和PPO2算法
引入了importance sampling以後,我們就可以着手研究policy-based中的off-policy算法了,首先,既然我們是從另一種策略中取得數據的,我們研究對象也會發生相應的變化:
我們的PPO和PPO2算法,則是基於以下兩個式子:
有了這個以後,我們就可以很順利地編寫相關程序了。