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

集合三大類無模型強(qiáng)化學(xué)習(xí)算法,BAIR開源RL代碼庫rlpyt

新聞 深度學(xué)習(xí) 算法
近日,BAIR 開源強(qiáng)化學(xué)習(xí)研究代碼庫 rlpyt,首次包含三大類無模型強(qiáng)化學(xué)習(xí)算法,并提出一種新型數(shù)據(jù)結(jié)構(gòu)。

近日,BAIR 開源強(qiáng)化學(xué)習(xí)研究代碼庫 rlpyt,首次包含三大類無模型強(qiáng)化學(xué)習(xí)算法,并提出一種新型數(shù)據(jù)結(jié)構(gòu)。

2013 年有研究者提出使用深度強(qiáng)化學(xué)習(xí)玩游戲,之后不久深度強(qiáng)化學(xué)習(xí)又被應(yīng)用于模擬機(jī)器人控制,自此以后大量新算法層出不窮。其中大部分屬于無模型算法,共分為三類:深度 Q 學(xué)習(xí)(DQN)、策略梯度和 Q 值策略梯度(QPG)。由于它們依賴不同的學(xué)習(xí)機(jī)制、解決不同(但有重合)的控制問題、處理不同屬性的動作集(離散或連續(xù)),因此這三類算法沿著不同的研究路線發(fā)展。目前,很少有代碼庫同時(shí)包含這三類算法,很多原始實(shí)現(xiàn)仍未公開。因此,從業(yè)者通常需要從不同的起點(diǎn)開始開發(fā),潛在地為每一個(gè)感興趣的算法或基線學(xué)習(xí)新的代碼庫。強(qiáng)化學(xué)習(xí)研究者必須花時(shí)間重新實(shí)現(xiàn)算法,這是一項(xiàng)珍貴的個(gè)人實(shí)踐,但它也導(dǎo)致社區(qū)中的大量重復(fù)勞動,甚至成為了入門障礙。

這些算法具備很多共同的強(qiáng)化學(xué)習(xí)特點(diǎn)。近日,BAIR 發(fā)布了 rlpyt 代碼庫,利用三類算法之間的共性,在共享的優(yōu)化基礎(chǔ)架構(gòu)上構(gòu)建了這三類算法的實(shí)現(xiàn)。

GitHub 地址:https://github.com/astooke/rlpyt

rlpyt 庫包含很多常見深度強(qiáng)化學(xué)習(xí)算法的模塊化實(shí)現(xiàn),這些實(shí)現(xiàn)是在深度學(xué)習(xí)庫 Pytorch 中使用 Python 語言寫成的。在大量已有實(shí)現(xiàn)中,rlpyt 對于研究者而言是更加全面的開源資源。

rlpyt 的設(shè)計(jì)初衷是為深度強(qiáng)化學(xué)習(xí)領(lǐng)域中的中小規(guī)模研究提供高吞吐量代碼庫。本文將簡要介紹 rlpyt 的特征,及其與之前工作的關(guān)聯(lián)。值得注意的是,rlpyt 基于論文《Recurrent Experience Replay in Distributed Reinforcement Learning》(R2D2)復(fù)現(xiàn)了 Atari 游戲領(lǐng)域中的近期最佳結(jié)果,不過它沒有使用分布式計(jì)算基礎(chǔ)架構(gòu)來收集訓(xùn)練所需的數(shù)十億游戲視頻幀。本文還將介紹一個(gè)新的數(shù)據(jù)結(jié)構(gòu)——namedarraytuple,它在 rlpyt 中廣泛用于處理 numpy 數(shù)組集合。更多技術(shù)討論、實(shí)現(xiàn)詳情和使用說明,參見論文《rlpyt: A Research Code Base for Deep Reinforcement Learning in PyTorch》。

論文地址:https://arxiv.org/abs/1909.01500

rlpyt 庫的重要特征和能力包括:

  • 以串行模式運(yùn)行實(shí)驗(yàn)(對 debug 有幫助);
  • 以并行模式運(yùn)行實(shí)驗(yàn),具備并行采樣和/或多 GPU 優(yōu)化的選項(xiàng);
  • 同步或異步采樣-優(yōu)化(異步模式通過 replay buffer 實(shí)現(xiàn));
  • 在環(huán)境采樣中,使用 CPU 或 GPU 進(jìn)行訓(xùn)練和/或分批動作選擇;
  • 全面支持循環(huán)智能體;
  • 在訓(xùn)練過程中,執(zhí)行在線或離線評估,以及智能體診斷日志記錄;
  • 在本地計(jì)算機(jī)上,啟動對實(shí)驗(yàn)進(jìn)行棧/隊(duì)列(stacking / queueing)設(shè)置的程序;
  • 模塊化:易于修改和對已有組件的重用;
  • 兼容 OpenAI Gym 環(huán)境接口。

rlpyt 庫中的已實(shí)現(xiàn)算法包括:

  • 策略梯度:A2C、PPO
  • DQN 及其變體:Double、Dueling、Categorical、Rainbow minus Noisy Nets、Recurrent (R2D2-style)
  • QPG:DDPG、TD3、SAC

replay buffer(支持 DQN 和 QPG)包含以下可選特征:n-step returns、prioritized replay、sequence replay (for recurrence)、frame-based buffers(從多幀觀測結(jié)果中僅存儲獨(dú)特的 Atari 游戲幀)。

加速實(shí)驗(yàn)的并行計(jì)算架構(gòu)

采樣

無模型強(qiáng)化學(xué)習(xí)的兩個(gè)階段——采樣環(huán)境交互和訓(xùn)練智能體,可按照不同方式并行執(zhí)行。例如,rlpyt 包括三種基本選項(xiàng):串行、并行-CPU、并行 GPU。

串行采樣最簡單,因?yàn)檎麄€(gè)程序在一個(gè) Python 進(jìn)程中運(yùn)行,且有利于 debug。但環(huán)境通?;?CPU 執(zhí)行,且是單線程,因此并行采樣器使用 worker 進(jìn)程來運(yùn)行環(huán)境實(shí)例,以加速整體收集率(collection rate)。CPU 采樣還在 worker 進(jìn)程中運(yùn)行智能體的神經(jīng)網(wǎng)絡(luò),以選擇動作。GPU 采樣則將所有環(huán)境觀測結(jié)果分批,然后在 master 進(jìn)程中選擇動作,這樣能夠更充分地利用 GPU。這些配置詳見下圖。 

集合三大类无模型强化学习算法,BAIR开源RL代码库rlpyt

環(huán)境交互采樣圖示。(左)串行:智能體和環(huán)境在一個(gè) Python 進(jìn)程中執(zhí)行。(中)并行-CPU:智能體和環(huán)境在 CPU 上運(yùn)行(并行 worker 進(jìn)程)。(右)并行-GPU:環(huán)境在 CPU 上運(yùn)行(并行 worker 進(jìn)程),智能體在核心進(jìn)程上運(yùn)行,以保證分批動作選擇。

 

此外,還有一個(gè)選項(xiàng)是 alternating-GPU 采樣,即使用兩組 worker:一組執(zhí)行環(huán)境模擬,另一組等待新動作。當(dāng)動作選擇時(shí)間比批環(huán)境模擬時(shí)間稍短時(shí),則可能帶來加速。

優(yōu)化

同步多 GPU 優(yōu)化通過 PyTorch 的 DistributedDataParallel 模塊實(shí)現(xiàn)。整個(gè)采樣器-優(yōu)化器棧在每個(gè) GPU 的不同進(jìn)程中被復(fù)制,模型在反向傳播過程中對梯度執(zhí)行規(guī)約(all-reduce),從而實(shí)現(xiàn)隱式地同步。在反向傳播的同時(shí),DistributedDataParallel 工具自動降低梯度,以便在大型網(wǎng)絡(luò)上實(shí)現(xiàn)更好的擴(kuò)展,詳情見下圖。(采樣器可以是上文介紹的任意串行或并行配置。)

集合三大类无模型强化学习算法,BAIR开源RL代码库rlpyt

同步多進(jìn)程強(qiáng)化學(xué)習(xí)。每個(gè) Python 進(jìn)程運(yùn)行一個(gè)完整 sample-algorithm 棧副本,「同步」則通過 PyTorch 中的 DistribuedDataParallel 在反向傳播過程中隱式地實(shí)現(xiàn)。支持 GPU(NCCL 后端)和 CPU(gloo 后端)模式。

異步采樣優(yōu)化

 

在目前已經(jīng)介紹的配置中,采樣器和優(yōu)化器都是在同一個(gè) Python 進(jìn)程中順序運(yùn)行的。而在某些案例中,異步運(yùn)行優(yōu)化和采樣可以實(shí)現(xiàn)更好的硬件利用率,因?yàn)檫@使得優(yōu)化和采樣連續(xù)運(yùn)行。BAIR 在復(fù)現(xiàn) R2D2 時(shí)就是這樣,基于真實(shí)機(jī)器人學(xué)習(xí)也是這樣的模式。

在異步模式下,運(yùn)行訓(xùn)練和采樣的是兩個(gè)單獨(dú)的 Python 進(jìn)程,之后 replay buffer 基于共享內(nèi)存將二者連接起來。采樣的運(yùn)行過程不受干擾,因?yàn)閿?shù)據(jù)批次使用了雙緩沖。而另一個(gè) Python 進(jìn)程在寫鎖模式下將分批數(shù)據(jù)復(fù)制到主緩沖區(qū),詳見下圖。優(yōu)化器和采樣器可以獨(dú)立并行,它們使用不同數(shù)量的 GPU,以實(shí)現(xiàn)最好的整體利用率和速度。

集合三大类无模型强化学习算法,BAIR开源RL代码库rlpyt

異步采樣/優(yōu)化模式。兩個(gè)單獨(dú)的 Python 進(jìn)程通過共享內(nèi)存的 replay buffer 來運(yùn)行優(yōu)化和采樣(讀寫鎖模式下)。內(nèi)存復(fù)制器進(jìn)程將分批數(shù)據(jù)寫入 replay buffer,使得采樣器可以即刻處理分批數(shù)據(jù)。

哪種配置最好?

對于創(chuàng)建或修改智能體、模型、算法和環(huán)境而言,串行模式最易于 debug。當(dāng)串行程序流暢運(yùn)行時(shí),探索更復(fù)雜的基礎(chǔ)架構(gòu)就很輕松了,如并行采樣、多 GPU 優(yōu)化和異步采樣,因?yàn)樗鼈兇笾律鲜腔谙嗤慕涌跇?gòu)建的。最優(yōu)配置取決于具體的學(xué)習(xí)問題、可用的計(jì)算機(jī)硬件和運(yùn)行實(shí)驗(yàn)的數(shù)量。rlpyt 中包含的并行模式僅限于單節(jié)點(diǎn),盡管其組件可作為分布式框架的構(gòu)造塊。

性能案例分析:R2D2

BAIR 展示了在 Atari 領(lǐng)域中復(fù)現(xiàn) R2D2 結(jié)果的學(xué)習(xí)曲線,在以前只有使用分布式計(jì)算才會出現(xiàn)這樣的學(xué)習(xí)曲線。該基準(zhǔn)包括使用約 100 億樣本(400 億幀)基于 replay buffer 訓(xùn)練得到的循環(huán)智能體。R2D1(非分布式 R2D2)使用 rlpyt 中多個(gè)更先進(jìn)的基礎(chǔ)架構(gòu)組件來實(shí)現(xiàn)它,即使用 alternating-GPU 采樣器的多 GPU 異步采樣模式。下圖展示了復(fù)現(xiàn)過程中的學(xué)習(xí)曲線,其中多個(gè)超過了之前的算法。我們需要注意,這些結(jié)果并未在所有游戲上完美復(fù)現(xiàn),例如 Gravitar 游戲在比較低的得分處就已進(jìn)入平臺期。詳情參見相關(guān)論文。

集合三大类无模型强化学习算法,BAIR开源RL代码库rlpyt

在 rlpyt 中使用一臺計(jì)算機(jī)復(fù)現(xiàn) R2D2 的學(xué)習(xí)曲線。

R2D2 的最初分布式實(shí)現(xiàn)使用了 256 塊 CPU 進(jìn)行采樣,一塊 GPU 執(zhí)行訓(xùn)練,每秒運(yùn)行 66,000 步。而 rlpyt 僅使用了一個(gè)包含 24 塊 CPU(2x Intel Xeon Gold 6126)和 3 塊 Titan-Xp GPU 的工作站,以每秒 16000 的步數(shù)完成實(shí)現(xiàn)。對于無法使用分布式基礎(chǔ)架構(gòu)的情況而言,這已經(jīng)足夠執(zhí)行實(shí)驗(yàn)了。未來研究的一種可能是:利用多 GPU 優(yōu)化增加 replay ratio,從而加快學(xué)習(xí)速度。下圖展示了相同學(xué)習(xí)曲線在 3 種不同度量指標(biāo)下的呈現(xiàn),這 3 種度量指標(biāo)分別是:環(huán)境步數(shù)(即 1 步=4 幀)、模型更新和時(shí)間。它在不到 138 個(gè)小時(shí)的時(shí)間內(nèi)走完了 80 億步,完成了 100 萬次模型更新。

集合三大类无模型强化学习算法,BAIR开源RL代码库rlpyt

rlpyt 使用 24 塊 CPU 和 3 塊 Titan-Xp GPU 在異步采樣模式下執(zhí)行 R2D1 實(shí)現(xiàn),其學(xué)習(xí)曲線在橫坐標(biāo)不同(環(huán)境步數(shù)、模型更新和時(shí)間)時(shí)的呈現(xiàn)如上圖所示。

新型數(shù)據(jù)結(jié)構(gòu):namedarraytuple

rlpyt 提出了新的目標(biāo)類別 namedarraytuples,可使 numpy 數(shù)組或 torch 張量的組織更加容易。namedarraytuple 本質(zhì)上是一個(gè) namedtuple,將索引或切片(sliced)數(shù)組讀/寫呈現(xiàn)在結(jié)構(gòu)中。

試著寫入一個(gè)(可能嵌套的)數(shù)組字典,這些數(shù)組具備一些共同的維度:

  1. for k, v in src.items():if isinstance(dest[k], dict):..recurse..dest[k][slice_or_indexes] = v  

將上述代碼替換成下列代碼:

  1. dest[slice_or_indexes] = src 

重要的是,不管 dest 和 src 是不同的 numpy 數(shù)組還是隨機(jī)結(jié)構(gòu)的數(shù)組集合,語法都是相同的(dest 和 src 的結(jié)構(gòu)必須匹配,或者 src 是可應(yīng)用于所有字段的單個(gè)值)。rlpyt 廣泛使用該數(shù)據(jù)結(jié)構(gòu):使用相同的矩陣主維組織訓(xùn)練數(shù)據(jù)的不同元素,使其易于與期望時(shí)間維度或批量維度交互。此外,namedarraytuples 天然支持具備多模態(tài)動作或觀測結(jié)果的環(huán)境。當(dāng)神經(jīng)網(wǎng)絡(luò)的不同層使用不同模式時(shí),這非常有用,因?yàn)樗试S中間基礎(chǔ)架構(gòu)代碼保持不變。

相關(guān)研究

深度強(qiáng)化學(xué)習(xí)新手可以先閱讀其他資源,了解強(qiáng)化學(xué)習(xí)算法,如 OpenAI Spinning Up。

OpenAI Spinning Up 代碼地址:https://github.com/openai/spinningup

文檔地址:https://spinningup.openai.com/en/latest/

rlpyt 是 accel_rl 的修訂版本,accel_rl 使用 Theano 嘗試在 Atari 領(lǐng)域中擴(kuò)展強(qiáng)化學(xué)習(xí),詳見論文《Accelerated Methods for Deep Reinforcement Learning》。對于深度學(xué)習(xí)和強(qiáng)化學(xué)習(xí)中的批大小擴(kuò)展的進(jìn)一步研究,參見 OpenAI 的報(bào)告(https://arxiv.org/abs/1812.06162)。rlpyt 和 accel_rl 最初都受 rllab 的啟發(fā)。

其他已發(fā)布的研究代碼庫包括 OpenAI 基線和 Dopamine,二者都使用的是 Tensorflow 框架,都沒有優(yōu)化到 rlpyt 的程度,也不包含三類算法?;?Ray 構(gòu)建的 Rllib 采取不同的方法執(zhí)行分布式計(jì)算,但可能把小實(shí)驗(yàn)復(fù)雜化。Facebook Horizon 提供了一組算法,主要關(guān)注大規(guī)模生產(chǎn)級應(yīng)用。總之,rlpyt 提供更多算法的模塊化實(shí)現(xiàn)以及并行化的模塊化基礎(chǔ)架構(gòu),是支持廣泛研究應(yīng)用的工具箱。

結(jié)論

BAIR 在相關(guān)博客中表示,rlpyt 可以促進(jìn)對現(xiàn)有深度強(qiáng)化學(xué)習(xí)技術(shù)的便捷使用,并作為開啟新研究的起點(diǎn)。例如,rlpyt 沒有明確解決一些更先進(jìn)的話題,如元學(xué)習(xí)、基于模型的強(qiáng)化學(xué)習(xí)和多智能體強(qiáng)化學(xué)習(xí),但是 rlpyt 提供的可用代碼可能對于加速這些領(lǐng)域的發(fā)展有所幫助。

 

責(zé)任編輯:張燕妮 來源: 機(jī)器之心
相關(guān)推薦

2020-12-23 06:07:54

人工智能AI深度學(xué)習(xí)

2023-08-28 06:52:29

2020-08-10 06:36:21

強(qiáng)化學(xué)習(xí)代碼深度學(xué)習(xí)

2020-05-28 13:20:49

算法谷歌性能

2024-03-19 00:15:00

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

2025-04-22 09:12:00

AI模型數(shù)據(jù)

2025-04-11 12:10:33

2025-04-18 10:01:41

2020-06-05 14:49:51

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

2024-11-01 09:39:26

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

2023-01-24 17:03:13

強(qiáng)化學(xué)習(xí)算法機(jī)器人人工智能

2019-09-29 10:42:02

人工智能機(jī)器學(xué)習(xí)技術(shù)

2022-09-27 15:37:21

深度學(xué)習(xí)算法

2023-05-05 13:11:16

2024-11-01 13:30:56

2023-06-25 11:30:47

可視化

2022-07-24 19:24:32

機(jī)器學(xué)習(xí)預(yù)訓(xùn)練模型機(jī)器人

2024-09-23 08:30:00

AI模型

2022-11-02 14:02:02

強(qiáng)化學(xué)習(xí)訓(xùn)練
點(diǎn)贊
收藏

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