之前糾結了很久 Model-based 與 Model-free 。突然想出來的一個點子,覺得蠻有意思、蠻直觀的,便寫下來,希望能幫到和我一樣的初學者。
我說的可能有錯誤,請以娛樂+批判性眼光閱讀此文,有問題歡迎 私信/郵箱 來 指正/交流:[email protected]。
小紅同學比較…嗯,風流。就是經常更換男朋友。
我朋友最近不知哪根弦不對勁,特別八卦。他特別特別想“預測”出小紅的下任男友是誰。於是他找我來幫忙。
“這麼辦吧,”我說,“不如我們用強化學習的思想解決這個問題?”
“怎麼講?”
我便一本正經地胡說八道起來——
我們首先做五點假設:
- 小紅選哪個男票只與其選擇當時的狀態(心情、心智、性格本身)有關;
- 小紅的性格、心智、選擇原則一直沒怎麼發生過變化;
- 小紅每次都會盡力去選擇其認爲的,會帶來最好的結果的那個;
- 小紅分手後會根據心情立刻去找下一個男朋友;
- 小紅每次“分手”後,都會發朋友圈,通過朋友圈文案,可以看出小紅對這個男友的滿意程度,也就是這個男友實際上到底處的值不值。
因此,我們可以根據“歷史數據”,得到一個個(狀態-動作-收益-下一個狀態-下一個動作)元組,從而可以根據小紅的狀態(心情)預測出其動作(選擇哪個男朋友)。如下表。
元組元素 | 狀態 | 動作 | 收益與後續狀態 |
---|---|---|---|
解釋 | 小紅當前心情 | 小紅在該心情下選了哪個男朋友 | 與這個男友分手後,發的朋友圈內容 |
數據 1 | 小紅不高興 | 選了個很溫柔的男友 | 分手後朋友圈很懷念(收益:+5),小紅很尷尬 |
數據 2 | 小紅很尷尬 | 選了個很暴躁的男友 | 分手後朋友圈瘋狂吐槽(收益:-5),小紅很尷尬 |
數據 3 | 小紅很尷尬 | 選了個很體貼的男友 | 分手後朋友圈有點懷念(收益:+1),小紅很平靜 |
數據 4 | 小紅很平靜 | 選了個不愛說話的男友 | 分手後朋友圈較懷念(收益:+3),小紅很平靜 |
… | … | … | … |
新數據 | 小紅很開心 | 請你預測小紅將找個什麼樣的男朋友? | ??? |
數據抽象好了,我們就可以用 Sarsa 的思想來解決。
所謂 Sarsa 就是我們運用了 S A R S A 元素的意思。
我們通過已有的、或者測試得到的在線數據,來估計小紅在各個狀態下選擇各個動作的“價值”,就可以估計出其會選誰當自己男朋友了。
心情() | 選擇() | 價值 |
---|---|---|
不高興 | 選擇溫柔的 | +10 |
不高興 | 選擇暴躁的 | -10 |
不高興 | 選擇體貼的 | +15 |
不高興 | … | … |
不高興 | 選擇不愛說話的 | -5 |
如果有了上面這張表,我們就知道小紅在不高興的心情下,最可能選擇誰了。或者說,知道了選誰是對小紅最好的。
我們的數據就是用來得到上面這張表的。更新公式如下(Sutton’s Reinforcement Learning - An Introduction 2018, P129, 6.7):
“小紅有過多少男朋友來着?”我問朋友。
“200多個吧。”
嗯…不多不少,我們應該更進一步:用 基於模型方法 (Model-based)還是 免模型方法(Model-free )?
啥是基於模型的方法?
基於模型,就是不單單把數據用來更新公式,還用來建模。
比如,上面提到了,數據是被放在公式裏面更新的。但除此之外,我們還可以拿這些數據對小紅這個人進行建模:
- 通過小紅的行爲,判斷小紅這個人的心智、性格、選擇男朋友的原則(前面假設中提到了,小紅的心智、性格、選擇原則是不變化的);
- 這樣,除了小紅產生的真實的200多個數據,我們還可以自己“推演”出一些虛擬數據(根據對小紅心智、性格、選擇男朋友的原則的假設,模擬小紅接下來該選誰當男朋友)。
這就是所謂的 基於模型方法(Model-based)。
基於模型方法有好有壞,好處是:
- 更充分地利用數據,有些數據對於 的更新是沒什麼用的,但對於判斷小紅是個什麼樣人有用(對於建模有用);
- 基於模型,我們再產生一些數據,餵給 ,這樣,那些本來沒什麼用的數據也能間接地發揮價值;
- “基於模型的方法則在一些控制問題中,相比於免模型方法,通常有 10^2 級的採樣率提升。”[1]
但問題是:
- 模型可能有偏差,則產生的數據也是不準的,更加誤導了 ;
- 這個問題本身難以建模。
免模型方法(Model-free )則是不建模,只更新。
說罷,我們就開心地去給小紅的數據打標籤了。
跑模型的時候,我問我朋友,這麼關心小紅,難道你也跟大家一樣喜歡他嗎?
朋友大方承認了,還問我:“你呢?”
我跟這位朋友向來都是坦誠相待,我的回答在文章末尾。
故事還沒完,我們先聊點別的發散一下。
免模型方法很好理解,基於模型則有點抽象了。我們來看一個經典的基於模型方法:Dyna。
其迭代過程如下(Sutton’s Reinforcement Learning - An Introduction 2018, P164):
可以看到,每獲得一個數據,其都會進行 n 次自我模擬(基於自己的模型,產生 n 個仿真出來的數據)。
Talk is cheap, show me the codes.
案例的代碼可以閱讀我在這章的筆記:
代碼使用的是 Shangtong Zhang 版的 python 解決方案。他的代碼很優美,並且不晦澀,我對其進行了一些中文標註:
歡迎交流。
在故事中,我儘量把案例描繪成一個簡單的、同軌策略的、馬爾科夫過程。
解釋一下我在故事中做的假設:
- 小紅選哪個男票只與其選擇當時的狀態(心情、心智、性格本身)有關;(馬爾科夫過程)
- 小紅的性格、心智、選擇原則一直沒怎麼發生過變化;(環境是穩定的,建模有其合理性)
- 小紅每次都會盡力去選擇其認爲的,會帶來最好的結果的那個;(儘管我們不直接控制小紅,但小紅自己本身就在尋找最優策略,因此看作同軌策略控制)
- 小紅分手後會根據心情立刻去找下一個男朋友;(狀態-動作是連續的)
- 小紅每次“分手”後,都會發朋友圈,通過朋友圈文案,可以看出小紅對這個男友的滿意程度,也就是這個男友實際上到底處的值不值。(價值函數的依據)
最後貼一段昨天讀的文章[1]中提到的兩段話,更好地理解基於模型的方法(Model-based)與免模型的方法(Model-free):
RL 算法可以分爲基於模型的方法(Model-based)與免模型的方法(Model-free)。前者主要發展自最優控制領域。通常先通過高斯過程(GP)或貝葉斯網絡(BN)等工具針對具體問題建立模型,然後再通過機器學習的方法或最優控制的方法,如模型預測控制(MPC)、線性二次調節器(LQR)、線性二次高斯(LQG)、迭代學習控制(ICL)等進行求解。而後者更多地發展自機器學習領域,屬於數據驅動的方法。算法通過大量採樣,估計代理的狀態、動作的值函數或回報函數,從而優化動作策略。
基於模型的方法一般先從數據中學習模型,然後基於學到的模型對策略進行優化。學習模型的過程和控制論中的系統參數辨識類似。因爲模型的存在,基於模型的方法可以充分利用每一個樣本來逼近模型,數據利用率極大提高。基於模型的方法則在一些控制問題中,相比於免模型方法,通常有 10^2 級的採樣率提升。此外,學到的模型往往對環境的變化魯棒, 當遇到新環境時,算法可以依靠已學到的模型做推理,具有很好的泛化性能。
回來講故事,我是怎麼回答我朋友的呢?
…
我說,我不喜歡。畢竟,我對男的不感興趣。
References:
[1] 83篇文獻-萬字總結 || 強化學習之路 https://mp.weixin.qq.com/s/_OS2q7-9Y7HcsoSXx-YBIQ
[2] Sutton R S, Barto A G. Reinforcement learning: An introduction[M]. MIT press, 2018.
公衆號:Piper蛋窩