夜雨聆风学习资料网

ARTICLE · 1157081

AI认知提升:大模型里面到底有什么?拆开Qwen3看一看

AI认知提升:大模型里面到底有什么?拆开Qwen3看一看
想了解大模型的内部结构,最简单的办法就是直接下载一个看看。
考虑到硬盘有限,那我们就下载一个最小的,Qwen3-0.6B,约6亿参数。采用FP16或BF16时,大小仅1.2GB,可以说硬盘毫无压力。
网址在:
https://huggingface.co/Qwen/Qwen3-0.6B

Qwen3-0.6B的模型结构

Qwen3-0.6B 约有6 亿个参数。使用 BF16 等 16 位格式保存权重时,体积大约1.2 GB。它的主要计算过程,可以简化为:
输入文字 → Tokenizer → Token ID → Embedding → 28 层 Transformer → 输出分数 → 选择下一个 Token

输入部分:Embedding(词嵌入层)

模型不认识文字,只认识token。一个 token 可能是一个汉字、一个词、词的一部分、标点,或者特殊符号。这个切分过程由Tokenizer(分词器)完成,每个 token 都有对应的编号(token ID)。
Embedding  就是词嵌入层,作用是把 token id 映射成向量。
151936:词表大小,也就是模型可识别的 token 数量。1024:每个 token 对应的向量维度
Tokenizer会把文字切成token,再映射到token id。一个token可能对应一个汉字、词的一部分、标点或特殊符号。
不同的模型有不同的token数,比如Qwen3-0.6B就有151936个token。
模型的Embedding层,就是把输入的151936维的token“压缩”为1024维的向量,这个过程叫Embedding。
工程实现上,通常设计一张可训练的矩阵,共有151936行,1024列。输入一个token id,就取出对应的1024维向量。数学上,这等价于one-hot向量与矩阵相乘;实现时通常直接查表,不构造one-hot向量。
Embedding层的参数量就有151,936 × 1,024 = 155,582,464,约 1.56 亿个,约占全部参数的26%

核心部分:28个Transformer Decoder block

因为GPT采用了Decoder-only的技术路线,现在大模型Follow GPT的实现,一般也只使用Decoder。
Qwen3采用Decoder-only结构,不使用独立的Encoder,因此也不需要读取Encoder输出的交叉注意力(Cross-Attention)。它保留因果自注意力(Masked MHA),让每个位置只能利用自身及之前位置的信息。

Attention

每一层先对输入做RMSNorm,再进入Attention。RMSNorm根据向量的均方根调整尺度,并带有可学习的缩放参数,帮助控制计算过程中的数值尺度。
Attention把输入分别投影成Query、Key和Value,通常简称Q、K、V。一个位置的Q与可见位置的K计算匹配分数,分数经过softmax,作为加权汇总V的权重。
可以把核心计算写成:
M是因果Mask。预测某个位置之后的token时,不能使用未来位置的信息;因此被遮住的是未来位置的注意力分数,通常在softmax前设为负无穷。并非把输入尾部几个向量直接清零。
Qwen3还会对Q和K做归一化,并使用RoPE给Q、K引入位置信息。RoPE通过旋转向量分量,使注意力计算能够体现位置关系。
多个注意力头分别完成计算,再经过输出投影回到隐藏维度。

一个特别容易算错的尺寸

很多示意图默认“隐藏维度÷头数=头维度”。在这个模型里,需要按配置检查。
Qwen3-0.6B的隐藏维度是1024,查询头有16个,而每个头是128维。因此Q投影输出宽度为:
K和V各有8个头,输出宽度分别是:
这就是GQA,分组查询注意力:16个查询头共享8组K/V,每两个查询头对应一组K/V。各查询头仍分别计算注意力,共享的是K/V表示。相比同样头维度下保存16组K/V,可以减少缓存占用。
Attention投影
输入宽度→输出宽度
权重参数量
Q投影
1024→2048
2097152
K投影
1024→1024
1048576
V投影
1024→1024
1048576
输出投影
2048→1024
2097152
这一层Attention的投影矩阵合计6291456个参数。表里写的是变换方向;PyTorch的线性层权重通常按“输出维度、输入维度”保存。
Attention输出与进入这一分支前的输入相加,形成残差连接。它让网络可以在已有表示上增加修正,也为深层网络训练提供更直接的梯度路径。

Feed Forward Net

经过Attention,一个token已经聚合了其他可见位置的信息。随后,另一个RMSNorm把它送入FFN。
FFN在每个位置上使用同一套权重,处理该位置的通道。它不在这一分支直接跨位置做注意力汇总,但输入已经包含上下文信息。
Qwen3使用SwiGLU形式,可以写成:
它包含三套主要矩阵:gate_proj和up_proj都把1024维映射到3072维;两个结果逐元素相乘后,down_proj再映射回1024维。
SiLU为
,输出不局限在0到1。这里的门控会调节中间特征,不适合直接理解成“给每个事实打一个概率分数”。
这一层FFN的参数量是:
FFN输出也通过残差连接与分支输入相加。于是一个Decoder层的主要计算过程是:
这样的层重复28次。训练会让各层共同学到语言与任务所需的表示,但不能仅凭层号,就给它们分配固定的“词法层、语法层、推理层”。

输出部分:RMSNorm与语言模型输出头(输出层)

经过28层和最终RMSNorm,当前位置仍然是1024维表示。输出层把它映射到151936个logit,分别对应词表中的token。
logit是未归一化分数。softmax可以把这些分数转换为分布,解码策略再从中选择下一个token。可以选最高分,也可以结合temperature、top-p等参数采样。
Qwen3-0.6B的输出矩阵与输入嵌入矩阵共享权重:输入时从表里取一行,输出时用同一张表计算各token的分数。因此,不能再为输出层重复加上1.556亿参数。
选出一个token,把它接到历史输出后面,继续预测。

Qwen3.8-27B:不只是增加了参数

再看一个更新、更大的模型:Qwen3.8-27B。
对比项
Qwen3-0.6B
Qwen3.8-27B
参数规模
约 6 亿
约 270 亿
文本内部向量宽度
1,024
5,120
语言模型层数
28
64
核心结构
常规 Transformer 注意力
线性注意力 + 全注意力混合
图像、视频理解
不原生支持
支持,配有视觉编码器
27B 大约是 0.6B 的45 倍参数量。如果只算 16 位权重,约需54 GB存储空间;真正运行时还要考虑缓存、激活和其他开销,不能把这个数字直接当作显存需求。
更重要的是,Qwen3.8-27B 不只是把原来的 28 层加到 64 层。根据官方模型说明,它在每四层中安排三层 Gated DeltaNet(线性注意力机制)和一层全注意力,重复 16 次。
不必急着理解 Gated DeltaNet 的数学细节。只要知道:新架构试图在理解复杂上下文的同时,更有效地处理长序列;并且通过视觉编码器,把图片、视频转换成模型可以利用的信息。
这说明今天的大模型已经在朝着更大规模、更长上下文、多模态,以及更高的计算效率持续演进。

参考资料

  • https://huggingface.co/Qwen/Qwen3-0.6B
  • https://huggingface.co/Qwen/Qwen3.8-27B

相关学习资料