Generate AI手册 -- 第III部分:现代语言模型基础
在网上读到一篇非常不错的博客,特意将其翻译为中文,分享给大家。原文可以引用:
@misc{Brown24GAIHB,
author = {Brown, William},
title = {Generative AI Handbook: A Roadmap for Learning Resources},
year = 2024,
url = {https://genai-handbook.github.io}
}
第\(\rm{III}\)部分:现代语言建模的基础
目标:调查与训练 LLMs 相关的中心主题,重点是基础概念。
在这一部分,我们将探索许多概念,这些概念将带我们从仅解码器 Transformer 架构走向理解许多当今前沿 LLMs 的实现方式选择和权衡。如果你想先从鸟瞰图的角度了解本节和以下一些节的主题,Sebastian Raschka 的 “Understanding Large Language Models” 的帖子是一个很好的总结(至少直到 2023 年中)。
第13章:Tokenization
字符级Tokenization(像 Karpathy 视频中的几种)对于大规模 Transformer 来说往往不如单词级Tokenization高效,但简单地选择一个固定全词“字典”(例如韦氏词典)会冒着在推理时遇到未见过的单词或拼写错误的风险。相反,典型的方法是使用子词级Tokenization来“覆盖”可能的输入空间,同时通过使用像 Byte-Pair Encoding(BPE)这样的算法来选择适当的token集,从而保持来自更大Token池的效率增益。如果你在初级算法课程中见过霍夫曼编码,我认为这对 BPE 来说是一个有用的类比,尽管输入输出格式明显不同,因为我们事先不知道“Token”的集合。我建议观看 Andrej Karpathy 的Tokenization视频,并查看 Masato Hagiwara 的这个 tokenization指南 。
第14章:位置编码
正如我们在前一节中看到的,Transformer 本身并没有像 RNN 那样对上下文窗口内的邻接或位置有相同的概念,位置必须通过某种向量编码来表示。虽然这可以通过像独热编码这样的东西来简单地完成,但对于上下文扩展和可学习性来说,这是不切实际的,因为它放弃了序数的概念。最初,这是通过正弦位置编码来完成的,如果你熟悉,这可能会让你想起傅里叶特征;当今最流行的实现可能是旋转位置编码(Rotary Positional Encoding,RoPE),它在训练期间更稳定,学习速度更快。
资源:
-
Harrison Pim 关于位置编码直觉的博客文章
-
Mehreen Saeed 关于原始 Transformer 位置编码的博客文章
-
Eleuther AI 的 RoPE 博客文章
-
Transformer的位置编码:https://kazemnejad.com/blog/transformer_architecture_positional_encoding/
-
DeepLearning Hero 的动画视频
第15章:预训练步骤
一旦你决定在特定语料库(例如 Common Crawl,FineWeb)上预训练一个特定大小的 LLM,在你准备开始之前,还有一些选择要做:
- 注意力机制(多头、多查询、分组查询)
- 激活(ReLU,GeLU,SwiGLU)
- 优化器、学习率和调度器(AdamW,预热,余弦衰减)
- Dropout
- 超参数选择和搜索策略
- 批处理、并行化策略、梯度累积
- 训练多长时间,多久重复数据
- ……还有很多其他维度的变量
据我所知,没有万金油的规则来指导你如何进行,但我将分享一些值得考虑的资源,这取决于你的兴趣:
- 虽然它早于 LLM 时代,但博客文章 “A Recipe for Training Neural Networks” 是一个很好的起点,用于构建这个问题,因为许多这些问题在整个深度学习中都是相关的。
- “The Novice’s LLM Training Guide” 由 Alpin Dale 讨论实践中的超参数选择,以及我们将在后续部分中看到的微调技术。
- Replit 的“How to train your own Large Language Models” 有一些关于数据管道和训练评估的好讨论。
- 要了解注意力机制的权衡,请参见 Shobhit Agarwal 的 “Navigating the Attention Landscape: MHA, MQA, and GQA Decoded” 的帖子。
- 要讨论“流行默认值”,请参见 Deci AI 的 “The Evolution of the Modern Transformer: From ‘Attention Is All You Need’ to GQA, SwiGLU, and RoPE” 的帖子。
- 要了解有关学习率调度计划的详细信息,请参阅 d2l.ai 书籍的第12.11节 。
- 要讨论围绕“最佳实践”报告的一些争议,请参见 Eleuther AI 的这篇文章 。
第16章:分布式训练和 FSDP
与训练模型相关的一些额外挑战是,模型太大而无法装载在单个 GPU(甚至多 GPU 机器),通常需要使用像完全分片数据并行架构(Fully Sharded Data Parallelism,FSDP),这样的分布式训练协议实现在训练期间模型跨机器共存。它的前身分布式数据并行架构(Distributed Data Parallelism,DDP)值得去理解,在下面链接的第一篇文章中有所涵盖。
资源:
- Meta(首创该方法)的官方 FSDP 博客文章
- https://sumanthrh.com/post/distributed-and-efficient-finetuning/
- Bar Rozenman 的 FSDP博客文章,包含许多出色的可视化效果
- Yi Tai 关于在创业环境中预训练模型的挑战的报告
- Answer.AI 的技术博客,讨论将 FSDP 与参数高效微调技术结合使用,用于在消费级 GPU 上使用
第17章:Scaling Laws
了解Scaling Laws作为一个元话题是有用的,因为它在 LLMs 的讨论中经常出现(最突出的是在引用“Chinchilla”论文时),比任何特定的经验发现或技术都要多。简而言之,通过扩大语言模型的大小、数据和计算的规模,可以对模型损失做出相当可靠的预测。这样就可以校准最佳超参数设置,而无需运行昂贵的网格搜索(grid searches)。
资源:
- Chinchilla 大型语言模型的Scaling Laws (Rania Hossam 的博客概述)
- New Scaling Laws for LLMs (在 LessWrong 上的讨论)
- Chinchilla’s Wild Implications (在 LessWrong 上的帖子)
- Chinchilla Scaling: A Replication Attempt (Chinchilla 发现的潜在问题)
- Scaling Laws and Emergent Properties (Clément Thiriet 的博客文章)
- “Scaling Language Models” (斯坦福 CS224n 的视频讲座)
第18章:混合专家
虽然许多著名的 LLM(如 Llama3)今天使用的是“密集”模型(即没有强制稀疏化),但混合专家(Mixture-of-Experts,MoE)架构越来越受欢迎,用于在“知识”和效率之间权衡,可能最值得注意的是在开源世界中的 Mistral AI 的“Mixtral”模型(8x7B 和 8x22B),并且据传用于 GPT-4 。在MoE模型中,对于每一步推理,只有一小部分参数是“活动的”,训练好的路由器模块用于选择在每一层使用的并行“专家”。这允许模型在规模上增长(也许是“知识”或“智力”),同时与同等规模的密集模型相比,在训练或推理方面保持高效。