AI Hero Club

推理模型与强化学习 · 第 8 章

已自行标记完成0 / 8

仅保存在当前浏览器;完成标记不代表通过项目验收。

本章提纲 8 个小节
全课目录 8 章
完整课程计划 ↗
推理模型与强化学习 / 课程计划 ↗

CHAPTER 08 / 8建议学习 135 分钟

从干净目录复跑到一份不回避失败的报告

怎样从干净目录复跑整个实验,并让最终报告同时保留训练收益与外推失败?

本章要解决的 3 个问题
  • 在独立项目目录重建完整数据、训练、评价和格式检查
  • 建立源码、检查点、指标与测试的同一证据清单
  • 以有限计算成本与明确未运行项目界定课程终点
课程项目 ZIP ↓

先检查下载包是否真能独立运行

课程项目应该是一套完整实验,而不是几段依赖作者电脑隐含路径的代码。下载解压后,目录中包含decoder.py、run.py、lab.py、probe_formats.py、tests.py、README、依赖清单、数据合同、来源记录与evidence。它不导入兄弟课程,不读取网页章节JSON才能运行,也不要求外部模型或密钥。decoder虽然来自本套件自己的Transformer教学实现,已经按字节复制到项目并记录来源,学生不必再找另一个下载包补依赖。

环境要求Python至少3.11与PyTorch2.6.0;核心项目本身不用NumPy或Pillow,不能照抄其他课程依赖导致不必要安装。记录的实跑环境是Python3.12.14、PyTorch2.6.0、CPU单线程。不同硬件和库版本可能改变浮点细节或随机序列,严格重放应使用相同环境;功能复现则检查概率归一、梯度恒等式、参考冻结和评价方向,并保存新环境信息。不能没跑过就写成跨平台全部通过。

一次完整复跑的输入输出闭环

先运行stdlib lab.py,它不需要神经网络依赖,验证三个动作的解析梯度、有限差分以及组均值/留一基线的精确枚举。再运行tests.py,它包含验证器、数据划分、因果mask、采样重放、路径评分、KL梯度两路、冻结检查点以及短训练闭环。最后用run.py train --output my-run运行完整40加100步,得到新检查点和报告;evaluate重读它,probe_formats对同一新权重输出序列化压力测试。

所有命令从项目根目录运行,--output是显式实验目录。随包evidence是讲义引用的冻结原始结果,新实验写my-run,不覆盖它。输出检查点保存当前策略与参考,结果JSON保存配置、数据摘要、预算、分阶段指标、梯度和参数变化。格式报告不是训练的一部分,不修改权重;同一检查点可以反复只读评价,验证“报告数字属于这份权重”,而不是只相信训练时打印的一行摘要。

算例一:把报告中一句话追到实际文件

报告说“RL更新全部十七个参数张量”。先到results.json读取rl_tensor_max_updates,核对每个值正;再查看history最后一批tensor_gradient_norms,核对每个有限非零;最后用checkpoint重建模型,parameter_count确为2768,named_parameters确为十七个。还要检查参考哈希与加载参考模型一致、reference_unchanged为真。只有trainable计数没有梯度和差值,是意图声明,尚不足以证明实际更新发生。

报告说“测试平均成功概率0.0000325802”。运行evaluate加载同一checkpoint,对五题各一百路径重新前向,验证每题概率和接近一,把严格成功路径质量平均,得到同一量。若只是读取results.json再打印它,就没有独立重算,测试很可能把旧错误原封不动复制一遍。本项目冻结测试确实重新调用模型和验证器计算,其他统计也保留逐题数据,便于读者另写独立核对。

清单能证明联系,不能证明真理

evidence/source-manifest.json记录学生源码、README、协议、检查点、数值报告、格式压力结果以及八章讲义的SHA-256。每条明确相对路径、字节数和摘要。它绑定本次材料,能发现源码后来变化、指标被替换或检查点串台;但摘要不能证明数学推导正确,也不能替代正例、反例、梯度检查和独立评价。课程网页打包还会生成单独ZIP清单,二者用途是追踪不同交付边界。

清单不把未来由网页维护者生成的code-verification、math-verification或下载复跑文件循环纳入自身,否则每次独立验证写入耗时字段就会让旧清单失效,甚至形成自引用。原始作者证据与独立验证证据并列保留,发现变化时重新冻结相应源文件,而不是篡改旧时间或借“自动更新”掩盖来源。项目的完整性意味着链条可解释,不是所有文件必须永久拥有同一个总哈希。

算例二:最小反例足以击穿一个宽泛说法

假设有人说“模型已经掌握二步加法推理,因为训练贪心19/20”。拿冻结测试二加二即可反驳其普遍说法:正确[4,8,EOS],实际贪心[6,2,EOS]。这一个反例足以否定“所有本域输入都掌握”的全称命题,却不能估计自然数学题总体准确率。项目同时给出整个五题测试集精确概率,使失败不只停留在挑一张差例的层面。

另一个说法是“采用组相对比较就等于复现了GRPO”。查看run.py实际损失,只有on-policy采样、留一回报基线与轨迹score,不存在旧策略多轮概率比、PPO裁剪或组标准差归一,因此算法名称不成立。能解释原始论文不等于复现实验。课程把PPO/GRPO公式当导入机制,本项目则清楚命名自己的有限算法,这种区分比给微型实验贴前沿名称更能帮助以后迁移。

资源成本和停止条件

在当前RAM式计算模型中,设每步动作数K、随机长度L,一次全路径枚举有K的L次方条路径,每条需要相应前向评分;本项目K10、L2仅一百条,长文本会指数爆炸。训练采样成本按B乘G乘L个响应动作增长,模型前向还随上下文长度和隐藏宽度变化。不能用“一百条很便宜”推断真实推理RL的全分布评价可行。有限时间也来自固定40和100步循环、每条固定两步,不依赖回答中自报“我已完成”。

验证器处理固定长度列表、小整数和常数次算术,因此没有复杂表达式、除零或递归爆炸问题。若改成自由算式验证器,必须重新规定长度、树节点、整数位数和操作白名单;若改成自然语言证明,还需独立的语义或形式验证器。将这些新问题留在明确边界内,比假装本课程三行验证能覆盖所有推理任务更诚实,也给后续扩展提供明确接口。

出错时怎样定位而不是重跑到满意

若lab解析与差分不符,先查概率归一与score符号;若路径概率和不为一,查采样和评分支持是否一致;若参考哈希变,查deepcopy、优化器参数集合和共享张量;若训练结果飘,查种子、线程、dropout、步数、数据摘要与依赖版本。若代码全部通过但测试失败,则应保留模型能力失败,不能再把它当成软件故障一律重跑。错误类别不同,处置依据也不同。

本项目确实出现过一个验收设计问题:极短两步烟雾训练硬要求所有张量变化,在全零奖励、参考相同的情况下不成立。修复的是测试断言,改为检查流程和有限值;完整冻结训练仍要求实际十七张量更新并已满足。这个例子说明测试也需要理论审查,不能为了绿色勾号给奖励加噪声或改训练目标。issue记录把此区分写清,避免后人把一个无信号对照误判为失败。

完整交付的通过、失败与未运行

已通过的是明确合同内的软件和数学检查:严格验证、无交集划分、有限梯度恒等式、留一估计、因果评分、采样重放、参考冻结、完整网络更新与独立权重评价。已失败的是本次训练达到和为四外推目标、保持提示格式变化下稳定正确。未运行的是多训练种子、自然语言数学、自由长度推理、GPU、大模型、远程API以及完整PPO/GRPO复现。三类状态必须同时出现,不能用单个“全部完成”模糊不同层次。

这八章的终点是读者能独立重建并审计一次推理强化学习的小实验:从有限样本空间和验证器出发,推导score、基线和KL,接到真实共享参数解码器,运行固定预算并判断其能力边界。项目失败并不使教程不完整;隐藏失败、缺失依赖或不闭合推导才使教程不完整。读者拿走的应当是一条可检查的因果与证据链,以及在链条某处不成立时能准确指出哪里出了问题的能力。

终端命令从项目根目录完整复跑,不覆盖随包evidence
python lab.py
python tests.py
python run.py train --output my-run
python run.py evaluate --output my-run --split train
python run.py evaluate --output my-run --split test
python probe_formats.py --checkpoint my-run --output my-run/format-probes.json
在课程项目目录运行可直接运行的检查
import json
from pathlib import Path
from run import load, hash_model, evaluate, ROOT
r=json.loads((ROOT/"evidence/results.json").read_text())
m,q=load(ROOT/"evidence")
assert hash_model(q)==r["reference_hash"]
actual=evaluate(m,q,"test")["mean_exact_success"]
assert abs(actual-r["after"]["test"]["mean_exact_success"])<1e-10
print("recomputed",actual)

TRY IT YOURSELF

练习一:识别伪独立评价

一个evaluate命令只读results.json打印旧数值,为何不够?

提示 1
读取旧报告与重新从权重执行,哪条路径能发现旧报告计算错?
提示 2
列出加载checkpoint、构建轨迹、计算概率、独立验证奖励的步骤,并检查来源身份。
对照参考解答
它没有重新从checkpoint运行模型、构造全部路径、计算概率和验证奖励,因此旧报告错误会原样重复。真正独立评价应加载权重重算,并对照数据摘要、参考摘要与概率归一。项目测试使用后一条路线。

TRY IT YOURSELF

练习二:复杂度扩展

十动作、二步100路径。十动作、二十步是多少?说明什么边界?

提示 1
每步有10个选择时,路径树每加一步扩大多少倍?
提示 2
写10的步数次方并比较两步与二十步,再说明小空间精确枚举在长响应中遇到的成本。
对照参考解答
路径数10的20次方,即一万个亿亿条量级,完整枚举不可实际承受。小协议的精确KL与期望不能直接扩到长文本,需要采样估计及其误差分析。真实成本还乘每条网络前向,不能只数路径不计模型计算。

TRY IT YOURSELF

练习三:交付状态

把“软件测试通过”“外推失败”“多种子未跑”写成互不冲突的一段话。

提示 1
实现检查、任务结果与未做实验回答的是三个不同问题。
提示 2
分别给每项环境/样本边界与状态;不以测试通过覆盖外推失败,也不以未跑多种子否定已测机制。
对照参考解答
指定环境下12项项目测试通过,源码和冻结权重可独立评价,支持实现正确性;本次固定预算在训练域改善,但五题组合外推未达到目标;多训练种子和自然任务没有运行,因此不作这些层面的稳定收益或泛化宣称。三者回答不同问题,可以同时成立。

CHECK YOUR UNDERSTANDING

检验理解

先作答,再决定是否展开解析。选择题用于发现理解缺口;独立实现与迁移任务仍需另行检验。

1. 源清单SHA能证明什么?

查看解析摘要检验字节完整性,不能替代数学和实验。
2. 短训练全零信号时怎样修验收?

查看解析没有信号时零更新是正确对照,测试要求也需有理论依据。
3. 十动作二十步路径数是多少?

查看解析有限枚举呈指数增长,这是不能外推到长文本的核心边界。
4. 本课程是否已经复现完整PPO/GRPO?

查看解析名称取决于实际目标和更新协议,不取决于使用了几个相似术语。

自行标记用于记录学习进度,不代表通过项目验收。