郭震 AI公众号:郭震AI

21 深度强化学习之经验回放

发布日期:

最近更新:

分类: 强化学习

预计阅读: 4 分钟

阅读次数: 0

预计阅读4 分钟
结构重点7 个
图文要点6 张
正文规模1.6k 字

整理说明

这篇内容怎么整理

郭震 · 2026-06-04

独立整理围绕 7 个结构重点拆成环境、步骤、验证点和常见误区,尽量让读者能照着复现。
图文对照保留 6 张和配置、流程、判断结果有关的图片,方便快速定位正文重点。
持续校对工具、模型和命令变化较快,后续优先修正入口、参数和风险提醒。

阅读路线

先按这条路线读

先抓住主线,再回到代码、配置和图文细节,读起来会更稳。

图文要点

先看本文图文节点

按图先建立主线,再跳回正文核对步骤、配置和判断标准。

深度强化学习之经验回放结构图查看大图
深度强化学习之经验回放结构图

强化学习的核心是智能体在环境中试错,学习时要同时看状态、动作、奖励和策略更新。阅读时可以按「什么是经验回放? -> 经验回放的基本形式 -> 经验回放的实现 -> 使用经验回放」建立结构,再回到正文里的代码、案例或指标做验证。

深度强化学习之经验回放核对图查看大图
深度强化学习之经验回放核对图

读完后,用一个真实小任务复查:输入是什么,处理环节在哪里,输出是否可验收;失败时先查「什么是经验回放?」,再查「经验回放的基本形式」。

在上一篇教程中,我们讨论了深度强化学习中的DQN算法,其核心思想是利用深度神经网络来近似值函数,并通过Q{ Q }学习来优化策略。在本篇中,我们将重点讨论“经验回放”这一重要技术,它在深度强化学习算法中扮演着至关重要的角色,特别是在DQN及其后续算法中。

什么是经验回放?

经验回放是指在强化学习中,智能体在与环境交互时,记录下其过去的经历(状态、动作、奖励、下一个状态),并在后续学习时随机抽取这些经历进行训练。其主要目的是为了提升数据利用效率,减小样本之间的相关性,以及优化神经网络的稳定性。

经验回放判断卡查看大图
经验回放判断卡

学习经验回放时,先看缓存结构、样本存储、随机采样、目标网络、相关性降低和训练稳定性。

经验回放的基本形式

在经验回放中,智能体通常会维护一个固定大小的经验池,其中每个记录包括以下信息:

  • 当前状态 sts_t
  • 采取的动作 ata_t
  • 从环境中获得的奖励 rtr_t
  • 下一个状态 st+1s_{t+1}

这些经历通常被存储为一个元组 (st,at,rt,st+1)(s_t, a_t, r_t, s_{t+1})。智能体在每个时间步与环境交互后,将这一元组添加到经验池中。当需要更新网络时,智能体会随机抽取一批(batch)经验进行学习。这种随机采样能够打破数据间的相关性,防止学习过程中过拟合。

经验回放的实现

经验回放的实现可以通过使用一个简单的队列环形缓冲区来完成。下面是一个使用Python的代码示例,展示了如何构建一个经验回放类:

强化学习阅读地图卡查看大图
强化学习阅读地图卡

学《深度强化学习之经验回放》时,可以先找一个自己能复现的小场景,再看相关概念和练习步骤,读完后用自己的例子复述一遍。

import random
import numpy as np

class ExperienceReplay:
    def __init__(self, max_size):
        self.memory = []
        self.max_size = max_size

    def add_experience(self, experience):
        if len(self.memory) >= self.max_size:
            self.memory.pop(0)  # Remove the oldest experience
        self.memory.append(experience)

    def sample_experience(self, batch_size):
        return random.sample(self.memory, min(batch_size, len(self.memory)))

    def __len__(self):
        return len(self.memory)

使用经验回放

在训练DQN时,每当智能体与环境交互后,它会将新体验添加到经验池中。在每次学习时,它会从经验池中抽取一批随机样本进行训练。以下是如何将经验回放集成到DQN训练循环中的示例:

import torch
import torch.optim as optim
import torch.nn.functional as F

# 假设我们有一个DQN类和环境的定义
class DQNAgent:
    def __init__(self, state_size, action_size):
        self.state_size = state_size
        self.action_size = action_size
        self.memory = ExperienceReplay(max_size=2000)
        self.model = self.build_model()
        self.optimizer = optim.Adam(self.model.parameters())
        self.batch_size = 32

    def build_model(self):
        # 这里构建DQN模型,省略具体实现
        pass

    def train(self):
        if len(self.memory) < self.batch_size:
            return  # 不够经验进行训练

        experiences = self.memory.sample_experience(self.batch_size)
        states, actions, rewards, next_states = zip(*experiences)

        # 转换为Tensor
        states = torch.FloatTensor(np.array(states))
        actions = torch.LongTensor(actions)
        rewards = torch.FloatTensor(rewards)
        next_states = torch.FloatTensor(np.array(next_states))

        # 计算目标Q值
        target = rewards + 0.99 * torch.max(self.model(next_states), dim=1)[0]

        # 计算当前Q值
        current_q = self.model(states).gather(1, actions.unsqueeze(1)).squeeze()

        # 计算损失
        loss = F.mse_loss(current_q, target.detach())
        
        # 反向传播
        self.optimizer.zero_grad()
        loss.backward()
        self.optimizer.step()

经验回放的优势

  • 提高数据利用率:通过在训练时多次使用相同的经验,智能体能够更充分地学习。
  • 减少相关性:随机抽样减少了经验之间的相关性,使得训练更加稳定。
  • 更快的收敛:在一定条件下,经验回放可以加速收敛过程。

案例分析

让我们用一个简单的案例来说明经验回放如何在强化学习中生效。假设我们正在训练一个智能体在迷宫中寻找食物,迷宫是我们的环境,而智能体需要通过观察和动作来获得奖励。

  1. 初始化经验池:智能体开始时的经验池是空的。
  2. 与环境交互:在每一步,智能体观察当前状态,选择动作并获得奖励,再把状态、动作、奖励和下一状态加入经验池。
  3. 训练阶段:每一轮,智能体从经验池中随机抽取3232条记忆进行训练,使得模型不断更新。

通过这种方式,尽管智能体在环境中可能遇到重复的状态和动作,它仍然能够学习并优化其策略,而不是每次都依赖于最新的状态下的行为。

深度强化学习之经验回放应用复盘卡查看大图
深度强化学习之经验回放应用复盘卡

复习《深度强化学习之经验回放》时,建议把关键概念、操作步骤和可见结果放在同一页里回看。

深度强化学习之经验回放应用检查卡查看大图
深度强化学习之经验回放应用检查卡

练习《深度强化学习之经验回放》时,建议把输入条件、处理动作和可见结果写在一起,方便下次复查。

结论

经验回放是深度强化学习中一个非常重要的技术,它可以有效提升学习效率和稳定性。在与环境的交互中收集经验并保存,利用这些经验来训练神经网络,是DQN及其变种算法中不可或缺的一部分。在下一篇中,我们将转向策略梯度方法,探讨其基本概念和实现方式。

继续阅读

从这篇继续找到相关教程

AI 教程总索引

常见问题

读前先确认这三点

深度强化学习之经验回放适合谁读?

这是 强化学习入门 系列第 21 / 28 篇,适合正在学习强化学习入门,并且需要把概念落到操作步骤或判断标准里的读者。

读这篇强化学习入门教程要多久?

按中文技术文章阅读速度估算,通读大约 4 分钟;如果要跟着复现,建议把命令、配置和结果检查分开做。

这篇文章里的图文节点怎么用?

正文里有 6 个图文节点,可以先用它们抓住流程、配置和判断点,再回到对应段落细读。

分享文章

转发到常用平台

微信/朋友圈可先复制链接

相关教程

AI 教程总索引

继续阅读

继续找到相关 AI 教程

返回栏目

Reader Messages

读者留言

有问题、补充资料或实测结果,可以直接留下。这里不需要登录。

最多 800 字

为了防刷,每条留言会做长度、链接数量和提交频率限制。

0/800

留言列表

0
正在加载留言...