跳到主要内容大语言模型 (LLM) 入门学习路线图 | 极客日志PythonAI算法
大语言模型 (LLM) 入门学习路线图
本文梳理了大语言模型(LLM)的系统化学习路径,涵盖基础数学与编程、核心算法架构、工程化实践三大板块。内容涉及线性代数、神经网络原理、Transformer 架构、指令微调、RLHF 及量化技术,并详细介绍了 RAG 检索增强生成、推理优化与安全部署等工程落地方案,旨在帮助开发者建立完整的 LLM 技术知识体系。
CloudNative2 浏览 大语言模型(Large Language Model,LLM)入门学习路线涵盖了基础知识、前沿算法与架构以及工程化实践三个方面。这份资料旨在帮助初学者或有一定基础的开发/算法人员系统性地掌握大型语言模型的相关技术。
1. 大语言模型基础
本部分包括数学基础知识、Python 编程基础、神经网络原理和自然语言处理(NLP)四个方面的学习。
1.1 机器学习的数学
- 线性代数:理解算法的关键。主要概念包括向量、矩阵、行列式、特征值和特征向量、向量空间和线性变换。在 LLM 中,权重矩阵的运算构成了神经网络的核心。
- 微积分:许多机器学习算法涉及连续函数的优化,这需要理解导数、积分、极限和级数。多变量微积分和梯度的概念对于反向传播算法至关重要。
- 概率与统计:对于理解模型如何从数据中学习同样重要。主要概念包括概率论、随机变量、概率分布、期望、方差、协方差、相关性、假设检验、置信区间、最大似然估计和贝叶斯推断。
1.2 机器学习的 Python
Python 一直是机器学习和深度学习的首选语言,这得益于其可读性、一致性和鲁棒的数据科学库生态系统。
- Python 基础:理解基本语法、数据类型、错误处理和面向对象编程。
- 数据科学库:包括熟悉 NumPy 进行数值操作,Pandas 进行数据操作和分析,Matplotlib 和 Seaborn 进行数据可视化。
- 数据预处理:涉及特征缩放和规范化、处理缺失数据、异常值检测、分类数据编码以及将数据分割成训练、验证和测试集。
- 机器学习库:熟练掌握 Scikit-learn,这是一个提供了许多监督和非监督学习算法的库。重点需要了解如何实现线性回归、逻辑回归、决策树、随机森林、最近邻 (K-NN) 和 K 均值聚类等算法。
1.3 神经网络
- 基础知识:这包括理解神经网络的结构,如层、权重、偏置和激活函数(sigmoid、tanh、ReLU 等)。激活函数引入非线性,使网络能够拟合复杂函数。
- 训练和优化:熟悉反向传播和不同类型的损失函数,如均方误差(MSE)和交叉熵。理解各种优化算法,如梯度下降、随机梯度下降、RMSprop 和 Adam。
- 过拟合:理解过拟合的概念(模型在训练数据上表现良好但在未见数据上表现差)并学习各种正则化技术(dropout、L1/L2 正则化、早停、数据增强)以防止它。
- 实现多层感知器(MLP):使用 PyTorch 构建一个 MLP,也称为全连接网络,这是理解更深层次网络的基础。
1.4 自然语言处理(NLP)
NLP 在许多应用中扮演着关键角色,如翻译、情感分析、聊天机器人等。
- 文本预处理:学习各种文本预处理步骤,如分词(将文本分割成单词或句子)、词干提取(将单词还原为其根形式)、词形还原(类似于词干提取但考虑上下文)、停用词去除等。
- 特征提取技术:熟悉将文本数据转换为机器学习算法能理解的格式的技术。关键方法包括词袋模型(BoW)、词频 - 逆文档频率(TF-IDF)和 n-gram。
- 词嵌入:词嵌入是一种单词表示,允许具有相似含义的单词具有相似的表示。关键方法包括 Word2Vec、GloVe 和 FastText。
- 循环神经网络(RNNs):理解 RNNs 的工作原理,这是一种为序列数据设计的神经网络类型。探索 LSTMs 和 GRUs,两种 RNN 变体,它们能够学习长期依赖关系。
2. 大语言模型前沿算法和框架
2.1 大语言模型(LLM)架构
需要清楚地了解模型的输入(token)和输出(logits),而原始的注意力机制(attention mechanism)是另一个必须掌握的关键部分,因为它是很多改进算法的基础。
- 高层视角:编码器 encoder-解码器 decoder 的 Transformer 架构,特别是仅有解码器的 GPT 架构,几乎所有流行 LLM 都应用了该架构。
- 令牌化(Tokenization):如何将原始文本数据转换成模型能理解的格式,这包括将文本拆分成 Token(通常是单词或子词)。不同的 tokenizer 会影响模型的上下文窗口大小。
- 注意力机制(Attention mechanisms):掌握注意力机制的理论,包括自注意力和缩放点积注意力,这使得模型能够在产生输出时关注输入的不同部分,从而捕捉长距离依赖。
- 文本生成(Text generation):模型生成输出序列的多种方式。常见方法包括了贪婪解码(greedy decoding)、束搜索(beam search)、top-k 采样(top-k sampling)和核心采样(nucleus sampling)。
2.2 构建指令数据集
虽然从维基百科和其他网站可以轻松地找到原始数据,但如何将数据转换为问题和答案的配对却很难。而数据集的质量将直接影响模型的质量,它们是大模型微调(finetune)过程中最重要的组成部分。
- 合成数据集:使用 OpenAI API(GPT)从头开始生成合成数据。你可以指定种子和系统提示以创建多样化的数据集。
- 高级技术:学习如何通过改进现有数据集,如何像 InstructGPT 那样生成高质量的合成数据。
- 数据过滤:使用正则表达式、移除近似重复项、关注令牌数较多的答案等传统技术。
- 提示模板:在没有真正标准的问题和答案的情况下,了解不同的聊天模板很重要,比如 Alpaca 格式等。
2.3 模型预训练
是指从大量的无监督数据集中进行模型预训练,模型预训练是一个非常漫长和消耗资源的过程,因此它不是本学习路线教程的重点。但是我们可以了解它,以方便后续的学习。
- 数据管道:预训练需要巨大的数据集(例如,是在 2 万亿令牌上训练的),这些数据集需要被过滤、令牌化,并与预定义的词汇表进行整合。
- 因果语言模型:了解因果和掩码语言模型的区别,以及在这种情况下使用的损失函数。为了有效的预训练,了解更多关于 Masked LM 或 Causal LM。
- 规模化定律:描述了基于模型大小、数据集大小和用于训练的计算量的预期模型性能。
- 高性能计算:如果你计划从头开始创建自己的 LLM(硬件、分布式工作负载等),则需要更多关于 HPC 的知识是基础。
2.4 监督式微调(Supervised Fine-Tuning)
监督式微调就是让我们在已经标注的数据集上对已经预训练好的模型进行再次训练,以符合任务需求,它是一个非常重要的过程。
- 完全微调(Full fine-tuning):完全微调指的是训练模型中的所有参数。这不是一种高效的技术,但它产生稍好的结果。
- LoRA:一种基于低秩适配器的参数高效技术(PEFT)。我们只训练这些适配器,而不是所有参数。
- QLoRA:另一种基于 LoRA 的 PEFT,它还将模型的权重量化为 4 位,并引入分页优化器来管理内存峰值。将其与 LoRA 结合使用,可以在免费的 Colab 笔记本上有效运行。
- Axolotl:高效的预训练和微调 LLM,适用于多 GPU 和多节点设置。
2.5 通过人类反馈进行强化学习(Reinforcement Learning from Human Feedback)
在监督式微调之后,RLHF 是一个用来将 LLM 产生的答案达到和人类回答差不多的重要步骤。其思想是从人工反馈中学习偏好。它比 SFT 更复杂,但是该步骤通常被视为可选的。
- 偏好数据集(Preference datasets):这些数据集通常包含几个答案,并有某种排名,但是这种数据集更难产生。
- PPO:这个算法利用一个奖励模型来预测给定文本是否被人类高度评价。然后使用这个预测来优化 SFT 模型,一般使用基于 KL 散度加上惩罚的方式来执行。
- DPO(Direct Preference Optimization):DPO 简化将其重新构架为一个分类问题。它使用参考模型而不是奖励模型(无需训练),只需要一个超参数,使其更稳定和高效。
2.6 评估(Evaluation)
评估 LLM 是一个被低估的部分,它既耗时但是又相对可靠。你的下游任务应该决定你想评估什么,但始终记住 Goodhart 法则:'当一个指标成为目标时,它就不再是一个好的指标。'
- 传统指标:困惑度和 BLEU 分数这样的指标不再像以前那样受欢迎,因为在大多数情况下它们是有缺陷的。了解它们以及何时可以应用它们很重要。
- 通用基准:基于 Chatbot Arena,是通用 LLM(如 ChatGPT)的主要基准。还有其他流行的基准,如 MMLU 等。
- 特定任务基准:如摘要、翻译和问答等任务有专门的基准、指标甚至子领域(医疗、金融等),如用于生物医学问答。
- 人类评估:最可靠的评估是用户的接受率或人类做出的比较。如果你想知道模型是否表现良好,最简单但最可靠的方式是自己使用它。
2.7 量化
量化是将模型的权重(和激活)使用更低精度进行转换的过程。例如,使用 16 位存储的权重可以转换为 4 位表示。这项技术已经越来越重要,因为它可以减少与 LLM 相关的计算和内存成本,以使其在计算资源更低的设备上运行。
- 基础技术:了解不同的精度水平(FP32, FP16, INT8 等)以及如何使用 absmax 和零点技术进行朴素量化。
- GGUF 和 llama.cpp:最初设计用于在 CPU 上运行,llama.cpp 和 GGUF 格式已成为在消费级硬件上运行 LLM 的最受欢迎的工具。
- GPTQ 和 EXL2:特别是 EXL2 格式提供了惊人的速度,但只能在 GPU 上运行。模型也需要很长时间才能被量化。
- AWQ:这种新格式比 GPTQ 更准确(困惑度更低),但使用的 VRAM 更多,不一定更快。
2.8 新趋势
- 位置嵌入(Positional embeddings):了解 LLM 如何编码位置,尤其是 RoPE 这样的相对位置编码方案。实现 YaRN 或 Attention Sink 以延长上下文长度。
- 模型合并(Model merging):合并训练好的模型已成为创建性能模型而无需任何微调的流行方式。流行的库实现了最受欢迎的合并方法,如 SLERP、Linear Interpolation 等。
- 专家混合:因其出色的性能而重新流行化 MoE 架构。与此同时,OSS 社区出现了一种通过合并模型(如 frankenMoE)的选项,这是一个更便宜且性能良好的选项。
- 多模态模型:这些模型(如 CLIP、Flamingo 等)处理多种类型的输入(文本、图像、音频等),具有统一的嵌入空间,解锁了强大的应用,如文本到图像。
3. LLM 工程化
在这阶段集中于如何构建和部署基于大语言模型(LLM)的应用程序,以便在生产环境中使用。它分为几个部分,每部分都聚集于 LLM 应用开发的不同方面。
3.1 运行大型语言模型 (LLMs)
运行 LLMs 可能会因为硬件要求而变得困难。而我们可以通过 API 的方式(如 GPT-4)来简单的使用大模型。当然也可以进行本地运行。无论哪种方式,都需要额外的提示和引导技巧(也叫做提示工程,prompting engineer)来提升模型的输出质量。
- LLM APIs: API 是部署 LLMs 的一种比较简单的方式,它不要求设备拥有显卡资源,但是这种一般需要付费得到 API。这个领域分为私有 LLMs 和开源 LLMs。
- 开源 LLMs: 开源了大量的 LLMs。你可以直接在 Ollama 中运行其中一些,或者下载并在像 LM Studio 这样的应用程序中或通过 CLI 与 vLLM 或在本地运行它们。
- 提示工程(Prompt engineering):常见技术包括零次提示、少数提示、思维链和 ReAct。它们在更大的模型上效果更好,也可以适应更小的模型。
- 结构化输出(Structuring outputs):大部分任务需要结构化输出,如严格的模板或 JSON 格式。可以使用 Outlines、JSON Mode 等库来指导生成并遵循给定的结构。
3.2. 构建向量存储(Building a Vector Storage)
有时候我们想要在特定知识库下让 LLMs 搜索答案,而检索增强生成(RAG)结合了信息检索(IR)方法的能力,提高文本生成任务的质量和相关性。这种方法在处理需要广泛背景知识或特定信息的任务时特别有用,例如问答、文章撰写、摘要生成等。构建向量存储是构建检索增强生成(RAG)管道的第一步。
- 文档加载:文档加载器可以处理多种格式:PDF、JSON、HTML、Markdown 等。它们还可以直接从一些数据库和 API(GitHub、Reddit、Google Drive 等)检索数据。
- 文档拆分:文本拆分器将文档拆分成更小、有语义信息的块。与其在 n 个字符后拆分文本,不如更好地按标题或递归拆分,附加一些额外的元数据。
- 嵌入模型:嵌入模型将文本转换为向量表示。这对于执行语义搜索至关重要,可以深入并更细致地理解语言。
- 向量数据库:向量数据库(如 Pinecone、Milvus、Chroma 等)旨在存储嵌入向量。它们能够根据向量相似度高效检索与查询'最相似'的数据。
3.3. 检索增强生成 (Retrieval Augmented Generation, RAG)
RAG 技术可以使 LLMs 从数据库检索上下文文档以提高其答案的准确性。RAG 是一种流行的增强模型知识的方式,无需任何微调。
- 协调器(Orchestrators):协调器(如 LangChain、LlamaIndex 等)是将 LLMs 与工具、数据库、记忆等连接并增强其能力的流行框架。
- 检索器(Retrievers):用户指令并不是为检索优化的。可以应用不同技术(例如,多查询检索器、HyDE 等)来重述/扩展它们并提高性能。
- 记忆(Memory):为了记住以前的指令和答案,LLMs 和聊天机器人(如 ChatGPT)将这个历史添加到它们的上下文窗口中。这个缓冲区可以通过摘要(例如,使用一个较小的 LLM)、向量存储+RAG 等来改进。
- 评估:我们需要评估文档检索(上下文的精度和召回率)和生成阶段(保真度和答案相关性)。可以使用 Ragas 工具和 TruLens 来简化这一过程。
3.4. 高级 RAG
现实生活中的应用可能需要复杂的管道,包括 SQL 或图数据库,以及自动选择相关工具和 API。这些高级技术可以改进基线解决方案并提供额外功能。
- 查询构造(Query construction):存储在传统数据库中的结构化数据需要特定的查询语言,如 SQL、Cypher、元数据等。我们可以直接将用户指令翻译成查询以访问数据。
- 代理和工具(Agents and tools):代理通过自动选择最相关的工具来增强 LLMs,以提供答案。这些工具可以简单到使用 Google 或 Wikipedia,或更复杂,如 Python 解释器或 Jira。
- 后处理(Post-processing):向 LLM 提供输入的最终步骤。它通过重新排列、去重和分类等方式增强检索到的文档的相关性和多样性。
3.5. 推理优化(Inference optimization)
文本生成是一个成本高昂的过程,需要昂贵的硬件资源。除了量化,还提出了各种技术来最大化吞吐量并降低推理成本。
- Flash Attention:优化注意力机制,将其复杂度从二次方降低到线性,加速训练和推理。
- 键值缓存:了解键值缓存以及 MQA(Multi-Query Attention)和 GQA(Grouped-Query Attention)中引入的改进。
- 推测解码:使用小型模型生成草稿,然后由更大的模型审查,以加速文本生成。
3.6. 部署 LLMs
部署 LLMs 是一项工程壮举,可能需要多个 GPU 集群。
- 本地部署:与私有 LLMs 相比,开源 LLMs 可以保护用户隐私,是它的一大优势。本地 LLM 服务器(Ollama、vLLM 等)利用这一优势为本地应用提供动力。
- demo 部署:Streamlit 和 Gradio 等框架有助于原型化应用程序并分享 demo。你也可以轻松地在线托管它们,例如使用 Hugging Face Spaces。
- 服务器部署:在规模上部署 LLMs 需要云(参见 AWS SageMaker)或本地基础设施,并常常利用优化的文本生成框架,如 TGI、vLLM 等。
- 边缘部署:在受限环境中,高性能框架如 MLX 和 llama.cpp 可以在网页浏览器、Android 和 iOS 中部署 LLM。
3.7. 保护 LLMs
除了与软件相关的传统安全问题外,由于 LLMs 的训练和提示方式,它们还有独特的弱点。
- 提示黑客攻击:与提示工程相关的不同技术,包括提示注入(额外指令以劫持模型的答案)、数据/提示泄露(检索其原始数据/提示)和越狱(制作提示以绕过安全功能)。
- 后门:攻击向量可以针对训练数据本身,通过在训练数据中下毒(例如,使用错误信息)或创建后门(秘密触发器以在推理期间改变模型的行为)。
- 防御措施:保护你的 LLM 应用程序的最佳方式是针对这些漏洞测试它们(例如,使用红队测试和像 Garak 这样的检查)并在生产中观察它们(使用框架,如 Guardrails)。
总结
大语言模型技术迭代迅速,从基础理论到工程落地涉及面广。建议学习者按照上述路线图循序渐进,先夯实数学与编程基础,再深入理解 Transformer 架构与微调技术,最后掌握 RAG 与部署优化。持续跟踪最新论文与开源项目,保持技术敏感度,才能在 AI 时代构建出高质量的大模型应用。
相关免费在线工具
- 加密/解密文本
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
- RSA密钥对生成器
生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
- Mermaid 预览与可视化编辑
基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
- curl 转代码
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
- Base64 字符串编码/解码
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
- Base64 文件转换器
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online