增強學習(Reinforcement Learning)簡介

增強學習(Reinforcement Learning)簡介
增強學習是機器學習的一種范式,其核心目標是讓智能體(Agent)通過與環境的交互,基于試錯機制和延遲獎勵反饋,學習如何選擇最優動作以最大化長期累積回報。其核心要素包括:
? 狀態(State):描述環境的當前信息(如棋盤布局、機器人傳感器數據)。

? 動作(Action):智能體在特定狀態下可執行的操作(如移動、下棋)。

? 獎勵(Reward):環境對動作的即時反饋信號(如得分增加或懲罰)。

? 策略(Policy):從狀態到動作的映射規則(如基于Q值選擇動作)。

? 價值函數(Value Function):預測某狀態或動作的長期回報(如Q-Learning中的Q表)。

與監督學習不同,增強學習無需標注數據,而是通過探索-利用權衡(Exploration vs Exploitation)自主學習。


使用PyTorch實現深度Q網絡(DQN)演示
以下以CartPole-v0(平衡桿環境)為例,展示完整代碼及解釋:

  1. 環境與依賴庫
import gym
import torch
import torch.nn as nn
import torch.optim as optim
import numpy as np
from collections import deque
import random# 初始化環境
env = gym.make('CartPole-v1')
state_dim = env.observation_space.shape[0]
action_dim = env.action_space.n
  1. 定義DQN網絡
class DQN(nn.Module):def __init__(self, state_dim, action_dim):super(DQN, self).__init__()self.fc = nn.Sequential(nn.Linear(state_dim, 128),nn.ReLU(),nn.Linear(128, 64),nn.ReLU(),nn.Linear(64, action_dim))def forward(self, x):return self.fc(x)
  1. 經驗回放緩沖區(Replay Buffer)
class ReplayBuffer:def __init__(self, capacity):self.buffer = deque(maxlen=capacity)def push(self, state, action, reward, next_state, done):self.buffer.append((state, action, reward, next_state, done))def sample(self, batch_size):batch = random.sample(self.buffer, batch_size)states, actions, rewards, next_states, dones = zip(*batch)return (torch.FloatTensor(states),torch.LongTensor(actions),torch.FloatTensor(rewards),torch.FloatTensor(next_states),torch.FloatTensor(dones))
  1. 訓練參數與初始化
# 超參數
batch_size = 64
gamma = 0.99        # 折扣因子
epsilon_start = 1.0
epsilon_decay = 0.995
epsilon_min = 0.01
target_update = 10  # 目標網絡更新頻率# 初始化網絡與優化器
policy_net = DQN(state_dim, action_dim)
target_net = DQN(state_dim, action_dim)
target_net.load_state_dict(policy_net.state_dict())
optimizer = optim.Adam(policy_net.parameters(), lr=0.001)
buffer = ReplayBuffer(10000)
epsilon = epsilon_start
  1. 訓練循環
num_episodes = 500
for episode in range(num_episodes):state = env.reset()total_reward = 0while True:# ε-貪婪策略選擇動作if random.random() < epsilon:action = env.action_space.sample()else:with torch.no_grad():q_values = policy_net(torch.FloatTensor(state))action = q_values.argmax().item()# 執行動作并存儲經驗next_state, reward, done, _ = env.step(action)buffer.push(state, action, reward, next_state, done)state = next_statetotal_reward += reward# 經驗回放與網絡更新if len(buffer.buffer) >= batch_size:states, actions, rewards, next_states, dones = buffer.sample(batch_size)# 計算目標Q值with torch.no_grad():next_q = target_net(next_states).max(1)[0]target_q = rewards + gamma * next_q * (1 - dones)# 計算當前Q值current_q = policy_net(states).gather(1, actions.unsqueeze(1))# 均方誤差損失loss = nn.MSELoss()(current_q, target_q.unsqueeze(1))# 反向傳播optimizer.zero_grad()loss.backward()optimizer.step()if done:break# 更新目標網絡與εif episode % target_update == 0:target_net.load_state_dict(policy_net.state_dict())epsilon = max(epsilon_min, epsilon * epsilon_decay)print(f"Episode {episode}, Reward: {total_reward}, Epsilon: {epsilon:.2f}")

關鍵點解釋

  1. 經驗回放(Replay Buffer):通過存儲歷史經驗并隨機采樣,打破數據相關性,提升訓練穩定性。
  2. 目標網絡(Target Network):固定目標Q值計算網絡,緩解訓練震蕩問題。
  3. ε-貪婪策略:平衡探索(隨機動作)與利用(最優動作),逐步降低探索率。

結果與優化方向
? 預期效果:經過約200輪訓練,智能體可穩定保持平衡超過195步(CartPole-v1的勝利條件)。

? 優化方法:

? 使用Double DQN或Dueling DQN改進Q值估計。

? 調整網絡結構(如增加卷積層處理圖像輸入)。

? 引入優先級經驗回放(Prioritized Experience Replay)。

完整代碼及更多改進可參考PyTorch官方文檔或強化學習框架(如Stable Baselines3)。

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

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

相關文章

PaddlePaddle 和PyTorch選擇與對比互斥

你遇到的錯誤信息如下&#xff1a; RuntimeError: (PreconditionNotMet) Tensors dimension is out of bound.Tensors dimension must be equal or less than the size of its memory.But received Tensors dimension is 8, memorys size is 0.[Hint: Expected numel() * Size…

vison transformer vit 論文閱讀

An Image is Worth 16x16 Words 20年的論文看成10年的哈斯我了 [2010.11929] 一張圖像勝過 16x16 個單詞&#xff1a;用于大規模圖像識別的轉換器 --- [2010.11929] An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale 為什么transformer好訓練&am…

依賴關系-根據依賴關系求候選碼

關系模式R&#xff08;U, F&#xff09;, U{}&#xff0c;F是R的函數依賴集&#xff0c;可以將屬性分為4類&#xff1a; L: 僅出現在依賴集F左側的屬性 R: 僅出現在依賴集F右側的屬性 LR: 在依賴集F左右側都出現的屬性 NLR: 在依賴集F左右側都未出現的屬性 結論1: 若X是L類…

SAP note 3565626 : Baltimore CyberTrust 根證書即將過期

SAP note 3565626 &#xff1a; Baltimore CyberTrust 根證書即將過期 20250512 2025年5月9日 癥狀 您已收到來? SAP Integration Suite/Cloud Integration 服務的通知郵件&#xff0c; 建議 Baltimore CyberTrust 根證書將于 2025 年 5 ? 12 ? 過期&#xff0c;其中 Balt…

算法精講:字母異位詞分組問題剖析

算法精講:字母異位詞分組問題剖析 一、引言 在算法的學習與實踐中,字符串相關的問題一直是重點和難點。今天我們要深入探討的“字母異位詞分組”問題,不僅考驗對字符串操作的理解,還涉及到數據結構的巧妙運用。通過解決這個問題,我們能進一步提升算法思維和代碼實現能力。…

【每日八股】復習 Redis Day7:應知應會的 33 條 Redis 基礎八股文

應知應會的 33 條 Redis 基礎八股文 今天對 Redis 八股文進行收官總結&#xff0c;共收錄了 33 條基礎八股文。 文章目錄 應知應會的 33 條 Redis 基礎八股文Redis 持久化簡述 Redis 持久化的兩種策略&#xff1f;AOF 的三種持久化策略&#xff1f;AOF 磁盤重寫機制&#xf…

k8s之探針

探針介紹&#xff1a; 編排工具運行時&#xff0c;雖說pod掛掉會在控制器的調度下會重啟&#xff0c;出現pod重啟的時候&#xff0c;但是pod狀態是running,無法真實的反應當時pod健康狀態&#xff0c;我們可以通過Kubernetes的探針監控到pod的實時狀態。 Kubernetes三種探針類…

記9(Torch

目錄 1、Troch 1、Troch 函數說明舉例torch.tensor()torch.arange()創建張量創建一個標量&#xff1a;torch.tensor(42)創建一個一維張量&#xff1a;torch.tensor([1, 2, 3])創建一個二維張量&#xff1a;torch.tensor([[1, 2], [3, 4]])生成一維等差張量&#xff1a;語法&am…

flask開啟https服務支持

目錄 一、背景 二、開啟https支持 三、自簽名 1、安裝openssl 2、驗證安裝 3、自簽名 四、編寫代碼 五、訪問https接口 一、背景 最近在做自動化業務&#xff0c;需要兼容現在主流的框架開發的前端頁面&#xff0c;于是到github找到了幾個項目&#xff0c;clone下來項目并…

路由交換實驗

案例一&#xff1a;實施和配置RIPV2 1.給AR1配置接口 查看R1接口配置情況 2.配置三臺路由的RIP協議&#xff0c;版本為version2 &#xff0c;關閉自動匯總&#xff0c;通告所有的直連接口 案例二&#xff1a;配置多區域的OSPF協議 1.配置R1的接口IP地址參數 2.配置r2,r3的接口參…

北斗導航 | RTKLib中重難點技術,公式,代碼

Rtklib 一、抗差自適應卡爾曼濾波1. **核心難點**2. **公式與代碼實現**二、模糊度固定與LAMBDA算法1. **核心難點**2. **LAMBDA算法實現**3. **部分模糊度固定技術**三、偽距單點定位與誤差修正1. **多系統多頻點修正**2. **接收機鐘差與系統間偏差**四、動態模型與周跳處理1.…

RT-Thread 深入系列 Part 2:RT-Thread 內核核心機制深度剖析

摘要: 本文從線程管理、調度器原理、中斷處理與上下文切換、IPC 同步機制、內存管理五大核心模塊出發,深入剖析 RT-Thread 內核實現細節,并輔以源碼解讀、流程圖、時序圖與性能數據。 目錄 線程管理與調度器原理 1.1 線程控制塊(TCB)結構 1.2 就緒隊列與優先級調度 1.3 時…

STM32部分:3、STM32CubeMX 工程創建

飛書文檔https://x509p6c8to.feishu.cn/wiki/LfMpwjktZiMAuMkayt6c0LGZnpx 1、打開STM32CUBEMX&#xff0c;選擇File->New Project 如果首次使用&#xff0c;可能會自動下載一些依賴包&#xff0c;可以等待下載完成。 2、選擇對應芯片 MCU/MPU Selector->輸入“STM32F1…

第十五章,SSL VPN

前言 IPSec 和 SSL 對比 IPSec遠程接入場景---client提前安裝軟件&#xff0c;存在一定的兼容性問題 IPSec協議只能夠對感興趣的流量進行加密保護&#xff0c;意味著接入用戶需要不停的調整策略&#xff0c;來適應IPSec隧道 IPSec協議對用戶訪問權限顆粒度劃分的不夠詳細&…

深度學習系統學習系列【4】之反向傳播(BP)四個基本公式推導

文章目錄 補充知識&#xff1a;? 和 ⊙ 運算符詳解? (nabla) 運算符⊙ (圓圈點) 運算符 反向傳播基本公式計算圖和基本定義BP1&#xff1a;輸出層誤差推導BP1公式的重要性實際例子BP2第 l l l層誤差推導BP3 &#xff1a;損失函數關于偏置(b)偏導的推導BP4&#xff1a; 損失函…

極狐Gitlab 如何創建并使用子群組?

極狐GitLab 是 GitLab 在中國的發行版&#xff0c;關于中文參考文檔和資料有&#xff1a; 極狐GitLab 中文文檔極狐GitLab 中文論壇極狐GitLab 官網 子群組 (BASIC ALL) 您可以將極狐GitLab 群組組織成子群組。您可以使用子群組&#xff1a; 內部和外部組織分開。因為每個子…

HarmonyOS基本的應用的配置

鴻蒙HarmonyOS組建頁面 1、創建ets文件并配置2、修改main_pages.json文件3、修改EntryAbility.ets文件&#xff08;啟動時加載的頁面&#xff09; 1、創建ets文件并配置 Index.ets是創建項目自動構建生成的&#xff0c;我們可以將其刪除掉&#xff0c;并重新在page文件夾下創建…

強化學習三大基本方法-DP、MC、TD

強化學習進階 本文主要講解 動態規劃法&#xff08;Dynamic Programming DP&#xff09;蒙特卡洛法&#xff08;Monte Carlo MC&#xff09;時序差分法&#xff08;Temporal Difference TD&#xff09; 1. 動態規劃法 1.1 動態規劃概念 動態規劃核心思想&#xff1a; 其核心…

《Spring Boot 3.0全新特性詳解與實戰案例》

大家好呀&#xff01;今天讓我們輕松掌握Spring Boot 3.0的所有新特性&#xff01;&#x1f680; &#x1f4cc; 第一章&#xff1a;Spring Boot 3.0簡介 1.1 什么是Spring Boot 3.0&#xff1f; Spring Boot 3.0就像是Java開發者的"超級工具箱"&#x1f9f0;&…

【推薦筆記工具】思源筆記 - 隱私優先的個人知識管理系統,支持 Markdown 排版、塊級引用和雙向鏈接

Typora 使用Typora好多年了&#xff0c;一直非常的喜歡這個簡潔的Markdown編輯工具&#xff0c;低版本的免費且好用。 Typora官網地址&#xff1a; https://typora.io/ https://typoraio.cn/ Typora的文檔樹如下&#xff0c;細看后&#xff0c;總覺得差點意思! 思源筆記 今…