
从零开始实现大语言模型
文章平均质量分 96
从零开始实现大语言模型是了解其原理及领域大语言模型实现路径的最好方法,没有之一。
本专栏将从零开始讲解大语言模型理论原理step-by-step,提供一整套工业级文本数据处理,大语言模型构建、预训练、监督微调及指令微调,并行计算与分布式训练代码,并且从零开始解释实现代码line-by-line。
RuizhiHe
毕业于南方科技大学,现任中兴通讯无线研究院算法工程师。
展开
-
从零开始实现大语言模型(十六):加载开源大语言模型参数
预训练大语言模型的难点不在于算法,而在于数据和算力,绝大多数企业和机构都没有预训练大语言模型的算力资源。在工业界的大语言模型应用实践中,通常会使用领域数据微调开源大语言模型参数,以构建领域大语言模型。本文介绍加载开源大语言模型参数以替代大语言模型`GPTModel`中的随机初始化参数的方法。后续微调大语言模型部分内容将分别使用监督微调及指令微调方法,微调大语言模型`GPTModel`参数,使大语言模型具备文本分类及回答问题能力。原创 2025-05-18 21:24:46 · 1472 阅读 · 0 评论 -
从零开始实现大语言模型(十五):并行计算与分布式机器学习
并行计算与分布式机器学习是一种使用多机多卡加速大规模深度神经网络训练过程,以减少训练时间的方法。在工业界的训练大语言模型实践中,通常会使用并行计算与分布式机器学习方法来减少训练大语言模型所需的钟表时间。原创 2025-05-18 21:20:29 · 1007 阅读 · 0 评论 -
从零开始实现大语言模型(十四):高阶训练技巧
本文介绍深度学习领域优化训练学习率的两种方法Learning Rate Warmup和Cosine Decay,优化深度神经网络模型参数梯度的方法Gradient Clipping,以及优化训练超参数的方法Hyperparameters Search,并实现预训练大语言模型的函数`hyper_pretrain_model`。原创 2025-03-07 23:46:31 · 1196 阅读 · 0 评论 -
从零开始实现大语言模型(十三):预训练大语言模型GPTModel
本文使用交叉熵损失函数计算生成大语言模型`GPTModel`的预测输出与训练样本标签之间的loss,介绍大语言模型的预训练流程,并实现预训练大语言模型的函数`pretrain_model`。原创 2025-03-07 23:39:44 · 1160 阅读 · 0 评论 -
从零开始实现大语言模型(十二):文本生成策略
本文介绍大语言模型`GPTModel`预测生成连续自然语言文本的流程,以及4种从概率分布中选择下一个token的策略,并实现文本生成函数`generate_text`。原创 2024-10-17 00:26:14 · 1629 阅读 · 0 评论 -
从零开始实现大语言模型(十一):构建大语言模型GPTModel
本文将介绍由多头注意力模块、Layer Normalization、Dropout、残差连接、前馈神经网络与GELU激活函数构成的Transformer Block,实现OpenAI的GPT系列大语言模型`GPTModel`,并对大语言模型参数进行度量分析。原创 2024-10-17 00:07:28 · 1280 阅读 · 0 评论 -
从零开始实现大语言模型(十):残差连接
残差连接(shortcut or residual connection)是深度学习实践中已经被证明非常有效的一种优化神经网络结构以解决梯度消失问题,从而提升神经网络训练效率的方法。其核心思想是创建一条梯度传播的快捷路径,让神经网络模块的输出$F(x)$与其输入$x$直接相加,将该神经模块的输出转变成$F(x)+x$,使梯度可以跳过该神经网络模块直接向后传播。本文将探讨深度神经网络中的梯度消失问题,介绍残差连接的基本原理,并应用残差连接解决深度神经网络中的梯度消失问题。原创 2024-07-28 17:53:40 · 1322 阅读 · 0 评论 -
从零开始实现大语言模型(九):前馈神经网络与GELU激活函数
OpenAI的GPT系列大语言模型中的前馈神经网络模块共包含两个Linear层以及一个GELU(Gaussian Error Linear Unit)激活函数。第一个Linear层会对每个token对应的维度为$n$的输入向量做变换,将向量的维度拓展至$4n$。GELU激活函数对第一个Linear层输出向量中的每个元素做变换,并将经过变换后的向量输入第二个Linear层。第二个Linear层会将各个token对应向量的维度压缩回原来的$n$维,得到前馈神经网络模块的输出。原创 2024-07-28 17:47:20 · 1201 阅读 · 0 评论 -
从零开始实现大语言模型(八):Layer Normalization
Layer Normalization是深度学习实践中已经被证明非常有效的一种解决梯度消失或梯度爆炸问题,以提升神经网络训练效率及稳定性的方法。OpenAI的GPT系列大语言模型使用Layer Normalization对多头注意力模块,前馈神经网络模块以及最后的输出层的输入张量做变换,使shape为`[batch_size, num_tokens, embedding_dim]`的输入张量的`embedding_dim`维度数据的均值为0,方差为1。原创 2024-07-21 23:01:59 · 2481 阅读 · 2 评论 -
从零开始实现大语言模型(七):多头注意力机制
本文将`num_heads`个单头注意力模块`CausalAttention`堆叠拓展成多头注意力模块,介绍分别融合`num_heads`个参数矩阵$W_{qi}, W_{ki}, W_{vi}$,一次性并行计算出`num_heads`个qkv向量的方法,并实现OpenAI的GPT系列大语言模型中`MultiHeadAttention`类。原创 2024-07-21 22:55:22 · 1601 阅读 · 0 评论 -
从零开始实现大语言模型(六):因果注意力机制
因果注意力机制(causal attention)是一种特殊的自注意力机制,其在计算context向量$z_i$之前,会使用掩码(mask)屏蔽$x_{i+1}, x_{i+2}, \cdots, x_n$,使注意力权重$\alpha_{i,i+1}, \alpha_{i,i+2}, \cdots, \alpha_{in}$全都等于0,生成的context向量$z_i$只与$x_1, x_2, \cdots, x_i$相关,模型只根据历史信息预测下一个token。原创 2024-07-13 17:54:15 · 2688 阅读 · 0 评论 -
从零开始实现大语言模型(五):缩放点积注意力机制
缩放点积注意力机制(scaled dot-product attention)是OpenAI的GPT系列大语言模型所使用的多头注意力机制(multi-head attention)的核心,其目标与前文所述简单自注意力机制完全相同,即输入向量序列$x_1, x_2, \cdots, x_n$,计算context向量$z_1, z_2, \cdots, z_n$。原创 2024-07-13 17:48:02 · 2036 阅读 · 0 评论 -
从零开始实现大语言模型(四):简单自注意力机制
本文介绍一种不包含训练参数的简化版自注意力机制——简单自注意力机制(simplified self-attention),后续三篇文章将分别介绍缩放点积注意力机制(scaled dot-product attention),因果注意力机制(causal attention),多头注意力机制(multi-head attention),并最终实现OpenAI的GPT系列大语言模型中`MultiHeadAttention`类。原创 2024-07-06 23:34:56 · 1205 阅读 · 4 评论 -
从零开始实现大语言模型(三):Token Embedding与位置编码
Embedding是深度学习领域一种常用的类别特征数值化方法。在自然语言处理领域,Embedding用于将对自然语言文本做tokenization后得到的tokens映射成实数域上的向量。本文介绍Embedding的基本原理,将训练大语言模型文本数据对应的tokens转换成Embedding向量,介绍并实现OpenAI的GPT系列大语言模型中将tokens在文本数据中的位置编码成Embedding向量的方法。原创 2024-07-06 23:28:35 · 2742 阅读 · 0 评论 -
从零开始实现大语言模型(二):文本数据处理
神经网络不能直接处理自然语言文本,文本数据处理的核心是做tokenization,将自然语言文本分割成一系列tokens。本文介绍tokenization的基本原理,OpenAI的GPT系列大语言模型使用的tokenization方法——字节对编码(BPE, byte pair encoding),并构建训练大语言模型的`Dataset`及`DataLoader`。原创 2024-07-02 22:50:37 · 1032 阅读 · 0 评论 -
从零开始实现大语言模型(一):概述
从零开始实现大语言模型是了解其原理及领域大语言模型实现路径的最好方法,没有之一。已有研究证明,为特定任务定制或使用领域数据训练的大语言模型能在领域相关的评价指标上超过ChatGPT这样的通用大语言模型。本专栏将从零开始讲解大语言模型理论原理step-by-step,提供一整套工业级文本数据处理,大语言模型构建、预训练、监督微调及指令微调,并行计算与分布式训练代码,并且从零开始解释实现代码line-by-line。原创 2024-07-02 22:36:52 · 1226 阅读 · 0 评论