docs: 更新文档中的图片链接为绝对路径

将所有文档中的相对图片路径替换为完整的GitHub raw链接,确保图片在文档中能够正确显示
This commit is contained in:
KMnO4-zx
2025-06-17 17:07:09 +08:00
parent 6dd4815b1e
commit 1f46fc1dd5
6 changed files with 48 additions and 48 deletions

View File

@@ -9,21 +9,21 @@
- 前馈神经网络Feedforward Neural NetworkFNN即每一层的神经元都和上下两层的每一个神经元完全连接如图2.1所示: - 前馈神经网络Feedforward Neural NetworkFNN即每一层的神经元都和上下两层的每一个神经元完全连接如图2.1所示:
<div align="center"> <div align="center">
<img src="../images/2-figures/1-0.png" alt="图片描述" width="90%"/> <img src="https://raw.githubusercontent.com/datawhalechina/happy-llm/main/docs/images/2-figures/1-0.png" alt="图片描述" width="90%"/>
<p>图2.1 前馈神经网络</p> <p>图2.1 前馈神经网络</p>
</div> </div>
- 卷积神经网络Convolutional Neural NetworkCNN即训练参数量远小于前馈神经网络的卷积层来进行特征提取和学习如图2.2所示: - 卷积神经网络Convolutional Neural NetworkCNN即训练参数量远小于前馈神经网络的卷积层来进行特征提取和学习如图2.2所示:
<div align="center"> <div align="center">
<img src="../images/2-figures/1-1.png" alt="图片描述" width="90%"/> <img src="https://raw.githubusercontent.com/datawhalechina/happy-llm/main/docs/images/2-figures/1-1.png" alt="图片描述" width="90%"/>
<p>图2.2 卷积神经网络</p> <p>图2.2 卷积神经网络</p>
</div> </div>
- 循环神经网络Recurrent Neural NetworkRNN能够使用历史信息作为输入、包含环和自重复的网络如图2.3所示: - 循环神经网络Recurrent Neural NetworkRNN能够使用历史信息作为输入、包含环和自重复的网络如图2.3所示:
<div align="center"> <div align="center">
<img src="../images/2-figures/1-2.png" alt="图片描述" width="90%"/> <img src="https://raw.githubusercontent.com/datawhalechina/happy-llm/main/docs/images/2-figures/1-2.png" alt="图片描述" width="90%"/>
<p>图2.3 循环神经网络</p> <p>图2.3 循环神经网络</p>
</div> </div>
@@ -222,7 +222,7 @@ scores = F.softmax(scores.float(), dim=-1).type_as(xq)
在原论文中作者也通过实验证实多头注意力计算中每个不同的注意力头能够拟合语句中的不同信息如图2.4所示: 在原论文中作者也通过实验证实多头注意力计算中每个不同的注意力头能够拟合语句中的不同信息如图2.4所示:
<div align="center"> <div align="center">
<img src="../images/2-figures/1-3.jpeg" alt="图片描述" width="90%"/> <img src="https://raw.githubusercontent.com/datawhalechina/happy-llm/main/docs/images/2-figures/1-3.jpeg" alt="图片描述" width="90%"/>
<p>图2.4 多头注意力机制</p> <p>图2.4 多头注意力机制</p>
</div> </div>
@@ -346,7 +346,7 @@ Seq2Seq即序列到序列是一种经典 NLP 任务。具体而言,是
Transformer 中的 Encoder就是用于上述的编码过程Decoder 则用于上述的解码过程。Transformer 结构如图2.5所示: Transformer 中的 Encoder就是用于上述的编码过程Decoder 则用于上述的解码过程。Transformer 结构如图2.5所示:
<div align="center"> <div align="center">
<img src="../images/2-figures/2-0.jpg" alt="图片描述" width="90%"/> <img src="https://raw.githubusercontent.com/datawhalechina/happy-llm/main/docs/images/2-figures/2-0.jpg" alt="图片描述" width="90%"/>
<p>图2.5 编码器-解码器结构</p> <p>图2.5 编码器-解码器结构</p>
</div> </div>
@@ -732,7 +732,7 @@ $$
上述编码结果如图2.6所示: 上述编码结果如图2.6所示:
<div align="center"> <div align="center">
<img src="../images/2-figures/3-0.png" alt="图片描述" width="90%"/> <img src="https://raw.githubusercontent.com/datawhalechina/happy-llm/main/docs/images/2-figures/3-0.png" alt="图片描述" width="90%"/>
<p>图2.6 编码结果</p> <p>图2.6 编码结果</p>
</div> </div>
@@ -773,7 +773,7 @@ class PositionalEncoding(nn.Module):
上述所有组件,再按照下图的 Tranfromer 结构拼接起来就是一个完整的 Transformer 模型了如图2.7所示: 上述所有组件,再按照下图的 Tranfromer 结构拼接起来就是一个完整的 Transformer 模型了如图2.7所示:
<div align="center"> <div align="center">
<img src="../images/2-figures/3-1.png" alt="图片描述" width="80%"/> <img src="https://raw.githubusercontent.com/datawhalechina/happy-llm/main/docs/images/2-figures/3-1.png" alt="图片描述" width="80%"/>
<p>图2.7 Transformer 模型结构</p> <p>图2.7 Transformer 模型结构</p>
</div> </div>

View File

@@ -26,7 +26,7 @@ BERT 是一个统一了多种思想的预训练模型。其所沿承的核心思
BERT 的模型架构是取了 Transformer 的 Encoder 部分堆叠而成其主要结构如图3.1所示: BERT 的模型架构是取了 Transformer 的 Encoder 部分堆叠而成其主要结构如图3.1所示:
<div align="center"> <div align="center">
<img src="../images/3-figures/1-0.png" alt="图片描述" width="100%"/> <img src="https://raw.githubusercontent.com/datawhalechina/happy-llm/main/docs/images/3-figures/1-0.png" alt="图片描述" width="100%"/>
<p>图3.1 BERT 模型结构</p> <p>图3.1 BERT 模型结构</p>
</div> </div>
@@ -35,7 +35,7 @@ BERT 是针对于 NLU 任务打造的预训练模型,其输入一般是文本
模型整体既是由 Embedding、Encoder 加上 prediction_heads 组成: 模型整体既是由 Embedding、Encoder 加上 prediction_heads 组成:
<div align="center"> <div align="center">
<img src="../images/3-figures/1-1.png" alt="图片描述" width="70%"/> <img src="https://raw.githubusercontent.com/datawhalechina/happy-llm/main/docs/images/3-figures/1-1.png" alt="图片描述" width="70%"/>
<p>图3.2 BERT 模型简略结构</p> <p>图3.2 BERT 模型简略结构</p>
</div> </div>
@@ -44,21 +44,21 @@ BERT 是针对于 NLU 任务打造的预训练模型,其输入一般是文本
prediction_heads 其实就是线性层加上激活函数一般而言最后一个线性层的输出维度和任务的类别数相等如图3.3所示: prediction_heads 其实就是线性层加上激活函数一般而言最后一个线性层的输出维度和任务的类别数相等如图3.3所示:
<div align="center"> <div align="center">
<img src="../images/3-figures/1-5.png" alt="图片描述" width="20%"/> <img src="https://raw.githubusercontent.com/datawhalechina/happy-llm/main/docs/images/3-figures/1-5.png" alt="图片描述" width="20%"/>
<p>图3.3 prediction_heads 结构</p> <p>图3.3 prediction_heads 结构</p>
</div> </div>
而每一层 Encoder Layer 都是和 Transformer 中的 Encoder Layer 结构类似的层如图3.4所示: 而每一层 Encoder Layer 都是和 Transformer 中的 Encoder Layer 结构类似的层如图3.4所示:
<div align="center"> <div align="center">
<img src="../images/3-figures/1-2.png" alt="图片描述" width="40%"/> <img src="https://raw.githubusercontent.com/datawhalechina/happy-llm/main/docs/images/3-figures/1-2.png" alt="图片描述" width="40%"/>
<p>图3.4 Encoder Layer 结构</p> <p>图3.4 Encoder Layer 结构</p>
</div> </div>
如图3.5所示,已经通过 Embedding 层映射的 hidden_states 进入核心的 attention 机制,然后通过残差连接的机制和原输入相加,再经过一层 Intermediate 层得到最终输出。Intermediate 层是 BERT 的特殊称呼,其实就是一个线性层加上激活函数: 如图3.5所示,已经通过 Embedding 层映射的 hidden_states 进入核心的 attention 机制,然后通过残差连接的机制和原输入相加,再经过一层 Intermediate 层得到最终输出。Intermediate 层是 BERT 的特殊称呼,其实就是一个线性层加上激活函数:
<div align="center"> <div align="center">
<img src="../images/3-figures/1-3.png" alt="图片描述" width="40%"/> <img src="https://raw.githubusercontent.com/datawhalechina/happy-llm/main/docs/images/3-figures/1-3.png" alt="图片描述" width="40%"/>
<p>图3.5 Intermediate 结构</p> <p>图3.5 Intermediate 结构</p>
</div> </div>
@@ -71,7 +71,7 @@ GELU 的核心思路为将随机正则的思想引入激活函数,通过输入
BERT 的 注意力机制和 Transformer 中 Encoder 的 自注意力机制几乎完全一致,但是 BERT 将相对位置编码融合在了注意力机制中将相对位置编码同样视为可训练的权重参数如图3.6所示: BERT 的 注意力机制和 Transformer 中 Encoder 的 自注意力机制几乎完全一致,但是 BERT 将相对位置编码融合在了注意力机制中将相对位置编码同样视为可训练的权重参数如图3.6所示:
<div align="center"> <div align="center">
<img src="../images/3-figures/1-4.png" alt="图片描述" width="40%"/> <img src="https://raw.githubusercontent.com/datawhalechina/happy-llm/main/docs/images/3-figures/1-4.png" alt="图片描述" width="40%"/>
<p>图3.6 BERT 注意力机制结构</p> <p>图3.6 BERT 注意力机制结构</p>
</div> </div>
@@ -230,14 +230,14 @@ T5 的大一统思想将不同的 NLP 任务如文本分类、问答、翻译等
BERT 采用了 Encoder-Only 结构,只包含编码器部分;而 GPT 采用了 Decoder-Only 结构只包含解码器部分。T5 则采用了 Encoder-Decoder 结构,其中编码器和解码器都是基于 Transformer 架构设计。编码器用于处理输入文本解码器用于生成输出文本。编码器和解码器之间通过注意力机制进行信息交互从而实现输入文本到输出文本的转换。其主要结构如图3.7所示: BERT 采用了 Encoder-Only 结构,只包含编码器部分;而 GPT 采用了 Decoder-Only 结构只包含解码器部分。T5 则采用了 Encoder-Decoder 结构,其中编码器和解码器都是基于 Transformer 架构设计。编码器用于处理输入文本解码器用于生成输出文本。编码器和解码器之间通过注意力机制进行信息交互从而实现输入文本到输出文本的转换。其主要结构如图3.7所示:
<div align="center"> <div align="center">
<img src="../images/3-figures/2-1.png" alt="图片描述" width="100%"/> <img src="https://raw.githubusercontent.com/datawhalechina/happy-llm/main/docs/images/3-figures/2-1.png" alt="图片描述" width="100%"/>
<p>图3.7 T5 模型详细结构</p> <p>图3.7 T5 模型详细结构</p>
</div> </div>
如图3.8所示,从整体来看 T5 的模型结构包括 Tokenizer 部分和 Transformer 部分。Tokenizer 部分主要负责将输入文本转换为模型可接受的输入格式包括分词、编码等操作。Transformer 部分又分为 EncoderLayers 和 DecoderLayers 两部分,他们分别由一个个小的 Block组成每个 Block 包含了多头注意力机制、前馈神经网络和 Norm 层。Block 的设计可以使模型更加灵活,像乐高一样可以根据任务的复杂程度和数据集的大小来调整 Block 的数量和层数。 如图3.8所示,从整体来看 T5 的模型结构包括 Tokenizer 部分和 Transformer 部分。Tokenizer 部分主要负责将输入文本转换为模型可接受的输入格式包括分词、编码等操作。Transformer 部分又分为 EncoderLayers 和 DecoderLayers 两部分,他们分别由一个个小的 Block组成每个 Block 包含了多头注意力机制、前馈神经网络和 Norm 层。Block 的设计可以使模型更加灵活,像乐高一样可以根据任务的复杂程度和数据集的大小来调整 Block 的数量和层数。
<div align="center"> <div align="center">
<img src="../images/3-figures/2-2.png" alt="图片描述" width="70%"/> <img src="https://raw.githubusercontent.com/datawhalechina/happy-llm/main/docs/images/3-figures/2-2.png" alt="图片描述" width="70%"/>
<p>图3.8 T5 模型整体结构</p> <p>图3.8 T5 模型整体结构</p>
</div> </div>
@@ -246,14 +246,14 @@ T5 模型的 Encoder 和 Decoder 部分都是基于 Transformer 架构设计的
和 Encoder 不一样的是,在 Decoder 中还包含了 Encoder-Decoder Attention 结构,用于捕捉输入和输出序列之间的依赖关系。这两种 Attention 结构几乎完全一致,只有在位置编码和 Mask 机制上有所不同。如图3.9所示Encoder 和 Decoder 的结构如下: 和 Encoder 不一样的是,在 Decoder 中还包含了 Encoder-Decoder Attention 结构,用于捕捉输入和输出序列之间的依赖关系。这两种 Attention 结构几乎完全一致,只有在位置编码和 Mask 机制上有所不同。如图3.9所示Encoder 和 Decoder 的结构如下:
<div align='center'> <div align='center'>
<img src="../images/3-figures/2-3.png" alt="alt text" width="50%"> <img src="https://raw.githubusercontent.com/datawhalechina/happy-llm/main/docs/images/3-figures/2-3.png" alt="alt text" width="50%">
<p>图3.9 Encoder 和 Decoder</p> <p>图3.9 Encoder 和 Decoder</p>
</div> </div>
T5 的 Self-Attention 机制和 BERT 的 Attention 机制是一样的,都是基于 Self-Attention 机制设计的。Self-Attention 机制是一种全局依赖关系建模方法,通过计算 Query、Key 和 Value 之间的相似度来捕捉输入序列中的全局依赖关系。Encoder-Decoder Attention 仅仅在位置编码和 Mask 机制上有所不同主要是为了区分输入和输出序列。如图3.10所示Self-Attention 结构如下: T5 的 Self-Attention 机制和 BERT 的 Attention 机制是一样的,都是基于 Self-Attention 机制设计的。Self-Attention 机制是一种全局依赖关系建模方法,通过计算 Query、Key 和 Value 之间的相似度来捕捉输入序列中的全局依赖关系。Encoder-Decoder Attention 仅仅在位置编码和 Mask 机制上有所不同主要是为了区分输入和输出序列。如图3.10所示Self-Attention 结构如下:
<div align='center'> <div align='center'>
<img src="../images/3-figures/2-4.png" alt="alt text" width="50%"> <img src="https://raw.githubusercontent.com/datawhalechina/happy-llm/main/docs/images/3-figures/2-4.png" alt="alt text" width="50%">
</p>图3.10 Self-Attention 结构</p> </p>图3.10 Self-Attention 结构</p>
</div> </div>
@@ -298,7 +298,7 @@ T5通过大规模的文本数据进行预训练然后在具体任务上进行
我们可以通过图3.11,更加直观地理解 T5 的大一统思想: 我们可以通过图3.11,更加直观地理解 T5 的大一统思想:
<div align='center'> <div align='center'>
<img src="../images/3-figures/2-0.png" alt="alt text" width="90%"> <img src="https://raw.githubusercontent.com/datawhalechina/happy-llm/main/docs/images/3-figures/2-0.png" alt="alt text" width="90%">
<p>图3.11 T5 的大一统思想</p> <p>图3.11 T5 的大一统思想</p>
</div> </div>
@@ -323,7 +323,7 @@ GPT即 Generative Pre-Training Language Model是由 OpenAI 团队于 2018
#### 1 模型架构——Decoder Only #### 1 模型架构——Decoder Only
<div align='center'> <div align='center'>
<img src="../images/3-figures/3-0.png" alt="alt text" width="100%"> <img src="https://raw.githubusercontent.com/datawhalechina/happy-llm/main/docs/images/3-figures/3-0.png" alt="alt text" width="100%">
<p>图3.12 GPT 模型结构</p> <p>图3.12 GPT 模型结构</p>
</div> </div>
@@ -394,7 +394,7 @@ LLaMA模型是由Meta前Facebook开发的一系列大型预训练语言模
与GPT系列模型一样LLaMA模型也是基于Decoder-Only架构的预训练语言模型。LLaMA模型的整体结构与GPT系列模型类似只是在模型规模和预训练数据集上有所不同。如图3.13是LLaMA模型的架构示意图 与GPT系列模型一样LLaMA模型也是基于Decoder-Only架构的预训练语言模型。LLaMA模型的整体结构与GPT系列模型类似只是在模型规模和预训练数据集上有所不同。如图3.13是LLaMA模型的架构示意图
<div align='center'> <div align='center'>
<img src="../images/3-figures/3-1.png" alt="alt text" width="100%"> <img src="https://raw.githubusercontent.com/datawhalechina/happy-llm/main/docs/images/3-figures/3-1.png" alt="alt text" width="100%">
<p>图3.13 LLaMA-3 模型结构</p> <p>图3.13 LLaMA-3 模型结构</p>
</div> </div>
@@ -460,7 +460,7 @@ GLM 通过优化一个自回归空白填充任务来实现 MLM 与 CLM 思想的
通过将 MLM 与 CLM 思想相结合,既适配逐个 token 生成的生成类任务,也迫使模型从前后两个方向学习输入文本的隐含关系从而适配了理解类任务。使用 GLM 预训练任务产出的 GLM 模型,在一定程度上展现了其超出同体量 BERT 系模型的优越性能: 通过将 MLM 与 CLM 思想相结合,既适配逐个 token 生成的生成类任务,也迫使模型从前后两个方向学习输入文本的隐含关系从而适配了理解类任务。使用 GLM 预训练任务产出的 GLM 模型,在一定程度上展现了其超出同体量 BERT 系模型的优越性能:
<div align='center'> <div align='center'>
<img src="../images/3-figures/3-2.png" alt="alt text" width="90%"> <img src="https://raw.githubusercontent.com/datawhalechina/happy-llm/main/docs/images/3-figures/3-2.png" alt="alt text" width="90%">
<p>图3.14 alt text</p> <p>图3.14 alt text</p>
</div> </div>
@@ -479,7 +479,7 @@ ChatGLM3-6B 发布于 23年 10月相对于二代在语义、数学、推理
图3.15展示了 GLM 系列模型在基准集上的表现演进: 图3.15展示了 GLM 系列模型在基准集上的表现演进:
<div align='center'> <div align='center'>
<img src="../images/3-figures/3-3.png" alt="alt text" width="90%"> <img src="https://raw.githubusercontent.com/datawhalechina/happy-llm/main/docs/images/3-figures/3-3.png" alt="alt text" width="90%">
<p>图3.15 alt text</p> <p>图3.15 alt text</p>
</div> </div>

View File

@@ -96,7 +96,7 @@ LLM 的强大能力也为其带来了跨模态的强大表现。随着 LLM 的
在上一节,我们分析了 LLM 的定义及其特有的强大能力,通过更大规模的参数和海量的训练语料获得远超传统预训练模型的涌现能力,展现出强大的上下文学习、指令遵循及逐步推理能力,带来 NLP 领域的全新变革。那么,通过什么样的步骤,我们才可以训练出一个具有涌现能力的 LLM 呢?训练一个 LLM与训练传统的预训练模型又有什么区别 在上一节,我们分析了 LLM 的定义及其特有的强大能力,通过更大规模的参数和海量的训练语料获得远超传统预训练模型的涌现能力,展现出强大的上下文学习、指令遵循及逐步推理能力,带来 NLP 领域的全新变革。那么,通过什么样的步骤,我们才可以训练出一个具有涌现能力的 LLM 呢?训练一个 LLM与训练传统的预训练模型又有什么区别
<div align='center'> <div align='center'>
<img src="../images/4-figures/2-0.jpg" alt="alt text" width="90%"> <img src="https://raw.githubusercontent.com/datawhalechina/happy-llm/main/docs/images/4-figures/2-0.jpg" alt="alt text" width="90%">
<p>图4.1 训练 LLM 的三个阶段</p> <p>图4.1 训练 LLM 的三个阶段</p>
</div> </div>
@@ -128,7 +128,7 @@ GPT-3|96|12288|96|175B|300B
也正因如此,分布式训练框架也成为 LLM 训练必不可少的组成部分。分布式训练框架的核心思路是数据并行和模型并行。所谓数据并行,是指训练模型的尺寸可以被单个 GPU 内存容纳,但是由于增大训练的 batch_size 会增大显存开销,无法使用较大的 batch_size 进行训练;同时,训练数据量非常大,使用单张 GPU 训练时长难以接受。 也正因如此,分布式训练框架也成为 LLM 训练必不可少的组成部分。分布式训练框架的核心思路是数据并行和模型并行。所谓数据并行,是指训练模型的尺寸可以被单个 GPU 内存容纳,但是由于增大训练的 batch_size 会增大显存开销,无法使用较大的 batch_size 进行训练;同时,训练数据量非常大,使用单张 GPU 训练时长难以接受。
<div align='center'> <div align='center'>
<img src="../images/4-figures/2-1.jpg" alt="alt text" width="60%"> <img src="https://raw.githubusercontent.com/datawhalechina/happy-llm/main/docs/images/4-figures/2-1.jpg" alt="alt text" width="60%">
<p>图4.2 模型、数据并行</p> <p>图4.2 模型、数据并行</p>
</div> </div>
@@ -137,7 +137,7 @@ GPT-3|96|12288|96|175B|300B
但是,当 LLM 扩大到上百亿参数,单张 GPU 内存往往就无法存放完整的模型参数。如图4.3所示,在这种情况下,可以将模型拆分到多个 GPU 上,每个 GPU 上存放不同的层或不同的部分,从而实现模型并行。 但是,当 LLM 扩大到上百亿参数,单张 GPU 内存往往就无法存放完整的模型参数。如图4.3所示,在这种情况下,可以将模型拆分到多个 GPU 上,每个 GPU 上存放不同的层或不同的部分,从而实现模型并行。
<div align='center'> <div align='center'>
<img src="../images/4-figures/2-2.jpg" alt="alt text" width="30%"> <img src="https://raw.githubusercontent.com/datawhalechina/happy-llm/main/docs/images/4-figures/2-2.jpg" alt="alt text" width="30%">
<p>图4.3 模型并行</p> <p>图4.3 模型并行</p>
</div> </div>
@@ -297,7 +297,7 @@ RLHF全称是 Reinforcement Learning from Human Feedback即人类反馈强
如图4.4所示ChatGPT 在技术报告中将对齐分成三个阶段,后面两个阶段训练 RM 和 PPO 训练,就是 RLHF 的步骤: 如图4.4所示ChatGPT 在技术报告中将对齐分成三个阶段,后面两个阶段训练 RM 和 PPO 训练,就是 RLHF 的步骤:
<div align='center'> <div align='center'>
<img src="../images/4-figures/2-3.png" alt="alt text" width="100%"> <img src="https://raw.githubusercontent.com/datawhalechina/happy-llm/main/docs/images/4-figures/2-3.png" alt="alt text" width="100%">
<p>图4.4 ChatGPT 训练三个的阶段</p> <p>图4.4 ChatGPT 训练三个的阶段</p>
</div> </div>
@@ -331,7 +331,7 @@ RMReward Model即奖励模型。RM 是用于拟合人类偏好,来给 LL
在具体 PPO 训练过程中会存在四个模型。如图4.5所示,两个 LLM 和两个 RM。两个 LLM 分别是进行微调、参数更新的 actor model 和不进行参数更新的 ref model均是从 SFT 之后的 LLM 初始化的。两个 RM 分别是进行参数更新的 critic model 和不进行参数更新的 reward model均是从上一步训练的 RM 初始化的。 在具体 PPO 训练过程中会存在四个模型。如图4.5所示,两个 LLM 和两个 RM。两个 LLM 分别是进行微调、参数更新的 actor model 和不进行参数更新的 ref model均是从 SFT 之后的 LLM 初始化的。两个 RM 分别是进行参数更新的 critic model 和不进行参数更新的 reward model均是从上一步训练的 RM 初始化的。
<div align='center'> <div align='center'>
<img src="../images/4-figures/2-4.jpg" alt="alt text" width="100%"> <img src="https://raw.githubusercontent.com/datawhalechina/happy-llm/main/docs/images/4-figures/2-4.jpg" alt="alt text" width="100%">
<p>图4.5 PPO 训练流程</p> <p>图4.5 PPO 训练流程</p>
</div> </div>

View File

@@ -7,7 +7,7 @@ Meta原Facebook于2023年2月发布第一款基于Transformer结构的大
LLaMA2 模型结构如下图5.0所示: LLaMA2 模型结构如下图5.0所示:
<div align='center'> <div align='center'>
<img src="../images/5-images/LLama2.png" alt="alt text" width="100%"> <img src="https://raw.githubusercontent.com/datawhalechina/happy-llm/main/docs/images/5-images/LLama2.png" alt="alt text" width="100%">
<p>图 5.0 LLaMA2结构</p> <p>图 5.0 LLaMA2结构</p>
</div> </div>
@@ -1333,7 +1333,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` 主要是用来标记哪些位置需要计算损失,哪些位置不需要计算损失。 在以上代码和图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'> <div align='center'>
<img src="../images/5-images/pretrain_dataset.png" alt="alt text" width="100%"> <img src="https://raw.githubusercontent.com/datawhalechina/happy-llm/main/docs/images/5-images/pretrain_dataset.png" alt="alt text" width="100%">
<p>图5.1 预训练损失函数计算</p> <p>图5.1 预训练损失函数计算</p>
</div> </div>
@@ -1420,7 +1420,7 @@ class SFTDataset(Dataset):
在 SFT 阶段,这里使用的是多轮对话数据集,所以就需要区分哪些位置需要计算损失,哪些位置不需要计算损失。在上面的代码中,我使用了一个 `generate_loss_mask` 函数来生成 `loss_mask`。这个函数主要是用来生成 `loss_mask`,其中 `loss_mask` 的生成规则是:当遇到 `|<im_start|>assistant\n` 时,就开始计算损失,直到遇到 `|<im_end|>` 为止。这样就可以保证我们的模型在 SFT 阶段只计算当前轮的对话内容如图5.2所示。 在 SFT 阶段,这里使用的是多轮对话数据集,所以就需要区分哪些位置需要计算损失,哪些位置不需要计算损失。在上面的代码中,我使用了一个 `generate_loss_mask` 函数来生成 `loss_mask`。这个函数主要是用来生成 `loss_mask`,其中 `loss_mask` 的生成规则是:当遇到 `|<im_start|>assistant\n` 时,就开始计算损失,直到遇到 `|<im_end|>` 为止。这样就可以保证我们的模型在 SFT 阶段只计算当前轮的对话内容如图5.2所示。
<div align='center'> <div align='center'>
<img src="../images/5-images/sftdataset.png" alt="alt text" width="90%"> <img src="https://raw.githubusercontent.com/datawhalechina/happy-llm/main/docs/images/5-images/sftdataset.png" alt="alt text" width="90%">
<p>图5.2 SFT 损失函数计算</p> <p>图5.2 SFT 损失函数计算</p>
</div> </div>

View File

@@ -15,7 +15,7 @@
Transformers 是由 Hugging Face 开发的 NLP 框架,通过模块化设计实现了对 BERT、GPT、LLaMA、T5、ViT 等上百种主流模型架构的统一支持。通过使用 Transformers开发者无需重复实现基础网络结构通过 AutoModel 类即可一键加载任意预训练图6.1 为 Hugging Face Transformers 课程首页: Transformers 是由 Hugging Face 开发的 NLP 框架,通过模块化设计实现了对 BERT、GPT、LLaMA、T5、ViT 等上百种主流模型架构的统一支持。通过使用 Transformers开发者无需重复实现基础网络结构通过 AutoModel 类即可一键加载任意预训练图6.1 为 Hugging Face Transformers 课程首页:
<div align='center'> <div align='center'>
<img src="../images/6-images/1-1.png" alt="alt text" width="90%"> <img src="https://raw.githubusercontent.com/datawhalechina/happy-llm/main/docs/images/6-images/1-1.png" alt="alt text" width="90%">
<p>图6.1 Hugging Face Transformers</p> <p>图6.1 Hugging Face Transformers</p>
</div> </div>
@@ -24,7 +24,7 @@ Transformers 是由 Hugging Face 开发的 NLP 框架,通过模块化设计实
对 LLM 时代的 NLP 研究者更为重要的是HuggingFace 基于 Transformers 框架搭建了其庞大的 AI 社区开放了数亿个预训练模型参数、25万+不同类型数据集,通过 Transformers、Dataset、Evaluate 等多个框架实现对预训练模型、数据集及评估函数的集成,从而帮助开发者可以便捷地使用任一预训练模型,在开源模型及数据集的基础上便捷地实现个人模型的开发与应用。 对 LLM 时代的 NLP 研究者更为重要的是HuggingFace 基于 Transformers 框架搭建了其庞大的 AI 社区开放了数亿个预训练模型参数、25万+不同类型数据集,通过 Transformers、Dataset、Evaluate 等多个框架实现对预训练模型、数据集及评估函数的集成,从而帮助开发者可以便捷地使用任一预训练模型,在开源模型及数据集的基础上便捷地实现个人模型的开发与应用。
<div align='center'> <div align='center'>
<img src="../images/6-images/1-2.png" alt="alt text" width="90%"> <img src="https://raw.githubusercontent.com/datawhalechina/happy-llm/main/docs/images/6-images/1-2.png" alt="alt text" width="90%">
<p>图6.2 Hugging Face Transformers 模型社区</p> <p>图6.2 Hugging Face Transformers 模型社区</p>
</div> </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)的模型架构为例: 我们可以使用 transformers 的 AutoModel 类来直接初始化已经实现好的模型。对于任意预训练模型,其参数中都包含有模型的配置信息。如果是想要从头训练一个 LLM可以使用一个已有的模型架构来直接初始化。这里我们以 [Qwen-2.5-1.5B](https://huggingface.co/Qwen/Qwen2.5-1.5B/tree/main)的模型架构为例:
<div align='center'> <div align='center'>
<img src="../images/6-images/1-3.png" alt="alt text" width="90%"> <img src="https://raw.githubusercontent.com/datawhalechina/happy-llm/main/docs/images/6-images/1-3.png" alt="alt text" width="90%">
<p>图6.3 Qwen-2.5-1.5B</p> <p>图6.3 Qwen-2.5-1.5B</p>
</div> </div>
该界面即为 HuggingFace 社区中的 Qwen-2.5-1.5B 模型参数,其中的 `config.json` 文件即是模型的配置信息包括了模型的架构、隐藏层大小、模型层数等如图6.4所示: 该界面即为 HuggingFace 社区中的 Qwen-2.5-1.5B 模型参数,其中的 `config.json` 文件即是模型的配置信息包括了模型的架构、隐藏层大小、模型层数等如图6.4所示:
<div align='center'> <div align='center'>
<img src="../images/6-images/1-4.png" alt="alt text" width="90%"> <img src="https://raw.githubusercontent.com/datawhalechina/happy-llm/main/docs/images/6-images/1-4.png" alt="alt text" width="90%">
<p>图6.4 Qwen-2.5-1.5B config.json 文件</p> <p>图6.4 Qwen-2.5-1.5B config.json 文件</p>
</div> </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 上的模型名即可: 如图6.5,此处的 “Qwen/Qwen2.5-1.5B”即为要下载模型的标识符,对于其他模型,可以直接复制 HuggingFace 上的模型名即可:
<div align='center'> <div align='center'>
<img src="../images/6-images/1-5.png" alt="alt text" width="90%"> <img src="https://raw.githubusercontent.com/datawhalechina/happy-llm/main/docs/images/6-images/1-5.png" alt="alt text" width="90%">
<p>图6.5 模型下载标识</p> <p>图6.5 模型下载标识</p>
</div> </div>
@@ -87,7 +87,7 @@ model = AutoModelForCausalLM.from_config(config,trust_remote_code=True)
由于 LLM 一般都是 CausalLM 架构,此处使用了 AutoModelForCausalLM 类进行加载。如果是用于分类任务训练,可使用 AutoModelForSequenceClassification 类来加载。查看该 model图6.6可以看到其架构和定义的配置文件相同: 由于 LLM 一般都是 CausalLM 架构,此处使用了 AutoModelForCausalLM 类进行加载。如果是用于分类任务训练,可使用 AutoModelForSequenceClassification 类来加载。查看该 model图6.6可以看到其架构和定义的配置文件相同:
<div align='center'> <div align='center'>
<img src="../images/6-images/1-6.png" alt="alt text" width="70%"> <img src="https://raw.githubusercontent.com/datawhalechina/happy-llm/main/docs/images/6-images/1-6.png" alt="alt text" width="70%">
<p>图6.6 模型结构输出结果</p> <p>图6.6 模型结构输出结果</p>
</div> </div>
@@ -130,7 +130,7 @@ ds["train"][0]
``` ```
<div align='center'> <div align='center'>
<img src="../images/6-images/1-7.png" alt="alt text" width="100%"> <img src="https://raw.githubusercontent.com/datawhalechina/happy-llm/main/docs/images/6-images/1-7.png" alt="alt text" width="100%">
<p>图6.7 数据集展示</p> <p>图6.7 数据集展示</p>
</div> </div>
@@ -788,7 +788,7 @@ trainer.save_model()
具体而言,其在预训练模型每层中插入用于下游任务的参数,即 Adapter 模块在微调时冻结模型主体仅训练特定于任务的参数如图6.8所示。 具体而言,其在预训练模型每层中插入用于下游任务的参数,即 Adapter 模块在微调时冻结模型主体仅训练特定于任务的参数如图6.8所示。
<div align='center'> <div align='center'>
<img src="../images/6-images/3-1.png" alt="alt text" width="90%"> <img src="https://raw.githubusercontent.com/datawhalechina/happy-llm/main/docs/images/6-images/3-1.png" alt="alt text" width="90%">
<p>图6.8 Adapt Tuning</p> <p>图6.8 Adapt Tuning</p>
</div> </div>
@@ -840,7 +840,7 @@ $$h = W_0 x + \Delta W x = W_0 x + B A x$$
训练思路如图6.9所示: 训练思路如图6.9所示:
<div align='center'> <div align='center'>
<img src="../images/6-images/3-2.jpg" alt="alt text" width="90%"> <img src="https://raw.githubusercontent.com/datawhalechina/happy-llm/main/docs/images/6-images/3-2.jpg" alt="alt text" width="90%">
<p>图6.9 LoRA</p> <p>图6.9 LoRA</p>
</div> </div>

View File

@@ -47,7 +47,7 @@
Open LLM Leaderboard 为由 Hugging Face 提供的开放式榜单汇集了多个开源大模型的评测结果帮助用户了解不同模型在各种任务上的表现。该榜单通过多个标准化测试集来评估模型的性能并通过持续更新的方式反映最新的技术进展为研究者和开发者提供了高价值的对比参考如图7.1所示。 Open LLM Leaderboard 为由 Hugging Face 提供的开放式榜单汇集了多个开源大模型的评测结果帮助用户了解不同模型在各种任务上的表现。该榜单通过多个标准化测试集来评估模型的性能并通过持续更新的方式反映最新的技术进展为研究者和开发者提供了高价值的对比参考如图7.1所示。
<div align='center'> <div align='center'>
<img src="../images/7-images/7-1-Open%20LLM%20Leaderboard.png" alt="alt text" width="90%"> <img src="https://raw.githubusercontent.com/datawhalechina/happy-llm/main/docs/images/7-images/7-1-Open%20LLM%20Leaderboard.png" alt="alt text" width="90%">
<p>图 7.1 Open LLM Leaderboard</p> <p>图 7.1 Open LLM Leaderboard</p>
</div> </div>
@@ -56,7 +56,7 @@ Open LLM Leaderboard 为由 Hugging Face 提供的开放式榜单,汇集了多
由lmsys提供的聊天机器人评测榜单通过多维度的评估展示各类大模型在对话任务中的能力。该榜单采用真实用户与模型交互的方式来评测对话质量重点考察模型的自然语言生成能力、上下文理解能力以及用户满意度是当前评估聊天机器人性能的重要工具如图7.2所示。 由lmsys提供的聊天机器人评测榜单通过多维度的评估展示各类大模型在对话任务中的能力。该榜单采用真实用户与模型交互的方式来评测对话质量重点考察模型的自然语言生成能力、上下文理解能力以及用户满意度是当前评估聊天机器人性能的重要工具如图7.2所示。
<div align='center'> <div align='center'>
<img src="../images/7-images/7-1-lmsys%20Chatbot%20Arena%20Leaderboard.png" alt="alt text" width="90%"> <img src="https://raw.githubusercontent.com/datawhalechina/happy-llm/main/docs/images/7-images/7-1-lmsys%20Chatbot%20Arena%20Leaderboard.png" alt="alt text" width="90%">
<p>图7.2 Lmsys Chatbot Arena Leaderboard</p> <p>图7.2 Lmsys Chatbot Arena Leaderboard</p>
</div> </div>
@@ -65,7 +65,7 @@ Open LLM Leaderboard 为由 Hugging Face 提供的开放式榜单,汇集了多
OpenCompass 是国内的评测榜单,针对大模型在多种语言和任务上的表现进行评估,提供了中国市场特定应用的参考。该榜单结合了中文语言理解和多语言能力的测试,以适应本地化需求,并特别关注大模型在中文语境下的准确性、鲁棒性和适应性,为国内企业和研究者选择合适的模型提供了重要参考。 OpenCompass 是国内的评测榜单,针对大模型在多种语言和任务上的表现进行评估,提供了中国市场特定应用的参考。该榜单结合了中文语言理解和多语言能力的测试,以适应本地化需求,并特别关注大模型在中文语境下的准确性、鲁棒性和适应性,为国内企业和研究者选择合适的模型提供了重要参考。
<div align='center'> <div align='center'>
<img src="../images/7-images/7-1-opencompass.png" alt="alt text" width="90%"> <img src="https://raw.githubusercontent.com/datawhalechina/happy-llm/main/docs/images/7-images/7-1-opencompass.png" alt="alt text" width="90%">
<p>图7.3 OpenCompass</p> <p>图7.3 OpenCompass</p>
</div> </div>
@@ -84,7 +84,7 @@ OpenCompass 是国内的评测榜单,针对大模型在多种语言和任务
- 医疗榜基于MedBench评测集评估大语言模型在医学知识问答、安全伦理理解等方面的表现。由上海人工智能实验室提供。 - 医疗榜基于MedBench评测集评估大语言模型在医学知识问答、安全伦理理解等方面的表现。由上海人工智能实验室提供。
<div align='center'> <div align='center'>
<img src="../images/7-images/7-1-垂直领域榜单.png" alt="alt text" width="90%"> <img src="https://raw.githubusercontent.com/datawhalechina/happy-llm/main/docs/images/7-images/7-1-垂直领域榜单.png" alt="alt text" width="90%">
<p>图7.4 垂直领域榜单</p> <p>图7.4 垂直领域榜单</p>
</div> </div>
@@ -118,7 +118,7 @@ RAG的基本结构有哪些呢
上述也就是 TinyRAG 的所有模块内容如图7.5所示。 上述也就是 TinyRAG 的所有模块内容如图7.5所示。
<div align='center'> <div align='center'>
<img src="../images/7-images/7-2-tinyrag.png" alt="alt text" width="90%"> <img src="https://raw.githubusercontent.com/datawhalechina/happy-llm/main/docs/images/7-images/7-2-tinyrag.png" alt="alt text" width="90%">
<p>图7.5 TinyRAG 项目结构</p> <p>图7.5 TinyRAG 项目结构</p>
</div> </div>
@@ -131,7 +131,7 @@ RAG的基本结构有哪些呢
如下图7.6所示的流程图,图片出处 ***[Retrieval-Augmented Generation for Large Language Models: A Survey](https://arxiv.org/pdf/2312.10997.pdf)*** 如下图7.6所示的流程图,图片出处 ***[Retrieval-Augmented Generation for Large Language Models: A Survey](https://arxiv.org/pdf/2312.10997.pdf)***
<div align='center'> <div align='center'>
<img src="../images/7-images/7-2-rag.png" alt="alt text" width="90%"> <img src="https://raw.githubusercontent.com/datawhalechina/happy-llm/main/docs/images/7-images/7-2-rag.png" alt="alt text" width="90%">
<p>图7.6 RAG 流程图</p> <p>图7.6 RAG 流程图</p>
</div> </div>
@@ -403,7 +403,7 @@ print(chat.chat(question, [], content))
传统的LLM像一个知识渊博但只能纸上谈兵的图书馆员而 LLM Agent 则更像一个全能的私人助理,不仅懂得多,还能跑腿办事,甚至能主动思考最优方案。 传统的LLM像一个知识渊博但只能纸上谈兵的图书馆员而 LLM Agent 则更像一个全能的私人助理,不仅懂得多,还能跑腿办事,甚至能主动思考最优方案。
<div align='center'> <div align='center'>
<img src="../images/7-images/7-3-Agent工作原理.png" alt="alt text" width="90%"> <img src="https://raw.githubusercontent.com/datawhalechina/happy-llm/main/docs/images/7-images/7-3-Agent工作原理.png" alt="alt text" width="90%">
<p>图7.7 Agent 工作原理</p> <p>图7.7 Agent 工作原理</p>
</div> </div>
@@ -440,7 +440,7 @@ LLM Agent 通过将大型语言模型的强大语言理解和生成能力与规
最终的实现效果如图7.8所示: 最终的实现效果如图7.8所示:
<div align='center'> <div align='center'>
<img src="../images/7-images/7-3-tinyagent-example.png" style="width: 100%;"> <img src="https://raw.githubusercontent.com/datawhalechina/happy-llm/main/docs/images/7-images/7-3-tinyagent-example.png" style="width: 100%;">
<p>图7.8 效果示意图</p> <p>图7.8 效果示意图</p>
</div> </div>
@@ -633,7 +633,7 @@ Agent 的工作流程如下:
如图7.9所示Agent 调用工具流程: 如图7.9所示Agent 调用工具流程:
<div align='center'> <div align='center'>
<img src="../images/7-images/7-3-Tiny_Agent.jpg" alt="alt text" width="80%"> <img src="https://raw.githubusercontent.com/datawhalechina/happy-llm/main/docs/images/7-images/7-3-Tiny_Agent.jpg" alt="alt text" width="80%">
<p>图7.9 Agent 工作流程</p> <p>图7.9 Agent 工作流程</p>
</div> </div>