← 返回全部文章
AI 底层原理连载 · 2026-08-13

九、答疑篇:那些一想就卡住的「为什么」

14 min read

AI 底层原理·答疑篇:那些一想就卡住的「为什么」

说明

《写给客户端工程师的 AI 底层原理》连载 · 答疑篇 前面七章,我陪你把大模型从头拆到尾。我赌你有过这么一个瞬间:读的时候一路点头,K 是索引、V 是内容、多头是开线程,全懂;可文档一合上,脑子里”啪”地冒出个问题——等等,为什么非得三个矩阵?留着 V 不就行了,K 是干嘛吃的? 这感觉,像小时候拆家里那台闹钟。每个齿轮你都认识,就是想不明白:凭什么少一个,它就不走了? 前面几章讲的是”它长什么样、怎么转”;这一章,专治那些**“为什么不能是别的样子”**。这类问题不解决,你对大模型的理解就永远隔着层玻璃——看得见,摸不着。规矩照旧:一条问到底,不问出本质不收手。


一、QKV 为什么要三个矩阵?留 V 不就够了,K 是多余的吗?

全系列被问最多的一条。你盯着那张流程图,八成觉得三个矩阵有点铺张:V 是真货,那我要货,给我 V 不就完了?

答案是:一个字在句子里同时打三份工,这三份工的 KPI 互相打架。硬塞进一个向量,必然互相拖累。

先说 K 和 V 为什么不能合。K 是门牌号,V 是屋里的货。这俩天生两码事——一个字**“容不容易被找到”,和它”能贡献什么内容”**,毫不相干。拿”的”字举例:作为门牌号它得特别显眼,因为一堆字要回头定位它来搭语法;可作为货,它几乎是空的,没啥语义能给。你要逼 K=V,就等于逼”的”字用同一个向量,既当好那个人人来查的显眼门牌,又老实交代自己肚里没货——一个向量扛两个打架的 KPI,两头都做不好,表达力当场塌方。

再说 Q 和 K 为什么也不能合(也就是你问的”QV 行不行”)。因为关系是有方向的。“苹果→手机”的关联强度,不等于”手机→苹果”。语言里定语找中心词、和中心词找定语,是两个方向的动作。你要用同一个向量既当 Q 又当 K,数学上会把”A 看 B”和”B 看 A”的分数强行拉成对称——可现实里它俩就不该相等。Q、K 分开,模型才能分清”我主动问你”和”我被动被你问”这两种姿势。

所以本质是一岗三责,且三责正交:我怎么发问(Q)、我怎么挂牌等人来查(K)、我兜里揣着啥(V)。合并任意两个,都是逼两个独立职能共用一套参数——省下的是参数,赔进去的是自由度。而自由度,才是表达力的命根子。

说明

动手区:光看文字不过瘾?去这个网页——Transformer Explainer——你能在浏览器里输入一句话,逐 token 亲眼看 Q、K、V 三个矩阵怎么算出分数、怎么加权。拖一遍,比读十遍都清楚。


二、算完相似度为什么要除以 √dₖ?不除会死吗?

会。而且死得难看——梯度直接消失,模型学不动。

问题出在维度。Q 和 K 做点积,是每一维乘起来再求和。维度越高,加的项越多,这个和的波动范围就越大。dₖ = 64 时,分数动不动飙到几十上百。

坏就坏在下一步的 Softmax。它是个”赢家通吃”的家伙:喂进去的数字一旦悬殊,它就把几乎全部概率压给最大那个,其余全踩成接近 0。这时候曲线陡得像一堵墙,墙上每一点的斜率都是 0。 而模型靠斜率(梯度)学习,斜率一没,它就彻底不知道往哪调,原地卡死。这就是梯度消失。

除以 √dₖ,就是把这个被维度吹大的波动重新拽回到正常区间,让分数待在 Softmax 还能干活的温和地带。

一句话:不是这个数好看,是不除它,Softmax 就从一个会分配注意力的裁判,变成一个只会喊”全给他”的暴君。


三、多头注意力,为什么不干脆把单头的维度调大?

好问题。8 个头各 64 维,拼起来 512;那我直接来一个 512 维的大头,不更省事?

不行。你缺的不是维度,是”第二种意见”。

关键在:一个注意力头,只出一个 Softmax,也就是只有一张注意力分布图。 这张图只能表达一种关注模式。你把单头维度从 64 调到 512,只是让这同一张图画得更精细——分辨率高了,可还是一张图、一个视角。

而语言得同时看好几套关系:一套盯语法(主谓宾谁管谁),一套盯指代(这个”它”指前面哪个词),一套盯语义(近义、搭配)。这些关系还经常打架——盯语法时该重看的字,盯指代时可能压根不该看。逼一张图同时表达,只能得到一个和稀泥的平均值,谁都没照顾好。

多头的妙处,是把 512 维切成 8 块,每块独立算自己那张图。语法头管语法、指代头管指代,各画各的,最后拼起来。总计算量没变,换来 8 个互不干扰的视角。 这不是把一个人的眼睛做大,是请来 8 个各有专长的人同时看一句话。

宽,只是把一件事看得更清;多,才是同时看清好几件事。


四、RoPE 凭什么能”训练只见过 8K,推理却撑到 128K”?

位置编码里最反直觉的一手。模型训练时最长只喂过 8K,推理却能读 128K——它凭什么认识那些从没见过的位置?

先看老办法为啥不行。BERT 那代用”可学习位置编码”:每个位置单独学一个向量。问题是它只学过训练时见过的位置,第 10000 个位置的向量?一片空白。一旦超长,直接懵圈。这路子记的是绝对门牌号,门牌没发到的地方全是荒地。

RoPE 换思路:不发绝对门牌,而是按位置给每个字的向量”转一个角度”,位置越靠后转得越多。妙在两个字做点积时,结果只取决于它俩转角的差,也就是它俩的相对距离,跟绝对位置无关。

这就通了:模型在 8K 范围内早把”隔 5 个字""隔 50 个字”该是什么关系学透了。等推理时字排到第 10 万位,它没见过这个绝对位置,但”隔 5 个字”这种相对距离它太熟了。从背绝对门牌,变成认相对距离——距离这东西,天生就可外推。

(严格说纯 RoPE 拉到 128K 也会飘,工程上还得靠 NTK、YaRN 微调旋转频率。但能外推的根,就是”只认相对距离”。API 文档那句 “context: 128K” 背后就是它。)


五、量化把精度砍掉一大半,模型为什么没变傻?

特别违背直觉。FP16 砍成 INT4,数据量掉到四分之一,信息丢了一大半,它怎么还答得好?

因为你丢的,是模型根本不靠的那部分精度。

打个你天天见的比方:JPEG。一张照片存成 JPEG,扔掉大量像素细节,文件小十几倍,可你一眼看去还是那张照片——它扔的是你眼睛分辨不出的高频细节,保住了你真正在看的轮廓和色块。量化一模一样。

大模型的”知识”,不藏在每个权重小数点后第八位那种精雕细琢的绝对值里,而藏在成千上万个权重之间的相对大小关系里。模型预测下一个字,靠的是比较一堆候选词的分数谁高谁低——它要的是排序,不是精确读数。 你把权重从 3.14159265 舍成 3.14,每个数糊了一点,但它们”谁大谁小”的格局基本没动。排序不变,输出就不变。

再加上神经网络天生抗造:训练时就被 dropout、加噪声反复折腾,本来就是个缺胳膊少腿也能跑的冗余系统。量化那点舍入误差,毛毛雨。讲究的量化(比如 AWQ)还会把少数几个特别关键的”离群”权重单独留高精度,专砍无关痛痒的,就更稳。

砍的是描述的精度,留的是判断的次序。次序还在,脑子就还在。


六、Mamba 又快又好,O(N) 吊打 O(N²),为什么没干掉 Transformer?

全系列最该泼冷水的一条。Mamba 读长文不卡、算力线性,看着像终结者。可两年过去,主流还是 Transformer——为什么?

因为 Mamba 的快,是拿记忆力换的。

Transformer 靠 KV Cache,把每一个历史 token 的 K、V 原封不动全存着。这叫完美回忆——你问它三万字前那个身份证号,它能精确翻回去一位不差抄给你。代价就是那个要命的 O(N²):存得越多,越慢越费显存。

Mamba 反过来。它像人做阅读理解,读一段就在脑子里写个总结,然后把原文忘掉。它只维护一个固定大小的”状态摘要”,不管文章多长摘要就那么大——所以快,O(N)。可问题正出在这:一个装不满的固定盒子,读得越多就越得边读边扔。你回头问它三万字前那个精确身份证号,它大概率答不上——那串数字早在”写总结”时被当噪音丢了。

于是成了道选择题:你要一个记性完美但越用越慢的,还是一个飞快但会选择性遗忘的?

对”把前文某个精确信息拎出来”这类活儿(代码里引用一个远处变量、长文里做上下文学习),Mamba 的压缩是硬伤,而这恰恰是大模型最值钱的能力之一。所以业界现在不搞二选一,是掺着用——Jamba 这类混合架构,几层 Transformer 管精确回忆,几层 Mamba 管长程压缩,各取所长。

Transformer 是背着整座图书馆赶路,慢但什么都查得到;Mamba 是只带一本随手记的笔记本,轻快,但翻不回已经撕掉的那页。


七、深度思考模型多烧那么多算力,凭什么效果反而更好?

第五章讲了 o1、DeepSeek R1 这类”慢思考”模型,但漏了最该问的一句:慢思考要多吐成百上千个”思考”字,每个字都费算力,凭什么这么烧,答得反而更准?

先搞清它烧在哪。普通模型你问一句、它答一句,一次 forward 吐一个字,算力是固定的。慢思考模型不一样:它答之前,先哗啦啦写一大段给自己看的草稿——列步骤、试思路、自我否定,几百上千个 token。每个 token 都是一次完整 forward。算力翻几倍几十倍,就烧在这堆草稿上。

那凭什么值?关键洞察是这句:一次 forward 的算力是死的,不管题难题易都一样多。

这就荒唐了——“1+1”和一道要绕七道弯的推理题,在普通模型眼里享受同样的思考预算。简单题够用,难题就”想不动”,只能靠直觉硬蒙,蒙错了还没法回头。

慢思考干的事,是把思考过程外化成文字,写进上下文当草稿纸。这带来两个普通模型给不了的东西:

  • 能踩着前一步往下走。第 3 步的推理,能直接读到第 2 步写下的结论。等于把一道大题拆成一串小题,一步一个脚印,而不是一口气闷头猜到底。
  • 能中途发现错、掉头重来。草稿里写着写着”不对,这条路走不通”,它能划掉重开。普通模型第一个字说错,后面只能将错就错。
说明

再往下问:那为什么不训练时就学会”一步到位”,省掉草稿? 因为模型的”深度”是死的——层数固定,一次 forward 能做的推理步数就那么多,装不下任意长的推理链。把推理摊成一串 token,等于用”长度”换”深度”:题越难,我就多写几步草稿,把算力当场追加上去。这就是这两年最火的那句”test-time compute”——推理时才决定这道题值得想多久。

一句话:普通模型是抢答,想没想清都得马上开口;慢思考是允许打草稿,难题多算一会儿,拿算力换对错。


八、总听说”蒸馏”,到底什么叫蒸馏?有几种蒸法?国内模型”蒸”国外,又在蒸什么?

这词满天飞,但十个人讲有八个讲拧巴。一次说清。

先说什么叫蒸馏。 一句话**:用一个已经很强的大模型(老师),去教一个小模型(学生)。**

但精髓不在”教”,在教什么。笨办法是让学生去啃原始数据的硬标签——这张图”是猫”(对)、“不是狗”(错),非黑即白。蒸馏高明在:让学生学老师给出的软标签——老师看这张图,给的是”猫 90%、狗 8%、老虎 2%“这么个概率分布。

这个分布里藏着金子。 它等于老师在悄悄告诉学生:“猫和狗长得有点像,和老虎不太像。“——这种判断的分寸感、经验里的弦外之音,是硬标签(“就是猫”)里绝对没有的。学生学的不只是答案,是老师的语感。这就是蒸馏能让小模型”越级”的根:它继承的是消化过的经验,不是生的数据。

再说有几种蒸法。 按两个维度分。

学老师的哪一层:

  • 软标签蒸馏(学答案):只学老师最终输出的那个概率分布。最常见、最省事。
  • 中间层蒸馏(学思路):不光对答案,还让学生的中间层去对齐老师的中间层——相当于不只抄结论,还抄老师的解题草稿。学得更像,但要能扒开老师的内部。
  • 关系蒸馏(学品味):学老师对”一批样本之间谁跟谁像”的判断。

能不能扒开老师(这个维度才是”国内蒸国外”的关键):

  • 白盒蒸馏:老师是自家的,权重、概率分布随便看。信息最全,效果最好(比如自家大模型蒸一个小模型放手机上)。
  • 黑盒蒸馏:老师是别人家的,你只能调 API,只看得见它吐出来的文字,看不见内部那个概率分布。

现在能回答你最后那个问题了——国内模型”蒸”国外,到底在干嘛?

干的就是黑盒蒸馏:拿别家顶级模型的 API,海量地喂问题、收集它的回答,攒成一大批”问答对”和”推理过程”,再用这批数据去训练自己的模型。说白了,把老师的答卷抄成一本习题集,让自己的学生刷。

争议也在这。两个层面:

  • 规矩层面:这几乎必然踩人家服务条款的红线——API 买来是给你用的,不是给你扒着训竞品的。所以是笔糊涂账,谁都不会大方承认。
  • 本事层面(这个更要紧):黑盒蒸馏学到的,是老师**“输出的影子”,不是”能力的本体”。你只看得见它说了什么,看不见它为什么这么说。这决定了两件事——你只能无限逼近老师,极难超过他;而且老师的错误、偏见,你也一起抄了进来**。
说明

再往下问:那为什么大厂还拦着不让蒸?抄都抄不过,不是白费劲? 因为对”追赶者”来说,蒸馏是最快抹平差距的捷径——省掉了从零探索的天价成本,直接站在别人肩膀上够到 80 分。领先者真正怕的不是被超过,是这条捷径让”领先”这件事的保质期变短:你憋了一年砸了几亿练出来的本事,对手花几个月抄答卷就逼近了。护城河不是被填平的,是被抄近道绕过去的。

一句话:蒸馏是让小模型继承大模型”消化过的经验”;能扒开老师就是白盒、只能抄答卷就是黑盒;而”国内蒸国外”之所以吵翻天,是因为抄来的是影子——够得着及格线,够不着天花板。


九、模型答话,为什么是一个字一个字往外蹦,不能唰一下吐一整句?

天天见,却没人问为什么。答案藏在一个词里:自回归

大模型骨子里只会干一件事——预测下一个字。它把你的问题读进去,预测出第一个字;然后把这个字接回到输入末尾,再预测第二个字;再接回去,预测第三个……每一个新字,都得等前面所有字都定下来,才能开算。 这是刻在架构里的死规矩,所以它天生串行,只能一个一个蹦。

说明

再往下问:那为什么不并行,一次算出后面十个字? 因为第 10 个字依赖第 9 个字是什么,而第 9 个字这会儿还没定呢——你没法算准一个”建立在还不存在的东西之上”的字。这就是投机解码(第六章那个)的由来:让一个小模型先大胆猜 5 个字,再让大模型一次性验这 5 个——猜对几个赚几个。它不是打破了串行,是用”猜+验”赌一把,把等待摊薄了

它不是在打字,是在走一条只能往前、不能并排的独木桥。


收尾

写到这我越发觉得,大模型这套东西最迷人的地方,恰恰不在那些”是什么”,而在每个设计背后那句没说出口的”本来可以那样,为什么偏偏是这样”。三个矩阵、除个根号、切成多头、打一段草稿——每一步都不是天上掉下来的最优解,而是有人在某个岔路口,替一个说不出口的矛盾做了取舍。

看懂”它是什么”,你会用;想通”它为什么不能是别的”,你才算真的懂了它。

那么轮到你了:今天你用大模型,有没有哪个瞬间,也冒出过一个”这为什么不能反过来”的念头?那个念头,可能就是你比别人多懂一层的入口。 评论区丢给我,攒够了我出「答疑篇 · 卷二」。