第 1 章 LLMGPT大语言模型

第 1 章 理解大语言模型

第 1 章 理解大语言模型

本章来源:本文翻译整理自 LLMs-from-scratch 仓库的 ch01/README.mdch01/reading-recommendations.md,原书为 Sebastian Raschka《Build a Large Language Model (From Scratch)》。

本章要做什么

这是全书的第一章,没有代码。它的目标是建立对"大语言模型(Large Language Model, LLM)"的整体认知:LLM 是什么、为什么现在这么重要、它的架构基础是什么,以及从预训练到微调的开发生命周期。读完这一章,你会在头脑里搭好一张地图,后面每一章都是在往里填具体的技术细节。

关于本章代码

本章没有代码(There is no code in this chapter)。

补充材料

原仓库在这一章提供了一份《如何最大化利用技术书》的阅读建议(Recommendations for Getting the Most Out of This Book),以及两段视频:一段是作者个人在电脑上搭建 Python 环境的做法,另一段是本书覆盖的 LLM 开发生命周期概览。

如何最大化利用一本技术书

以下是作者在读者询问"怎样才能从这本书里收获最多"时分享的一些笔记。

作者本人读技术书时也遵循类似的方法。它并不是一份放之四海皆准的配方,但可以作为一个有帮助的起点。

对于这本书,作者强烈建议按顺序阅读,因为每一章都依赖前一章。而对于每一章,作者建议以下步骤。

1) 第一遍读(离线)

建议从头到尾读完整章,先不要写任何代码。第一遍阅读的目的是先看到全貌

理想情况下,建议远离电脑读书。纸质书很好,没有干扰的数字设备(没有浏览器、社交媒体或邮件)也可以。

作者本人既读纸质书,也读电子墨水屏平板。虽然他从 2018 年就开始用电子墨水屏,并且总是尽量多在电子墨水屏上读,但他仍然发现纸质书更能帮助自己集中注意力。这也是为什么他有时会把有挑战性的、或者真的很想仔细理解的研究论文打印出来。

作者的建议是:把第一遍阅读做成一次短而专注的 20 分钟阅读,尽量减少干扰,不要过度思考,也不要卡在细节上。

给困惑或有趣的部分做标记或注释是可以的,但这一阶段不要查资料。作者的建议是:只管读,但先不要运行任何代码。这第一遍就是为了理解更大的图景。

2) 第二遍读(带代码)

第二遍阅读时,建议把书里的代码亲手敲一遍并运行。复制粘贴代码很诱人,因为重新敲一遍工作量很大,但当作者读其它技术书时,把代码敲一遍通常能帮他多想一步(而不是仅仅扫一眼)。

如果得到的结果和书里不一样,作者会去查书的 GitHub 仓库,试那里的代码。如果结果还是不一样,他会试着判断是不是包版本不同、随机种子、CPU/CUDA 等原因。如果还是查不出来,问作者本人也不算坏主意(通过书的论坛、公开 GitHub 仓库的 issues 或 discussions,最后实在不行就发邮件)。

3) 做练习

第二遍读、敲完并运行完代码之后,通常是做练习的好时机。做练习对巩固理解很有帮助,也能让你以半结构化的方式去摆弄问题。如果某道练习太难,看答案也没关系。不过作者仍然建议先认真试一次。

4) 回顾笔记,进一步探索

现在,读完整章、跑完代码、做完练习之后,作者建议回过头看前两遍阅读时做的标记和注释,看看是不是还有不清楚的地方。

这也是查额外参考资料、或快速搜索一下澄清任何仍觉得没解决的内容的好时机。但即使一切都说得通,多读一些感兴趣主题的资料也不是坏事。

在这个阶段,把有用的洞见、代码片段等记到你最喜欢的笔记应用里,也是合理的。

5) 把想法用到项目里

前面的步骤都在吸收知识。现在,看看能不能把某一章里的某些方面用到你自己的项目里。或者用书里的代码作为起点,搭一个小项目。找灵感的话,可以看看补充材料(bonus materials),那基本上是作者为了满足自己的好奇心做的小项目。

比如,读完多头注意力机制并实现完 LLM 之后,你可能会好奇:使用分组查询注意力(grouped-query attention)的模型表现如何?RMSNorm 和 LayerNorm 到底差多少?诸如此类。

也可能有一些小的方面能用到你自己的项目里。比如,有时候是一个微小的细节最终派上了用场,像测试一下显式调用 torch.mps.manual_seed(seed) 相比只用 torch.manual_seed(seed) 到底有没有差别。

不过,作者终究还是想把知识用起来。这可能包括使用一章里的核心概念,但也包括沿途学到的小边角料,甚至像"在我的项目里显式调用 torch.mps.manual_seed(seed) 而不是只用 torch.manual_seed(seed) 到底有没有区别"这样的琐碎小事。

额外想法

当然,以上都不是一成不变的。如果某个主题整体上很熟悉、很简单,而你读这本书主要是为了获取后面章节里的某些信息,那么略读一章是可以的(别浪费自己的时间)。

另外,对于没有代码的章节(比如开篇的第 1 章),跳过和代码相关的步骤当然也说得通。

总之,希望这些对你有用。祝你阅读愉快、学习顺利!

关键概念

  • LLM(Large Language Model,大语言模型):基于大规模文本数据训练的语言模型,本书手写的 GPT 就是其中一类。
  • Transformer:LLM 的架构基础,后面几章会从零实现。
  • 预训练(pretraining):在无标注文本上训练模型,让模型学会"语言"。
  • 微调(finetuning):在预训练基础上,针对特定任务(分类、指令遵循)继续训练。
  • 从零构建:本书的方法是不使用任何外部 LLM 库,用 PyTorch 一步步手写。

练习

第 1 章没有代码练习。如果你已经读完这一章并想验证理解,可以试着用自己的话向别人解释"LLM 的预训练和微调有什么区别",这也是作者在阅读建议里强调的"用自己的想法用到项目里"的第一步。