docs:add docsify deploy
0
docs/.nojekyll
Normal file
@@ -1,25 +1,98 @@
|
||||
# 前言
|
||||
<div align='center'>
|
||||
<img src="./images/head.jpg" alt="alt text" width="95%">
|
||||
<h1>Happy-LLM</h1>
|
||||
</div>
|
||||
|
||||
2022年底,ChatGPT 的横空出世改变了人们对人工智能的认知,也给自然语言处理(Natural Language Process,NLP)领域带来了阶段性的变革,以 GPT 系列模型为代表的大语言模型(Large Language Model,LLM)成为 NLP 乃至人工智能领域的研究主流。自 2023年至今,LLM 始终是人工智能领域的核心话题,引发了一轮又一轮的科技浪潮。
|
||||
<div align="center">
|
||||
<img src="https://img.shields.io/github/stars/datawhalechina/happy-llm?style=for-the-badge&logo=github" alt="GitHub stars"/>
|
||||
<img src="https://img.shields.io/github/forks/datawhalechina/happy-llm?style=for-the-badge&logo=github" alt="GitHub forks"/>
|
||||
<img src="https://img.shields.io/github/license/datawhalechina/happy-llm?style=for-the-badge" alt="License"/>
|
||||
<img src="https://img.shields.io/badge/language-Chinese-brightgreen?style=for-the-badge" alt="Language"/>
|
||||
</div>
|
||||
|
||||
LLM 其实是 NLP 领域经典研究方法预训练语言模型(Pretrain Langguage Model,PLM)的一种衍生成果。NLP 领域聚焦于人类书写的自然语言文本的处理、理解和生成,从诞生至今经历了符号主义阶段、统计学习阶段、深度学习阶段、预训练模型阶段到而今大模型阶段的多次变革。以 GPT、BERT 为代表的 PLM 是上一阶段 NLP 领域的核心研究成果,以注意力机制为模型架构,通过预训练-微调的阶段思想通过在海量无监督文本上进行自监督预训练,实现了强大的自然语言理解能力。但是,传统的 PLM 仍然依赖于一定量有监督数据进行下游任务微调,且在自然语言生成任务上性能还不尽如人意,NLP 系统的性能距离人们所期待的通用人工智能还有不小的差距。
|
||||
<div align="center">
|
||||
<h3>📚 从零开始的大语言模型原理与实践教程</h3>
|
||||
<p><em>深入理解 LLM 核心原理,动手实现你的第一个大模型</em></p>
|
||||
</div>
|
||||
|
||||
LLM 是在 PLM 的基础上,通过大量扩大模型参数、预训练数据规模,并引入指令微调、人类反馈强化学习等手段实现的突破性成果。相较于传统 PLM,LLM 具备涌现能力,具有强大的上下文学习能力、指令理解能力和文本生成能力。在大模型阶段,NLP 研究者可以一定程度抛弃大量的监督数据标注工作,通过提供少量监督示例,LLM 即能在指定下游任务上达到媲美大规模微调 PLM 的性能。同时,强大的指令理解能力与文本生成能力使 LLM 能够直接、高效、准确地响应用户指令,从而真正向通用人工智能的目标逼近。
|
||||
---
|
||||
|
||||
LLM 的突破性进展激发了 NLP 领域乃至整个人工智能领域的研究热度,海内外高校、研究院、大厂乃至众多传统领域企业都投入到 LLM 研究的浪潮中。自 2023年至今,LLM 阶段性成果层出不穷,模型性能不断刷新上限,从一开始的 ChatGPT,到 GPT-4,再到以 DeepSeek-R1 为代表的推理大模型、以 Qwen-VL 为代表的多模态大模型等更强大、更定制化的模型,LLM 应用也不断涌现出能够提升实际生产力、赋能用户实际生活的创新应用,从”百模大战“到”Agent 元年“,LLM 基座研究或许已趋向稳定的格局,LLM 的研究始终方兴未艾。可以肯定的是,在并不遥远的未来,LLM 及以 LLM 为基础的应用一定会成为人们生活中的基础设施,与每个人的生活、学习、工作密不可分。
|
||||
## 🎯 项目介绍
|
||||
|
||||
在这样的背景下,深入理解、掌握 LLM 原理,能够动手应用、训练任意一个 LLM 的能力,对每一位 NLP 研究者乃至其他领域的 AI 研究者至关重要。我们在 2023年底分别创建了 self-llm(开源大模型食用指南:https://github.com/datawhalechina/self-llm )、llm-universe(动手学大模型应用开发:https://github.com/datawhalechina/llm-universe )两个原创开源大模型教程,前者旨在为开发者提供一站式开源 LLM 部署、推理、微调的使用教程,后者旨在指导开发者从零开始搭建自己的 LLM 应用。两个教程都帮助到了广泛的国内外开发者,也获得了众多开发者的支持和认可,在学习者的反馈中,我们发现目前还缺乏一个从零开始讲解 LLM 原理、并引导学习者亲手搭建、训练 LLM 的完整教程。
|
||||
>   *很多小伙伴在看完 [self-llm 开源大模型食用指南](https://github.com/datawhalechina/self-llm) 后,感觉意犹未尽,想要深入了解大语言模型的原理和训练过程。于是我们决定推出《Happy-LLM》项目,旨在帮助大家深入理解大语言模型的原理和训练过程。*
|
||||
|
||||
鉴于此,我们编写了这本结合 LLM 原理及实战的教程。本书将从 NLP 的基本研究方法出发,根据 LLM 的思路及原理逐层深入,依次为读者剖析 LLM 的架构基础和训练过程。同时,我们会结合目前 LLM 领域最主流的代码框架,演练如何亲手搭建、训练一个 LLM,期以实现授之以鱼,更授之以渔。希望读者能从这本书开始走入 LLM 的浩瀚世界,探索 LLM 的无尽可能。
|
||||
  本项目是一个**系统性的 LLM 学习教程**,将从 NLP 的基本研究方法出发,根据 LLM 的思路及原理逐层深入,依次为读者剖析 LLM 的架构基础和训练过程。同时,我们会结合目前 LLM 领域最主流的代码框架,演练如何亲手搭建、训练一个 LLM,期以实现授之以鱼,更授之以渔。希望大家能从这本书开始走入 LLM 的浩瀚世界,探索 LLM 的无尽可能。
|
||||
|
||||
## 写给读者的建议
|
||||
### ✨ 你将收获什么?
|
||||
|
||||
本书包含 LLM 的理论基础、原理介绍和项目实战,全书包括 LLM 及 NLP 的核心思路剖析、公式解析与代码实战,旨在帮助开发者深入理解并掌握 LLM 的基本原理与应用。因此,本书适合大学生、研究人员、LLM 爱好者阅读。在阅读本书之前,你需要具备一定的编程经验,尤其是要对 Python 编程语言有一定的了解。同时,你最好具备深度学习的相关知识,并了解 NLP 领域的相关概念和术语,以便更轻松地阅读本书。
|
||||
- 🔍 **深入理解** Transformer 架构和注意力机制
|
||||
- 📚 **掌握** 预训练语言模型的基本原理
|
||||
- 🧠 **了解** 现有大模型的基本结构
|
||||
- 🏗️ **动手实现** 一个完整的 LLaMA2 模型
|
||||
- ⚙️ **掌握训练** 从预训练到微调的全流程
|
||||
- 🚀 **实战应用** RAG、Agent 等前沿技术
|
||||
|
||||
本书分为两部分——基础知识与实战应用。第1章~第4章是基础知识部分,从浅入深介绍 LLM 的基本原理。其中,第1章简单介绍 NLP 的基本任务和发展,为非 NLP 领域研究者提供参考;第2章介绍 LLM 的基本架构——Transformer,包括原理介绍及代码实现,作为 LLM 最重要的理论基础;第3章整体介绍经典的 PLM,包括 Encoder-Only、Encoder-Decoder 和 Decoder-Only 三种架构,也同时介绍了当前一些主流 LLM 的架构和思想;第4章则正式进入 LLM 部分,详细介绍 LLM 的特点、能力和整体训练过程。第5章~第7章是实战应用部分,将逐步带领读者深入 LLM 的底层细节。其中,第5章将带领读者基于 PyTorch 层亲手搭建一个 LLM,并实现预训练、有监督微调的全流程;第6章将引入目前业界主流的 LLM 训练框架 Transformers,带领读者基于该框架快速、高效地实现 LLM 训练过程;第7章则将介绍 基于 LLM 的各种应用,补全读者对 LLM 体系的认知,包括 LLM 的评测、检索增强生产(Retrieval-Augmented Generation,RAG)、智能体(Agent)的思想和简单实现。你可以根据个人兴趣和需求,选择性地阅读相关章节。
|
||||
## 📖 内容导航
|
||||
|
||||
在阅读本书的过程中,建议你将理论和实际相结合。LLM 是一个快速发展、注重实践的领域,我们建议你多投入实战,复现本书提供的各种代码,同时积极参加 LLM 相关的项目与比赛,真正投入到 LLM 开发的浪潮中。我们鼓励你关注 Datawhale 及其他 LLM 相关开源社区,当遇到问题时,你可以随时在 Datawhale 社区提问。Datawhale 也会始终跟进 LLM 及其他人工智能技术的发展,欢迎你关注或加入到 Datawhale 社区的共建中。
|
||||
| 章节 | 关键内容 | 状态 |
|
||||
| --- | --- | --- |
|
||||
| [前言](./前言.md) | 本项目的缘起、背景及读者建议 | ✅ |
|
||||
| [第一章 NLP 基础概念](chapter1/第一章%20NLP基础概念.md) | 什么是 NLP、发展历程、任务分类、文本表示演进 | ✅ |
|
||||
| [第二章 Transformer 架构](chapter2/第二章%20Transformer架构.md) | 注意力机制、Encoder-Decoder、手把手搭建 Transformer | ✅ |
|
||||
| [第三章 预训练语言模型](chapter3/第三章%20预训练语言模型.md) | Encoder-only、Encoder-Decoder、Decoder-Only 模型对比 | ✅ |
|
||||
| [第四章 大语言模型](chapter4/第四章%20大语言模型.md) | LLM 定义、训练策略、涌现能力分析 | ✅ |
|
||||
| [第五章 动手搭建大模型](chapter5/第五章%20动手搭建大模型.md) | 实现 LLaMA2、训练 Tokenizer、预训练小型 LLM | ✅ |
|
||||
| [第六章 大模型训练实践](chapter6/第六章%20大模型训练流程实践.md) | 预训练、有监督微调、LoRA/QLoRA 高效微调 | ✅ |
|
||||
| [第七章 大模型应用](chapter7/第七章%20大模型应用.md) | 模型评测、RAG 检索增强、Agent 智能体 | ✅ |
|
||||
|
||||
最后,欢迎每一位读者在阅读完本书后加入到 LLM 开发者的行列。作为国内 AI 开源社区,我们希望充分聚集共创者,一起丰富这个开源 LLM 的世界,打造更多、更全面特色 LLM 的教程。星火点点,汇聚成海。我们希望成为 LLM 与普罗大众的阶梯,以自由、平等的开源精神,拥抱更恢弘而辽阔的 LLM 世界。
|
||||
## 💡 如何学习
|
||||
|
||||
感谢你选择本书,祝你阅读愉快!
|
||||
  本项目适合大学生、研究人员、LLM 爱好者。在学习本项目之前,建议具备一定的编程经验,尤其是要对 Python 编程语言有一定的了解。最好具备深度学习的相关知识,并了解 NLP 领域的相关概念和术语,以便更轻松地学习本项目。
|
||||
|
||||
  本项目分为两部分——基础知识与实战应用。第1章~第4章是基础知识部分,从浅入深介绍 LLM 的基本原理。其中,第1章简单介绍 NLP 的基本任务和发展,为非 NLP 领域研究者提供参考;第2章介绍 LLM 的基本架构——Transformer,包括原理介绍及代码实现,作为 LLM 最重要的理论基础;第3章整体介绍经典的 PLM,包括 Encoder-Only、Encoder-Decoder 和 Decoder-Only 三种架构,也同时介绍了当前一些主流 LLM 的架构和思想;第4章则正式进入 LLM 部分,详细介绍 LLM 的特点、能力和整体训练过程。第5章~第7章是实战应用部分,将逐步带领大家深入 LLM 的底层细节。其中,第5章将带领大家者基于 PyTorch 层亲手搭建一个 LLM,并实现预训练、有监督微调的全流程;第6章将引入目前业界主流的 LLM 训练框架 Transformers,带领学习者基于该框架快速、高效地实现 LLM 训练过程;第7章则将介绍 基于 LLM 的各种应用,补全学习者对 LLM 体系的认知,包括 LLM 的评测、检索增强生产(Retrieval-Augmented Generation,RAG)、智能体(Agent)的思想和简单实现。你可以根据个人兴趣和需求,选择性地阅读相关章节。
|
||||
|
||||
  在阅读本书的过程中,建议你将理论和实际相结合。LLM 是一个快速发展、注重实践的领域,我们建议你多投入实战,复现本书提供的各种代码,同时积极参加 LLM 相关的项目与比赛,真正投入到 LLM 开发的浪潮中。我们鼓励你关注 Datawhale 及其他 LLM 相关开源社区,当遇到问题时,你可以随时在本项目的 issue 区提问。
|
||||
|
||||
  最后,欢迎每一位读者在学习完本项目后加入到 LLM 开发者的行列。作为国内 AI 开源社区,我们希望充分聚集共创者,一起丰富这个开源 LLM 的世界,打造更多、更全面特色 LLM 的教程。星火点点,汇聚成海。我们希望成为 LLM 与普罗大众的阶梯,以自由、平等的开源精神,拥抱更恢弘而辽阔的 LLM 世界。
|
||||
|
||||
## 🤝 如何贡献
|
||||
|
||||
我们欢迎任何形式的贡献!
|
||||
|
||||
- 🐛 **报告 Bug** - 发现问题请提交 Issue
|
||||
- 💡 **功能建议** - 有好想法就告诉我们
|
||||
- 📝 **内容完善** - 帮助改进教程内容
|
||||
- 🔧 **代码优化** - 提交 Pull Request
|
||||
|
||||
## 🙏 致谢
|
||||
|
||||
### 核心贡献者
|
||||
- [宋志学-项目负责人](https://github.com/KMnO4-zx) (Datawhale成员-中国矿业大学(北京))
|
||||
- [邹雨衡-项目负责人](https://github.com/logan-zou) (Datawhale成员-对外经济贸易大学)
|
||||
|
||||
### 特别感谢
|
||||
- 感谢 [@Sm1les](https://github.com/Sm1les) 对本项目的帮助与支持
|
||||
- 感谢所有为本项目做出贡献的开发者们 ❤️
|
||||
|
||||
<div align=center style="margin-top: 30px;">
|
||||
<a href="https://github.com/datawhalechina/happy-llm/graphs/contributors">
|
||||
<img src="https://contrib.rocks/image?repo=datawhalechina/happy-llm" />
|
||||
</a>
|
||||
</div>
|
||||
|
||||
## 关于 Datawhale
|
||||
|
||||
<div align='center'>
|
||||
<img src="./images/datawhale.png" alt="Datawhale" width="30%">
|
||||
<p>扫描二维码关注 Datawhale 公众号,获取更多优质开源内容</p>
|
||||
</div>
|
||||
|
||||
---
|
||||
|
||||
<div align="center">
|
||||
<p>⭐ 如果这个项目对你有帮助,请给我们一个 Star!</p>
|
||||
</div>
|
||||
|
||||
## 📜 开源协议
|
||||
|
||||
本作品采用[知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议](http://creativecommons.org/licenses/by-nc-sa/4.0/)进行许可。
|
||||
|
||||
@@ -1,8 +1,9 @@
|
||||
- 第1章 [我是第1章的标题](chapter1/chapter1)
|
||||
- 第2章 我是第2章的标题
|
||||
- [2.1 我是2.1的标题](chapter2/chapter2_1)
|
||||
- [2.2 我是2.2的标题](chapter2/chapter2_2)
|
||||
- 第3章 我是第3章的标题
|
||||
- 3.1 我是3.1的标题
|
||||
- 3.1.1 [我是3.1.1的标题](chapter3/chapter3_1/chapter3_1_1)
|
||||
- 3.1.2 [我是3.1.2的标题](chapter3/chapter3_1/chapter3_1_2)
|
||||
- [Happy-LLM](./README.md)
|
||||
- [前言](./前言.md)
|
||||
- [第一章 NLP 基础概念](./chapter1/第一章%20NLP基础概念.md)
|
||||
- [第二章 Transformer 架构](./chapter2/第二章%20Transformer架构.md)
|
||||
- [第三章 预训练语言模型](./chapter3/第三章%20预训练语言模型.md)
|
||||
- [第四章 大语言模型](./chapter4/第四章%20大语言模型.md)
|
||||
- [第五章 动手搭建大模型](./chapter5/第五章%20动手搭建大模型.md)
|
||||
- [第六章 大模型训练实践](./chapter6/第六章%20大模型训练流程实践.md)
|
||||
- [第七章 大模型应用](./chapter7/第七章%20大模型应用.md)
|
||||
@@ -9,21 +9,21 @@
|
||||
- 前馈神经网络(Feedforward Neural Network,FNN),即每一层的神经元都和上下两层的每一个神经元完全连接,如图2.1所示:
|
||||
|
||||
<div align="center">
|
||||
<img src="./figures/1-0.png" alt="图片描述" width="90%"/>
|
||||
<img src="../images/2-figures/1-0.png" alt="图片描述" width="90%"/>
|
||||
<p>图2.1 前馈神经网络</p>
|
||||
</div>
|
||||
|
||||
- 卷积神经网络(Convolutional Neural Network,CNN),即训练参数量远小于前馈神经网络的卷积层来进行特征提取和学习,如图2.2所示:
|
||||
|
||||
<div align="center">
|
||||
<img src="./figures/1-1.png" alt="图片描述" width="90%"/>
|
||||
<img src="../images/2-figures/1-1.png" alt="图片描述" width="90%"/>
|
||||
<p>图2.2 卷积神经网络</p>
|
||||
</div>
|
||||
|
||||
- 循环神经网络(Recurrent Neural Network,RNN),能够使用历史信息作为输入、包含环和自重复的网络,如图2.3所示:
|
||||
|
||||
<div align="center">
|
||||
<img src="./figures/1-2.png" alt="图片描述" width="90%"/>
|
||||
<img src="../images/2-figures/1-2.png" alt="图片描述" width="90%"/>
|
||||
<p>图2.3 循环神经网络</p>
|
||||
</div>
|
||||
|
||||
@@ -222,7 +222,7 @@ scores = F.softmax(scores.float(), dim=-1).type_as(xq)
|
||||
在原论文中,作者也通过实验证实,多头注意力计算中,每个不同的注意力头能够拟合语句中的不同信息,如图2.4所示:
|
||||
|
||||
<div align="center">
|
||||
<img src="./figures/1-3.jpeg" alt="图片描述" width="90%"/>
|
||||
<img src="../images/2-figures/1-3.jpeg" alt="图片描述" width="90%"/>
|
||||
<p>图2.4 多头注意力机制</p>
|
||||
</div>
|
||||
|
||||
@@ -346,7 +346,7 @@ Seq2Seq,即序列到序列,是一种经典 NLP 任务。具体而言,是
|
||||
Transformer 中的 Encoder,就是用于上述的编码过程;Decoder 则用于上述的解码过程。Transformer 结构,如图2.5所示:
|
||||
|
||||
<div align="center">
|
||||
<img src="./figures/2-0.jpg" alt="图片描述" width="90%"/>
|
||||
<img src="../images/2-figures/2-0.jpg" alt="图片描述" width="90%"/>
|
||||
<p>图2.5 编码器-解码器结构</p>
|
||||
</div>
|
||||
|
||||
@@ -732,7 +732,7 @@ $$
|
||||
上述编码结果,如图2.6所示:
|
||||
|
||||
<div align="center">
|
||||
<img src="./figures/3-0.png" alt="图片描述" width="90%"/>
|
||||
<img src="../images/2-figures/3-0.png" alt="图片描述" width="90%"/>
|
||||
<p>图2.6 编码结果</p>
|
||||
</div>
|
||||
|
||||
@@ -773,7 +773,7 @@ class PositionalEncoding(nn.Module):
|
||||
上述所有组件,再按照下图的 Tranfromer 结构拼接起来就是一个完整的 Transformer 模型了,如图2.7所示:
|
||||
|
||||
<div align="center">
|
||||
<img src="./figures/3-1.png" alt="图片描述" width="80%"/>
|
||||
<img src="../images/2-figures/3-1.png" alt="图片描述" width="80%"/>
|
||||
<p>图2.7 Transformer 模型结构</p>
|
||||
</div>
|
||||
|
||||
|
||||
@@ -26,7 +26,7 @@ BERT 是一个统一了多种思想的预训练模型。其所沿承的核心思
|
||||
BERT 的模型架构是取了 Transformer 的 Encoder 部分堆叠而成,其主要结构如图3.1所示:
|
||||
|
||||
<div align="center">
|
||||
<img src="./figures/1-0.png" alt="图片描述" width="100%"/>
|
||||
<img src="../images/3-figures/1-0.png" alt="图片描述" width="100%"/>
|
||||
<p>图3.1 BERT 模型结构</p>
|
||||
</div>
|
||||
|
||||
@@ -35,7 +35,7 @@ BERT 是针对于 NLU 任务打造的预训练模型,其输入一般是文本
|
||||
模型整体既是由 Embedding、Encoder 加上 prediction_heads 组成:
|
||||
|
||||
<div align="center">
|
||||
<img src="./figures/1-1.png" alt="图片描述" width="70%"/>
|
||||
<img src="../images/3-figures/1-1.png" alt="图片描述" width="70%"/>
|
||||
<p>图3.2 BERT 模型简略结构</p>
|
||||
</div>
|
||||
|
||||
@@ -44,21 +44,21 @@ BERT 是针对于 NLU 任务打造的预训练模型,其输入一般是文本
|
||||
prediction_heads 其实就是线性层加上激活函数,一般而言,最后一个线性层的输出维度和任务的类别数相等,如图3.3所示:
|
||||
|
||||
<div align="center">
|
||||
<img src="./figures/1-5.png" alt="图片描述" width="20%"/>
|
||||
<img src="../images/3-figures/1-5.png" alt="图片描述" width="20%"/>
|
||||
<p>图3.3 prediction_heads 结构</p>
|
||||
</div>
|
||||
|
||||
而每一层 Encoder Layer 都是和 Transformer 中的 Encoder Layer 结构类似的层,如图3.4所示:
|
||||
|
||||
<div align="center">
|
||||
<img src="./figures/1-2.png" alt="图片描述" width="40%"/>
|
||||
<img src="../images/3-figures/1-2.png" alt="图片描述" width="40%"/>
|
||||
<p>图3.4 Encoder Layer 结构</p>
|
||||
</div>
|
||||
|
||||
如图3.5所示,已经通过 Embedding 层映射的 hidden_states 进入核心的 attention 机制,然后通过残差连接的机制和原输入相加,再经过一层 Intermediate 层得到最终输出。Intermediate 层是 BERT 的特殊称呼,其实就是一个线性层加上激活函数:
|
||||
|
||||
<div align="center">
|
||||
<img src="./figures/1-3.png" alt="图片描述" width="40%"/>
|
||||
<img src="../images/3-figures/1-3.png" alt="图片描述" width="40%"/>
|
||||
<p>图3.5 Intermediate 结构</p>
|
||||
</div>
|
||||
|
||||
@@ -71,7 +71,7 @@ GELU 的核心思路为将随机正则的思想引入激活函数,通过输入
|
||||
BERT 的 注意力机制和 Transformer 中 Encoder 的 自注意力机制几乎完全一致,但是 BERT 将相对位置编码融合在了注意力机制中,将相对位置编码同样视为可训练的权重参数,如图3.6所示:
|
||||
|
||||
<div align="center">
|
||||
<img src="./figures/1-4.png" alt="图片描述" width="40%"/>
|
||||
<img src="../images/3-figures/1-4.png" alt="图片描述" width="40%"/>
|
||||
<p>图3.6 BERT 注意力机制结构</p>
|
||||
</div>
|
||||
|
||||
@@ -230,14 +230,14 @@ T5 的大一统思想将不同的 NLP 任务如文本分类、问答、翻译等
|
||||
BERT 采用了 Encoder-Only 结构,只包含编码器部分;而 GPT 采用了 Decoder-Only 结构,只包含解码器部分。T5 则采用了 Encoder-Decoder 结构,其中编码器和解码器都是基于 Transformer 架构设计。编码器用于处理输入文本,解码器用于生成输出文本。编码器和解码器之间通过注意力机制进行信息交互,从而实现输入文本到输出文本的转换。其主要结构如图3.7所示:
|
||||
|
||||
<div align="center">
|
||||
<img src="./figures/2-1.png" alt="图片描述" width="100%"/>
|
||||
<img src="../images/3-figures/2-1.png" alt="图片描述" width="100%"/>
|
||||
<p>图3.7 T5 模型详细结构</p>
|
||||
</div>
|
||||
|
||||
如图3.8所示,从整体来看 T5 的模型结构包括 Tokenizer 部分和 Transformer 部分。Tokenizer 部分主要负责将输入文本转换为模型可接受的输入格式,包括分词、编码等操作。Transformer 部分又分为 EncoderLayers 和 DecoderLayers 两部分,他们分别由一个个小的 Block组成,每个 Block 包含了多头注意力机制、前馈神经网络和 Norm 层。Block 的设计可以使模型更加灵活,像乐高一样可以根据任务的复杂程度和数据集的大小来调整 Block 的数量和层数。
|
||||
|
||||
<div align="center">
|
||||
<img src="./figures/2-2.png" alt="图片描述" width="70%"/>
|
||||
<img src="../images/3-figures/2-2.png" alt="图片描述" width="70%"/>
|
||||
<p>图3.8 T5 模型整体结构</p>
|
||||
</div>
|
||||
|
||||
@@ -246,14 +246,14 @@ T5 模型的 Encoder 和 Decoder 部分都是基于 Transformer 架构设计的
|
||||
和 Encoder 不一样的是,在 Decoder 中还包含了 Encoder-Decoder Attention 结构,用于捕捉输入和输出序列之间的依赖关系。这两种 Attention 结构几乎完全一致,只有在位置编码和 Mask 机制上有所不同。如图3.9所示,Encoder 和 Decoder 的结构如下:
|
||||
|
||||
<div align='center'>
|
||||
<img src="./figures/2-3.png" alt="alt text" width="50%">
|
||||
<img src="../images/3-figures/2-3.png" alt="alt text" width="50%">
|
||||
<p>图3.9 Encoder 和 Decoder</p>
|
||||
</div>
|
||||
|
||||
T5 的 Self-Attention 机制和 BERT 的 Attention 机制是一样的,都是基于 Self-Attention 机制设计的。Self-Attention 机制是一种全局依赖关系建模方法,通过计算 Query、Key 和 Value 之间的相似度来捕捉输入序列中的全局依赖关系。Encoder-Decoder Attention 仅仅在位置编码和 Mask 机制上有所不同,主要是为了区分输入和输出序列。如图3.10所示,Self-Attention 结构如下:
|
||||
|
||||
<div align='center'>
|
||||
<img src="./figures/2-4.png" alt="alt text" width="50%">
|
||||
<img src="../images/3-figures/2-4.png" alt="alt text" width="50%">
|
||||
</p>图3.10 Self-Attention 结构</p>
|
||||
</div>
|
||||
|
||||
@@ -298,7 +298,7 @@ T5通过大规模的文本数据进行预训练,然后在具体任务上进行
|
||||
我们可以通过图3.11,更加直观地理解 T5 的大一统思想:
|
||||
|
||||
<div align='center'>
|
||||
<img src="./figures/2-0.png" alt="alt text" width="90%">
|
||||
<img src="../images/3-figures/2-0.png" alt="alt text" width="90%">
|
||||
<p>图3.11 T5 的大一统思想</p>
|
||||
</div>
|
||||
|
||||
@@ -323,7 +323,7 @@ GPT,即 Generative Pre-Training Language Model,是由 OpenAI 团队于 2018
|
||||
#### (1) 模型架构——Decoder Only
|
||||
|
||||
<div align='center'>
|
||||
<img src="./figures/3-0.png" alt="alt text" width="100%">
|
||||
<img src="../images/3-figures/3-0.png" alt="alt text" width="100%">
|
||||
<p>图3.12 GPT 模型结构</p>
|
||||
</div>
|
||||
|
||||
@@ -394,7 +394,7 @@ LLaMA模型是由Meta(前Facebook)开发的一系列大型预训练语言模
|
||||
与GPT系列模型一样,LLaMA模型也是基于Decoder-Only架构的预训练语言模型。LLaMA模型的整体结构与GPT系列模型类似,只是在模型规模和预训练数据集上有所不同。如图3.13是LLaMA模型的架构示意图:
|
||||
|
||||
<div align='center'>
|
||||
<img src="./figures/3-1.png" alt="alt text" width="100%">
|
||||
<img src="../images/3-figures/3-1.png" alt="alt text" width="100%">
|
||||
<p>图3.13 LLaMA-3 模型结构</p>
|
||||
</div>
|
||||
|
||||
@@ -460,7 +460,7 @@ GLM 通过优化一个自回归空白填充任务来实现 MLM 与 CLM 思想的
|
||||
通过将 MLM 与 CLM 思想相结合,既适配逐个 token 生成的生成类任务,也迫使模型从前后两个方向学习输入文本的隐含关系从而适配了理解类任务。使用 GLM 预训练任务产出的 GLM 模型,在一定程度上展现了其超出同体量 BERT 系模型的优越性能:
|
||||
|
||||
<div align='center'>
|
||||
<img src="./figures/3-2.png" alt="alt text" width="90%">
|
||||
<img src="../images/3-figures/3-2.png" alt="alt text" width="90%">
|
||||
<p>图3.14 alt text</p>
|
||||
</div>
|
||||
|
||||
@@ -479,7 +479,7 @@ ChatGLM3-6B 发布于 23年 10月,相对于二代在语义、数学、推理
|
||||
图3.15展示了 GLM 系列模型在基准集上的表现演进:
|
||||
|
||||
<div align='center'>
|
||||
<img src="./figures/3-3.png" alt="alt text" width="90%">
|
||||
<img src="../images/3-figures/3-3.png" alt="alt text" width="90%">
|
||||
<p>图3.15 alt text</p>
|
||||
</div>
|
||||
|
||||
|
||||
@@ -96,7 +96,7 @@ LLM 的强大能力也为其带来了跨模态的强大表现。随着 LLM 的
|
||||
在上一节,我们分析了 LLM 的定义及其特有的强大能力,通过更大规模的参数和海量的训练语料获得远超传统预训练模型的涌现能力,展现出强大的上下文学习、指令遵循及逐步推理能力,带来 NLP 领域的全新变革。那么,通过什么样的步骤,我们才可以训练出一个具有涌现能力的 LLM 呢?训练一个 LLM,与训练传统的预训练模型,又有什么区别?
|
||||
|
||||
<div align='center'>
|
||||
<img src="./figures/2-0.jpg" alt="alt text" width="90%">
|
||||
<img src="../images/4-figures/2-0.jpg" alt="alt text" width="90%">
|
||||
<p>图4.1 训练 LLM 的三个阶段</p>
|
||||
</div>
|
||||
|
||||
@@ -128,7 +128,7 @@ GPT-3|96|12288|96|175B|300B
|
||||
也正因如此,分布式训练框架也成为 LLM 训练必不可少的组成部分。分布式训练框架的核心思路是数据并行和模型并行。所谓数据并行,是指训练模型的尺寸可以被单个 GPU 内存容纳,但是由于增大训练的 batch_size 会增大显存开销,无法使用较大的 batch_size 进行训练;同时,训练数据量非常大,使用单张 GPU 训练时长难以接受。
|
||||
|
||||
<div align='center'>
|
||||
<img src="./figures/2-1.jpg" alt="alt text" width="60%">
|
||||
<img src="../images/4-figures/2-1.jpg" alt="alt text" width="60%">
|
||||
<p>图4.2 模型、数据并行</p>
|
||||
</div>
|
||||
|
||||
@@ -137,7 +137,7 @@ GPT-3|96|12288|96|175B|300B
|
||||
但是,当 LLM 扩大到上百亿参数,单张 GPU 内存往往就无法存放完整的模型参数。如图4.3所示,在这种情况下,可以将模型拆分到多个 GPU 上,每个 GPU 上存放不同的层或不同的部分,从而实现模型并行。
|
||||
|
||||
<div align='center'>
|
||||
<img src="./figures/2-2.jpg" alt="alt text" width="30%">
|
||||
<img src="../images/4-figures/2-2.jpg" alt="alt text" width="30%">
|
||||
<p>图4.3 模型并行</p>
|
||||
</div>
|
||||
|
||||
@@ -297,7 +297,7 @@ RLHF,全称是 Reinforcement Learning from Human Feedback,即人类反馈强
|
||||
如图4.4所示,ChatGPT 在技术报告中将对齐分成三个阶段,后面两个阶段训练 RM 和 PPO 训练,就是 RLHF 的步骤:
|
||||
|
||||
<div align='center'>
|
||||
<img src="./figures/2-3.png" alt="alt text" width="100%">
|
||||
<img src="../images/4-figures/2-3.png" alt="alt text" width="100%">
|
||||
<p>图4.4 ChatGPT 训练三个的阶段</p>
|
||||
</div>
|
||||
|
||||
@@ -331,7 +331,7 @@ RM,Reward Model,即奖励模型。RM 是用于拟合人类偏好,来给 LL
|
||||
在具体 PPO 训练过程中,会存在四个模型。如图4.5所示,两个 LLM 和两个 RM。两个 LLM 分别是进行微调、参数更新的 actor model 和不进行参数更新的 ref model,均是从 SFT 之后的 LLM 初始化的。两个 RM 分别是进行参数更新的 critic model 和不进行参数更新的 reward model,均是从上一步训练的 RM 初始化的。
|
||||
|
||||
<div align='center'>
|
||||
<img src="./figures/2-4.jpg" alt="alt text" width="100%">
|
||||
<img src="../images/4-figures/2-4.jpg" alt="alt text" width="100%">
|
||||
<p>图4.5 PPO 训练流程</p>
|
||||
</div>
|
||||
|
||||
|
||||
@@ -1326,7 +1326,7 @@ class PretrainDataset(Dataset):
|
||||
在以上代码和图5.1可以看出,`Pretrain Dataset` 主要是将 `text` 通过 `tokenizer` 转换成 `input_id`,然后将 `input_id` 拆分成 `X` 和 `Y`,其中 `X` 为 `input_id` 的前 n-1 个元素,`Y` 为 `input_id` 的后 n-1 `个元素。loss_mask` 主要是用来标记哪些位置需要计算损失,哪些位置不需要计算损失。
|
||||
|
||||
<div align='center'>
|
||||
<img src="./images/pretrain_dataset.png" alt="alt text" width="100%">
|
||||
<img src="../images/5-images/pretrain_dataset.png" alt="alt text" width="100%">
|
||||
<p>图5.1 预训练损失函数计算</p>
|
||||
</div>
|
||||
|
||||
@@ -1413,7 +1413,7 @@ class SFTDataset(Dataset):
|
||||
在 SFT 阶段,这里使用的是多轮对话数据集,所以就需要区分哪些位置需要计算损失,哪些位置不需要计算损失。在上面的代码中,我使用了一个 `generate_loss_mask` 函数来生成 `loss_mask`。这个函数主要是用来生成 `loss_mask`,其中 `loss_mask` 的生成规则是:当遇到 `|<im_start|>assistant\n` 时,就开始计算损失,直到遇到 `|<im_end|>` 为止。这样就可以保证我们的模型在 SFT 阶段只计算当前轮的对话内容,如图5.2所示。
|
||||
|
||||
<div align='center'>
|
||||
<img src="./images/sftdataset.png" alt="alt text" width="90%">
|
||||
<img src="../images/5-images/sftdataset.png" alt="alt text" width="90%">
|
||||
<p>图5.2 SFT 损失函数计算</p>
|
||||
</div>
|
||||
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
Transformers 是由 Hugging Face 开发的 NLP 框架,通过模块化设计实现了对 BERT、GPT、LLaMA、T5、ViT 等上百种主流模型架构的统一支持。通过使用 Transformers,开发者无需重复实现基础网络结构,通过 AutoModel 类即可一键加载任意预训练,图6.1 为 Hugging Face Transformers 课程首页:
|
||||
|
||||
<div align='center'>
|
||||
<img src="./images/1-1.png" alt="alt text" width="90%">
|
||||
<img src="../images/6-images/1-1.png" alt="alt text" width="90%">
|
||||
<p>图6.1 Hugging Face Transformers</p>
|
||||
</div>
|
||||
|
||||
@@ -24,7 +24,7 @@ Transformers 是由 Hugging Face 开发的 NLP 框架,通过模块化设计实
|
||||
对 LLM 时代的 NLP 研究者更为重要的是,HuggingFace 基于 Transformers 框架搭建了其庞大的 AI 社区,开放了数亿个预训练模型参数、25万+不同类型数据集,通过 Transformers、Dataset、Evaluate 等多个框架实现对预训练模型、数据集及评估函数的集成,从而帮助开发者可以便捷地使用任一预训练模型,在开源模型及数据集的基础上便捷地实现个人模型的开发与应用。
|
||||
|
||||
<div align='center'>
|
||||
<img src="./images/1-2.png" alt="alt text" width="90%">
|
||||
<img src="../images/6-images/1-2.png" alt="alt text" width="90%">
|
||||
<p>图6.2 Hugging Face Transformers 模型社区</p>
|
||||
</div>
|
||||
|
||||
@@ -35,14 +35,14 @@ Transformers 是由 Hugging Face 开发的 NLP 框架,通过模块化设计实
|
||||
我们可以使用 transformers 的 AutoModel 类来直接初始化已经实现好的模型。对于任意预训练模型,其参数中都包含有模型的配置信息。如果是想要从头训练一个 LLM,可以使用一个已有的模型架构来直接初始化。这里,我们以 [Qwen-2.5-1.5B](https://huggingface.co/Qwen/Qwen2.5-1.5B/tree/main)的模型架构为例:
|
||||
|
||||
<div align='center'>
|
||||
<img src="./images/1-3.png" alt="alt text" width="90%">
|
||||
<img src="../images/6-images/1-3.png" alt="alt text" width="90%">
|
||||
<p>图6.3 Qwen-2.5-1.5B</p>
|
||||
</div>
|
||||
|
||||
该界面即为 HuggingFace 社区中的 Qwen-2.5-1.5B 模型参数,其中的 `config.json` 文件即是模型的配置信息,包括了模型的架构、隐藏层大小、模型层数等,如图6.4所示:
|
||||
|
||||
<div align='center'>
|
||||
<img src="./images/1-4.png" alt="alt text" width="90%">
|
||||
<img src="../images/6-images/1-4.png" alt="alt text" width="90%">
|
||||
<p>图6.4 Qwen-2.5-1.5B config.json 文件</p>
|
||||
</div>
|
||||
|
||||
@@ -59,7 +59,7 @@ os.system('huggingface-cli download --resume-download Qwen/Qwen2.5-1.5B --local-
|
||||
如图6.5,此处的 “Qwen/Qwen2.5-1.5B”即为要下载模型的标识符,对于其他模型,可以直接复制 HuggingFace 上的模型名即可:
|
||||
|
||||
<div align='center'>
|
||||
<img src="./images/1-5.png" alt="alt text" width="90%">
|
||||
<img src="../images/6-images/1-5.png" alt="alt text" width="90%">
|
||||
<p>图6.5 模型下载标识</p>
|
||||
</div>
|
||||
|
||||
@@ -87,7 +87,7 @@ model = AutoModelForCausalLM.from_config(config,trust_remote_code=True)
|
||||
由于 LLM 一般都是 CausalLM 架构,此处使用了 AutoModelForCausalLM 类进行加载。如果是用于分类任务训练,可使用 AutoModelForSequenceClassification 类来加载。查看该 model,图6.6可以看到其架构和定义的配置文件相同:
|
||||
|
||||
<div align='center'>
|
||||
<img src="./images/1-6.png" alt="alt text" width="70%">
|
||||
<img src="../images/6-images/1-6.png" alt="alt text" width="70%">
|
||||
<p>图6.6 模型结构输出结果</p>
|
||||
</div>
|
||||
|
||||
@@ -130,7 +130,7 @@ ds["train"][0]
|
||||
```
|
||||
|
||||
<div align='center'>
|
||||
<img src="./images/1-7.png" alt="alt text" width="100%">
|
||||
<img src="../images/6-images/1-7.png" alt="alt text" width="100%">
|
||||
<p>图6.7 数据集展示</p>
|
||||
</div>
|
||||
|
||||
@@ -788,7 +788,7 @@ trainer.save_model()
|
||||
具体而言,其在预训练模型每层中插入用于下游任务的参数,即 Adapter 模块,在微调时冻结模型主体,仅训练特定于任务的参数,如图6.8所示。
|
||||
|
||||
<div align='center'>
|
||||
<img src="./images/3-1.png" alt="alt text" width="90%">
|
||||
<img src="../images/6-images/3-1.png" alt="alt text" width="90%">
|
||||
<p>图6.8 Adapt Tuning</p>
|
||||
</div>
|
||||
|
||||
@@ -840,7 +840,7 @@ $$h = W_0 x + \Delta W x = W_0 x + B A x$$
|
||||
训练思路如图6.9所示:
|
||||
|
||||
<div align='center'>
|
||||
<img src="./images/3-2.jpg" alt="alt text" width="90%">
|
||||
<img src="../images/6-images/3-2.jpg" alt="alt text" width="90%">
|
||||
<p>图6.9 LoRA</p>
|
||||
</div>
|
||||
|
||||
|
||||
@@ -47,7 +47,7 @@
|
||||
Open LLM Leaderboard 为由 Hugging Face 提供的开放式榜单,汇集了多个开源大模型的评测结果,帮助用户了解不同模型在各种任务上的表现。该榜单通过多个标准化测试集来评估模型的性能,并通过持续更新的方式反映最新的技术进展,为研究者和开发者提供了高价值的对比参考,如图7.1所示。
|
||||
|
||||
<div align='center'>
|
||||
<img src="./images/7-1-Open%20LLM%20Leaderboard.png" alt="alt text" width="90%">
|
||||
<img src="../images/7-images/7-1-Open%20LLM%20Leaderboard.png" alt="alt text" width="90%">
|
||||
<p>图 7.1 Open LLM Leaderboard</p>
|
||||
</div>
|
||||
|
||||
@@ -56,7 +56,7 @@ Open LLM Leaderboard 为由 Hugging Face 提供的开放式榜单,汇集了多
|
||||
由lmsys提供的聊天机器人评测榜单,通过多维度的评估,展示各类大模型在对话任务中的能力。该榜单采用真实用户与模型交互的方式来评测对话质量,重点考察模型的自然语言生成能力、上下文理解能力以及用户满意度,是当前评估聊天机器人性能的重要工具,如图7.2所示。
|
||||
|
||||
<div align='center'>
|
||||
<img src="./images/7-1-lmsys%20Chatbot%20Arena%20Leaderboard.png" alt="alt text" width="90%">
|
||||
<img src="../images/7-images/7-1-lmsys%20Chatbot%20Arena%20Leaderboard.png" alt="alt text" width="90%">
|
||||
<p>图7.2 Lmsys Chatbot Arena Leaderboard</p>
|
||||
</div>
|
||||
|
||||
@@ -65,7 +65,7 @@ Open LLM Leaderboard 为由 Hugging Face 提供的开放式榜单,汇集了多
|
||||
OpenCompass 是国内的评测榜单,针对大模型在多种语言和任务上的表现进行评估,提供了中国市场特定应用的参考。该榜单结合了中文语言理解和多语言能力的测试,以适应本地化需求,并特别关注大模型在中文语境下的准确性、鲁棒性和适应性,为国内企业和研究者选择合适的模型提供了重要参考。
|
||||
|
||||
<div align='center'>
|
||||
<img src="./images/7-1-opencompass.png" alt="alt text" width="90%">
|
||||
<img src="../images/7-images/7-1-opencompass.png" alt="alt text" width="90%">
|
||||
<p>图7.3 OpenCompass</p>
|
||||
</div>
|
||||
|
||||
@@ -84,7 +84,7 @@ OpenCompass 是国内的评测榜单,针对大模型在多种语言和任务
|
||||
- 医疗榜:基于MedBench评测集,评估大语言模型在医学知识问答、安全伦理理解等方面的表现。由上海人工智能实验室提供。
|
||||
|
||||
<div align='center'>
|
||||
<img src="./images/7-1-垂直领域榜单.png" alt="alt text" width="90%">
|
||||
<img src="../images/7-images/7-1-垂直领域榜单.png" alt="alt text" width="90%">
|
||||
<p>图7.4 垂直领域榜单</p>
|
||||
</div>
|
||||
|
||||
@@ -118,7 +118,7 @@ RAG的基本结构有哪些呢?
|
||||
上述也就是 TinyRAG 的所有模块内容,如图7.5所示。
|
||||
|
||||
<div align='center'>
|
||||
<img src="./images/7-2-tinyrag.png" alt="alt text" width="90%">
|
||||
<img src="../images/7-images/7-2-tinyrag.png" alt="alt text" width="90%">
|
||||
<p>图7.5 TinyRAG 项目结构</p>
|
||||
</div>
|
||||
|
||||
@@ -131,7 +131,7 @@ RAG的基本结构有哪些呢?
|
||||
如下图7.6所示的流程图,图片出处 ***[Retrieval-Augmented Generation for Large Language Models: A Survey](https://arxiv.org/pdf/2312.10997.pdf)***
|
||||
|
||||
<div align='center'>
|
||||
<img src="./images/7-2-rag.png" alt="alt text" width="90%">
|
||||
<img src="../images/7-images/7-2-rag.png" alt="alt text" width="90%">
|
||||
<p>图7.6 RAG 流程图</p>
|
||||
</div>
|
||||
|
||||
@@ -403,7 +403,7 @@ print(chat.chat(question, [], content))
|
||||
传统的LLM像一个知识渊博但只能纸上谈兵的图书馆员,而 LLM Agent 则更像一个全能的私人助理,不仅懂得多,还能跑腿办事,甚至能主动思考最优方案。
|
||||
|
||||
<div align='center'>
|
||||
<img src="./images/7-3-Agent工作原理.png" alt="alt text" width="90%">
|
||||
<img src="../images/7-images/7-3-Agent工作原理.png" alt="alt text" width="90%">
|
||||
<p>图7.7 Agent 工作原理</p>
|
||||
</div>
|
||||
|
||||
@@ -440,7 +440,7 @@ LLM Agent 通过将大型语言模型的强大语言理解和生成能力与规
|
||||
最终的实现效果如图7.8所示:
|
||||
|
||||
<div align='center'>
|
||||
<img src="./images/7-3-tinyagent-example.png" style="width: 100%;">
|
||||
<img src="../images/7-images/7-3-tinyagent-example.png" style="width: 100%;">
|
||||
<p>图7.8 效果示意图</p>
|
||||
</div>
|
||||
|
||||
@@ -633,7 +633,7 @@ Agent 的工作流程如下:
|
||||
如图7.9所示,Agent 调用工具流程:
|
||||
|
||||
<div align='center'>
|
||||
<img src="./images/7-3-Tiny_Agent.jpg" alt="alt text" width="80%">
|
||||
<img src="../images/7-images/7-3-Tiny_Agent.jpg" alt="alt text" width="80%">
|
||||
<p>图7.9 Agent 工作流程</p>
|
||||
</div>
|
||||
|
||||
|
||||
|
Before Width: | Height: | Size: 212 KiB After Width: | Height: | Size: 212 KiB |
|
Before Width: | Height: | Size: 149 KiB After Width: | Height: | Size: 149 KiB |
|
Before Width: | Height: | Size: 191 KiB After Width: | Height: | Size: 191 KiB |
|
Before Width: | Height: | Size: 90 KiB After Width: | Height: | Size: 90 KiB |
|
Before Width: | Height: | Size: 62 KiB After Width: | Height: | Size: 62 KiB |
|
Before Width: | Height: | Size: 112 KiB After Width: | Height: | Size: 112 KiB |
|
Before Width: | Height: | Size: 101 KiB After Width: | Height: | Size: 101 KiB |
|
Before Width: | Height: | Size: 174 KiB After Width: | Height: | Size: 174 KiB |
|
Before Width: | Height: | Size: 140 KiB After Width: | Height: | Size: 140 KiB |
|
Before Width: | Height: | Size: 101 KiB After Width: | Height: | Size: 101 KiB |
|
Before Width: | Height: | Size: 44 KiB After Width: | Height: | Size: 44 KiB |
|
Before Width: | Height: | Size: 110 KiB After Width: | Height: | Size: 110 KiB |
|
Before Width: | Height: | Size: 30 KiB After Width: | Height: | Size: 30 KiB |
|
Before Width: | Height: | Size: 62 KiB After Width: | Height: | Size: 62 KiB |
|
Before Width: | Height: | Size: 640 KiB After Width: | Height: | Size: 640 KiB |
|
Before Width: | Height: | Size: 195 KiB After Width: | Height: | Size: 195 KiB |
|
Before Width: | Height: | Size: 140 KiB After Width: | Height: | Size: 140 KiB |
|
Before Width: | Height: | Size: 126 KiB After Width: | Height: | Size: 126 KiB |
|
Before Width: | Height: | Size: 172 KiB After Width: | Height: | Size: 172 KiB |
|
Before Width: | Height: | Size: 907 KiB After Width: | Height: | Size: 907 KiB |
|
Before Width: | Height: | Size: 168 KiB After Width: | Height: | Size: 168 KiB |
|
Before Width: | Height: | Size: 122 KiB After Width: | Height: | Size: 122 KiB |
|
Before Width: | Height: | Size: 45 KiB After Width: | Height: | Size: 45 KiB |
|
Before Width: | Height: | Size: 22 KiB After Width: | Height: | Size: 22 KiB |
|
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 15 KiB |
|
Before Width: | Height: | Size: 178 KiB After Width: | Height: | Size: 178 KiB |
|
Before Width: | Height: | Size: 31 KiB After Width: | Height: | Size: 31 KiB |
BIN
docs/images/5-images/pretrain_dataset.png
Normal file
|
After Width: | Height: | Size: 23 KiB |
BIN
docs/images/5-images/sftdataset.png
Normal file
|
After Width: | Height: | Size: 25 KiB |
BIN
docs/images/6-images/1-1.png
Normal file
|
After Width: | Height: | Size: 345 KiB |
BIN
docs/images/6-images/1-2.png
Normal file
|
After Width: | Height: | Size: 638 KiB |
BIN
docs/images/6-images/1-3.png
Normal file
|
After Width: | Height: | Size: 244 KiB |
BIN
docs/images/6-images/1-4.png
Normal file
|
After Width: | Height: | Size: 216 KiB |
BIN
docs/images/6-images/1-5.png
Normal file
|
After Width: | Height: | Size: 345 KiB |
BIN
docs/images/6-images/1-6.png
Normal file
|
After Width: | Height: | Size: 109 KiB |
BIN
docs/images/6-images/1-7.png
Normal file
|
After Width: | Height: | Size: 490 KiB |
BIN
docs/images/6-images/3-1.png
Normal file
|
After Width: | Height: | Size: 193 KiB |
BIN
docs/images/6-images/3-2.jpg
Normal file
|
After Width: | Height: | Size: 59 KiB |
BIN
docs/images/6-images/7.1-1.png
Normal file
|
After Width: | Height: | Size: 21 KiB |
BIN
docs/images/7-images/7-1-Open LLM Leaderboard.png
Normal file
|
After Width: | Height: | Size: 178 KiB |
BIN
docs/images/7-images/7-1-lmsys Chatbot Arena Leaderboard.png
Normal file
|
After Width: | Height: | Size: 206 KiB |
BIN
docs/images/7-images/7-1-opencompass.png
Normal file
|
After Width: | Height: | Size: 205 KiB |
BIN
docs/images/7-images/7-1-垂直领域榜单.png
Normal file
|
After Width: | Height: | Size: 265 KiB |
BIN
docs/images/7-images/7-2-rag.png
Normal file
|
After Width: | Height: | Size: 400 KiB |
BIN
docs/images/7-images/7-2-tinyrag.png
Normal file
|
After Width: | Height: | Size: 566 KiB |
BIN
docs/images/7-images/7-3-Agent工作原理.png
Normal file
|
After Width: | Height: | Size: 435 KiB |
BIN
docs/images/7-images/7-3-Tiny_Agent.jpg
Normal file
|
After Width: | Height: | Size: 101 KiB |
BIN
docs/images/7-images/7-3-tinyagent-example.png
Normal file
|
After Width: | Height: | Size: 759 KiB |
BIN
docs/images/datawhale.png
Normal file
|
After Width: | Height: | Size: 113 KiB |
BIN
docs/images/head.jpg
Normal file
|
After Width: | Height: | Size: 164 KiB |
57
docs/index.html
Normal file
@@ -0,0 +1,57 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>Happy-LLM</title>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
|
||||
<meta name="description" content="Description">
|
||||
<meta name="viewport"
|
||||
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
|
||||
<link rel="stylesheet" href="//cdn.jsdelivr.net/npm/docsify@latest/lib/themes/vue.css">
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div id="app"></div>
|
||||
<script src="//cdn.jsdelivr.net/npm/mermaid@8.0.0-rc.8/dist/mermaid.min.js"></script>
|
||||
<script>
|
||||
window.$docsify = {
|
||||
name: 'Happy-LLM',
|
||||
repo: 'https://github.com/datawhalechina/happy-llm',
|
||||
loadSidebar: true,
|
||||
auto2top: true,
|
||||
subMaxLevel: 2,
|
||||
relativePath: false, // 启用相对路径支持
|
||||
alias: {
|
||||
'/.*/_sidebar.md': '/_sidebar.md'
|
||||
},
|
||||
pagination: {
|
||||
previousText: '上一章节',
|
||||
nextText: '下一章节',
|
||||
},
|
||||
count: {
|
||||
countable: true,
|
||||
fontsize: '0.9em',
|
||||
color: 'rgb(90,90,90)',
|
||||
language: 'chinese'
|
||||
}
|
||||
}
|
||||
</script>
|
||||
<!-- Put them above docsify.min.js -->
|
||||
<script src="//cdn.jsdelivr.net/npm/docsify@latest/lib/docsify.min.js"></script>
|
||||
<!-- code render-->
|
||||
<script src="//cdn.jsdelivr.net/npm/prismjs@latest/components/prism-bash.js"></script>
|
||||
<script src="//cdn.jsdelivr.net/npm/prismjs@latest/components/prism-python.js"></script>
|
||||
<script src="//cdn.jsdelivr.net/npm/docsify-pagination@latest/dist/docsify-pagination.min.js"></script>
|
||||
<script src="//cdn.jsdelivr.net/npm/docsify-copy-code"></script>
|
||||
|
||||
<script src="https://cdn.jsdelivr.net/npm/katex@latest/dist/katex.min.js"></script>
|
||||
<link rel="stylesheet" href="//cdn.jsdelivr.net/npm/katex@latest/dist/katex.min.css" />
|
||||
<script src="https://cdn.jsdelivr.net/npm/marked@3"></script>
|
||||
<!-- CDN files for docsify-katex -->
|
||||
<script src="//cdn.jsdelivr.net/npm/docsify-katex@latest/dist/docsify-katex.js"></script>
|
||||
<!-- 字数统计 -->
|
||||
<script src="//unpkg.com/docsify-count/dist/countable.js"></script>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
25
docs/前言.md
Normal file
@@ -0,0 +1,25 @@
|
||||
# 前言
|
||||
|
||||
2022年底,ChatGPT 的横空出世改变了人们对人工智能的认知,也给自然语言处理(Natural Language Process,NLP)领域带来了阶段性的变革,以 GPT 系列模型为代表的大语言模型(Large Language Model,LLM)成为 NLP 乃至人工智能领域的研究主流。自 2023年至今,LLM 始终是人工智能领域的核心话题,引发了一轮又一轮的科技浪潮。
|
||||
|
||||
LLM 其实是 NLP 领域经典研究方法预训练语言模型(Pretrain Langguage Model,PLM)的一种衍生成果。NLP 领域聚焦于人类书写的自然语言文本的处理、理解和生成,从诞生至今经历了符号主义阶段、统计学习阶段、深度学习阶段、预训练模型阶段到而今大模型阶段的多次变革。以 GPT、BERT 为代表的 PLM 是上一阶段 NLP 领域的核心研究成果,以注意力机制为模型架构,通过预训练-微调的阶段思想通过在海量无监督文本上进行自监督预训练,实现了强大的自然语言理解能力。但是,传统的 PLM 仍然依赖于一定量有监督数据进行下游任务微调,且在自然语言生成任务上性能还不尽如人意,NLP 系统的性能距离人们所期待的通用人工智能还有不小的差距。
|
||||
|
||||
LLM 是在 PLM 的基础上,通过大量扩大模型参数、预训练数据规模,并引入指令微调、人类反馈强化学习等手段实现的突破性成果。相较于传统 PLM,LLM 具备涌现能力,具有强大的上下文学习能力、指令理解能力和文本生成能力。在大模型阶段,NLP 研究者可以一定程度抛弃大量的监督数据标注工作,通过提供少量监督示例,LLM 即能在指定下游任务上达到媲美大规模微调 PLM 的性能。同时,强大的指令理解能力与文本生成能力使 LLM 能够直接、高效、准确地响应用户指令,从而真正向通用人工智能的目标逼近。
|
||||
|
||||
LLM 的突破性进展激发了 NLP 领域乃至整个人工智能领域的研究热度,海内外高校、研究院、大厂乃至众多传统领域企业都投入到 LLM 研究的浪潮中。自 2023年至今,LLM 阶段性成果层出不穷,模型性能不断刷新上限,从一开始的 ChatGPT,到 GPT-4,再到以 DeepSeek-R1 为代表的推理大模型、以 Qwen-VL 为代表的多模态大模型等更强大、更定制化的模型,LLM 应用也不断涌现出能够提升实际生产力、赋能用户实际生活的创新应用,从”百模大战“到”Agent 元年“,LLM 基座研究或许已趋向稳定的格局,LLM 的研究始终方兴未艾。可以肯定的是,在并不遥远的未来,LLM 及以 LLM 为基础的应用一定会成为人们生活中的基础设施,与每个人的生活、学习、工作密不可分。
|
||||
|
||||
在这样的背景下,深入理解、掌握 LLM 原理,能够动手应用、训练任意一个 LLM 的能力,对每一位 NLP 研究者乃至其他领域的 AI 研究者至关重要。我们在 2023年底分别创建了 self-llm(开源大模型食用指南:https://github.com/datawhalechina/self-llm )、llm-universe(动手学大模型应用开发:https://github.com/datawhalechina/llm-universe )两个原创开源大模型教程,前者旨在为开发者提供一站式开源 LLM 部署、推理、微调的使用教程,后者旨在指导开发者从零开始搭建自己的 LLM 应用。两个教程都帮助到了广泛的国内外开发者,也获得了众多开发者的支持和认可,在学习者的反馈中,我们发现目前还缺乏一个从零开始讲解 LLM 原理、并引导学习者亲手搭建、训练 LLM 的完整教程。
|
||||
|
||||
鉴于此,我们编写了这本结合 LLM 原理及实战的教程。本书将从 NLP 的基本研究方法出发,根据 LLM 的思路及原理逐层深入,依次为读者剖析 LLM 的架构基础和训练过程。同时,我们会结合目前 LLM 领域最主流的代码框架,演练如何亲手搭建、训练一个 LLM,期以实现授之以鱼,更授之以渔。希望读者能从这本书开始走入 LLM 的浩瀚世界,探索 LLM 的无尽可能。
|
||||
|
||||
## 写给读者的建议
|
||||
|
||||
本书包含 LLM 的理论基础、原理介绍和项目实战,全书包括 LLM 及 NLP 的核心思路剖析、公式解析与代码实战,旨在帮助开发者深入理解并掌握 LLM 的基本原理与应用。因此,本书适合大学生、研究人员、LLM 爱好者阅读。在阅读本书之前,你需要具备一定的编程经验,尤其是要对 Python 编程语言有一定的了解。同时,你最好具备深度学习的相关知识,并了解 NLP 领域的相关概念和术语,以便更轻松地阅读本书。
|
||||
|
||||
本书分为两部分——基础知识与实战应用。第1章~第4章是基础知识部分,从浅入深介绍 LLM 的基本原理。其中,第1章简单介绍 NLP 的基本任务和发展,为非 NLP 领域研究者提供参考;第2章介绍 LLM 的基本架构——Transformer,包括原理介绍及代码实现,作为 LLM 最重要的理论基础;第3章整体介绍经典的 PLM,包括 Encoder-Only、Encoder-Decoder 和 Decoder-Only 三种架构,也同时介绍了当前一些主流 LLM 的架构和思想;第4章则正式进入 LLM 部分,详细介绍 LLM 的特点、能力和整体训练过程。第5章~第7章是实战应用部分,将逐步带领读者深入 LLM 的底层细节。其中,第5章将带领读者基于 PyTorch 层亲手搭建一个 LLM,并实现预训练、有监督微调的全流程;第6章将引入目前业界主流的 LLM 训练框架 Transformers,带领读者基于该框架快速、高效地实现 LLM 训练过程;第7章则将介绍 基于 LLM 的各种应用,补全读者对 LLM 体系的认知,包括 LLM 的评测、检索增强生产(Retrieval-Augmented Generation,RAG)、智能体(Agent)的思想和简单实现。你可以根据个人兴趣和需求,选择性地阅读相关章节。
|
||||
|
||||
在阅读本书的过程中,建议你将理论和实际相结合。LLM 是一个快速发展、注重实践的领域,我们建议你多投入实战,复现本书提供的各种代码,同时积极参加 LLM 相关的项目与比赛,真正投入到 LLM 开发的浪潮中。我们鼓励你关注 Datawhale 及其他 LLM 相关开源社区,当遇到问题时,你可以随时在 Datawhale 社区提问。Datawhale 也会始终跟进 LLM 及其他人工智能技术的发展,欢迎你关注或加入到 Datawhale 社区的共建中。
|
||||
|
||||
最后,欢迎每一位读者在阅读完本书后加入到 LLM 开发者的行列。作为国内 AI 开源社区,我们希望充分聚集共创者,一起丰富这个开源 LLM 的世界,打造更多、更全面特色 LLM 的教程。星火点点,汇聚成海。我们希望成为 LLM 与普罗大众的阶梯,以自由、平等的开源精神,拥抱更恢弘而辽阔的 LLM 世界。
|
||||
|
||||
感谢你选择本书,祝你阅读愉快!
|
||||