强化学习笔记4--TD算法

一、随即近似与随即近似梯度下降

一、Robbins--Monro

Robbins--Monro 算法是随机逼近理论的奠基性方法,专门用于在函数结构未知、只能获得带噪声观测值的情况下,寻找方程 g(w)=0 的根。以下是对你给出要点的梳理、优化和补充。


1. 问题背景

我们希望求解

g(w)=0,但函数 g(⋅)的具体表达式未知,无法直接计算梯度或函数值。我们仅能对任意给定的 w 进行一次随机观测,得到Y=g(w)+ε

其中 ε 是零均值随机噪声(通常假设 Eε∣w=0,方差有界)。目标是通过序贯观测逐步逼近真实根 w*。


2. 算法迭代格式

Robbins--Monro 算法采用最简单的随机梯度下降形式:

其中 Yk​ 是在当前估计 wk​ 处的观测值,ak>0 为第 k 步的步长。

因为当 w<w* 时 g(w)<0(单调递增),Yk 期望为负,减去负值等于增加 w,从而向根移动;反之亦然。


3. 收敛条件(优化整合)

原列出的条件可以归纳为对函数 g 和步长 ak 的要求:

函数形态条件

步长序列条件


4. 步长的典型选择

最常见的取法是

当 θ 选得合适时,可满足上述两条条件。简化为 ak=1/k 在教学中经常出现,但实际中往往需要调整 θ 以获得更快的收敛速度。更精细的选择依赖于 g′(w*) 的信息,渐近最优步长可取 θ=1/g′(w*),实践中可用其估计值。


5. 收敛性结论

在以上条件下,Robbins--Monro 算法能保证 几乎必然收敛 到真实根 w*,即

且在一定附加假设(如噪声有界矩)下,还可得到 渐近正态性

这为区间估计与置信推断奠定了基础。

6、整体步骤

目标:求解 g(w)=0

↓ 无法计算精确 g(w),只能得到带噪观测

确定性迭代: w_{k+1} = w_k - a_k * g(w_k)

↓ 替换为观测值 g(w_k)+ε_k

RM 算法: w_{k+1} = w_k - a_k g(w_k) + ε_k

↓ 两边减 w* 并做中值展开

误差递推式: w_{k+1} - w* = 1 - a_k g'(ξ_k)(w_k - w*) - a_k ε_k

↓ 递推展开 + 取极限

为保证收敛 → ∑a_k = ∞, ∑a_k² < ∞

二、时序差分学习

一、TD基础

1. 什么是时序差分学习(TD)

TD 是一种无模型 的强化学习方法,用于评估给定策略的状态价值函数 Vπ(s)Vπ(s)。它的目标是,在不知道环境模型(状态转移概率)的情况下,仅通过智能体与环境交互获得的经验序列,逐步逼近贝尔曼期望方程的解。

经验序列通常记作:

每一步转移都产生即时奖励 rt+1 和下一状态 st+1。


2. 核心更新公式(TD(0))

在每经历一个单步转移后,TD(0) 只更新当前访问状态 st​ 的价值,而其他状态的价值保持不变:

其中:

  • αt>0 是步长(学习率),可以随时间和状态变化,通常记作 αt(st​)。

  • γ∈0,1 是折扣因子。

公式里出现了两个关键量:

  • TD 目标(TD target)

    它利用下一状态的当前估计 Vt(st+1) 与即时奖励,构造出一个对 Vπ(st) 的"有噪声的估计"。这种在估计中用到其他估计的做法称为自举(bootstrapping)

  • TD 误差(TD error)

    它衡量了当前估计 Vt(st)与 TD 目标之间的差距,正是这个误差驱动了更新。整个修正项为 −αtδt。


3. 更新为何能使价值更接近目标

若将 TD 目标视作一个临时的常量目标 (仅为理解更新的局部行为),则更新可写为:

两边同时减去 vˉ 得到:

当 0<αt<1时,有

说明这一次更新让新估计在数值上更靠近该临时目标

但需要注意,vˉ 本身也会随着 Vt​ 的更新而改变,因此这只是局部缩小的直观解释。真正的收敛驱动力在于:TD 目标在期望意义下,正是贝尔曼方程右端的单样本近似,系统性地减少 TD 误差将使估计值趋近真实价值 Vπ。


4. 步长条件与收敛

为了保证 Vt 最终收敛到 Vπ,步长 αt 通常需要满足 Robbins--Monro 条件

这要求步长趋于 0,但又不能太快,否则会因噪声无法被充分平均而提前"冻结"。

5、公式推导

策略 π 的真实状态价值 vπ(s) 满足贝尔曼期望方程:

其中 Rt+1为立即奖励,γ 为折扣因子,St+1​ 为下一状态。

为了找到 vπ​,我们希望求解方程

将等式右边移到左边,定义残差函数

于是贝尔曼方程等价于 g(vπ(s))=0。可以将价值函数的估计值 vk(s)看作对 vπ(s) 的逼近,并通过减小残差来迭代更新。

实际中期望值无法直接计算,因此采用采样的方式获得带噪残差。对给定的一步样本 (s,r,s′),构造随机量

它可以分解为真实残差与零均值噪声之和:

其中η 是由采样引起的随机误差,满足 Eη=0。

利用随机梯度下降的思想,沿带噪残差的负方向更新估计值,步长为 αk:

在上式中,真实的下一状态价值 vπ(sk′) 仍未知。TD算法的一个关键特点是 bootstrapping(自助法):用当前的估计值 vk(s′) 替代未知的 vπ(s′)。尽管引入了估计误差,但在RM算法收敛条件下,这种替代并不会破坏收敛性。于是得到最终的 TD(0) 迭代公式:

该公式的含义非常直观:用"当前样本的回报 rk+γvk(sk′)"作为更接近真实价值的目标,将当前估值 vk(s) 朝该目标方向调整,调整幅度由学习率 αk​ 控制。通过大量采样和迭代,vk(s)最终将依概率收敛到真实的价值 vπ(s)。该算法在数学上获得一个贝尔曼公式计算state value。

二、sarsa

1、从 TD 到 SARSA

在前面讨论中,TD(0) 用于学习状态价值 vπ(s)。将其扩展为控制算法的关键一步,是把状态价值 替换为动作价值 qπ(s,a),并直接利用经验样本更新动作价值函数。对于 on-policy 控制,智能体始终遵循同一个策略(通常带探索的 ε-greedy),边交互边改进策略。该算法在数学上获得一个贝尔曼公式计算action value。

SARSA 算法的更新规则基于五元组 (st,at,rt+1,st+1,at+1)(这也是名称 SARSA 的由来):

其中,At+1​ 是由当前策略(如 ε-greedy)根据 St+1 实际选出的下一个动作。这个更新在每步交互后立即执行,因此策略评估与策略改进是同步进行的,无需等到收敛后再做 policy improvement

2、Expected SARSA

SARSA 的 TD 目标使用了实际采样的下一个动作 At+1,这会引入额外的采样方差。期望 SARSA(Expected SARSA) 将目标值替换为在下一状态 St+1上、对所有可能动作的 Q 值按当前策略 π 求期望:

这样做的好处是:

  • 降低方差:消除了由采样 At+1 带来的随机性。

  • 更灵活的策略分离:期望 SARSA 天然支持 off-policy 学习------用于计算期望的目标策略 π 可以与产生数据的行为策略 b 不同(例如,目标策略是贪婪策略,行为策略带探索)。当目标策略与行为策略一致时,它仍然是 on-policy 的改进版。

在 ε-greedy 策略下,期望计算简单,仅需对最大值动作与其余动作加权即可,性价比很高。


3、n-step SARSA

将 TD(0) 的"一步自举"思想推广到多步,就得到了 n-step 方法。n-step SARSA 使用实际采样到的连续 n 步奖励,然后再用 Q 值进行自举,定义 n-步回报 Gt:t+n​ 为:

若片段在 n 步内提前终止,则直接退化为蒙特卡洛回报(截断至终止态,没有 bootstrap 项)。更新公式为:

n-step SARSA 与 SARSA、MC 的关系

这一形式清晰地展现了三种算法的统一与平滑过渡:

当 n=1 时,

就是标准的一步 SARSA。

当 n→∞ (且不使用 bootstrapping,即到达终止状态后自举项 Q=0),Gt​ 完全由真实奖励序列累加而成,就是蒙特卡洛回报 ,此时退化为 on-policy MC 控制(如 MC-ES 的评估部分)。

当 n 取中间值时 ,方法介于两者之间:它既不像 MC 那样等待整条轨迹结束才更新(方差极大),也不像 TD(0) 那样完全依赖一步自举(偏差可能较大)。随着 n 增大,算法更多地依赖实际采样奖励 ,自举成分减少,偏差逐渐降低,但方差逐渐升高。这提供了一种可以灵活调节偏差-方差权衡的机制。

因此,n-step SARSA 实际上将 TD 和 MC 统一在了同一个框架下,从一步自举到完整蒙特卡洛形成一个连续谱系。实际应用中,还可以进一步结合资格迹,得到更高效的 SARSA(λλ),其本身就是对所有不同 n 步回报的加权平均,真正做到了偏差与方差的最优平衡。

三、Q-learning

如果将 SARSA 更新中的 TD 目标从"用策略采样得到的 q(s′,a′)"替换为"在下一状态 s′ 上最大的动作价值",就得到了 Q-learning:

这一替换看似简单,却从根本上改变了算法所逼近的方程。

Q-learning 的更新目标 不再依赖实际执行的动作,而是直接瞄准最优动作价值函数 。它所对应的数学方程是贝尔曼最优方程:

通过不断采样与迭代,Q-learning 使 q(s,a) 逼近这个最优方程的不动点,从而直接学习到 q*​,而无需关心当前策略是什么。Q-learing中行为策略如ε-greedy用于不断的探索新的(si,aj),再根据目标策略不断地选取已知最优q(s'|a_max)进行更新,sarsa探索和更新使用同一个策略,本次探索到的样本直接用于更新策略。

四. onpolicy和offpolicy

行为策略 (behavior policy):智能体在环境中实际执行的动作选择规则,用于采集经验数据(状态、动作、奖励、下一状态等)。它直接决定了训练数据的分布。

目标策略 (target policy):智能体真正希望学习、评估或优化的策略。算法的最终目的是使学到的策略(或价值函数对应的策略)尽可能接近或等于目标策略。

同策略 (on-policy):行为策略 = 目标策略。采集数据的策略就是我们要学习/评估/改进的那个策略本身。

离策略 (off-policy):行为策略 ≠ 目标策略。可以从一个策略生成的数据中学习另一个策略,通常用于利用旧数据、平衡探索与利用、或直接从探索策略中学习最优策略。

在策略评估任务中,目标策略就是被评估的策略;在控制任务中,目标策略通常是我们想得到的最优策略或当前正在优化的策略。


2. 三种算法的策略属性分析

基础 TD(0) 预测(估计 vπ​)
  • 行为策略:π(给定的待评估策略)

  • 目标策略:π(同一个策略)

  • 算法类型on-policy

  • 分析:基础 TD(0) 仅做策略评估,它用策略 π 产生的轨迹来更新 v(s),逼近 vπ(s)。行为策略和目标策略是同一个策略,因此是同策略。如果不结合策略改进,它本身不涉及任何别的策略。

SARSA(控制)
  • 行为策略:π_behave​(例如 ε-greedy 策略)

  • 目标策略:π_behave(同一个 ε-greedy 策略)

  • 算法类型on-policy

  • 分析 :SARSA 的目标是评估并改进当前正在执行的策略 。更新公式 中的 at+1正是由当前策略实际选出的动作。它在同一个策略下边采样边优化,因此是同策略控制方法。最终收敛到该探索策略下的最优动作价值(当探索率衰减时则趋近全局最优)。

Q-learning(控制)
  • 行为策略:μ(例如 ε-greedy、随机策略等探索策略)

  • 目标策略:π*(确定性贪婪策略,π*(s)=arg⁡max⁡_a q(s,a))

  • 算法类型off-policy

  • 分析:Q-learning 的更新目标直接假设下一状态会采取最优动作,而不关心行为策略实际选了什么 a′。因此它可以一边用 ε-greedy 等策略探索环境、收集数据,一边直接从这些数据中学习最优策略。行为策略与目标策略不同,是典型的离策略方法。这使得 Q-learning 非常适合需要大量探索或离线学习的场景。


总结表

算法 行为策略 目标策略 同/离策略 说明
基础 TD(0) 预测 待评估策略 π π on-policy 评估给定策略的状态价值
SARSA 当前执行的策略 π(如 ε-greedy) 同一策略 π on-policy 边执行边优化该策略本身
Q-learning 任意探索策略 μμ(如 ε-greedy) 最优确定性策略 π* off-policy 从探索经验中直接学习最优动作价值

三、将所有算法结合起来

MC、TD(0)、SARSA、Q-Learing都可以整理成相同的公式:

MC算法下,αt=1,公式化简为:qt+1 = q_target

其中蓝色部分就是TD target

各算法对应的TD target如下:

这些算法都是为了求解出贝尔曼公式/最优贝尔曼公式:

相关推荐
AOwhisky3 小时前
Linux(CentOS)系统管理入门笔记(第十五期)——文件系统与存储管理(上篇):设备识别、挂载与文件查找
linux·运维·笔记·centos·文件系统
茯苓gao3 小时前
嵌入式开发笔记:QSerialPort 完整使用指南——从基础 API 到工程实战
笔记·嵌入式硬件·qt·学习
疯狂打码的少年6 小时前
【面向对象】面向对象概述:从“按步骤做”到“找谁来做”
笔记
今夜有雨.6 小时前
C++JSON 解析器
c++·笔记·后端·学习·json
xian_wwq7 小时前
【学习笔记】框架层坍缩——LangChain 们正在被重新定义-14/15
笔记·学习·langchain
大白菜和MySQL7 小时前
elk部署和kibana图形化展示
java·笔记·elasticsearch
pluviophile_s7 小时前
数据结构:第6讲:树与二叉树
数据结构·笔记
爱莉希雅&&&8 小时前
Rocky Linux 10.1 + K8s 1.36.3 离线集群部署笔记(Kubernetes)
linux·笔记·docker·kubernetes·calico
星恒随风8 小时前
C++ 多态底层原理:静态绑定、动态绑定、虚函数表与工程实践
开发语言·c++·笔记·学习