姓名:張慶慶
學號:19021211151
嵌牛導讀:機器學習第三類強化學習
?嵌牛鼻子:機器學習 強化學習
嵌牛提問:什么是強化學習,強化學習所展現的效果
轉載源:AI學習筆記之——強化學習(Reinforcement Learning, RL) - 簡書,作者:Hongtao洪滔
嵌牛正文:
機器學習按照從那里學的角度可以分為:監督學習,無監督學習和強化學習三大類。之前的文章大多數都是介紹的前兩類,而第三類強化學習(RL)確是最接近我們想象的“人工智能”。前段時間 Alpha Go 下圍棋之所以能打敗人類選手,也是拜強化學習所賜,今天我們就來簡單談一談強化學習。
1.強化學習簡介
強化學習(RL)就是在環境中與環境的互動不停地學習的,非常像人類學習走路,學習騎車,學習游泳等等。
想象一下自己剛剛開始學習騎自行車的樣子,東扭西歪的,還摔過不少跤,最后才逐漸熟練掌握的。這種東扭西歪的動作恰恰就是對周圍環境的不停反饋,如果動作不當摔倒了,就是個負反饋,下次再做這個動作就要小心了。用力蹬踏板的時候車子就向前走,這就是個正反饋,要繼續保持這個動作前進。
與學習監督學習和非監督學習不一樣,強化學習涉及到環境(Environment),反饋(或者說是獎勵Reward),Action(行動) 以及智能體(Agent)本身,所以并不是寫幾段Python代碼,找個數據庫就能開始學習的。還好,現在有有如OpenAI這樣的開源平臺,讓初學者能夠很快通過游戲的形式上手強化學習的項目。
在這里我簡單介紹一個OpenAI 里面的小游戲,拋磚引玉讓大家理解一下什么是強化學習。
2.OpenAI
OpenAI 的gym里面有一個叫CartPole的小游戲,就是水平方向上有一個可以左右移動的平臺,平臺上有一個木棍,在重力的作用下會左右搖擺,你要做的事情就是左右移動平臺使其保持平衡不要掉下來。
游戲的環境參數實際上就是如下圖的四個變量:
[Horizontal Position,Horizontal Velocity, Angle of Pole, Angular Velocity]
首先以最簡單的方式造一個智能體。
# Gotta import gym!importgym# Make the environment, replace this string with any# from the docs. (Some environments have dependencies)env=gym.make('CartPole-v0')# Reset the environment to default beginningenv.reset()# Using _ as temp placeholder variablefor_inrange(1000):# Render the envenv.render()# 這里隨機行動env.step(env.action_space.sample())# take a random action
這段代碼不多解釋,可以參考官方網文檔, 其中最關鍵的是這一句
env.step(env.action_space.sample())
我們實際上是讓平臺隨機移動,可以想象結果是這樣的。
3.代碼控制Agent
一般學習的對象我們叫做機器人或者Agent, 我們怎么簡單地讓這個Agent 智能一下呢?
最簡單的方法就是當棍子向左偏的時候(Angle >0)就向右移動(Action = 1),向右偏(Angle<=0)就向左移動(Action = 0)。代碼實現如下:
注意,四個環境變量是需要在obseervation中提取出來的,角度參數就是pole_ang
import gymenv = gym.make('CartPole-v0')# print(env.action_space.)# #> Discrete(2)# print(env.observation_space)# #> Box(4,)observation = env.reset()for t in range(1000):? ? env.render()? ? cart_pos , cart_vel , pole_ang , ang_vel = observation? ? # Move Cart Right if Pole is Falling to the Right? ? # Angle is measured off straight vertical line? ? if pole_ang > 0:? ? ? ? # Move Right? ? ? ? action = 1? ? else:? ? ? ? # Move Left? ? ? ? action = 0? ? # Perform Action? ? observation , reward, done, info = env.step(action)? ? print(observation)
效果如下,雖然還是不穩定,但是比讓平臺隨機移動還是有了點效果。
嵌牛總結:注意上面通過if語句實現對Agent的控制,是完全沒有用到機器學習的,因為邏輯是寫死的,機器根本就沒有“學習”的過程。
這里用這個例子只是簡單讓讀者理解強化學習是什么,就是向人一樣,通過行動和環境的反饋不停地修正進行學習的。后續的文章會引入神經網路,讓機器學起來。