強化學習_Paper_2017_Curiosity-driven Exploration by Self-supervised Prediction

paper Link: ICM: Curiosity-driven Exploration by Self-supervised Prediction
GITHUB Link: 官方: noreward-rl

1- 主要貢獻

  1. 對好奇心進行定義與建模
    1. 好奇心定義:next state的prediction error作為該state novelty
      1. 如果智能體真的“懂”一個state,那么給出這個state和所做的action,它應該能很準確的predict出next state是什么。也就是“What I can not predict well, is novel”
  2. 提出了Intrinsic Curiosity Module(ICM)來估計一個狀態的novelty大小,并給予相應的內在獎勵(intrinsic reward)
  3. 研究了3種泛化環境,驗證了好奇心在實際環境中的作用
    1. 稀疏的外在獎勵, 好奇心使得與環境少量的互動,就那么好以實現目標;
    2. 不添加外在獎勵的探索,好奇心促使主體更有效地探索;
    3. 泛化到看不見的場景(例如同一游戲的新級別),在這些場景中,從早期經驗中獲得的知識可以幫助agnet比重新開始更快地探索新的地方。

2- Intrinsic Curiosity Module (ICM) 框架

在這里插入圖片描述

2.1 ICM三大件:

  1. Encoder( θ E \theta_E θE?):
    1. 將current state轉換成feature ? ( s t ) \phi(s_t) ?(st?)
    2. 將next state轉換成feature ? ( s t + 1 ) \phi(s_{t+1}) ?(st+1?)
  2. Forward Model( θ F \theta_F θF?): 給定 ? ( s t ) \phi(s_t) ?(st?) 和 action a t a_t at?, 來估計next state feature ? ^ ( s t + 1 ) \hat{\phi}(s_{t+1}) ?^?(st+1?)
    1. min ? θ F L ( ? ^ ( s t + 1 ) , ? ( s t + 1 ) ) \min_{\theta_F} L(\hat{\phi}(s_{t+1}), \phi(s_{t+1})) minθF??L(?^?(st+1?),?(st+1?))
    2. r t i = η 2 ∣ ∣ ? ^ ( s t + 1 ) ? ? ( s t + 1 ) ∣ ∣ 2 2 r^i_t = \frac{\eta}{2} ||\hat{\phi}(s_{t+1}) - \phi(s_{t+1})||^2_2 rti?=2η?∣∣?^?(st+1?)??(st+1?)22?
  3. Inverse Model( θ I \theta_I θI?): 給定 ? ( s t ) \phi(s_t) ?(st?) ? ( s t + 1 ) \phi(s_{t+1}) ?(st+1?), 來估計action a ^ t \hat{a}_t a^t?
    1. 用 $\min_{\theta_I, \theta_E} L(a_t, \hat{a}_t) $
    2. 讓Encoder輸出的表征限制于智能體、改變的空間里

2.2 三大件的作用:

  1. Encoder顯然就是將state編碼
  2. Forward Model就是基于state-Encoder和action給出next state feature, 用真實next state feature和預估的值的差異作為好奇心內在獎勵
    1. 對于見到少的組合給出的預估會不準,即好奇心reward會高
  3. Inverse Model讓Encoder輸出的表征限制于智能體、改變的空間里
    1. 因為Encoder+Forward Model會引入一個Noisy-TV Problem(雪花屏問題):
      1. 當畫面都是噪音的時候,觀察者無法對下一個state做出預測
      2. 即預估和真實next state feature始終差異較大,內在獎勵就非常大,會導致觀察者很上癮,一直盯著noisy TV看:比如開槍時火花的隨機渲染,智能體可能就會一直停在原地開火,欣賞迸發出的火花
    2. 所以Inverse Model根據兩個相鄰的state來推斷智能體所選的action a ^ t \hat{a}_t a^t?。然后利用inverse prediction error( L ( a t , a ^ t ) L(a_t, \hat{a}_t) L(at?,a^t?) )來訓練Encoder。
      1. 最終 Encoder就不在意兩個不同的噪音的差別,也就不會提供novelty獎勵了

反向傳播迭代圖示
在這里插入圖片描述

  1. Forward Model的Prediction error只用來訓練forward model,而不用于訓練Encoder
    1. ? ^ ( s t + 1 ) = f F ( ? ( s t ) , a t ; θ F ) ; min ? θ F L ( ? ^ ( s t + 1 ) , ? ( s t + 1 ) ) \hat{\phi}(s_{t+1})= f_{F}(\phi(s_t), a_t; \theta_F);\min_{\theta_F} L(\hat{\phi}(s_{t+1}), \phi(s_{t+1})) ?^?(st+1?)=fF?(?(st?),at?;θF?);minθF??L(?^?(st+1?),?(st+1?))
    2. ? ( s t ) , ? ( s t + 1 ) \phi(s_{t}), \phi(s_{t+1}) ?(st?),?(st+1?) detach
  2. Inverse Model的Inverse prediction error既用來訓練Inverse model,也用來Encoder
    1. min ? θ I , θ E L ( a t , a ^ t ) \min_{\theta_I, \theta_E} L(a_t, \hat{a}_t) minθI?,θE??L(at?,a^t?)
    2. a ^ t = f I ( ? ( s t ) , ? ( s t + 1 ) ; θ I ) = f I ( ? ( s t ) , f E ( s t + 1 ; θ E ) ) ; θ I ) \hat{a}_t = f_{I}( \phi(s_t), \phi(s_{t+1}); \theta_I) = f_{I}( \phi(s_t), f_{E}(s_{t+1}; \theta_E)); \theta_I) a^t?=fI?(?(st?),?(st+1?);θI?)=fI?(?(st?),fE?(st+1?;θE?));θI?)
    3. ? ( s t ) \phi(s_{t}) ?(st?) detach

3- python code

ICM code

from  torch import nn 
import torch 
import torch.nn.functional as Fclass cnnICM(nn.Module):def __init__(self, channel_dim,state_dim, action_dim):super(cnnICM, self).__init__()self.state_dim = state_dimself.channel_dim = channel_dimself.action_dim = action_dimself.cnn_encoder_feature = nn.Sequential(nn.Conv2d(channel_dim, 32, kernel_size=8, stride=4),nn.ReLU(),nn.Conv2d(32, 64, kernel_size=4, stride=2),nn.ReLU(),nn.Conv2d(64, 64, kernel_size=3, stride=1),nn.ReLU(),nn.Flatten())cnn_out_dim = self._get_cnn_out_dim()self.cnn_encoder_header = nn.Sequential(nn.Linear(cnn_out_dim, 512),nn.ReLU())# 離散動作self.action_emb = nn.Embedding(self.action_dim, self.action_dim)self.forward_model = nn.Sequential(nn.Linear(512 + action_dim, 256),nn.ReLU(),nn.Linear(256, 512),)self.inverse_model = nn.Sequential(nn.Linear(512 + 512, 256),nn.ReLU(),nn.Linear(256, action_dim),nn.Softmax())@torch.no_graddef _get_cnn_out_dim(self):pic = torch.randn((1, self.channel_dim, self.state_dim, self.state_dim))return self.cnn_encoder_feature(pic).shape[1]  def encode_pred(self, state):return self.cnn_encoder_header(self.cnn_encoder_feature(state))def forward_pred(self, phi_s, action):return self.forward_model(torch.concat([phi_s, self.action_emb(action)], dim=1))def inverse_pred(self, phi_s, phi_s_next):return self.inverse_model(torch.concat([phi_s, phi_s_next], dim=1))def forward(self, state, n_state, action, mask):# 離散動作action = action.type(torch.LongTensor).reshape(-1).to(state.device)# encodephi_s = self.encode_pred(state)phi_s_next = self.encode_pred(n_state)# forward  不用于訓練Encoderhat_phi_s_next = self.forward_pred(phi_s.detach(), action)# intrinisc reward & forward_loss  r_i = 0.5 * nn.MSELoss(reduction='none')(hat_phi_s_next, phi_s_next.detach())r_i = r_i.mean(dim=1) * mask forward_loss = r_i.mean()# inverse 同時用于訓練Encoderhat_a = self.inverse_pred(phi_s.detach(), phi_s_next)# inverse loss inv_loss = (nn.CrossEntropyLoss(reduction='none')(hat_a, action) * mask).mean()return r_i, inv_loss, forward_loss

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

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

相關文章

spring中的@Configuration注解詳解

一、概述與核心作用 Configuration是Spring框架中用于定義配置類的核心注解,旨在替代傳統的XML配置方式,通過Java代碼實現Bean的聲明、依賴管理及環境配置。其核心作用包括: 標識配置類:標記一個類為Spring的配置類,…

7.計算機網絡相關術語

7. 計算機網絡相關術語 ACK (Acknowledgement) 確認 ADSL (Asymmetric Digital Subscriber Line) 非對稱數字用戶線 AP (Access Point) 接入點 AP (Application) 應用程序 API (Application Programming Interface) 應用編程接口 APNIC (Asia Pacific Network Informatio…

Hadoop 集群基礎指令指南

目錄 🧩 一、Hadoop 基礎服務管理指令 ?? 啟動 Hadoop ?? 關閉 Hadoop 🧾 查看進程是否正常運行 📁 二、HDFS 常用文件系統指令 🛠? 三、MapReduce 作業運行指令 📋 四、集群狀態監控指令 💡 …

【MySQL數據庫】事務

目錄 1,事務的詳細介紹 2,事務的屬性 3,事務常見的操作方式 1,事務的詳細介紹 在MySQL數據庫中,事務是指一組SQL語句作為一個指令去執行相應的操作,這些操作要么全部成功提交,對數據庫產生影…

一、OrcaSlicer源碼編譯

一、下載 1、OrcaSlicer 2.3.0版本的源碼 git clone https://github.com/SoftFever/OrcaSlicer.git -b v2.3.0 二、編譯 1、在OrcaSlicer目錄運行cmd窗口,輸入build_release.bat 2、如果出錯了,可以多運行幾次build_release.bat 3、在OrcaSlicer\b…

港口危貨儲存單位主要安全管理人員考試精選題目

港口危貨儲存單位主要安全管理人員考試精選題目 1、危險貨物儲存場所的電氣設備應符合( )要求。 A. 防火 B. 防爆 C. 防塵 D. 防潮 答案:B 解析:港口危貨儲存單位存在易燃易爆等危險貨物,電氣設備若不防爆&…

格雷希爾用于工業氣體充裝站的CZ系列氣罐充裝轉換連接器,其日常維護有哪些

格雷希爾氣瓶充裝連接器,長期用于壓縮氣體的快速充裝和壓縮氣瓶的氣密性檢測,需要進行定期的維護,為每一次的充裝提供更好的連接。下列建議的幾點維護準則適用于格雷希爾所有充注接頭,請非專業人士不要隨意拆卸連接器。 格雷希爾氣…

Java 多線程進階:什么是線程安全?

在多線程編程中,“線程安全”是一個非常重要但又常被誤解的概念。尤其對于剛接觸多線程的人來說,不理解線程安全的本質,容易寫出“偶爾出錯”的代碼——這類 bug 往往隱蔽且難以復現。 本文將用盡可能通俗的語言,從三個角度解釋線…

MSO-Player:基于vlc的Unity直播流播放器,支持主流RTSP、RTMP、HTTP等常見格式

MSO-Player 基于libVLC的Unity視頻播放解決方案 支持2D視頻和360度全景視頻播放的Unity插件 📑 目錄 🎥 MSO-Player 📋 功能概述🚀 快速入門📚 關鍵組件📝 使用案例🔌 依賴項📋 注意…

navicat中導出數據表結構并在word更改為三線表(適用于navicat導不出doc)

SELECTCOLUMN_NAME 列名,COLUMN_TYPE 數據類型,DATA_TYPE 字段類型,IS_NULLABLE 是否為空,COLUMN_DEFAULT 默認值,COLUMN_COMMENT 備注 FROMINFORMATION_SCHEMA.COLUMNS WHEREtable_schema db_animal(數據庫名) AND table_name activity(…

docker學習筆記6-安裝wordpress

一、創建自定義網絡、查看網絡 docker netword create blog docker network ls 二、 啟動mysql容器 啟動命令: docker run -d -p 3306:3306 \ -e MYSQL_ROOT_PASSWORD123456 \ -e MYSQL_DATABASEwordpress \ -v mysql-data:/var/lib/mysql \ -v /app/myconf:/etc…

03_Mybatis-Plus LambadaQueryWrapper 表達式爆空指針異常

&#x1f31f; 03_MyBatis-Plus LambdaQueryWrapper 爆出空指針異常的坑點分析 ? 場景描述 來看一段常見的 MyBatis-Plus 查詢寫法&#xff0c;是否存在問題&#xff1f; Page<VideoInfoVo> videoInfoVosPage videoMapper.selectPage(page, new LambdaQueryWrapper&…

WEB安全--社會工程--SET釣魚網站

1、選擇要釣魚的網站 2、打開kali中的set 3、啟動后依次選擇&#xff1a; 4、輸入釣魚主機的地址&#xff08;kali&#xff09;和要偽裝的網站域名&#xff1a; 5、投放釣魚網頁&#xff08;服務器域名:80&#xff09; 6、獲取賬號密碼

Ethan獨立開發產品日報 | 2025-04-29

1. mrge 代碼審查的光標 mrge 是一個由人工智能驅動的代碼審查平臺&#xff0c;能夠自動審核拉取請求&#xff08;PR&#xff09;&#xff0c;為人工審查員提供超級能力。它是像 cal.com 和 n8n 這樣快速發展的團隊的首選工具。 關鍵詞&#xff1a;mrge, 代碼審查, AI驅動, …

ubuntu22.04 qemu arm64 環境搭建

目錄 創建 安裝 Qemu 啟動 # 進入qemu虛擬機后執行 qemu編譯器安裝 創建 qemu-img create ubuntu22.04_arm64.img 40G 安裝 qemu-system-aarch64 -m 4096 -cpu cortex-a57 -smp 4 -M virt -bios QEMU_EFI.fd -nographic -drive ifnone,fileubuntu-22.04.5-live-server-a…

安全生產知識競賽宣傳口號160句

1. 安全生產是責任&#xff0c;每個人都有責任 2. 安全生產是保障&#xff0c;讓我們遠離危險 3. 安全生產是團結&#xff0c;共同守護每一天 4. 注重安全&#xff0c;守護明天 5. 安全生產無小事&#xff0c;關乎千家萬戶 6. 安全第一&#xff0c;人人有責 7. 安全生產無差別&…

Python 虛擬環境管理:venv 與 conda 的選擇與配置

文章目錄 前言一、虛擬環境的核心價值1.1 依賴沖突的典型場景1.2 隔離機制實現原理 二、venv 與 conda 的架構對比2.1 工具定位差異2.2 性能基準測試&#xff08;以創建環境 安裝 numpy 為例&#xff09; 三、venv 的配置與最佳實踐3.1 基礎工作流3.2 多版本 Python 管理 四、…

【自然語言處理與大模型】如何獲取特定領域的微調數據集?

在特定領域中&#xff0c;數據集通常由提出需求的一方提供。然而&#xff0c;在某些情況下&#xff0c;如果他們未能提供所需的數據&#xff0c;或者你正在獨立開展一個項目&#xff0c;并且需要相應的數據來推進工作&#xff0c;這時你應該怎么辦呢&#xff1f;本文提供一種思…

Map系列之ConcurrentHashMap源碼分析:高并發場景下的性能密碼

引言&#xff1a;當線程安全成為剛需 1.1 并發時代的Map困境 經典案例&#xff1a;電商秒殺系統超賣事故分析&#xff08;附線程堆棧截圖&#xff09;傳統方案缺陷&#xff1a;synchronizedMap的吞吐量陷阱&#xff08;JMH測試數據對比&#xff09;ConcurrentHashMap的定位&a…

URP - 序列圖動畫的實現

效果&#xff1a; 【太妃糖耶】更新了一條視頻&#xff0c;快來圍觀&#xff01; 序列圖動畫的實現 首先先了解下序列圖樣式的紋理圖片 如上圖一可在Shader中使用該圖片制作燃燒的火的動畫&#xff0c;但是如何實現呢&#xff1f;接下來一起來看一下吧 序列圖動畫的實現原理大…