AI學(xué)習(xí)筆記之——強(qiáng)化學(xué)習(xí)(Reinforcement Learning, RL)

姓名:張慶慶

學(xué)號(hào):19021211151

嵌牛導(dǎo)讀:機(jī)器學(xué)習(xí)第三類強(qiáng)化學(xué)習(xí)

?嵌牛鼻子:機(jī)器學(xué)習(xí) 強(qiáng)化學(xué)習(xí)

嵌牛提問:什么是強(qiáng)化學(xué)習(xí),強(qiáng)化學(xué)習(xí)所展現(xiàn)的效果

轉(zhuǎn)載源:AI學(xué)習(xí)筆記之——強(qiáng)化學(xué)習(xí)(Reinforcement Learning, RL) - 簡(jiǎn)書,作者:Hongtao洪滔

嵌牛正文:

機(jī)器學(xué)習(xí)按照從那里學(xué)的角度可以分為:監(jiān)督學(xué)習(xí),無監(jiān)督學(xué)習(xí)和強(qiáng)化學(xué)習(xí)三大類。之前的文章大多數(shù)都是介紹的前兩類,而第三類強(qiáng)化學(xué)習(xí)(RL)確是最接近我們想象的“人工智能”。前段時(shí)間 Alpha Go 下圍棋之所以能打敗人類選手,也是拜強(qiáng)化學(xué)習(xí)所賜,今天我們就來簡(jiǎn)單談一談強(qiáng)化學(xué)習(xí)。

1.強(qiáng)化學(xué)習(xí)簡(jiǎn)介

強(qiáng)化學(xué)習(xí)(RL)就是在環(huán)境中與環(huán)境的互動(dòng)不停地學(xué)習(xí)的,非常像人類學(xué)習(xí)走路,學(xué)習(xí)騎車,學(xué)習(xí)游泳等等。

想象一下自己剛剛開始學(xué)習(xí)騎自行車的樣子,東扭西歪的,還摔過不少跤,最后才逐漸熟練掌握的。這種東扭西歪的動(dòng)作恰恰就是對(duì)周圍環(huán)境的不停反饋,如果動(dòng)作不當(dāng)摔倒了,就是個(gè)負(fù)反饋,下次再做這個(gè)動(dòng)作就要小心了。用力蹬踏板的時(shí)候車子就向前走,這就是個(gè)正反饋,要繼續(xù)保持這個(gè)動(dòng)作前進(jìn)。

與學(xué)習(xí)監(jiān)督學(xué)習(xí)和非監(jiān)督學(xué)習(xí)不一樣,強(qiáng)化學(xué)習(xí)涉及到環(huán)境(Environment),反饋(或者說是獎(jiǎng)勵(lì)Reward),Action(行動(dòng)) 以及智能體(Agent)本身,所以并不是寫幾段Python代碼,找個(gè)數(shù)據(jù)庫就能開始學(xué)習(xí)的。還好,現(xiàn)在有有如OpenAI這樣的開源平臺(tái),讓初學(xué)者能夠很快通過游戲的形式上手強(qiáng)化學(xué)習(xí)的項(xiàng)目。

在這里我簡(jiǎn)單介紹一個(gè)OpenAI 里面的小游戲,拋磚引玉讓大家理解一下什么是強(qiáng)化學(xué)習(xí)。

2.OpenAI

OpenAI 的gym里面有一個(gè)叫CartPole的小游戲,就是水平方向上有一個(gè)可以左右移動(dòng)的平臺(tái),平臺(tái)上有一個(gè)木棍,在重力的作用下會(huì)左右搖擺,你要做的事情就是左右移動(dòng)平臺(tái)使其保持平衡不要掉下來。

游戲的環(huán)境參數(shù)實(shí)際上就是如下圖的四個(gè)變量:

[Horizontal Position,Horizontal Velocity, Angle of Pole, Angular Velocity]

首先以最簡(jiǎn)單的方式造一個(gè)智能體。

# 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()# 這里隨機(jī)行動(dòng)env.step(env.action_space.sample())# take a random action

這段代碼不多解釋,可以參考官方網(wǎng)文檔, 其中最關(guān)鍵的是這一句

env.step(env.action_space.sample())

我們實(shí)際上是讓平臺(tái)隨機(jī)移動(dòng),可以想象結(jié)果是這樣的。

3.代碼控制Agent

一般學(xué)習(xí)的對(duì)象我們叫做機(jī)器人或者Agent, 我們?cè)趺春?jiǎn)單地讓這個(gè)Agent 智能一下呢?

最簡(jiǎn)單的方法就是當(dāng)棍子向左偏的時(shí)候(Angle >0)就向右移動(dòng)(Action = 1),向右偏(Angle<=0)就向左移動(dòng)(Action = 0)。代碼實(shí)現(xiàn)如下:

注意,四個(gè)環(huán)境變量是需要在obseervation中提取出來的,角度參數(shù)就是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)

效果如下,雖然還是不穩(wěn)定,但是比讓平臺(tái)隨機(jī)移動(dòng)還是有了點(diǎn)效果。

嵌牛總結(jié):注意上面通過if語句實(shí)現(xiàn)對(duì)Agent的控制,是完全沒有用到機(jī)器學(xué)習(xí)的,因?yàn)檫壿嬍菍懰赖?,機(jī)器根本就沒有“學(xué)習(xí)”的過程。

這里用這個(gè)例子只是簡(jiǎn)單讓讀者理解強(qiáng)化學(xué)習(xí)是什么,就是向人一樣,通過行動(dòng)和環(huán)境的反饋不停地修正進(jìn)行學(xué)習(xí)的。后續(xù)的文章會(huì)引入神經(jīng)網(wǎng)路,讓機(jī)器學(xué)起來。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容