以下是我之前分享的一些笔记,内容是读者询问如何充分利用我编写的《从零构建大型语言模型》系列书籍时的建议。

我自己阅读技术书籍时也遵循类似的方法。这并非通用法则,但或许能作为一个有用的起点。

针对这本书,我强烈建议按顺序阅读,因为每一章都依赖于前一章的内容。而对于每一章,我推荐以下步骤。

1) 第一次阅读(离线)

我建议先完整通读本章,暂时不进行任何编码。第一次通读的目的是先把握整体框架。

理想情况下,我建议远离电脑阅读本章。纸质书效果很好,但使用无干扰的数字设备(不打开浏览器、社交媒体或邮件)也可以。

就我个人而言,我既读纸质书也用电子墨水屏平板。虽然我从2018年开始使用电子墨水屏平板,并一直尽量多在上面阅读,但我仍然发现纸质书能让我更专注。这也是为什么我有时会打印那些有挑战性或想深入理解的研究论文。

我的建议是,第一次阅读安排一个简短、专注的20分钟阅读时段,尽量减少干扰,不要过度思考或纠结于细节。

可以标记或批注令人困惑或感兴趣的部分,但现阶段不要查阅资料。我只是建议阅读,但还不要运行任何代码。这第一次通读的目的是理解整体脉络。

2) 第二次阅读(结合代码)

第二次通读时,我建议亲自输入并运行本章的代码。复制代码很诱人,因为重新输入工作量很大,但当我阅读其他技术书籍时,这通常能帮助我更深入地思考代码(而不仅仅是浏览一遍)。

如果得到的结果与书中不同,我会查看本书的GitHub仓库,尝试那里的代码。如果结果仍然不同,我会检查是否由不同的包版本、随机种子、CPU/CUDA等原因导致。如果还是无法解决,向作者提问(通过书籍论坛、公开的GitHub仓库问题或讨论,最后再发邮件)也是个不错的主意。

3) 练习

第二次通读并重新输入和运行代码后,通常是尝试练习的好时机。这对于巩固理解或以半结构化的方式钻研问题非常有益。如果练习太难,查看答案也没关系。但我仍然建议先认真尝试一下。

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

现在,在阅读完本章、运行代码并完成练习后,我建议回顾前两次阅读中的标记和批注,看看是否还有不清楚的地方。

这也是查阅补充资料或快速搜索的好时机,可以澄清任何仍感困惑的问题。但即使一切都能理解,多读一些自己感兴趣的话题也绝非坏事。

在此阶段,将有用的见解、代码片段等记录或转移到你喜欢的笔记应用中也很有意义。

5) 在项目中运用这些想法

前面的步骤都专注于吸收知识。现在,看看能否将章节中的某些方面运用到自己的项目中。或者,以书中的代码为起点,构建一个小型项目。如需灵感,可以查看附加材料,这些基本上是我为了满足个人好奇心而做的小项目。

例如,在阅读了多头注意力机制并实现LLM后,你可能会好奇使用分组查询注意力的模型表现如何,或者RMSNorm与LayerNorm之间究竟有多大差异。诸如此类。

还有一些较小的方面可能对你的项目有用。例如,有时一个微小的细节最终会派上用场,比如测试显式调用torch.mps.manual_seed(seed)与单独使用torch.manual_seed(seed)相比是否会改变什么。

额外想法

当然,以上所有方法都不是一成不变的。如果某个主题整体上非常熟悉或简单,而我主要阅读这本书是为了获取后续章节的信息,那么略读章节也是可以的(以免浪费时间)。

此外,对于没有代码的章节(例如介绍性的第1章),跳过与代码相关的步骤当然也是合理的。

无论如何,希望这些内容对你有用。祝你阅读和学习愉快!