400 行代码手搓最简 GPT,大模型就是这样玩的!

01

怎样手搓一个最简GPT

学习 GPT 的方式是什么?

借用 Linus 大神的那句名言“talk is cheap, show me the code”,没有什么比手搓一个 GPT 出来更适合的了。

有的同学可能会被吓到,人家花了几百亿美刀整出来的成果,说搓就能搓出来吗?其实我们的目标是写一个最简 GPT,从根本上去理解 GPT 技术。就像当初最早发布的 Linux 内核也就是两万行代码,但 Linux 核心架构是延续至今的。

其实,只要实现 8 个核心组件,仅用400 行代码就可以得到一个“麻雀虽小,五脏俱全”的 GPT 了。

aa00e9cd7ec487ffd33f549d828130da.png

GPT关键组件

在动手之前,我们先了解一些基本概念。GPT 是基于 Transformer 架构的自然语言处理模型,而 Transformer 的核心是自注意力机制,它能够为输入序列中的每个元素分配不同的权重,从而更好地捕捉序列内部的依赖关系。

990cd73f1cd20c43f0dd4905542a0eca.png

Transformer 架构

GPT 是从左向右训练的单向模型,它只使用 Transformer 的解码器架构,具有自回归的特点。在训练过程中,GPT 模型通过后续注意力掩码,确保每个位置只能看到当前位置之前的信息,这使得 GPT 特别适合生成式任务,例如文本分类、问答系统等。

知道了 GPT 的原理,我们先来搞定 GPT 开发环境。

02

搭建 GPT 开发环境

本次实验环境,操作系统选择的是 Debian Linux,编程语言是 Python 3.x。同学们也可以根据自己的环境选择合适的工具,比如Windows、MacOS或者其他 Linux 发行版,开发工具可以用 PyCharm、VSCode 等。

在这个最简 GPT 工程中,需要依赖 numpy 和 PyTorch 库,我们可以用 pip 工具进行安装,pip 会自动依次安装相关依赖库。

pip install numpy

pip install torch

9b92ce58726029388c775d8aa65124a4.png

NumPy(Numerical Python)是 Python 中最基础和最重要的科学计算库,它为处理大规模数据和高效的数值计算提供了强大的支持。在本工程中会用到 NumPy的一些数学计算功能。

PyTorch 是一个基于 Python 的科学计算库,它主要是为了解决深度学习任务而设计的。PyTorch 采用动态计算图的方式,可以灵活地构建复杂计算图,同时支持动态图和静态图两种方式。它还允许用户自由组合各种神经网络层,从而实现定制化的模型结构。

在最简 GPT 工程中使用 torch.nn 模块构建神经网络模型,它提供了丰富的类和函数,方便用户定义、训练和评估神经网络模型。通过使用torch.nn,用户可以快速搭建各种复杂的神经网络结构,实现深度学习任务。

另外,我们还使用torch.optim模块来优化算法,它为用户提供了各种常见的优化器,并封装了参数更新和学习率调整等功能,方便用户进行深度学习模型的训练和优化过程。

开发环境准备好了,让我们开始手搓最简 GPT。

03

最简 GPT 开发过

最简 GPT 工程的结构可以分为三个部分,分别是 GPT 模型、构建语料库与训练模型、生成文本。

GPT 模型

构成 GPT 模型的 8 个组件分别是多头自注意力、逐位置前馈网络、正弦位置编码表、填充掩码、后续掩码、解码器层、解码器、GPT。其中前五个组件构成 Transformer 解码器,我们重点对解码器层代码进行解读。

5a81bac6115e1eb21854b28d7e5a3d4e.png

GPT 解码器层包含一个多头自注意力层 MultiHeadAttention 和一个逐位置前馈网络层 PosFeedForwardNet,后面接了两个层归一化 nn.LayerNorm。

第一个层归一化 norm1:在多头自注意力 self_attn 处理后,将注意力输出 attn_output 与原始输入 dec_inputs 相加。这种加和操作实现了残差连接,可以加速梯度反向传播,有助于训练深层网络。

第二个层归一化 norm2:在逐位置前馈网络 feed_forward 处理后,将前馈神经网络输出 ff_outputs 与第一个层归一化输出 norm1_outputs 相加。这可以实现标准化输入数据,提高训练稳定性。

构建语料库与训练模型

为训练模型准备一段原始文本,如下图所示。虽然篇幅不长,但足以演示最简 GPT 的核心功能。

c0f5d4f11d58160e0bb33faa3f204ca8.png

这段文本的分析结果如下图所示。

0091607274b6b32331f2e6e882f66d76.png

接下来是对原始文本进行训练,代码如下:

6c9ad4b4f06bd9ce2818bb5dc77f141d.png

训练数据由给定的输入句子构成,这些句子已经被编码为数字表示。在每个训练批次中,模型的输入是当前单词序列,而目标输出是该序列中每个单词的下一个单词。

为了计算损失,模型预测下一个单词的概率分布,然后使用交叉熵损失函数比较这些预测概率和实际目标单词。代码会依据主机配置而自主选择 GPU 或 CPU 进行计算,训练时间在数分钟左右:

4efb745073f0e1a4149f57d803b306f1.png

生成文本

以下代码就是使用训练好的模型来生成文本,运行之后可以看到对每一个生成的词进行贪婪搜索的结果:

ac3fbbc653e1f09967bebe85ad8a3ee6.png

运行结果:

a37af2d2d9f3e078a23b67db59263e5e.png

首先,代码将输入字符串转换为一个单词索引列表 input_tokens,然后将这些输入的 token 作为初始生成的文本 output_tokens。接着,函数进入循环,将逐个生成新的 token,直到达到最大长度 max_len 或者遇到句子结束标志。

至此,手搓 GPT 大功告成,同学们还可以对上述代码进行调整。例如,将模型保存到磁盘上,以便反复加载使用;使用更丰富的语料来训练模型等。

最简 GPT 工程的 400 行完整代码全在《GPT 图解:大模型是怎样构建的》这本书中,书中对GPT 的8 个组件有非常细致的说明。

这是一本特别有趣的书,看着故事就把 GPT 学会了,让我们来具体了解一下。

04

弄懂大模型的那些事儿

《GPT 图解:大模型是怎样构建的》从 NLP 技术的发展脉络梳理,讲述了 N-Gram、词袋模型(BoW)、Word2Vec(W2V)、神经概率语言模型(NPLM)、循环神经网络(RNN)、Seq2Seq(S2S)、注意力机制、Transformer,以及从初代 GPT 到 ChatGPT 再到 GPT-4 等一系列突破性技术的诞生与演进。

本书最大的特点是通过两位虚拟人物“咖哥”和“小冰”的对话来展开技术讨论,将枯燥的技术细节化作轻松幽默的故事和缤纷多彩的图画,引领读者穿梭于不同时空,见证自然语言处理技术的传承、演进与蜕变。

c783370cbdfea090caad0f39c5fc85ec.png

43498d917c3465c29b5c6d7e8848cd9d.png

本书作者黄佳,笔名就是“咖哥”,他目前是新加坡科技研究局人工智能研究员,主攻方向为 NLP 大模型的研发与应用。咖哥在 AI 领域深耕多年,在政府、银行、医疗等多个行业有丰富的 AI 实践经验。

咖哥同时还是《零基础学机器学习》《数据分析咖哥十话》等畅销书的作者。在他的笔下,技术褪去了神秘的面纱,读者在轻松的阅读体验中,自然就将技术学以致用。

配套资源丰富是本书另一大特色,咖哥精心编写每一章的示例代码,并编排为 Python notebook 文件。读者可以在 notebook 的交互式环境中轻松运行调试代码,观察输出结果。

339664f16246071b9e54fd62f098b38b.png

在线下载页面

093de3b366024b249880bbfd0eeac946.png

各章节代码目录

d364dcd97cb83ae8544c7852658f1ee6.png

在 VSCode 中运行调试 Python notebook 工程

咖哥这部力作也得到了业界的广泛认可,多位大佬联袂推荐此书。

4f3916fb0afc5df7abc7a48ba879b190.png

看懂《GPT 图解:大模型是怎样构建的》,深入理解大模型原理,不要说手搓 GPT,在大模型的任何领域,同学们也都可以游刃有余,这才是 AI 时代应当具备的核心竞争力!

fa92e3e5b9d1445671b089cae7d2600a.png

点击下方即可购书,限时特惠

5折

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值