自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

通過(guò) Q-learning 深入理解強(qiáng)化學(xué)習(xí)

開(kāi)發(fā) 開(kāi)發(fā)工具
本文將帶你學(xué)習(xí)經(jīng)典強(qiáng)化學(xué)習(xí)算法 Q-learning 的相關(guān)知識(shí)。在這篇文章中,你將學(xué)到:(1)Q-learning 的概念解釋和算法詳解;(2)通過(guò) Numpy 實(shí)現(xiàn) Q-learning。

本文將帶你學(xué)習(xí)經(jīng)典強(qiáng)化學(xué)習(xí)算法 Q-learning 的相關(guān)知識(shí)。在這篇文章中,你將學(xué)到:(1)Q-learning 的概念解釋和算法詳解;(2)通過(guò) Numpy 實(shí)現(xiàn) Q-learning。

故事案例:騎士和公主

騎士和公主

假設(shè)你是一名騎士,并且你需要拯救上面的地圖里被困在城堡中的公主。

你每次可以移動(dòng)一個(gè)方塊的距離。敵人是不能移動(dòng)的,但是如果你和敵人落在了同一個(gè)方塊中,你就會(huì)死。你的目標(biāo)是以盡可能快的路線走到城堡去。這可以使用一個(gè)「按步積分」系統(tǒng)來(lái)評(píng)估。

  • 你在每一步都會(huì)失去 1 分(每一步失去的分?jǐn)?shù)幫助智能體訓(xùn)練的更快)
  • 如果碰到了一個(gè)敵人,你會(huì)失去 100 分,并且訓(xùn)練 episode 結(jié)束。
  • 如果進(jìn)入到城堡中,你就獲勝了,獲得 100 分。

那么問(wèn)題來(lái)了:如何才能夠創(chuàng)建這樣的智能體呢?

下面我將介紹第一個(gè)策略。假設(shè)智能體試圖走遍每一個(gè)方塊,并且將其著色。綠色代表「安全」,紅色代表「不安全」。

同樣的地圖,但是被著色了,用于顯示哪些方塊是可以被安全訪問(wèn)的。

接著,我們告訴智能體只能選擇綠色的方塊。

但問(wèn)題是,這種策略并不是十分有用。當(dāng)綠色的方塊彼此相鄰時(shí),我們不知道選擇哪個(gè)方塊是最好的。所以,智能體可能會(huì)在尋找城堡的過(guò)程中陷入無(wú)限的循環(huán)。

Q-Table 簡(jiǎn)介

下面我將介紹第二種策略:創(chuàng)建一個(gè)表格。通過(guò)它,我們可以為每一個(gè)狀態(tài)(state)上進(jìn)行的每一個(gè)動(dòng)作(action)計(jì)算出最大的未來(lái)獎(jiǎng)勵(lì)(reward)的期望。

得益于這個(gè)表格,我們可以知道為每一個(gè)狀態(tài)采取的最佳動(dòng)作。

每個(gè)狀態(tài)(方塊)允許四種可能的操作:左移、右移、上移、下移。

Q-Table 簡(jiǎn)介

「0」代表不可能的移動(dòng)(如果你在左上角,你不可能向左移動(dòng)或者向上移動(dòng)!)

在計(jì)算過(guò)程中,我們可以將這個(gè)網(wǎng)格轉(zhuǎn)換成一個(gè)表。

這種表格被稱為 Q-table(「Q」代表動(dòng)作的「質(zhì)量」)。每一列將代表四個(gè)操作(左、右、上、下),行代表狀態(tài)。每個(gè)單元格的值代表給定狀態(tài)和相應(yīng)動(dòng)作的最大未來(lái)獎(jiǎng)勵(lì)期望。

Q-Table 簡(jiǎn)介

每個(gè) Q-table 的分?jǐn)?shù)將代表在給定最佳策略的狀態(tài)下采取相應(yīng)動(dòng)作獲得的最大未來(lái)獎(jiǎng)勵(lì)期望。

為什么我們說(shuō)「給定的策略」呢?這是因?yàn)槲覀儾⒉粚?shí)現(xiàn)這些策略。相反,我們只需要改進(jìn) Q-table 就可以一直選擇最佳的動(dòng)作。

將這個(gè) Q-table 想象成一個(gè)「?jìng)渫垪l」游戲。得益于此,我們通過(guò)尋找每一行中最高的分?jǐn)?shù),可以知道對(duì)于每一個(gè)狀態(tài)(Q-table 中的每一行)來(lái)說(shuō),可采取的最佳動(dòng)作是什么。

太棒了!我解決了這個(gè)城堡問(wèn)題!但是,請(qǐng)等一下... 我們?nèi)绾斡?jì)算 Q-table 中每個(gè)元素的值呢?

為了學(xué)習(xí)到 Q-table 中的每個(gè)值,我們將使用 Q-learning 算法。

Q-learning 算法:學(xué)習(xí)動(dòng)作值函數(shù)(action value function)

動(dòng)作值函數(shù)(或稱「Q 函數(shù)」)有兩個(gè)輸入:「狀態(tài)」和「動(dòng)作」。它將返回在該狀態(tài)下執(zhí)行該動(dòng)作的未來(lái)獎(jiǎng)勵(lì)期望。

Q-learning 算法

我們可以把 Q 函數(shù)視為一個(gè)在 Q-table 上滾動(dòng)的讀取器,用于尋找與當(dāng)前狀態(tài)關(guān)聯(lián)的行以及與動(dòng)作關(guān)聯(lián)的列。它會(huì)從相匹配的單元格中返回 Q 值。這就是未來(lái)獎(jiǎng)勵(lì)的期望。

Q-learning 算法

在我們探索環(huán)境(environment)之前,Q-table 會(huì)給出相同的任意的設(shè)定值(大多數(shù)情況下是 0)。隨著對(duì)環(huán)境的持續(xù)探索,這個(gè) Q-table 會(huì)通過(guò)迭代地使用 Bellman 方程(動(dòng)態(tài)規(guī)劃方程)更新 Q(s,a) 來(lái)給出越來(lái)越好的近似。

Q-learning 算法流程

Q-learning 算法

Q-learning 算法

Q-learning 算法的偽代碼

步驟 1:初始化 Q 值。我們構(gòu)造了一個(gè) m 列(m = 動(dòng)作數(shù) ),n 行(n = 狀態(tài)數(shù))的 Q-table,并將其中的值初始化為 0。

Q-learning 算法

步驟 2:在整個(gè)生命周期中(或者直到訓(xùn)練被中止前),步驟 3 到步驟 5 會(huì)一直被重復(fù),直到達(dá)到了最大的訓(xùn)練次數(shù)(由用戶指定)或者手動(dòng)中止訓(xùn)練。

步驟 3:選取一個(gè)動(dòng)作。在基于當(dāng)前的 Q 值估計(jì)得出的狀態(tài) s 下選擇一個(gè)動(dòng)作 a。

但是……如果每個(gè) Q 值都等于零,我們一開(kāi)始該選擇什么動(dòng)作呢?在這里,我們就可以看到探索/利用(exploration/exploitation)的權(quán)衡有多重要了。

思路就是,在一開(kāi)始,我們將使用 epsilon 貪婪策略:

  • 我們指定一個(gè)探索速率「epsilon」,一開(kāi)始將它設(shè)定為 1。這個(gè)就是我們將隨機(jī)采用的步長(zhǎng)。在一開(kāi)始,這個(gè)速率應(yīng)該處于最大值,因?yàn)槲覀儾恢? Q-table 中任何的值。這意味著,我們需要通過(guò)隨機(jī)選擇動(dòng)作進(jìn)行大量的探索。
  • 生成一個(gè)隨機(jī)數(shù)。如果這個(gè)數(shù)大于 epsilon,那么我們將會(huì)進(jìn)行「利用」(這意味著我們?cè)诿恳徊嚼靡呀?jīng)知道的信息選擇動(dòng)作)。否則,我們將繼續(xù)進(jìn)行探索。
  • 在剛開(kāi)始訓(xùn)練 Q 函數(shù)時(shí),我們必須有一個(gè)大的 epsilon。隨著智能體對(duì)估算出的 Q 值更有把握,我們將逐漸減小 epsilon。

Q-learning 算法

步驟 4-5:評(píng)價(jià)!采用動(dòng)作 a 并且觀察輸出的狀態(tài) s' 和獎(jiǎng)勵(lì) r?,F(xiàn)在我們更新函數(shù) Q(s,a)。

我們采用在步驟 3 中選擇的動(dòng)作 a,然后執(zhí)行這個(gè)動(dòng)作會(huì)返回一個(gè)新的狀態(tài) s' 和獎(jiǎng)勵(lì) r。

接著我們使用 Bellman 方程去更新 Q(s,a):

Q-learning 算法

如下方代碼所示,更新 Q(state,action):

  1. New Q value =  
  2.    Current Q value +  
  3.    lr * [Reward + discount_rate * (highest Q value between possible actions from the new state s’ ) — Current Q value ] 

讓我們舉個(gè)例子:

Q-learning 算法

  • 一塊奶酪 = +1
  • 兩塊奶酪 = +2
  • 一大堆奶酪 = +10(訓(xùn)練結(jié)束)
  • 吃到了鼠藥 = -10(訓(xùn)練結(jié)束)

步驟 1:初始化 Q-table

Q-learning 算法

初始化之后的 Q-table

步驟 2:選擇一個(gè)動(dòng)作。從起始點(diǎn),你可以在向右走和向下走其中選擇一個(gè)。由于有一個(gè)大的 epsilon 速率(因?yàn)槲覀冎两駥?duì)于環(huán)境一無(wú)所知),我們隨機(jī)地選擇一個(gè)。例如向右走。

Q-learning 算法

Q-learning 算法

我們隨機(jī)移動(dòng)(例如向右走)

我們發(fā)現(xiàn)了一塊奶酪(+1),現(xiàn)在我們可以更新開(kāi)始時(shí)的 Q 值并且向右走,通過(guò) Bellman 方程實(shí)現(xiàn)。

步驟 4-5:更新 Q 函數(shù)

Q-learning 算法

Q-learning 算法

  • 首先,我們計(jì)算 Q 值的改變量 ΔQ(start, right)。
  • 接著我們將初始的 Q 值與 ΔQ(start, right) 和學(xué)習(xí)率的積相加。

可以將學(xué)習(xí)率看作是網(wǎng)絡(luò)有多快地拋棄舊值、生成新值的度量。如果學(xué)習(xí)率是 1,新的估計(jì)值會(huì)成為新的 Q 值,并完全拋棄舊值。

Q-learning 算法

更新后的 Q-table

太好了!我們剛剛更新了第一個(gè) Q 值?,F(xiàn)在我們要做的就是一次又一次地做這個(gè)工作直到學(xué)習(xí)結(jié)束。

實(shí)現(xiàn) Q-learning 算法

既然我們知道了它是如何工作的,我們將一步步地實(shí)現(xiàn) Q-learning 算法。代碼的每一部分都在下面的 Jupyter notebook 中直接被解釋了。

你可以在我的深度強(qiáng)化學(xué)習(xí)課程 repo 中獲得代碼。

項(xiàng)目地址:

https://github.com/simoninithomas/Deep_reinforcement_learning_Course/blob/master/Q%20learning/Q%20Learning%20with%20FrozenLake.ipynb

回顧

  • Q-learning 是一個(gè)基于值的強(qiáng)化學(xué)習(xí)算法,利用 Q 函數(shù)尋找最優(yōu)的「動(dòng)作—選擇」策略。
  • 它根據(jù)動(dòng)作值函數(shù)評(píng)估應(yīng)該選擇哪個(gè)動(dòng)作,這個(gè)函數(shù)決定了處于某一個(gè)特定狀態(tài)以及在該狀態(tài)下采取特定動(dòng)作的獎(jiǎng)勵(lì)期望值。
  • 目的:最大化 Q 函數(shù)的值(給定一個(gè)狀態(tài)和動(dòng)作時(shí)的未來(lái)獎(jiǎng)勵(lì)期望)。
  • Q-table 幫助我們找到對(duì)于每個(gè)狀態(tài)來(lái)說(shuō)的最佳動(dòng)作。
  • 通過(guò)選擇所有可能的動(dòng)作中最佳的一個(gè)來(lái)最大化期望獎(jiǎng)勵(lì)。
  • Q 作為某一特定狀態(tài)下采取某一特定動(dòng)作的質(zhì)量的度量。
  • 函數(shù) Q(state,action)→返回在當(dāng)前狀態(tài)下采取該動(dòng)作的未來(lái)獎(jiǎng)勵(lì)期望。
  • 這個(gè)函數(shù)可以通過(guò) Q-learning 算法來(lái)估計(jì),使用 Bellman 方程迭代地更新 Q(s,a)
  • 在我們探索環(huán)境之前:Q-table 給出相同的任意的設(shè)定值→ 但是隨著對(duì)環(huán)境的持續(xù)探索→Q 給出越來(lái)越好的近似。

就是這些了!不要忘記自己去實(shí)現(xiàn)代碼的每一部分——試著修改已有的代碼是十分重要的。

試著增加迭代次數(shù),改變學(xué)習(xí)率,并且使用一個(gè)更復(fù)雜的環(huán)境(例如:8*8 方格的 Frozen-lake)。祝你玩的開(kāi)心!

原文鏈接:

https://medium.freecodecamp.org/diving-deeper-into-reinforcement-learning-with-q-learning-c18d0db58efe

【本文是51CTO專欄機(jī)構(gòu)“機(jī)器之心”的原創(chuàng)譯文,微信公眾號(hào)“機(jī)器之心( id: almosthuman2014)”】

戳這里,看該作者更多好文

責(zé)任編輯:趙寧寧 來(lái)源: 51CTO專欄
相關(guān)推薦

2023-08-14 16:49:13

強(qiáng)化學(xué)習(xí)時(shí)態(tài)差分法

2023-10-31 16:40:39

機(jī)器學(xué)習(xí)強(qiáng)化學(xué)習(xí)

2021-05-13 21:27:24

ThreadLocal多線程多線程并發(fā)安全

2017-08-22 15:56:49

神經(jīng)網(wǎng)絡(luò)強(qiáng)化學(xué)習(xí)DQN

2025-04-08 09:50:00

2024-05-30 16:37:29

2010-06-01 15:25:27

JavaCLASSPATH

2016-12-08 15:36:59

HashMap數(shù)據(jù)結(jié)構(gòu)hash函數(shù)

2020-07-21 08:26:08

SpringSecurity過(guò)濾器

2023-04-23 10:12:14

算法強(qiáng)化學(xué)習(xí)

2015-06-24 10:18:26

2013-09-22 14:57:19

AtWood

2023-10-19 11:12:15

Netty代碼

2021-02-17 11:25:33

前端JavaScriptthis

2009-09-25 09:14:35

Hibernate日志

2020-09-23 10:00:26

Redis數(shù)據(jù)庫(kù)命令

2017-01-10 08:48:21

2017-08-15 13:05:58

Serverless架構(gòu)開(kāi)發(fā)運(yùn)維

2024-02-21 21:14:20

編程語(yǔ)言開(kāi)發(fā)Golang

2019-06-25 10:32:19

UDP編程通信
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)