莫烦强化学习-简介
參考鏈接:
https://mofanpy.com/tutorials/machine-learning/reinforcement-learning/intro-RL/
https://www.cnblogs.com/maybe2030/p/9862353.html
第1章 簡介
強化學習是機器學習大家族中的一大類, 使用強化學習能夠讓機器學著如何在環境中拿到高分, 表現出優秀的成績. 而這些成績背后卻是他所付出的辛苦勞動, 不斷的試錯, 不斷地嘗試, 累積經驗, 學習經驗。
1.1 什么是強化學習
1.1.1 從無到有
強化學習是一類算法, 是讓計算機實現從一開始什么都不懂, 腦袋里沒有一點想法, 通過不斷地嘗試, 從錯誤中學習, 最后找到規律, 學會了達到目的的方法。
強化學習(Reinforcement Learning,簡稱RL)是機器學習中的一個領域,強調如何基于環境而行動,以取得最大化的預期利益。
1.1.2 虛擬老師
原來計算機也需要一位虛擬的老師, 這個老師比較吝嗇, 他不會告訴你如何移動, 如何做決定, 他為你做的事只有給你的行為打分, 那我們應該以什么形式學習這些現有的資源, 或者說怎么樣只從分數中學習到我應該怎樣做決定呢? 很簡單, 我只需要記住那些高分, 低分對應的行為, 下次用同樣的行為拿高分, 并避免低分的行為。
比如老師會根據我的開心程度來打分, 我開心時, 可以得到高分, 我不開心時得到低分。有了這些被打分的經驗, 我就能判斷為了拿到高分, 我應該選擇一張開心的臉, 避免選到傷心的臉。這也是強化學習的核心思想。可以看出在強化學習中, 一種行為的分數是十分重要的。所以強化學習具有分數導向性。我們換一個角度來思考。這種分數導向性好比我們在監督學習中的正確標簽。
1.1.3 對比監督學習
我們知道監督學習, 是已經有了數據和數據對應的正確標簽, 比如這樣。 監督學習就能學習出那些臉對應哪種標簽。 不過強化學習還要更進一步, 一開始它并沒有數據和標簽。
他要通過一次次在環境中的嘗試, 獲取這些數據和標簽, 然后再學習通過哪些數據能夠對應哪些標簽, 通過學習到的這些規律, 竟可能地選擇帶來高分的行為 (比如這里的開心臉)。 這也就證明了在強化學習中, 分數標簽就是他的老師, 他和監督學習中的老師也差不多。
1.1.4 RL算法們
強化學習是一個大家族, 他包含了很多種算法, 我們也會一一提到之中一些比較有名的算法, 比如有通過行為的價值來選取特定行為的方法, 包括使用表格學習的 q learning, sarsa, 使用神經網絡學習的 deep q network, 還有直接輸出行為的 policy gradients, 又或者了解所處的環境, 想象出一個虛擬的環境并從虛擬的環境中學習 等等。
1.2 強化學習匯總
1.2.1 Modelfree 和 Modelbased
我們可以將所有強化學習的方法分為理不理解所處環境,如果我們不嘗試去理解環境, 環境給了我們什么就是什么. 我們就把這種方法叫做 model-free, 這里的 model 就是用模型來表示環境, 那理解了環境也就是學會了用一個模型來代表環境, 所以這種就是 model-based 方法。 我們想象,現在環境就是我們的世界, 我們的機器人正在這個世界里玩耍, 他不理解這個世界是怎樣構成的, 也不理解世界對于他的行為會怎么樣反饋。舉個例子, 他決定丟顆原子彈去真實的世界, 結果把自己給炸死了, 所有結果都是那么現實(model-free,因為現實世界遭遇原子彈爆炸是會把機器人炸死的,是現實環境做出的反饋)。不過如果采取的是 model-based RL, 機器人會通過過往的經驗, 先理解真實世界是怎樣的, 并建立一個模型來模擬現實世界的反饋, 最后他不僅可以在現實世界中玩耍, 也能在模擬的世界中玩耍, 這樣就沒必要去炸真實世界, 連自己也炸死了, 他可以像玩游戲一樣炸炸游戲里的世界(在模擬環境中進行訓練,現實中的機器人就不會被炸死), 也保住了自己的小命。
Model-free 的方法有很多, 像 Q learning, Sarsa, Policy Gradients 都是從環境中得到反饋然后從中學習。而 model-based RL 只是多了一道程序, 為真實世界建模(建立一個模擬世界), 也可以說他們都是 model-free 的強化學習, 只是 model-based 多出了一個虛擬環境, 我們不僅可以像 model-free 那樣在現實中玩耍,還能在游戲中玩耍, 而玩耍的方式也都是 model-free 中那些玩耍方式, 最終 model-based 還有一個殺手锏是 model-free 超級羨慕的。那就是想象力。
**Model-free 中, 機器人只能按部就班, 一步一步等待真實世界的反饋, 再根據反饋采取下一步行動。而 model-based, 他能通過想象來預判斷接下來將要發生的所有情況。然后選擇這些想象情況中最好的那種。**并依據這種情況來采取下一步的策略, 這也就是圍棋場上 AlphaGo 能夠超越人類的原因。接下來, 我們再來用另外一種分類方法將強化學習分為基于概率和基于價值。
1.2.2 基于概率和基于價值
基于概率是強化學習中最直接的一種, 他能通過感官分析所處的環境, 直接輸出下一步要采取的各種動作的概率, 然后根據概率采取行動, 所以每種動作都有可能被選中, 只是可能性不同。而基于價值的方法輸出則是所有動作的價值, 我們會根據最高價值來選動作, 相比基于概率的方法, 基于價值的決策部分更為鐵定, 毫不留情, 就選價值最高的, 而基于概率的, 即使某個動作的概率最高, 但是還是不一定會選到他。
我們現在說的動作都是一個一個不連續的動作, 而對于選取連續的動作, 基于價值的方法是無能為力的。我們卻能用一個概率分布在連續動作中選取特定動作, 這也是基于概率的方法的優點之一。那么這兩類使用的方法又有哪些呢?
比如在基于概率這邊, 有 Policy Gradients, 在基于價值這邊有 Q learning, Sarsa 等. 而且我們還能結合這兩類方法的優勢之處, 創造更牛逼的一種方法, 叫做 Actor-Critic, actor 會基于概率做出動作, 而 critic 會對做出的動作給出動作的價值, 這樣就在原有的 policy gradients 上加速了學習過程.
1.2.3 回合更新和單步更新
強化學習還能用另外一種方式分類, 回合更新和單步更新, 想象強化學習就是在玩游戲, 游戲回合有開始和結束。回合更新指的是游戲開始后, 我們要等待游戲結束, 然后再總結這一回合中的所有轉折點, 再更新我們的行為準則。而單步更新則是在游戲進行中每一步都在更新, 不用等待游戲的結束, 這樣我們就能邊玩邊學習了。
再來說說方法, Monte-carlo learning 和基礎版的 policy gradients 等 都是回合更新制, Qlearning, Sarsa, 升級版的 policy gradients 等都是單步更新制。因為單步更新更有效率, 所以現在大多方法都是基于單步更新。比如有的強化學習問題并不屬于回合問題。
1.2.4 在線學習和離線學習
這個視頻的最后一種分類方式是 在線學習和離線學習, 所謂在線學習, 就是指我必須本人在場, 并且一定是本人邊玩邊學習, 而離線學習是你可以選擇自己玩, 也可以選擇看著別人玩, 通過看別人玩來學習別人的行為準則, 離線學習 同樣是從過往的經驗中學習, 但是這些過往的經歷沒必要是自己的經歷, 任何人的經歷都能被學習。或者我也不必要邊玩邊學習, 我可以白天先存儲下來玩耍時的記憶, 然后晚上通過離線學習來學習白天的記憶。那么每種學習的方法又有哪些呢?
最典型的在線學習就是 Sarsa 了, 還有一種優化 Sarsa 的算法, 叫做 Sarsa lambda, 最典型的離線學習就是 Q learning, 后來人也根據離線學習的屬性, 開發了更強大的算法, 比如讓計算機學會玩電動的 Deep-Q-Network。
1.2.5 總結
| 理不理解環境 | Q learning, Sarsa, Policy Gradients | model-based RL |
| 基于概率 | 基于價值 | |
| 價值與概率 | Policy Gradients | Q learning, Sarsa |
| 回合更新 | 單步更新 | |
| 更新制 | Monte-carlo learning, 基礎版的 policy gradients | Q learning, Sarsa, 升級版的 policy gradients |
| 在線學習 | 離線學習 | |
| 是否在線 | Sarsa, Sarsa lambda | Q learning, Deep-Q-Network |
1.3 為什么要用強化學習
1.3.1 強化學習介紹
強化學習 (Reinforcement Learning) 是一個機器學習大家族中的分支, 由于近些年來的技術突破, 和深度學習 (Deep Learning) 的整合, 使得強化學習有了進一步的運用。比如讓計算機學著玩游戲, AlphaGo 挑戰世界圍棋高手, 都是強化學習在行的事。強化學習也是讓你的程序從對當前環境完全陌生, 成長為一個在環境中游刃有余的高手。
這些教程的教學, 不依賴于任何強化學習的 python 模塊。因為強化學習的復雜性, 多樣性, 到現在還沒有比較好的統一化模塊。不過我們還是能用最基礎的方法編出優秀的強化學習程序!
1.3.2 模擬程序提前看
優酷的模擬視頻在這里:
http://list.youku.com/albumlist/show?id=27485743&ascending=1&page=1
1.4 課程要求
1.4.1 教程必備模塊
強化學習有一些現成的模塊可以使用, 但是那些模塊并不全面, 而且強化學習很依賴與你給予的學習環境。對于不同學習環境的強化學習, 可能 RL 的代碼就不同. 所以我們要抱著以不變應萬變的心態, 用基礎的模塊, 從基礎學起。 懂了原理, 再復雜的環境也不在話下。
所以用到的模塊和對應的教程:
- Numpy, Pandas (必學), 用于學習的數據處理,深度學習中也經常用到
- Matplotlib(可學), 偶爾會用來呈現誤差曲線什么的
- Tkinter (可學), 你可以自己用它來編寫模擬環境
- Tensorflow(可學), 后面實現神經網絡與強化學習結合的時候用到
- OpenAI gym(可學), 提供了很多現成的模擬環境
總結
- 上一篇: 在Linux终端下调用可执行文件时总要加
- 下一篇: 智能客户端研究笔记(三)