1. 程式人生 > >強化學習之最基礎篇(演算法實現及基礎案例學習)

強化學習之最基礎篇(演算法實現及基礎案例學習)

    本部落格接著上一篇“強化學習之最基礎篇”而來,是基於上一篇的部落格進一步的探究,因為前一篇部落格完全是對於基本概念的介紹以及基本演算法的熟悉,這一篇便是偏應用,講理論的演算法加以實現,並且跑了一個小遊戲從而感受一下強化學習的魅力。

背景:在PA公司實習期間,由於公司每週都會有分享會,大家輪著來分享自己的研究學習成果(我感覺其實很不錯),然後就輪到了我,臨危受命,老大讓我這次分享強化學習,此前對此我一無所知,於是硬著頭皮來了,就產生了上一篇的部落格,上一篇分享之後老大又從工程方面想我發問,比如強化學習相對於傳統的監督、半監督的優勢在哪?它適合是什麼樣的資料集?怎樣將強化學習應用於實際工作中?所以老大就是老大,處處都是從工程角度出發考慮問題,可以讓我學習一波,就這樣我開始了第二次小組每週分享會。

任務:實現強化學習演算法,跑一個案例,分析強化學習的優勢等等

廢話說明:由於公司小組分享會是以ppt+講解的形勢呈現,所以本次部落格內容主要來自於ppt截圖(ps:我知道你對我很無奈),鑑於ppt內容過於簡介,於是該解釋之處我也有些許說明,總的來說此部落格更像是本人的筆記,而非分享大家的部落格,可能是我太懶吧,沒去仔細整理,不過有問題還是可以探討交流的,畢竟我也是菜鳥!;另外分享內容過於簡單,內容較少,其實也就是一個DQN大致的介紹和基本的演示,並沒有深度的演算法分析和實現解析,讓大家失望了,所以部落格的結尾會有彩蛋(我的學習基本依賴於周志華老師的西瓜書(連結)以及莫煩大神的強化學習系列課程(

連結),以下內容基本上來源於他們)。

開始吧!

1、

這裡寫圖片描述

2、

這裡寫圖片描述
    由於此次所演示案例使用演算法為新的演算法(前一次部落格並未提及,於是在演算法實現及案例分析之前先介紹一下基本的演算法知識作為引入)
    上一篇中大致介紹了Sarsa演算法,我們可以看上圖中的左側的Sarsa演算法,演算法第6行狀態值函式的估計和第4行動作的執行都是用了第5行產生的動作a’,也就是說狀態值函式Q和動作執行是利用相同的動作來進行的,所以Sarsa也稱為同策略學習演算法。
    不同於左側的Sarsa演算法,右側的Q-learning演算法在狀態值函式Q的估計和動作的執行時是採用了不同的動作a進行的,具體的看演算法第6行是用第5行產生的動作a(當前策略下最優的動作a)來進行狀態值函式的估計,而演算法第4行在執行動作時時重新計算出新的動作(當前策略加上ε-貪心演算法)來執行,也就是說該演算法在狀態值函式的估計和動作執行時所採用的動作是不同的,因此Q-learning也稱為異策略學習演算法。
    差異

:我們可以看出兩種演算法其實基本類似,除了上面所提到的差別,那麼這麼做是為什麼呢?(這裡借用 莫煩大神的話,後面再說說他的niubility)從演算法來看, 這就是他們兩最大的不同之處了. 因為 Sarsa 是說到做到型, 所以我們也叫他 on-policy, 線上學習, 學著自己在做的事情. 而 Q learning 是說到但並不一定做到, 所以它也叫作 Off-policy, 離線學習. 而因為有了 maxQ, Q-learning 也是一個特別勇敢的演算法.為什麼說他勇敢呢, 因為 Q learning 機器人 永遠都會選擇最近的一條通往成功的道路, 不管這條路會有多危險. 而 Sarsa 則是相當保守, 他會選擇離危險遠遠的, 拿到寶藏是次要的, 保住自己的小命才是王道. 這就是使用 Sarsa 方法的不同之處.

3、

這裡寫圖片描述
    在上面的簡單分析中,我們使用表格來表示Q(s,a),但是這個在現實的很多問題上是幾乎不可行的,因為狀態實在是太多。使用表格的方式根本存不下。我們是不可能通過表格來儲存狀態的。我們有必要對狀態的維度進行壓縮,解決辦法就是 價值函式近似Value Function Approximation,於是它就可以對連續狀態空間的值函式進行學習了。

4、

這裡寫圖片描述
    為什麼叫近似?因為我們並不知道Q值的實際分佈情況,本質上就是用一個函式來近似Q值的分佈,所以,也可以說是也將更方便的進行Q-Learning中動作的選擇與Q值更新

5、

這裡寫圖片描述
    DQN簡單來說就是Q-learning+CNN
    訓練是一個最優化問題,最優化一個損失函式,目標是讓損失函式最小化 ,即通過反向傳播使用梯度下降的方法來更新神經網路的引數。所以,要訓練Q網路,我們要能夠為Q網路提供有標籤的樣本。
    所以,我們把目標Q值作為標籤不就完了?我們的目標不就是讓Q值趨近於目標Q值嗎?
    大家回想一下Q-Learning演算法,Q值的更新依靠什麼?依靠的是利用Reward和Q計算出來的目標Q值。

6、

這裡寫圖片描述

7、

    cartpole視訊播放連結
    cartpole : 一個杆通過一個未被驅動的接頭連線到一個手推車上,手推車沿一條無摩擦的軌道移動。系統通過施加+1或-1的力量來控制。鐘擺開始直立,目標是防止它倒下。杆的每個時間步都提供+1的獎勵。當杆子距離垂直方向超過15度時,情節結束,或者車子從中心移動超過2.4個單位。

8、

這裡寫圖片描述
    我們可以看到,不同於傳統的監督學習等損失函式的曲線(平滑且損失不斷遞減,強化學習的損失函式是一個糾結的曲線,損失函式的波動很大,這正是因為強化學習在不斷探索環境並根據感知到的環境來執行動作時所帶來的損失波動(也會因為引入的動作執行隨機性帶來的損失函式值波動),也體現出了強化學習與監督學習、半監督學習等的區別

9、

    mountaincar視訊播放連結
    mountaincar : 是一個動力不足的車輛必須在陡峭的山坡上行駛的問題。由於重力比汽車發動機強,即使在全油門時,汽車也不能簡單地加速陡坡。汽車坐落在一個山谷中,必須學習如何在對面的山坡上行駛,才能在最右邊的山頂上進入目標。該領域已被用作各種強化學習論文的測試平臺。
    山車問題雖然相當簡單,但是通常被應用,因為它需要一個強化學習代理來學習兩個連續變數:位置和速度。對於車輛的任何給定狀態(位置和速度),代理人都有可能向左行駛,向右行駛或根本不使用發動機。在問題的標準版本中,agent在每一個沒有達到目標的時間步驟都會收到負面報酬。在初始成功之前,agent沒有關於目標的資訊。

10、

這裡寫圖片描述
分析類似於8

11、

這裡寫圖片描述

補充

部落格總結:部落格分享過於簡單,無奈自身水平有限,且接觸時間過短,但是還是感受到了強化學習的魅力,相信自己只要認真專研還是可能有希望的(一個強化學習小白的自我鼓勵,哈哈哈)
莫煩大神強化學習課程系列連結:
(莫煩大神是真大神,有自己的python學習課程,而且講解有程式碼有視訊,有留言會回覆,所以後續感興趣的夥伴可以關注一下他,畢竟我菜鳥帶不動大家,下面是有關DQN的此次分享的連結)
什麼是 DQN
DQN 演算法更新 (Tensorflow)
DQN 神經網路 (Tensorflow)
DQN 思維決策 (Tensorflow)
OpenAI gym 環境庫