← 返回博客
[从零训练一个200B大语言模型] 4/25:一个大语言模型里面长什么样?

[从零训练一个200B大语言模型] 4/25:一个大语言模型里面长什么样?

前三篇,我们选了GPU,估了训练时间,也算了钱。现在把机器放到一边,看看它们究竟要训练一个什么样的东西。

假如给模型一句话:“窗外下着雨,我拿起了……”它怎样接出“伞”?这一篇就沿着这句话,从输入一直走到输出。我们先看稠密模型:每层都用同一套完整网络处理各个文字位置。下一篇,再看把其中一块拆成多个可选择的“专家”的MoE模型。

文字先变成一串数字

计算机先把这句话切成token,给每个片段找到编号,再根据编号查一张表,取出一串数字。这样,文字就有了可以参与计算的表示。每个位置都有自己的一串数字,随着模型往下计算,这些数字会不断更新。

我们盯住句尾的同一个位置,看它的数字怎样往下走。下面用英文句子中的“my”作例子,只画三个数。查表时,它是 [0.2, -0.4, 0.7]。蓝色A把前面的“Rain outside”带进来,状态变成 [0.5, 0.1, 0.6];金色B再加工一次,得到 [0.8, -0.2, 0.9]。这三个数原样送进下一层,下一层再继续计算。

同一位置的向量逐层更新:每格一个数字,整组三格一个示意向量;B输出原样进入下一层

先认图里的形状:每个小格是一个数字,整组三格合起来才是一个向量。图中只用三个数把变化画清楚;实际模型通常用几千个数表示一个位置。A负责带入前文,B负责加工这串数字,它们怎样工作,后面会逐块展开。

这里变化的是这次读句子产生的状态。模型训练时学到的权重,在这次生成过程中保持不变。可以把权重理解为已经学会的计算方法,把状态理解为这次计算得到的结果。换一句话,同样的计算方法就会得到另一组结果。

Token:模型处理的一小段文字,可能是一个字、半个词,或几个字符。

向量:一串按顺序排列的数字。模型用它表示一个token当前的状态。

先看总图,再打开其中一层

现在给这张总图一个名字:Transformer。它是一种组织神经网络的方式,把注意力和前馈网络组合成层,再把多层接起来。注意力是里面的一块,Transformer是整体结构。

我们这一篇画的是用于续写的decoder-only Transformer,也就是以生成文字的decoder为主干。它把提示词和已经生成的文字放在同一条路上,接着预测下一个token。在原始翻译架构里,encoder先把源语言句子处理成一组表示,decoder利用这些表示生成译文。本文的decoder-only把已有文字直接交给生成主干,省去了独立的文本encoder。预测下一段时,可用的是已经出现的文字,所以每个位置只读取自己和前面的位置。

下图是这条路的地图。文字变成数字后,经过第一层、第二层、第三层,再继续往后,最后到达出口。图中只展开三层,方便看清连接。

每层都按相似顺序工作:先经过蓝色A,再经过金色B。第一层的输出成为第二层的输入,第二层再传给第三层。我们先圈出第一层的A和B,接下来的两张图分别把它们放大。颜色和字母始终对应同一个位置。蓝色短条代表一个文字位置携带的向量;金色B把一个向量拆开画,里面每个小圆点只是其中一个数。B里只画少量分量,实际网络的宽度会大得多。

稠密模型总图:A中的蓝色分格短条代表向量,B中的金色圆点代表向量里的单个数;A和B对应后续放大图

Transformer:把注意力、前馈网络等计算组织成多层的神经网络架构。

Decoder-only:只用生成文字的主干来处理提示词、接着输出文字。这里每个位置的注意力只看自己和前面的位置。

层:一组会在模型中重复出现的计算。总图中,每层都有蓝色A和金色B。

模型深度:模型里这样的层有多少组。

注意力:总图中的蓝色A,负责取回前文信息。下一节会把这一块放大。

前馈网络:总图中的金色B,负责继续加工当前状态。后面的B放大图会展示它的连接。

放大A:模型怎样用上“下着雨”?

来到句尾时,模型已经看到“窗外下着雨,我拿起了”。要接下一个词,句尾这个位置需要用上前面的线索。注意力做的事情,可以顺着三个动作看:比较、分配比例、取回信息。

先比较。句尾有一串数字,前面每个位置也各有一串。模型按训练学到的方法,用句尾的表示与这些位置的表示比较,给各个位置算一个相关分数。换一句话,送入比较的数字会变,算出的分数也可能改变。

再分配比例。把分数换成加起来等于100%的比例,就知道这一次从各处取回的信息要各占多少。下面的英文例子里,第一轮给“Rain”分40%,给“picked”分15%,其余位置合计45%。这些比例是教学示意,用来把过程画出来。

最后取回信息。假如分给“Rain”的比例是40%,就把从这个位置取出的那串数字乘以0.40。取出的表示是模型按学到的权重转换后的向量;其他位置也各自乘以对应比例,再把结果加起来。这样,句尾就得到了一份混合了前文的信息,用它更新自己的状态。比例大,表示这个位置的信息在这一次混合中占得多。图中把两者分开画:蓝色分格短条是一整个向量,旁边的40%是一个数,用来乘短条里的每个分量。汇合后的结果仍是一个向量。

A的两轮放大:每条蓝色分格短条是从一个文字位置取出的向量,百分比是单个混合权重;加权相加得到一个新的向量

图中始终跟着句尾的“my”。第一轮A算完后,B继续加工;与此同时,其他位置也在更新自己的状态。到了第二层,送进A的已经是这一批更新过的数字。它重新比较,再分配一组比例。因此,同一个位置可以在第一轮更多地取回天气线索,在第二轮用已经组合过的信息继续判断关系。实际训练会决定这些分工。

同一层的注意力还可以有几组并行的比较和混合。上图只打开其中一组,让我们看清它怎样把前文带到当前位置。

注意力(attention):让当前位置比较各处信息,再按算出的比例取回、混合信息的方法。

上下文:当前可用的前文。这里讨论的生成模型,在一个位置只能使用这个位置及之前的信息。

注意力比例:某个位置的信息在一次混合中占多少。它由模型当场算出,可以随输入和层改变。

放大B:取回的信息怎样继续加工?

现在放大总图中的金色B。这里已经打开了一个向量:每个圆点表示其中一个数,一整列圆点合起来表示一个向量。图中只抽出少量分量,让连接看得清楚。每条连接都有一个训练学到的权重。一个圆点收到多个输入时,会先把输入与各自权重相乘,再相加,接着经过一道转换,形成新的数。许多这样的计算连在一起,就能把当前状态变成另一种表示。

B处理的是已经带着上下文的状态。它对“下雨”和“拿起东西”之间的联系能够作出什么反应,取决于训练学到了怎样的权重。训练会反复调整这些权重,让整个模型越来越擅长预测后面的文字。

B内部:每个圆点是一个数,整列表示同一文字位置的向量;连线带有训练学到的权重,图中只画少量分量

B会分别处理每个文字位置,在同一层里使用同一套权重。不同位置送进来的数字不同,结果也会不同。这里连线上的权重来自训练,在生成时保持不变;A图里的百分比则是这次读句子当场算出的混合比例。A让文字位置之间交换信息,B再把每个位置的状态加工一次,两部分接起来,就完成了一层的主要工作。

层内还保留了把原有状态带到后面的连接,让它与新计算的结果相加。这样,下一步既接到新的加工结果,也接到前面已经形成的信息。真实的层还会调整数字的尺度,让计算更稳定。总图先画出A和B,保留主路的清晰度。

前馈网络(feed-forward network,FFN):把输入数字按学到的权重逐步变成输出数字的一段神经网络。

权重:决定一个输入对下一步结果影响多大的数,是可学习参数的一种。

第二层、第三层,又在做什么?

第一层接到的是文字刚查表得到的表示。第二层接到的已经是第一层看过上下文、加工过的结果。第三层又在第二层的结果上继续计算。每多一层,模型就多了一次组合、加工信息的机会。

为什么第二层还要有A?因为它现在有了第一层尚未见到的信息组合。比如,前一层可以让“拿起”这个位置带上“我拿起”的联系;后一层的句尾再从它那里取信息,接到的就比最初孤立的文字表示更丰富。前面的位置已经加工过,句尾自己的状态也已经变过,新的比较就有机会找到新的联系。

A让不同位置交换信息,B则分别加工每个位置。假如只在开头用一次A,后面全是B,后续计算就只能各自加工已经取回的内容。我们这篇选择的Transformer结构,把A和B放进每一层,让它们交替进行:交换,再加工,再用加工后的结果交换。层数决定了这样的往来可以发生多少轮。

各层的A和B看起来相似,却保存着各自的权重。同样的连接方式,在不同层可以完成不同的计算。这些层怎样分工,是训练逐渐形成的。我们设计网络时,先决定有多少层、每层能处理多宽的一串数字,以及怎样把各层连接起来。

这里也能看懂200B的含义了:约两千亿个可学习参数,分布在整个模型里。层数只是其中一个选择。把每层做宽、把B里面的网络做大,也会增加参数。因此,只知道200B,还不能确定一张完整的结构图。

参数:训练过程中会调整、训练后保存在模型里的数。

状态:处理某一次输入时产生的数。同一个模型读不同句子,使用的是相同参数,产生的状态会不同。

到了出口,怎样生成“伞”?

最后一层算完后,句尾的状态还只是一串数字。出口处的计算把它变成词表中每个候选token的分数,再把分数变成概率。如果模型学好了这类关系,在这个语境里,与“伞”有关的接续就可能得到较高概率。

模型按生成规则选出下一个token,把它接回原文,再继续预测。一个词可能需要几个token,完成一句回答也要重复很多次。实际系统会保存前文的一部分计算结果,供后续步骤复用。

现在可以把整条路连起来了:文字变成数字,A取回上下文,B加工状态,各层接力,出口给候选token打分,再选择下一小段文字。

词表:模型可以输出的全部token。

输出概率:在给定前文下,模型给各个候选token分配的可能性。

Meta仍然在用这样的稠密结构

这套结构也有2026年的真实例子。Meta在8月发布的Muse Glimmer采用稠密语言主干,有52层,整体规模约30B,面向本地运行。这为我们提供了一套比200B更小、可以公开查看的具体设计。

它还把注意力的范围作了安排:有些层只看附近文字,另一些层可以看更远的前文。对应到总图,调整的是蓝色A读哪些位置。看懂A和B以后,再遇到这种设计,就知道它改了网络的哪一部分。

稠密(dense):这里指每个token都使用各层同一套完整的前馈网络。

MoE:混合专家模型。它把B改成多组可选择的网络,让一个token只调用其中一部分,下一篇会展开解释。

接下来,我们要改变哪一块?

这篇先把稠密模型这条完整路径走通。对我们的200B项目,它提供了一份清楚的结构基线:同一套前馈网络处理每个token,参数规模和每步计算量联系紧密。层数、宽度,以及A和B各分多少容量,都需要落在同一份参数预算里。

下一篇保留这张总图,专门改金色B。我们会把一个前馈网络变成多个专家,再解释谁来选择专家、为什么这样能减少每次调用的计算,以及GPU之间要为此多传哪些数据。DeepSeek-V4.1-Flash-1017的具体结构,也放到那时逐项看。

这样,两篇回答两个相连的问题:这一篇讲清一个模型怎样完整地工作;下一篇讲清MoE在什么位置作了改变,以及我们为什么可能选择它。两条路线比较清楚后,再给自己的200B模型定具体配置。

想多看一点:为什么B中间还需要一道转换?

如果每一步只做乘法和加法,多层这样的计算仍可以合并成一次同类计算。中间加入非线性转换后,网络就能表达更复杂的关系。实际前馈网络还可能有分支和门控。上图先保留输入、加工、输出这条主要路径,帮助看清圆点与权重的关系。

Transformer把注意力与前馈网络组合成重复的层。原始论文给出了这个基础结构;本文的现代稠密实例来自Meta的公开模型说明。这些图都是教学示意,层数与圆点数量经过简化。

新文章,直接发到你的邮箱。

AI、工程与实验,每月 1–2 封。

无垃圾邮件,随时取消。