增强学习(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.mzph.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;总觉得差点意思! 思源笔记 今…