欢迎光临
我们一直在努力

大模型CoT与程序性知识--轨迹回炉变直觉

/* 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 的自举回炉
  • 理由即训练信号
  • 过程监督把关
  • 藏进隐层的极端内化
  • 内化的三笔代价
  • 工程管线与闸门
  • 总结
  • 外部引用
  • 摘要

    内化指用带推理步骤的数据微调,让模型直答能力上升,从需要展开走向一步直出。 本文沿 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 的组合过程同构:多步逐步合并,直到一步到位。

    维度显式 CoT隐式 CoT无 CoT 直答
    输出 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
    赞(0)
    未经允许不得转载:171主机测评 » 大模型CoT与程序性知识--轨迹回炉变直觉
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址