chapter 14 強化學習

2021-09-23 17:25:10 字數 2024 閱讀 1572

以上是乙個強化學習的標準模型,其邏輯為環境(environment)給出狀態(state),智慧型體(agent)按照狀態做出動作(action),環境根據動作給予反饋(reward),並更新狀態。持續這一流程,直到外界干預或達到目標。

我們可以用馬爾可夫決策(markov property)來描述這個模型:

在正式開始前,為了能更好地解決問提,我們先定義以下幾個函式:

有了bellman方程後,我們就可以遞迴地使用q*函式。

q學習演算法的思路就是,建立乙個q-table,用i行j列的值儲存q*(si,aj)的值。我們用0初始化這張表,然後一次次地執行動作,並用bellman方程更新q表:

但這種做法是有問題的:每一步都要計算全域性的最優策略,這對算力的要求太大了。

遇到這種問題,就又到了神經網路出場的時候了:我們可以用乙個神經網路來近似地估計q*函式。而如果我們用深度神經網路來近似,那就是深度q學習。

(上圖最下面的函式少了乙個"(",應該是新增到r的左邊)

為了解決這兩個問題,我們增加了乙個回放記憶表(replay memory table),這個表記錄每次的狀態、行動、回饋以及行動導致的下一狀態,每次訓練時則隨機從該表中抽取一小部分作為訓練資料。

下面是深度q學習的偽**:

注意這裡引入了隨機變數ϵ,這是為了增大探索的空間。從人的成長角度上很容易理解這種思路:有時候嘗試新鮮事物或以前未曾嘗試過的處理方法,可能會開啟一片新天地。但ϵ不能太大,否則演算法就失去了意義。

深度q學習是個很好的演算法,但它有個缺陷,那就是它的q函式太複雜了,這就導致在計算梯度時會花費過多的時間。

為了解決這個問題,我們提出了策略的思想:假設我們現在在設計機械人手臂的執行演算法,那麼在每一刻我們都要計算q值,考慮到機械人手臂的動作的多樣性,這會要求天文數字的算力。為了簡化計算,我們可以給它設計數個動作策略,比如:到達a點,抓住b位置的物體,比出乙個ok手勢…我們不再計算動作的q,轉而計算這些策略的q。我們可以把它理解為,將機械人手臂的連續的動作固化為幾個可理解的離散的策略(這個離散策略由數個連續的動作組成)。不過在我看來,這樣做雖然會大幅節省算力,但也固定了機械人手臂的學習可能性:相當於把它從現實世界帶入到了遊戲世界。雖然是個不錯的思路,但應該是得不償失的。

其數學表達為:

其中j(θ)為策略的期望。接下來就是求它的梯度,這裡使用了乙個技巧:

這裡我們最終將期望的梯度轉化為梯度的期望,而期望是可以估計的,我們這裡使用軌跡作為資料,蒙特卡羅抽樣法來估計:

蒙特卡羅抽樣法簡單來說,就是對隨機取樣進行計算可以得到近似的結果,取樣越多,近似結果是正確結果的可能性就越大。這當然比不上全體取樣進而估計來得準確,但這種演算法可以大大地節省算力,著名的阿爾法狗就是用的這種思想。

Chapter 1 什麼是強化學習?

強化學習的具體場景 決策 人agent與所在環境environment互動,決策人想要在不確定性環境下實現目標,決策人的行為會影響未來的環境狀態,從而影響決策人以後可以採取的行動和機會。正確的選擇需要考慮到行動的延遲後果,因此可能需要具有預見性。但是決策人行動的效果無法完全 因此,必須經常監控其環境...

強化學習 強化學習基礎

為了應對車載網路中通訊環境快速變化的難題,可以使用強化學習進行解決,這裡對強化學習的基礎進行整理。主要的應用場景為車載網路中資源分配問題。本文源自莫煩python 強化學習章節,有需要請查閱原文 20200413補充了一些內容,來自這篇部落格,是李巨集毅的深度強化學習的筆記。強化學習的主要構成有 a...

VC 深入詳解 chapter14 筆記

1 基於tcp的網路應用程式的編寫 伺服器端程式 tcpserver.cpp 定義控制台應用程式的入口點。include stdafx.h include include pragma comment lib,ws2 32.lib void main if lobyte wsadata.wversi...