強化學習中的蒙特卡洛算法和時序差分算法

在強化學習(Reinforcement Learning, RL)中,價值函數的估計是核心任務之一。蒙特卡洛(Monte Carlo, MC)方法和時序差分(Temporal Difference, TD)方法是兩種常用的策略,用于估計狀態值函數(Value Function)。本文將詳細介紹這兩種算法的原理、應用場景以及它們之間的對比,并通過代碼示例展示它們的實際應用。

蒙特卡洛算法

原理

蒙特卡洛方法通過多次采樣完整的序列來估計價值函數。每次從初始狀態開始,直到達到終止狀態,并根據每個狀態序列的回報(Reward)來更新狀態值。

給定一個策略 \pi,蒙特卡洛方法估計狀態值函數 V(s)?為:

V(s) = \mathbb{E}_\pi[G_t | S_t = s]

其中 G_t?是從時間步 t?開始的總回報。總回報可以表示為:

G_t = R_{t+1} + \gamma R_{t+2} + \gamma^2 R_{t+3} + \cdots

其中 \gamma?是折扣因子,R_{t+1}, R_{t+2}, \ldots?是未來的回報。

實戰示例

以下是一個使用蒙特卡洛方法進行價值估計的簡單示例:

import numpy as np# 環境參數
num_states = 5
num_episodes = 1000
gamma = 0.9# 隨機策略
def random_policy(state):return np.random.choice([0, 1])# 環境
def env_step(state, action):if state == num_states - 1:return state, 0next_state = state + 1 if action == 1 else statereward = 1 if next_state == num_states - 1 else 0return next_state, reward# 蒙特卡洛價值估計
value_estimates = np.zeros(num_states)
returns = {state: [] for state in range(num_states)}for _ in range(num_episodes):state = 0episode = []while state != num_states - 1:action = random_policy(state)next_state, reward = env_step(state, action)episode.append((state, action, reward))state = next_stateG = 0for state, _, reward in reversed(episode):G = reward + gamma * Greturns[state].append(G)value_estimates[state] = np.mean(returns[state])print("狀態值估計:", value_estimates)

時序差分算法

原理

時序差分方法結合了蒙特卡洛方法和動態規劃的優點,可以在沒有模型的情況下進行在線學習。TD(0) 是最簡單的時序差分方法,它更新狀態值函數 $V(s)$ 的公式為:

V(s) \leftarrow V(s) + \alpha [R_{t+1} + \gamma V(S_{t+1}) - V(s)]

其中 \alpha?是學習率,R_{t+1}?是即時獎勵,S_{t+1}?是下一狀態。

實戰示例

以下是一個使用時序差分方法進行價值估計的簡單示例:

import numpy as np# 環境參數
num_states = 5
num_episodes = 1000
gamma = 0.9
alpha = 0.1# 隨機策略
def random_policy(state):return np.random.choice([0, 1])# 環境
def env_step(state, action):if state == num_states - 1:return state, 0next_state = state + 1 if action == 1 else statereward = 1 if next_state == num_states - 1 else 0return next_state, reward# 時序差分價值估計
value_estimates = np.zeros(num_states)for _ in range(num_episodes):state = 0while state != num_states - 1:action = random_policy(state)next_state, reward = env_step(state, action)value_estimates[state] += alpha * (reward + gamma * value_estimates[next_state] - value_estimates[state])state = next_stateprint("狀態值估計:", value_estimates)

對比

  1. 更新方式

    • 蒙特卡洛方法:僅在一個完整的序列結束后進行更新,需要等待一個回合結束才能得到狀態值的估計。
    • 時序差分方法:可以在每一步進行更新,不需要等待整個回合結束,更適合在線學習。
  2. 方差與偏差

    • 蒙特卡洛方法:通常有較高的方差,但無偏估計。
    • 時序差分方法:通常有較低的方差,但可能有偏差。
  3. 計算效率

    • 蒙特卡洛方法:計算量較大,適合離線處理和最終狀態明確的任務。
    • 時序差分方法:計算量較小,適合在線處理和實時更新。
  4. 適用場景

    • 蒙特卡洛方法:適用于回報能夠在有限時間內觀察到的環境。
    • 時序差分方法:適用于回報在未來不確定時間內才能完全觀察到的環境。

總結

蒙特卡洛方法和時序差分方法各有優缺點,在不同的應用場景下可以互為補充。蒙特卡洛方法通過完全序列的回報估計狀態值,適用于離線處理;時序差分方法通過每一步的即時回報和估計值更新狀態值,適合在線學習和實時更新。在實際應用中,可以根據具體需求選擇合適的方法,甚至可以結合使用,以達到最優的價值估計效果。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/44420.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/44420.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/44420.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

軟件架構之架構風格

軟件架構之架構風格 9.3 軟件架構風格9.3.1 軟件架構風格分類9.3.2 數據流風格9.3.3 調用/返回風格9.3.4 獨立構件風格9.3.5 虛擬機風格9.3.6 倉庫風格 9.4 層次系統架構風格9.4.1 二層及三層 C/S 架構風格9.4.2 B/S 架構風格9.4.3 MVC 架構風格9.4.4 MVP 架構風格 9.5 面向服務…

機器學習筑基篇,?Ubuntu 24.04 編譯安裝 Python 及多版本切換

[ 知識是人生的燈塔,只有不斷學習,才能照亮前行的道路 ] Ubuntu 24.04 編譯安裝最新Python及多版本切換 描述:說到機器學習,人工智能,深度學習不免會提到Python這一門編程語言(人生苦短,及時Pyt…

windows防火墻端口設置

PS:本文實例為Windows Server 2019,其他Windows版本大同小異。 1、首先打開windows防火墻,點擊“高級設置” 2、 高級設置界面 3、假設需要開放一個端口為3306應該怎么做 光標對準“入站規則”右鍵新建規則,選擇“端口” 協議這…

C++類和對象(一)

目錄 面向過程和面向對象 面向過程編程(Procedural Programming) 面向對象編程(Object-Oriented Programming) 一、類的定義 類定義格式 類域 二、類的訪問限定符及封裝 訪問限定符 封裝 三、實例化 實例化概念 對象大小…

軟件運行次數

題目: 實現一個驗證程序運行次數的小程序,要求如下: 當程序運行超過3次時給出提示:本軟件只能免費使用3次,歡迎您注冊會員后繼續使用~程序運行演示如下: 第一次運行控制臺輸出:歡迎…

常見WAF攔截頁面總結

(1) D盾 (2) 云鎖 (3) UPUPW安全防護 (4) 寶塔網站防火墻 (5) 網防G01 (6) 護衛神 (7) 網站安全狗 (8) 智創防火墻 (9) 360主機衛士或360webscan (10) 西數WTS-WAF (11) Naxsi WAF (12) 騰訊云 (13) 騰訊宙斯盾 (14) 百度云 圖片 (15) 華為云 (16) 網宿云 (17) 創宇盾 圖片 (…

ROS服務通信自定義srv

服務通信自定義srv 流程:創建ROS功能包按照固定格式創建srv文件編譯配置文件編譯生成中間文件 流程: srv 文件內的可用數據類型與 msg 文件一致,且定義 srv 實現流程與自定義 msg 實現流程類似,需查閱msg文件的可以瀏覽ROS話題通信流程自定義數據msg格式…

【服務器】在Linux查看運行的Python程序,并找到特定的Python程序

在Linux查看運行的Python程序并找到特定的Python程序 寫在最前面1. 使用ps命令查看所有Python進程查看詳細信息 2. 使用pgrep命令查找Python進程ID 3. 使用top或htop命令使用top命令使用htop命令 4. 使用lsof命令查找Python進程打開的文件 5. 使用nvidia-smi命令查看GPU使用情況…

JDBC編程的學習——MYsql版本

目錄 前言 什么是JDBC ??? 前置準備 使用JDBC的五個關鍵步驟 1.建立與數據庫的連接 2.創建具體的sql語句和Statement 3.執行SQL語句 4.處理結果集 5.釋放資源 完整流程展示 前言 筆者在先前的博客就提過會寫關于JDBC的內容 [Mysql] 的基礎知識和sql 語句.教你速成…

R包:reticulate R對python的接口包

介紹1 R和python是兩種不同的編程語言,前者是統計學家發明并且服務數學統計計算,后者則是最萬能的膠水語言。隨著大數據時代的到來,兩者在數據分析領域存在越來越多的共同點且可以相互使用,為了破解二者的編程壁壘,CR…

軟考《信息系統運行管理員》-3.1信息系統設施運維的管理體系

3.1信息系統設施運維的管理體系 1 信息系統設施運維的對象 基礎環境 主要包括信息系統運行環境(機房、設備間、配線室、基站、云計算中心 等)中的空調系統、供配電系統、通信應急設備系統、防護設備系統(如消防系統、安全系統) 等,能維持系統安全正常運轉&#xf…

【第26章】MyBatis-Plus之高級特性

文章目錄 前言一、數據審計(對賬)二、數據敏感詞過濾三、數據范圍(數據權限)四、表結構自動維護五、字段數據綁定(字典回寫)六、虛擬屬性綁定七、字段加密解密八、字段脫敏九、多數據源分庫分表&#xff08…

從零開始學習嵌入式----Linux系統命令集合與shell腳本

Shell是一門編程語言,作為學習shell的開始,需要事先搞明白:編程的目的是什么?什么是編程語言?什么是編程? shell本身就是一門解釋型、弱類型、動態語言,與python相對應,Python屬于解…

aardio —— 今日減bug

打字就減bug 鼠標雙擊也減bug 看看有多少bug夠你減的 使用方法: 1、將資源附件解壓縮,里面的文件夾,放到aardio\plugin\plugins 目錄 2、aardio 啟動插件 → 插件設置 → 選中“今日減bug” → 保存。 3、重啟 aardio,等aa…

旗晟智能巡檢機器人:開啟工業運維的智能化新篇章

在當今快速發展的工業領域,安全、效率和成本控制是企業運營的核心。旗晟科技以創新為驅動,推出了一站式的工業級智能巡檢機器人數字化全景運維解決方案,為石油、天然氣、化工、電力等高危行業提供了一個全新的運維模式。 一、面對挑戰&#x…

提升機器視覺與機器學習軟件安全性的實踐策略

在近幾年科技爆發中,機器學習(ML)和機器視覺(MV)的結合正在改變各行各業。機器學習通過數據驅動的算法讓計算機能夠自我學習,而機器視覺賦予計算機識別和理解圖像的能力。這種結合使得計算機可以高效地執行…

上位機開發關鍵技術

《上位機開發關鍵技術》 在現代工業自動化、智能化的發展進程中,上位機作為人機交互的重要接口,發揮著至關重要的作用。上位機能夠實現對下位機設備的監控、數據采集與處理、控制指令下達等功能,為生產過程的優化、設備的高效運行提供了有力支…

淺談化工廠環保管理的痛點、智慧環保的必要性及EHS系統的實現路徑

在全球環保意識日益增強的背景下,化工廠作為工業領域的重要組成部分,其環保管理顯得尤為重要。然而,化工廠在追求經濟效益的同時,也面臨著諸多環保管理的痛點。本文將圍繞化工廠環保管理的痛點、化工廠為何需要智慧環保以及如何借…

設計分享—國外后臺界面設計賞析

國外后臺界面設計將用戶體驗放在首位,通過直觀易懂的布局和高效的交互設計,提升用戶操作效率和滿意度。 設計不僅追求美觀大方,還注重功能的實用性和數據的有效展示,通過圖表和圖形化手段使數據更加直觀易懂。 采用響應式布局&a…

Global Mapper:地理信息的溫柔探索

引言 在這紛繁復雜的世界里,地理信息系統(GIS)如同一把利器,幫助我們剖析、理解和改造這個世界。而在眾多GIS軟件中,Global Mapper無疑是其中的佼佼者。作為一款功能全面且易于使用的GIS應用程序,Global M…