深度强化学习
这一章讲的是深度学习里最"有生命力"的一个分支——强化学习(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 怎么做,只告诉它什么算好,剩下的交给它自己去探索。