强化学习系列博客 · 第一篇 本篇目标:用最直观的方式理解强化学习是什么,搞清楚 Agent、Environment、State、Action、Reward 这几个核心概念,以及它和我们熟悉的监督学习到底有什么本质区别。
强化学习系列博客 · 第一篇
本篇目标:用最直观的方式理解强化学习是什么,搞清楚 Agent、Environment、State、Action、Reward 这几个核心概念,以及它和我们熟悉的监督学习到底有什么本质区别。
假设你现在在玩《超级马里奥》,第一次上手,你完全不知道怎么操作。
你按了一下右键,马里奥往右走了——好像没什么问题。你又按了跳跃,马里奥跳过了一个坑——不错。然后你一头撞上了一个蘑菇怪,扣血了。你心里记住了:遇到蘑菇怪要跳过去。
就这样,你死了一遍又一遍,每一次失败都让你学到一点东西。一个小时之后,你已经能流畅地通过第一关了。
你刚才做的这件事,本质上就是强化学习。
你没有人手把手教你每一步该怎么按键——没有人告诉你"在这个坐标应该按跳跃"。你是靠着不断地试错,靠着"这样做有好处/有坏处"的反馈信号,自己摸索出了一套策略。
强化学习研究的就是这件事:一个智能体(Agent)如何在与环境的交互中,通过反复试错,学会做出最优决策。
我们来把刚才马里奥的例子拆开,对应到强化学习的术语上。
Agent 就是那个"做决策的家伙"。在马里奥的例子里,Agent 是游戏的控制程序(或者说是你自己)。在强化学习里,Agent 就是我们训练的那个模型或者程序,它负责观察环境、做出行动。
你可以把 Agent 想象成一个新来的员工:什么都不会,但是在工作中慢慢学。
Environment 是 Agent 所处的"世界"。马里奥游戏本身就是环境——它决定了当你按下某个键之后,世界会怎么变化,你会不会扣血,关卡什么时候结束。
环境对 Agent 来说往往是黑盒子:你只能观察它、跟它交互,但你不一定完全理解它内部的运转规律。
State 是 Agent 在某一时刻"看到的世界"。比如马里奥当前在屏幕上的位置、周围有没有蘑菇怪、剩余几条命、时间还剩多少——这些合在一起,就构成了当前的状态。
在强化学习的数学符号里,状态通常用 $s$ 表示,某个时刻 $t$ 的状态写作 $s_t$。
有一点需要说清楚:状态不一定是全部的环境信息。有时候 Agent 只能观察到环境的一部分(比如你打麻将,只能看见自己的牌,看不见别人摸了什么),这时候我们更准确地称之为"观测(Observation)",但很多场合这两个词会混用,理解这个区别就够了。
Action 是 Agent 在当前状态下能做的事情。按左键、按右键、按跳跃——这些都是动作,用 $a$ 表示。
动作空间可以是离散的(比如游戏里只有有限几个按键),也可以是连续的(比如控制一个机械臂,角度可以是任意实数)。不同的任务对应不同类型的动作空间,后面我们会遇到处理这两种情况的不同算法。
Reward 是最关键的概念。每当 Agent 采取一个动作之后,环境会给它一个反馈信号——这个信号就叫做奖励,用 $r$ 表示。
奖励可以是正的(做了好事),也可以是负的(做了坏事),甚至可以是零(啥都没发生)。
在马里奥里: - 踩死一个蘑菇怪:+100分(正奖励) - 被蘑菇怪撞了:扣血(负奖励) - 走过一段路:+1分(小正奖励) - 通关:+大量分数(大正奖励)
奖励是 Agent 学习的唯一信号。 它不告诉 Agent 哪个动作是对的,只告诉 Agent 做完之后结果好不好。Agent 要自己从这些信号里反向推断出什么样的行为是值得的。
这也是为什么设计奖励函数是强化学习里最难的事情之一——奖励设计得不好,Agent 可能学出让你目瞪口呆的"作弊"策略。后面的博客我们会专门讲这个。
把以上东西组合起来,Agent 学到的"在什么状态下应该做什么动作",就叫做策略(Policy),用 $\pi$ 表示。
策略可以理解为一个函数:给定当前状态 $s$,输出应该采取的动作 $a$:
$$\pi(s) = a \quad \text{(确定性策略)}$$
或者输出每个动作的概率:
$$\pi(a|s) = P(\text{采取动作}\ a\ |\ \text{当前状态为}\ s) \quad \text{(随机性策略)}$$
强化学习的目标,就是找到一个最优策略 $\pi^*$,让 Agent 在整个过程中获得的总奖励尽可能大。
把上面的概念串起来,强化学习的基本流程是这样的:
时刻 t: 1. Agent 观察当前状态 s_t 2. Agent 根据策略 π,选择一个动作 a_t 3. Agent 执行动作 a_t,环境发生变化 4. 环境返回:新状态 s_{t+1} 和即时奖励 r_t 5. Agent 利用这个反馈更新自己的策略 6. t = t+1,重复
这个循环会一直进行,直到游戏结束(称为一个 Episode 结束),然后重新开始。Agent 就在这样一轮又一轮的游戏中慢慢学习。
用图来理解,这个交互循环长这样:
┌─────────────────────────────────────┐ │ │ 状态 s_t 奖励 r_t │ │ ┌────┴────┐ 动作 a_t ┌────────────┐ │ │ Agent ├─────────────►│ Environment├────┘ └─────────┘ └────────────┘ │ 新状态 s_{t+1}
Agent 和 Environment 就像两个一直在对话的角色:Agent 说"我要这样做",环境回复"好,世界变成了这样,你得了这些分"。
这里有个容易忽视的细节:Agent 想最大化的不是某一步的即时奖励,而是整个序列的累积奖励。
为什么?因为有时候短期的小损失可以换来长期的大收益。比如下围棋,牺牲一个棋子有时候是为了做出一个更大的杀局。如果 Agent 只盯着眼前的即时奖励,它就会变得目光短浅。
在数学上,我们用折扣累积奖励(Discounted Return)来衡量这个长期收益:
$$G_t = r_t + \gamma r_{t+1} + \gamma^2 r_{t+2} + \gamma^3 r_{t+3} + \cdots = \sum_{k=0}^{\infty} \gamma^k r_{t+k}$$
这里 $\gamma$(gamma)是折扣因子,取值在 0 到 1 之间。
折扣因子的作用很直观:越远的未来,奖励的权重越低。这有两个原因:
第一,现实层面,现在得到的奖励比未来更确定——未来的事情可能根本不会发生。
第二,数学层面,有了折扣因子,无限序列的奖励之和才是有界的,不然计算会出问题。
$\gamma$ 接近 1,说明 Agent 很"有远见",会为了未来做长期规划;$\gamma$ 接近 0,说明 Agent 很"短视",只关心眼前的收益。在实际应用中,$\gamma = 0.99$ 或 $\gamma = 0.999$ 是很常见的选择。
很多刚开始学的人会有一个困惑:强化学习和我之前学的监督学习有什么不一样?它们看起来都是在"训练模型"。
这个问题问得很好,我们来认真比较一下。
在监督学习里,你有一堆带标签的数据:(输入, 正确答案)。模型的任务是学会从输入预测答案。比如图像分类,你给模型看一张猫的图片,告诉它"这是猫",模型就去学习这个映射关系。
关键点在于:每一个训练样本,都有一个明确的"正确答案"。模型出错了,你能直接告诉它"你错了,正确答案是这个"。这个反馈是即时且精确的。
强化学习没有"正确答案"这个东西。你能得到的只是一个奖励信号,而且这个信号:
是滞后的。 你现在做的动作,可能要等很多步之后才能看到它带来的影响。就像你现在认真学习,可能要等几年后才能看到回报。这就是所谓的信用分配问题(Credit Assignment Problem):当最终结果出来了,你怎么知道到底是哪一步的功劳?
是稀疏的。 很多任务里,大多数时候奖励是 0——只有在完成某些关键动作时才有奖励。比如教机器人开门,可能它折腾了很久,尝试了几百次,才偶尔碰巧把门打开一次,获得了第一个正奖励。在此之前,它完全不知道自己在做的事情对不对。
不是监督信号。 奖励只告诉你这个结果好不好,但不告诉你如果换个动作会不会更好。你永远不知道那条没走过的路是不是更优的。
监督学习的数据集在训练开始前就固定了。但在强化学习里,数据是 Agent 在与环境交互的过程中实时产生的,而且 Agent 的行为会影响它之后能收集到什么数据。
这造成了一个挑战:如果 Agent 的策略很差,它收集到的都是"差策略下的数据",用这些数据训练出来的策略可能还是很差,就陷入了一个恶性循环。这也是为什么强化学习的训练比监督学习难稳定得多。
一句话总结这个区别:监督学习是"有人教",强化学习是"自己悟"。
既然说到了,就顺带提一下无监督学习的对比。
无监督学习是没有标签的,模型自己去发现数据里的结构——比如聚类、降维。它不需要和环境交互,只是在数据本身上找规律。
强化学习和无监督学习的区别在于:强化学习是有目标的(最大化累积奖励),而无监督学习没有明确的优化目标,更多是探索性的。
当然,实际上这三类方法之间的边界并没有那么清晰。现代的很多方法会把它们混合起来用,比如用自监督学习的方法来预训练表征,然后再用强化学习做决策——比如后面要讲到的 RLHF 就是如此。
说了这么多理论,我们来看看强化学习实际上解决了哪些让人印象深刻的问题,这样你才能感受到它的力量。
打游戏: DeepMind 的 AlphaGo 在围棋上击败了世界冠军李世石,这是强化学习历史上的里程碑。后来的 AlphaZero 不依赖人类棋谱,完全自学,又超越了 AlphaGo。同样,DeepMind 的 DQN 系统学会了几十款 Atari 游戏,在很多游戏上达到了超越人类的水平,而且用的是相同的算法,不同游戏之间没有手工设计任何规则。
机器人控制: 用强化学习训练机器人做各种复杂的物理任务,比如让机械手做出各种抓取动作,甚至打后空翻。OpenAI 曾经训练过一个会玩魔方的机械手,在现实物理环境中单手还原魔方。
自动驾驶与资源调度: 强化学习被用于优化红绿灯的控制、数据中心的冷却系统,在真实场景中节省了大量能源。
训练语言大模型(这正是我们系列的终点): ChatGPT、GPT-4 背后的 RLHF(基于人类反馈的强化学习)就是用强化学习来让语言模型的输出更符合人类偏好的。这也是这个系列博客的终极目标——你学完这个系列,就能理解并动手实现用强化学习来训练语言模型。
在正式进入复杂的算法之前,有一个经典的入门问题值得提一下,叫做多臂老虎机(Multi-Armed Bandit)。
想象你走进一个赌场,面前有 10 台老虎机(老虎机有一个摇杆,像手臂,所以叫"臂")。每台机器的中奖概率不同,但你不知道哪台更好。你有 1000 次拉杆的机会,怎么最大化你的总收益?
你有两个选择: - 探索(Explore):多尝试几台机器,收集信息,看看哪台更好。 - 利用(Exploit):基于已有的信息,一直拉那台看起来最好的机器。
纯探索会浪费很多机会在差的机器上;纯利用可能因为信息不够而错过更好的选择。
这就是强化学习里一个永恒的核心矛盾——探索与利用的权衡(Exploration-Exploitation Tradeoff),在后续每一个算法里都会遇到它的身影。
多臂老虎机可以看作强化学习的简化版:没有状态(或者状态是固定的),只有动作和奖励。搞清楚它之后,再加上"状态"这个维度,就到了完整的强化学习问题。下一篇我们会进入完整的数学描述——马尔可夫决策过程(MDP)。
我们生活在一个强化学习越来越"出圈"的时代。
几年前,强化学习还主要是学术圈的玩具,在游戏和机器人上玩玩。但 ChatGPT 出来之后,每个人都开始关注 RLHF;DeepSeek-R1 出来之后,GRPO、过程奖励模型这些词也进入了大家的视野。
现在,几乎所有主流的大语言模型都离不开强化学习的训练——它是让模型"对齐"人类意图的关键技术。如果你想深入理解现代 AI 是怎么工作的,强化学习是必须要学的一块拼图。
而且强化学习的思想本身也很美:不需要告诉 AI 每一步怎么做,只需要告诉它什么是好的结果,让它自己去探索。在某种意义上,这更接近人类学习的本质。
理解了直觉之后,我们需要一套数学语言来精确描述强化学习问题。
第2篇将介绍马尔可夫决策过程(MDP)——它是强化学习的数学基础,所有算法都建立在它之上。我们会讲清楚"马尔可夫性"是什么意思、状态转移矩阵怎么理解、贝尔曼方程的直觉是什么。听起来有点学术,但我保证讲得让你能看懂。
作者注:这个系列希望做到"读完能用,不只是读完能懂"。每一篇都会有对应的代码,随着系列推进,我们会一步步搭建起一个完整的强化学习工具箱。
还没有评论,来抢沙发吧!
博客管理员
40 篇文章
还没有评论,来抢沙发吧!