簡介:使用OpenAI Gym進行強化學習

強化學習:簡介

從“強化”這個詞我們得到了建立具有正反饋的模式或信念系統的想法。通過強化學習,我們的目標是創建算法,幫助代理在特定環境中獲得最佳性能,並獲得適當的獎勵。讓我們考慮兩種情況,為RL提供抽象的洞察力。

簡介:使用OpenAI Gym進行強化學習

積極和消極的獎勵會增加或減少該行為的傾向。最終在一段時間內在該環境中取得更好的結果。

讓我們首先定義agent 和environment 的概念,以瞭解有關RL的技術細節。environment 是agent 的世界,它通過對其執行的給定action來改變agent的狀態。agent是通過傳感器感知環境並使用執行器執行zctions的系統。在上述情況下,荷馬(左)和巴特(右)是我們的agents,世界是他們的環境。他們通過獲得快樂作為獎勵來對其採取actions並改善他們的存在狀態。在本文中,我們將設計我們自己的agent,該代理執行actions以通過OpenAI gym實現目標。

最新進展和範圍

從IBM的Deep Blue v / s Kasparov到AlpaGo v / s Lee Sedol,深度強化學習已經深入人心。最近在OpenAI創建Dota機器人方面取得的突破和勝利也是值得稱道的,機器人經過訓練可以處理複雜和動態的環境。掌握這些遊戲是為了測試可以創建的AI代理的限制,以處理非常複雜的情況。已經有很複雜的應用,如無人駕駛汽車,智能無人機在現實世界中運行。讓我們瞭解強化學習的基礎知識,並從OpenAI Gym開始製作我們自己的Agent。在此之後轉向Deep RL並解決更復雜的情況。其應用範圍超乎想象,可以應用於許多領域。

在同一狀態上反覆運行算法的獨特能力,幫助它學習該狀態下的最佳動作,本質上相當於打破時間的構造,讓人類幾乎不需要時間就能獲得無限的學習體驗。

簡介:使用OpenAI Gym進行強化學習

Policy Gradients with Monte Carlo Look Search Tree

這有什麼不同?

主要有三種學習方式:監督學習,無監督學習和強化學習。讓我們看看他們的基本差異。在監督學習中,我們嘗試預測目標值或類,其中訓練的輸入數據已經分配了標籤。無監督學習使用未標記數據來查看模式以進行聚類,PCA或異常檢測。RL算法是優化程序,以找到獲得最大獎勵的最佳方法,即給予獲勝策略以達到目標。

簡介:使用OpenAI Gym進行強化學習

考慮不同學習類型的用例

概念性理解

使用強化學習(RL)作為框架代理,通過某些動作來轉換代理的狀態,每個動作都與獎勵值相關聯。它還使用策略來確定將狀態映射到操作的下一個操作。策略可以是確定性的和隨機的,找到最優政策是關鍵。不同狀態下的不同動作將具有不同的獎勵值,例如在Pocket Tanks遊戲中的“Fire”命令,因為有時候保留一個戰略上良好的位置會更好。為了解決這個問題,我們需要將 state-action pair映射到獎勵的 Q-value(action-value)。現在定義環境在RL的上下文中作為函數,它在給定狀態下將動作作為輸入並返回與動作狀態對相關聯的新狀態和獎勵值。當環境變得複雜時,神經網絡能夠輕鬆地學習 state-action pairs獎勵,這被稱為Deep RL。

簡介:使用OpenAI Gym進行強化學習

對於像Mario Q-learning這樣的遊戲,可以使用卷積神經網絡(CNN)損失近似值。

在這裡,我們將僅限於Q-Learning,其中Q將 state-action pairs 映射到最大值,並結合即時獎勵和未來獎勵,即對於新狀態,學習價值是獎勵加上未來的獎勵估計。將其量化為具有不同參數的等式,例如學習率和折扣因子,以減慢Agent的行動選擇。我們得出以下等式。

簡介:使用OpenAI Gym進行強化學習

Q函數方程,說明給定對的最大預期累積獎勵

使用OpenAI Gym

為何選擇OpenAI gym?這個python庫為我們提供了大量的測試環境來處理RL代理的算法,這些算法具有用於編寫通用算法和測試它們的共享接口。讓我們開始只需鍵入pip install gym終端以便於安裝,您將獲得一些經典的環境來開始處理您的Agent。複製下面的Python代碼並運行它,您的環境將只加載經典控件作為默認值。

# 1. It renders instance for 500 timesteps, perform random actions
import gym
env = gym.make('Acrobot-v1')
env.reset()
for _ in range(500):
env.render()
env.step(env.action_space.sample())
# 2. To check all env available, uninstalled ones are also shown
from gym import envs
print(envs.registry.all())

當對象通過動作與環境交互時,則step(...)函數返回observation(表示環境狀態),reward(前一個動作中的獎勵浮動),done(到達重置環境時間或目標實現),info:a dict for debugging,如果它包含環境最後狀態的原始概率,則可用於學習。看看它怎麼運作。另外,觀察Space類型的observation在不同環境下是如何不同的。

Python代碼如下:

import gym
env = gym.make('MountainCarContinuous-v0') # try for different environements
observation = env.reset()
for t in range(100):
env.render()

print observation
action = env.action_space.sample()
observation, reward, done, info = env.step(action)
print observation, reward, done, info
if done:
print("Finished after {} timesteps".format(t+1))
break

[Output For Mountain Car Env:]
[-0.56252328 0.00184034]
[-0.56081509 0.00170819] -0.00796802138459 False {}

[Output For CartPole Env:]
[ 0.1895078 0.55386028 -0.19064739 -1.03988221]
[ 0.20058501 0.36171167 -0.21144503 -0.81259279] 1.0 True {}
Finished after 52 timesteps

上面代碼中的action_space是什麼?action-space&observation-space描述了要處理的特定環境的有效格式。只需看看返回的值。

import gym
env = gym.make('CartPole-v0')
print(env.action_space) #[Output: ] Discrete(2)
print(env.observation_space) # [Output: ] Box(4,)
env = gym.make('MountainCarContinuous-v0')
print(env.action_space) #[Output: ] Box(1,)
print(env.observation_space) #[Output: ] Box(2,)

離散值是非負的可能值,大於0或1相當於左右移動以達到笛卡兒平衡。Box表示n-dim數組。這些有助於編寫針對不同環境的通用代碼。我們可以簡單地檢查bounds .observation_space。將它們編碼到我們的通用算法中。

說明

我建議在瞭解OpenAI Gym的基礎知識後,您可以安裝Gym的所有依賴項,然後使用以下命令完全安裝gym。在這裡,我們使用python2.x你也可以使用python3.x只需更改下面的命令。

apt-get install -y python-numpy python-dev cmake zlib1g-dev libjpeg-dev xvfb libav-tools xorg-dev python-opengl libboost-all-dev libsdl2-dev swig

sudo pip install 'gym[all]'

讓我們開始構建我們的Q-table算法,它將嘗試解決FrozenLake 環境。在這種環境中,目標是在一個可能有一些洞的冰凍湖面上達到目標。以下是該算法描述表面的方式。

SFFF (S: starting point, safe)

FHFH (F: frozen surface, safe)

FFFH (H: hole, fall to your doom)

HFFG (G: goal, where the frisbee is located)

Q表包含映射到獎勵的state-action pairs。因此,我們將構建一個數組,該數組在算法運行期間映射不同的狀態和動作以獎勵值。它的維度將明確| state | x | actions |。讓我們把它寫在Q-learning算法的Python代碼中。

import gym
import numpy as np

# 1. Load Environment and Q-table structure
env = gym.make('FrozenLake8x8-v0')
Q = np.zeros([env.observation_space.n,env.action_space.n])
# env.obeservation.n, env.action_space.n gives number of states and action in env loaded

# 2. Parameters of Q-leanring
eta = .628
gma = .9
epis = 5000
rev_list = [] # rewards per episode calculate

# 3. Q-learning Algorithm

for i in range(epis):
# Reset environment
s = env.reset()
rAll = 0
d = False
j = 0
#The Q-Table learning algorithm
while j < 99:
env.render()
j+=1
# Choose action from Q table
a = np.argmax(Q[s,:] + np.random.randn(1,env.action_space.n)*(1./(i+1)))
#Get new state & reward from environment
s1,r,d,_ = env.step(a)
#Update Q-Table with new knowledge
Q[s,a] = Q[s,a] + eta*(r + gma*np.max(Q[s1,:]) - Q[s,a])
rAll += r
s = s1
if d == True:
break
rev_list.append(rAll)
env.render()

print "Reward Sum on all episodes " + str(sum(rev_list)/epis)
print "Final Values Q-Table"
print Q

如果您對通過環境找到解決方案的Agent模擬感興趣,請編寫此Python代碼段而不是Q-learning算法。

簡介:使用OpenAI Gym進行強化學習

Frozen Lake Environment的可視化及以下Python代碼用於模擬

# Reset environment
s = env.reset()
d = False
# The Q-Table learning algorithm
while d != True:
env.render()
# Choose action from Q table
a = np.argmax(Q[s,:] + np.random.randn(1,env.action_space.n)*(1./(i+1)))
#Get new state & reward from environment
s1,r,d,_ = env.step(a)
#Update Q-Table with new knowledge
Q[s,a] = Q[s,a] + eta*(r + gma*np.max(Q[s1,:]) - Q[s,a])
s = s1
# Code will stop at d == True, and render one state before it

但是請記住,即使使用通用接口,不同環境的代碼複雜度也會不同。在上面的環境中,我們只有一個簡單的64狀態環境,只有很少的操作需要處理。我們可以很容易地將它們存儲在二維數組中進行獎勵映射。現在,讓我們考慮更復雜的環境案例,比如Atari envs,並考慮所需的方法。

env = gym.make("Breakout-v0")
env.action_space.n
Out[...]: 4
env.env.get_action_meanings()
Out[...]: ['NOOP', 'FIRE', 'RIGHT', 'LEFT']
env.observation_space
Out[...]: Box(210, 160, 3)

observation_space需要用210x160x3張量來表示,這使得我們的Q表變得更加複雜。此外,每個動作在k幀的持續時間內重複執行,其中k從{2,3,4}均勻地採樣。RGB通道中有33,600像素,值範圍為0-255,環境顯然已經變得過於複雜,簡單的QL方法在這裡無法使用。可以通過卷積神經網絡(CNN)進行深度學習來解決此問題的方法。

結論

現在,通過上面的教程,您可以獲得有關gym的基本知識以及開始使用它所需的一切。它也兼容TensorFlow。


分享到:


相關文章: