What I cannot create, I do not understand.
—— Richard Feynman
-
理解大模型最好的方式,应该是亲自动手、从零开始实现。大模型之大在于参数(动辄几十B),而不在于代码量(即便很强大的模型也不过几百行代码)。这样我们便可以在动手写代码中,去思考问题、发现问题、解决问题。
-
本文不深究背后原理,提供尽可能简单的实现,以便整体理解大模型。
-
参考Sebastian Raschka和Andrej Karpathy的教程,并进行重新组织,并对核心代码做了优化,使之更简单更清晰。
-
零基础,具备基本的Python技能,了解Pytorch和Tensor的基本操作。
-
资源:所有代码均运行在个人电脑上,无需GPU。使用数据均为公开数据集。
-
系列文章:将会分为以下5篇
- 【手搓大模型】从零手写GPT2 — Embedding :介绍如何从text到token,再到vector;理解BPE的思想;会用滑动窗口取样;理解Embedding的本质是查表操作;理解位置编码。
- 【手搓大模型】从零手写GPT2 — Attention:理解注意力机制,Mask遮蔽未来词,Dropout随机丢弃,实现单一与多头注意力机制。
- 【手搓大模型】从零手写GPT2 — Model:构建GPT2的完整骨架,理解LayerNorm和Relu激活,实现Transformer Block;使用未训练的GPT2补全文本。
- 【手搓大模型】从零训练GPT2: 理解Cross-Entropy,实现在数据集和批量上计算Loss;实现训练代码,并在超小数据集上训练;实现decode控制随机性的方式,包括temperature和top k;尝试在更大数据集上训练,并学会save和load模型参数。
- 【手搓大模型】从零微调GPT2: 实现手动load公开模型权重;利用超小数据集微调GPT2,让GPT2学会响应指令,而不是补全文本;利用本地运行llama3评估训练效果。