0
本文作者: AI研習社-譯站 | 2019-01-10 10:32 |
本文為 AI 研習社編譯的技術(shù)博客,原標題 :
Diving deeper into Reinforcement Learning with Q-Learning
作者 | Thomas Simonini
翻譯 | 斯蒂芬?二狗子
校對 | 斯蒂芬?二狗子 審核 | 醬番梨 整理 | 菠蘿妹
原文鏈接:
https://medium.freecodecamp.org/diving-deeper-into-reinforcement-learning-with-q-learning-c18d0db58efe
深度強化學習從入門到大師:通過Q學習進行強化學習(第二部分)
本文是 Tensorflow 深度強化學習課程的一部分。??點擊這里查看教學大綱。
今天我們將學習 Q-Learning。 Q-Learning 是一種基于數(shù)值的強化學習算法。
本文是關(guān)于深度強化學習的免費系列博客文章的第二部分。有關(guān)更多信息和更多資源,請查看 課程的教學大綱。 請參閱 此處的第一篇文章。
在本文中,您將學習:
什么是 Q-Learning
如何用Numpy實現(xiàn)它
假設(shè)你是一名騎士,你需要拯救被困在上面地圖上所示城堡中的公主。
您可以一次移動一個圖塊。敵人不能移動,但是騎士和敵人落在同一塊地磚上就會死。目標是使騎士盡可能以最快的路線前往城堡。這可以使用“積分”系統(tǒng)來評估。
騎士每走一步都減去1分 (使用每一步-1策略有助于我們的Agent快速到達終點)。
如果 騎士 觸碰一個敵人,將失去100分,然后這一集結(jié)束。
如果 騎士 在到達城堡并獲勝,將得到100分。
問題是:如何做才能創(chuàng)建一個的 Agent 完成這個任務(wù)?
這里的第一個策略:讓 Agent 不斷嘗試移動到每個瓷磚上,然后為每個瓷磚著色。綠色表示“安全”,紅色表示“不安全”。
相同的地圖,但著色顯示哪些瓷磚可以安全訪問
然后,我們可以告訴 Agent 只在綠色瓷磚上移動。
但問題是這樣做并沒有對問題有幫助。當綠色瓷磚彼此相鄰時,我們無法分辨哪個瓷磚更好。所以 Agent 在試圖找到城堡過程會因此陷入死循環(huán)!
這是第二個策略:創(chuàng)建一個表格,我們將計算每種狀態(tài) state 下采取的每種行動 action的最大的未來預(yù)期獎勵。
多虧了這個策略,我們將知道對每種狀態(tài)采取的最佳行動是什么。
每個 state(瓷磚片)允許四種可能的動作。它們分別是向左,向右,向上或向下移動。
0表示不可以執(zhí)行的動作(如果你在左上角你不能向左或向上?。?/em>
在計算方面,我們可以將此網(wǎng)格轉(zhuǎn)換為表格。
這個表格被稱為 Q 表(“Q”表示動作的“質(zhì)量”)。列表示是四個動作(左,右,上,下)。行表示的是狀態(tài)。每個單元格的值將是該給定狀態(tài)和行動的最大未來預(yù)期獎勵。
如果在 state 狀態(tài)下給定的行動 action 是最佳策略,那么每個 Q 表評分為未來獎勵的最大期望。
為什么我們說“根據(jù)策略給出?”這是因為我們不能直接給出這種策略。而是通過改進我們的 Q 表以始終選擇最佳行動 action。
可以把這個 Q-table 認為是一個游戲的“備忘單”。通過找到“備忘單”行中的最高分,我們知道每個狀態(tài)(Q 表中的每一行)最好的行動是什么。
Yeah!我們解決了城堡問題!但是等等......我們?nèi)绾斡嬎?Q 表中每個元素的值?
要給出此 Q 表的每個值,可以使用 Q-learning 算法。
動作值函數(shù)(或“ Q 函數(shù)”)有兩個輸入:“狀態(tài)”和“動作”。它返回該動作在該狀態(tài)下的預(yù)期未來獎勵。
我們可以把這個 Q 函數(shù)作為一個閱讀指南,通過滾動 Q 表找到與我們的狀態(tài)相關(guān)的行,以及與我們的動作相關(guān)聯(lián)的列。它返回匹配的 Q 值。這個值就是“預(yù)期的未來獎勵”。
在我們探索環(huán)境之前,Q 表中的值是固定的初始值(一般為0)。在我們探索環(huán)境時,通過使用Bellman方程迭代更新Q(s,a),Q 表中的值將趨近于更好(見下文?。?。
Q-Learning算法的偽代碼
步驟1:初始化Q值
我們構(gòu)建一個Q表,有 m 列 (m = 行動數(shù))和 n 行(n =狀態(tài)數(shù))。我們將值初始化為0。
第2步:終身學習(或直到學習停止)
該過程將重復步驟3到5,直到算法運行次數(shù)為的 episode 的最大值(由用戶指定)或直到我們手動停止訓練。
步驟3:選擇操作
根據(jù)當前的Q值 選擇 當前狀態(tài)下行動 Action a。
但是......如果每個Q值都是零,那么在該采取什么行動?
這就是我們在上一篇文章中談到的探索/使用權(quán)衡的重要性。
我們的想法是,在開始時,我們將使用epsilon貪心策略:
我們指定一個探索率“epsilon”,我們在開始時設(shè)置為1,即隨機執(zhí)行的step的速度。剛開始學習時,這個速率必須是最高值,因為我們對Q表的取值一無所知。這意味著我們需要通過隨機選擇我們的行動進行大量探索。
生成一個隨機數(shù)。如果這個數(shù)字> epsilon,那么我們將進行“ 使用”(這意味著我們使用已知的方法來選擇每一步的最佳動作)。否則,我們會進行探索。
我們的想法是,在Q函數(shù)訓練開始時我們必須有一個較大的epsilon。然后,隨著Agent變得做得越來越好,逐漸減少它。
步驟4-5:評估!
采取行動action a 并觀察結(jié)果狀態(tài) s' 和獎勵 r。 并更新函數(shù)Q(s,a)。
我們采取我們在步驟3中選擇的操作,然后執(zhí)行此操作將返回一個新的狀態(tài)s'和獎勵r(正如我們在第一篇文章中的看到的強化學習過程那樣)。
然后,使用Bellman方程更新Q(s,a):
更新Q(state,action)代碼可以寫成如下所示:
New Q value =
Current Q value +
lr * [Reward + discount_rate * (highest Q value between possible actions from the new state s’ ) — Current Q value ]
我們來舉個例子:
一個奶酪= +1
兩個奶酪= +2
大堆奶酪= +10(劇集結(jié)束)
如果吃到鼠毒= -10(劇集結(jié)束)
第1步:初始化Q表
初始化的Q表
步驟2:選擇操作
從起始位置,您可以選擇向右還是向下。我們有一個大的epsilon率(因為我們對環(huán)境一無所知),采用隨機選擇的方式。例如......向右移動。
我們采用隨機移動(例如,右)
發(fā)現(xiàn)了一塊奶酪(+1),則更新的Q值并記錄向右的行動。通過Bellman方程來進行計算。
步驟4-5:更新Q函數(shù)
首先,計算Q值的變化ΔQ(start, right)
然后將Q值與ΔQ(start, right)的和乘以學習率。
學習率可以看視為該學習網(wǎng)絡(luò)更新Q值的速度。如果學習率為1,則新估計值將是新的Q值。
更新后的Q表
好!我們剛剛更新了我們的第一個Q值?,F(xiàn)在我們需要一次又一次地這樣做,直到學習停止。
我們制作了一個視頻,我們實現(xiàn)了一個學習與Numpy一起玩Taxi-v2的Q學習代理。
使用numpy和OpenAI Taxi-v2?進行Q學習(教程)
現(xiàn)在我們知道Q-Learning是如何工作的,我們將逐步實現(xiàn)Q學習算法。代碼的每個部分在下面的Jupyter筆記本中都能找到。
您可以在Deep Reinforcement Learning Course repo中訪問它 。
或者您可以直接在Google Colaboratory上訪問它:
Q-learning實現(xiàn)Frozen Lake
colab.research.google.com
Q-learning是一種基于數(shù)值的強化學習算法,用于使用q函數(shù)找到最優(yōu)的動作選擇策略。
它根據(jù)動作值函數(shù)評估要采取的動作,該動作值函數(shù)確定處于某種狀態(tài)的值并在該狀態(tài)下采取某種動作。
目標:最大化Q函數(shù)(給定狀態(tài)和行動的預(yù)期未來獎勵)。
Q表幫助我們找到每個狀態(tài)的最佳行動。
通過選擇所有可能的最佳行動來最大化預(yù)期獎勵。
Q表示來自特定狀態(tài)下某個動作的質(zhì)量。
函數(shù)Q(state, action) → return該狀態(tài)下該動作的預(yù)期未來獎勵。
可以使用Q學習來估計該函數(shù),Q學習使用Bellman方程迭代地更新Q(s,a)
在我們探索環(huán)境之前:Q表給出了相同的任意值進行初始化→但是當我們探索環(huán)境時→Q給了我們更好的近似值。
就這樣!不要忘記自己實現(xiàn)代碼的每個部分 - 嘗試修改我給你的代碼非常重要。
嘗試添加epoch,改變學習速度,并使用更復雜的環(huán)境(例如使用8x8瓷磚的Frozen-lake)。玩得開心!
下次我們將開展深度Q學習,這是2015年深度強化學習的最大突破之一。我們將訓練一個智能體玩Doom,并殺掉敵人!
想要繼續(xù)查看該篇文章相關(guān)鏈接和參考文獻?
長按鏈接點擊打開或點擊底部【深度強化學習從入門到大師:通過Q學習進行強化學習(第二部分)】:
https://ai.yanxishe.com/page/TextTranslation/1394
AI研習社每日更新精彩內(nèi)容,觀看更多精彩內(nèi)容:雷鋒網(wǎng)雷鋒網(wǎng)雷鋒網(wǎng)
【點擊跳轉(zhuǎn)】深度強化學習從入門到大師:簡介篇(第一部分)
等你來譯:
雷峰網(wǎng)原創(chuàng)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見轉(zhuǎn)載須知。