深度学习入门站 · 理解深度学习
首页 › 第 19 章

深度强化学习

智能体与环境互动、试错学习:从游戏 AI 到机器人控制。
图 19-1:深度强化学习:智能体与环境的交互循环
图 19-1:深度强化学习:智能体与环境的交互循环

这一章讲的是深度学习里最"有生命力"的一个分支——强化学习(Reinforcement Learning)。前面几章学的模型都是"看着数据学规律",而这一章的智能体要在环境里不断试错、根据奖励自己摸索出行事策略——就像教一只小狗学会叼飞盘,或者让一个 AI 从零学会打游戏。学完这一章,你会搞懂"智能体—环境—奖励"是怎么回事,理解策略和价值函数这两个核心概念,还能看懂大名鼎鼎的深度 Q 网络(DQN)是怎么让 AI 打游戏打出人类水平的。

强化学习:没有标准答案的学习

想象你养了一只小狗。你想让它学会"听到口令就坐下",可你没法给它一本说明书,只能这样做:它做对了,摸摸头给块零食(奖励 $+1$);做错了,不理它(奖励 $0$)。小狗不知道"坐下"是什么意思,它只能一次次尝试,记住哪些动作带来了零食。这就是强化学习的核心画面:一个智能体(agent)(小狗)在环境(environment)(客厅)里,处于某种状态(state)(正站着),做出一个动作(action)(坐下),环境反馈一个奖励(reward)(零食),并把它带到新的状态。

这和前面学的监督学习有本质区别。监督学习有标准答案:每道题都标好了正确输出,模型照着对答案就行。强化学习没有标准答案,只有稀疏的奖励信号——下棋时,整盘棋走完才知道输赢;而且你的行为会影响你接下来看到的数据:你往左走,就永远看不到右边的风景。所以强化学习面对的是一连串"走一步看一步"的序贯决策问题,而不是"一次预测"问题。

🐶
生活类比
教小孩学走路和教 AI 打游戏是同一件事:小孩(智能体)在客厅(环境)里迈出一步(动作),可能摔跤(负奖励),也可能站稳了、离玩具更近(正奖励)。没人给他"标准答案",他靠一次次试错,慢慢学会"先迈哪只脚、重心放哪里"。长大后他走路稳当,靠的正是小时候摔过的每一跤。

马尔可夫决策过程与策略

为了把"走一步看一步"这件事讲清楚,数学家发明了一个标准框架,叫马尔可夫决策过程(Markov Decision Process,MDP)。它的假设很朴素:世界在任何时刻都处于某个状态 $s_t$,你在这个状态下做一个动作 $a_t$,世界以某个概率转移到新状态 $s_{t+1}$,并可能给你一个奖励。所谓"马尔可夫",是指未来只取决于当前状态——就像下棋,你只需要看棋盘现在的局面,不需要回忆刚才每一步是怎么走的。状态转移的概率记为 $\Pr(s_{t+1}|s_t, a_t)$,意思是"在状态 $s_t$ 做了动作 $a_t$ 之后,落到状态 $s_{t+1}$ 的可能性"。

那智能体靠什么决定动作?靠策略(policy):一个从状态到动作的规则,记作 $\pi(a|s)$——"在状态 $s$ 下,选择动作 $a$ 的概率"。策略可以是确定性的(见到这局面就下这步棋),也可以是随机的($70\%$ 概率走这步,$30\%$ 概率试试别的)。强化学习的目标,就是找到一个能拿到最多总奖励的策略。

价值函数:给"好坏"打分

怎么判断一个状态好不好?光看眼前的奖励不够:有时候眼前奖励是 $0$,但走下去很快就能赢棋。所以我们需要价值函数(value function)——估计"从这个状态出发,长期平均能拿到多少奖励"。由于远期的奖励不如眼前的实在,我们会用一个折扣因子 $\gamma$(比如 $0.9$)给未来奖励打折,于是从时刻 $t$ 开始的回报(return)是:

$$G_t = r_{t+1} + \gamma r_{t+2} + \gamma^2 r_{t+3} + \cdots = \sum_{k=0}^{\infty} \gamma^k r_{t+k+1}$$

这个式子意思是:把未来每一步的奖励都加起来,但每往后一步就打一次折——明天的 1 块钱比一年后的 1 块钱值钱,就是这个道理。基于回报可以定义两种价值:状态价值 $v(s) = \mathbb{E}[G_t | s_t = s]$,是从状态 $s$ 出发的期望回报;动作价值 $q(s,a) = \mathbb{E}[G_t | s_t = s, a_t = a]$,是在状态 $s$ 先做动作 $a$、之后按策略走的期望回报。动作价值就是大名鼎鼎的 Q 值。

这些价值之间有个漂亮的自洽关系,叫贝尔曼方程(Bellman equation):当前状态的价值 = 立即奖励 + 下一状态的折扣价值。直觉上就像"这个路口值多少钱 = 在路口捡到的钱 + 拐进那条路之后还能赚的钱":

$$v(s) = \sum_{a} \pi(a|s) \left[ r(s,a) + \gamma \sum_{s'} \Pr(s'|s,a)\, v(s') \right]$$

别被这串符号吓到,它的意思就一句话:现在的价值,由"现在能拿到的"和"未来还能拿到的"拼起来。几乎所有强化学习算法,都是靠这个关系不断"前后校对"来学习的。

💡
**核心思想**:策略是"怎么做"(状态 → 动作的规则),价值函数是"有多好"(状态或动作能带来的长期回报预期)。学强化学习,就是在不断回答两个问题:哪个动作更值钱?(价值估计)那下次就多做哪个动作。(策略改进)

探索、利用与深度 Q 网络

刚到一个新环境,你会面临一个两难:是利用(exploit)已知的最好选择(去上次吃过的那家餐厅),还是探索(explore)没试过的选项(隔壁新开的店可能更好吃)?这就是著名的探索与利用的权衡。永远探索会饿死,永远利用会错过最好的选择。经典的做法是 $\epsilon$-贪婪策略:以很小的概率 $\epsilon$ 随机试一个动作,其余时候选当前 Q 值最大的动作。

那 Q 值怎么学?Q 学习(Q-learning)给出了一个非常直观的更新公式:做完一个动作拿到奖励后,把"实际拿到的 + 未来最好的折扣价值"和"原来的估计"之间的差距,按学习率 $\alpha$ 一点点补进 Q 值里:

$$q(s_t, a_t) \leftarrow q(s_t, a_t) + \alpha \left[ r_t + \gamma \max_a q(s_{t+1}, a) - q(s_t, a_t) \right]$$

方括号里的项叫 TD 误差——"我原来估计的"和"现实告诉我的"差了多少。表格版 Q 学习把所有"状态 × 动作"的价值记在一张大表里。但真实世界的状态太多了:一张 Atari 游戏画面有几十万像素,根本列不了表。于是深度 Q 网络(Deep Q-Network,DQN)登场:让神经网络 $q(s,a;\phi)$ 来估计 Q 值——输入游戏画面,输出每个动作的 Q 值,训练时让网络尽量满足贝尔曼方程(让估计和"现实 + 未来估计"一致)。这就是深度强化学习的里程碑式突破:一个网络只看着游戏画面,就从零学会了玩 Atari 游戏,水平接近甚至超过人类玩家。

import numpy as np

# 一个 4x4 迷你网格世界:0 是起点,15 是终点(+1 分),
# 5、7、10 是"洞"(-1 分)。智能体要在试错中学会避开洞、走到终点。
n_states, n_actions = 16, 4           # 上、右、下、左
Q = np.zeros((n_states, n_actions))   # Q 表:每个"状态 x 动作"一个格子
alpha, gamma, epsilon = 0.1, 0.9, 0.1 # 学习率、折扣因子、探索率

def step(s, a):
    s2 = s + (-4, +1, +4, -1)[a]      # 按动作移动一格
    s2 = max(0, min(15, s2))          # 撞墙就停在原地
    r = 1 if s2 == 15 else -1 if s2 in (5, 7, 10) else 0
    return s2, r

for _ in range(500):                  # 训练 500 个回合
    s = 0
    for _ in range(100):              # 每回合最多走 100 步
        if np.random.rand() < epsilon:   # 探索:随机试一个动作
            a = np.random.randint(n_actions)
        else:                            # 利用:选 Q 值最大的动作
            a = np.argmax(Q[s])
        s2, r = step(s, a)
        Q[s, a] += alpha * (r + gamma * np.max(Q[s2]) - Q[s, a])
        s = s2
        if s == 15:                   # 到终点,本回合结束
            break

print("起点各动作的 Q 值:", np.round(Q[0], 2))

跑一遍这段代码,你会看到起点四个动作的 Q 值慢慢拉开差距——朝终点方向的动作 Q 值最高。这张 Q 表就是智能体学到的策略。如果把状态换成游戏画面、把 Q 表换成神经网络,你就得到了 DQN。

策略梯度:直接调策略

Q 学习的路线是"先估计哪个动作值钱,再选值钱的"。还有另一条路:策略梯度(policy gradient)——不估计价值,直接调策略本身。想象一个演员(策略网络)每次按某种概率演动作:演得好的剧(回报高的轨迹)就把对应概率调大,演得差的就把概率调小。更新规则可以写成:

$$\theta \leftarrow \theta + \alpha \, \nabla_\theta \log \pi(a_t|s_t; \theta) \cdot G_t$$

翻译成人话:"这一局得分高,就让刚才的动作更常出现;得分低,就让它少出现。" 这就是 REINFORCE 算法的核心思想,也是现代机器人控制、甚至 ChatGPT 背后的 RLHF(基于人类反馈的强化学习)等技术的出发点。策略梯度天生是随机的,这反而是优点:它自带探索,面对"两个看起来一样的地方奖励却不同"的模糊环境时也更稳健。

强化学习如今早已走出实验室:AlphaGo 用深度强化学习击败了围棋世界冠军;机器人通过试错学会行走、抓取;自动驾驶、推荐系统,甚至用"打游戏"的方式发现更快的矩阵乘法(AlphaTensor),背后都有它的身影。它的魅力在于:不告诉 AI 怎么做,只告诉它什么算好,剩下的交给它自己去探索。

🧠
奖励设计是强化学习里最考验功夫的部分:奖励给得不好,AI 会"钻空子"——比如为了刷分而绕远路,而不是走最短路径。奖励稀疏、延迟、带随机性,正是这一章开头说的"没有标准答案"的代价。

🎯 小测验

1. 强化学习和监督学习最本质的区别是什么?
2. 动作价值(Q 值)$q(s,a)$ 表示什么?
3. $\epsilon$-贪婪策略中,$\epsilon$ 的作用是什么?