日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

莫烦python简历_强化学习传说:第一章 模仿学习

發(fā)布時間:2024/4/17 python 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 莫烦python简历_强化学习传说:第一章 模仿学习 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

Hello,大家好,這里是糖葫蘆喵喵~!

經(jīng)過了幾個月的奮斗,大家是不是對煉丹已經(jīng)有所體會了呢?從今天起我們要進(jìn)入機器學(xué)習(xí)的一個非常引人注目的領(lǐng)域——強化學(xué)習(xí)(reinforcement learning)啦!強化學(xué)習(xí)部分理論較強,不是很好理解。但是不要怕,相信只要讀懂了代碼就能夠理解了!那么,從這里開始為大家?guī)聿死疃葟娀瘜W(xué)習(xí)CS294 Fall 2017以及斯坦福強化學(xué)習(xí)CS234 2017的Assginment解析,還請大家多多指教~!

那么,繼續(xù)我們的煉丹旅程吧~!

Part 0 CS294與CS234 Assignment簡介與環(huán)境準(zhǔn)備

1. CS294

在Fall 2017的課程組織上有了非常重大的改進(jìn)!(以前喵喵是不會直接推薦這門課程的,現(xiàn)在強烈推薦!)

CS294 Fall 2017 基本可以分為DRL介紹+模仿學(xué)習(xí)、model free、model based、Exploration+遷移+多任務(wù)+Meta-learning等四大部分。課程需要有一點強化學(xué)習(xí)和機器學(xué)習(xí)基礎(chǔ),建議先看完

CS294一共有四個很有趣的assignment,分別是:模仿學(xué)習(xí)(行為克隆和DAgger)、策略梯度(AC算法)、DQN和基于模型的Model Predictive Control(MPC)。assignment代碼量不大,但是很具有探索性,能夠在幫助你理解相關(guān)算法的同時讓你對強化學(xué)習(xí)環(huán)境

2. CS234

CS234: Reinforcement Learning,是斯坦福大學(xué)的強化學(xué)習(xí)課程,該課程從強化學(xué)習(xí)介紹與基礎(chǔ)知識(MDP、MC、TD)開始,主要講解了model free、Exploration和策略梯度。前半部分和

CS234有三個assignment,分別是:R-max。其中assignment 1恰好是CS294 assignment所沒有體現(xiàn)的部分,可以作為補充。assignment 2 的DQN框架寫的很漂亮(雖然一部分是借鑒CS294的2333),值得詳細(xì)閱讀!

3. 環(huán)境準(zhǔn)備

建議使用ubuntu,windows[all]模式未安裝成功(簡易模式無法進(jìn)行atari實驗)。

首先安裝以下包:

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

然后安裝Gym:

pip install gym[all]

Joint dynamics with Contact)是一個模擬機器人,生物力學(xué),圖形和動畫等領(lǐng)域的物理引擎。建議使用linux,CS294要求安裝版本為mjpro131 linux。

MuJoCo需要注冊才能免費使用30天,請盡量保證在30天內(nèi)完成作業(yè)。注冊后通過郵箱接收到mjkey.txt,將這個文件放在mjpro131同級目錄下即可。具體位置可參考示例:

/home/username/.mujoco/mjpro131

/home/username/.mujoco/mjkey.txt

其中username是你的用戶名(用過linux應(yīng)該都能明白吧),.mujoco可以手動建立一個。mjpro131是你下載并解壓的MuJoCo文件夾,mjkey.txt是注冊接收的key。、

至此,復(fù)雜的環(huán)境配置完畢,可以嘗試運行一些demo看看有沒有問題。

4. 文章組織與學(xué)習(xí)資料

喵喵這里為了便于理解,打亂了兩門課程的作業(yè)順序,分別按照模仿學(xué)習(xí)(CS294 assignment 1)、值迭代和策略迭代(CS234 assignment 1 部分)、DQN(CS294 assignment 3 \ CS234 assignment 2)、策略梯度(CS294 assignment 2)和基于模型的強化學(xué)習(xí)(CS294 assignment 4和CS234 assignment 1 部分)的順序進(jìn)行講解。

推薦學(xué)習(xí)資料:

喵喵的代碼實現(xiàn):Observerspy/CS294?github.comObserverspy/CS234?github.com

強化學(xué)習(xí)原理與技術(shù)詳解:強化學(xué)習(xí)知識大講堂

CS234 2017 課件:某云鏈接:1dFPlzvr 密碼:rsai

開篇講了這么多,現(xiàn)在讓我們愉悅地開始第一個作業(yè)模仿學(xué)習(xí)(CS294 assignment 1)吧!

Part 1 Behavioral Cloning

Behavioral Cloning,行為克隆,其實本質(zhì)上就是一個標(biāo)準(zhǔn)的監(jiān)督學(xué)習(xí)過程,如下圖所示:

顯然我們是要學(xué)習(xí)一個輸入是觀測o,輸出是動作a的策略網(wǎng)絡(luò)。所謂策略就是在給定當(dāng)前(觀測)狀態(tài)下你所做出的動作選擇。于是,明確了我們的數(shù)據(jù)(觀測o,動作a),整個監(jiān)督學(xué)習(xí)任務(wù)就很清晰了。

我們的實驗一共有6個任務(wù):

Hopper,Ant,HalfCheetah,Humanoid,Reacher,Walker2d。

如果你環(huán)境配置好了運行demo.bash就能看到6個任務(wù)的效果了:單足跳的UMA,四條腿的螞蟻,兩條腿的豹子, 跌跌撞撞的人,夠小球的機械臂,兩條腿的神奇生物。

先不吐槽這些神奇生物,我們先來運行專家策略run_expert.py生成訓(xùn)練數(shù)據(jù),對6個任務(wù)分別生成20個rollouts的數(shù)據(jù)用于訓(xùn)練(每個rollouts默認(rèn)走1000步,當(dāng)然有的任務(wù)不到1000步就結(jié)束了,具體任務(wù)具體分析即可)。所以我們擁有20000個訓(xùn)練數(shù)據(jù)啦!

專家策略的return均值和標(biāo)準(zhǔn)差如下:

Hopper-v1(input_dim: 11, output_dim: 3)

mean return 3776.51785877 std of return 3.45247967435

Ant-v1 (input_dim: 111, output_dim: 8)

mean return 4832.13478595 std of return 86.6941336401

HalfCheetah-v1 (input_dim: 17, output_dim: 6)

mean return 4132.24798316 std of return 74.760867223

Humanoid-v1 (input_dim: 376, output_dim: 17)

mean return 10401.7386441 std of return 40.9353971034 need more iter

Reacher-v1 (input_dim: 11, output_dim: 2, max_step = 50)

mean return -4.16785312879 std of return 1.74762339869

Walker2d-v1 (input_dim: 17, output_dim: 6)

mean return 5515.55381623 std of return 37.8541602931

然后就是模型,這里喵喵隨便弄了一個三層的網(wǎng)絡(luò),結(jié)構(gòu)如下:

with tf.name_scope('layer1'):

hidden1 = tf.contrib.layers.fully_connected(self.input_placeholder,

num_outputs=128, activation_fn=tf.nn.relu)

with tf.name_scope('layer2'):

hidden2 = tf.contrib.layers.fully_connected(hidden1,

num_outputs=256, activation_fn=tf.nn.relu)

with tf.name_scope('layer3'):

hidden3 = tf.contrib.layers.fully_connected(hidden2,

num_outputs=64, activation_fn=tf.nn.relu)

with tf.name_scope('output'):

pred = tf.contrib.layers.fully_connected(hidden3,

num_outputs=Config.n_classes, activation_fn=None)

參數(shù)設(shè)置:

epoch=20,itera(迭代次數(shù),為了和DAgger對比)=20,batch_size = 256,lr = 0.0005

每一次itera后我們都以學(xué)習(xí)到的策略運行20個rollouts,并記錄returns的均值A(chǔ)verageReturn和標(biāo)準(zhǔn)差StdReturn。

(題外話:其實CS294整個作業(yè)下來有兩個工具類特別好用,就是logz.py和plot.py,記錄畫圖一氣呵成,已經(jīng)成為喵喵的常備工具了233

畫圖如下:(其中hopper-big是將網(wǎng)絡(luò)第二層節(jié)點數(shù)提高到512個)

畢竟其實只訓(xùn)練了itera * epoch = 400(epoch),所以效果也就這樣了(為了和DAgger對比)。對比專家策略,也就Ant和HalfCheetah任務(wù)勉強接近,其他任務(wù)基本上可以說差得很遠(yuǎn)了,當(dāng)總epoch更大時Ant和HalfCheetah任務(wù)效果更好一些。當(dāng)然,在我們提高網(wǎng)絡(luò)節(jié)點數(shù)量,增強模型表達(dá)能力的時候,我們還是可以看到有一個明顯的提升的(Hopper)。

Part 2 DAgger

看來上述簡單的方法不太行,問題出在哪里呢?

我們的訓(xùn)練數(shù)據(jù)分布記為

,我們通過模型學(xué)習(xí)到的策略記為

。當(dāng)我們執(zhí)行我們學(xué)習(xí)到的策略得到的實際數(shù)據(jù)分布應(yīng)為

,這個分布通常與

不一致,除非實際數(shù)據(jù)分布和訓(xùn)練數(shù)據(jù)分布完美的一致。因此,我們的Behavioral Cloning在某些任務(wù)下很快就偏移了:

那么為了解決這個問題,一個很簡單的想法就是讓

能去貼近

。那么,我們每次在執(zhí)行完策略

后對獲得的觀測

重新人為給出標(biāo)記

不就行了?這樣我們把新獲得的數(shù)據(jù)加入到原來的data中重新訓(xùn)練,不斷地讓

去貼近

。這就是我們的DAgger算法思想:

很簡單,只是比Behavioral Cloning多了兩步:

1. 從已抽取的data中訓(xùn)練策略網(wǎng)絡(luò)

2. 運行學(xué)習(xí)策略

后獲得的

3. 對獲得的

執(zhí)行專家策略得到其label:

4. 將獲得的(

,

) 加入data重新訓(xùn)練策略。

核心部分實現(xiàn):

for _ in range(10):

_, o = run_env(env, nn, session) #執(zhí)行學(xué)習(xí)到的策略,獲得新的觀測o

observations.extend(o)

action = policy_fn(o) #對新觀測的o執(zhí)行專家策略,獲得a作為label

actions.extend(action)

參數(shù)設(shè)置:

網(wǎng)絡(luò)結(jié)構(gòu)同上,epoch=20,itera=20,batch_size = 256,lr = 0.0005

初始依然是20 rollouts數(shù)據(jù),每個itera加入10 rollouts的新數(shù)據(jù)。

對比結(jié)果如下(DA for DAgger, BC for Behavioral Cloning):

可以看到DAgger基本上在同樣的參數(shù)下都能接近專家策略的return了。

關(guān)于更多DAgger算法的問題,請詳細(xì)的學(xué)習(xí)CS294第二節(jié)。

好了,這就是我們本次對模仿學(xué)習(xí)的講解,我們正式踏入了強化學(xué)習(xí)的門框233。強化學(xué)習(xí)里非常重要的算法我們后續(xù)也都會接觸到,不要著急哦。

では、おやすみ~!

下期預(yù)告:CS234 Assignment1 值迭代和策略迭代作業(yè)詳解

與50位技術(shù)專家面對面20年技術(shù)見證,附贈技術(shù)全景圖

總結(jié)

以上是生活随笔為你收集整理的莫烦python简历_强化学习传说:第一章 模仿学习的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。