资讯动态

强化学习前传:1911-1957,从桑代克迷箱到贝尔曼方程的思想溯源

发布时间:2026/10/27 17:05:20 来源:尧图企业网站定制
1. 从一只猫说起为什么1957年之前的四十六年值得单独拎出来讲很多人第一次接触强化学习是从Q-Learning、DQN、PPO这些算法名字开始的再往前追一点可能知道Sutton和Barto在1998年那本《Reinforcement Learning: An Introduction》。但如果你把时间轴再往前拨四十年会发现一个很有意思的事实强化学习的思想根基早在计算机诞生之前就已经被埋下了。1911到1957这段时期横跨了两次世界大战、控制论的诞生、信息论的创立以及第一代神经网络模型的提出。这段历史里没有GPU没有Python甚至连“强化学习”这个词都还没被正式发明出来但试错学习、价值函数、动态规划这些核心概念已经在一个个看似不相关的领域里各自发芽。我之所以想把这个时间段单独拿出来梳理是因为它回答了一个很根本的问题为什么强化学习最终会走向“价值迭代试错”这条路而不是别的路。你去看今天的深度强化学习算法不管是DDPG还是SAC底层逻辑依然是“估计价值、根据价值改进策略”这个循环。而这个循环的思想原型恰恰是在1911到1957年间由动物行为学、最优控制、动态规划三个完全不同的圈子各自独立摸索出来的。理解这段历史不是为了掉书袋而是为了让你在调参调不动的时候能退回到第一性原理去想一想我到底在优化什么这个优化目标是怎么来的。这篇文章适合两类人看。一类是正在学强化学习但总觉得“知其然不知其所以然”的工程师另一类是对AI历史感兴趣、想搞清楚各个概念之间血缘关系的技术爱好者。我会尽量把每个关键节点讲透包括当时的人为什么这么想、这个想法后来怎么被继承下来、以及对我们今天写代码有什么实际启发。2. 1911–1930试错学习的生物学源头与那只著名的猫2.1 桑代克的迷箱实验效果律的提出故事要从1911年说起。那一年美国心理学家爱德华·桑代克发表了他的博士论文成果描述了一个后来被无数教科书引用的实验他把一只饿猫放进一个用木板和绳子搭成的“迷箱”里箱子外面放着食物。猫在箱子里会做出各种动作——抓、咬、挠、挤——直到偶然碰到一个机关箱门打开猫跑出来吃到食物。桑代克反复把同一只猫放回去记录它每次逃出所需的时间。结果非常清晰猫逃出的时间随着尝试次数增加而逐渐缩短最终猫一被放进去就能立刻触发机关。桑代克由此提出了“效果律”如果一个行为在某个情境下带来了满意的结果这个行为与该情境之间的联结就会被加强如果带来的是不满意的结果联结就会被削弱。这就是试错学习最早的实验证据。你可能会觉得这不就是“奖励好的、惩罚坏的”吗有什么稀奇但在1911年主流心理学还是冯特式的内省主义认为心理过程只能通过自我观察来研究。桑代克用动物行为把“学习”变成了一个可以量化、可以重复的客观过程这本身就是范式级别的突破。更重要的是他明确提出了学习发生在行为与后果之间而不是发生在刺激与反应之间——这个区别后来成了强化学习与监督学习分道扬镳的起点。2.2 效果律与强化学习的形式化距离从今天的视角看桑代克的效果律其实已经包含了强化学习最核心的三个要素智能体猫、环境迷箱、奖励食物。但他缺了一个关键的东西价值函数。猫的行为改进是直接的、机械的联结加强没有一个中间变量来表示“当前状态有多好”。这个中间变量要等到二十多年后才在另一个完全不同的领域里被正式定义出来。我在这里想强调一个容易被忽略的点桑代克的效果律是基于局部经验的。猫只知道“在这个箱子里碰这个机关能出去”它不知道“如果箱子换了形状该怎么办”。这种局部性后来在强化学习里表现为探索与利用的权衡问题——你如果只利用已知的好行为就永远发现不了更好的行为。桑代克没有讨论这个问题但他的实验设计其实已经隐含了它猫必须不断尝试新动作才能偶然碰到机关。2.3 巴甫洛夫条件反射与次级强化几乎与桑代克同时俄国的巴甫洛夫正在研究狗的条件反射。他的经典实验是每次给狗食物之前先摇铃重复多次后狗听到铃声就会分泌唾液。这个现象被称为条件反射。表面上看这跟强化学习关系不大因为它是被动的、由刺激驱动的。但巴甫洛夫后来发现了一个更深的机制次级强化。如果铃声反复与食物配对铃声本身就会获得奖励的属性可以用来强化新的行为。这个发现对强化学习的影响是深远的。它意味着奖励不一定是原始的生理需求也可以是习得的、抽象的。今天我们在设计强化学习奖励函数时经常用“中间奖励”来引导智能体比如机器人每靠近目标一步就给一个小奖励这个思路的源头就可以追溯到次级强化。没有次级强化稀疏奖励环境下的学习几乎不可能完成。3. 1930–1948从跳棋机到控制论价值函数的第一次亮相3.1 香农的跳棋机与极小极大搜索时间跳到1948年。这一年克劳德·香农发表了一篇不太起眼但影响深远的论文描述了一台可以下跳棋的机器。这台机器不是物理机器而是一个算法设计它用极小极大搜索来评估每一步棋的价值搜索深度取决于当前的计算资源。香农还提出了一个关键概念评估函数。由于不可能搜索到游戏结束机器必须用一个近似函数来估计当前局面的好坏比如棋子数量、位置优势等。你可能会问跳棋机跟强化学习有什么关系关系在于评估函数的思想。强化学习里的价值函数V(s)本质上就是一个评估函数它估计的是“从当前状态出发未来能获得多少累积奖励”。香农的跳棋机没有学习能力评估函数是手工设计的但它第一次把“决策问题”转化成了“价值估计问题”。这个转化是强化学习能够形式化的前提。3.2 维纳的控制论与反馈回路同样在1948年诺伯特·维纳出版了《控制论》。这本书的核心概念是反馈系统通过观察输出、与目标比较、调整输入来减小误差。维纳把反馈分成了两类负反馈用于稳定系统正反馈用于放大信号。强化学习里的学习过程本质上是一个负反馈回路智能体根据奖励信号调整策略使得未来的奖励最大化。维纳的贡献在于他提供了一个统一的框架把生物行为、机器控制、通信问题放在同一个数学语言下描述。这个框架后来被强化学习直接继承智能体-环境交互回路就是控制论反馈回路的一个特例。区别在于控制论通常假设环境模型已知而强化学习要解决的是模型未知的情况。3.3 图灵与“机器能思考吗”的隐含线索1950年图灵发表了那篇著名的论文提出了“图灵测试”。大多数人关注的是测试本身但图灵在论文里还讨论了机器如何通过试错来学习。他提到与其直接编程让机器变聪明不如设计一个能通过奖励和惩罚来学习的机器。这个想法在当时非常超前因为它把学习能力放在了智能的核心位置而不是把知识直接编码进去。图灵没有给出具体的算法但他的论述为后来的强化学习提供了一个哲学基础智能可以通过与环境的交互来涌现而不需要预先编程。这个观点在今天看来理所当然但在1950年主流AI研究还是符号主义主导认为智能就是对符号的操作。图灵的想法在当时是少数派但它埋下了一颗种子。4. 1950–1957Bellman方程与动态规划的诞生4.1 贝尔曼的最优性原理1957年理查德·贝尔曼出版了《动态规划》一书正式提出了最优性原理和贝尔曼方程。这是整个强化学习历史上最重要的数学时刻。贝尔曼要解决的问题是如何把一个多阶段的决策问题分解成一系列单阶段的子问题使得每一步都做出最优决策最终整体也是最优的。贝尔曼方程的核心形式是V(s) max_a [ R(s,a) γ * Σ P(s|s,a) * V(s) ]这个方程的含义是当前状态的价值等于采取最优动作后获得的即时奖励加上折扣后的未来状态价值的期望。它把一个无限 horizon 的问题转化成了一个递归的、可迭代求解的问题。没有这个方程强化学习里的价值迭代、策略迭代、Q-Learning都无从谈起。4.2 动态规划与强化学习的血缘关系贝尔曼的动态规划要求环境模型已知也就是状态转移概率P(s|s,a)和奖励函数R(s,a)都是已知的。这在实际问题中往往不成立比如机器人控制、游戏AI你很难精确知道每个动作会导致什么状态。但动态规划提供了求解框架如果你能估计出模型就可以用动态规划来求解最优策略。强化学习后来做的事情本质上就是用采样来替代模型。你不需要知道P(s|s,a)只需要从环境中采样用经验平均来估计价值。这个思路的转变发生在1950年代末到1960年代但它的数学基础是贝尔曼打下的。所以我说不懂贝尔曼方程你调DQN的时候连loss函数为什么这么设计都说不清楚。4.3 马尔可夫决策过程的完整形式化贝尔曼的工作还依赖于另一个数学工具马尔可夫决策过程。MDP的形式化定义包括状态空间S、动作空间A、转移概率P、奖励函数R、折扣因子γ。这个框架在1957年前后基本成型后来成为强化学习的标准语言。MDP的核心假设是马尔可夫性未来状态只依赖于当前状态和动作与更早的历史无关。这个假设在实际问题中经常不成立比如部分可观测环境、长程依赖任务。但MDP提供了一个可计算的起点后续的POMDP、历史依赖模型都是在它基础上扩展的。我在实际项目中遇到过很多次“状态设计不合理导致马尔可夫性被破坏”的情况这时候要么重新设计状态表示要么引入RNN来编码历史。但无论如何你得先理解MDP假设了什么才能知道什么时候该打破它。5. 1957年之后的回响这些早期思想如何塑造了今天的深度强化学习5.1 从效果律到奖励塑形桑代克的效果律在今天最直接的应用就是奖励塑形。深度强化学习里稀疏奖励是最让人头疼的问题之一。比如让机械臂抓取物体只有成功抓取才有奖励智能体可能探索几百万步都碰不到一次成功。这时候就需要设计中间奖励比如“手靠近物体给0.1分手指闭合给0.2分”。这个思路的源头就是次级强化和效果律。但奖励塑形有个坑如果你设计的中间奖励与最终目标不一致智能体会学会刷分而不是完成任务。我见过一个案例训练机器人走路设计者给“身体高度”加了奖励结果机器人学会了蹲着走因为蹲着高度低但稳定能持续拿分。这就是奖励塑形没设计好导致的局部最优。解决办法是参考势能函数的方法把中间奖励设计成势能差保证最优策略不变。5.2 从跳棋机到AlphaGo香农的跳棋机用的是极小极大搜索AlphaGo用的是蒙特卡洛树搜索加深度网络。表面上看差别很大但核心逻辑是一样的用评估函数来指导搜索。AlphaGo的价值网络估计局面好坏策略网络给出候选动作MCTS负责探索。这个架构里价值网络就是香农评估函数的深度版本策略网络就是搜索的引导。区别在于AlphaGo的价值网络是通过自我对弈学习出来的而不是手工设计的。这又回到了图灵的想法让机器通过试错来学习而不是直接编程。所以你看1950年代的三个想法——评估函数、试错学习、反馈回路——在AlphaGo身上全部汇合了。5.3 从贝尔曼方程到DQN的损失函数DQN的损失函数是L E[(r γ * max_a Q(s,a) - Q(s,a))^2]这个式子就是贝尔曼方程的采样版本。r γ * max Q(s,a) 是目标值Q(s,a)是预测值损失是两者的均方误差。如果你不理解贝尔曼方程你就不知道为什么目标值要这么算也不知道为什么γ要小于1保证收敛更不知道为什么DQN要用经验回放打破样本相关性近似独立同分布。我在教别人DQN的时候通常会先让他们手推一遍贝尔曼方程再用numpy实现一个表格版的Q-Learning最后才上神经网络。这个过程走下来他们对loss的理解会深很多调参的时候也更有方向感。6. 实操复盘用表格版Q-Learning复现1957年的核心思想6.1 环境设计一个简化的跳棋游戏为了把上面的历史线索串起来我设计了一个极简的跳棋环境。棋盘是3x3的格子智能体从左下角出发目标是走到右上角。每走一步奖励-1到达目标奖励10。动作空间是上下左右四个方向撞墙则留在原地。这个环境足够简单可以用表格存储Q值也足够体现贝尔曼方程的核心逻辑。状态表示就是智能体的坐标(i,j)总共9个状态。Q表是一个9x4的矩阵初始化为0。折扣因子γ设为0.9学习率α设为0.1探索率ε从1.0逐渐衰减到0.1。6.2 核心代码实现与逐行解读import numpy as np # 环境参数 n 3 gamma 0.9 alpha 0.1 epsilon 1.0 epsilon_decay 0.995 epsilon_min 0.1 # Q表初始化 Q np.zeros((n*n, 4)) # 动作定义0上1下2左3右 actions [(-1,0),(1,0),(0,-1),(0,1)] def step(state, action): i, j divmod(state, n) di, dj actions[action] ni, nj idi, jdj if 0 ni n and 0 nj n: next_state ni*n nj else: next_state state if next_state n*n - 1: reward 10 else: reward -1 return next_state, reward # 训练循环 for episode in range(5000): state 0 while state ! n*n - 1: if np.random.rand() epsilon: action np.random.randint(4) else: action np.argmax(Q[state]) next_state, reward step(state, action) # 贝尔曼更新 Q[state, action] alpha * (reward gamma * np.max(Q[next_state]) - Q[state, action]) state next_state epsilon max(epsilon_min, epsilon * epsilon_decay) print(训练完成Q表) print(Q)这段代码的核心就是那一行更新Q[state, action] alpha * (reward gamma * np.max(Q[next_state]) - Q[state, action])它做的事情就是用采样来近似贝尔曼方程。reward gamma * max Q[next_state] 是目标值Q[state, action]是当前估计alpha控制更新步长。跑5000个episode后Q表会收敛到最优值智能体从任何位置都能走到目标。6.3 参数选择背后的逻辑γ0.9意味着智能体看重未来大约10步的奖励。如果γ太小比如0.5智能体会变得短视可能宁愿原地打转也不愿意走向目标。如果γ太大比如0.99在长程任务里方差会很大收敛变慢。这个权衡在深度强化学习里同样存在比如Atari游戏通常用0.99机器人控制用0.95到0.99之间。α0.1是一个比较保守的学习率。如果α太大Q值会震荡如果太小收敛太慢。在实际项目中我通常会用0.01到0.1之间的值配合学习率衰减。ε从1.0衰减到0.1保证前期充分探索后期稳定利用。这个衰减策略在DQN里通常用线性衰减或者指数衰减具体选哪个取决于任务复杂度。7. 常见问题与排查技巧实录7.1 Q值不收敛怎么办最常见的原因是学习率太大或者奖励尺度不合理。如果奖励是10和-1Q值范围可能在几十到几百用0.1的学习率没问题。但如果奖励是1000和-1Q值会爆炸需要先把奖励归一化到[-1,1]或者[0,1]。另一个原因是状态表示不满足马尔可夫性比如状态里缺少关键信息导致智能体无法区分不同情况。这时候需要增加状态维度或者引入历史信息。7.2 智能体学会“刷分”怎么办这是奖励设计的问题。比如上面的跳棋环境如果我把每步奖励改成0只有到达目标才给10智能体可能会学会原地不动因为不动没有惩罚。解决办法是加一个时间惩罚每步-1这样原地不动会累积负奖励智能体被迫走向目标。这个技巧在强化学习里叫生存奖励几乎所有任务都需要。7.3 探索率衰减太快导致局部最优如果ε衰减太快智能体可能还没探索到最优路径就停止探索了。我通常的做法是先跑几百个episode纯随机探索把Q表初始化到一个合理的范围然后再开始衰减。另一个技巧是用softmax策略代替ε-greedy根据Q值大小按概率选择动作Q值高的动作被选中的概率大但低Q值动作也有机会被选中。这样探索更平滑不容易陷入局部最优。7.4 表格版和神经网络版的区别表格版Q-Learning要求状态空间离散且有限。如果状态是连续的比如机器人关节角度表格就存不下了。这时候需要用函数逼近比如神经网络。但神经网络版会引入新的问题样本相关性和非平稳目标。DQN用经验回放解决样本相关性用目标网络解决非平稳目标。这两个技巧在表格版里不需要因为表格更新是逐个状态进行的天然满足独立同分布假设。8. 从历史到实践我个人的几点体会把1911到1957这段历史梳理下来我最大的感受是强化学习的每一个核心概念都不是凭空出现的而是从具体问题里长出来的。桑代克要解释猫为什么学得快所以提出了效果律香农要让机器下棋所以设计了评估函数贝尔曼要解决多阶段决策所以推导了贝尔曼方程。这些概念后来被抽象、被统一成了今天的强化学习框架。我在实际项目中遇到问题时经常会回到这些原始动机去想一想。比如奖励设计不合理我会问自己桑代克会怎么设计这个实验如果猫只有到达终点才有奖励它还能学会吗大概率不能。所以中间奖励是必要的。再比如探索策略我会想巴甫洛夫的狗如果只对铃声反应不对新刺激反应它能学到新东西吗不能。所以探索必须持续存在。最后分享一个我常用的调试技巧把Q表打印出来看。表格版的好处是可视化你能直接看到每个状态的价值估计。如果某个状态的价值明显不合理比如离目标很近但Q值很低那说明更新过程有问题。这个技巧在神经网络版里也能用只不过要把网络输出在几个关键状态上采样出来看。很多时候问题就藏在这些细节里。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑