新闻详情

新闻详情

首页 / 资讯中心 / 详情

用策略梯度与 Actor-Critic 训练 Mountain Car 逃出山谷:AI-For-Beginners 深度强化学习实战

发布时间:2026/9/30 7:48:36来源:尧图网络
用策略梯度与 Actor-Critic 训练 Mountain Car 逃出山谷:AI-For-Beginners 深度强化学习实战
教程人工智能机器学习深度学习【免费下载链接】AI-For-Beginners12 Weeks, 24 Lessons, AI for All!项目地址https://gitcode.com/GitHub_Trending/ai/AI-For-Beginners点击查看免费下载本指南围绕 AI-For-Beginners 课程中训练强化学习RL智能体控制 Mountain Car 逃离山谷的实战实验展开完整解读任务目标、环境接口、起步 Notebook 与两种经典算法策略梯度 Policy Gradients 与 Actor-Critic的迁移方法。读完本文你将掌握如何复用课程中 CartPole 的 RL 代码、把任意 OpenAI Gym 环境以参数形式注入算法并在 MountainCar.ipynb 中完成从随机试探到学会逃出山谷的完整训练闭环。实验任务让困在山谷里的小车抵达旗帜本实验是课程第 22 课深度强化学习的课后作业Assignment关联文档位于 lessons/6-Other/22-DeepRL/lab/README.md。任务一句话概括训练一个 RL 智能体去控制 OpenAI Gym 中的 Mountain Car 环境。之所以选择 Mountain Car是因为它与课程主体示例 CartPole 形成对照CartPole 的目标是维持平衡尽可能久而 Mountain Car 的目标是走出困境抵达目标二者在物理直观上完全不同却可以通过同一套 RL 算法与同一套 Gym 接口来解决——这正是本实验想传递的核心信息。环境速览动作与观测Mountain Car 环境的设定非常简单场景一辆小车被困在 U 形山谷底部发动机动力不足无法直接沿单侧坡道爬出目标利用左右两侧坡道来回蓄积动能最终冲出山谷抵达位于右侧山脊的旗帜位置动作空间三个离散动作——向左加速、向右加速、不施加任何动作保持不动观测空间每个时间步智能体只能读到两个连续量——小车沿 x 轴的位置以及小车的速度。从 MountainCar.ipynb 的搭建方式看本实验要求读者把课程第 22 课 README.md 中讲解的Policy Gradients和Actor-Critic算法适配到这个新环境上。可以推断CartPole 中 4 维观测、2 个离散动作的网络结构在这里应调整为 2 维观测输入、3 个离散动作输出动作数即 Gym 动作空间的基数可从env.action_space读取。起步 Notebook先建立环境与随机基线实验要求从打开 MountainCar.ipynb 开始。这个 Notebook 已经替你搭好了环境与随机试探的骨架代码路径非常短import gym env gym.make(MountainCar-v0)创建环境后先用完全随机的动作跑一遍观察不做任何学习时会发生什么state env.reset() while True: env.render() action env.action_space.sample() state, reward, done, info env.step(action) if done: break这段循环体现了 Gym 统一的交互协议env.reset()开启一次新实验episode返回初始观测stateenv.action_space.sample()从动作空间中随机抽取一个动作env.step(action)执行一步仿真返回(observation, reward, done, info)四元组done为真时本轮实验终止退出循环最后调用env.close()释放仿真资源。随机策略下的小车几乎不可能逃出山谷甚至难以接近目标这正是后续训练的价值所在。Notebook 在骨架之后留下了一个注释为## Lost of code here的空单元格即请在此处补全你的训练代码——而可补全的内容正是课程中针对 CartPole 编写好的两套算法实现。算法预备从课程源码中继承的两套 RL 方案课程第 22 课 README.md 对 RL 的基本范式作了铺垫RL 需要环境/模拟器与奖励函数通过大量实验在利用已学最优策略exploitation与探索新状态exploration之间权衡。在此基础上给出了两种可直接迁移到 Mountain Car 的算法。策略梯度用神经网络直接建模策略 π策略梯度的核心思想用一个神经网络把状态映射为各动作的概率即策略 π(a|s)。它类似分类任务但我们事先并不知道每个状态下的正确动作只能通过累计奖励来事后强化表现好的那一步。课程 CartPole-RL-TF.ipynb以及 CartPole-RL-PyTorch.ipynb给出了完整的可复用实现关键组件如下。1. 策略网络TensorFlow 版128 个隐藏单元 softmax 输出num_inputs 4 num_actions 2 model keras.Sequential([ keras.layers.Dense(128, activationrelu, input_shape(num_inputs,)), keras.layers.Dense(num_actions, activationsoftmax) ]) model.compile(losscategorical_crossentropy, optimizerkeras.optimizers.Adam(learning_rate0.01))PyTorch 版采用等价结构Linear(4,128) → ReLU → Linear(128,2) → Softmax。迁移到 Mountain Car 时只需把num_inputs改为观测维度位置 速度即 2num_actions改为env.action_space.n即 3。2. 单轮实验采集run_episode——返回本轮的 states、actions、probs、rewards 四组轨迹数据def run_episode(max_steps_per_episode10000, renderFalse): states, actions, probs, rewards [], [], [], [] state env.reset() for _ in range(max_steps_per_episode): if render: env.render() action_probs model(np.expand_dims(state, 0))[0] action np.random.choice(num_actions, pnp.squeeze(action_probs)) nstate, reward, done, info env.step(action) if done: break states.append(state) actions.append(action) probs.append(action_probs) rewards.append(reward) state nstate return np.vstack(states), np.vstack(actions), np.vstack(probs), np.vstack(rewards)注意这里动作并不是取概率最大的那个而是按概率分布做随机采样np.random.choice(..., p...)这保留了探索能力。3. 折扣累计奖励discounted_rewards——策略梯度的关键技巧从轨迹末尾向前累加并用 γ0.99 削弱早期奖励的作用最后做归一化分母加eps 0.0001防除零eps 0.0001 def discounted_rewards(rewards, gamma0.99, normalizeTrue): ret [] s 0 for r in rewards[::-1]: s r gamma * s ret.insert(0, s) if normalize: ret (ret - np.mean(ret)) / (np.std(ret) eps) return ret4. 主训练循环——课程在 CartPole 上以 300 轮epoch迭代每轮跑一局 → 计算梯度 → 用折扣奖励加权 → 更新网络其中alpha 1e-4控制梯度与奖励对目标动作的修正幅度即 RL 意义上的学习率alpha 1e-4 for epoch in range(300): states, actions, probs, rewards run_episode() one_hot_actions np.eye(num_actions)[actions.T][0] gradients one_hot_actions - probs # 实际动作与预测概率的差 dr discounted_rewards(rewards) gradients * dr # 高奖励步权重更大 target alpha * np.vstack([gradients]) probs model.train_on_batch(states, target) # TensorFlow 版 history.append(np.sum(rewards))PyTorch 版以-torch.mean(torch.log(predictions) * y)作为损失等价于交叉熵加权用torch.optim.Adam(model.parameters(), lr0.01)更新target的构造方式与 TF 版完全一致。Actor-Critic为策略梯度装上价值估计器Actor-Critic 是策略梯度的改进版同一个网络或两个共享底座的网络同时输出两样东西——Actor给出动作概率分布决定采取哪个动作Critic估算当前状态未来可获得的累计奖励。课程 README 指出它与 GAN 有相似的两方对抗结构但目标是让两路输出联合训练用真实折扣奖励与 Critic 预测值之差构造critic loss用策略梯度思路构造actor loss。TensorFlow 版用一个双头网络实现inputs keras.layers.Input(shape(num_inputs,)) common keras.layers.Dense(num_hidden, activationrelu)(inputs) action keras.layers.Dense(num_actions, activationsoftmax)(common) # Actor critic keras.layers.Dense(1)(common) # Critic model keras.Model(inputsinputs, outputs[action, critic])PyTorch 版则显式定义Actor与Critic两个类Actor 用torch.distributions.Categorical(F.softmax(output, dim-1))输出动作分布Critic 输出标量价值。训练时TF 版在tf.GradientTape()内对每个时间步计算diff rew - value # 真实折扣奖励与 Critic 预测之差 actor_losses.append(-log_prob * diff) # Actor 损失放大高价值动作 critic_losses.append(huber_loss(value, rew)) # Critic 损失Huber 损失 loss_value sum(actor_losses) sum(critic_losses)该实现中 Critic 采用keras.losses.Huber()并以running_reward 195作为 CartPole已解决的判定条件running_reward 0.05 * episode_reward 0.95 * running_reward。这套双头网络 两类损失 滑动平均判定的骨架同样可直接搬到 Mountain Car。迁移要点把环境当作参数传入算法课程实验的终极收获写在其 Takeaway 中OpenAI Gym 对所有环境提供相同的接口reset/step/render/close、统一的action_space与observation_space而策略梯度、Actor-Critic 这类算法只依赖状态、动作、奖励的抽象概念并不关心环境的物理本质。因此将 CartPole 的代码迁移到 Mountain Car 时改动几乎只发生在以下几处环境创建gym.make(MountainCar-v0)对应 CartPole 的gym.make(CartPole-v1)网络输入维度num_inputs env.observation_space.shape[0]——Mountain Car 下即 2位置、速度动作数量num_actions env.action_space.n——Mountain Car 下即 3左、不动、右奖励语义CartPole 每步 1、目标是最长存活Mountain Car 则是到达旗帜即结束done触发训练目标等价于尽快触发 done 并到达目标位置。更进一步可以像课程所说的那样重构run_episode把环境作为参数传入def run_episode(env, model, num_actions, max_steps_per_episode10000, renderFalse): # ... 同一套 采集逻辑内部不再引用全局 env ...这样一来同一个算法函数可无缝对接 Gym 中任意环境——从 CartPole 到 Mountain Car甚至 Atari 游戏只需额外用 CNN 把屏幕帧转成特征向量。这正是 RL 代码可复用性的直接体现。验收与延伸实验应达成的学习目标完成 Notebook 补全后建议按以下顺序验证实验成果对比随机基线记录随机策略Notebook 内置循环的失败步数与到达位置作为下界训练策略梯度模型复用上述 300 轮循环与discounted_rewards观察每 100 轮打印的累计奖励是否持续上升、小车能否接近旗帜升级 Actor-Critic用双头网络 两类损失替换纯策略梯度对比收敛速度课程 CartPole 示例中 Actor-Critic 在约 114 轮即触发Solved条件可视化以renderTrue重跑训练后的run_episode肉眼确认小车通过左右摆动蓄能、最终翻越山脊抵达旗帜。需要注意的是课程中 CartPole 的训练日志、超参数gamma0.99、alpha1e-4、Adamlearning_rate0.01、Huber 损失来自 CartPole-RL-TF.ipynb 与 CartPole-RL-PyTorch.ipynb 的实际运行记录迁移到 Mountain Car 时这些参数属于合理的起点而非保证值建议在实验中对学习率与回合数做适当调整。此外Gym 版本差异可能导致render()的调用方式不同如需要gym.make(MountainCar-v0, render_modehuman)本地运行与在线 Notebook 环境的渲染策略也需按课程提示分别适配。结语从本实验中你将学到一件重要的事实强化学习算法是环境无关的。只要环境遵守 Gym 的统一接口一套策略梯度或 Actor-Critic 实现就能在不同物理场景间平移——Mountain Car 的蓄能爬坡与 CartPole 的维持平衡看似天差地别却共享同一套reset/step/render协议与同一套折扣奖励 梯度加权的学习机制。在 MountainCar.ipynb 中把课程算法补全、让小车真正逃出山谷就是对你 RL 迁移能力的一次完整检验。赞分享教程人工智能机器学习深度学习【免费下载链接】AI-For-Beginners12 Weeks, 24 Lessons, AI for All!项目地址https://gitcode.com/GitHub_Trending/ai/AI-For-Beginners点击查看免费下载相关推荐ML-For-Beginners 强化学习实战作业解析用 Q-Learning 训练 OpenAI Gym 的 Mountain Car山车脱困ML For Beginners 强化学习实战作业解析用 Q Learning 训练 OpenAI Gym 的 Mountain Car山车脱困 本篇以教程机器学习人工智能ML-For-Beginners 强化学习实战用 Q-Learning 从 CartPole 迁移训练 OpenAI Gym Mountain CarML For Beginners 强化学习实战用 Q Learning 从 CartPole 迁移训练 OpenAI Gym Mountain Car 本篇技教程机器学习人工智能ML-For-Beginners 强化学习实战用 Q-Learning 训练 OpenAI Gym 中的 Mountain Car 小车ML For Beginners 强化学习实战用 Q Learning 训练 OpenAI Gym 中的 Mountain Car 小车 本文基于 ML Fo教程机器学习人工智能上一篇Mermaid Live Editor 完整教程从 Mermaid 代码到可分享图表的三步路径下一篇nctoolbox一份 API 读取 15 种 NetCDF 海洋气象数据创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

一文读懂API接口CC攻击防护设计(实战笔记) 2026/9/30 8:42:15

一文读懂API接口CC攻击防护设计(实战笔记)

本文深入探讨API接口CC攻击防护设计(实战笔记),涵盖背景分析、原理剖析、实战步骤、配置示例、优化建议和避坑指南。 作为DDoS与CC防护从业者,掌握API接口CC攻击防护设计(实战笔记)不仅能提升系统稳定性&am…

阅读更多 →
HarmonyOS端侧AI实践:系统级场景化控件实现OCR与文档识别 2026/9/30 8:42:15

HarmonyOS端侧AI实践:系统级场景化控件实现OCR与文档识别

最近一段时间我在做一款面向学生的拍照笔记工具,核心功能就是拍课本、拍试卷、识别文字、整理成电子档。放在两三年前,这件事最常规的做法是接一家第三方OCR SDK,上传图片到云端,等结果回来。但在实际做HarmonyOS版本时&#xff0…

阅读更多 →
Buzz技术原理与应用场景解析 2026/9/30 8:42:15

Buzz技术原理与应用场景解析

我无法根据当前输入生成符合要求的博文。 原因在于:您提供的输入内容中, 项目标题仅为“buzz” ,且后续未提供任何有效信息—— 没有项目正文(原始描述为空) 没有关键词列表(仅显示“最新网络热词&…

阅读更多 →
滑动窗口算法详解:从暴力到单调队列的优化实战 2026/9/30 8:42:15

滑动窗口算法详解:从暴力到单调队列的优化实战

滑动窗口这四个字,听起来像个网络协议名词,但在数组算法里,它是处理连续子数组问题的利器。我刚开始刷题时,一看到“连续子数组”“子串”就下意识写两重循环,直到被一道中等题卡住超时,才认真把滑动窗口的…

阅读更多 →
DeepSeek-VL2多模态研报摘要技术方案 2026/9/30 8:42:15

DeepSeek-VL2多模态研报摘要技术方案

简介:本资源是一份面向金融AI工程师与NLP研究者的深度技术方案,系统阐述DeepSeek-VL2模型在证券研究报告自动摘要任务中的全栈实现路径,聚焦非结构化研报文档的关键信息提取、多模态语义融合与投资观点自动生成三大核心难题。资源为单文件PDF…

阅读更多 →
COMSOL氩气双层介质阻挡放电仿真:从物理图景到参数调优 2026/9/30 8:42:07

COMSOL氩气双层介质阻挡放电仿真:从物理图景到参数调优

在示波器上第一次看到氩气介质阻挡放电的电流波形时,正弦电压的每个半周期里都趴着一串细密的小尖峰,像心电图上的早搏堆。那是流过数十千伏电场间隙、被介质层限制住的微放电脉冲。而要在COMSOL里把这一幕从方程式里重建出来,靠的就是等离子…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉