Reinforcement Learning強化學習系列之五:值近似方法Value Approximation
引言
前面說到了強化學習中的蒙特卡洛方法(MC)以及時序差分(TD)的方法,這些方法針對的基本是離散的資料,而一些連續的狀態則很難表示,對於這種情況,通常在強化學習裡有2中方法,一種是針對value function的方法,也就是本文中提到的值近似(value approximation);另一種則是後面要講到的policy gradient。
值近似的方法
值近似的方法根本上是使用一個值函式來近似表示該狀態的返回值,對於狀態,在一個序列中間,我們使用一個引數函式來近似表示觀測到的真實值,學習使用普通的梯度下降的方式進行,對於一個觀察序列的每一個step均可以作為一個訓練的過程。當然這個值函式可以加上動作
示例
問題描述:一個汽車從谷底向上開,但是汽車的馬力不足以支撐其到終點,因此最好的策略是需要先開到谷底的左邊然後再加速,利用一部分慣性到達終點。
- 這裡面的狀態可以描述為:
- 動作空間為3個,,分別表示全力向左,不動和全力向右
- 狀態序列更新的方式為:
這裡bound表示其約束範圍,橫軸座標的範圍是,速度的範圍是,當行到最座標的時候,將會被置零。
在本示例中,將使用Q-learning的值近似方法,採用的線性函式來表示Q函式。
實驗環境
實驗將基於openAI所提供的gym包的mountaincar-v0這一個環境,openAI提供了很多的遊戲環境,都可以進行相關的強化學習實驗。
openAI目前支援mac OS 和Linux環境,可以直接使用pip install gym的方式安裝其最新的版本的gym,但是對於python2.7來說,安裝最新的版本0.9.6,可能會出現cannot import name spaces
關鍵程式碼
class Estimator(object):
def __init__(self):
self.models=[]
for _ in range(env.action_space.n):
model = SGDRegressor(learning_rate="constant")
model.partial_fit([self.feature_state(env.reset())],[0])
self.models.append(model)
def predict(self,s,a=None):
s=self.feature_state(s)
if a:
return self.models[a].predict([s])[0]
else:
return [self.models[m].predict([s])[0] for m in range(env.action_space.n)]
def update(self,s,a,target):
s=self.feature_state(s)
self.models[a].partial_fit([s],[target])
def feature_state(self,s):
return featurizer.transform(scaler.transform([s]))[0]
def make_epsilon_greedy_policy(estimator,nA,epsilon):
def epsilon_greedy_policy(observation):
best_action = np.argmax(estimator.predict(observation))
A =np.ones(nA,dtype=np.float32)*epsilon/nA
A[best_action] += 1-epsilon
return A
return epsilon_greedy_policy
def Q_learning_with_value_approximation(env,estimator,epoch_num
,discount_factor=1.0, epsilon=0.1, epsilon_decay=1.0):
# stats = plotting.EpisodeStats(
# episode_lengths=np.zeros(epoch_num),
# episode_rewards=np.zeros(epoch_num))
for i_epoch_num in range(epoch_num):
policy = make_epsilon_greedy_policy\
(estimator,env.action_space.n,epsilon*epsilon_decay**i_epoch_num)
state = env.reset()
for it in itertools.count():
action_probs = policy(state)
action = np.random.choice(np.arange(len(action_probs)), p=action_probs)
next_state,reward,done,_=env.step(action)
q_values_next = estimator.predict(next_state)
td_target = reward + discount_factor * np.max(q_values_next)
estimator.update(state, action, td_target)
# stats.episode_rewards[i_epoch_num] += reward
# stats.episode_lengths[i_epoch_num] = it
print("\rStep {} @ Episode {}/{}".format(it, i_epoch_num + 1, epoch_num))
if done:
print it
break
state = next_state
其中,將兩個狀態引數使用RBF核函式進行轉換為一維長度為400的特徵向量,使用的普通的SGDRegressor。
結果
執行100代後的函式cost值為
程式碼連結
相關推薦
Reinforcement Learning強化學習系列之五:值近似方法Value Approximation
引言 前面說到了強化學習中的蒙特卡洛方法(MC)以及時序差分(TD)的方法,這些方法針對的基本是離散的資料,而一些連續的狀態則很難表示,對於這種情況,通常在強化學習裡有2中方法,一種是針對value function的方法,也就是本文中提到的值近似(value
Reinforcement Learning強化學習系列之二:MC prediction
引言 這幾個月一直在忙找工作和畢業論文的事情,部落格擱置了一段時間,現在稍微有點空閒時間,又啃起了強化學習的東西,今天主要介紹的是強化學習的免模型學習free-model learning中的最基礎的部分蒙特卡洛方法(Monte Carlo),並以21點遊戲作
Reinforcement Learning強化學習系列之一:model-based learning
前言 在機器學習和深度學習坑裡呆了有一些時日了,在阿里實習過程中,也感覺到了工業界和學術界的一些迥異,比如強化學習在工業界用的非常廣泛,而自己之前沒有怎麼接觸過強化學習的一些知識,所以感覺還是要好好的補一補更新一下自己的知識庫,以免被AI時代拋棄。 強化
Netty4.0學習筆記系列之五:自定義通訊協議
實現的原理是通過Encoder把java物件轉換成ByteBuf流進行傳輸,通過Decoder把ByteBuf轉換成java物件進行處理,處理邏輯如下圖所示: 傳輸的Java bean為Person: package com.guowl.testobjcoder
強化學習系列(五):蒙特卡羅方法(Monte Carlo)
一、前言 在強化學習系列(四):動態規劃中,我們介紹了採用DP (動態規劃)方法求解environment model 已知的MDP(馬爾科夫決策過程),那麼當environment model資訊不全的時候,我們會採用什麼樣的方法求解呢?蒙特卡洛方法(Mon
深入理解Tomcat系列之五:Context容器和Wrapper容器
ssa stream servlet實例 可用 igel sse ould rip alt 前言 Context容器是一個Web項目的代表,主要管理Servlet實例,在Tomcat中Servlet實例是以Wrapper出現的。如今問題是怎樣才幹通過C
數據庫面試系列之五:mysql的存儲引擎
當前 查看 efault 表鎖 blog 如果 show 事務 測試 mysql的默認存儲引擎是innoDB,是唯一一個支持事務和支持外鍵的存儲引擎, 可以通過:show variables like ‘default_storage_engine‘;查看當前數據庫到默認引
Office 365 系列之五:創建新用戶
office365 創建賬號、分配許可 本章節跟大家分享怎麽去創建新用戶、分配許可以及修改用戶後綴和電子郵件地址。 登錄 Office 365 管理中心,點擊“用戶”--“活動用戶”--“+添加用戶”; 參照截圖,輸入對應的姓名、顯示名、登錄名、密碼等信息點擊“添加”
mongo 3.4分片集群系列之五:詳解平衡器
大致 mongos 搭建 一次 相對 時間 表示 部分 man 這個系列大致想跟大家分享以下篇章(我會持續更新的↖(^ω^)↗): 1、mongo 3.4分片集群系列之一:淺談分片集群 2、mongo 3.4分片集群系列之二:搭建分片集群--哈希分片 3、mongo 3.4
大數據學習系列之五 ----- Hive整合HBase圖文詳解
scala direct ont 增加 pac hadoop2 exe dfs- min 引言 在上一篇 大數據學習系列之四 ----- Hadoop+Hive環境搭建圖文詳解(單機) 和之前的大數據學習系列之二 ----- HBase環境搭建(單機) 中成功搭建了Hive
Spark2.0機器學習系列之7: MLPC(多層神經網絡)
element nbsp hid 隨機梯度下降 support file dict 分類器 希望 Spark2.0 MLPC(多層神經網絡分類器)算法概述 MultilayerPerceptronClassifier(MLPC)這是一個基於前饋神經網絡的分類器,它是一種在
多線程系列之五:Balking 模式
實現 vat 正常 bject ret .get 完全 .data 工具 一,什麽是Balking模式 如果現在不合適執行這個操作,或者沒必要執行這個操作,就停止處理,直接返回。在Balking模式中,如果守護條件不成立,就立即中斷處理。 二,例子: 定期將當前數據內容寫入
[Reinforcement Learning] 強化學習介紹
nes function ssi 屬於 發展 當前 nts view 方式 隨著AlphaGo和AlphaZero的出現,強化學習相關算法在這幾年引起了學術界和工業界的重視。最近也翻了很多強化學習的資料,有時間了還是得自己動腦筋整理一下。 強化學習定義 先借用維基百科上對強
Memcached學習筆記之五:同一臺Windows機器中啟動多個Memcached服務
如果手頭上只有一臺機器,又想做多節點測試咋辦? 這就需要在一臺機器上啟動多個Memcached服務了。 假設Memcached在如下目錄:C:\memcached\memcached.exe 在CMD中執行如下命令即可再安裝一個Memcached服務(記得換個埠號啊!): sc cr
Kubernetes系列之五:使用yaml檔案建立service向外暴露服務
Service和Pod的理論介紹,方便繼續下去 Pod是有生命週期的,使用凡人皆有一死來描述pod很貼切,當一個工作節點(node)銷燬時,節點上執行的pods也會被銷燬, ReplicationController會動態地在其他節點上建立Pod來保持應用程式的執行,每一個Pod都有一個
Spring Boot 系列之五:Spring Boot 通過devtools進行熱部署
前面已經分享過四篇學習文章: 1、Spring Boot 系統之一:Spring Boot 入門 2、Spring Boot 系統之二:Spring Boot 修改預設埠號和context path 3、Spring Boot 系統之三:Spring Boot 整合JdbcTemplat
碼農裝13寶典系列之五:Ubuntu自定義字型縮放級別
目前主流顯示器都有一個很高的解析度,而使用預設的解析度會使字型顯示過小,單純地調整解析度又容易讓字看起來發虛。 系統提供了一個字型縮放級別調整的功能。Windows初始化時就已經為使用者設定好了,而Ubuntu只有兩個選項:100%、200%,顯然不能滿足需求。 那怎麼辦? 這裡需要
Jenkins學習使用之五:Opening Robot Framework report failed問題
一、Jenkins中Robot Framework Plugin已經安裝好,結果收集正確,只是構建log.html、report.html等日誌檔案無法開啟檢視: 點選Open report.html和Open log.html無法開啟,提示如下錯誤: * Verify th
輕鬆上雲系列之五:阿里雲容災與備份方案
災備能力是各類雲產品能力與穩定性非常重要的衡量指標,猶記得某友商雲因為資料丟失被索賠1000多萬的慘痛教訓。保障企業業務穩定、IT系統功能正常、資料安全十分重要。因此可以同時保障資料備份與系統、應用容災的災備解決方案應勢而生,且發展迅速。 下面我們來看,在阿里雲和阿里雲產品都有哪些災備的解決方案和能力。
Docker系列之五:Volume 卷的使用——以Redis為例
簡介 卷在Docker裡非常重要,在系統之三中提到過,Docker利用聯合載入技術在root檔案系統層上載入更多的只讀檔案系統,這裡簡稱聯合檔案系統(Union File System),卷是在一個或者多個容器內被選定的目錄,可以繞過這個聯合檔案系統為Docker提供持久資