0
雷鋒網(wǎng) AI科技評論消息,用于在TensorFlow中構(gòu)建并行強(qiáng)化學(xué)習(xí)算法的高效基礎(chǔ)架構(gòu)范例TensorFlow Agents日前開源,這個(gè)項(xiàng)目是由谷歌的兩位研究員James Davidson、Vincent Vanhoucke,以及Danijar Hafner共同研發(fā)的。關(guān)于這個(gè)項(xiàng)目的開源信息他們在GitHub上進(jìn)行了介紹,雷鋒網(wǎng) AI 科技評論將內(nèi)容進(jìn)行編譯整理。
TensorFlow Agents
TensorFlow Agents為強(qiáng)化學(xué)習(xí)提供了優(yōu)化的基礎(chǔ)架構(gòu),它將OpenAI gym接口擴(kuò)展到多個(gè)并行環(huán)境,并能在TensorFlow中訓(xùn)練智能體,進(jìn)行批量計(jì)算。在這個(gè)項(xiàng)目中,我們提供BatchPPO,這是針對近端策略優(yōu)化(Proximal Policy Optimization,PPO)的一個(gè)實(shí)現(xiàn)。
如果你在研究中使用了我們這個(gè)項(xiàng)目的代碼,請引用我們之前發(fā)布的關(guān)于TensorFlow Agents的論文TensorFlow Agents: Efficient Batched Reinforcement Learning in TensorFlow,論文地址:https://drive.google.com/file/d/0B20Yn-GSaVHGMVlPanRTRlNIRlk/view
@misc{hafner2017agents,
title={TensorFlow Agents: Efficient Batched Reinforcement Learning in TensorFlow},
author={Hafner, Danijar and Davidson, James and Vanhoucke, Vincent},
year={2017}
}
工具:Python 2/3, TensorFlow 1.3+, Gym, rumamel.yaml
說明
先執(zhí)行如下代碼復(fù)制數(shù)據(jù)庫并運(yùn)行PPO算法。
python3 -m agents.scripts.train --logdir=/path/to/logdir --config=pendulum
這里用的算法已經(jīng)在配置中定義好了,其中pendulum利用了已有的PPO實(shí)現(xiàn)??梢栽赼gents/scripts/configs.py中查看更多的預(yù)定義配置。
如果想要重新開始運(yùn)行之前的任務(wù),可以在最后的指令中增加--timestamp=<time>標(biāo)志,并提供你運(yùn)行的目錄名中的時(shí)間戳。
為了將度量可視化,需要從另一個(gè)終端啟動(dòng)TensorBoard,然后將瀏覽器指向http://localhost:2222:
tensorboard --logdir=/path/to/logdir --port=2222
如果要渲染視頻,收集OpenAI Gym的統(tǒng)計(jì)數(shù)據(jù)上傳至記分板,請輸入以下代碼:
python3 -m agents.scripts.visualize --logdir=/path/to/logdir/<time>-<config> --outdir=/path/to/outdir/
修正
這個(gè)項(xiàng)目的發(fā)布能讓新的強(qiáng)化學(xué)習(xí)思想更容易實(shí)現(xiàn)。當(dāng)修正代碼之后,你可以從如下幾個(gè)文件開始執(zhí)行任務(wù)。
scripts/configs.py(指定任務(wù)和算法的實(shí)驗(yàn)配置)
scripts/networks.py(被定義為TensorFlow RNNCell的神經(jīng)網(wǎng)絡(luò)模型)
scripts/train.py(包含訓(xùn)練設(shè)置的可執(zhí)行文件)
ppo/algorithm.py(PPO算法的TensorFlow圖)
如果要運(yùn)行所有的單元測試,請輸入如下代碼:
python3 -m unittest discover -p "*_test.py"
如果有更多問題,可以在 Github上提問。
執(zhí)行
這次的發(fā)布還包括OpenAI Gym環(huán)境下的一個(gè)批處理接口,它能與TensorFlow無縫集成,實(shí)現(xiàn)高效的算法。這是通過如下核心組件實(shí)現(xiàn)的:
agents.tools.wrappers.ExternalProcess
agents.tools.wrappers.ExternalProcess是構(gòu)造外部進(jìn)程里的OpenAI Gym 環(huán)境的包裝(wrapper),它可以調(diào)用step()、reset()以及屬性訪問,轉(zhuǎn)發(fā)到進(jìn)程中,然后等待結(jié)果,可以并行運(yùn)行多個(gè)環(huán)境而不受Python全局解釋器鎖(global interpreter lock)的限制。
agents.tools.BatchEnv
agents.tools.BatchEnv能將OpenAI Gym接口擴(kuò)展至多個(gè)環(huán)境中,它可以聯(lián)合多個(gè)OpenAI Gym環(huán)境,用step()接受批量的動(dòng)作,返回觀察值、獎(jiǎng)勵(lì)、完成的標(biāo)記和info對象。如果有多個(gè)獨(dú)立的環(huán)境在外部進(jìn)程中,它們將能被并行處理。
agents.tools.InGraphBatchEnv
agents.tools.InGraphBatchEnv將batch環(huán)境集成到TensorFlow圖中,保證step()和reset()函數(shù)都可以被調(diào)用。觀察值、最后的動(dòng)作、獎(jiǎng)勵(lì)和完成的標(biāo)記中的batch都存儲(chǔ)在變量中,并作為可用的張量。
agents.tools.simulate()
agents.tools.simulate()將in-graph batch環(huán)境和強(qiáng)化學(xué)習(xí)算法融合成一步,可以在訓(xùn)練循環(huán)中調(diào)用,這減少了調(diào)用會(huì)話的數(shù)量,并提供了一種簡單的方法來訓(xùn)練接下來的算法。
如果要理解這些代碼,需要對TensorFlow的控制流運(yùn)算(尤其是tf.cond(),tf.scan()和tf.control_dependencies())非常熟悉。
GitHub地址:https://github.com/tensorflow/agents
雷鋒網(wǎng) AI科技評論整理編譯。
雷峰網(wǎng)版權(quán)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見轉(zhuǎn)載須知。