/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */
#content_views .toc,
/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */
#content_views.markdown_views > p:empty:has(+ .toc),
#content_views.markdown_views > .toc + p:empty,
/* 富文本旧版目录标记 */
#content_views.htmledit_views #main-toc,
#content_views.htmledit_views #hr-toc,
#content_views.htmledit_views p[id*=\”-toc\”] {
display: none !important;
}
/* 目录去掉后,紧跟的首个标题不再多出一块上边距 */
#content_views.markdown_views > .toc + h1,
#content_views.markdown_views > .toc + h2,
#content_views.markdown_views > .toc + h3,
#content_views.markdown_views > .toc + h4,
#content_views.markdown_views > .toc + p:empty + h1,
#content_views.markdown_views > .toc + p:empty + h2,
#content_views.markdown_views > .toc + p:empty + h3,
#content_views.markdown_views > .toc + p:empty + h4 {
margin-top: 0 !important;
}

目录
摘要
内化指用带推理步骤的数据微调,让模型直答能力上升,从需要展开走向一步直出。 本文沿 STaR、逐步蒸馏、过程监督、Implicit CoT 四条工作梳理回炉机制、可测判据与工程管线。 三笔代价与闸门设计,决定了内化应该停在哪一步。
1. 内化是什么与不是什么
学骑车的人先默念口诀,骑熟后口诀消失,动作直接出来。 模型也有这条路:先用显式推理展开,再靠训练把步骤压进权重。 压完后不必展开,见题直接给答案。这个过程就是本文的主角:内化。
它是系列里「双向转化」的一个方向。第 1 篇的闭环状态机中,外显化把直觉摊开成轨迹,内化把轨迹折回直觉。本文只讲折回去这半圈。
1.1 从展开到直出
内化的定义很朴素:用带推理步骤的数据微调,模型的直答能力随之上升。 所谓直答,就是不写中间步骤,读完题一口气给出最终答案。
展开的价值有实证。Wei 等 2022 年证明,给大模型几个带理由的示例,数学题成绩大幅提升(arXiv 2201.11903)。540B 模型只用 8 个示例,就拿到 GSM8K 当时最佳。
但展开有代价。每道题多生成几百个 token,延迟和费用跟着涨。交互式产品里,这个成本每天都发生。
内化要解决的正是这个矛盾。先让模型学会展开,再把展开过程折进参数。折得好,正确率留在权重里,生成成本降回直答水平。
内化不是开关,是渐进过程。工程上常呈现三段位置:全显式、混合、全内化。下图从左到右就是这条路线,虚线标出两个容易误认成内化的情形。
#mermaid-svg-k5E2Ns7uBRpQNwjn{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-k5E2Ns7uBRpQNwjn .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-k5E2Ns7uBRpQNwjn .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-k5E2Ns7uBRpQNwjn .error-icon{fill:#552222;}#mermaid-svg-k5E2Ns7uBRpQNwjn .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-k5E2Ns7uBRpQNwjn .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-k5E2Ns7uBRpQNwjn .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-k5E2Ns7uBRpQNwjn .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-k5E2Ns7uBRpQNwjn .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-k5E2Ns7uBRpQNwjn .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-k5E2Ns7uBRpQNwjn .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-k5E2Ns7uBRpQNwjn .marker{fill:#333333;stroke:#333333;}#mermaid-svg-k5E2Ns7uBRpQNwjn .marker.cross{stroke:#333333;}#mermaid-svg-k5E2Ns7uBRpQNwjn svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-k5E2Ns7uBRpQNwjn p{margin:0;}#mermaid-svg-k5E2Ns7uBRpQNwjn .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-k5E2Ns7uBRpQNwjn .cluster-label text{fill:#333;}#mermaid-svg-k5E2Ns7uBRpQNwjn .cluster-label span{color:#333;}#mermaid-svg-k5E2Ns7uBRpQNwjn .cluster-label span p{background-color:transparent;}#mermaid-svg-k5E2Ns7uBRpQNwjn .label text,#mermaid-svg-k5E2Ns7uBRpQNwjn span{fill:#333;color:#333;}#mermaid-svg-k5E2Ns7uBRpQNwjn .node rect,#mermaid-svg-k5E2Ns7uBRpQNwjn .node circle,#mermaid-svg-k5E2Ns7uBRpQNwjn .node ellipse,#mermaid-svg-k5E2Ns7uBRpQNwjn .node polygon,#mermaid-svg-k5E2Ns7uBRpQNwjn .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-k5E2Ns7uBRpQNwjn .rough-node .label text,#mermaid-svg-k5E2Ns7uBRpQNwjn .node .label text,#mermaid-svg-k5E2Ns7uBRpQNwjn .image-shape .label,#mermaid-svg-k5E2Ns7uBRpQNwjn .icon-shape .label{text-anchor:middle;}#mermaid-svg-k5E2Ns7uBRpQNwjn .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-k5E2Ns7uBRpQNwjn .rough-node .label,#mermaid-svg-k5E2Ns7uBRpQNwjn .node .label,#mermaid-svg-k5E2Ns7uBRpQNwjn .image-shape .label,#mermaid-svg-k5E2Ns7uBRpQNwjn .icon-shape .label{text-align:center;}#mermaid-svg-k5E2Ns7uBRpQNwjn .node.clickable{cursor:pointer;}#mermaid-svg-k5E2Ns7uBRpQNwjn .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-k5E2Ns7uBRpQNwjn .arrowheadPath{fill:#333333;}#mermaid-svg-k5E2Ns7uBRpQNwjn .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-k5E2Ns7uBRpQNwjn .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-k5E2Ns7uBRpQNwjn .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-k5E2Ns7uBRpQNwjn .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-k5E2Ns7uBRpQNwjn .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-k5E2Ns7uBRpQNwjn .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-k5E2Ns7uBRpQNwjn .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-k5E2Ns7uBRpQNwjn .cluster text{fill:#333;}#mermaid-svg-k5E2Ns7uBRpQNwjn .cluster span{color:#333;}#mermaid-svg-k5E2Ns7uBRpQNwjn div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-k5E2Ns7uBRpQNwjn .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-k5E2Ns7uBRpQNwjn rect.text{fill:none;stroke-width:0;}#mermaid-svg-k5E2Ns7uBRpQNwjn .icon-shape,#mermaid-svg-k5E2Ns7uBRpQNwjn .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-k5E2Ns7uBRpQNwjn .icon-shape p,#mermaid-svg-k5E2Ns7uBRpQNwjn .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-k5E2Ns7uBRpQNwjn .icon-shape .label rect,#mermaid-svg-k5E2Ns7uBRpQNwjn .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-k5E2Ns7uBRpQNwjn .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-k5E2Ns7uBRpQNwjn .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-k5E2Ns7uBRpQNwjn :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}#mermaid-svg-k5E2Ns7uBRpQNwjn .default>*{fill:#faf9f5!important;stroke:#ffffff!important;color:#000000!important;stroke-width:0px!important;}#mermaid-svg-k5E2Ns7uBRpQNwjn .default span{fill:#faf9f5!important;stroke:#ffffff!important;color:#000000!important;stroke-width:0px!important;}#mermaid-svg-k5E2Ns7uBRpQNwjn .default tspan{fill:#000000!important;}
全显式 每题展开轨迹
混合 简题直答 难题展开
全内化 一步直出
只是换个提示词
只是背下原题答案
图 1-1 内化的三段位置与两个易混情形
解读:实线是真实路径,发生在权重层面,换部署环境仍然成立。虚线两项不碰权重:换提示词只改变时行为,背原题无法泛化到新题,都不算内化。
1.2 认知科学的旧名字
先陈述后直觉的路线,认知科学早就给出了名字。 Anderson 在 1982 年的技能获得理论里提出:技能先以陈述性知识存在,要逐步解释执行;练习后转为程序性知识,直接驱动行为。
转换机制叫知识编译,由两个子过程组成。理论还预测,练习时间随重复次数按幂律下降,练得越多,单次越快。
拨电话的例子最直观。新手先想着号码逐位拨,编译后手指直接按,检索号码这个动作消失了。两个子过程的分工见下表。
| 组合 | 连续多步合并为一步 | 轨迹压缩,步数变少 |
| 程序化 | 把要查的事实嵌进规则 | 步骤写进权重 |
表 1-1 知识编译两子过程与内化的对应
解读:显式 CoT 相当于陈述性阶段,逐步解释执行。回炉微调相当于组合加程序化同时发生,直答直觉则是程序性阶段的产物。
Wikipedia 的 Knowledge compilation 条目讲的是人工智能里的同名概念:离线把逻辑模型编译成查询高效的表示。领域不同,权衡相同:用离线成本换在线效率,用表示可读性换执行速度。
1.3 三条可测判据
内化不能靠感觉判断,要拿指标说话。三条判据把「直觉化」变成可观测的曲线,也构成后面工程管线的监控项。
判据一:同题直答率上升。固定测试集,关掉理由提示,统计直答正确率。判据二:所需轨迹长度缩短。同一批题,平均生成步数逐轮下降。
判据三:触发提示词简化。从带理由示例退到普通示例,再退到零示例,成绩不掉线。三者同向变化,才算真内化。
| 同题直答率 | 固定测试集只给题干 | 逐轮上升 |
| 平均轨迹长度 | 每题生成步数均值 | 逐轮下降 |
| 触发提示规模 | 维持成绩所需示例数 | 逐轮减少 |
表 1-2 内化三判据的度量口径
解读:三条曲线要一起看。只看直答率会误判,因为背题也能抬直答率;轨迹长度和提示规模同时收缩,才说明能力进了权重。
下面的监控器用 mock 数据演示双曲线走势,直答率爬坡与轨迹长度收敛应同步出现。
# 来源:自实现 / internalize_monitor.py(mock 演示,无外部依赖)
import random
def simulate_rounds(n_rounds, seed=7):
"""mock:直答率逐轮上升,平均轨迹长度逐轮收敛"""
random.seed(seed)
rounds = []
direct_rate, avg_len = 0.22, 9.6
for r in range(1, n_rounds + 1):
# 直答率向 0.95 逼近,增速逐轮放缓,符合回炉收益递减
direct_rate += (0.95 – direct_rate) * 0.34
# 轨迹长度向 1 步收敛,叠加少量评估噪声
avg_len = 1.0 + (avg_len – 1.0) * 0.62 + random.uniform(–0.2, 0.2)
rounds.append((r, round(direct_rate, 3), round(max(avg_len, 1.0), 2)))
return rounds
def judge(rounds, rate_floor=0.90, len_ceil=2.0):
"""内化判据:直答率先过线 且 轨迹长度足够短"""
ok = [r for r in rounds if r[1] >= rate_floor and r[2] <= len_ceil]
return ok[0] if ok else None
if __name__ == "__main__":
data = simulate_rounds(8)
print("轮次 直答率 平均轨迹长度")
for r, rate, length in data:
print(f"{r:>4} {rate:>6.1%} {length:>8.2f}")
hit = judge(data)
msg = f"第 {hit[0]} 轮达到内化判据" if hit else "未达判据,继续回炉"
print(msg)
说明:simulate_rounds 用衰减系数模拟收益递减,两条曲线共用同一轮次轴。judge 把表 1-2 里的判据落成代码条件,返回首个达标轮次,直接可用于训练循环里的早停判断。
边界提示:定义与判据都有了,数据从哪来。下一章拆最经典的自举方案。
2. STaR 的自举回炉
带理由的标注很贵,人工写一条高质量轨迹要几分钟。STaR 的回答是:让模型自己造数据,自己回炉。
2.1 自举循环
STaR 是 Self-Taught Reasoner 的缩写,Zelikman 等 2022 年提出(arXiv 2203.14465)。它的原料是两部分:少量带理由的示例,加上大量只有题干和标准答案的题库。
循环从生成开始。模型带着少量示例提示,给题库每道题生成一条带理由的轨迹。然后按最终答案过滤:答案对,轨迹保留;答案错,轨迹先不丢,进入理性化环节。
保留的轨迹汇总成新数据集,微调出新一代模型。新一代再对同一题库生成,质量比上一代好,如此迭代。每转一圈,显式轨迹就往权重里多压一层。
论文数字支撑这条路线。STaR 显著超过直接微调答案的基线;在 CommonsenseQA 上,它打平了约 30 倍规模模型直接微调的成绩。小模型靠自产理由,追上了大模型的蛮力微调。
#mermaid-svg-igZH7OAA6fOpILX1{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-igZH7OAA6fOpILX1 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-igZH7OAA6fOpILX1 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-igZH7OAA6fOpILX1 .error-icon{fill:#552222;}#mermaid-svg-igZH7OAA6fOpILX1 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-igZH7OAA6fOpILX1 .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-igZH7OAA6fOpILX1 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-igZH7OAA6fOpILX1 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-igZH7OAA6fOpILX1 .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-igZH7OAA6fOpILX1 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-igZH7OAA6fOpILX1 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-igZH7OAA6fOpILX1 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-igZH7OAA6fOpILX1 .marker.cross{stroke:#333333;}#mermaid-svg-igZH7OAA6fOpILX1 svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-igZH7OAA6fOpILX1 p{margin:0;}#mermaid-svg-igZH7OAA6fOpILX1 .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-igZH7OAA6fOpILX1 .cluster-label text{fill:#333;}#mermaid-svg-igZH7OAA6fOpILX1 .cluster-label span{color:#333;}#mermaid-svg-igZH7OAA6fOpILX1 .cluster-label span p{background-color:transparent;}#mermaid-svg-igZH7OAA6fOpILX1 .label text,#mermaid-svg-igZH7OAA6fOpILX1 span{fill:#333;color:#333;}#mermaid-svg-igZH7OAA6fOpILX1 .node rect,#mermaid-svg-igZH7OAA6fOpILX1 .node circle,#mermaid-svg-igZH7OAA6fOpILX1 .node ellipse,#mermaid-svg-igZH7OAA6fOpILX1 .node polygon,#mermaid-svg-igZH7OAA6fOpILX1 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-igZH7OAA6fOpILX1 .rough-node .label text,#mermaid-svg-igZH7OAA6fOpILX1 .node .label text,#mermaid-svg-igZH7OAA6fOpILX1 .image-shape .label,#mermaid-svg-igZH7OAA6fOpILX1 .icon-shape .label{text-anchor:middle;}#mermaid-svg-igZH7OAA6fOpILX1 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-igZH7OAA6fOpILX1 .rough-node .label,#mermaid-svg-igZH7OAA6fOpILX1 .node .label,#mermaid-svg-igZH7OAA6fOpILX1 .image-shape .label,#mermaid-svg-igZH7OAA6fOpILX1 .icon-shape .label{text-align:center;}#mermaid-svg-igZH7OAA6fOpILX1 .node.clickable{cursor:pointer;}#mermaid-svg-igZH7OAA6fOpILX1 .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-igZH7OAA6fOpILX1 .arrowheadPath{fill:#333333;}#mermaid-svg-igZH7OAA6fOpILX1 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-igZH7OAA6fOpILX1 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-igZH7OAA6fOpILX1 .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-igZH7OAA6fOpILX1 .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-igZH7OAA6fOpILX1 .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-igZH7OAA6fOpILX1 .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-igZH7OAA6fOpILX1 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-igZH7OAA6fOpILX1 .cluster text{fill:#333;}#mermaid-svg-igZH7OAA6fOpILX1 .cluster span{color:#333;}#mermaid-svg-igZH7OAA6fOpILX1 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-igZH7OAA6fOpILX1 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-igZH7OAA6fOpILX1 rect.text{fill:none;stroke-width:0;}#mermaid-svg-igZH7OAA6fOpILX1 .icon-shape,#mermaid-svg-igZH7OAA6fOpILX1 .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-igZH7OAA6fOpILX1 .icon-shape p,#mermaid-svg-igZH7OAA6fOpILX1 .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-igZH7OAA6fOpILX1 .icon-shape .label rect,#mermaid-svg-igZH7OAA6fOpILX1 .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-igZH7OAA6fOpILX1 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-igZH7OAA6fOpILX1 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-igZH7OAA6fOpILX1 :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}#mermaid-svg-igZH7OAA6fOpILX1 .default>*{fill:#faf9f5!important;stroke:#ffffff!important;color:#000000!important;stroke-width:0px!important;}#mermaid-svg-igZH7OAA6fOpILX1 .default span{fill:#faf9f5!important;stroke:#ffffff!important;color:#000000!important;stroke-width:0px!important;}#mermaid-svg-igZH7OAA6fOpILX1 .default tspan{fill:#000000!important;}
对
错
对
错
下一轮
题库 只有题干和答案
带示例提示生成轨迹
最终答案对吗
保留该条轨迹
给出答案提示重新生成
重推后答案对吗
丢弃
汇总后微调回炉
新一代模型
图 2-1 STaR 自举回炉循环
解读:闭环的关键在过滤节点,只有终答正确的轨迹才进入微调。I 回到 B 的一跳是自举本体:上一轮的产出,是下一轮的老师。
2.2 理性化补救与数据构造
理性化(rationalization)是 STaR 的小补丁,作用不小。第一轮答错的题直接丢弃会浪费,更糟的是难题被系统性排除,模型永远学不会难题。
做法是给答案提示:告诉模型正确答案,让它重新生成一条能推出该答案的理由。重生成的轨迹再过一遍答案过滤,对了就收,错了才真丢。
这样难题也有机会进回炉池,只是路径绕了一下。代价是提示里带了答案,这类轨迹的独立性弱一档,配比时要压低权重。
数据格式需要两套:训练推理用带理由格式,验收直答用纯题干格式。下面的构造器负责两套格式互转,并内置理性化逻辑。
# 来源:自实现 / build_internalize_data.py(mock 演示,无外部依赖)
RATIONALE_HINT = "已知正确答案是 {ans},请给出推出该答案的完整理由"
def to_rationale_form(item):
"""扩格式:题干加理由字段,答案跟在理由后"""
return {"prompt": item["question"],
"rationale": item["rationale"],
"answer": item["answer"]}
def to_direct_form(item):
"""压格式:删掉理由,只留题干到答案的直答对"""
return {"prompt": item["question"], "answer": item["answer"]}
def extract_answer(text):
"""mock 抽取器:取最后一行等号或冒号后的内容"""
tail = text.strip().splitlines()[–1]
for sep in ("=", ":"):
if sep in tail:
return tail.split(sep)[–1].strip()
return tail
def rationalize(item, generate):
"""理性化:首答错了,带答案提示重生成,再按终答过滤"""
draft = generate(item["question"])
if extract_answer(draft) == item["answer"]:
return to_rationale_form({**item, "rationale": draft})
retry = generate(RATIONALE_HINT.format(ans=item["answer"])
+ ":" + item["question"])
if extract_answer(retry) == item["answer"]:
return to_rationale_form({**item, "rationale": retry})
return None # 两次都错,丢弃,防止错误轨迹进回炉池
if __name__ == "__main__":
sample = {"question": "3 台机器 5 天做 15 个零件,1 台 1 天做几个",
"rationale": "15 除以 5 等于 3,再除以 3 等于 1",
"answer": "1"}
print(to_direct_form(sample))
def fake_gen(q): # mock 生成器,直接返回正确轨迹
return sample["rationale"] + "\\n答:1"
print(rationalize(sample, fake_gen))
说明:rationalize 是 STaR 循环里两个过滤节点的合体,两次机会都不对就返回 None。返回 None 的样本绝不入池,这是防止错误固化的第一道闸,第 6 章会展开。
工程映射:自举解决了数据来源,但这些理由到底值多少训练信号,下一章用蒸馏实验回答。
3. 理由即训练信号
理由数据进了池子,怎么喂也有讲究。Distilling Step-by-Step 的回答:理由不是给人看的附件,是小模型的第二路监督。
3.1 多任务蒸馏结构
Distilling Step-by-Step(Hsieh 等,2023,arXiv 2305.02301)面向部署场景:大模型太贵,小模型直答太弱。它让小模型在训练时多干一件事:除了预测标签,还要生成理由。
结构上是标准多任务。两个任务共享同一个编码器,各自接输出头。标签头学「答案是什么」,理由头学「为什么」。推理时只用标签头直答,理由头训练完就退场。
理由从大模型抽取。对少量无标注样本让大模型写理由,成本远低于人工标注,质量却够用。
深层逻辑在信息量。一条理由包含中间概念与因果链,比一个孤立标签的信息量大得多。同样的标注预算,买理由比买标签划算。两个损失的权重需要调,理由头权重过大会拖累标签精度,论文实验给出了调参区间。
#mermaid-svg-z9pNXB03UYHaiU98{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-z9pNXB03UYHaiU98 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-z9pNXB03UYHaiU98 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-z9pNXB03UYHaiU98 .error-icon{fill:#552222;}#mermaid-svg-z9pNXB03UYHaiU98 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-z9pNXB03UYHaiU98 .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-z9pNXB03UYHaiU98 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-z9pNXB03UYHaiU98 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-z9pNXB03UYHaiU98 .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-z9pNXB03UYHaiU98 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-z9pNXB03UYHaiU98 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-z9pNXB03UYHaiU98 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-z9pNXB03UYHaiU98 .marker.cross{stroke:#333333;}#mermaid-svg-z9pNXB03UYHaiU98 svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-z9pNXB03UYHaiU98 p{margin:0;}#mermaid-svg-z9pNXB03UYHaiU98 .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-z9pNXB03UYHaiU98 .cluster-label text{fill:#333;}#mermaid-svg-z9pNXB03UYHaiU98 .cluster-label span{color:#333;}#mermaid-svg-z9pNXB03UYHaiU98 .cluster-label span p{background-color:transparent;}#mermaid-svg-z9pNXB03UYHaiU98 .label text,#mermaid-svg-z9pNXB03UYHaiU98 span{fill:#333;color:#333;}#mermaid-svg-z9pNXB03UYHaiU98 .node rect,#mermaid-svg-z9pNXB03UYHaiU98 .node circle,#mermaid-svg-z9pNXB03UYHaiU98 .node ellipse,#mermaid-svg-z9pNXB03UYHaiU98 .node polygon,#mermaid-svg-z9pNXB03UYHaiU98 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-z9pNXB03UYHaiU98 .rough-node .label text,#mermaid-svg-z9pNXB03UYHaiU98 .node .label text,#mermaid-svg-z9pNXB03UYHaiU98 .image-shape .label,#mermaid-svg-z9pNXB03UYHaiU98 .icon-shape .label{text-anchor:middle;}#mermaid-svg-z9pNXB03UYHaiU98 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-z9pNXB03UYHaiU98 .rough-node .label,#mermaid-svg-z9pNXB03UYHaiU98 .node .label,#mermaid-svg-z9pNXB03UYHaiU98 .image-shape .label,#mermaid-svg-z9pNXB03UYHaiU98 .icon-shape .label{text-align:center;}#mermaid-svg-z9pNXB03UYHaiU98 .node.clickable{cursor:pointer;}#mermaid-svg-z9pNXB03UYHaiU98 .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-z9pNXB03UYHaiU98 .arrowheadPath{fill:#333333;}#mermaid-svg-z9pNXB03UYHaiU98 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-z9pNXB03UYHaiU98 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-z9pNXB03UYHaiU98 .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-z9pNXB03UYHaiU98 .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-z9pNXB03UYHaiU98 .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-z9pNXB03UYHaiU98 .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-z9pNXB03UYHaiU98 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-z9pNXB03UYHaiU98 .cluster text{fill:#333;}#mermaid-svg-z9pNXB03UYHaiU98 .cluster span{color:#333;}#mermaid-svg-z9pNXB03UYHaiU98 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-z9pNXB03UYHaiU98 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-z9pNXB03UYHaiU98 rect.text{fill:none;stroke-width:0;}#mermaid-svg-z9pNXB03UYHaiU98 .icon-shape,#mermaid-svg-z9pNXB03UYHaiU98 .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-z9pNXB03UYHaiU98 .icon-shape p,#mermaid-svg-z9pNXB03UYHaiU98 .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-z9pNXB03UYHaiU98 .icon-shape .label rect,#mermaid-svg-z9pNXB03UYHaiU98 .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-z9pNXB03UYHaiU98 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-z9pNXB03UYHaiU98 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-z9pNXB03UYHaiU98 :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}#mermaid-svg-z9pNXB03UYHaiU98 .default>*{fill:#faf9f5!important;stroke:#ffffff!important;color:#000000!important;stroke-width:0px!important;}#mermaid-svg-z9pNXB03UYHaiU98 .default span{fill:#faf9f5!important;stroke:#ffffff!important;color:#000000!important;stroke-width:0px!important;}#mermaid-svg-z9pNXB03UYHaiU98 .default tspan{fill:#000000!important;}
任务输入
共享编码器
标签预测头
理由生成头
直答输出 即内化目标
理由输出 只在训练期起作用
大模型抽取的少量理由
图 3-1 逐步蒸馏的多任务结构
解读:E 与 F 共享同一份表示,理由头像助教,逼着编码器把「为什么」也编进特征。部署时砍掉 D 和 F,只留直答通路,内化在结构上已经完成一半。
3.2 数据效率与配比实验
论文的数字很硬。微调后的 770M T5 在其中一个基准上只用八成数据,就超过 540B PaLM 的少样本表现。模型小约三个数量级,成绩反超。
标注效率同样关键。理由监督把所需数据量压到标准微调的几分之一,作者报告最大可省约一个数量级的标注。标题里「更少数据、更小模型」两个卖点都有实验支撑。
| 标准微调 | 770M | 全量人工标签 | 基线 |
| 普通蒸馏 | 770M | 大模型伪标签 | 略优于基线 |
| 逐步蒸馏 | 770M | 标签加少量理由 | 超过 540B 少样本 |
表 3-1 三种训练方案对比(据 arXiv 2305.02301)
解读:拉开差距的不是模型也不是数据量,是监督信号的形态。第三行加了理由这一路信号,就用小模型越过了大模型。
落到工程要回答配比问题:训练集里理由样本占多少,最终直答率最高。占比太低信号不足,太高挤占直答分布。下面的模拟器给出一条先升后饱和的曲线。
# 来源:自实现 / ratio_tuner.py(mock 演示,无外部依赖)
def simulate(ratio, base=0.62):
"""mock:理由占比与直答率的关系,先升后饱和再略降"""
gain = 0.30 * ratio / (ratio + 0.25) # 边际收益递减
peak = base + gain
if ratio > 0.7: # 占比过高挤占直答分布
peak -= (ratio – 0.7) * 0.10
return round(peak, 3)
def pick(ratios, floor=0.80):
"""选配比:在达到直答率下限的方案里,用最少的理由数据"""
feasible = [r for r in ratios if simulate(r) >= floor]
return min(feasible) if feasible else None
if __name__ == "__main__":
print("理由占比 模拟直答率")
for r in [0.0, 0.1, 0.2, 0.3, 0.5, 0.7, 0.9]:
print(f"{r:>7.0%} {simulate(r):>10.1%}")
best = pick([0.0, 0.1, 0.2, 0.3, 0.5, 0.7, 0.9])
print(f"达到 0.80 直答率的最省配比为 {best:.0%}")
说明:simulate 的分子式刻意做成先陡后缓,模拟理由信号边际递减。pick 是选型逻辑:在达标集合里取最小占比,理由标注贵,省下的都是预算。
工程映射:配比定了,还得保证进池子的轨迹本身干净,下一章交给过程监督。
4. 过程监督把关
回炉池混进错误轨迹怎么办。答案监督只看最后一步,过程监督每一步都查。
4.1 结果监督与过程监督
结果监督(outcome supervision)只对最终答案给反馈。轨迹中间错了但终答蒙对,照样通过,错误过程被一起固化进权重。
过程监督(process supervision)对每个中间步骤打分,哪步错了一眼可见。Let’s Verify Step by Step(Lightman 等,2023,arXiv 2305.20050)系统对比了两者。
结论很明确:在 MATH 数据集上,过程监督训练出的模型显著更强,在代表性子集上解出 78% 的题。团队为此发布了 PRM800K,80 万条人工步级标注。
过程奖励模型还有推理期用法:best-of-N 采样,同一题多答几遍,挑过程分最高的一条。对内化管线而言,过程监督就是闸门:逐通过的轨迹才有资格回炉。
#mermaid-svg-0JwAs1VLPugT7mDw{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-0JwAs1VLPugT7mDw .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-0JwAs1VLPugT7mDw .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-0JwAs1VLPugT7mDw .error-icon{fill:#552222;}#mermaid-svg-0JwAs1VLPugT7mDw .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-0JwAs1VLPugT7mDw .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-0JwAs1VLPugT7mDw .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-0JwAs1VLPugT7mDw .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-0JwAs1VLPugT7mDw .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-0JwAs1VLPugT7mDw .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-0JwAs1VLPugT7mDw .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-0JwAs1VLPugT7mDw .marker{fill:#333333;stroke:#333333;}#mermaid-svg-0JwAs1VLPugT7mDw .marker.cross{stroke:#333333;}#mermaid-svg-0JwAs1VLPugT7mDw svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-0JwAs1VLPugT7mDw p{margin:0;}#mermaid-svg-0JwAs1VLPugT7mDw .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-0JwAs1VLPugT7mDw .cluster-label text{fill:#333;}#mermaid-svg-0JwAs1VLPugT7mDw .cluster-label span{color:#333;}#mermaid-svg-0JwAs1VLPugT7mDw .cluster-label span p{background-color:transparent;}#mermaid-svg-0JwAs1VLPugT7mDw .label text,#mermaid-svg-0JwAs1VLPugT7mDw span{fill:#333;color:#333;}#mermaid-svg-0JwAs1VLPugT7mDw .node rect,#mermaid-svg-0JwAs1VLPugT7mDw .node circle,#mermaid-svg-0JwAs1VLPugT7mDw .node ellipse,#mermaid-svg-0JwAs1VLPugT7mDw .node polygon,#mermaid-svg-0JwAs1VLPugT7mDw .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-0JwAs1VLPugT7mDw .rough-node .label text,#mermaid-svg-0JwAs1VLPugT7mDw .node .label text,#mermaid-svg-0JwAs1VLPugT7mDw .image-shape .label,#mermaid-svg-0JwAs1VLPugT7mDw .icon-shape .label{text-anchor:middle;}#mermaid-svg-0JwAs1VLPugT7mDw .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-0JwAs1VLPugT7mDw .rough-node .label,#mermaid-svg-0JwAs1VLPugT7mDw .node .label,#mermaid-svg-0JwAs1VLPugT7mDw .image-shape .label,#mermaid-svg-0JwAs1VLPugT7mDw .icon-shape .label{text-align:center;}#mermaid-svg-0JwAs1VLPugT7mDw .node.clickable{cursor:pointer;}#mermaid-svg-0JwAs1VLPugT7mDw .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-0JwAs1VLPugT7mDw .arrowheadPath{fill:#333333;}#mermaid-svg-0JwAs1VLPugT7mDw .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-0JwAs1VLPugT7mDw .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-0JwAs1VLPugT7mDw .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-0JwAs1VLPugT7mDw .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-0JwAs1VLPugT7mDw .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-0JwAs1VLPugT7mDw .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-0JwAs1VLPugT7mDw .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-0JwAs1VLPugT7mDw .cluster text{fill:#333;}#mermaid-svg-0JwAs1VLPugT7mDw .cluster span{color:#333;}#mermaid-svg-0JwAs1VLPugT7mDw div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-0JwAs1VLPugT7mDw .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-0JwAs1VLPugT7mDw rect.text{fill:none;stroke-width:0;}#mermaid-svg-0JwAs1VLPugT7mDw .icon-shape,#mermaid-svg-0JwAs1VLPugT7mDw .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-0JwAs1VLPugT7mDw .icon-shape p,#mermaid-svg-0JwAs1VLPugT7mDw .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-0JwAs1VLPugT7mDw .icon-shape .label rect,#mermaid-svg-0JwAs1VLPugT7mDw .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-0JwAs1VLPugT7mDw .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-0JwAs1VLPugT7mDw .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-0JwAs1VLPugT7mDw :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}#mermaid-svg-0JwAs1VLPugT7mDw .default>*{fill:#faf9f5!important;stroke:#ffffff!important;color:#000000!important;stroke-width:0px!important;}#mermaid-svg-0JwAs1VLPugT7mDw .default span{fill:#faf9f5!important;stroke:#ffffff!important;color:#000000!important;stroke-width:0px!important;}#mermaid-svg-0JwAs1VLPugT7mDw .default tspan{fill:#000000!important;}
每步都过
某步失败
生成新轨迹
候选轨迹
逐步打分
打上通过标签
截断或丢弃
进入回炉数据池
留作奖励模型负例
微调出更可靠模型
图 4-1 过程监督作为回炉闸门
解读:B 是唯一分岔点,粒度从「整条」细化到「每步」。被拦截的轨迹走 F 支路变负例,数据不浪费,这正是 80 万条标注的复用方式。
4.2 步级数据与阈值
步级标注比答案标注贵,这是过程监督的主要成本。PRM800K 的量级说明,头部团队愿意为这一层掏钱,侧面证明其价值。
标注还有一致性问题。某一步算不算严格错误,标注者会有分歧,论文在标注规范上花了大量篇幅。工程上建议双标抽检,分歧样本送第三人称仲裁。
闸门阈值是工程旋钮。收得太紧,通过率低,回炉池增长慢;放得太松,错误轨迹漏网。论文还报告主动学习能提升步级标注效率:优先标注模型最没把握的步,同样预算换更多有效信号。
| 反馈粒度 | 最终答案 | 每个步骤 |
| 错误定位 | 不能 | 能指到具体步 |
| 标注成本 | 低 | 高,80 万条量级 |
| MATH 成绩 | 较低 | 代表子集 78% |
| 负例价值 | 低 | 可训奖励模型 |
表 4-1 两种监督方式对比(据 arXiv 2305.20050)
解读:最后一行常被忽略,被拦下的错误轨迹不是垃圾,是奖励模型的训练燃料。闸门拦得越多,奖励模型越准,形成第二个正循环。
工程映射:闸门保证轨迹干净,接下来把干净轨迹压到极致,压进隐层。
5. 藏进隐层的极端内化
显式轨迹再短也是 token。Implicit CoT 走到极端:把步骤全部塞进隐层,中间 token 一个都不输出。
5.1 垂直推理
Implicit CoT(Deng 等,2023,arXiv 2311.01460)提出换轴的视角。常规 CoT 是水平推理:中间步骤逐词输出,一步接一步,走在输出序列的时间轴上。
隐式版本是垂直推理:步骤不落成文字,在层与层的隐状态间传递。浅层算第一步,深层算后面几步,读完最后一层,答案直接出来。
训练靠蒸馏完成。教师是会显式 CoT 的模型,学生模仿的不是文字,是教师解题时的内部状态。论文在多位数乘法和小学数学题上验证:原本必须显式展开才能解的题,学生全隐式也能解,速度接近完全不用 CoT 的直答模型。
这就是内化的极端形态:轨迹长度不是缩短,而是归零。判据二在这里到达终点,判据三的提示也彻底消失。
#mermaid-svg-URgeonVIB1ph1TEo{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-URgeonVIB1ph1TEo .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-URgeonVIB1ph1TEo .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-URgeonVIB1ph1TEo .error-icon{fill:#552222;}#mermaid-svg-URgeonVIB1ph1TEo .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-URgeonVIB1ph1TEo .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-URgeonVIB1ph1TEo .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-URgeonVIB1ph1TEo .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-URgeonVIB1ph1TEo .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-URgeonVIB1ph1TEo .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-URgeonVIB1ph1TEo .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-URgeonVIB1ph1TEo .marker{fill:#333333;stroke:#333333;}#mermaid-svg-URgeonVIB1ph1TEo .marker.cross{stroke:#333333;}#mermaid-svg-URgeonVIB1ph1TEo svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-URgeonVIB1ph1TEo p{margin:0;}#mermaid-svg-URgeonVIB1ph1TEo .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-URgeonVIB1ph1TEo .cluster-label text{fill:#333;}#mermaid-svg-URgeonVIB1ph1TEo .cluster-label span{color:#333;}#mermaid-svg-URgeonVIB1ph1TEo .cluster-label span p{background-color:transparent;}#mermaid-svg-URgeonVIB1ph1TEo .label text,#mermaid-svg-URgeonVIB1ph1TEo span{fill:#333;color:#333;}#mermaid-svg-URgeonVIB1ph1TEo .node rect,#mermaid-svg-URgeonVIB1ph1TEo .node circle,#mermaid-svg-URgeonVIB1ph1TEo .node ellipse,#mermaid-svg-URgeonVIB1ph1TEo .node polygon,#mermaid-svg-URgeonVIB1ph1TEo .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-URgeonVIB1ph1TEo .rough-node .label text,#mermaid-svg-URgeonVIB1ph1TEo .node .label text,#mermaid-svg-URgeonVIB1ph1TEo .image-shape .label,#mermaid-svg-URgeonVIB1ph1TEo .icon-shape .label{text-anchor:middle;}#mermaid-svg-URgeonVIB1ph1TEo .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-URgeonVIB1ph1TEo .rough-node .label,#mermaid-svg-URgeonVIB1ph1TEo .node .label,#mermaid-svg-URgeonVIB1ph1TEo .image-shape .label,#mermaid-svg-URgeonVIB1ph1TEo .icon-shape .label{text-align:center;}#mermaid-svg-URgeonVIB1ph1TEo .node.clickable{cursor:pointer;}#mermaid-svg-URgeonVIB1ph1TEo .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-URgeonVIB1ph1TEo .arrowheadPath{fill:#333333;}#mermaid-svg-URgeonVIB1ph1TEo .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-URgeonVIB1ph1TEo .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-URgeonVIB1ph1TEo .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-URgeonVIB1ph1TEo .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-URgeonVIB1ph1TEo .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-URgeonVIB1ph1TEo .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-URgeonVIB1ph1TEo .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-URgeonVIB1ph1TEo .cluster text{fill:#333;}#mermaid-svg-URgeonVIB1ph1TEo .cluster span{color:#333;}#mermaid-svg-URgeonVIB1ph1TEo div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-URgeonVIB1ph1TEo .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-URgeonVIB1ph1TEo rect.text{fill:none;stroke-width:0;}#mermaid-svg-URgeonVIB1ph1TEo .icon-shape,#mermaid-svg-URgeonVIB1ph1TEo .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-URgeonVIB1ph1TEo .icon-shape p,#mermaid-svg-URgeonVIB1ph1TEo .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-URgeonVIB1ph1TEo .icon-shape .label rect,#mermaid-svg-URgeonVIB1ph1TEo .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-URgeonVIB1ph1TEo .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-URgeonVIB1ph1TEo .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-URgeonVIB1ph1TEo :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}#mermaid-svg-URgeonVIB1ph1TEo .default>*{fill:#faf9f5!important;stroke:#ffffff!important;color:#000000!important;stroke-width:0px!important;}#mermaid-svg-URgeonVIB1ph1TEo .default span{fill:#faf9f5!important;stroke:#ffffff!important;color:#000000!important;stroke-width:0px!important;}#mermaid-svg-URgeonVIB1ph1TEo .default tspan{fill:#000000!important;}
跳步课程蒸馏
教师模型 逐词输出轨迹
水平推理 走在输出序列上
学生模型 隐层间传递状态
垂直推理 走在层数深度上
课程起点 完整显式
课程中段 跳过若干步
课程终点 零步显式
图 5-1 从水平推理到垂直推理
解读:上半部是两种推理的方向对比,蒸馏箭头完成转轴。下半部是训练路径,E 到 G 的推进节奏由跳步课程控制。
5.2 跳步课程与边界
直接从完整显式跳到全隐式,学生学不动。论文用跳步课程过渡:先教跳 2 步,再 4 步,逐步加码,最后跳全部。
每个阶段教师仍显式输出前段若干步,只有后段压进隐层。学生的隐层先接住 2 步,习惯后再接 4 步,压力逐级递增。这与第 1 章 Anderson 的组合过程同构:多步逐步合并,直到一步到位。
| 输出 token | 多 | 少 | 最少 |
| 推理延迟 | 高 | 低 | 最低 |
| 过程可读 | 全可读 | 不可读 | 不可读 |
| 错误定位 | 可逐步查 | 只能靠探针 | 无法定位 |
| 能解难题 | 能 | 能(论文任务内) | 不能 |
表 5-1 三种作答方式对比
解读:隐式 CoT 拿到了第二列的速度和第五列第一行的解题力,同时继承了第三列的可读性短板。收益和代价都在表里,没有免费项。
边界也要讲清。隐层容量有限,任务链路太长时状态装不下;训练依赖教师的中间检查点,教师错了学生跟着错;可解释性降到零,第 6 章的三笔代价在这里全部兑现。
# 来源:自实现 / skip_curriculum.py(mock 演示,无外部依赖)
def make_stages(total_steps, grain=2):
"""生成跳步序列:从跳 0 步逐步加到跳全部步"""
skips = list(range(0, total_steps + 1, grain))
if skips[–1] == total_steps:
return skips
skips.append(total_steps) # 补上终点,保证课程收口
return skips
def stage_desc(skip, total):
"""描述每阶段:教师显式到第几步,其余压进隐层"""
if skip == 0:
return "完整显式轨迹,学生看全过程"
if skip < total:
return f"教师显式前 {total – skip} 步,后 {skip} 步走隐层"
return "零步显式,输入直接到答案,全隐式作答"
if __name__ == "__main__":
total = 8
for skip in make_stages(total):
print(f"跳过 {skip} 步:{stage_desc(skip, total)}")
说明:make_stages 输出的序列就是训练排期表,相邻阶段跳跃幅度由 grain 控制。幅度太大蒸馏会塌,论文取小步推进,代码里对应较小的 grain。
工程映射:内化一路加速,账单在下一章结算。
6. 内化的三笔代价
直觉化不是免费午餐。三笔代价摆在桌面上:讲不出、改不动、错到底。
6.1 前两笔:解释与修正
第一笔是可解释性丢失。显式 CoT 答对了,步骤可以复核;内化后只剩一个答案。追问它怎么算的,复述出的理由未必是真实计算过程,权重里的路径读不出来。
第二笔是可修正性下降。显式轨迹出错时,定位到某一步打回重修即可;直答只有一个输出点,错就是全错,没有局部修复的抓手。
两笔账指向同一个事实:内化把过程信息压掉了,压掉的部分不会自己回来。下面用 mock 演示内化前后步骤可读性的落差。
# 来源:自实现 / cost_demo.py(mock 演示,无外部依赖)
def readability(steps):
"""mock 可读性得分:可见步骤越多,越容易被人复核"""
if not steps:
return 8 # 只剩一个答案,讲不出过程
score = 36 + min(len(steps), 8) * 7 # 步骤可见性得分
detail = 6 if all(len(s) >= 6 for s in steps) else 0 # 步子太短看不懂
return min(score + detail, 98)
def compare(before, after):
"""同一批题,内化前后的步骤可读性对比"""
rows = []
for qid, (b, a) in enumerate(zip(before, after), start=1):
rows.append((qid, readability(b), readability(a)))
return rows
if __name__ == "__main__":
before = [["读题", "列式 12 乘 3", "算出 36", "对比 40", "答不够"],
["读题", "设未知数", "移项", "解出 x", "答 7"]]
after = [[], []] # 内化后只剩答案,步骤列表为空
print("题目 内化前得分 内化后得分")
for qid, b, a in compare(before, after):
print(f"Q{qid} {b:>8} {a:>8}")
说明:readability 对空步骤列表直接给个位数,量化「答对但讲不出」。得分从 71 掉到 8,这就是第一笔代价的数字化形态。
工程上的补偿手段是双版本并行:部署直答版跑日常流量,保留显式版供审计抽检。两版答案不一致的样本自动上报,等于用 5% 的显式成本买回大部分可解释性。
6.2 第三笔:错误固化
第三笔最危险。回炉不区分对错,错误轨迹同样会被压成直觉。固化后的错误更隐蔽:显式阶段错了还能看出来,内化后错误藏在权重里,输出端毫无痕迹。
STaR 的答案过滤挡住一部分,过程监督闸门挡住更多。但闸门有漏网率,多轮迭代里错误会累积,越晚发现越难清除。
防御分三层。入库前校验,终答与过程双查;训练中抽检,按批次人工看样本;训练后对比,直答版与显式版在基准集上互为对照,分歧样本回炉。
#mermaid-svg-lgXZ6GP2ENITCeCD{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-lgXZ6GP2ENITCeCD .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-lgXZ6GP2ENITCeCD .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-lgXZ6GP2ENITCeCD .error-icon{fill:#552222;}#mermaid-svg-lgXZ6GP2ENITCeCD .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-lgXZ6GP2ENITCeCD .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-lgXZ6GP2ENITCeCD .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-lgXZ6GP2ENITCeCD .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-lgXZ6GP2ENITCeCD .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-lgXZ6GP2ENITCeCD .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-lgXZ6GP2ENITCeCD .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-lgXZ6GP2ENITCeCD .marker{fill:#333333;stroke:#333333;}#mermaid-svg-lgXZ6GP2ENITCeCD .marker.cross{stroke:#333333;}#mermaid-svg-lgXZ6GP2ENITCeCD svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-lgXZ6GP2ENITCeCD p{margin:0;}#mermaid-svg-lgXZ6GP2ENITCeCD .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-lgXZ6GP2ENITCeCD .cluster-label text{fill:#333;}#mermaid-svg-lgXZ6GP2ENITCeCD .cluster-label span{color:#333;}#mermaid-svg-lgXZ6GP2ENITCeCD .cluster-label span p{background-color:transparent;}#mermaid-svg-lgXZ6GP2ENITCeCD .label text,#mermaid-svg-lgXZ6GP2ENITCeCD span{fill:#333;color:#333;}#mermaid-svg-lgXZ6GP2ENITCeCD .node rect,#mermaid-svg-lgXZ6GP2ENITCeCD .node circle,#mermaid-svg-lgXZ6GP2ENITCeCD .node ellipse,#mermaid-svg-lgXZ6GP2ENITCeCD .node polygon,#mermaid-svg-lgXZ6GP2ENITCeCD .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-lgXZ6GP2ENITCeCD .rough-node .label text,#mermaid-svg-lgXZ6GP2ENITCeCD .node .label text,#mermaid-svg-lgXZ6GP2ENITCeCD .image-shape .label,#mermaid-svg-lgXZ6GP2ENITCeCD .icon-shape .label{text-anchor:middle;}#mermaid-svg-lgXZ6GP2ENITCeCD .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-lgXZ6GP2ENITCeCD .rough-node .label,#mermaid-svg-lgXZ6GP2ENITCeCD .node .label,#mermaid-svg-lgXZ6GP2ENITCeCD .image-shape .label,#mermaid-svg-lgXZ6GP2ENITCeCD .icon-shape .label{text-align:center;}#mermaid-svg-lgXZ6GP2ENITCeCD .node.clickable{cursor:pointer;}#mermaid-svg-lgXZ6GP2ENITCeCD .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-lgXZ6GP2ENITCeCD .arrowheadPath{fill:#333333;}#mermaid-svg-lgXZ6GP2ENITCeCD .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-lgXZ6GP2ENITCeCD .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-lgXZ6GP2ENITCeCD .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-lgXZ6GP2ENITCeCD .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-lgXZ6GP2ENITCeCD .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-lgXZ6GP2ENITCeCD .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-lgXZ6GP2ENITCeCD .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-lgXZ6GP2ENITCeCD .cluster text{fill:#333;}#mermaid-svg-lgXZ6GP2ENITCeCD .cluster span{color:#333;}#mermaid-svg-lgXZ6GP2ENITCeCD div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-lgXZ6GP2ENITCeCD .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-lgXZ6GP2ENITCeCD rect.text{fill:none;stroke-width:0;}#mermaid-svg-lgXZ6GP2ENITCeCD .icon-shape,#mermaid-svg-lgXZ6GP2ENITCeCD .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-lgXZ6GP2ENITCeCD .icon-shape p,#mermaid-svg-lgXZ6GP2ENITCeCD .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-lgXZ6GP2ENITCeCD .icon-shape .label rect,#mermaid-svg-lgXZ6GP2ENITCeCD .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-lgXZ6GP2ENITCeCD .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-lgXZ6GP2ENITCeCD .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-lgXZ6GP2ENITCeCD :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}#mermaid-svg-lgXZ6GP2ENITCeCD .default>*{fill:#faf9f5!important;stroke:#ffffff!important;color:#000000!important;stroke-width:0px!important;}#mermaid-svg-lgXZ6GP2ENITCeCD .default span{fill:#faf9f5!important;stroke:#ffffff!important;color:#000000!important;stroke-width:0px!important;}#mermaid-svg-lgXZ6GP2ENITCeCD .default tspan{fill:#000000!important;}
拦住
漏网
难定位 难纠正
错误轨迹混入
闸门校验
错误止步于数据池
回炉成错误直觉
直答输出错误答案
干净轨迹正常回炉
图 6-1 错误固化循环与闸门断点
解读:右侧 D 到 E 的自环一旦成形,错误在权重里自我强化,外部几乎不可见。B 是唯一断点,闸门可靠性决定整条管线的可信度。
一句话:闸门不是可选项,是内化管线的必要组件。下一章把它拼进完整流水线。
7. 工程管线与闸门
把前六章的组件接成管线:生成、闸门、构造、配比、训练、监控,六个环节闭环运转。
7.1 管线拼装与闸门
管线从题库采样开始。批量生成轨迹后先进闸门,三道检查:格式完整、逐步可验、终答正确。通过的轨迹转成双格式数据,按配比混合,送入分阶段微调。
微调分两段。先带理由训练,让模型吃透过程;再逐步替换为直答格式,压缩轨迹长度。每段结束跑一次监控,指标不达标就回炉重生成。
#mermaid-svg-p7CGFGBghKN3rd9V{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-p7CGFGBghKN3rd9V .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-p7CGFGBghKN3rd9V .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-p7CGFGBghKN3rd9V .error-icon{fill:#552222;}#mermaid-svg-p7CGFGBghKN3rd9V .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-p7CGFGBghKN3rd9V .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-p7CGFGBghKN3rd9V .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-p7CGFGBghKN3rd9V .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-p7CGFGBghKN3rd9V .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-p7CGFGBghKN3rd9V .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-p7CGFGBghKN3rd9V .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-p7CGFGBghKN3rd9V .marker{fill:#333333;stroke:#333333;}#mermaid-svg-p7CGFGBghKN3rd9V .marker.cross{stroke:#333333;}#mermaid-svg-p7CGFGBghKN3rd9V svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-p7CGFGBghKN3rd9V p{margin:0;}#mermaid-svg-p7CGFGBghKN3rd9V .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-p7CGFGBghKN3rd9V .cluster-label text{fill:#333;}#mermaid-svg-p7CGFGBghKN3rd9V .cluster-label span{color:#333;}#mermaid-svg-p7CGFGBghKN3rd9V .cluster-label span p{background-color:transparent;}#mermaid-svg-p7CGFGBghKN3rd9V .label text,#mermaid-svg-p7CGFGBghKN3rd9V span{fill:#333;color:#333;}#mermaid-svg-p7CGFGBghKN3rd9V .node rect,#mermaid-svg-p7CGFGBghKN3rd9V .node circle,#mermaid-svg-p7CGFGBghKN3rd9V .node ellipse,#mermaid-svg-p7CGFGBghKN3rd9V .node polygon,#mermaid-svg-p7CGFGBghKN3rd9V .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-p7CGFGBghKN3rd9V .rough-node .label text,#mermaid-svg-p7CGFGBghKN3rd9V .node .label text,#mermaid-svg-p7CGFGBghKN3rd9V .image-shape .label,#mermaid-svg-p7CGFGBghKN3rd9V .icon-shape .label{text-anchor:middle;}#mermaid-svg-p7CGFGBghKN3rd9V .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-p7CGFGBghKN3rd9V .rough-node .label,#mermaid-svg-p7CGFGBghKN3rd9V .node .label,#mermaid-svg-p7CGFGBghKN3rd9V .image-shape .label,#mermaid-svg-p7CGFGBghKN3rd9V .icon-shape .label{text-align:center;}#mermaid-svg-p7CGFGBghKN3rd9V .node.clickable{cursor:pointer;}#mermaid-svg-p7CGFGBghKN3rd9V .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-p7CGFGBghKN3rd9V .arrowheadPath{fill:#333333;}#mermaid-svg-p7CGFGBghKN3rd9V .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-p7CGFGBghKN3rd9V .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-p7CGFGBghKN3rd9V .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-p7CGFGBghKN3rd9V .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-p7CGFGBghKN3rd9V .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-p7CGFGBghKN3rd9V .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-p7CGFGBghKN3rd9V .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-p7CGFGBghKN3rd9V .cluster text{fill:#333;}#mermaid-svg-p7CGFGBghKN3rd9V .cluster span{color:#333;}#mermaid-svg-p7CGFGBghKN3rd9V div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-p7CGFGBghKN3rd9V .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-p7CGFGBghKN3rd9V rect.text{fill:none;stroke-width:0;}#mermaid-svg-p7CGFGBghKN3rd9V .icon-shape,#mermaid-svg-p7CGFGBghKN3rd9V .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-p7CGFGBghKN3rd9V .icon-shape p,#mermaid-svg-p7CGFGBghKN3rd9V .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-p7CGFGBghKN3rd9V .icon-shape .label rect,#mermaid-svg-p7CGFGBghKN3rd9V .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-p7CGFGBghKN3rd9V .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-p7CGFGBghKN3rd9V .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-p7CGFGBghKN3rd9V :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}#mermaid-svg-p7CGFGBghKN3rd9V .default>*{fill:#faf9f5!important;stroke:#ffffff!important;color:#000000!important;stroke-width:0px!important;}#mermaid-svg-p7CGFGBghKN3rd9V .default span{fill:#faf9f5!important;stroke:#ffffff!important;color:#000000!important;stroke-width:0px!important;}#mermaid-svg-p7CGFGBghKN3rd9V .default tspan{fill:#000000!important;}
未达标
达标
题库采样
批量生成轨迹
闸门校验
双格式构造
配比与课程调度
分阶段微调
监控直答率与轨迹长度
发布直答版本
图 7-1 内化工程管线全貌
解读:C 是第 4 章的闸门,E 是第 3 章的配比器,F 内含第 5 章式的压缩课程。G 到 B 的回边是整条管线的灵魂:监控不达标就整体回炉。
闸门代码落在实处。下面的校验器演示三查逻辑与拦截率统计,拦截率是回炉池可信度的直接度量。
# 来源:自实现 / gate_checker.py(mock 演示,无外部依赖)
def check_trace(steps, gold_answer, extract):
"""闸门三查:格式完整、逐步非空、终答正确"""
if not steps:
return False, "空轨迹"
for i, s in enumerate(steps):
if not s.strip():
return False, f"第 {i + 1} 步为空"
if extract(steps[–1]) == gold_answer:
return True, "放行"
return False, "终答错误"
def run_gate(batch, extract):
"""批量过闸,统计拦截率,供管线日志使用"""
blocked, passed = [], []
for item in batch:
ok, reason = check_trace(item["steps"], item["answer"], extract)
(passed if ok else blocked).append((item["qid"], reason))
rate = len(blocked) / len(batch) if batch else 0.0
return passed, blocked, rate
if __name__ == "__main__":
def extract(last): # mock 终答抽取
return last.split("答:")[–1].strip()
batch = [
{"qid": 1, "steps": ["40 减 15 等于 25", "答:25"], "answer": "25"},
{"qid": 2, "steps": ["估了一下", "答:20"], "answer": "25"},
{"qid": 3, "steps": [], "answer": "9"},
]
passed, blocked, rate = run_gate(batch, extract)
print(f"放行 {len(passed)} 条,拦截 {len(blocked)} 条,拦截率 {rate:.0%}")
for qid, reason in blocked:
print(f"拦截 Q{qid}:{reason}")
说明:check_trace 先查结构再查内容,顺序不能反,空轨迹没必要算终答。run_gate 的拦截率要按批次记录,连续两批异常升高,说明上游生成在劣化。
7.2 监控回退与适用边界
监控盯三条曲线:直答率、平均轨迹长度、触发提示规模。三者同步改善,说明内化在正轨。直答率升而正确率降,说明压缩过度,立即回退上一检查点。
回退要自动化。每个微调段存检查点,基准集成绩回撤超过 2 个点即触发回滚,避免错误固化在第 6 章描述的循环里。
不是所有任务都该内化。三类场景建议保留显式:医疗与金融等高风险决策,审计要求严格的链路,样本极少的冷启动任务。这些场景的展开成本是保费,不是浪费。
| 终答正确 | 必须通过 | 不过即拦截 |
| 步骤为空或占位 | 必须通过 | 拦截并记录 |
| 直答率环比 | 上升 | 连续两轮降则回退 |
| 轨迹长度 | 收敛至目标 | 超长则加大压缩段 |
| 抽检人审比例 | 每批不低于 1% | 分歧样本仲裁 |
表 7-1 闸门与监控阈值建议
解读:前两行守数据质量,中间两行守训练方向,最后一行守长尾。阈值是起点值,应随任务风险等级上调,不宜下调。
总结
回到系列第 1 篇的转化闭环状态机。上半圈是外显化:直觉摊开成轨迹。下半圈就是本文的内化:轨迹回炉变直觉。两圈合成闭环,陈述性知识与程序性知识双向流动。
#mermaid-svg-ZF1j2ZKnrZp66cF1{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-ZF1j2ZKnrZp66cF1 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-ZF1j2ZKnrZp66cF1 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-ZF1j2ZKnrZp66cF1 .error-icon{fill:#552222;}#mermaid-svg-ZF1j2ZKnrZp66cF1 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-ZF1j2ZKnrZp66cF1 .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-ZF1j2ZKnrZp66cF1 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-ZF1j2ZKnrZp66cF1 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-ZF1j2ZKnrZp66cF1 .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-ZF1j2ZKnrZp66cF1 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-ZF1j2ZKnrZp66cF1 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-ZF1j2ZKnrZp66cF1 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-ZF1j2ZKnrZp66cF1 .marker.cross{stroke:#333333;}#mermaid-svg-ZF1j2ZKnrZp66cF1 svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-ZF1j2ZKnrZp66cF1 p{margin:0;}#mermaid-svg-ZF1j2ZKnrZp66cF1 .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-ZF1j2ZKnrZp66cF1 .cluster-label text{fill:#333;}#mermaid-svg-ZF1j2ZKnrZp66cF1 .cluster-label span{color:#333;}#mermaid-svg-ZF1j2ZKnrZp66cF1 .cluster-label span p{background-color:transparent;}#mermaid-svg-ZF1j2ZKnrZp66cF1 .label text,#mermaid-svg-ZF1j2ZKnrZp66cF1 span{fill:#333;color:#333;}#mermaid-svg-ZF1j2ZKnrZp66cF1 .node rect,#mermaid-svg-ZF1j2ZKnrZp66cF1 .node circle,#mermaid-svg-ZF1j2ZKnrZp66cF1 .node ellipse,#mermaid-svg-ZF1j2ZKnrZp66cF1 .node polygon,#mermaid-svg-ZF1j2ZKnrZp66cF1 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-ZF1j2ZKnrZp66cF1 .rough-node .label text,#mermaid-svg-ZF1j2ZKnrZp66cF1 .node .label text,#mermaid-svg-ZF1j2ZKnrZp66cF1 .image-shape .label,#mermaid-svg-ZF1j2ZKnrZp66cF1 .icon-shape .label{text-anchor:middle;}#mermaid-svg-ZF1j2ZKnrZp66cF1 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-ZF1j2ZKnrZp66cF1 .rough-node .label,#mermaid-svg-ZF1j2ZKnrZp66cF1 .node .label,#mermaid-svg-ZF1j2ZKnrZp66cF1 .image-shape .label,#mermaid-svg-ZF1j2ZKnrZp66cF1 .icon-shape .label{text-align:center;}#mermaid-svg-ZF1j2ZKnrZp66cF1 .node.clickable{cursor:pointer;}#mermaid-svg-ZF1j2ZKnrZp66cF1 .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-ZF1j2ZKnrZp66cF1 .arrowheadPath{fill:#333333;}#mermaid-svg-ZF1j2ZKnrZp66cF1 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-ZF1j2ZKnrZp66cF1 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-ZF1j2ZKnrZp66cF1 .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-ZF1j2ZKnrZp66cF1 .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-ZF1j2ZKnrZp66cF1 .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-ZF1j2ZKnrZp66cF1 .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-ZF1j2ZKnrZp66cF1 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-ZF1j2ZKnrZp66cF1 .cluster text{fill:#333;}#mermaid-svg-ZF1j2ZKnrZp66cF1 .cluster span{color:#333;}#mermaid-svg-ZF1j2ZKnrZp66cF1 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-ZF1j2ZKnrZp66cF1 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-ZF1j2ZKnrZp66cF1 rect.text{fill:none;stroke-width:0;}#mermaid-svg-ZF1j2ZKnrZp66cF1 .icon-shape,#mermaid-svg-ZF1j2ZKnrZp66cF1 .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-ZF1j2ZKnrZp66cF1 .icon-shape p,#mermaid-svg-ZF1j2ZKnrZp66cF1 .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-ZF1j2ZKnrZp66cF1 .icon-shape .label rect,#mermaid-svg-ZF1j2ZKnrZp66cF1 .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-ZF1j2ZKnrZp66cF1 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-ZF1j2ZKnrZp66cF1 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-ZF1j2ZKnrZp66cF1 :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}#mermaid-svg-ZF1j2ZKnrZp66cF1 .default>*{fill:#faf9f5!important;stroke:#ffffff!important;color:#000000!important;stroke-width:0px!important;}#mermaid-svg-ZF1j2ZKnrZp66cF1 .default span{fill:#faf9f5!important;stroke:#ffffff!important;color:#000000!important;stroke-width:0px!important;}#mermaid-svg-ZF1j2ZKnrZp66cF1 .default tspan{fill:#000000!important;}
外显化 上半圈
内化 下半圈
直觉 程序性知识
轨迹 陈述性知识
图 8-1 双向转化闭环中的内化位置
解读:本文讲的是 B 回到 A 的下半圈,箭头上的每一段路都对应一篇工作。外显方向是另一半故事,由系列另一篇展开。
STaR 造数据,逐步蒸馏给信号,过程监督把关,Implicit CoT 压到零步。方法在变,方向不变:把展开的成本一次性付清,换成直答的速度。
内化的边界同样清楚。换来速度,交出可解释性与可修正性,还要防错误固化。要不要做这笔交易,取决于你的场景赔不赔得起一个讲不出理由的错误。
外部引用
- STaR: Bootstrapping Reasoning With Reasoning(Zelikman 等,2022,arXiv 2203.14465):https://arxiv.org/abs/2203.14465
- Distilling Step-by-Step(Hsieh 等,2023,arXiv 2305.02301):https://arxiv.org/abs/2305.02301
- Let’s Verify Step by Step(Lightman 等,2023,arXiv 2305.20050):https://arxiv.org/abs/2305.20050
- Implicit Chain of Thought Reasoning via Knowledge Distillation(Deng 等,2023,arXiv 2311.01460):https://arxiv.org/abs/2311.01460
- Chain-of-Thought Prompting Elicits Reasoning in Large Language Models(Wei 等,2022,arXiv 2201.11903):https://arxiv.org/abs/2201.11903
- Wikipedia:Knowledge compilation(人工智能离线编译条目):https://en.wikipedia.org/wiki/Knowledge_compilation
- Anderson,Acquisition of cognitive skill(1982,认知技能获得理论):https://doi.org/10.1037/0033-295x.89.4.369





