)
教程人工智能机器学习深度学习【免费下载链接】AI-For-Beginners12 Weeks, 24 Lessons, AI for All!项目地址https://gitcode.com/GitHub_Trending/ai/AI-For-Beginners点击查看免费下载本文基于 AI for Beginners 课程第 22 课Deep RL的配套实验实验任务书展开讲解如何把课程中在 CartPole 上训练好的深度强化学习Deep RL算法迁移到另一个经典控制环境 Mountain Car山地小车。读完本文你将掌握 OpenAI Gym 的统一环境接口reset / step / render / close学会复用 Policy Gradients 与 Actor-Critic 两类算法在新环境上完成训练并理解把任意 Gym 环境作为参数传入 RL 算法这一课程核心结论。实验任务让 RL 智能体驾驭小车冲出山谷本实验来自 AI for Beginners 课程的第 22 课Deep Reinforcement Learning。在完成 CartPole 平衡实验之后你的下一个目标是训练一个 RL 智能体在 OpenAI Gym 的 Mountain Car 环境中控制小车使它成功逃离被困的山谷并到达旗帜位置。实验任务书原文见 lessons/6-Other/22-DeepRL/lab/README.md其要点如下任务训练 RL 智能体控制 OpenAI 环境中的 Mountain Car环境构成一辆被困在谷底的小车你的目标是跳出山谷并抵达旗帜可执行动作向左加速、向右加速、或什么都不做可观测信息小车在 x 轴上的位置以及它的速度起步方式打开实验自带的 MountainCar.ipynb 开始编码。认识 Mountain Car 环境状态、动作与奖励Mountain Car 是 OpenAI Gym 中classic_control系列的代表环境之一。与课程主笔记中讲解的 CartPoleCartPole 环境与随机策略演示相比两者物理过程完全不同但它们的编程接口完全一致这正是本实验要验证的核心思想。按照任务书的描述Mountain Car 环境的关键特征如下维度说明任务目标小车通过前后加速积蓄动能冲上右侧山顶并触达旗帜观测Observation小车沿 x 轴的位置、小车的速度连续值动作Action向左加速、向右加速、不做任何动作终止条件小车到达旗帜位置实验回合结束奖励信号每个时间步由env.step返回即时奖励训练目标是最大化累计奖励需要注意的是CartPole 的观测是一个 4 维向量小车位置、小车速度、杆的倾角、杆的角速度且每个时间步奖励 1详见 CartPole-RL-TF.ipynb 中的观测打印与说明而 Mountain Car 的观测只有位置与速度两个维度动作也变成了三个离散选项。观测维度和动作数量不同意味着策略网络的第一层输入维度和最后一层输出维度需要相应调整但算法本身无需改动。从起步 Notebook 开始实验实验的第一步是打开 MountainCar.ipynb。这个 Notebook 已经把环境搭建和随机试探的演示代码写好剩下的训练部分留给你自己完成Notebook 中甚至预留了## Lost of code here占位单元。1. 创建环境import gym env gym.make(MountainCar-v0)2. 观察一次随机实验在训练任何算法之前先跑一个纯随机策略的回合看看环境长什么样、实验何时结束state env.reset() while True: env.render() action env.action_space.sample() state, reward, done, info env.step(action) if done: break最后关闭环境env.close()这里的四个接口是 OpenAI Gym 所有环境共通的统一契约env.reset()开始一次新的实验回合返回初始状态env.step(action)执行一步仿真输入来自动作空间的 action返回新的观测、即时奖励、终止标志 done、附加信息 infoenv.render()渲染当前画面本地运行时会在新窗口中弹出仿真画面env.action_space.sample()从动作空间中随机采样一个动作用于构造随机基线策略env.close()关闭环境、释放渲染资源。3. 环境依赖运行本实验需要gym仓库根目录 requirements.txt 与 binder/requirements.txt 均固定为gym0.26.2以及用于渲染的pygame2.6.0。可参考 CartPole-RL-TF.ipynb 开头的安装方式import sys !{sys.executable} -m pip install gym pygame把 CartPole 学到的 RL 算法迁移到 Mountain Car课程主笔记DeepRL 课程 README在 CartPole 上演示了两类算法均以状态、动作、奖励三个抽象概念为核心因此可以直接复用到 Mountain CarPolicy Gradients策略梯度用一个神经网络直接建模策略 $\pi$输入状态输出各动作的概率分布Actor-Critic演员-评论家网络同时输出动作概率分布actor与当前状态下的期望累计奖励估计critic。策略网络的定义参考 CartPole-RL-TF.ipynb在 CartPole 上网络输入为 4 维观测、输出 2 个动作概率迁移到 Mountain Car 时只需把num_inputs改为 2位置 速度、num_actions改为 3左 / 不动 / 右import numpy as np import tensorflow as tf from tensorflow import keras num_inputs 2 # Mountain Car 观测位置、速度 num_actions 3 # Mountain Car 动作向左、不动、向右 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 版本可参考 CartPole-RL-PyTorch.ipynb用torch.nn.Sequential构造同样结构Linear(2, 128) - ReLU - Linear(128, 3) - Softmax。回合采样函数 run_episodeRL 训练依赖反复运行完整回合来采集轨迹trace——即每个时间步的状态、动作、动作概率和奖励。复用课程 Notebook 中的run_episode此处按 Mountain Car 的维度参数化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(num_actions, p...)表示按照策略网络输出的概率分布随机采样动作——这正是课程中探索与利用exploration / exploitation平衡的具体实现网络越确定某个动作好就越倾向于选它同时保留随机性以继续探索新状态。折扣奖励 discounted_rewardsPolicy Gradients 的关键难点是回合结束前我们不知道每个动作的好坏。解决思路是构造累计奖励向量并用折扣系数 $\gamma0.99$ 削弱早期奖励的作用最后做归一化作为训练的加权信号。函数实现直接取自课程 Notebookeps 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 ret策略梯度训练主循环课程 Notebook 的训练流程跑 300 个回合如下先跑回合收集轨迹用实际执行的动作one-hot与预测概率之差构造梯度方向再乘以折扣奖励最后以alpha1e-4的学习步长把修正后的目标概率喂回网络alpha 1e-4 history [] 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) history.append(np.sum(rewards)) if epoch % 100 0: print(f{epoch} - {np.sum(rewards)})在 CartPole 上这段训练使每回合累计奖励从约 27 一路提升到数百Notebook 输出显示第 0 回合 29、第 100 回合 135、第 200 回合 484。迁移到 Mountain Car 后训练目标从平衡更久变为更快抵达旗帜但这段主循环代码几乎不需要改动。Actor-Critic 网络结构Actor-Critic 是策略梯度的改进版一个共享隐藏层的网络同时输出动作概率分布与状态价值估计CartPole-RL-TF.ipynb 中的模型定义num_inputs 2 num_actions 3 num_hidden 128 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])训练时critic 用 Huber 损失逼近真实折扣奖励actor 用-log_prob * (折扣奖励 - critic 估计值)作为损失使 actor 倾向于选择实际回报高于 critic 预期的动作。PyTorch 版本把 actor 与 critic 拆成两个独立模块并用torch.distributions.Categorical采样动作、以advantage returns - values计算优势函数详见 CartPole-RL-PyTorch.ipynb。更进一步把环境作为参数传入 RL 算法任务书的核心结论Takeaway指出由于 OpenAI Gym 对所有环境提供相同接口RL 算法本身在很大程度上不依赖环境的物理性质你甚至可以把 Python 代码重构为将任意环境作为参数传给 RL 算法的形式。重构思路非常简单把run_episode、discounted_rewards和训练主循环中的env改为函数参数即可def run_episode(env, model, num_actions, max_steps_per_episode10000, renderFalse): ...这样一来只需一行gym.make(...)切换环境名从CartPole-v1换成MountainCar-v0再同步调整num_inputs与num_actions两个维度常量同一套 Policy Gradients / Actor-Critic 代码即可在课程演示的两个环境甚至更多 Gym 环境之间无缝复用。这也印证了课程的更大视野只要提供定义期望状态的奖励函数并给智能体充分探索的机会RL 就能自行学到最优策略更多讨论见 DeepRL 课程 README 中关于 Atari、AlphaZero 与工业仿真控制等应用方向的介绍。实验总结完成本实验后你应该掌握三件事Mountain Car 环境的建模方式2 维连续观测位置、速度 3 个离散动作目标是把困在谷底的小车送上山顶旗帜算法的环境无关性Policy Gradients 与 Actor-Critic 只依赖reset / step / render / close这套 Gym 统一接口换环境只需调整网络的输入输出维度从零训练 RL 智能体的完整流程创建环境 → 随机基线 → 定义策略网络 → 回合采样 → 折扣奖励 → 训练主循环 → 渲染验证。在此基础上你还可以继续挑战任务书最后的扩展方向尝试在 Gym 提供的其他经典控制环境中复用同一套算法进一步体会统一接口 参数化环境带来的迁移能力。赞分享教程人工智能机器学习深度学习【免费下载链接】AI-For-Beginners12 Weeks, 24 Lessons, AI for All!项目地址https://gitcode.com/GitHub_Trending/ai/AI-For-Beginners点击查看免费下载相关推荐AI for Beginners 实战指南用 OpenAI Gym 强化学习训练 Mountain Car 逃出山谷AI for Beginners 实战指南用 OpenAI Gym 强化学习训练 Mountain Car 逃出山谷 本指南围绕 AI for Beginne教程人工智能机器学习深度学习用策略梯度与 Actor-Critic 训练 Mountain Car 逃出山谷AI-For-Beginners 深度强化学习实战用策略梯度与 Actor Critic 训练 Mountain Car 逃出山谷AI For Beginners 深度强化学习实战 本指南围绕 AI For教程人工智能机器学习深度学习AI-For-Beginners 深度强化学习实战用 OpenAI Gym 训练 Mountain Car 冲出山谷AI For Beginners 深度强化学习实战用 OpenAI Gym 训练 Mountain Car 冲出山谷 本指南聚焦 AI For Beginne教程人工智能机器学习深度学习上一篇虚拟设备驱动游戏控制器兼容性的跨平台解决方案下一篇jsonpath-ng性能优化提升大规模JSON数据查询效率的5个技巧创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考