![[从零训练一个500B大语言模型] 4/25:一个大语言模型里面长什么样?](/_next/image?url=%2Fblog%2Ftraining-500b-part-4-cover-refresh-v2.webp&w=3840&q=75&dpl=dpl_HKDZtjNTn1U2zk8pGrYRnYGkyGR9)
[从零训练一个 500B大语言模型] 4/25:一个大语言模型里面长什么样?
采购表上有GPU,计划表上有训练时间,预算表上有钱。轮到画模型的时候,纸上却还只有一个数字:500B。
五千亿个参数究竟要连成什么样?我把采购表放到一边,在纸上写下一句:“窗外下着雨,我拿起了……”先跟着这句话走一遍。要是连一个“伞”字怎样从网络里出来都说不清,机器再多,里面装的也仍是一个黑箱。
一句话进了机器,先变成什么?
文字不能直接参加GPU里的乘法。入口先把句子切成小片段,也就是token,给每个片段找到编号,再按编号查表,取出一串数字。每个文字位置都有了自己的数字表示,后面的网络就可以接手了。
继续追这串数字之前,我先给每层最重要的两个步骤定名:蓝色A是注意力,负责让当前位置从前文取回相关信息;金色B是前馈网络,负责继续加工当前位置已经拿到的状态。下面先跟着数字走,后面再把A和B分别展开。
我在句尾画了一个记号,后面始终盯住这个位置。英文图里对应的是“my”。刚查表时,它带着 [0.2, -0.4, 0.7];经过蓝色A,前面的“Rain outside”参与了计算,数字变成 [0.5, 0.1, 0.6];再经过金色B,得到 [0.8, -0.2, 0.9]。这三个数原样进入下一层,继续往下走。
图里的每个小格是一个数,整组三格才是一个向量。为了看清变化,这里只展开三个分量,实际模型通常用几千个数表示一个位置。句尾的文字没有换,携带的数字却在更新。随着前文被带进来,它逐渐有了这句话里的含义。
这让我先分清了两件东西:网络训练后留下的权重,决定怎样计算;眼前这串不断变化的数字,是这句话经过计算产生的状态。生成这句话时,权重保持不变。换一段文字进来,同样的计算方法会产生另一组状态。
Token:模型处理的一小段文字,可能是一个字、半个词,或几个字符。
向量:一串按顺序排列的数字。模型用它表示一个token当前的状态。
把A和B连起来,才看见整个模型
入口已经能把文字变成数字,接下来的问题是:这些数字要经过哪些地方?我先画出整条路,再去看每一站。
这条路叫Transformer。它把注意力和前馈网络组成一层,再把许多层接起来。蓝色A是注意力,金色B是前馈网络。第一层的输出进入第二层,第二层再交给第三层,一直传到最后的出口。
我们要做的是续写文字,所以选用decoder-only Transformer,也就是以生成文字的decoder为主干。提示词与已经生成的文字走同一条路,模型据此预测下一个token。它每走到一个位置,能用的就是当前位置和之前的文字。
这个名字来自更早的翻译架构。原始论文里,encoder先处理源语言,decoder根据它得到的表示生成译文。现在这条decoder-only路线把已有文字直接交给生成主干,省去了独立的文本encoder。这样,“窗外下着雨,我拿起了”本身就成为继续生成的依据。
总图只展开三层,连接方式已经能看清。每层先过A,再过B。蓝色短条是一整个向量;金色B把向量展开了,每个圆点代表其中一个数,一列圆点合起来才是一个向量。接下来沿着图上的圈,分别打开A和B,颜色和字母都保持不变。
Transformer:把注意力、前馈网络等计算组织成多层的神经网络架构。
Decoder-only:只用生成文字的主干来处理提示词、接着输出文字。这里每个位置的注意力只看自己和前面的位置。
层:一组会在模型中重复出现的计算。总图中,每层都有蓝色A和金色B。
模型深度:模型里这样的层有多少组。
注意力:总图中的蓝色A,负责取回前文信息。
前馈网络:总图中的金色B,负责继续加工当前状态。
句尾怎样知道,窗外正在下雨?
只看“我拿起了”,后面可以接很多东西。想接出“伞”,句尾就得用上前面的“下着雨”。这个问题落到了蓝色A身上:有这么多前文,这一次该取哪些信息?
A先做比较。句尾有自己的数字,前面每个位置也有自己的数字。模型按训练学到的方式转换、比较这些表示,为各个位置算出相关分数。再把分数变成一组总和为100%的比例,决定从各处取回的信息怎样混合。
图里的第一轮给“Rain”40%,给“picked”15%,其余位置合计45%。顺着40%往下看,就能明白它怎样发挥作用:从“Rain”位置取出的向量,经过学到的权重转换后,每个分量都乘以0.40。其他位置也乘上各自的比例,最后逐个分量相加,得到一个混合向量。
蓝色短条仍是一串数字,40%则只是一个数,用来乘这串数字的每个分量。合起来以后,句尾就收到了前文的信息,可以更新自己的状态。这一组比例把过程画清楚了;换输入、换层,比例也会重新计算。
第一轮A之后,B接着加工。与此同时,前面各个位置也在更新。到了第二层,句尾与前文都带着更新过的数字,A便重新比较,重新混合。图中第二轮的比例随之改变。网络还可以同时做几组这样的比较和混合,每组寻找不同的关联;这张图先跟住其中一组。
注意力(attention):让当前位置比较各处信息,再按算出的比例取回、混合信息的方法。
上下文:当前可用的前文。这里讨论的生成模型,在一个位置只能使用这个位置及之前的信息。
注意力比例:某个位置的信息在一次混合中占多少。它由模型当场算出,可以随输入和层改变。
雨的信息取回来了,怎样变成有用的判断?
A解决了信息从哪里来的问题。可是,把“下雨”和“拿起东西”的信息放到一起,还需要继续加工,才可能帮助模型预测后面的文字。我于是打开总图里的金色B。
这里每个圆点是一个数,整列圆点是一个向量。连线带着训练学到的权重:收到一个输入,就乘上这条线的权重;收到多个输入,就把这些乘积加起来,再经过一道转换,形成新的数。许多这样的连接共同作用,把输入状态变成另一种表示。
B接到的已经是带着上下文的数字。它能怎样处理“下雨”与“拿起东西”的联系,取决于训练留下的权重。每次训练都让整条预测路径接受检验,B里的权重也随之调整,逐渐学会有助于预测的加工方法。
同一层的各个文字位置共用这套B,分别送入自己的向量。输入不同,输出自然不同。这里又碰到了前面那个区别:B连线上的权重来自训练,在生成时固定;A图中的40%、15%则是这次计算产生的比例。
把A和B接起来,一层的主要工作就有了:先让位置之间交换信息,再分别加工各自的状态。层里还保留一条路,把原有状态与新结果相加,让后续计算接着已有信息往下走;另外还有调整数字尺度的步骤,帮助计算保持稳定。总图保留A与B这条主路,旁边这些安排共同支撑它运行。
前馈网络(feed-forward network,FFN):把输入数字按学到的权重逐步变成输出数字的一段神经网络。
权重:决定一个输入对下一步结果影响多大的数,是可学习参数的一种。
第一层已经看过前文,第二层为什么还要再看?
沿着A和B往下画,一个问题随之出现:第一层已经取过前文,第二层为什么还要再取一次?顺着刚才那串数字往下追,答案就在输入里。第二层拿到的材料已经变了。
第一层看到的是文字刚查表得到的表示。经过一轮交流与加工,“拿起”这个位置可以带上“我拿起”的联系。第二层的句尾再从它那里取信息,得到的就比最初孤立的表示丰富。句尾自己也有了新的状态,带着新的需要去比较,便有机会找到更进一步的关系。
如果后面只放B,每个位置只能继续加工此前已经取回的内容。每层都保留A,就能把刚加工出来的信息再次交给其他位置使用。于是整条路成为一次次往来:交换,消化,再交换,再消化。第三层沿着第二层的结果继续,更多层提供更多轮组合信息的机会。
各层长得相似,却各有自己的权重。具体哪一层学会什么,由训练逐渐形成。设计时能直接决定的是层数、向量宽度、B的大小和连接方法。
这才轮到纸上的500B:它是整个模型约五千亿个可学习参数的合计。增加层数会增加参数,把每层做宽、把B做大也会增加参数。仅凭500B,画不出唯一的网络;层数、宽度和各部分容量,还得放在同一张参数清单里逐项分配。
参数:训练过程中会调整、训练后保存在模型里的数。
状态:处理某一次输入时产生的数。同一个模型读不同句子,使用的是相同参数,产生的状态会不同。
走完这些层,“伞”在哪里出现?
句尾经过最后一层,手里仍是一串数字。出口再做一次转换,为词表里的各个候选token打分,然后把分数变成概率。模型学好了这类关系,与“伞”有关的接续就可能在这个语境里得到较高概率。
生成规则根据这些概率选出下一个token,把它接到原文后面,继续预测。一个词可能拆成几个token,一句话也就这样逐步接出来。实际系统会保存前文的部分计算结果,后面的步骤可以复用。
纸上的路线终于闭合了。从文字查表得到数字,到A取信息、B加工,再经过许多层,最后给下一小段文字打分。看着这个出口,再回头看500B,参数就有了具体的位置与用途。
词表:模型可以输出的全部token。
输出概率:在给定前文下,模型给各个候选token分配的可能性。
拿公开模型对照,图上的位置就对上了
图上的路走通了,还需要拿一份公开设计核对:真实模型有多少层,又怎样安排这些结构?我打开Meta在2026年8月发布的Muse Glimmer。它的稠密语言主干有52层,整体约30B,面向本地运行。规模比我们的目标小,已经足够把这张图与一份公开设计对起来。
它还安排了不同的注意力范围:一些层只看附近,一些层联系更远的前文。这个变化现在很好找,改的是蓝色A允许读取哪些位置。层的排列、读取范围、网络宽度,终于都能落到图上的具体地方。
稠密(dense):这里指每个token都使用各层同一套完整的前馈网络。
MoE:混合专家模型。它把B改成多组可选择的网络,让一个token只调用其中一部分。
网络可以继续做大,每次都要全部算一遍吗?
图画清楚以后,新的成本问题浮出来了。稠密模型里,每个token都会经过各层完整的B。把这套网络做大,可以容纳更多参数,每次计算也随之增加。我们的500B工程基线正是这条稠密路线,后面的机器与训练计划仍围绕它展开。
但我想把另一个选择也算清:能不能保留更大的参数容量,每个token只调用其中一部分?沿着现有图找,最容易着手的地方就是金色B。把一套网络换成多个专家,再让一个小网络选择其中几个,就走到了MoE。
下一篇沿着这个问题往下看。总图保留,打开B,看专家怎样选择、少算的工作怎样落到GPU上,以及为此新增了哪些数据传输。DeepSeek-V4.1-Flash-1017的结构也放回这个位置来读,便能看清它改了什么,以及我们该怎样比较这两条路线。
想多看一点:为什么B中间还需要一道转换?
顺着B的连线计算时,还会遇到一个问题:如果中间一直只做乘法和加法,多层这样的计算可以合并成一次同类计算。增加层数的表达价值就受到了限制。插入非线性转换后,网络才能表达更复杂的关系。实际前馈网络还可能加入分支与门控,图里先留下输入、加工、输出,让圆点和权重的关系能看清。
Transformer把注意力与前馈网络组合成重复的层,原始论文给出了基础结构。本文对照的现代稠密实例来自Meta的公开模型说明。图里减少了层数与圆点数量,完整模型仍按各自的配置展开。
新文章,直接发到你的邮箱。
AI、工程与实验,每月 1–2 封。
无垃圾邮件,随时取消。