首页 / 资料库 / 微软 · AI 入门

资料库12 分钟读完MIT强化学习智能体

深度强化学习

译自《Deep Reinforcement Learning》 · 查看英文原文

原文出处Deep Reinforcement Learning 原作者:Microsoft · 许可证:MIT License 中文译本由诸葛AI学院整理,仅供学习参考,版权归原作者与微软所有。

深度强化学习

强化学习(Reinforcement Learning,RL)被视为机器学习的基本范式之一,与监督学习(supervised learning)、无监督学习(unsupervised learning)并列。监督学习依赖带已知结果的数据集,强化学习则讲究在实践中学习。举个例子:第一次接触一个电脑游戏,就算不懂规则我们也会上手去玩,光靠不断的玩、不断调整打法,很快就能把水平练上来。

课前小测

要做强化学习,我们需要:

  • 一个环境(environment)或模拟器(simulator),由它设定游戏规则。我们得能在模拟器里反复跑实验、观察结果。
  • 某个奖励函数(reward function),用来衡量这次实验有多成功。学习玩电脑游戏时,奖励就是我们的最终得分。

有了奖励函数,我们就该据此调整行为、改进打法,让下一次玩得更好。强化学习与其他机器学习类型的主要区别在于:一局游戏结束之前,我们通常不知道自己赢了还是输了。所以没法判断某一步棋单独算好还是算坏,只有游戏结束时才能拿到奖励。

强化学习通常会做很多次实验。每次实验里,都要在两种做法之间拿捏平衡:一边沿用目前学到的最优策略(这叫利用,exploitation),一边去探索新的可能状态(这叫探索,exploration)。

OpenAI Gym

做强化学习有一件很好的工具:OpenAI Gym。它是一个模拟环境,能模拟大量不同的环境,从雅达利(Atari)游戏到倒立摆背后的物理过程都有。它是最流行的强化学习训练模拟环境之一,由 OpenAI 维护。

:OpenAI Gym 提供的全部环境可以在这里查看。

CartPole 平衡问题

大家多半见过现代的智能平衡车,比如 Segway 或者平衡滑板车(gyro scooter)。它们能自动保持平衡,靠的是根据加速度计或陀螺仪的信号调整车轮。这一节我们要解决一个类似的问题:让一根杆子保持平衡。场景有点像马戏演员用手掌顶住一根立着的杆子,只不过这里的平衡只发生在一维方向上。

平衡问题的一个简化版本叫 CartPole(小车倒立摆)问题。在 CartPole 的世界里,有一个可以左右滑动的水平滑车,目标是当滑车移动时,让它顶端那根竖直的杆子保持不倒。

原文此处有一张图,画的是 CartPole 环境:一辆小车托着一根杆子。

要创建并使用这个环境,只需要几行 Python 代码:

```python import gym env = gym.make("CartPole-v1")

env.reset() done = False total_reward = 0 while not done: env.render() action = env.action_space.sample() observaton, reward, done, info = env.step(action) total_reward += reward

print(f"Total reward: {total_reward}") ```

每个环境的调用方式都完全一样:

  • env.reset 开始一次新实验
  • env.step 推进一个模拟步。它从动作空间(action space)接收一个动作,返回一个观测(observation,来自观测空间),外加一个奖励和一个终止标志。

上面的例子里,每一步都是随机选动作,所以这次实验"活"得很短:

原文此处有一张动图,画的是不做任何控制时的小车:滑车胡乱滑动,杆子很快就倒了。

强化学习算法的目标是训练出一个模型,也就是所谓的策略(policy)π:给定一个状态,它返回应对的动作。策略也可以是概率式的,即对任意状态 s 和动作 a,返回"在状态 s 下应当选择 a"的概率 π(a|s)。

策略梯度算法

给策略建模,最直接的思路是做一个神经网络:输入状态,输出对应的动作(准确说是所有动作的概率)。从某个角度看,它和普通分类任务很像,差别在于:我们事先并不知道每一步该选哪个动作。

这里的想法是把概率估计出来。我们构造一个累积奖励(cumulative rewards)向量,记录实验每一步时刻的累计总奖励。同时做奖励折扣(reward discounting):把较早的奖励乘上一个系数 γ=0.99,削弱早期奖励的作用。然后,强化实验路径上那些带来更大奖励的步骤。

想更多了解策略梯度算法,可以看这个示例笔记本,里面有实际运行效果。

演员-评论家算法

策略梯度思路的一个改进版本叫演员-评论家(Actor-Critic)。它的核心想法是让神经网络同时输出两样东西:

  • 策略,决定该做哪个动作。这部分叫演员(actor)。
  • 对当前状态下预期可获得的总奖励的估计。这部分叫评论家(critic)。

从某个角度看,这种架构类似于 GAN(生成对抗网络),同样是两个网络互相对着训练。在演员-评论家模型里,演员提出该做的动作,评论家负责唱反调、预估结果。不过我们的目标是让这两个网络协同训练。

因为我们同时掌握真实的累积奖励和评论家在实验中给出的估计,构造一个损失函数来最小化两者的差距就相对容易,这就是评论家损失。计算演员损失时,可以沿用策略梯度算法里的同一套做法。

跑完其中一种算法之后,我们的 CartPole 大概会是这样表现:

原文此处有一张动图,画的是训练后的小车:滑车灵活地左右移动,杆子始终稳稳立着。

✍️ 动手实践:策略梯度与演员-评论家强化学习

在下面的笔记本里继续学习:

其他强化学习任务

强化学习如今是一个快速成长的研究领域。一些有意思的例子:

  • 教电脑玩雅达利游戏。这个任务的难点在于,我们没有以向量形式给出的现成状态,拿到的只是游戏截图。需要用 CNN(卷积神经网络)把屏幕图像转成特征向量,或者从中提取奖励信息。雅达利游戏在 Gym 里就有。
  • 教电脑下棋,比如国际象棋和围棋。最近的顶尖程序如 Alpha Zero,是让两个智能体互相对弈、从零开始训练,每一步都在进步。
  • 在工业界,强化学习被用来从仿真中构建控制系统。有一个叫 Bonsai 的服务就是专门为此设计的。

小结

学到这里,我们已经知道如何训练智能体拿好成绩:给它一个定义"游戏想要达到的状态"的奖励函数,再给它一个能聪明探索解空间的机会。我们动手试了两种算法,都在相对短的时间里拿到了不错的结果。但这只是你走进强化学习领域的起点,真想深入,建议再上一门专门的课。

🚀 挑战

去调研"其他强化学习任务"一节列出的应用,挑一个动手实现!

课后小测

复习与自学

想学习经典强化学习,可以看我们的机器学习入门课程

再看这个很棒的视频,讲的是电脑如何学会玩超级马里奥。

作业:训练一辆过山小车

这份作业的目标是训练另一个 Gym 环境:Mountain Car(山间小车)。作业说明见 lab/README.md

这篇在讲什么,跟咱们的课怎么对?

资料库是大厂公开教材的中文译本,偏原理和工程做法。想看面向中小企业的白话版本,去入门课场景课