资深软件工程师AI转型之路 | 原理篇01--从零手搓大模型:CPU 训练全流程与底层原理解释
流程总览
本文以纯CPU训练为前提,系统性梳理从零构建、训练大语言模型的完整技术流程,覆盖数据工程、Transformer核心架构、模型训练与推理三大核心模块。拆解大模型从语料预处理到模型部署的全链路逻辑,为大模型入门学习与轻量化实践提供完整参考。

一、数据工程:语料预处理与词表生成
1. 语料准备与清洗
构建模型的基础训练数据,完成文本去重、去噪、剔除特殊符号、分句分段等标准化清洗操作。若简化数据工程流程,可通过生成式模型构造简易语料,但其文本质量与分布合理性较差,仅适用于实验验证。
2. 分词器构建
当前主流大模型均采用BPE分词算法,可直接基于HuggingFace Tokenizers库中的ByteLevelBPETokenizer快速实现分词器搭建。
3. 词表生成
利用预处理后的语料训练分词器,输出模型训练的核心基础文件——词表,为后续词嵌入提供映射依据。
二、模型核心:Transformer架构原理
1. 词嵌入矩阵构建
依据词表构建Embedding词嵌入矩阵 [v, d] ,其中 v 为词表规模, d 为单token的嵌入维度(常用维度768、1024)。
2. 位置信息编码
在词嵌入向量中注入序列位置信息,分为正弦余弦绝对位置编码(PE)与旋转位置编码(RoPE),当前工业界主流实现为RoPE,PE为基础理论原型。
PE编码规则:对位置 pos 的维度 i ,偶数维度采用sin函数计算,奇数维度采用cos函数计算,计算结果与词嵌入向量逐元素加和,完成位置信息注入。
其核心原理依托三角恒等式:
\sin(pos+k) = \sin(pos)\cos(k) + \cos(pos)\sin(k)
\cos(pos+k) = \cos(pos)\cos(k) - \sin(pos)\sin(k)
位置 pos+k 的编码可通过位置 pos 编码线性变换得到,使模型可学习token间的相对位置关系。
3. 多头自注意力计算
注入位置信息的嵌入向量进入多头自注意力模块,通过可学习矩阵投影为Q(查询)、K(键)、V(值)三个向量,按多头数量对嵌入向量切分后完成点积运算,建模token之间的上下文关联。
Q、K、V矩阵采用Xavier初始化或标准正态分布初始化,模型训练的本质即为学习最优权重参数。
4. 层归一化与前馈网络
层归一化(LayerNorm)将向量归一化为均值0、方差1的标准分布,保障训练数值稳定;前馈网络(FFN)先对嵌入向量升维,在高维空间学习复杂特征,通过GELU激活函数(现代大模型主流方案)完成非线性变换,最终降维回原始维度。
5. 残差连接
采用残差连接结构: 输出 = 原始输入 + 模块处理结果 ,防止深层网络出现梯度消失,保留原始输入信息。
按照设定的Block层数,循环执行注意力计算、归一化与前馈网络、残差连接操作,输出最终特征向量。
三、模型训练:预测推理与损失优化
1. 输出投影与归一化
以极简词表 [0:"我",1:"爱",2:"你"] 、嵌入维度4为例,模型最终特征向量经线性层 W_out 投影,得到未归一化的Logits分数。
通过Softmax函数将Logits转化为概率分布,该步骤为自回归模型预测的必要操作,与Logits数值大小无关。
2. 损失计算与参数更新
训练阶段基于标注真值,计算模型预测分布与真实分布的交叉熵损失(Loss),通过反向传播算法,将损失梯度回传至模型,更新Q、K、V、FFN等模块的可学习权重。
3. 模型保存与部署
模型训练收敛后,导出权重文件,通过专属部署脚本加载模型与分词器,完成推理服务部署。
本文是《资深软件工程师AI转型之路》系列的第 [4] 篇。
上一篇:https://blog.csdn.net/m0_46187008/article/details/158663715?spm=1001.2014.3001.5502
下一篇:https://blog.csdn.net/m0_46187008/article/details/158841354?spm=1001.2014.3001.5501
系列目录:https://blog.csdn.net/m0_46187008/category_13135461.html?spm=1001.2014.3001.5482
欢迎交流:如果本文对你有帮助或启发,欢迎点赞、收藏、关注。对于文中的内容有任何疑问或独到见解,也欢迎在评论区留言讨论,我们一起进步!
转载须知:转载、节选或引用本文内容,请务必注明出自本系列及作者,并保持内容完整性。商业用途请联系作者获得授权。
更多推荐

所有评论(0)