
1. 从一只猫说起为什么1911年值得被写进强化学习的历史很多人第一次接触强化学习是从Q-Learning、DQN或者PPO这些算法名字开始的觉得这门学科是最近十几年才随着深度学习火起来的。但如果你真的去翻它的家谱会发现它的根扎得比想象中深得多——深到1911年深到一只猫身上。这只猫不是随便哪只猫而是行为主义心理学里那个著名的迷箱猫。把一只饥饿的猫放进一个带机关的箱子里箱门可以通过按压杠杆或者拉动绳子打开门外放着食物。猫一开始在里面乱抓乱撞偶然碰到机关门开了它跑出去吃了东西。然后再把它放回去第二次、第三次……猫打开门的时间越来越短最后几乎一进去就直奔机关。这个实验记录下来的试错—反馈—行为固化过程就是强化学习最原始的思想原型智能体通过与环境交互根据结果的好坏来调整自己的行为策略。我之所以坚持把1911年作为这条时间线的起点是因为在这一年这种从经验中学习的机制第一次被系统地、可重复地观察和记录了下来。它和后来Bellman方程里那个冷冰冰的数学符号其实说的是同一件事——只不过一个用的是猫一个用的是公式。这篇文章要聊的就是1911到1957这将近半个世纪里强化学习的思想是怎么从心理学实验台一步步走到数学方程和工程机器上的。核心线索有三条行为主义的试错学习、跳棋机这样的早期自学习机器、以及Bellman动态规划方程的诞生。这三条线在1957年前后交汇才真正搭起了现代强化学习的骨架。如果你是对强化学习感兴趣但一直被各种算法公式劝退的初学者或者你已经在用深度强化学习做项目、但想搞清楚这些方法从哪来、为什么长这样的从业者这段历史都值得花时间捋一遍。因为很多今天看起来理所当然的设计——比如奖励价值策略迭代——它们的合理性恰恰藏在这段历史里。2. 行为主义埋下的种子试错学习如何被科学化2.1 桑代克的迷箱实验到底证明了什么爱德华·桑代克在1911年前后系统发表的迷箱实验核心贡献不是猫会开门这个现象本身而是他提出的效果律。用今天的话翻译一下如果一个行为带来了满意的结果这个行为被重复的概率就会上升如果带来了不满意的结果被重复的概率就会下降。这句话听起来朴素得像是常识但它的意义在于它把学习从玄学的思辨里拽了出来变成了一个可以用实验观测、可以用变量控制的过程。桑代克记录的是学习曲线——横轴是尝试次数纵轴是逃出箱子所需的时间。这条曲线单调下降而且下降的速度和形状是可以被量化的。我在带新人的时候经常拿这个举例你今天写一个强化学习的训练脚本打印出来的reward曲线本质上就是桑代克那条学习曲线的现代版本。只不过他的智能体是猫动作空间是抓、咬、拉、压奖励是跑出去吃到鱼。形式变了内核没变。2.2 从效果律到强化这个词的正式登场强化reinforcement这个词并不是桑代克发明的而是后来行为主义心理学在完善这套理论时逐步确立的术语。它的关键含义是某个结果对行为的增强作用。正强化让行为更可能发生负强化通过移除不愉快刺激来增强行为——注意负强化不是惩罚这个区分到今天还有很多人搞混。为什么这个区分对做强化学习的人重要因为你在设计reward函数的时候本质上就是在设计强化机制。你给智能体一个正奖励是在做正强化你通过每走一步扣一点分来逼它尽快完成任务其实是在用负强化的思路。很多reward shaping的坑根源就在于没想清楚自己到底在强化什么行为。2.3 这段心理学遗产给强化学习留下了什么行为主义给强化学习留下的最大遗产是**交互—反馈—调整这个闭环框架**。智能体不是被动地接收数据而是主动地采取动作动作改变环境状态环境返回奖励智能体根据奖励调整策略。这个循环就是后来所有强化学习算法的通用结构。第二个遗产是延迟奖励的概念。猫不是一碰到机关就立刻吃到鱼中间有个时间差。这个时间差意味着智能体必须解决功劳分配问题——到底是哪一步动作导致了最终的好结果这个问题后来成了强化学习的核心难题之一也是Bellman方程要解决的东西。第三个遗产是探索与利用的张力。猫如果一直只按压那个已经成功的杠杆它可能永远发现不了更快的开门方式。它必须在用已知的好方法和试试新方法之间做权衡。这个张力就是今天epsilon-greedy、UCB、熵正则化这些探索策略要处理的问题。3. 跳棋机第一台会自学的机器长什么样3.1 为什么是跳棋而不是象棋在讲跳棋机之前先回答一个很多人会问的问题为什么早期的自学习机器大多选择跳棋这类游戏而不是更复杂的任务原因很实际。第一规则明确、状态空间相对可控。跳棋的合法走法、胜负判定都是清晰的不需要处理模糊的现实世界输入。第二反馈信号明确。赢了就是赢了输了就是输了奖励信号天然存在不需要人为设计复杂的reward。第三计算资源有限。那个年代的机器算力极其有限跳棋的规模刚好卡在能算得动和有挑战性之间。这其实给今天做强化学习项目的人一个启示选任务的时候优先选那些奖励信号清晰、状态可枚举、规则稳定的场景。我见过太多人一上来就想用强化学习做复杂的机器人控制或者开放域对话结果卡在reward设计上几个月出不来。先从规则清晰的小任务跑通闭环比什么都重要。3.2 跳棋机的核心机制用价值来指导走子早期跳棋机的关键设计思想不是去穷举所有可能的走法而是给每个棋盘局面打一个分——这个分数代表从这个局面出发我赢的可能性有多大。然后走子的时候选择那个能让局面分数最高的动作。这个局面分数就是今天价值函数的雏形。它的精妙之处在于你不需要知道整盘棋怎么下完只需要能比较两个局面的好坏就能做出还不错的决策。这大大降低了问题的复杂度。更关键的是这个分数不是人手工写死的而是通过自我对弈、根据胜负结果反向调整出来的。赢了就把导致胜利的那些局面的分数调高输了就调低。这就是最朴素的时序差分学习思想——用后续局面的估值来更新当前局面的估值。3.3 从跳棋机到Bellman方程中间差了什么跳棋机证明了机器可以通过自我对弈变强这件事是可行的但它还停留在工程直觉层面。它没有回答几个根本问题这个局面分数到底应该满足什么数学性质更新规则为什么是这样有没有更优的更新方式在什么条件下这种迭代最终会收敛到一个稳定的、正确的估值这些问题需要一套严格的数学语言来回答。而这套语言就是Bellman在1950年代给出的动态规划框架。跳棋机是术Bellman方程是道。没有道术就只能停留在个案有了道术才能被推广、被证明、被优化。4. Bellman方程把走一步看一步变成可计算的数学4.1 动态规划要解决的核心矛盾Bellman在1957年前后系统提出的动态规划面对的是一个非常普遍的问题多阶段决策。你有一系列决策要做每个决策影响后续的状态最终的总收益取决于所有决策的组合。你怎么做才能让总收益最大暴力枚举所有可能的决策序列在决策数量稍微大一点的时候就彻底不可行了。动态规划的天才之处在于它发现这类问题有一个最优子结构性质从某个状态出发的最优决策只依赖于这个状态本身而不依赖于你是怎么到达这个状态的。换句话说你不需要记住历史只需要知道现在在哪。这个性质就是马尔可夫性的来源。它把考虑所有历史路径的指数级复杂度压缩成了对每个状态求一次最优值的多项式级复杂度。这是强化学习能够实际运行的理论基石。4.2 Bellman方程到底在说什么Bellman方程的核心形式用大白话讲就是一个状态的价值 你立刻能拿到的奖励 折扣后你到达的下一个状态的价值。写成公式就是那个经典的 V(s) R(s) γ · max V(s)。这里有几个点必须掰开说第一为什么是下一个状态的价值而不是整条路径的奖励因为有了最优子结构你不需要算完整条路径。你只需要知道下一步去哪最好然后信任那个最好的估值是准的。这是一种递归思想——把长链条的问题拆成一步加一个子问题。第二折扣因子γ是干什么的它控制你对未来奖励的重视程度。γ接近0智能体变得短视只看眼前γ接近1智能体变得有远见愿意为长期收益牺牲当下。这个参数在实操中极其敏感我后面会专门讲怎么调。第三max这个操作意味着什么它意味着你在每个状态都假设自己会做出最优选择。这就是最优价值函数的定义。对应的还有策略价值函数那个版本里不是取max而是按照当前策略的动作概率做加权平均。4.3 值迭代与策略迭代两种求解思路的取舍有了Bellman方程怎么实际把它解出来经典方法有两个值迭代和策略迭代。值迭代的思路很直接随便初始化所有状态的价值然后反复用Bellman方程更新直到价值不再变化。它的每一次迭代都是一次全状态扫描实现简单但收敛可能慢。策略迭代则分两步走先做策略评估在当前策略下算出所有状态的价值再做策略改进根据价值选出更好的动作。它每次迭代的计算量大但迭代次数通常更少。对比维度值迭代策略迭代每次迭代成本低高迭代次数多少实现难度简单稍复杂适用场景状态空间大、精度要求不高状态空间小、需要精确策略我在实际项目里的经验是状态空间小的时候用策略迭代收敛快且策略稳定状态空间大的时候用值迭代或者它的近似版本因为策略迭代里那个策略评估步骤在大空间下太贵了。而现代深度强化学习里的很多方法本质上都是值迭代的近似版本——用神经网络来近似那个价值函数避免了对每个状态单独存储和更新。5. 1957年前后三条线是怎么汇到一起的5.1 时间线上的巧合与必然1957年是个有意思的节点。这一年Bellman的动态规划理论已经成型行为主义的试错学习理论已经成熟早期自学习机器的工程实践也积累了不少经验。这三条线本来是各自独立发展的但它们在1957年前后开始互相引用、互相支撑。行为主义提供了学习是什么的框架跳棋机提供了机器能学的证据Bellman方程提供了怎么算的工具。三者合在一起才构成了一个完整的学科雏形有理论、有方法、有验证。5.2 为什么说这是强化学习的史前史严格来说1957年还没有强化学习这个学科名字。这个名字要到更晚才被正式确立。但1957年之前积累的这些思想已经包含了强化学习的全部核心要素智能体与环境的交互循环来自行为主义通过试错和奖励信号调整行为来自效果律用价值函数来指导决策来自跳棋机用动态规划递归求解最优策略来自Bellman后来的Q-Learning、SARSA、Actor-Critic、DQN、PPO本质上都是在这四个要素上做文章——要么改进价值函数的表示要么改进策略更新的方式要么改进探索策略要么把它和深度学习结合。骨架没变血肉越来越丰富。5.3 这段历史对今天做强化学习的人意味着什么我自己的体会是理解了这段历史你在调参和排错的时候会更有方向感。比如你的智能体学不会你可以沿着这条历史线索往回查是奖励信号设计得不对行为主义层面的问题是价值函数近似得不好跳棋机层面的问题还是Bellman更新里的折扣因子或者学习率设置有问题动态规划层面的问题这三个层面对应的是三类完全不同的排查方向。再比如你纠结要不要用model-based方法回到Bellman那里看动态规划本身就是model-based的——它假设你知道状态转移概率。如果你不知道转移概率就得用model-free方法去估计。这个区分在1957年的框架里就已经埋下了。6. 从历史到实操几个能直接用的经验6.1 折扣因子γ到底怎么设这是被问得最多的问题之一。我的经验是先根据任务的有效视野来估一个上限。假设你的任务平均需要走T步才能拿到关键奖励那么γ的取值应该让γ^T不至于太小。一般要求γ^T 0.1反推出来γ 0.1^(1/T)。比如T100γ 0.977。这个值可以作为起点然后在这个附近微调。但要注意γ太接近1会导致价值估计的方差变大训练不稳定。所以实践中经常用0.99作为默认值然后根据任务长度调整。如果任务很短几十步0.9甚至0.95就够了如果任务很长上千步可能要用0.995甚至更高。6.2 奖励设计别让智能体钻空子行为主义告诉我们智能体会强化任何带来奖励的行为——包括你没打算奖励的行为。这就是reward hacking。我踩过的一个坑做一个让智能体尽快到达目标点的任务奖励设成每靠近目标一步加1分。结果智能体学会了在原地来回横跳——因为这样每步都能加分而且永远不会到达目标到达就结束了没分可加了。修复方法是把奖励改成到达目标给大奖励每走一步扣小分。这样横跳就变成了纯亏损。核心原则是奖励要奖励结果而不是奖励过程指标除非你非常确定这个过程指标不会被钻空子。6.3 探索与利用的平衡从猫身上学到的桑代克的猫如果永远只按压那个已经成功的杠杆它就发现不了更优的解法。强化学习里的探索机制就是在防止智能体过早锁定在次优策略上。实操中最简单的探索策略是epsilon-greedy以epsilon的概率随机选动作以1-epsilon的概率选当前最优动作。epsilon通常从1.0开始逐渐衰减到0.1或0.05。但epsilon-greedy有个问题它在探索时是完全随机的可能选到明显很差的动作。更好的做法是用基于不确定性的探索——优先探索那些价值估计不确定的状态动作。这就是UCB和基于计数的方法的思路。在深度强化学习里常用的是给策略加熵正则项鼓励策略保持一定的随机性。6.4 值迭代的收敛判断别死等用值迭代求解的时候怎么判断收敛了理论上是价值不再变化但实际中你不可能等到完全不变。我的做法是设一个阈值当相邻两次迭代的价值变化的最大值小于这个阈值时就认为收敛了。阈值一般取1e-4到1e-6之间。但要注意阈值设得太小会导致迭代次数暴增收益却很小。在工程上够用比精确更重要。另外值迭代的收敛速度受折扣因子影响很大。γ越接近1收敛越慢。如果你发现迭代了几万次还没收敛先检查γ是不是设得太大了。7. 写在最后历史不是装饰是排查问题的地图我刚开始学强化学习的时候也觉得这些历史背景是软知识跟写代码、调模型没什么关系。但做得越久越发现当你卡在一个问题上找不到方向的时候回到这些基础框架里往往能找到线索。智能体不学习先看奖励信号——这是行为主义的问题。价值估计不准先看表示能力和更新规则——这是跳棋机和Bellman的问题。策略不稳定先看探索和折扣——这是动态规划的问题。这三层排查逻辑比盲目调参有效得多。1911到1957这段历史讲的不是一堆过时的老古董而是一套至今仍然管用的思考框架。那只猫、那台跳棋机、那个方程它们提出的问题我们今天还在回答。