尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
强化学习目标函数 J(θ) 梯度推导:从期望到蒙特卡洛采样的 3 步数学拆解
强化学习目标函数 J(θ) 梯度推导从期望到蒙特卡洛采样的 3 步数学拆解强化学习中的策略优化问题本质上是在寻找一个能够最大化长期回报的策略。当我们用参数θ表示策略π_θ时目标函数J(θ)就是期望回报的数学表达。然而这个期望涉及对所有可能轨迹的积分直接计算几乎不可能。本文将深入剖析如何将这个理论期望转化为可计算的梯度估计这是理解现代强化学习算法的关键一步。1. 目标函数的期望形式与梯度难题在强化学习中我们定义目标函数为$$ J(\theta) \mathbb{E}{\tau \sim p\theta(\tau)}[G(\tau)] $$其中τ表示从初始状态到终止状态的完整轨迹G(τ)是轨迹的折扣回报总和。策略梯度方法的核心思想是直接对这个目标函数进行梯度上升$$ \theta \leftarrow \theta \alpha \nabla_\theta J(\theta) $$关键难点在于p_θ(τ)依赖于策略参数θ而期望又对所有可能轨迹τ求积分。这意味着我们不能简单地交换梯度和积分的顺序。为了突破这个困境我们需要对目标函数梯度进行数学变形。提示策略梯度定理的妙处在于它通过巧妙的数学变换将梯度表达式中的轨迹概率梯度转换为了对数概率梯度这使得采样估计成为可能。2. 从期望到采样的三步推导2.1 第一步展开期望表达式首先我们明确写出期望的积分形式$$ \nabla_\theta J(\theta) \nabla_\theta \int p_\theta(\tau) G(\tau) d\tau $$根据微积分中的莱布尼茨规则梯度可以进入积分内部但需要注意p_θ(τ)也依赖于θ$$ \int \nabla_\theta [p_\theta(\tau) G(\tau)] d\tau $$由于G(τ)不依赖于θ可以将其提出$$ \int G(\tau) \nabla_\theta p_\theta(\tau) d\tau $$2.2 第二步引入对数导数技巧这里我们需要一个关键的数学技巧——对数导数$$ \nabla_\theta p_\theta(\tau) p_\theta(\tau) \nabla_\theta \log p_\theta(\tau) $$将其代入前式$$ \int p_\theta(\tau) G(\tau) \nabla_\theta \log p_\theta(\tau) d\tau $$这实际上又回到了一个期望的形式$$ \mathbb{E}{\tau \sim p\theta(\tau)} [G(\tau) \nabla_\theta \log p_\theta(\tau)] $$2.3 第三步分解轨迹概率现在我们需要计算∇_θ log p_θ(τ)。根据马尔可夫性质轨迹概率可以分解为$$ p_\theta(\tau) p(s_0) \prod_{t0}^{T-1} \pi_\theta(a_t|s_t) p(s_{t1}|s_t,a_t) $$取对数后变为求和$$ \log p_\theta(\tau) \log p(s_0) \sum_{t0}^{T-1} [\log \pi_\theta(a_t|s_t) \log p(s_{t1}|s_t,a_t)] $$求梯度时只有策略项π_θ(a_t|s_t)依赖于θ其他项消失$$ \nabla_\theta \log p_\theta(\tau) \sum_{t0}^{T-1} \nabla_\theta \log \pi_\theta(a_t|s_t) $$3. 蒙特卡洛梯度估计的实现3.1 基本估计器将上述结果代入我们得到策略梯度的最终表达式$$ \nabla_\theta J(\theta) \mathbb{E}{\tau \sim p\theta(\tau)} \left[ \left( \sum_{t0}^{T-1} \nabla_\theta \log \pi_\theta(a_t|s_t) \right) \left( \sum_{t0}^{T-1} \gamma^t r_{t1} \right) \right] $$这个期望可以通过采样来估计——我们只需要用当前策略π_θ与环境交互收集N条轨迹然后计算$$ \nabla_\theta J(\theta) \approx \frac{1}{N} \sum_{i1}^N \left[ \left( \sum_{t0}^{T-1} \nabla_\theta \log \pi_\theta(a_t^{(i)}|s_t^{(i)}) \right) \left( \sum_{t0}^{T-1} \gamma^t r_{t1}^{(i)} \right) \right] $$3.2 减少方差的技巧原始估计器的方差往往很大我们可以采用以下改进基准线减法引入与状态相关的基准线b(s_t)通常选择值函数V(s_t)$$ \nabla_\theta J(\theta) \approx \frac{1}{N} \sum_{i1}^N \sum_{t0}^{T-1} \nabla_\theta \log \pi_\theta(a_t^{(i)}|s_t^{(i)}) (G_t^{(i)} - b(s_t^{(i)})) $$折扣回报使用从时刻t开始的折扣回报G_t代替完整回报时间相关权重只考虑动作a_t之后获得的回报改进后的估计器$$ \nabla_\theta J(\theta) \approx \frac{1}{N} \sum_{i1}^N \sum_{t0}^{T-1} \nabla_\theta \log \pi_\theta(a_t^{(i)}|s_t^{(i)}) \left( \sum_{tt}^{T-1} \gamma^{t-t} r_{t1}^{(i)} - b(s_t^{(i)}) \right) $$4. Python实现示例import torch import torch.nn as nn import torch.optim as optim import numpy as np class PolicyNetwork(nn.Module): def __init__(self, state_dim, action_dim, hidden_dim64): super().__init__() self.fc1 nn.Linear(state_dim, hidden_dim) self.fc2 nn.Linear(hidden_dim, action_dim) def forward(self, x): x torch.relu(self.fc1(x)) return torch.softmax(self.fc2(x), dim-1) def get_action(self, state): probs self.forward(torch.FloatTensor(state)) dist torch.distributions.Categorical(probs) action dist.sample() log_prob dist.log_prob(action) return action.item(), log_prob def reinforce(env, policy, episodes1000, gamma0.99, lr0.01): optimizer optim.Adam(policy.parameters(), lrlr) for episode in range(episodes): state env.reset() log_probs [] rewards [] # 收集轨迹 done False while not done: action, log_prob policy.get_action(state) next_state, reward, done, _ env.step(action) log_probs.append(log_prob) rewards.append(reward) state next_state # 计算折扣回报 returns [] G 0 for r in reversed(rewards): G r gamma * G returns.insert(0, G) # 归一化回报 returns torch.tensor(returns) returns (returns - returns.mean()) / (returns.std() 1e-9) # 计算策略梯度 policy_loss [] for log_prob, G in zip(log_probs, returns): policy_loss.append(-log_prob * G) # 参数更新 optimizer.zero_grad() loss torch.stack(policy_loss).sum() loss.backward() optimizer.step()5. 实际应用中的考量在实际实现策略梯度方法时有几个关键因素需要考虑批量大小每次更新使用多少条轨迹小批量更新频繁但高方差大批量更稳定的更新但计算成本高学习率调度随着训练调整学习率初始阶段可以使用较大学习率后期需要减小学习率以稳定训练优势估计使用GAE(Generalized Advantage Estimation)等技术平衡偏差和方差公式$A_t^{GAE} \sum_{l0}^{\infty} (\gamma\lambda)^l \delta_{tl}$并行采样使用多个环境同时采样加速数据收集增加样本多样性方法偏差方差样本效率REINFORCE无偏高低带基准线无偏中中优势函数无偏低高GAE有偏可调高策略梯度方法虽然理论优美但在实际应用中常常面临梯度估计方差大的问题。这促使了后续Actor-Critic架构的发展通过引入值函数来降低方差。理解从期望到蒙特卡洛采样的推导过程是掌握这些高级算法的基础。
RELATED

相关推荐

WebStorm 2018官方安装包获取与离线部署全指南

WebStorm 2018官方安装包获取与离线部署全指南

1. 项目概述:为什么2018版WebStorm至今仍有真实需求? WebStorm 2018不是过时的古董,而是特定开发场景下依然稳如磐石的生产工具。我接手过三个真实项目:一个运行在CentOS 6.5上的老旧ERP前端维护任务,JDK版本被锁死在1…

📅 2026/10/9 4:07:16
WebStorm 2018 实操指南:JVM底层适配与遗留项目精准开发

WebStorm 2018 实操指南:JVM底层适配与遗留项目精准开发

1. 这不是“一键安装”,而是真正能跑起来的 WebStorm 2018 实操指南 WebStorm 2018 是 JetBrains 在 2018 年 3 月正式发布的稳定版本(最终版号为 2018.1.6,构建号 181.5281.33),它处在前端开发工具演进的关键节点上&…

📅 2026/11/6 1:11:44
STM32L152ZD与TLA2518高精度ADC信号采集方案

STM32L152ZD与TLA2518高精度ADC信号采集方案

1. 项目背景与核心需求在工业自动化、医疗设备和消费电子等领域,模拟信号到数字信号的可靠转换一直是嵌入式系统设计的关键环节。TLA2518作为一款高精度模数转换器(ADC),配合STM32L152ZD这款低功耗MCU,能够为各类传感器信号采集提供稳定可靠的…

📅 2026/10/8 13:32:28
MORE NEWS

更多资讯

📰

石家庄市电工证咋查千万别踩坑,怕考不过白交培训费的看过来

石家庄市电工证咋查千万别踩坑,怕考不过白交培训费的看过来 怕考不过白交培训费?石家庄市电工证咋查这事儿,你真得搞清楚了。别看现在电工证报考的人多,可真正了解考试流程、合格标准、通过率的人还真不多。尤其是一些刚转岗或者想靠电工证谋生的从业者,…

📰

安义县低压电工证丢了怎么补办 电子证书能当回事吗

安义县低压电工证丢了怎么补办 电子证书能当回事吗 怕考不过白交培训费,这事儿真不少见,尤其是第一次报考安义县低压电工证的朋友。现在市面上培训机构五花八门,很多人报完名才发现自己连考试内容都摸不着边,最后只能眼睁睁看着钱打了水漂。更头疼的是,…

📰

郑州金水区水利工程从业者必看:报名电工证投诉电话+良心建议全解析

郑州金水区水利工程从业者必看:报名电工证投诉电话+良心建议全解析 怕考不过白交培训费?别慌!这波良心建议,专为郑州金水区水利工程从业者量身定制,帮你避坑、避雷、避麻烦! 1. 报名电工证投诉电话怎么找?…

📰

低压电工证能干啥活?别让学历拦住你考高压电工证恭城的路

低压电工证能干啥活?别让学历拦住你考高压电工证恭城的路 你是不是也觉得学历不高就考不了高压电工证恭城?别急,这年头证书的门槛其实没你想象的那么高, 通过率揭秘 ,真正卡住你的是不了解政策和流程。…

📰

武汉考强电工证在哪考能转异地

武汉考强电工证在哪考能转异地 之前考的证在外省能不能转过来?如果你在武汉打拼,手里有一张外地考的电工证,可能正为能不能在当地继续使用而发愁。其实,很多在外地考的证,只要符合规定,是可以转到武汉使用的。但关键是要知道【武汉考强电工证在哪考】,…

📰

甘肃省复审电工证多少钱?新手报名怕被中介坑?看这篇就够了

甘肃省复审电工证多少钱?新手报名怕被中介坑?看这篇就够了 你是不是也在为甘肃省复审电工证怎么考、多少钱、在哪报名而发愁?别急,这篇就是专门为你准备的,避开中介套路、掌握报考流程,一次性讲透。 甘肃省复审电工证多少钱?别被高价忽悠了…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬