OpenAI Gym 簡介
|
589
產生的行為
b
a
d
c
r
p
a
c d
b
策略空間
18-3 
在策略空間裡面的四個點
agent
對應的行為
另一種做法是使用優化技術
例如計算獎勵對策略參數的梯度
然後沿著前往更高獎勵的
梯度調整這些參數
9
這種做法稱為
策略梯度
policy gradientPG),
本章稍後將更詳細
討論它
回到掃地機器人
你可以稍微增加
p
並且評估這樣子會不會提升它在
30
分鐘
之內吸到的灰塵量
若是如此
就再稍微增加
p
否則就減少
p
我們將使用
TensorFlow
來實作一種流行的
PG
演算法
但是在此之前
我們要先建立一個環境
agent
待在裡
所以
是時候介紹
OpenAI Gym
OpenAI Gym
簡介
強化學習有一項挑戰是
你必須先建立一個有效的環境才能訓練
agent
如果你想要寫一
個只會玩
Atari
遊戲的
agent
你就要有一個
Atari
遊戲模擬器
如果你想要寫一個會走路
的機器人
那個環境就是真實世界
你可以直接在真實世界中訓練你的機器人
但這樣
子也有其限制
如果機器人掉下懸崖
你不是只要按下
Undo
就可以重來一遍
你也不能
把時間加速
投入更多計算能力無法讓機器人走得更快
而且平行訓練
1,000
個機器人通
需要大量成本
簡言之
在真實世界訓練是很難且很慢的做法
所以你通常至少需要
一個模擬的環境
來提升訓練速度
例如
你可以使用
PyBullethttps://pybullet.org/
MuJoCohttp://www.mujoco.org/
之類的程式庫來做
3D
物理模擬
9
這種做法稱為
梯度上升
Gradient Ascent)。
它就像是反向的梯度下降
進行最大化
而不是最小化
590
|
第十八章:強化學習
OpenAI Gymhttps://gym.openai.com/
10
是提供各種模擬環境的工具組
Atari
遊戲
棋類
遊戲
2D
3D
物理模擬等
),
讓你可以訓練
agent
比較它們
或開發新的
RL
演算法
在安裝工具組之前
如果你已經使用
virtualenv
來建立並隔離一個環境了
你要先啟動
$
cd $ML_PATH
#
你的
ML
工作目錄
(
例如
$HOME/ml)
$
source my_env/bin/activate
#
Linux
MacOS
$
.\my_env\Scripts\activate
#
Windows
接著安裝
OpenAI Gym
如果你沒有使用虛擬環境
你要加上
--user
選項
或取得管理員
權限
):
$
python3 -m pip install -U gym
取決於你的系統
你可能也要安裝
Mesa OpenGL UtilityGLU
程式庫
例如在
Ubuntu
18.04
你必須執行
apt install libglu1-mesa
才能顯示第一個環境
接著打開
Python
shell
Jupyter
筆記本
並且用
make()
建立一個環境
>>> import gym
>>>
env = gym.make("CartPole-v1")
>>>
obs = env.reset()
>>>
obs
array([-0.01258566, -0.00156614, 0.04207708, -0.00180545])
我們在此建立一個
CartPole
環境
這是個
2D
模擬環境
在裡面
你可以讓一台車子向左
或向右加速
來平衡它上面的桿子
見圖
18-4)。
你可以執行
gym.envs.registry.all()
來取得所有可用的環境清單
建立環境之後
你必須用
reset()
方法將它初始化
它會
回傳第一個觀察
觀察的內容依環境而定
CartPole
環境而言
各個觀察都是一個
1D
NumPy
陣列
裡面有四個浮點數
這些浮點數代表車子的橫向位置
0.0
=
中間
)、
它的
加速度
正數代表右邊
),
桿子的角度
0.0
=
直立
),
以及它的角速度
正數代表順時
)。
接下來
我們呼叫環境的
render()
方法來顯示這個環境
見圖
18-4)。
Windows
你要
先安裝一種
X Server
例如
VcXsrv
Xming
>>>
env.render()
True
10 OpenAI
是一家人工智慧研究公司
部分資金來自
Elon Musk
它聲稱它的目標是促進並發展造福人類
不是消滅人類
的友善
AI
OpenAI Gym 簡介
|
591
角度
角速度
速度
位置
0
18-4 CartPole
環境
如果你使用
headless
伺服器
也就是沒有螢幕的
),
例如雲端上的虛擬
機器
顯示將會失敗
避免這種情況的唯一方法是使用偽
X
伺服器
Xvfb
Xdummy
例如
你可以安裝
Xvfb
Ubuntu
Debian
使用
apt install xvfb
並使用下面的命令來啟動
Python
xvfb-run -s
"-screen 0 1400x900x24" python3
或是安裝
Xvfb
pyvirtualdisplay
程式庫
https://homl.info/pyvd)(
裡面有
Xvfb),
然後在程式的開頭執行
pyvirtualdisplay.Display(visible=0, size=(1400, 900)).start()
如果你希望
render()
NumPy
陣列回傳顯示圖像
可設定
mode="rgb_array"
奇怪的
這個環境也會將環境顯示到螢幕上
):
>>>
img = env.render(mode="rgb_array")
>>>
img.shape #
通道
3 =
(800, 1200, 3)
我們來詢問環境有哪些行動可做
>>>
env.action_space
Discrete(2)
Discrete(2)
代表可能的行動是整數
0
1
代表往左
0
或右
1
加速
其他的環境可
能有額外的離散
discrete
的行動
或其他種類的行動
例如連續的
)。
因為桿子往右傾
obs[2] > 0
),
我們將車子往右加速
>>>
action = 1 #
往右加速
>>>
obs, reward, done, info = env.step(action)
>>>
obs
array([-0.01261699, 0.19292789, 0.04204097, -0.28092127])
592
|
第十八章:強化學習
>>>
reward
1.0
>>>
done
False
>>>
info
{}
step()
方法執行了指定的行動
並回傳四個值
obs
這是新的觀察
現在車子往右移了
obs[1] > 0
),
桿子仍然右傾
obs[2] > 0
),
是它的角速度是負的
obs[3] < 0
),
所以在下一步之後
它可能會左傾
reward
在這個環境中
每一步都會讓你得到
1.0
的獎勵
無論你做了什麼事
所以你的目標
是讓這一期
episode
的執行時間盡可能地久
done
這個值會在這一期結束時變成
True
這種情況會在傾斜太多
或離開螢幕
或進行
200
步之後
此時代表你贏了
發生
結束之後
你必須先重設環境才能再次使用它
info
這個環境專屬的字典有一些額外的資訊
可能對除錯或訓練有幫助
例如
在一些遊
戲中
它可能會找出
agent
還有多少條命
當你結束使用環境時
你要呼叫它的
close()
方法來釋出資源
我們來寫一個簡單的策略
在桿子左傾時往左加速
當它右傾時往右加速
我們會執行這
個策略
看看經過
500
期之後
它得到多少平均獎勵
def
basic_policy(obs):
angle = obs[2]
return
0
if
angle < 0
else
1
totals = []
for
episode
in
range(500):
episode_rewards = 0
obs = env.reset()
for
step
in
range(200):
action = basic_policy(obs)

Get 精通機器學習 now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.