28|研究深水区与系统综合判断
本章目录
本章预备知识
最后把规模、架构、上下文学习和工程控制放在一起:参数中的能力、输入给的信息、推理计算与外部证据是四条不同通道。
本章各题列出所需基础。可先完成相应基础课,也可通过自检确认掌握程度。
进入深读前的小检查:遇到错误先问缺少事实、算不出来、工具未执行还是验证不足;为每种原因选择最小干预,而不是统一换更大模型。
术语带虚线时可点击速查。公式中的字母先看定义;不要用猜缩写替代推导。
最后一章把数学假设、架构改动和工程判断连起来。高级知识不是背出更多缩写,而是能解释结论依赖什么条件、改变哪一层,以及怎样检验它是否适合自己的任务。
沿着对象与状态理解本章
研究方法先还原它改变了哪个对象、需要什么假设,再设计最小反例。把原理、实现、基准结果与个人任务收益分开,才能决定是否值得迁移到自己的系统。
下方图解的固定输入在“输入与适用条件”中声明。它用于解释本章机制,不与本章其他独立例子的数值暗中接续。
先找错误发生在哪层,再谈换模型
什么时候该改Prompt、检索、记忆或模型?
一个错误答案可以来自不同原因。模型根本没拿到新版本时,增加推理时间不能补出缺失事实;检索已经拿到新版本却被旧记忆覆盖时,需要修上下文与记忆使用规则。选择修复层应跟随证据,而不是看到失败就再加一个Agent。
输入与适用条件:构造“旧配置被当成当前配置”的诊断案例;不以单次观察就宣称确定因果。
1 / 6 · 现象
窄屏可左右滑动图形,或点击“放大图形”。文字解释紧随图后。
先写清楚哪句话错、正确证据是什么,避免只说“感觉变差”。
本步状态由图形与说明共同给出。默认静止。用“下一步”看完解释再继续;播放到最后一步自动停止。键盘聚焦播放器后,可用左右键逐步查看、空格播放/暂停。图中颜色辅助区分,含义同时用文字注明。
为什么需要
避免无目的地叠Prompt、规则、模型和审查环节。
怎样实现
按原文→索引→检索→上下文→推理→行动→核验逐段定位。
可能的代价与误解
同时改变多个因素后只看总成功率,无法解释哪项改动起作用。
如何判断是否做对
同任务、同版本、同预算对照,保留失败样本与可复查轨迹。
Q109|Scaling Laws和Chinchilla究竟说明什么?为什么不能死记一个Token/参数比例?
核心回答
Scaling laws研究模型规模、数据与计算预算怎样影响损失;计算最优讨论在给定预算和假设下如何分配参数与训练Token。它是经验拟合与优化问题,不是对所有架构、数据质量和部署目标恒定成立的比例定律。[SCALING][CHINCHILLA]
用一个简化目标推导预算分配
假设损失可近似为L=E+A/N^α+B/D^β,其中N为参数量、D为训练Token数。再假设训练计算C=kND,则D=C/(kN),代入得到:
L(N)=E + A·N^(−α) + B·(kN/C)^β
对N求导并令零,有:
αA·N^(−α) = βB·(k/C)^β·N^β
N* = [αA/(βB)]^(1/(α+β)) · (C/k)^(β/(α+β))
D* = C/(kN*)
这说明最优分配依赖拟合系数、指数与预算模型。若数据重复、质量变化、训练配方或架构改变,原拟合未必继续适用。若实际目标包含大量后续推理成本,较小模型训练更久也可能在总生命周期成本上更合适,而不只是最小化一次训练损失。
不要把预训练损失提升直接等同某个Agent任务成功率提升。中间还经过后训练、工具适配、检索、执行和验证。一个更低困惑度模型可能仍不擅长特定协议或高风险操作。
固定训练预算翻倍参数,为什么数据可能减半
输入与条件。用非常粗略的稠密模型训练近似C≈6ND。原N=10亿参数,D=200亿Token,则C≈1.2×10^20 FLOPs。
| 步骤与对象 | 内部动作 | 中间结果 / 新状态 |
|---|---|---|
| 1预算固定 | C不变 | 允许的N×D乘积近似不变。 |
| 2参数翻倍 | N变20亿 | D必须降到100亿,才能维持该近似预算。 |
| 3能力取舍 | 更多参数但更少训练数据 | 不能只凭参数量断定更好。 |
| 4最优分配 | 依数据质量、模型形状、优化与目标衡量 | 经验缩放规律不是无条件物理定律。 |
| 5工程现实 | 推理频率很高时 | 训练最优和整个生命周期成本最优也可能不同。 |
把过程连起来。规模、数据与计算预算要联合讨论;“更大”本身不是完整训练方案。
边界与反例。C≈6ND是特定假设下的粗略估算,忽略部分注意力、嵌入等开销;不声称复现任何论文精确最优比例。
依据与适用范围:[DERIVE]。示例输入和场景由本书明确设定。
追问:计算公式C≈6ND是否精确?
它是特定稠密Transformer训练条件下常用的近似量级估算,忽略或简化了部分注意力、嵌入、通信等成本。长上下文、MoE和不同实现会改变实际成本。做容量规划要回到具体算子和硬件测量。
追问:同样Token数量的数据价值一样吗?
不一样。重复、噪声、领域覆盖、质量和混合比例都会影响有效学习。把劣质数据规模扩大,不保证等价于新增独立高质量信息。还要防止测试污染让能力看起来变强。
追问:公司只有很少私有数据,是不是应该训练基础模型?
通常先比较检索、提示、工具、技能或微调是否足够。基础预训练需要的数据、计算与验证投入远大于写一个领域Prompt。真正需求是最新知识还是行为适配,决定应该改哪层,而不是“私有”二字自动推出从零训练。
Q110|MLA和GQA有什么本质区别?低秩KV为何可以减少缓存?
核心回答
GQA通过多个Query头共享较少的K/V头减少缓存;MLA通过学习的低维潜在表示联合表达K/V,并对位置部分作专门设计。MLA是模型架构与训练的一部分,不是把任意现有模型的KV事后压缩就保证等价。[GQA][V3]
从矩阵乘法理解低秩表示
采用列向量约定,设某位置隐藏向量为h,先计算c=W_down h,c的维度d_c小于全部K/V头展开后的维度。内容Key和Value可表示为k_i=W_upK,i c、v_i=W_upV,i c。若只考虑内容分数:
q_iᵀ k_i = q_iᵀ W_upK,i c = (W_upK,iᵀ q_i)ᵀ c
因此可以把Query变换到潜在空间,再与缓存c计算分数,避免始终显式保存完整K。Value加权和也有:
Σ_j a_ij v_j,i = W_upV,i · (Σ_j a_ij c_j)
线性变换可以在合适位置结合,但softmax不能任意移动或线性化。DeepSeek-V3的MLA还把位置相关Key与内容部分分开,缓存压缩潜在向量及相应位置Key;Query也有内容和位置部分。具体尺寸与算子顺序应按架构实现,不应套用普通MHA缓存公式。
上述等式解释的是线性部分为什么有重排空间,不证明低秩架构与任意完整MHA模型输出完全相同。低秩限制需要训练适应;算子融合和缓存布局也会影响真实收益。缓存更小不自动意味着所有batch和上下文长度下延迟更低。
低秩缓存能少存数字,为什么不等于随便压缩K/V
输入与条件。教学矩阵W为4×4,但恰好可以写成A(4×1)乘B(1×4)。输入x为1×4,先算潜变量c=xA,再算cB。
| 步骤与对象 | 内部动作 | 中间结果 / 新状态 |
|---|---|---|
| 1原路径 | 直接算xW | 中间输出有4个数。 |
| 2分解路径 | 先算c=xA | 只需1个潜数,再通过B恢复本例目标向量。 |
| 3等价条件 | W确实等于AB | 则xW=(xA)B;一般矩阵用秩1近似会有误差。 |
| 4缓存启发 | 缓存较短潜表示可能省容量 | 但使用时仍需正确恢复或调整后续计算。 |
| 5MLA边界 | 真实MLA还涉及联合KV低秩表示、位置相关设计与矩阵吸收 | 不能把这个小分解称作完整MLA。 |
把过程连起来。低秩方法的有效性来自模型结构和代数关系,不能对任意已训练K/V随意删维度。
边界与反例。这是低秩原理例,不是DeepSeek模型复现;与GQA共享头的机制不同。
依据与适用范围:[DERIVE]。示例输入和场景由本书明确设定。
追问:为什么RoPE不能随便吸收到一个固定投影里?
RoPE依赖位置。若把位置旋转与内容上投影混在一起,变换通常随位置变化,无法简单用一个固定矩阵在所有历史位置复用。解耦位置分支是为了保留位置建模同时维持低秩缓存的便利。
追问:MLA就是KV量化吗?
不是。量化减少每个数的表示位数;MLA改变需要缓存的表示维度与结构。两者理论上可以组合,但误差、算子支持和效果需要单独验证,不能把一种技术的收益直接乘上另一种技术的宣传倍率。
追问:MoE、MLA、FlashAttention各改哪一层?
MoE改变前馈计算的稀疏选择;MLA改变注意力表示;FlashAttention优化注意力计算的IO与中间存储。它们解决不同瓶颈,可以出现在同一系统,也不互相等价。
Q111|In-Context Learning到底是不是“学习”?为什么换几个示例就会改变行为?
核心回答
通常的推理过程中模型参数不更新,但输入示例改变了隐藏状态和条件分布,因此表现出任务适应。这称为上下文学习;它不同于通过梯度更新参数的训练,也不同于把经验写入外部长期记忆。[GPT3][TR]
以标签映射为例追踪变化
假设输入给出“正面评论→标签A,负面评论→标签B”的示例。模型接收这些示例后,后续位置通过注意力利用示例中的对应关系;最终分类Token的logits由包含这些信息的隐藏状态产生。示例删除或会话重置后,这个局部映射可能不再被提供,因为权重并没有因该请求永久改变。
示例选择影响模型推断出的任务:标签是否平衡、格式是否一致、例子是否覆盖边界、顺序是否造成偏置。如果所有例子都使用同一标签,模型可能把输出格式学成固定答案。错误示例也可能污染当前行为。优秀Few-shot不是堆数量,而是提供任务规则、边界与输出契约的有效信息。
“模型记住我的项目”需要继续问:是当前上下文仍携带信息,客户端重新加载了文件,检索系统取回了记忆,还是模型真的经过微调?只有区分这些机制,才能正确设计恢复、删除和隐私控制。
模型照着两条示例回答,权重就改变了吗
输入与条件。当前上下文给“红→R,蓝→B”,随后问“蓝的代号”。假设模型按示例回答B。
| 步骤与对象 | 内部动作 | 中间结果 / 新状态 |
|---|---|---|
| 1输入变化 | 新增两条映射示例 | 它们作为Token进入当前前向。 |
| 2权重状态 | 推理没有反向传播或优化器更新 | 参数不因此改变。 |
| 3内部状态 | 隐藏状态和KV会随上下文变化 | 这是计算状态,不是模型重新训练。 |
| 4移除示例 | 新请求不再提供映射,也无外部记忆检索 | 不能保证仍知道这套临时代号。 |
| 5真正训练 | 对样本计算损失并更新参数 | 这是另一条过程。 |
把过程连起来。上下文内适应能改变当前行为,但不能因此推断形成跨会话的参数化记忆。
边界与反例。回答B是假定教学行为,不声称每个模型都必然准确遵循任意示例。
依据与适用范围:[DERIVE]。示例输入和场景由本书明确设定。
追问:每次对话都会更新厂商模型参数吗?
不能这样推断。单次推理、产品记忆和厂商离线训练是不同流程;数据使用政策取决于具体产品和配置,不能从模型“记得某句话”推断它已在线更新权重。本书不推测未公开的数据处理实现。
追问:上下文越长,Few-shot越多就越好吗?
更多例子可能帮助覆盖,也可能引入冗余、冲突和位置效应。需要在固定任务集上比较示例数量、选择策略和成本。若错误来自缺少代码事实,增加格式示例未必有用,应该补证据。
追问:Skill与Few-shot有什么关系?
Skill可以包含说明、示例、资源和脚本;被加载后,这些内容成为上下文或工具支持的一部分。它不自动改变参数,也不保证模型严格执行。Skill价值要通过任务行为验证,而不是靠文件存在确认。
Q112|面对一个新框架、新论文或Agent失败,如何判断应该改哪一层?
核心回答
先定位失败发生在信息、模型、协议、执行、状态还是验收,再选择最小能改变原因的措施。论文与框架提供候选机制,不替代因果诊断;工程改动要保留基线和反例,证明没有用复杂度掩盖问题。[EVALS][HARNESS]
从一个错误答案逆向回查
第一步确认任务定义:用户要求的到底是什么,成功如何判断?第二步看证据是否存在、是否有权限、版本是否正确。第三步看证据有没有被检索到并进入最终模型请求;“工具读过”不等于“当前模型仍看见”。第四步检查模型输出是否正确表达动作,协议和参数是否完整。
第五步核验外部执行与持久状态是否一致,尤其超时和中断。第六步检查验证是否针对最终版本、是否真正运行。只有这些条件基本正确仍稳定失败,才更有理由把瓶颈归因于模型能力,尝试更强模型、任务拆分或后训练。
阅读新论文时,把“作者解决的问题—关键假设—改动的对象—实验条件—局限”连起来。若研究针对静态文档问答,却被用来证明动态代码修改可靠,适用范围就跨得太远。若新框架只把已有机制包装成多层类,不产生任务质量或效率收益,未必值得迁移。
引入新框架前,先做一个能推翻自己的对照
输入与条件。系统修复任务成功率低。候选方案是新增向量数据库和三个审查Agent;日志却显示关键文件根本没进入可读取目录。
| 步骤与对象 | 内部动作 | 中间结果 / 新状态 |
|---|---|---|
| 1失败归因 | 权限配置让关键源码不可见 | 这是已观察的缺口。 |
| 2最小干预 | 修正正当读取范围,其他不变 | 测试是否直接恢复任务。 |
| 3框架对照 | 只加向量库但不改可读范围 | 无法凭空索引受阻内容。 |
| 4审查对照 | 三个审查仍无关键文件 | 可能重复同一猜测而非增加证据。 |
| 5采用决策 | 只有代表性任务证明额外机制还有净收益 | 才把新增复杂度引入主流程。 |
把过程连起来。高级工程能力包括证明一种复杂方案目前没有必要,而不只是会部署更多组件。
边界与反例。本例不是否定向量库或多Agent,而是说明工具选择应由具体失败与证据驱动。
依据与适用范围:[EVALS]。示例输入和场景由本书明确设定。
追问:怎样避免把简单任务复杂化?
每加一个检索器、Agent、Review或记忆层,先指出没有它会发生的具体失败,以及能观测的改善。若无法指出,先保留简单实现。原则是复杂度由真实证据和风险推动,而不是由目录完整性推动。
追问:怎样避免把复杂任务过度简化?
检查跨模块不变量、未知副作用、权限边界和不可逆操作。若这些尚不明确,直接改一行可能只是把风险藏起来。简单不是少步骤,而是没有无效步骤;必要分析和验证应保留。
追问:怎样判断自己真正学会了?
给一个未见过的任务,能逐步说明对象、数据流、关键状态、失败窗口和验证方式,并能指出哪些结论尚无证据。能把运行过程讲清、把错误定位到层、把修复收益验证出来,比仅背出术语更接近实际能力。