《从零构建大模型》读书摘记
本书的核心逻辑的是“循序渐进、从基础到复杂”,以“构建一个可运行的大模型(如微型GPT)”为目标,按“基础准备—核心模块构建—模型训练—微调优化—部署落地”的路径展开,同时穿插大模型发展脉络与伦理规范,形成“理论铺垫—实战操作—延伸思考”的完整框架,具体可拆解为五大模块,各模块环环相扣、层层递进
部分内容可能来自网络或者由AI生成。
如有雷同,纯属巧合,仅供学习参考之用。
一、书籍核心定位与独特价值(专家视角提炼)
《从零构建大模型》(含中译版对应著作《从零构建大模型:算法、训练与微调》)是一本兼顾“底层理论深度”与“工程实践可操作性”的经典指南,核心定位是打破大模型“黑箱认知”,让不同技术层次的读者都能掌握从0到1构建大模型的完整路径——区别于泛泛而谈的概念科普,本书以“实战落地”为核心,串联起大模型构建的全生命周期,从基础环境搭建、数据预处理,到核心算法实现、模型训练微调,再到推理优化与部署,每一步均配套详尽理论解析、可复现代码与实操技巧,真正实现“从理解原理到亲手造模型”的跨越[1][2][4]。
本书作者涵盖国际AI领域专家(如Sebastian Raschka)与国内深耕大模型研发的学者(如梁楠),结合自身学术积累与工程实践经验,既还原了大模型构建的底层逻辑,又规避了纯理论书籍的晦涩难懂,同时解决了实操类书籍“重代码、轻原理”的痛点,其独特价值体现在三点:一是,完整呈现大模型从数据准备到部署落地的每一个关键环节,形成闭环知识体系;二是,兼顾初学者、进阶者与研究者的需求,从PyTorch基础到工业级优化均有涉及;三是,配套代码全部开源(含英文原版与中文注释版),支持在普通消费级电脑上运行,让“人人可构建大模型”成为可能[1][3][4][5]。
二、核心框架:大模型构建的全生命周期(书中核心轴线)
本书的核心逻辑的是“循序渐进、从基础到复杂”,以“构建一个可运行的大模型(如微型GPT)”为目标,按“基础准备—核心模块构建—模型训练—微调优化—部署落地”的路径展开,同时穿插大模型发展脉络与伦理规范,形成“理论铺垫—实战操作—延伸思考”的完整框架,具体可拆解为五大模块,各模块环环相扣、层层递进[1][2][4]。
三、第一模块:基础铺垫——理解大模型与环境准备
这一模块是大模型构建的“地基”,核心是帮读者厘清核心概念、搭建实操环境,为后续模块学习扫清障碍,对应书中开篇引言与基础章节[2][3][4]。
(一)大模型核心概念与发展脉络
书中首先明确了“大模型”的定义与核心特征,规避了概念混淆,同时梳理了其发展历程,帮助读者建立宏观认知[2][5]:
-
核心定义:大模型(以大语言模型LLM为核心,延伸至视觉Transformer等多模态模型)是指“基于大规模数据训练、具备强大知识表征与模式学习能力,能够完成文本生成、逻辑推理、图像分析等复杂任务的深度学习模型”,其核心优势在于“泛化能力强”,可通过预训练迁移到多种下游任务[2][4]。
-
核心特征:规模化(数据规模与模型参数规模大)、自学习(依托自监督学习从海量数据中积累知识)、多任务适配(通过微调可适配文本分类、问答等多种任务)、可解释性逐步提升(区别于早期“黑箱”模型)[2][4]。
-
发展脉络(书中重点梳理):
-
早期阶段(规则与统计学习):依赖人工设计规则与统计方法,模型能力有限,无法处理复杂语言与图像信息[2];
-
崛起阶段(神经网络与深度学习):神经网络技术成熟,逐步替代传统方法,但存在长程依赖等问题[2];
-
突破阶段(Transformer诞生):自注意力机制提出,Transformer架构诞生,解决了长程依赖问题,成为大模型的核心架构[2][4];
-
成熟阶段(预训练模型兴起):BERT、GPT、T5等预训练模型相继出现,形成“预训练—微调”的核心范式,大模型逐步走向实用化[2];
-
前沿阶段(超大规模与多模态):模型参数规模突破千亿、万亿级,多模态模型(如ViT、多模态GPT)兴起,实现文本、图像等多类型信息的统一处理[2]。
-
-
关键区分:书中明确区分了大语言模型(LLM)与传统语言模型、多模态模型的边界——传统语言模型仅能完成简单文本处理,LLM聚焦自然语言的理解与生成,多模态模型则可融合文本、图像等多种输入,同时厘清了GPT(生成式)与BERT(理解式)的核心差异[2][4]。
(二)实操环境搭建(零基础友好)
书中专门针对初学者,详细讲解了大模型构建的软硬件环境搭建,全程配套步骤与问题解决方案,确保普通读者可顺利上手[2][3][4]:
-
硬件要求:无需高端服务器,普通消费级电脑(如MacBook Pro、配备中端GPU的台式机)即可满足基础训练需求,书中明确给出了不同训练场景的硬件配置建议(如内存、GPU显存要求)[2][3][5];
-
软件环境:以PyTorch框架为核心(主流且易上手),详细讲解了Python、Git、JupyterLab等工具的安装,以及torch、tiktoken、matplotlib等依赖库的配置,同时提供了环境检查脚本[3][4];
-
代码仓库使用:详细介绍了官方开源代码仓库(LLMs-from-scratch)的下载、克隆、环境激活步骤,区分了英文原版与中文注释版的使用场景,同时讲解了代码目录结构,方便读者快速定位所需内容[1][3][4];
-
常见问题解决:针对环境搭建中可能出现的依赖冲突、版本不兼容、代码运行报错等问题,给出了具体的解决方案,降低实操门槛[2][3]。
四、第二模块:核心构建——大模型关键模块的原理与实现
这是本书的核心重点,对应书中主体章节,核心是拆解大模型的底层架构,手把手教读者实现每一个关键模块,从文本预处理到Transformer架构,再到完整模型组装,让读者真正理解大模型“如何工作”[1][2][4]。
(一)第一步:文本预处理与嵌入表示(大模型的“输入准备”)
大模型无法直接处理原始文本,需先将文本转换为可识别的数字序列,这一步是大模型构建的基础,书中详细讲解了完整流程与核心技术[1][3][4]:
-
文本清洗:去除原始文本中的无用信息(如乱码、重复内容、特殊符号),统一文本格式(如大小写、换行),为后续处理奠定基础[4];
-
分词技术(核心):讲解了多种分词方法,重点聚焦大模型主流的BPE(字节对编码)分词法——其核心优势是可将未登录词(词典中没有的词)拆解为子词单元,平衡词表大小与语义粒度,例如将“unfamiliarword”拆解为“unfam”“iliar”“word”,解决了传统分词的局限性[1][3][4][5]。书中详细讲解了BPE的原理,同时提供了两种实现方式:手动实现(理解内在逻辑)与基于tiktoken库实现(提升效率),并配套完整代码[3][4];
-
词元与词表构建:将分词后的结果转换为词元(Token),引入特殊词元(如<|endoftext|>表示文本末尾),构建词表并为每个词元分配唯一ID,实现文本到词元ID序列的转换[3][4];
-
嵌入表示(词嵌入+位置编码):
-
词嵌入:通过嵌入层将词元ID转换为固定维度的嵌入向量,使语义相似的词元在向量空间中距离相近(如“eagle”“duck”的嵌入向量聚类在一起),书中用PyTorch实现了嵌入层,清晰讲解了参数设置与维度分析[3][4];
-
位置编码:解决Transformer架构“无序性”的痛点,通过正弦函数为词元添加位置信息,确保模型能够捕捉文本的顺序关系,书中详细讲解了位置编码的计算原理与实现代码[1][2][4]。
-
-
数据采样:介绍了滑动窗口采样等方法,从长文本中提取训练样本,提升数据利用率,同时讲解了小规模示例数据集的使用(适配普通电脑训练)[1][3]。
(二)第二步:核心算法——注意力机制与Transformer架构
Transformer架构是所有现代大模型的核心,而注意力机制是Transformer的“灵魂”,书中用“理论+代码”的方式,将复杂的算法拆解为易懂的步骤,重点讲解了自注意力、多头注意力等关键机制[1][2][4][5]:
-
Transformer架构整体认知:先介绍了Seq2Seq模型(编码器-解码器结构),作为Transformer的铺垫,讲解了其工作原理与实现方法,再引出Transformer架构的改进点——解决了Seq2Seq模型长程依赖捕捉能力弱的问题,明确了Transformer的整体结构(嵌入层→多个Transformer块堆叠→输出层)[2][4];
-
自注意力机制(核心重点):
-
核心原理:通过矩阵运算(QKV矩阵生成、点积运算、softmax归一化),模拟词元与词元之间的关联关系,动态分配注意力权重,实现长程依赖的捕捉——例如处理“他喜欢打篮球,它是一项有趣的运动”时,模型可通过注意力机制识别“它”指代“打篮球”[1][2][4];
-
实现细节:书中没有直接调用PyTorch内置模块,而是逐行编写代码,实现了缩放点积注意力,详细讲解了QKV矩阵的生成、注意力权重的计算、dropout的应用等细节,甚至用50行代码实现了自注意力机制,让读者直观理解其内在逻辑[1][4];
-
因果掩码:针对生成式模型(如GPT),讲解了因果掩码的原理与实现——在训练时隐藏未来词元,确保模型生成文本的因果性(只能根据前文预测后文),这是GPT类模型能够实现文本生成的关键[1][4]。
-
-
多头注意力机制:在自注意力的基础上,通过并行设置多个注意力头,捕捉不同语义空间的特征,提升模型的表达能力,书中详细讲解了多头注意力的拆分与拼接过程,以及其在Transformer中的作用,同时配套实现代码[1][2][4];
-
Transformer块的实现:每个Transformer块由“多头注意力层+前馈神经网络+残差连接+层归一化”组成,书中详细讲解了各组件的作用与实现:
-
残差连接:解决模型深度增加导致的梯度消失问题,加速训练收敛,书中用PyTorch实现了残差连接层[2][4];
-
层归一化:稳定模型训练过程,减少梯度波动,详细讲解了归一化的计算过程与参数设置[2][4];
-
前馈神经网络:采用GELU激活函数,对注意力层的输出进行非线性转换,增强模型的拟合能力[1][4]。
-
(三)第三步:模型组装——从零实现主流大模型
在掌握核心模块后,书中带领读者将各模块有机组合,从零实现了主流大模型,重点聚焦GPT、BERT与ViT(视觉Transformer),兼顾语言模型与多模态模型,让读者掌握不同类型大模型的构建逻辑[2][4]:
-
从零实现GPT模型(生成式核心):
-
核心逻辑:基于Transformer解码器架构,堆叠多个Transformer块,搭配嵌入层、位置编码与语言建模头,实现文本生成功能[1][2][4];
-
实现步骤:从模块定义(嵌入层、Transformer块),到模型整体拼接,再到文本生成函数的编写,仅需10行核心代码即可实现基础文本生成(输入提示词,模型自动生成后续文本)[1][3];
-
关键优化:讲解了GPT-2的核心改进(层堆叠优化、注意力机制调整),同时实现了微型GPT模型(适配普通电脑),让读者能够亲手运行模型,感受生成效果[5]。
-
-
从零实现BERT模型(理解式核心):
-
核心逻辑:基于Transformer编码器架构,重点讲解了预训练任务(掩码语言模型MLM、下一句预测NSP),以及分类任务的微调实现[2][4];
-
实操重点:在预训练模型基础上添加分类头,实现垃圾邮件检测等分类任务,详细讲解了微调流程与参数设置[1][4]。
-
-
从零实现ViT模型(视觉Transformer):
-
核心逻辑:将图像划分为多个图像块,通过嵌入层转换为图像嵌入向量,再利用Transformer架构进行图像分析,实现图像分类等任务[2][4];
-
实操重点:讲解了图像分块、图像嵌入、量化分析等关键步骤,拓展了大模型的应用范围,让读者理解多模态模型的构建思路[2]。
-
五、第三模块:模型训练——从数据到模型的“迭代过程”
模型构建完成后,需通过大规模数据训练,让模型学习语言规律与知识,这一模块核心讲解训练的完整流程、关键技术与实操技巧,解决“训练不稳定、效果差、资源不足”等常见问题[1][4][5]。
(一)训练核心流程(书中标准化流程)
书中给出了大模型训练的标准化四步流程,适配所有主流大模型,同时配套完整训练循环代码[4]:
-
数据准备:筛选大规模无标签文本数据(书中使用《The Verdict》短篇小说作为示例数据集),完成预处理(分词、嵌入、采样),转换为模型可接受的训练格式[3][4];
-
训练配置:设置超参数(学习率、批次大小、训练轮次),选择优化器(重点讲解AdamW优化器,适配大模型训练),配置损失函数(交叉熵损失,用于语言建模任务)[4];
-
训练执行:编写训练循环,实现“输入数据→模型前向传播→损失计算→反向传播→参数更新”的闭环,同时添加训练日志,实时监控训练效果(损失值变化、文本生成质量)[4];
-
训练评估与调优:通过损失值收敛情况、文本生成质量,评估模型训练效果,针对训练过拟合、梯度消失等问题,给出具体的调优方案[1][4]。
(二)关键训练技术(解决实操痛点)
书中重点讲解了针对大模型训练的关键技术,尤其是适配普通消费级设备的轻量化训练方法,打破“大模型训练必须依赖高端服务器”的认知[4][5]:
-
轻量级训练方案:针对普通电脑算力不足的问题,提供了小规模数据集训练、参数精简等方法,让读者能够在单块GPU甚至笔记本电脑上运行训练任务,直观观察模型学习过程[4][5];
-
训练稳定性优化:
-
梯度裁剪:解决训练过程中梯度爆炸的问题,限制梯度的最大值,确保参数更新稳定[4];
-
动态学习率调度:讲解了学习率衰减策略,根据训练轮次调整学习率,提升训练效果,避免过拟合[4];
-
混合精度训练:在不影响训练效果的前提下,降低计算资源占用,加速训练过程[2][4]。
-
-
分布式训练入门:针对有条件的读者,讲解了分布式训练的基础原理与实现步骤,通过多GPU协同,提升训练效率,适配更大规模的模型与数据[2][4];
-
自监督预训练详解:讲解了自监督学习的核心逻辑——让模型从无标签数据中“自主学习”,积累通用语言知识,这是大模型具备强泛化能力的关键,同时对比了监督学习与自监督学习的差异[4][5]。
(三)常见训练问题与解决方案(书中重点总结)
书中结合实操经验,总结了大模型训练中最常见的4类问题,给出了具体的排查与解决方法,实用性极强[4]:
-
损失值不收敛:排查数据预处理是否规范、超参数设置是否合理,调整学习率与批次大小,增加训练轮次[4];
-
模型过拟合:增加数据量、使用dropout正则化、增加模型泛化能力,同时减少训练轮次[4];
-
训练速度过慢:优化代码、使用混合精度训练、精简模型参数,或采用分布式训练[4];
-
文本生成质量差:增加训练数据量、优化注意力机制参数、调整解码策略(如温度缩放、Top-k采样)[1][4]。
六、第四模块:微调优化——让模型适配具体任务
预训练后的大模型具备通用语言能力,但无法直接适配具体下游任务(如情感分析、问答系统),微调是连接预训练模型与实际应用的关键,这一模块核心讲解微调的原理、方法与实操,贴合工业界实际应用场景[1][4][5]。
(一)微调的核心逻辑与价值
书中明确了微调的定义:在预训练模型的基础上,使用少量标注数据,调整模型参数,让模型适配特定下游任务,其核心价值是“低成本、高效提升模型在具体任务上的性能”——无需从零训练模型,仅需微调少量参数,即可实现模型的快速适配[4][5]。
微调与预训练的关系:预训练是“打基础”(积累通用知识),微调是“专项训练”(适配具体任务),两者形成“预训练→微调”的核心范式,这也是当前大模型落地的主流路径[2][4][5]。
(二)主流微调方法(书中重点讲解)
书中讲解了两种主流微调方式,兼顾“全参数微调”与“轻量化微调”,适配不同的资源条件与任务需求[2][4]:
-
全参数微调:调整预训练模型的所有参数,适配下游任务,优点是微调效果好,缺点是计算资源消耗大,适合数据量充足、资源充足的场景,书中以文本分类任务为例,讲解了全参数微调的完整流程与代码[4];
-
参数高效微调(重点推荐):仅训练模型的少量参数,无需调整全部参数,降低计算资源需求,适合普通设备与数据量较少的场景,书中重点讲解了两种主流方法:
-
LoRA微调:通过添加低秩适配器,仅训练适配器参数,不改变预训练模型的核心参数,低成本实现模型适配,书中在附录中详细讲解了LoRA微调的原理与代码实现[1][4];
-
Adapter Tuning与P-Tuning:两种轻量化微调方法,通过在Transformer块中添加适配层,实现少量参数训练,适合工业级部署场景,书中详细讲解了其实现细节[2][4]。
-
(三)不同任务的微调实操(书中实战案例)
书中结合具体案例,讲解了不同下游任务的微调方法,让读者能够直接复用代码,快速适配实际需求[1][4][5]:
-
文本分类任务:在预训练模型基础上添加分类头,微调模型,实现垃圾邮件检测、情感分析等任务,详细讲解了数据标注、超参数设置与评估方法[4];
-
指令微调:重点讲解了ChatGPT风格的对话优化,通过对话数据微调模型,让模型能够遵循人类指令(如“写一首诗”“解释一个概念”),提升模型的交互能力[1][5];
-
问答任务:微调模型适配问答场景,让模型能够根据问题,从文本中提取准确答案,讲解了问答数据的准备与微调流程[4];
-
多模态微调:以ViT模型为例,讲解了图像分类任务的微调方法,实现模型对特定图像类别的精准识别[2]。
(四)模型优化进阶技术
除了微调,书中还讲解了大模型的进阶优化技术,用于提升模型性能、降低部署成本,贴合工业级应用需求[2][4]:
-
模型压缩技术:
-
知识蒸馏:将大模型(教师模型)的知识迁移到小模型(学生模型),在保证性能损失较小的前提下,精简模型参数,降低部署成本[2][4];
-
模型剪枝:去除模型中冗余的参数与神经元,精简模型结构,加速推理速度[2][4]。
-
-
推理优化技术:讲解了量化、批处理等方法,降低模型推理时的计算资源占用,提升推理速度,适配部署场景[1][4];
-
对比学习与对抗训练:两种进阶训练方法,用于提升模型的泛化能力与鲁棒性,避免模型被恶意攻击或出现预测偏差[2][4]。
七、第五模块:部署落地——从模型到应用的“最后一公里”
模型训练与微调完成后,需部署到实际应用场景中,才能发挥其价值,这一模块核心讲解大模型部署的基础原理、主流方式与实操步骤,解决“模型能训练、不能使用”的痛点[1][4]。
(一)部署核心认知与准备
-
部署的核心目标:将训练好的模型转换为可调用的服务,实现“输入请求→模型推理→输出结果”的快速响应,同时兼顾部署成本与推理速度[4];
-
部署前准备:模型导出(将PyTorch模型导出为可部署的格式)、模型优化(量化、剪枝)、推理环境搭建(配置部署所需的软件依赖)[4];
-
部署核心考量:推理速度、资源占用、稳定性、可扩展性,根据不同应用场景(如桌面应用、Web服务),选择合适的部署方式[4]。
(二)主流部署方式(书中重点讲解)
书中讲解了3种主流部署方式,从简单到复杂,适配不同的技术水平与应用场景[4]:
-
本地部署(适合初学者):将模型部署在本地电脑上,编写简单的调用脚本,实现文本生成、图像分类等功能,书中配套完整代码,让读者能够快速实现本地调用[4][5];
-
Web部署(适合小型应用):使用Flask、FastAPI等Web框架,将模型封装为API接口,实现通过网页、APP调用模型,讲解了接口编写、请求处理、响应返回的完整流程[4];
-
工业级部署(进阶):讲解了Docker容器部署、云服务器部署的基础原理,通过容器化技术,实现模型的可移植性与可扩展性,适配大规模应用场景,同时讲解了部署后的监控与维护方法[4]。
(三)部署实战案例与问题解决
-
实战案例:书中以“微型GPT模型本地部署”“文本分类模型Web部署”为例,详细讲解了部署的每一个步骤,从模型导出到接口调用,全程配套代码与截图,确保可复现[4];
-
常见部署问题:推理速度慢(优化模型、使用量化技术)、接口调用报错(检查环境配置、模型格式)、资源占用过高(精简模型、优化部署架构),书中均给出了具体的解决方案[4]。
八、延伸思考:大模型的伦理规范与未来趋势(书中收尾重点)
本书不仅聚焦实操,还在收尾部分探讨了大模型的伦理规范与未来发展趋势,引导读者跳出“纯技术”视角,理性看待大模型的发展,体现了书籍的深度与格局[4]。
(一)大模型的伦理风险与规范
书中明确指出,大模型的发展必须兼顾技术进步与伦理规范,重点探讨了4类核心伦理风险,并给出了应对建议[4]:
-
生成内容风险:模型可能生成虚假信息、有害内容、偏见内容,应对方法是加强训练数据审核、添加内容过滤机制、优化模型对齐能力[4];
-
隐私安全风险:训练数据中可能包含个人隐私信息,部署过程中可能出现数据泄露,应对方法是数据脱敏、加强部署环境安全、合规使用数据[4];
-
公平性风险:模型可能存在偏见(如性别、种族偏见),源于训练数据的偏差,应对方法是优化训练数据、添加公平性约束[4];
-
责任界定风险:模型出现错误预测或生成有害内容时,责任归属不明确,需要建立清晰的责任界定机制,规范大模型的研发与使用[4]。
(二)大模型的未来发展趋势(书中预判)
结合当前技术发展现状,书中对大模型的未来趋势做出了4点预判,贴合工业界与学术界的前沿方向[2][4]:
-
多模态融合成为主流:文本、图像、音频、视频等多类型信息的统一处理,将成为大模型的核心发展方向,ViT等多模态模型将逐步普及[2][4];
-
轻量化与高效化:大模型将向“小而精”的方向发展,通过模型压缩、轻量化训练等技术,实现手机、边缘设备等终端的部署,降低使用门槛[4];
-
可解释性提升:逐步打破大模型“黑箱”困境,研发可解释性技术,让模型的预测与生成过程可追溯、可理解[4];
-
产业化落地加速:大模型将逐步渗透到各行各业(如医疗、教育、工业),与具体业务深度融合,同时开源生态将更加完善,推动大模型技术的普惠[2][4]。
九、书籍核心要点总结(专家提炼,重中之重)
-
核心逻辑:大模型的构建是“数据→模块→模型→训练→微调→部署”的全生命周期过程,每一个环节都不可或缺,且环环相扣,核心架构是Transformer,核心机制是注意力机制[1][2][4];
-
实操核心:本书的核心价值是“可复现”,无论是模块实现、模型训练,还是部署落地,均配套完整代码,且支持普通消费级电脑运行,关键是掌握“手动实现核心模块”,而非单纯“调包”[1][3][4][5];
-
关键技术:BPE分词、位置编码、自注意力/多头注意力、Transformer块、预训练-微调范式、LoRA轻量化微调、模型量化与剪枝,是大模型构建与落地的核心技术,必须重点掌握[1][2][4];
-
核心认知:大模型并非“参数越大越好”,而是“适配场景才最好”,普通开发者无需追求千亿级参数模型,可从微型模型入手,逐步掌握核心逻辑,再逐步拓展[4][5];
-
学习路径:从零开始的最优学习路径是“基础环境搭建→文本预处理→注意力机制→Transformer架构→模型组装→训练→微调→部署”,层层递进,同时结合代码实操,深化对原理的理解[1][3][4];
-
发展底线:大模型的研发与使用,必须兼顾技术进步与伦理规范,规避虚假信息、隐私泄露等风险,实现技术向善[4]。
十、专家读后启示
《从零构建大模型》最核心的价值,不在于“教会读者构建一个千亿级大模型”,而在于“打破大模型的神秘感,传递大模型构建的底层逻辑与实操思维”。在当前大模型热潮下,很多人陷入“崇拜参数规模、依赖现成框架”的误区,而本书引导读者回归本质——从手动实现每一个核心模块开始,理解大模型“为什么能工作”,而非仅仅“会用模型”。
对于初学者而言,本书的分层教学的设计,可让其快速入门,从PyTorch基础到微型模型实现,逐步建立信心;对于进阶者与研发人员,书中的轻量化微调、工业级优化、部署落地等内容,可直接对接工业界需求,提升实操能力;对于研究者,书中的预训练机制、多模态模型构建等内容,可提供新的研究思路。
读完本书最大的启示是:大模型的研发并非“巨头专属”,普通开发者也可通过系统学习,从零构建属于自己的模型。未来,大模型的竞争核心,不在于参数规模,而在于底层技术的掌握、场景的适配与伦理的坚守。唯有夯实基础、重视实操、坚守技术向善的底线,才能真正用好大模型,推动技术落地,创造实际价值。
(注:文档部分内容可能由 AI 生成)
————书籍摘要————
◆ 大语言模型(large language model, LLM,简称大模型)
◆ 大语言模型的一大显著特点便是其规模之“巨大”——拥有数百万到数十亿个参数
第1章 理解大语言模型
◆ 大语言模型的成功,一方面得益于为其提供支撑的Transformer架构,另一方面得益于用于训练这些模型的海量数据。
1.1 什么是大语言模型
◆ 大语言模型是一种用于理解、生成和响应类似人类语言文本的神经网络。
◆ 大语言模型是深度学习技术的具体应用,能够处理和生成类似人类语言的文本;深度学习是机器学习的一个分支,主要使用多层神经网络;机器学习和深度学习致力于开发算法,使计算机能够从数据中学习,并执行需要人类智能水平的任务
1.3 构建和使用大语言模型的各个阶段
◆ 大语言模型的构建通常包括预训练(pre-training)和微调(fine-tuning)两个阶段。“预训练”中的“预”表明它是模型训练的初始阶段,此时模型会在大规模、多样化的数据集上进行训练,以形成全面的语言理解能力。以预训练模型为基础,微调阶段会在规模较小的特定任务或领域数据集上对模型进行针对性训练,以进一步提升其特定能力。图1-3展示了由预训练和微调组成的两阶段训练方法。
◆ 大语言模型的预训练目标是在大量无标注的文本语料库(原始文本)上进行下一单词预测。预训练完成后,可以使用较小的带标注的数据集对大语言模型进行微调
1.4 Transformer架构介绍
◆ Transformer由两部分组成:一个是编码器,用于处理输入文本并生成文本嵌入(一种能够在不同维度中捕获许多不同因素的数值表示);另一个是解码器,用于使用这些文本嵌入逐词生成翻译后的文本
◆ Transformer架构由两个子模块构成:编码器和解码器。编码器(encoder)模块负责处理输入文本,将其编码为一系列数值表示或向量,以捕捉输入的上下文信息。然后,解码器(decoder)模块接收这些编码向量,并据此生成输出文本。
◆ Transformer和大语言模型的一大关键组件是自注意力机制(self-attention mechanism),它允许模型衡量序列中不同单词或词元之间的相对重要性。这一机制使得模型能够捕捉到输入数据中长距离的依赖和上下文关系,从而提升其生成连贯且上下文相关的输出的能力
◆ 左侧的编码器部分展示了专注于掩码预测的类BERT大语言模型,主要用于文本分类等任务。右侧的解码器部分展示了类GPT大语言模型,主要用于生成任务和生成文本序列
1.5 利用大型数据集
◆ 词元(token)是模型读取文本的基本单位。数据集中的词元数量大致等同于文本中的单词和标点符号的数量
1.6 深入剖析GPT架构
◆ 下一单词预测任务采用的是自监督学习(self-supervised learning)模式,这是一种自我标记的方法。
◆ 由于像GPT这样的解码器模型是通过逐词预测生成文本,因此它们被认为是一种自回归模型(autoregressive model)。自回归模型将之前的输出作为未来预测的输入。
◆ 1.8 小结
- 大语言模型彻底革新了自然语言处理领域。在此之前,自然语言处理领域主要采用基于明确规则的系统和较为简单的统计方法。而如今,大语言模型的兴起为这一领域引入了基于深度学习的新方法,在理解、生成和翻译人类语言方面取得了显著的进步。
- 现代大语言模型的训练主要包含两个步骤。
- 首先,在海量的无标注文本上进行预训练,将预测的句子中的下一个词作为“标签”。
- 随后,在更小规模且经过标注的目标数据集上进行微调,以遵循指令和执行分类任务。
- 大语言模型采用的是基于Transformer的架构。这一架构的核心组件是注意力机制,它使得大语言模型在逐词生成输出时,能够根据需要选择性地关注输入序列中的各个部分。
- 原始的Transformer架构由两部分组成:一个是用于解析文本的编码器,另一个是用于生成文本的解码器。
- 专注于生成文本和执行指令的大语言模型(如GPT-3和ChatGPT)只实现了解码器部分,从而简化了整个架构。
- 由数以亿计的语料构成的大型数据集是预训练大语言模型的关键。
- 尽管类GPT大语言模型的常规预训练任务是预测句子中的下一个词,但它们展现出了能够完成分类、翻译或总结文本等任务的“涌现”特性。
- 当一个大语言模型完成预训练后,该模型便能作为基础模型,通过高效的微调来适应各类下游任务。
- 在自定义数据集上进行微调的大语言模型能够在特定任务上超越通用的大语言模型。
2.1 理解词嵌入
◆ 将数据转换为向量格式的过程通常称为嵌入(embedding)。
◆ 嵌入的本质是将离散对象(如单词、图像甚至整个文档)映射到连续向量空间中的点,其主要目的是将非数值的数据转换为神经网络可以处理的格式。
2.3 将词元转换为词元ID
◆ 接下来,我们将把这些词元从Python字符串转换为整数表示,以生成词元ID(token ID)。这一过程是将词元ID转换为嵌入向量前的必经步骤。
◆ 分词器通常包含两个常见的方法:encode方法和decode方法。encode方法接收文本样本,将其分词为单独的词元,然后再利用词汇表将词元转换为词元ID。而decode方法接收一组词元ID,将其转换回文本词元,并将文本词元连接起来,形成自然语言文本
2.5 BPE
◆ BPE算法的原理是将不在预定义词汇表中的单词分解为更小的子词单元甚至单个字符,从而能够处理词汇表之外的单词
2.6 使用滑动窗口进行数据采样
◆ 给定一个文本样本,我们从中提取子样本,作为输入块提供给大语言模型。在训练过程中,模型的任务是预测输入块之后的下一个词,我们会屏蔽目标词之后的所有单词。
2.7 创建词元嵌入
◆ 由于类GPT大语言模型是使用反向传播算法(backpropagation algorithm)训练的深度神经网络,因此需要连续的向量表示或嵌入。
2.8 编码单词位置信息
◆ 嵌入层的工作机制是,无论词元ID在输入序列中的位置如何,相同的词元ID始终被映射到相同的向量表示
◆ 文本→词元→词元ID→词元嵌入(以词汇数量与自定义嵌入维度初始化嵌入权重矩阵)→位置嵌入→输入嵌入
◆ 2.9 小结
- 由于大语言模型无法直接处理原始文本,因此我们必须将文本数据转换为名为“嵌入”的数值向量。嵌入将离散的数据(如词语或图像)映射到连续的向量空间,使其能够用于神经网络的训练。
- 首先,原始文本被分解为词元,这些词元可能是单词或字符。然后,这些词元被转换为整数表示,即词元ID。
- 为了增强模型对不同上下文的理解和处理能力,可以引入诸如<|unk|>、<|endoftext|>等特殊词元,来处理未知词汇或在不相关的文本之间划分边界。
- 通过使用BPE分词器,GPT-2、GPT-3等大语言模型可以将未知词汇分解为子词单元或单个字符来有效地处理它们。
- 通过使用滑动窗口方法对已经分词的数据进行采样,可以生成大语言模型训练所需的输入-目标对。
- 作为一种查找操作,PyTorch中的嵌入层用来检索与词元ID对应的向量。所得的嵌入向量为词元提供了连续的表示形式,这对于训练像大语言模型这样的深度学习模型至关重要。
- 尽管词元嵌入为每个词元提供了一致的向量表示,但它们并不包含词元在序列中的位置信息。为了解决这一问题,通常采用两种位置嵌入策略:绝对位置嵌入和相对位置嵌入。OpenAI的GPT模型采用了绝对位置嵌入,这些嵌入被添加到词元嵌入向量中,并在模型训练过程中进行优化。

3.1 长序列建模中的问题
◆ 为了处理这个问题,通常使用一个包含编码器和解码器两个子模块的深度神经网络。编码器首先读取和处理整个文本,解码器则负责生成翻译后的文本。
◆ 循环神经网络(recurrent neural network, RNN)是语言翻译中最流行的编码器-解码器架构。RNN是一种将前一步骤的输出作为当前步骤的输入的神经网络,它非常适合处理像文本这样的序列数据。如果你不熟悉RNN也没关系,因为理解这次讨论并不需要了解RNN的具体工作原理。这里我们主要关注编码器-解码器架构的基本概念。
◆ 编码器-解码器RNN的一个主要限制是,在解码阶段,RNN无法直接访问编码器中的早期隐藏状态。因此,它只能依赖当前的隐藏状态,这个状态包含了所有相关信息。这可能导致上下文丢失,特别是在复杂句子中,依赖关系可能跨越较长的距离。
◆ 只需记住,编码器-解码器RNN存在的缺陷对注意力机制的设计起到了促进作用。
3.2 使用注意力机制捕捉数据依赖关系
◆ 自注意力是Transformer模型中的一种机制,它通过允许一个序列中的每个位置与同一序列中的其他所有位置进行交互并权衡其重要性,来计算出更高效的输入表示。
3.3 通过自注意力机制关注输入的不同部分
◆ 在自注意力机制中,“自”指的是该机制通过关联单个输入序列中的不同位置来计算注意力权重的能力。
◆ 点积本质上是将两个向量逐个元素相乘然后对乘积求和的简洁方法
◆ 在自注意机制中,点积决定了序列中每个元素对其他元素的关注程度:点积越大,两个元素之间的相似度和注意力分数就越高。
3.4 实现带可训练权重的自注意力机制
◆ 在权重矩阵中,“权重”是“权重参数”的简称,表示在训练过程中优化的神经网络参数。这与注意力权重是不同的。
3.5 利用因果注意力隐藏未来词汇
◆ 因果注意力(也称为掩码注意力)是一种特殊的自注意力形式。它限制模型在处理任何给定词元时,只能基于序列中的先前和当前输入来计算注意力分数,而标准的自注意力机制可以一次性访问整个输入序列。
3.6 将单头注意力扩展到多头注意力
◆ “多头”这一术语指的是将注意力机制分成多个“头”,每个“头”独立工作。在这种情况下,单个因果注意力模块可以被看作单头注意力,因为它只有一组注意力权重按顺序处理输入。
◆ 3.7 小结
- 注意力机制可以将输入元素转换为增强的上下文向量表示,这些表示涵盖了关于所有输入的信息。
- 自注意力机制通过对输入进行加权求和来计算上下文向量表示。
- 在简化的注意力机制中,注意力权重是通过点积计算得出的。
- 点积是两个向量的元素逐个相乘并将这些乘积相加的一种简洁计算方法。
- 尽管矩阵乘法不是必需的,但它可以通过替代嵌套的for循环使计算更高效、更紧凑。
- 在用于大语言模型的自注意力机制(也被称为“缩放点积注意力”)中,我们引入了可训练的权重矩阵来计算输入的中间变换:查询矩阵、值矩阵和键矩阵。
- 在处理从左到右读取和生成文本的大语言模型时,我们会添加一个因果注意力掩码,以防止模型访问未来的词元。
- 除了使用因果注意力掩码将注意力权重置0,还可以添加dropout掩码来减少大语言模型中的过拟合。
- 基于Transformer的大语言模型中的注意力模块涉及多个因果注意力实例,这被称为“多头注意力”。
- 可以通过堆叠多个因果注意力模块实例来创建多头注意力模块。
- 创建多头注意力模块的一种更高效的方法是使用批量矩阵乘法。
第4章 从头实现GPT模型进行文本生成
4.2 使用层归一化进行归一化激活
◆ 现在我们将实现层归一化,以提高神经网络训练的稳定性和效率。层归一化的主要思想是调整神经网络层的激活(输出),使其均值为0且方差(单位方差)为1。这种调整有助于加速权重的有效收敛,并确保训练过程的一致性和可靠性。
4.4 添加快捷连接
◆ 梯度消失问题指的是在训练过程中,梯度在反向传播时逐渐变小,导致早期网络层难以有效训练。
4.7 生成文本
◆ 大语言模型逐步生成文本的过程,每次生成一个词元。从初始输入上下文(“Hello, I am”)开始,模型在每轮迭代中预测下一个词元,并将其添加到输入上下文中以进行下一轮预测
GPT模型架构概览。
◆ 4.8 小结
- 层归一化可以确保每个层的输出具有一致的均值和方差,从而稳定训练过程。
- 快捷连接是通过将一层的输出直接传递到更深层来跳过一个或多个层的连接,它能帮助缓解在训练深度神经网络(如大语言模型)时遇到的梯度消失问题。
- 作为GPT模型的核心模块组件,Transformer块融合了掩码多头注意力模块和使用GELU激活函数的全连接前馈神经网络。
- GPT模型是具有许多重复Transformer块的大语言模型,这些Transformer块有数百万到数十亿个参数。
- GPT模型具有多种规模,比如参数量分别为1.24亿、3.45亿、7.62亿和15.4亿的模型,我们可以使用相同的GPTModel Python类来实现它们。
- 类GPT大语言模型的文本生成能力涉及根据给定的输入上下文来逐个预测词元,然后将输出张量解码为人类可读的文本。
- 在没有训练的情况下,GPT模型生成的文本是不连贯的,这显示了模型训练对于生成连贯文本的重要性。
5.1 评估文本生成模型
◆ 我们将计算生成的输出结果的损失函数大小。这个损失值将作为训练进展和成功的衡量标准
◆ 权重更新是通过一种称为反向传播的过程完成的,这是训练深度神经网络的标准技术(有关反向传播和模型训练的更多细节,请参见A.3节~A.7节)
◆ 反向传播需要一个损失函数,它会计算模型的预测输出(在这里是与目标词元ID对应的概率)与实际期望输出之间的差异。这个损失函数衡量的是模型的预测与目标值之间的偏差
5.2 训练大语言模型
◆ 在PyTorch中训练深度神经网络的典型训练循环包括多个步骤,涉及对训练集中的批次进行多轮迭代。在每次循环中,我们计算每个训练集批次的损失以确定损失梯度,然后使用这些梯度来更新模型权重,以使训练集损失最小化
5.3 控制随机性的解码策略
◆ 温度缩放,这是一种在下一个词元生成任务中添加概率选择过程的技术
◆ logits除以温度,然后再进行归一化处理。当温度大于1的时候,原本大概率的样本会被惩罚,概率稀释。当温度小于1的时候,原本大概率的样本会被强化。
◆ 通过一个称为温度缩放的概念,可以进一步控制分布和选择过程。温度缩放指的是将logits除以一个大于0的
◆ 温度大于1会导致词元概率更加均匀分布,而小于1的温度将导致更加自信(更尖锐或更陡峭)的分布。
◆ 5.6 小结
- 当大语言模型生成文本时,它们逐个生成词元。
- 默认情况下,下一个词元是通过将模型输出转换为概率分数,并从词汇表中选择与最高概率分数对应的词元来生成的,这被称为“贪婪解码”。
- 通过使用概率采样和温度缩放,可以干预生成文本的多样性和连贯性。
- 在训练过程中,训练集损失和验证集损失可用于衡量大语言模型生成的文本质量。
- 对大语言模型进行预训练涉及改变其参数权重以最小化训练损失。
- 大语言模型的训练循环是深度学习中的一个标准过程,使用了传统的交叉熵损失和AdamW优化器。
- 在大型文本语料库上预训练大语言模型既耗时又耗资源,因此可以加载公开可用的权重作为在大型数据集上自行进行预训练的替代方案。
6.1 不同类型的微调
◆ 微调语言模型最常见的方法是指令微调和分类微调。
◆ 虽然指令微调更具通用性,但它需要更大的数据集和更多的计算资源来开发精通多种任务的模型。相比之下,分类微调所需的数据和计算资源较少,但它的应用范围局限于模型所训练的特定类别。
6.5 添加分类头
◆ 在基于神经网络的语言模型中,较低层通常捕捉基本的语言结构和语义,适用于广泛的任务和数据集,最后几层(靠近输出的层)更侧重于捕捉细微的语言模式和特定任务的特征。因此,只微调最后几层通常就足以将模型适应到新任务。
6.6 计算分类损失和准确率
◆ 在微调模型之前,还有一个小任务需要完成:实现微调过程中使用的模型评估函数
◆ 6.9 小结
- 微调大语言模型有不同的策略,包括分类微调和指令微调。
- 分类微调涉及通过添加一个小型分类层来替换大语言模型的输出层。
- 在将文本消息分类为“垃圾消息”或“非垃圾消息”的例子中,新的分类层只有两个输出节点。之前,我们使用的输出节点数量与词汇表中的唯一词元数量相等(50 256个)。
- 与预训练时预测文本中的下一个词元不同,分类微调训练模型输出正确的类别标签,比如“垃圾消息”或“非垃圾消息”。
- 与预训练相似,微调的模型输入是将文本转换为词元ID。
- 在微调大语言模型之前,我们会将预训练模型加载为基础模型。
- 分类模型的评估包括计算分类准确率(正确预测的比例或百分比)。
- 分类模型的微调使用与大语言模型预训练相同的交叉熵损失函数。
第7章 通过微调遵循人类指令
◆ 对大语言模型进行指令微调的三阶段过程。第一阶段涉及准备数据集,第二阶段专注于模型配置和微调,第三阶段涵盖模型性能的评估。我们将从第一阶段的第(1)步开始:下载和制作数据集
构建大语言模型的3个主要阶段
◆ 7.10 小结
- 指令微调的过程是将预训练的大语言模型调整为能够遵循人类的指令并生成所需的回复。
- 准备数据集的步骤包括下载指令-回复数据集、整理数据格式,以及将其拆分为训练集、验证集和测试集。
- 训练批次是通过自定义聚合函数构建的,该函数负责填充序列、创建目标词元ID,并掩码填充词元。
- 我们加载了一个参数量为3.55亿的预训练GPT-2 medium模型来作为指令微调的起始点。
- 预训练模型在指令数据集上进行微调,使用的是与预训练相似的训练循环方法。
- 评估阶段包括从测试集中提取模型的回复并对其进行评分(例如,使用另一个大语言模型进行评分)。
- Ollama应用程序配备了一个参数量为80亿的Llama模型,可以自动对微调模型在测试集上产生的回复进行评分,并提供一个平均分以量化性能。
附录A PyTorch简介
◆ A.1 什么是PyTorch。PyTorch是一个开源的基于Python的深度学习库。
◆ 张量是可以通过其阶数(或秩)来表征的数学对象,其中阶数提供了维度的数量。例如,标量(仅是一个数值)是秩为0的张量,向量是秩为1的张量,矩阵是秩为2的张量,如图A-6所示。
◆ 标量是零维张量(例如,仅一个数值),向量是一维张量,矩阵是二维张量。对于更高维的张量没有特定的术语,因此通常将三维张量称为“3D张量”,以此类推
◆ A.10 小结
- PyTorch是一个开源库,包含3个核心组件:张量库、自动微分函数和深度学习工具。
- PyTorch的张量库类似于NumPy等数组库。
- 在PyTorch中,张量是表示标量、向量、矩阵和更高维数组的类数组数据结构。
- PyTorch张量可以在CPU上执行,但PyTorch张量格式的一个主要优势是它支持GPU加速计算。
- PyTorch中的自动微分(autograd)功能使我们能够方便地使用反向传播训练神经网络,而无须手动推导梯度。
- PyTorch的深度学习工具提供了创建自定义深度神经网络的构建块。
- PyTorch提供了Dataset类和DataLoader类来建立高效的数据加载流水线。
- 在CPU或单个GPU上训练模型是最简单的。
- 如果有多个GPU可用,那么使用DistributedDataParallel是PyTorch中加速训练的最简单方式。
附录E 使用LoRA进行参数高效微调
◆ LoRA(低秩自适应)是应用最广泛的参数高效微调技术之一。
◆ LoRA是一种通过仅调整模型权重参数的一小部分,使预训练模型更好地适应特定且通常较小的数据集的技术。
◆ 好消息是:蒸馏是一种行之有效的方法。幸运的是,模型蒸馏提供了一种更加经济的替代方案。
◆ 有限预算下的纯强化学习:TinyZero
◆ 超越传统的监督微调:旅程学习
更多推荐



所有评论(0)