竹内纱里奈和大战黑人_欧美成人黄色小视频_91福利影视_欧美在线观看视频网站_h色网站免费观看_97综合

極客小將

您現(xiàn)在的位置是:首頁 » scratch編程資訊

資訊內(nèi)容

使用Python的OpenAI Gym對Deep Q-Learning的實(shí)操介紹(附學(xué)習(xí)資源)

極客小將2021-02-04-

upload/article/images/2021-02-04/9f81c8273834e3ca04cc4b7da12df56d.jpg

翻譯 | 張睿毅

校對 | 吳金笛

來源 | 數(shù)據(jù)派THU(ID:DatapiTHU)

導(dǎo)言

我一直對游戲著迷。在緊湊的時間線下執(zhí)行一個動作似乎有無限的選擇——這是一個令人興奮的體驗(yàn)。沒有什么比這更好的了。

所以當(dāng)我讀到DeepMind提出的不可思議的算法(如AlphaGo和AlphaStar)時,我被吸引了。我想學(xué)習(xí)如何在我自己的機(jī)器上制造這些系統(tǒng)。這讓我進(jìn)入了深度強(qiáng)化學(xué)習(xí)(Deep?RL)的世界。

即使你不喜歡玩游戲,深度強(qiáng)化學(xué)習(xí)也很重要。只用看當(dāng)前使用深度強(qiáng)化學(xué)習(xí)進(jìn)行研究的各種功能就知道了:

upload/article/images/2021-02-04/e9ef11850c74e81de5d98688a2198ec1.jpg

那工業(yè)級應(yīng)用程序呢?這里有兩個最常見的深度強(qiáng)化學(xué)習(xí)用例:

  • 谷歌云自動機(jī)器學(xué)習(xí)(Google’s Cloud AutoML)

  • 臉書Horizon平臺(Facebook's Horizon Platform)

深度強(qiáng)化學(xué)習(xí)的范圍是巨大的?,F(xiàn)在是一個進(jìn)入這個領(lǐng)域并并以此作為職業(yè)的好時機(jī)。

在這篇文章中,我的目標(biāo)是幫助您邁出第一步,進(jìn)入深度強(qiáng)化學(xué)習(xí)的世界。我們將使用強(qiáng)化學(xué)習(xí)中最流行的算法之一,Deep?Q-Learning,來了解強(qiáng)化學(xué)習(xí)是怎樣工作的。錦上添花的是什么呢?我們將使用Python在一個很棒的案例研究中實(shí)現(xiàn)我們的所有學(xué)習(xí)。

目錄

一、Q-Learning之路

二、為什么要做“深度”Q-Learning?

三、Deep?Q-Learning的簡介

四、與深度學(xué)習(xí)相比,深度強(qiáng)化學(xué)習(xí)面臨的挑戰(zhàn)

  • 4.1?目標(biāo)網(wǎng)絡(luò)

  • 4.2?經(jīng)驗(yàn)回放

五、使用Keras?&?Gym?在Python中實(shí)現(xiàn)Deep?Q-Learning

一、Q-Learning之路

在正式深度強(qiáng)化學(xué)習(xí)之前,您應(yīng)該了解一些概念。別擔(dān)心,我已經(jīng)為你安排好了。

我以前寫過很多關(guān)于強(qiáng)化學(xué)習(xí)的文章,介紹了多臂抽獎問題、動態(tài)編程、蒙特卡羅學(xué)習(xí)和時間差分等概念。我建議按以下順序?yàn)g覽這些指南:

  • 強(qiáng)化學(xué)習(xí)的基礎(chǔ)學(xué)習(xí):使用動態(tài)編程的基于模型的規(guī)劃

    https://www.analyticsvidhya.com/blog/2018/09/reinforcement-learning-model-based-planning-dynamic-programming/?

  • 強(qiáng)化學(xué)習(xí)指南:從零開始用Python解決多臂抽獎問題

    https://www.analyticsvidhya.com/blog/2018/09/reinforcement-multi-armed-bandit-scratch-python/?utm_source=blog&utm_medium=introduction-deep-q-learning-python

  • 強(qiáng)化學(xué)習(xí):通過OpenAI?GymToolkit介紹蒙特卡洛學(xué)習(xí)

    https://www.analyticsvidhya.com/blog/2018/11/reinforcement-learning-introduction-monte-carlo-learning-openai-gym/?utm_source=blog&utm_medium=introduction-deep-q-learning-python?

  • 蒙特卡羅樹搜索簡介:DeepMind的AlphaGo背后的游戲改變算法

    https://www.analyticsvidhya.com/blog/2019/01/monte-carlo-tree-search-introduction-algorithm-deepmind-alphago/?

  • 強(qiáng)化學(xué)習(xí)的基礎(chǔ):時間差(TD)學(xué)習(xí)介紹

    https://www.analyticsvidhya.com/blog/2019/03/reinforcement-learning-temporal-difference-learning/?utm_source=blog&utm_medium=introduction-deep-q-learning-python

這些文章足以從一開始就獲得基本強(qiáng)化學(xué)習(xí)的詳細(xì)概述。

但是,請注意,以上鏈接的文章絕不是讀者理解Deep?Q-Learning的先決條件。在探究什么是Deep?Q-Learning及其實(shí)現(xiàn)細(xì)節(jié)之前,我們將快速回顧一下基本的強(qiáng)化學(xué)習(xí)概念。

  • 強(qiáng)化學(xué)習(xí)代理環(huán)境

強(qiáng)化學(xué)習(xí)任務(wù)是訓(xùn)練與環(huán)境交互的代理。代理通過執(zhí)行操作到達(dá)不同的場景,稱為狀態(tài)。行動會帶來正面和負(fù)面的回報(bào)。

代理只有一個目的,那就是最大限度地提高一段經(jīng)歷的總回報(bào)。這個經(jīng)歷是環(huán)境中第一個狀態(tài)和最后一個或最終狀態(tài)之間發(fā)生的任何事情。我們加強(qiáng)了代理的學(xué)習(xí),以經(jīng)驗(yàn)來執(zhí)行最佳的行動。這是戰(zhàn)略或原則。

upload/article/images/2021-02-04/95212963893061a5215df647bea58b8b.jpg

讓我們舉一個非常流行的PubG游戲的例子:

  • 士兵是這里與環(huán)境互動的代理;

  • 狀態(tài)就是我們在屏幕上看到的內(nèi)容;

  • 一段經(jīng)歷是一個完整的游戲;

  • 動作包括向前、向后、向左、向右、跳躍、躲避、射擊等;

  • 獎勵是根據(jù)這些行動的結(jié)果確定的。如果士兵能夠殺死敵人,那就獲得一個正面的回報(bào),而被敵人射殺是一個負(fù)面的回報(bào)。

現(xiàn)在,為了殺死敵人或得到正面的回報(bào),需要一系列的行動。這就是延遲或延遲獎勵的概念開始發(fā)揮作用的地方。強(qiáng)化學(xué)習(xí)的關(guān)鍵是學(xué)習(xí)執(zhí)行這些序列并最大化回報(bào)。

  • 馬爾科夫決策過程(MDP)

需要注意的一點(diǎn)是,環(huán)境中的每個狀態(tài)都是其先前狀態(tài)的結(jié)果,而先前狀態(tài)又是其先前狀態(tài)的結(jié)果。然而,存儲所有這些信息,即使是在短時間的經(jīng)歷中,也變得不可行。

為了解決這一問題,我們假設(shè)每個狀態(tài)都遵循馬爾可夫?qū)傩?,即每個狀態(tài)僅依賴于先前的狀態(tài)以及從該狀態(tài)到當(dāng)前狀態(tài)的轉(zhuǎn)換??纯聪旅娴拿詫m,以更好地了解這項(xiàng)工作背后的思想:

upload/article/images/2021-02-04/9d70a85ebfda8f9fe370f5e401bd84c3.jpg

現(xiàn)在,有兩個場景具有兩個不同的起點(diǎn),代理通過不同的路徑到達(dá)相同的倒數(shù)第二狀態(tài)?,F(xiàn)在,不管代理通過什么路徑到達(dá)紅色狀態(tài)。走出迷宮并到達(dá)最后一個狀態(tài)的下一步是向右走。顯然,我們只需要紅色/倒數(shù)第二狀態(tài)的信息就可以找到下一個最佳的行為,這正是馬爾可夫?qū)傩运凳镜摹?

  • Q?學(xué)習(xí)

假設(shè)我們知道每一步行動的預(yù)期回報(bào)。這基本上就像是給代理的一張備忘單!我們的代理會確切知道該采取什么行動。

它將執(zhí)行最終產(chǎn)生最大總獎勵的動作序列。總回報(bào)也稱為Q值,我們將把我們的策略公式化為:

upload/article/images/2021-02-04/d1103df3e877a3b54194c2bbc11f7514.jpg

上述方程表明,在狀態(tài)s和執(zhí)行動作a產(chǎn)生的Q值是立即獎勵r(s,?a)加上下一狀態(tài)s’ 可能的最高Q值。這里的gamma是折現(xiàn)系數(shù),它控制著未來獎勵的貢獻(xiàn)。

q(s’,?a)又取決于q(s”,?a),該q(s”,?a)將具有伽馬平方系數(shù)。因此,Q值取決于未來狀態(tài)的Q值,如下所示:

upload/article/images/2021-02-04/2d12a89e7e86c761736b1f57df9a2a13.jpg

調(diào)整gamma的值將減少或增加未來獎勵的貢獻(xiàn)。

由于這是一個遞歸方程,我們可以從對所有Q值進(jìn)行任意假設(shè)開始。根據(jù)經(jīng)驗(yàn),它將收斂到最優(yōu)策略。在實(shí)際情況下,這是作為更新實(shí)現(xiàn)的:

upload/article/images/2021-02-04/a8ff73c022659c3ba57a2e5758d68a0c.jpg

其中alpha是學(xué)習(xí)速率或步長。這就決定了新獲取的信息在多大程度上會覆蓋舊信息。

二、為什么選擇“深度”Q-Learning

Q-Learning是一個簡單但功能強(qiáng)大的算法,可以為我們的代理提供一個備忘單,有助于代理準(zhǔn)確地確定要執(zhí)行的操作。

但如果這張備忘單太長怎么辦?設(shè)想一個有10000個狀態(tài)的環(huán)境,每個狀態(tài)有1000個行動。這將創(chuàng)建一個包含1000萬個單元格的表。事情很快就會失控!

很明顯,我們不能從已經(jīng)探索過的狀態(tài)中推斷出新狀態(tài)的Q值。這有兩個問題:

  • 首先,保存和更新該表所需的內(nèi)存量將隨著狀態(tài)數(shù)的增加而增加。

  • 第二,探索每個狀態(tài)創(chuàng)建所需Q表所需的時間量是不現(xiàn)實(shí)的。

這里有一個想法——如果我們用機(jī)器學(xué)習(xí)模型(比如神經(jīng)網(wǎng)絡(luò))來估計(jì)這些Q值會怎么樣?好吧,這就是DeepMind算法背后的想法,它使得谷歌以5億美元收購DeepMind!

三、Deep?Q-Learning的簡介

在深度Q學(xué)習(xí)中,我們使用神經(jīng)網(wǎng)絡(luò)來近似Q值函數(shù)。狀態(tài)作為輸入,所有可能動作的Q值作為輸出生成。Q-Learning和深度Q-Learning之間的比較如下:

upload/article/images/2021-02-04/fe1e8d9bfaaf46060a8cd6110ec8edc2.jpg

那么,使用深度Q學(xué)習(xí)網(wǎng)絡(luò)(DQNs)強(qiáng)化學(xué)習(xí)的步驟是什么?

  1. 所有過去的經(jīng)驗(yàn)都由用戶存儲在內(nèi)存中。

  2. 下一步動作由Q網(wǎng)絡(luò)的最大輸出決定。

  3. 這里的損失函數(shù)是預(yù)測的Q值和目標(biāo)Q值–Q*的均方誤差。

這基本上是一個回歸問題。然而,我們不知道這里的目標(biāo)或?qū)嶋H價值,因?yàn)槲覀冋谔幚硪粋€強(qiáng)化學(xué)習(xí)問題?;氐接韶悹柭匠虒?dǎo)出的Q值更新方程。我們有:

upload/article/images/2021-02-04/7cb6ae4cc2e7d9a5ae1f1d0de078cba7.jpg

綠色部分表示目標(biāo)。我們可以說,它是在預(yù)測自己的價值,但由于R是無偏的真實(shí)回報(bào),網(wǎng)絡(luò)將使用反向傳播更新其梯度,最終收斂。

四、與深度學(xué)習(xí)相比,深度強(qiáng)化學(xué)習(xí)面臨的挑戰(zhàn)

到目前為止,這一切看起來都很棒。我們了解了神經(jīng)網(wǎng)絡(luò)如何幫助代理學(xué)習(xí)最佳行動。然而,當(dāng)我們將深度強(qiáng)化學(xué)習(xí)與深度學(xué)習(xí)(DL)進(jìn)行比較時,存在一個挑戰(zhàn):

  • 非固定或不穩(wěn)定目標(biāo)

讓我們回到深度Q學(xué)習(xí)的偽代碼:

upload/article/images/2021-02-04/522784620b5ab213c1bf3234c7dada5f.jpg

正如您在上面的代碼中看到的,目標(biāo)在每次迭代中都在不斷地變化。在深度學(xué)習(xí)中,目標(biāo)變量不變,因此訓(xùn)練是穩(wěn)定的,這對強(qiáng)化學(xué)習(xí)來說則不然。

綜上所述,我們經(jīng)常依賴于政策或價值函數(shù)來加強(qiáng)學(xué)習(xí),以獲取行動樣本。然而,隨著我們不斷學(xué)習(xí)要探索什么,這種情況經(jīng)常發(fā)生變化。當(dāng)我們玩游戲時,我們會更多地了解狀態(tài)和行為的基本真值,因此輸出也在變化。

因此,我們嘗試學(xué)習(xí)映射不斷變化的輸入和輸出。但是解決辦法是什么呢?

4.1 目標(biāo)網(wǎng)絡(luò)

由于同一個網(wǎng)絡(luò)正在計(jì)算預(yù)測值和目標(biāo)值,這兩者之間可能存在很大的差異。因此,我們可以使用兩個神經(jīng)網(wǎng)絡(luò)來代替使用1個神經(jīng)網(wǎng)絡(luò)來學(xué)習(xí)。

我們可以使用單獨(dú)的網(wǎng)絡(luò)來估計(jì)目標(biāo)。該目標(biāo)網(wǎng)絡(luò)與函數(shù)逼近器具有相同的結(jié)構(gòu),但參數(shù)是固定的。對于每個C迭代(超參數(shù)),預(yù)測網(wǎng)絡(luò)中的參數(shù)都會復(fù)制到目標(biāo)網(wǎng)絡(luò)中。這將導(dǎo)致更穩(wěn)定的訓(xùn)練,因?yàn)樗3帜繕?biāo)功能不變(在一段時間之內(nèi)):

upload/article/images/2021-02-04/9d1197459ecb8910508f57a406922264.jpg

4.2 經(jīng)驗(yàn)回放

要執(zhí)行經(jīng)驗(yàn)回放,我們存儲代理的經(jīng)驗(yàn)?–?et=(st,at,rt,st+1)

上面的陳述是什么意思?在模擬或?qū)嶋H經(jīng)驗(yàn)中,系統(tǒng)不會在狀態(tài)/動作對上運(yùn)行Q-Learning,而是將為[狀態(tài)、動作、獎勵、下一個狀態(tài)]發(fā)現(xiàn)的數(shù)據(jù)存儲在一個大表中。

讓我們用一個例子來理解這一點(diǎn)。

假設(shè)我們試圖構(gòu)建一個視頻游戲機(jī)器人,其中游戲的每一幀表示不同的狀態(tài)。在訓(xùn)練過程中,我們可以從最后100000幀中隨機(jī)抽取64幀來訓(xùn)練我們的網(wǎng)絡(luò)。這將使我們得到一個子集,其中樣本之間的相關(guān)性較低,也將提供更好的采樣效率。

  • 結(jié)合到一起

到目前為止我們學(xué)到的概念是什么?它們結(jié)合在一起,形成了用于在Atari游戲中實(shí)現(xiàn)人類級性能的深度Q學(xué)習(xí)算法(僅使用游戲的視頻幀)。

upload/article/images/2021-02-04/6cee1bcc15f1e1f2f27dd3ca7ec988f1.jpg

我在下面列出了Deep?Q-Network(DQN)中涉及的步驟:

  1. 對游戲畫面(狀態(tài)S)進(jìn)行預(yù)處理并反饋給DQN,DQN將返回狀態(tài)下所有可能動作的Q值

  2. 使用epsilon貪婪策略選擇操作。用概率epsilon,我們選擇一個隨機(jī)動作a并且概率為1-epsilon,我們選擇一個最大Q值的動作,例如a=argmax(Q(s, a,?w))

  3. 在s狀態(tài)下執(zhí)行此操作并移動到新的s狀態(tài)以獲得獎勵。此狀態(tài)s'是下一個游戲屏幕的預(yù)處理圖像。我們將此轉(zhuǎn)換存儲在重播緩沖區(qū)中,如

  4. 接下來,從重放緩沖區(qū)中隨機(jī)抽取若干批轉(zhuǎn)換并計(jì)算損失。

  5. 已知:upload/article/images/2021-02-04/1ddb70f8630cf58831b5d281b27a3a2d.jpg,即目標(biāo)Q與預(yù)測Q的平方差。

  6. 根據(jù)我們的實(shí)際網(wǎng)絡(luò)參數(shù)進(jìn)行梯度下降,以盡量減少損失。

  7. 每次C迭代后,將我們的實(shí)際網(wǎng)絡(luò)權(quán)重復(fù)制到目標(biāo)網(wǎng)絡(luò)權(quán)重

  8. 對m個經(jīng)歷重復(fù)這些步驟

五、使用Keras?&?OpenAI?Gym?通過Python實(shí)現(xiàn)Deep?Q-Learning

好吧,這樣我們對深度Q學(xué)習(xí)的理論方面有了很好的了解?,F(xiàn)在就開始行動怎么樣?沒錯——讓我們啟動我們的python?notebook吧!

我們會創(chuàng)造一個可以玩CartPole的代理。我們也可以使用Atari游戲,但是訓(xùn)練一個代理來玩需要一段時間(從幾個小時到一天)。我們的方法背后的思想將保持不變,所以你可以在你的機(jī)器上的Atari游戲上嘗試這個。

upload/article/images/2021-02-04/b77b1bd0d5f1df5299e5a757ae840804.jpg

CartPole是OpenAI?gym(游戲模擬器)中最簡單的環(huán)境之一。正如你在上面的動畫中看到的,CartPole的目標(biāo)是平衡一個桿,這個桿與一個運(yùn)動車頂部的接合處相連。

這里有四種由狀態(tài)給出的信息(如桿的角度和推車的位置),而不是像素信息。代理可以通過執(zhí)行一系列0或1操作來移動車,將車向左或向右推。

我們將在這里使用Keras-rl庫,它允許我們實(shí)現(xiàn)深度Q學(xué)習(xí)。

第一步:安裝keras-rl庫

從終端運(yùn)行以下代碼塊:

git clone https://github.com/matthiasplappert/keras-rl.gitcd keras-rlpython setup.py install


第二步:?安裝Cartpole環(huán)境的依賴項(xiàng)

假設(shè)你已安裝pip,你需要安裝以下庫:

pip?install?h5pypip install gym

第三步:開始吧!

首先,我們導(dǎo)入必需的模塊:

import?numpy?as?npimport?gym
from?keras.models?import?Sequentialfrom?keras.layers?import?Dense,?Activation,?Flattenfrom?keras.optimizers?import?Adamfrom?rl.agents.dqn?import?DQNAgentfrom?rl.policy?import?EpsGreedyQPolicyfrom rl.memory import SequentialMemory

之后,設(shè)置相關(guān)參數(shù):

ENV_NAME?=?'CartPole-v0'#?Get?the?environment?and?extract?the?number?of?actions?available?in?the?Cartpole?problemenv?=?gym.make(ENV_NAME)np.random.seed(123)env.seed(123)nb_actions = env.action_space.n

下一步,我們構(gòu)造一個非常簡單的單一隱含層神經(jīng)網(wǎng)絡(luò)模型:

model?=?Sequential()model.add(Flatten(input_shape=(1,)?+?env.observation_space.shape))model.add(Dense(16))model.add(Activation('relu'))model.add(Dense(nb_actions))model.add(Activation('linear'))print(model.summary())

現(xiàn)在,配置和編譯我們的代理。我們將把我們的策略設(shè)置為epsilon greedy,把我們的內(nèi)存設(shè)置為順序內(nèi)存,因?yàn)槲覀兿M鎯ξ覀兯鶊?zhí)行的操作的結(jié)果以及每個操作獲得的獎勵。

policy?=?EpsGreedyQPolicy()memory?=?SequentialMemory(limit=50000,?window_length=1)dqn?=?DQNAgent(model=model,?nb_actions=nb_actions,?memory=memory,?nb_steps_warmup=10,target_model_update=1e-2,?policy=policy)dqn.compile(Adam(lr=1e-3),?metrics=['mae'])#好吧,現(xiàn)在該學(xué)點(diǎn)東西了!我們把這里的訓(xùn)練具象化展示出來,但這會大大降低訓(xùn)練的速度。?dqn.fit(env, nb_steps=5000, visualize=True, verbose=2)

測試我們的強(qiáng)化學(xué)習(xí)模型:

dqn.test(env,?nb_episodes=5,?visualize=True)

這將是我們模型的輸出:

upload/article/images/2021-02-04/df8d10c67a5279c2348ad7b7cf461079.jpg

不錯!祝賀您建立了第一個深度Q學(xué)習(xí)模型。

最后幾點(diǎn)

Openai Gym提供了幾種將DQN融合到Atari游戲中的環(huán)境。那些處理過計(jì)算機(jī)視覺問題的人可能會直觀地理解這一點(diǎn),因?yàn)檫@些問題的輸入在每個時間步驟都是游戲的直接幀,因此該模型由基于卷積神經(jīng)網(wǎng)絡(luò)的體系結(jié)構(gòu)組成。

有一些更先進(jìn)的深度強(qiáng)化學(xué)習(xí)技術(shù),如雙DQN網(wǎng)絡(luò),雙DQN和優(yōu)先經(jīng)驗(yàn)回放,可以進(jìn)一步改善學(xué)習(xí)過程。這些技巧讓我們用更少的片段獲得更好的分?jǐn)?shù)。我將在以后的文章中介紹這些概念。

我建議您在Cartpole之外的至少一個環(huán)境中嘗試DQN算法,以練習(xí)和理解如何調(diào)整模型以獲得最佳結(jié)果。

原文標(biāo)題:

A Hands-On Introduction to Deep Q-Learning using OpenAI Gym in Python

原文鏈接:

https://www.analyticsvidhya.com/blog/2019/04/introduction-deep-q-learning-python/?

(*本文僅代表作者觀點(diǎn),轉(zhuǎn)載請聯(lián)系原作者)

聲明:本文章由網(wǎng)友投稿作為教育分享用途,如有侵權(quán)原作者可通過郵件及時和我們聯(lián)系刪除

預(yù)約試聽課

已有385人預(yù)約都是免費(fèi)的,你也試試吧...

主站蜘蛛池模板: 欧美福利专区 | 国产精品久久久久久久 | 99久久精约久久久久久清纯 | 91在线播放综合 | 国产欧美精品一区二区色综合朱莉 | 中文字幕一区二区三区在线观看 | 成人午夜小视频 | 国产精品区一区二区三区 | 日日网| 国产精品美女视频 | 中文字幕在线观看不卡 | 中文字幕亚洲天堂 | 国产精品免费看 | 久久久久久久影院 | 日韩精品电影在线观看 | 在线欧美成人 | 粉嫩精品一区二区三区在线观看 | 国产精一区 | 亚洲精品乱码久久久久久国产主播 | 亚洲区av| 欧洲亚洲一区二区三区四区五区 | 国产精品免费在线播放 | 日韩精彩视频 | 嫩草影院在线观看视频 | 日韩成人av在线播放 | 亚洲精品国产综合区久久久久久久 | 一区在线视频 | 日韩精品在线播放 | 永久免费精品视频 | 精品久久99| 国产精品一区久久久 | 免费观看的av | 在线一区二区欧美 | 91视频在线观看视频 | 欧亚日韩精品一区二区在线 | 玖玖在线 | 亚洲欧美国产一区二区三区 | 国产精品福利在线 | 亚洲精品免费在线观看 | 国产精品久久久久免费视频 | 日韩欧美在线免费 |