大模型自学笔记(待更新中)
1.NLP基础知识
1.1 文本处理基础
Tokenizer:分词器
Tokenizer是一个用于向量化文本,将文本转换为序列的类。当前tokenization主要分为:word,sub-word, charlevel 三个类型。Subword处于word和char level两个粒度级别之间。
word级别面临问题:
- 超大的vocabulary size, 比如中文的常用词可以达到20W个
- 通常面临比较严重的OOV问题(Out-Of-Vocabulary:测试集中出现的词汇未在训练集中出现,导致模型无法识别或处理这些词汇)
- vocabulary 中存在很多相似的词。
以及char level存在的以下问题:
- 文本序列会变得很长,想象以下如果是一篇英文文章的分类,char level级别的输入长度可以达到上万
- 无法对语义进行比较好的表征
subword 不会对高频的词进行拆分,仅拆分一些低频的词,比如”boy”和”boys”这两个词,将”boys”拆分为”boy”和”s”两个更高频的词,其中”boy”表示的是词根,模型通过”boy”去学习”boys”的语义。
BPE:Byte Pair Encoding(Subword)
学习教程:理解NLP最重要的编码方式 — Byte Pair Encoding (BPE),这一篇就够了 - 知乎
是一种简单的数据压缩算法。BPE每一步都将最常见的一对相邻数据单位替换为该数据中没有出现过的一个新单位,反复迭代直到满足停止条件。
举例:
假设有需要编码(压缩)的数据 aaabdaaabac。相邻字节对(相邻数据单位在BPE中看作相邻字节对) aa 最常出现,因此我们将用一个新字节 Z 替换它。我们现在有了 ZabdZabac,其中 Z = aa。下一个常见的字节对是 ab,让我们用 Y 替换它。我们现在有 ZYdZYac,其中 Z = aa ,Y = ab。剩下的唯一字节对是 ac,它只有一个,所以我们不对它进行编码。我们可以递归地使用字节对编码将 ZY 编码为 X。我们的数据现在已转换为 XdXac,其中 X = ZY,Y = ab,Z = aa。它不能被进一步压缩,因为没有出现多次的字节对。那如何把压缩的编码复原呢?反向执行以上过程就行了。
BPE 在迭代的时候(会受到单词末尾标记“</w>”的影响)通过比较token的频率大小来穷尽每一种可能,所以是一种贪心算法。在实际中,token计数先增加然后减少。
示例在只有一个单词包含最高频率字符时停止迭代。算法的停止标准可以是token的计数或固定的迭代次数。我们选择一个最合适的停止标准,以便我们的数据集可以以最有效的方式分解为token。
存在问题:一个词可能存在多种拆分方式,难以评估使用那个拆分方式比较合理,可以组合的列表中的优先级无法确定,通常会直接取第一个。
WordPiece(Subword)
学习教程:理解tokenizer之WordPiece: Subword-based tokenization algorithm - 知乎
与BPE没有太大的区别。WordPiece选择让似然概率最大的值。具体的计算使用合并后的概率值,除以合并前的概率值,举个例子, 在考虑将”e”和”s”合并的时候除了会考虑”es”的概率值,还会考虑”e”和”s”的概率值。或者说,”es”的合并是通过考虑合并带来的价值。
每次选取两个token组合的时候,都需要测试所有的可能性并且计算句子的困惑度,所以时间复杂度是${O({K}^{2})}$,其中K表示的当前词表的大小。但是在原论文中有些简单的小技巧可以加速计算,比如一次组合多个词,一次性算困惑度等
SentencePiece
学习教程:大模型词表扩充必备工具SentencePiece - 知乎
是谷歌推出的子词开源工具包,把一个句子看作一个整体,再拆成片段,而没有保留天然的词语的概念。一般地,它把空格也当作一种特殊字符来处理,再用BPE或者Unigram算法来构造词汇表。SentencePiece除了集成了BPE、ULM子词算法之外,SentencePiece还能支持字符和词级别的分词。
Unigram
一个大的不同是,BPE 以及 WordPiece都是初始化一个小词表,然后一个个增加到限定的词汇量,而 Unigram Language Model 却是先初始一个大词表,接着通过语言模型评估不断减少词表,直到限定词汇量。
BBPE
BBPE核心思想将BPE的从字符级别扩展到子节(Byte)级别。BPE的一个问题是如果遇到了unicode编码,基本字符集可能会很大。BBPE以一个字节为一种“字符”,不管实际字符集用了几个字节来表示一个字符。这样的话,基础字符集的大小就锁定在了256(2^8)。采用BBPE的好处是可以跨语言共用词表,显著压缩词表的大小。而坏处就是,对于类似中文这样的语言,一段文字的序列长度会显著增长。因此,BBPE可能比BPE 表现的更好。然而,BBPE sequence比起BPE来说略长,这也导致了更长的训练/推理时间。BBPE其实与BPE在实现上并无大的不同,只不过基础词表使用256的字节集。
Embedding:嵌入层
有一系列样本(x,y),x 是词语,y 是它们的词性,要构建 f(x)->y 的映射,而f又只接受数值型输入,因此需要将文本转换为数值。
Embedding层就是用来降维的,原理是矩阵乘法,也可以升维。
距离的远近会影响我们的观察效果,对低维的数据进行升维时,可能把一些其他特征给放大了,或者把笼统的特征给分开了。同时,这个Embedding是一直在学习在优化的,就使得整个拉近拉远的过程慢慢形成一个良好的观察点。
One-hot:独热表示
学习教程:一文读懂Embedding的概念,以及它和深度学习的关系 - 知乎
把每一个字都对应成一个n个(样本总数/字总数)元素的数组/列表,其中每一个字都用唯一对应的数组/列表对应,数组/列表的唯一性用1表示。计算简单,但过于稀疏,过度占用资源。
Word2Vec
学习教程:深入浅出Word2Vec原理解析 - 知乎、如何通俗理解Word2Vec (23年修订版)-CSDN博客
需要解决两个问题:1 需要赋予词语义信息,2 降低维度
Word2Vec是轻量级的神经网络,其模型仅仅包括输入层、隐藏层和输出层。模型框架根据输入输出的不同,主要包括CBOW和Skip-gram模型。 CBOW的方式是在知道词的上下文的情况下预测当前词。而Skip-gram是在知道了词的情况下,对词的上下文进行预测。
词向量矩阵C作为训练参数之一。Word2Vec的最终目的不是为了得到一个语言模型,也不是要把f训练得多么完美,而是只关心模型训练完后的副产物:模型参数(这里特指神经网络的权重),并将这些参数作为输入x向量化的表示,这个向量便叫做——词向量。
FastText
学习教程:fastText原理和文本分类实战,看这一篇就够了-CSDN博客、fastText原理及实践 - 知乎
fastText模型架构和word2vec中的CBOW很相似,不同之处是fastText预测标签而CBOW预测的是中间词,即模型架构类似但是模型的任务不同。
n-gram是基于语言模型的算法,基本思想是将文本内容按照子节顺序进行大小为N的窗口滑动操作,最终形成窗口为N的字节片段序列。
在传统的word2vec中,这种单词内部形态信息因为它们被转换成不同的id丢失了。fastText使用了字符级别的n-grams来表示一个单词。对于单词“apple”,假设n的取值为3,则它的trigram有“<ap”, “app”, “ppl”, “ple”, “le>”,其中,<表示前缀,>表示后缀。可以用这些trigram来表示“apple”这个单词,可以用这5个trigram的向量叠加来表示“apple”的词向量。
GloVe
学习教程:NLP | GloVe(带有全局向量的词嵌入) 图文详解及代码_glove词嵌入-CSDN博客
Global Vectors for Word Representation,是一种无监督学习算法,是Word2Vec模型的扩展。利用全局统计信息。
构建一个共现矩阵(Co-ocurrence Matrix)X,矩阵中的每一个元素 Xij 代表单词 i 和上下文单词 j 在特定大小的上下文窗口(context window)内共同出现的次数。根据两个单词在上下文窗口的距离 d,提出了一个衰减函数(decreasing weighting):decay=1/d 用于计算权重,也就是说距离越远的两个单词所占总计数(total count)的权重越小。
构建F函数: $$ F\left ( {w}_{i},{w}_{j},{w}_{k}\right )=\frac{{P}_{ik}}{{P}_{jk}} $$ 意思是通过在共现矩阵中的概率关系来表示词出现的相关性,其与词语的词向量表示应当有相关性。
SVD(奇异值分解)可以得到语义、句法、语义信息。
1.2 核心架构组件
注意力机制
(1)生成Q、K、V向量:对于输入序列中的每个单词,都会生成对应的Query(查询)、Key(键)和Value(值)三种向量,对应三个可训练参数矩阵。
(2)计算Q、K的点积(注意力分数):计算Query向量与序列中所有单词的Key向量之间的点积,得到一个分数。这个分数反映了每个单词与当前位置单词的关联程度。
(3)Softmax函数归一化(注意力权重):这些分数会经过一个Softmax函数进行归一化,得到每个单词的注意力权重。这些权重表示了在理解当前单词时,应该给予序列中其他单词多大的关注。
(4)注意力权重加权求和(加权和向量):这些注意力权重与对应的Value向量进行加权求和,得到一个加权和向量。这个加权和向量会被用作当前单词的新表示,包含了更丰富的上下文信息。
硬注意力是0/1问题,某个区域要么被关注,要么不关注,不可微。硬注意力更加关注点,也就是图像中的每个点都可能延伸出注意力。
软注意力是[0,1]间连续分布问题,用0到1的不同分值表示每个区域被关注的程度高低。软注意力更加关注区域或者通道,软注意力是确定性的注意力,学习完成后可以直接通过网络生成,是可微的。
一文彻底搞懂深度学习:注意力机制(Attention Mechanism)-CSDN博客
Self-Attention自注意力
在处理序列数据时,每个元素都可以与序列中的其他元素建立关联,而不仅仅是依赖于相邻位置的元素。它通过计算元素之间的相对重要性来自适应地捕捉元素之间的长程依赖关系。
自注意力机制通过计算序列中不同位置之间的相关性(q、k操作),为每个位置分配一个权重,然后对序列进行加权求和(v操作)。
让一个序列自己内部的元素相互关注。自己乘以自己。
Cross-Attention交叉注意力
Cross Attention 是让两个不同的序列(或者数据来源)之间建立关注关系。Q 和 K/V 的来源不同。
Multi-Head Attention多头注意力
在自注意力机制中,每个单词或者字都仅仅只有一个q、k、v与其对应。
在多头注意力机制中,q、k、v矩阵有多个。a先乘q矩阵,其次,会为其多分配两个head,k、v同理。点乘时根据下标对齐。这些输出随后被合并(通常是通过拼接或平均)以形成一个最终的、更复杂的表示。
Mask-Attention
注意力掩码(Attention mask)告诉模型在计算注意力权重时,应该忽略哪些输入部分的干扰(“屏蔽”掉它们)。在自回归生成任务中(例如文本生成、机器翻译解码),模型需要根据过去的信息预测下一个token。在训练或推理时,模型只允许访问当前位置之前(左) 的token(历史信息),而不能访问当前位置之后(右) 的token(未来信息)。这样做的目的是防止信息泄露。
位置编码
学习教程:Transformer学习笔记一:Positional Encoding(位置编码) - 知乎、常用位置编码技术对比分析 - Jcpeng_std - 博客园
在transformer的encoder和decoder的输入层中使用,输入=输入嵌入编码+位置编码(两种编码维度相同)
绝对位置编码
transformer原始论文中提出,偶数用sin,奇数用cos。

满足:
性质一:两个位置编码的点积(dot product)仅取决于偏移量,也即两个位置编码的点积可以反应出两个位置编码间的距离。
性质二:位置编码的点积是无向的。输入与其往前第t个输入的位置编码点积=输入与其往后第t个输入的位置编码点积
可学习的位置编码
将一个可训练的矩阵作为位置编码,随模型一起训练。模型只能处理训练时见过的最大长度的序列,完全没有外推能力。
相对位置编码
关注序列中任意两个 token 之间的相对距离。不再将位置编码加到词向量上,而是修改了注意力分数的计算过程,在 Softmax 之前注入一个与相对位置 (i-j) 相关的偏置项。
ROPE:旋转位置编码
近年来最成功、应用最广泛的位置编码方案。
通过旋转矩阵对查询(Q)和键(K)向量在二维子空间上进行旋转,旋转的角度取决于其绝对位置。变换后,两个向量在注意力机制中的点积 (Q_m)^T K_n **结果只会依赖于相对位置 (m-n)**。这就同时拥有了绝对位置的形式和相对位置的内核。
- 也有研究尝试让模型完全不依赖位置编码(如 Attention with Linear Biases - ALiBi),通过在注意力分数上添加一个与距离成比例的负偏置来惩罚远距离的 token。它在长文本外推上表现非常出色,但目前在通用性能上仍被认为略逊于 RoPE。
归一化技术
BatchNorm
使用均值和方差将每个元素标准化
Layer Norm
学习教程:Transformer中的归一化(五):Layer Norm的原理和实现
BN是对batch的维度去做归一化,也就是针对不同样本的同一特征做操作。LN是对hidden的维度去做归一化,也就是针对单个样本的不同特征做操作。因此LN可以不受样本数的限制。BN就是在每个维度上统计所有样本的值,计算均值和方差;LN就是在每个样本上统计所有维度的值,计算均值和方差。BN在每个维度上分布是稳定的,LN在每个样本上的分布是稳定的。
RMSNorm
学习教程:LLM中的RMSNorm - 知乎、大模型面试题剖析:Pre-Norm与Post-Norm的对比
Pre Norm,去除了减去均值的操作,也就是没有去中心化的操作,只有缩放的操作。RMSnorm就是均值为0的layer norm,可以提升运行效率。
Post Norm(transformer原始论文): 归一化操作在残差连接之后。残差相加后进行归一化,对参数正则化效果强,但可能导致梯度消失。训练不稳定,需warmup;深层模型(>18层)易失败,但可以通过warmup和模型初始化缓解;参数正则化强,鲁棒性较好。
Pre Norm(改进版):归一化操作在残差连接之前。先对输入归一化,再送入模块计算,最后与原始输入相加,缓解梯度问题。梯度流动更稳定,无需复杂预热机制;支持更深层模型,训练收敛性更好;表征坍塌风险,但可通过双残差连接缓解;计算量稍高。
当代大模型选择Pre-Norm。
DeepNorm
学习教程:PreNorm/PostNorm/DeepNorm/RMSNorm是什么 - 知乎
【DL&NLP】再谈Layer-Norm:Pre-LN、Post-LN、DeepNorm - 知乎
在进行layer-norm之前扩大残差连接,让输入乘以一个大于1的常数。
结合了Post-LN的稳定性和Pre-LN的性能,在极深模型(如千亿参数)中能有效稳定训练。其实就是基于PostNorm进行了优化,多偏袒底层的恒等分支。相较于Post-LN模型,DeepNet的模型更新几乎保持恒定。
残差连接
一旦某一个导数很小,多次连乘后梯度可能越来越小,这就是梯度消散。改善了反向传播过程中的梯度消失问题,网络退化问题。
1.3 神经网络基础
MLP
学习教程:小白笔记:对MLP多层感知机概念、结构、超参数的理解-CSDN博客
Multi-Layer Perceptron 多层感知机
PLA:Perceptron Learning Algorithm 感知机,只有输入和输出层,这两层共同组成了一个简单的神经元,即单个神经元模型。是一个线性的二分类器,不能有效分类非线性数据。可以加深这个神经元的网络层次,理论上来说,多层网络可以模拟任何复杂的函数。
多层感知机由感知机推广而来,有多个神经元层,因此 MLP 也被称为人工神经网络(Artificial Neural Network,ANN)。MLP 是一种特定类型的ANN,它由多个神经元组成,通常包括一个输入层、一个或多个隐藏层以及一个输出层。MLP 则是 ANN 中的一个特例,指代具有多个层的前馈神经网络。在讨论上,MLP 和 ANN 可以互换使用。
多层感知机这三类给定层(输入、中间、输出层)中的每个节点都会连接到相邻层中的每个节点(全连接),所以MLP中最重要的组成部分就是Dense Layer(全连接层 Fully Connected Layer、线性层、稠密层),又称为前馈神经网络(FeedforwardNeural Network,简称 FFN 或 FNN )。
如何将线性结构变为多层的感知机:全连接(Dense) + 激活函数(引入非线性)。
超参数
隐藏层的数量:在实际应用中,隐藏层数量增加并不总是会带来更好的效果,因为这样也会增加模型复杂度,从而增加计算成本和过拟合风险,还会增加超参数搜索的复杂度。
隐藏层的输出大小(或者说是隐藏层的神经元数量):隐藏层的每个神经元都会产生一个输出,因此隐藏层的输出大小等于隐藏层中神经元的数量。较大的隐藏层输出大小可能会增加模型的表示能力,但也会增加过拟合的风险。
激活函数、学习率、正则化参数、Batch Size、优化器
更新节点权重
(1)前向传播(Forward Propagation):首先,通过前向传播计算模型的输出。从输入层开始,逐层计算每个隐藏层和输出层的输出,直到得到模型的预测结果。
(2)计算损失(Compute Loss):计算模型在训练数据上的损失,通常使用某种损失函数来度量模型的预测值与真实值之间的差异。
(3)反向传播误差(Backward Propagation of Error):利用反向传播算法计算损失函数对模型参数的梯度。具体地,从输出层开始,逐层计算每个参数的梯度,然后将梯度沿着网络反向传播,直到计算出输入层的参数梯度。
(4)更新参数(Update Parameters):最后,根据计算得到的梯度,使用梯度下降或其他优化算法来更新模型的参数(即节点权重)。通常情况下,参数更新的步长由学习率控制。
Transformer中前馈神经网络的结构设计
在Transformer模型中,位置感知前馈网络(FFN层)通常出现在编码器(Encoder)和解码器(Decoder)的注意力层之后。
不同维度投影的作用
升维线性变换(使模型能够挖掘出更复杂的特征关系)——非线性激活函数(引入非线性因素)——降维线性变换(除冗余信息,浓缩特征,保持输入输出的一致性)
字节面试提问:为什么大模型的世界知识存储在这一部分?
自注意力是“上下文感知”的:它的计算高度依赖于当前的输入序列,作用是动态地、根据上下文来整合信息。
MLP是“位置独立”的知识处理器:MLP对每个词元的处理是独立的,不考虑序列位置。它接收自注意力层输出的、已经融合了上下文信息的向量,然后对其进行一个固定的非线性变换。这个变换本质上是将输入向量“映射”到模型在训练中学到的某个知识或概念上。是一个通用的函数逼近器,适合学习输入特征之间的复杂关联。
激活函数
sigmoid
$$
\sigma \left ( x\right )=\frac{1}{1+{e}^{-x}}
$$

非负,绝对值大时饱和,值域(0,1)。适合用于分类器,现在已经不常用,梯度消失避免使用。
Tanh函数
双曲正切函数,函数定义为
$$
f(x)=tanh(x)=\frac{e^{x}-e^{-x}}{e^{x}+e^{-x}}
$$
值域为 (-1,1) ,形状和sigmoid差不多。比sigmoid好一点,但仍远不如ReLU,梯度消失避免使用。
ReLU
f(x)=max(0,x)
具有更强的非线性拟合能力:没有梯度消失;能够最大化的发挥神经元的筛选能力。目前为止是默认的最好的非线性激活函数,只能在隐藏层中使用。
GELU
高斯误差线性单元激活函数。解决ReLU问题:不光滑,0点不可导。公式很复杂。

softmax
$$
\zeta \left ( x\right )=log\left ( 1+{e}^{x}\right )
$$

软化的max(0,x)函数,非负。
SwiGLU
学习教程:【大模型】激活函数之SwiGLU详解-CSDN博客
主流LLM采用。
Swish函数
无上界有下界、平滑、非单调。
$$
Swish_{\beta}\left ( x\right )=x \sigma \left (\beta x\right )
$$
${\sigma}$是sigmoid函数,β是一个可学习的参数。
当β趋近于0时,Swish函数趋近于线性函数 y = x/2
当β取值为1时,Swish函数是光滑且非单调的,等价于SiLU激活函数。通常取β=1。
当β趋近于无穷大时,Swish函数趋近于ReLU函数
GLU (Gated Linear Unit)
是一种神经网络层,是一个线性变换后面接门控机制(sigmoid函数)的结构。
SwiGLU激活结合了Swish和GLU的特点,提供了一种有效的激活机制。
- 非线性能力:Swish激活函数引入非线性。
- 门控特性:GLU的门控机制允许模型动态地调整信息流,使得模型在处理长序列数据时能够更好地捕捉长距离依赖关系 。
- 梯度稳定性:SwiGLU在负输入区域提供非零的梯度,有助于缓解梯度消失问题,从而提高模型的训练稳定性 。
- 可学习参数:SwiGLU的参数可以通过训练学习,使得模型可以根据不同任务和数据集动态调整,增强了模型的灵活性和适应性 。
- 计算效率:SwiGLU在保持性能的同时,具有较高的计算效率。
激活函数选择的考虑因素
学习教程:设计激活函数需要考虑的因素
1. 非线性
- 重要性:非线性是激活函数的核心特性之一,它允许网络学习复杂的模式和数据表示。
- 考虑点:确保具有足够的非线性,同时避免过于复杂以至于难以优化。
2. 可微性
- 重要性:大多数现代神经网络使用基于梯度的优化算法(如反向传播),激活函数需要是可微的(至少是分段可微的)。
- 考虑点:激活函数应在所有定义域内都可导,或至少在关键点上具有合理的导数行为。
3. 输出范围
- 重要性:激活函数的输出范围影响网络的稳定性和训练效率。例如,饱和的输出值可能导致梯度消失或爆炸问题。
- 考虑点:选择一个输出范围适中、不易导致数值不稳定的激活函数。例如,Sigmoid和Tanh函数易于饱和,而ReLU及其变体则通常具有更宽的活跃区域。
4. 梯度特性
- 重要性:良好的梯度传递是防止梯度消失或爆炸的关键。这直接关系到模型能否有效学习和收敛速度。
- 考虑点:分析激活函数在不同输入值下的梯度表现,确保其能在大部分情况下提供有效的梯度信号。ReLU函数通过单侧抑制解决了部分梯度消失问题,但也可能引发“死亡神经元”现象。
5. 计算复杂度
- 重要性:高效的计算对于大规模网络和实时应用至关重要。
- 考虑点:选择计算简单、资源消耗低的激活函数。例如,ReLU比Sigmoid和Tanh计算更快且更易实现。
6. 参数化与非参数化
- 重要性:一些激活函数可能包含可调参数,这些参数可以通过训练过程进行优化。
- 考虑点:评估是否需要参数化的激活函数以增加模型的灵活性,同时也要注意引入额外参数的潜在风险和复杂性。
7. 鲁棒性与稳定性
- 重要性:面对不同规模和类型的数据集,激活函数应表现出一定的鲁棒性和稳定性。
- 考虑点:测试激活函数在各种条件下的表现,包括极端输入值、噪声数据等,以确保其不会导致模型不稳定或训练失败。
8. 生物学启发与实际应用
- 重要性:某些激活函数的设计受到了大脑神经元行为的启发。
- 考虑点:考虑激活函数是否与特定的应用场景或理论框架相契合,比如脉冲神经网络中的尖峰激活函数。
损失函数
交叉熵损失
主要用于分类任务。均方误差(MSE)主要用于回归任务。交叉熵假定输出是概率分布,
- MSE 假定误差符合高斯分布,适用于连续值的回归问题,而分类任务的输出(类别标签)是离散的
- 交叉熵的梯度与误差成正比,有助于快速修正
- 交叉熵对错误预测的惩罚是非线性的,尤其是对置信度过高的错误预测,MSE 的惩罚是二次型的,对所有误差的处理相对均匀。
一个事件的自信息:
$$
I\left ( x\right )=-logP\left ( x\right )
$$
香农熵(信息熵):量化整个概率分布中不确定性总量。概率的对数(logP(x))的均值。
$$
H\left ( x\right )=-E_{x\sim P}\left [ logP\left ( x\right )\right ]
$$
KL散度:衡量两个分布的差异。
$$
D_{KL}\left ( P\parallel Q\right )=E_{x\sim P}\left [ log\frac{P\left ( x\right )}{Q\left ( x\right )}\right ]
$$
交叉熵:
$$
H\left ( P,Q\right )=-E_{x\sim P}\left [ logQ\left ( x\right )\right ]
$$
$$
H\left ( P,Q\right )=H\left ( P\right )+D_{KL}\left ( P\parallel Q\right )
$$
针对Q最小化交叉熵==最小化KL散度,因为Q不参与H(P)。
代码实现:
1 | import torch.nn as nn |
在大语言模型训练中的应用:
- 概率输出的天然适配
大模型通常通过 softmax 或 sigmoid 输出概率分布,交叉熵直接作用于这些概率,优化目标明确且一致。MSE则需要将离散标签转化为连续值,引入不必要的复杂性。 - 梯度动态的优势
交叉熵的梯度形式(经过 softmax 后)简单且高效,即使网络很深也能保持较好的梯度流。MSE 的梯度在概率值接近边界时趋于0,不利于深层网络的训练。 - 分类任务的本质需求
大模型(如 LLM)常用于语言建模或多分类任务,目标是最大化正确类别的概率并压制其他类别。交叉熵的对数惩罚机制天然契合这一需求。MSE更适合平滑的回归预测。 - 信息论的启发
交叉熵与最大似然估计等价,优化交叉熵等同于最大化数据似然。这种统计一致性在大规模数据集上尤为重要,而 MSE 缺乏类似的理论支撑。
优化器
训练模型需要根据损失函数的梯度方向来更新参数,优化算法是更新的策略,大模型使用的优化算法总的来说都属于梯度下降法。
自适应矩估计Adam
Adam的特点是动量和自适应学习率。
动量是利用了物理中动量的概念,使参数更新时具有一定“惯性”,通过计算梯度的一阶矩估计(均值)来实现。引入动量机制后,Adam 能够在优化过程中更快地收敛。特别是在面对具有陡峭梯度或复杂地形的目标函数时,动量可以帮助参数更新沿着梯度下降的方向更稳定地前进,减少优化过程中的震荡,从而提高收敛速度和优化效果。
自适应学习率是通过计算梯度的二阶矩估计(未中心化的方差)以及对一阶矩估计和二阶矩估计进行偏差修正来实现的。二阶矩估计主要用于衡量梯度的变化幅度,在梯度的变化幅度较大时控制参数更新的步长变小,在梯度的变化幅度较小时控制参数更新的步长变大。在算法的初期,由于梯度的一阶矩和二阶矩的估计是从0开始初始化的,它们在初始阶段会被低估,偏差修正能加速初期的学习过程,并提高整体的优化效率。
更新参数$\theta$的方程组如下:
$$ {m}_{t}={\beta }_{1}\cdotp {m}_{t-1}+\left ( 1-{\beta }_{1}\right )\cdotp {g}_{t} $$ $$ {v}_{t}={\beta }_{2}\cdotp {v}_{t-1}+\left ( 1-{\beta }_{2}\right )\cdotp {g}_{t}^{2} $$ $$ \hat{m}_{t}=\frac{{m}_{t}}{1-{\beta }_{1}^{t}} $$ $$ \hat{v}_{t}=\frac{{v}_{t}}{1-{\beta }_{2}^{t}} $$ $$ {\theta }_{t}={\theta }_{t-1}-\frac{\eta }{\sqrt{\hat{v}_{t}}+\epsilon }\cdotp \hat{m}_{t} $$ 其中,${{g}_{t}}$为t时刻参数梯度,${m}_{t}$和${v}_{t}$分别是梯度的一阶矩估计和二阶矩估计,$\hat{m}_{t}$和$\hat{v}_{t}$则是经过偏差修正后的梯度一阶矩估计和二阶矩估计。${\beta }_{1}$和${\beta }_{2}$是一阶矩估计和二阶矩估计的指数衰减系数,通常是小于但接近1的。$\epsilon$是防止分母为0而添加的平滑项参数,$\eta$是学习率。Adamax
Adamax 是 Adam 的一种变体,改进了 Adam 中对二阶矩估计的计算,从${L}_{2}$范数推广到无穷范数,使得算法在某些情况下更加稳定和高效。Adamax 对动量的计算与 Adam 一致,对二阶矩估计的计算和参数更新方程如下:
$$ {u}_{t}={\beta }^{\infty }_{2}\cdotp {v}_{t-1}+\left ( 1-{\beta }^{\infty }_{2}\right )\cdotp \left | {g}_{t}\right |^{\infty}=max\left ( {\beta }_{2}\cdotp {v}_{t-1},\left | {g}_{t}\right |\right ) $$ $$ {\theta }_{t}={\theta }_{t-1}-\frac{\eta }{{u}_{t} }\cdotp \hat{m}_{t} $$AdamW
AdamW 也是 Adam 的一种变体,改进了 Adam 中参数更新的方式,加入了权重衰减的正则化。传统的 Adam 在进行权重衰减时,是将权重衰减项直接加到梯度中,这种方式在某些情况下会导致训练不稳定,并且与学习率的调整相互干扰。AdamW 提出了一种解耦的权重衰减方法,将权重衰减与梯度更新分开处理,使得权重衰减的调整更加独立和灵活。AdamW 对一阶矩估计和二阶矩估计的计算与 Adam 一致,参数更新方程如下:
$$ {\theta }_{t}={\theta }_{t-1}-\eta\left ( \frac{\hat{m}_{t} }{\sqrt{\hat{v}_{t}}+\epsilon }+\lambda {\theta }_{t-1}\right ) $$ 其中,$\lambda$是权重衰减系数。2.预训练技术
大模型一般分三阶段:
预训练(Pre-Training)——监督微调(SFT)——人类反馈强化学习(RLHF)
2.1 数据处理
数据获取方法
公开数据集的使用
数据质量评估指标

常见网络爬虫技术
数据清洗技术
文本去重:MinHash
文本去重算法:Minhash/Simhash/Klongsent - 知乎
基本原理:在A∪B这个大的随机域里,选中的元素落在A∩B这个区域的概率,这个概率就等于Jaccard的相似度。
是一种用于估计两个集合相似度的概率算法。在文本去重领域,它通过将文本转换为特征集合,然后利用哈希函数随机选择特征集合中的最小哈希值来估计两个文本的Jaccard相似度。
最小哈希函数:对一组列向量的行进行同样的随机排列,重排后,每一个列向量的第一个非零元素的行号就是它的最小哈希函数值。直观上来说,如果两个文本完全重复,那么不论如何重排,两个文本对应的最小哈希函数值都应该是一样的。
最小哈希函数将原始超高维的稀疏向量转化为低维的稠密向量,降低了计算的空间复杂度。对转换后的稠密向量进行分段索引,缩小潜在相似文本范围,降低了计算的时间复杂度。
训练数据配比策略
百度面试提问:代码、数学、通用知识问答等各种占比多少比较合理?
需要取决于模型用途,并在实践中寻找效果最佳的配方,参考 LLaMA 的配比(论文):
- Common Crawl: 67.0%
- C4: 15.0%
- GitHub: 4.5%
- Wikipedia: 4.5%
- 书籍: 4.5%
- arXiv: 2.5%
- 其他: 2.0%
2.2 预训练流程
训练策略
大模型预训练中超参数的设置和用途(见1.3.1.1超参数)
提前停止
Early Stopping :当连续若干个训练周期(Epoch)内验证性能不再改善时,提前终止训练。
预热
Warmup:在训练初期逐步增加学习率,避免模型刚开始训练时因过高的学习率导致梯度不稳定或损失震荡。大型模型常用。代码:torch.optim.lr_scheduler中的相关调度器。
学习率衰减
Learning Rate Decay:在训练过程中逐渐降低学习率,使得模型在接近最优解时能够以更细致的步幅调整参数。
- 余弦衰减: 最流行的策略。学习率从峰值按余弦函数平滑下降到0,使得训练末期能更精细地收敛到最优点。
- 线性衰减: 另一种简单有效的策略。
预训练优化
了解各个策略如何保证训练稳定性。
解决AI加速芯片内存限制,并运行大Batch size的一种方法是将数据Sample的Batch拆分为更小的Batch,叫做Mini-Batch。这些小Mini-Batch可以独立运行,并且在网络模型训练的时候,对梯度进行平均或者求和。
梯度累积
设置批大小的一种策略。按顺序执行Mini-Batch,同时对梯度进行累积,累积的结果在最后一个Mini-Batch计算后求平均更新模型变量。使用梯度累积的时候需要把学习率适当放大。
混合精度训练
- 使用
FP16(半精度浮点数)进行前向和反向传播,大大减少了显存占用并加快了计算速度。 - 同时保留一个
FP32的主参数副本用于更新,以防止FP16下的精度损失和梯度下溢问题。这是通过NVIDIA的 AMP 工具自动实现的。
模型并行
- 张量并行: Tensor Parallelism,将模型的权重矩阵切分到多个GPU上,在单层内进行并行计算(如Megatron-LM)。极大地减少了单个GPU的显存占用。
- 流水线并行: Pipeline Parallelism,将模型的不同层分布到多个GPU上。一个批次的数据被分成多个微批次,像流水线一样在不同GPU间传递。
数据并行
Data Parallelism,将批量数据分到多个GPU上,每个GPU有完整的模型副本。
混合并行
现代大模型训练(如GPT-3、PaLM)都是3D并行,即同时使用数据并行、张量并行和流水线并行,以应对万亿参数级别的模型。
权重初始化
GPT/GPT-2初始化:将残差连接层和Embedding层按一个缩小的因子(如 1/sqrt(N),N是残差层数)进行初始化。
Xavier初始化:
- 希望初始化的权重值均匀分布,此时要给出权重初始化时的取值上下限。
- 希望初始化的权重是高斯分布,此时要给出权重初始化时的标准差(均值为0)。
T5初始化: 使用“Xavier初始化”的变种,在Transformer块内部进行精细的缩放。
梯度裁剪
当梯度的范数超过某个阈值时,将其缩放回阈值(通常为1.0)内。防止梯度爆炸,稳定训练。
激活检查点
也称为“梯度检查点”或“重计算”。在前向传播时,只保留部分层的激活值(中间结果),其余的在反向传播需要时临时重新计算。这是一种典型的 “时间换空间” 的策略,可以大幅降低显存占用(有时可达60-70%),代价是增加约25%的计算时间。
2.3 结果评估
测评数据集
【大模型评测】常见的大模型评测数据集_mmlu数据集-CSDN博客
MMLU
MMLU(大规模多任务语言理解)是一种新的基准测试,旨在通过仅在零样本和少样本设置中评估模型来衡量预训练期间获得的知识。这使得基准更具挑战性,并且更类似于我们评估人类的方式。该基准涵盖 STEM、人文、社会科学等领域的 57 个学科,难度从初级到高级专业水平不等,既考验世界知识,也考验解决问题的能力。科目范围从数学和历史等传统领域到法律和伦理学等更专业的领域。主题的粒度和广度使基准测试成为识别模型盲点的理想选择。
MMLU 是一个包含了 57 个子任务的英文评测数据集,涵盖了初等数学、美国历史、计算机科学、法律等,难度覆盖高中水平到专家水平,有效地衡量了人文、社科和理工等多个大类的综合知识能力。
IF-EVAL
IFEval(Instruction-Following Evaluation)是一个专门用于评估 大型语言模型(LLMs)指令跟随能力 的基准数据集。其核心特点是使用 可验证指令(verifiable instructions),即可以通过确定性规则(如正则匹配、计数、格式检查)自动判断模型是否遵循指令。
MATH
MATH 是一个由数学竞赛问题组成的评测集,由 AMC 10、AMC 12 和 AIME 等组成,包含 7.5K 训练数据和 5K 测试数据。
评估指标
F1 score

EM
EM (Exact Match) 指标可被译为确切匹配或绝对匹配,完全匹配时(生成的答案与参考答案完全相同,字符级匹配),EM值为1,不完全匹配时,EM值为0。EM是一种比较严格的匹配,其衡量预测答案是否与标准答案完全一致。匹配的衡量方式比较呆板,可以设定一个阈值,来衡量完全匹配这个概念。
BLEU
(Bilingual Evaluation Understudy)是机器翻译质量评估中最广泛使用的自动化评测指标之一。BLEU通过比较机器翻译的结果与一个或多个参考译文之间的相似度来衡量翻译质量。主要是基于精确率(Precision)的。比较候选译文和参考译文里的 n-gram 的重合程度,通常取N=1~4,再加权平均。分数越接近1,说明翻译的质量越高。
ROUGE
(Recall-Oriented Understudy for Gisting Evaluation)专注于召回率(关注有多少个参考译句中的 n- gram出现在了输出之中)而非精度,分数越接近1,说明生成文本与参考文本匹配度越高。很大程度上是为了解决NMT(神经网络机器翻译)的漏翻问题(低召回率)。
2.4 增量预训练:领域知识
要想大模型有领域知识,得增量预训练。是在预训练后进行的额外步骤,仍然属于预训练步骤。通过新数据或新任务进一步优化模型参数或者针对特定需求对已有基座模型进行定向增强。
3.后训练技术
3.1 监督微调(SFT)
训练目标:实现模型与人类意图对齐。最大化给定指令和输入条件下,目标回答的似然概率。在计算损失时,通常只计算output部分(即答案)的损失。这迫使模型专注于学习如何生成正确的答案,而不是记住指令。通常比预训练“温和”得多,学习率小1-2个数量级,训练轮数较小。
学习率设置策略(见2.2.1训练策略)
腾讯面试提问:SFT与预训练过程中loss计算有什么不同?
[ 屏蔽语言模型(MLM)和因果语言模型(CLM) ]
特征 预训练 对齐 (SFT) 目标 学习通用语言表示 迁移到特定任务 数据 海量未标注数据 高质量标注数据 Loss函数 自监督学习 (MLM, CLM) 监督学习 (Cross-Entropy, MSE) Loss特点 数值较大,关注语言理解 数值较小,关注任务表现
基础微调技术
全参数微调
(Full Parameter Tuning),全量微调(Full Fine-tuning),更新模型所有参数。
高效参数微调
LORA
低秩自适应微调。可以说,适配器通过为权重加入残差的方式进行微调。将参数量巨大的权重矩阵分解,映射到r维的潜在空间里进行参数更新,再映射回大维度矩阵。
QLORA
QLoRA的工作有三个,第一个工作是结合了分位数量化和分块量化的4位标准浮点数量化(4-bit NormalFloat Quantization)。第二个工作是对模型进行两次量化的双重量化(Double Quantization),它的第二次量化只作用在第一次量化产生的量化常数上,可以进一步节约显存占用。第三个工作是分页优化(Paged Optimizer),使用CPU内存代替GPU显存保存部分梯度参数。
Prefix Tuning
在模型输入前添加一个连续的且任务特定的向量序列称之为prefix,添加到所有的transformer层,固定PLM的所有参数,只更新优化特定任务的prefix。
直接更新多个虚拟token的参数效果不稳定,因此在Prefix层加了MLP,分解成了更小的embedding层 更大的MLP层。原始的embedding层参数是n_prefix emb_dim,调整后变为n_prefix * n_hidden + n_hidden * emb_dim。训练完成后这部分就不再需要只保留MLP输出的参数进行推理即可。
P-Tuning
大模型参数高效微调技术原理综述(三)-P-Tuning、P-Tuning v2 - 知乎
相比Prefix Tuning,加入一种连续可微的virtual token,但仅限于输入层,没有在每一层都加;另外,virtual token的位置也不一定是前缀,插入的位置是可选的。
P-TuningV2
利用深度提示优化,在每一层都加入了Prompts tokens作为输入,而不是仅仅加在输入层。
Adapter Tuning
在神经网络模块基础上添加一些残差模块,并只优化这些残差模块,由于残差模块的参数更少,因此微调成本更低。
3.2 人类偏好对齐
RLHF技术
RLHF是什么?一文说清RLHF(人类反馈强化学习)的概念和实现过程 - 知乎
大模型面试题剖析:大模型训练关键技术解析(从 RLHF 、RLAIH、DPO到 SFT)
人类反馈强化学习(Reinforcement Learning from Human Feedback)是一种结合了强化学习(Reinforcement Learning,RL)和人类反馈的机器学习方法。适用于那些难以通过传统监督学习方法获得高质量标签数据的情况。
数据构建过程
在实际操作中,首先需要收集人类反馈。这可以通过不同方式进行,如让人类观察代理的行为并打分,或者直接对错误的行为进行更正。
使用收集到的数据来建立或优化奖励模型。这可能涉及到机器学习或深度学习技术,用以从人类反馈中提取有效信息并将其转化为可以量化的奖励信号。
奖励模型训练过程
RLHF是一个迭代过程。代理根据当前的奖励模型进行学习和行动,然后根据新的人类反馈来更新奖励模型。这个过程不断重复,以逐渐提升代理的性能。
第一步:监督微调(SFT)
这相当于给AI一些示范,告诉它”这样回答是好的”。工程师们会收集高质量的问答对,让模型通过模仿学习基本的回答方式。
第二步:建立奖励模型(RM)
这一步要训练一个能”评分”的模型。人类标注者会对同一问题的不同回答进行比较和排序,然后用这些数据训练一个能预测”人类会更喜欢哪个回答”的模型。
第三步:强化学习(RL)
最后,利用第二步训练的奖励模型作为指导,对语言模型进行优化。每当模型生成一个回答,奖励模型就会给出评分,模型根据这个信号不断调整自己的策略,逐渐生成更符合人类偏好的内容。
PPO
近端策略优化,Open AI采用。
通过强化学习让模型主动朝着高奖励的方向优化。
- 从提示词数据集中选取一个全新的提示词,确保训练的多样性。
- 使用第一步训练好的监督策略模型来初始化PPO模型,让PPO模型具备基础的生成能力。
- PPO 模型根据新提示词生成一个完整的输出(如故事)。
- 调用第二步训练好的奖励模型,对这个新生成的输出进行评估,计算出对应的奖励值。
- 利用 PPO 算法,结合奖励模型给出的奖励值,对 PPO 模型的策略进行更新。
PPO 算法的核心优势在于,它通过限制每次策略更新的幅度,避免模型因更新幅度过大而导致训练不稳定,能够在复杂的决策任务中,稳步提升模型生成高质量输出的能力,经过多轮迭代后,模型的输出质量会得到显著提升。
DPO
直接偏好优化,是跳过奖励模型的 “高效捷径”,通过直接利用人类的偏好数据来优化模型,省去了奖励模型的构建环节。
核心在于构建一个包含人类偏好的数据集,每个数据对由一个提示词和两个可能的输出组成,其中一个是人类首选的输出,另一个是人类认为不受欢迎的输出。
例如,对于提示词 “解释什么是人工智能”,首选输出可能是逻辑清晰、通俗易懂且涵盖核心概念的解释,而不受欢迎的输出则可能是内容混乱、遗漏关键信息的解释。
模型训练过程中,DPO 的目标非常明确:最大化模型生成首选输出的概率,同时最小化生成不受欢迎输出的概率。这一过程可以看作是一个二分类问题,模型需要学习区分首选输出和不受欢迎输出的特征,进而调整自身的参数。
与 RLHF 相比,DPO 无需花费大量精力构建和训练奖励模型,不仅降低了技术复杂度,还减少了训练过程中的计算资源消耗,在一些对训练效率要求较高的场景中,具有显著的优势。
此外,在 DPO 的基础上,还衍生出了组相对策略优化(GRPO)技术。GRPO 进一步扩展了偏好数据的形式,不再局限于单个提示词对应两个输出的形式,而是允许一个提示词对应一组输出,并对这组输出进行整体的偏好排序,从而让模型能够学习到更复杂的人类偏好关系,进一步提升模型的输出质量。
前沿对齐算法
IPO(Identity Preference Optimization):通过在损失函数中增加一个正则化项,直接惩罚奖励差距过大,从而鼓励模型进行更温和、更泛化的优化。
KTO(Kahneman-Tversky Optimization):不需要成对的偏好数据,只需要知道一个回答是“可取的”还是“不可取的”即可。它基于前景理论,将“可取”的样本拉向模型分布,同时将“不可取”的样本推远。
ORPO(Odds Ratio Preference Optimization):将偏好优化直接集成到SFT阶段。在标准SFT的损失函数上增加了一个额外的偏好损失项,增加被偏好回答的几率,降低被拒绝回答的几率。
4.推理加速
4.1 框架应用
DeepSpeed
ZeRO
零冗余优化器,是数据并行的增强版。它将一些信息在数据并行进程间进行分区,而不是每个进程都保留一份完整副本。
ZeRO1:优化器状态
ZeRO2:优化器状态和梯度
ZeRO3:优化器状态、梯度和模型参数
ZeRO-Offload: 将部分数据(如优化器状态)从GPU显存卸载到CPU内存,从而在单个GPU上训练更大的模型。
ZeRO-infinity:在 ZeRO-Offload 的基础上进一步优化。
- 将和ZeRO的结合从ZeRO-2延伸到了ZeRO-3,解决了模型参数受限于单张GPU内存的问题。
- 解决了 ZeRO-Offload 在训练 batch size 较小的时候效率较低的问题。
- 除 CPU 内存外,进一步尝试利用 NVMe 的空间。
Megatron-LM

(各种并行技术见2.2.2)
Megatron模型并行策略:综合应用了数据并行,张量并行(Tensor Parallelism)和流水线并行
4.2 性能优化算法
KV Cache技术
仅在decoder进行,为了避免重复计算历史 Key 和 Value 向量,推理系统将它们缓存下来,称为 KV Cache(Key-Value 缓存)。节省了对于键(Key)和值(Value)的重复计算,显著提升推理效率。
前沿的KV Cache算法。
注意力优化
FlashAttention
一种革命性的IO感知算法,通过精巧的核函数实现,避免在GPU高速显存中存储巨大的注意力矩阵,从而显著降低内存占用并提升计算速度。核心原理是通过将输入分块并在每个块上执行注意力操作,从而减少对高带宽内存(HBM)的读写操作。
FlashAttentionV2
进一步优化了性能,已成为训练长上下文模型的标配。不需要在全局内存上实现 X 和 A 矩阵,而是将整个注意力计算融合到单个 CUDA 内核中。
pageAttention
vLLM 核心技术 PagedAttention 原理详解-阿里云开发者社区
为了解决 KV Cache 内存管理中的高占用、严重碎片和复用困难等问题,vLLM 提出的一种全新的注意力机制。核心思想借鉴自操作系统中的虚拟内存分页机制。
- KV Cache 被切分为固定大小的 block:PagedAttention 将每个序列的 KV Cache 切分为固定大小的 block(默认是 16 个 token),每个 block 存储若干个 token 的 Key 和 Value 向量。这种设计统一了内存分配粒度,使系统能够以更标准化的方式管理 KV Cache 的分配与回收,从而提升内存复用效率,并有效减少内存碎片。
- block 可以存放在非连续的物理内存中:与传统的 Attention 不同,PagedAttention 不再要求这些 KV 向量在内存中连续排列,而是通过逻辑 block 与物理 block 的映射,实现非连续存储。映射关系由 block table 维护,它类似于操作系统中的页表,用于记录每个逻辑 block 对应的物理内存位置,确保模型在推理过程中可以正确读取所需的 KV Cache。
- 支持灵活的分配与释放,以及共享机制:PagedAttention 支持按需分配和回收 block,并允许多个序列共享 block。PagedAttention 使用了 copy-on-write(CoW)机制,允许多个生成样本共享大部分输入 prompt 的 KV Cache,只有当某个分支需要写入新 token 的 KV 数据时,系统才会将相关 block 复制到新的物理位置,从而在保证数据隔离的同时极大地节省显存资源,提升推理效率与吞吐量。
4.3 知识蒸馏
知识蒸馏(Knowledge Distillation):一篇从核心原理到前沿应用的完整指南 - 知乎
Knowledge Distillation,为了在不显著牺牲性能的前提下,让模型变得更小、更快、更易于部署。利用一个较大、较准确的模型的预测结果来指导一个较小、较简单的模型学习。这种方法可以减小模型的复杂度,提高模型的泛化能力和推理速度。
暗知识
传统的模型训练,是让模型直接从“硬标签”(Hard Labels)中学习。非黑即白的监督方式。
软标签:大网络在每一层卷积后输出的特征映射。即每种分类结果的概率分布。
概率值包含比硬标签更多的信息:主要判断、相似性信息、不相关性信息。
通过在Softmax函数中加入温度T,我们可以“软化”教师的输出概率,得到所谓的“软标签”(Soft Labels)。随着温度T的升高,教师模型的输出概率分布从尖锐变得平滑,从而让负标签中的“暗知识”更容易被学生模型学习。
损失函数
由两部分组成。用一个超参数来平衡两个损失的重要性。
学生损失:学生模型的最终预测和真实标签分布之间的交叉熵。
蒸馏损失:学生模型预测的软标签和教师模型的软标签的概率分布之间的距离,即KL散度。
特征式知识蒸馏
强制学生模型直接模仿教师模型在某些中间层输出的特征图谱。
信息同样渗透在网络处理信息的整个过程,即中间层的特征表示中。应该让学生模型学习“思考过程”。
- 流式解题过程 (Flow of Solution Procedure, FSP):计算不同层特征图之间的格拉姆矩阵(Gram Matrix),该矩阵捕捉了特征通道之间的相关性。蒸馏的目标是让学生模型的FSP矩阵与教师模型的 FSP 矩阵保持一致。
- 注意力迁移 (Attention Transfer):在 Transformer 等注意力模型中,注意力矩阵本身就是一种宝贵的关系知识,它体现了模型在处理序列时,不同部分之间的依赖关系。可以让学生模型的注意力图谱去模仿教师模型的注意力图谱。
- 角度蒸馏 (Angle-wise Distillation):不直接匹配特征向量,而是匹配不同样本特征向量之间的角度或距离关系。这保留了数据点在教师特征空间中的几何结构。
4.4 模型量化
量化(Quantization):将浮点型参数转换为更小的整数或定点数,从而减小模型大小和内存占用,提高计算效率。
模型量化(Model Quantization):将模型的权重和激活函数的精度从32位浮点数减少到更小的位数, 从而减小模型的大小和计算开销。
常用方法:
1.量化权重和激活值,将它们转换为整数或小数。
2.使用更小的数据类型,例如8位整数、16位浮点数等。
3.使用压缩算法,例如Huffman编码、可逆压缩算法等
大模型(LLM)的量化技术Quantization原理学习-CSDN博客
非对称量化
现在 LLM 主要采用的是均匀量化,它又可以分为对称量化、非对称量化。

对称量化中,z=0。
训练后量化PTQ
根据量化的时机,有量化感知训练和训练后量化两条路径。
Post-training quantization,将已经训练好的模型的权重转换为较低的精度,而无需任何再训练。尽管PTQ简单易实现,但由于权重值的精度损失,它可能会略微降低模型的性能。目前针对 LLM 的量化研究都集中在PTQ(LLM.int8(), SmoothQuant, GPT-Q)。
量化感知训练QAT
Quantization Aware Training,首先正常预训练模型,然后在模型中插入“伪量化节点”,继续微调。所谓“伪量化节点”,就是对权重和激活先量化,再反量化。这样引入了量化误差,让模型在训练过程中“感知”到量化操作,在优化 training loss 的同时兼顾 quantization error。
与PTQ不同,QAT在训练阶段集成了权重转换过程。这通常不会明显降低模型性能,但对计算的要求更高。QLoRA就是一种高度使用QAT的技术。(见3.1.2.2)
动/静态量化
对于权重而言,可以在推理前事先计算好量化系数,完成量化。但是激活(即各层的输入)事先是未知的,取决于具体的推理输入,会更加棘手。根据对激活的量化,分为动态与静态量化。
动态量化:是 on-the-fly 的方式,推理过程中实时计算激活的量化系数,对激活进行量化。
静态量化:静态量化在推理前就计算好激活的量化系数,在推理过程中应用。
量化感知微调
一.Yolov8量化感知训练微调(QAT)第一篇:QAT原理和微调训练流程_qat训练-CSDN博客
带量化感知的微调模型和每个epoch后的QAT模型评估。在微调过程中,模型被训练以最小化其量化输出与原始(非量化)模型输出之间的差异。这有助于模型学习在量化效果下保持精度。
4.5 其他模型压缩和加速方法
低秩分解(Low-Rank Decomposition):通过将一个较大的权重矩阵分解为几个较小的权重矩阵,从而减少计算开销。
蒸馏对抗网络
Distillation Adversarial Networks,在知识蒸馏的基础上,通过对抗训练来提高模型的鲁棒性和抗干扰能力。
可以生成一个假的数据集,然后用这个假数据集作为教师和学生公用的数据集,并在上面做蒸馏操作。
生成器损失函数:
- one-hot损失函数:交叉熵,使教师模型的输出靠近做成one-hot向量的概率最大的类别。
- 激活损失函数:用L1范数来衡量激活神经元的个数,使这个数量尽可能多。如果生成的图像和真实图像相似,那么他在中间层被激活的神经元也应该更多。
- 信息熵损失函数:最大化生成类别信息熵。生成的图片应该在每一个类别上的分布都是均衡的,此时信息量也是最大的。
卷积分解
【论文解读】Inception-v2/v3:利用卷积分解等手段进一步优化Inception架构 - 知乎
Convolution Decomposition,将卷积层分解成几个更小的卷积层或全连接层,以减小计算开销。
将大卷积核分解为小卷积核(VGG)
例如,一个
5 × 5的卷积可以被分解为两个堆叠的3 × 3卷积,能节省约28%的计算量。使用不对称卷积分解空间卷积
可以将
3 × 3的卷积分解为3 × 1和3 × 1的卷积序列,计算量降低了约33%。
层次化剪枝(Layer-wise Pruning):对模型的不同层进行不同程度的剪枝,以实现更高效的模型压缩和加速。
参数剪枝(Parameter Pruning):删除模型中冗余的参数,减少模型的大小。通常情况下,只有很少一部分参数对模型的性能贡献较大,其余参数对性能的贡献较小或没有贡献,因此可以删除这些冗余参数。
网络剪枝(Network Pruning):删除模型中冗余的神经元,从而减小模型的大小。与参数剪枝不同, 网络剪枝可以删除神经元而不会删除对应的参数。
网络剪裁(Network Trimming):通过对模型中一些不重要的连接进行剪裁,从而减小计算开销。
5.常见大模型架构
5.1 经典架构
大模型架构
了解常见的大模型架构如
GPT系列、
LLaMA系列、
GLM系列、
Qwen系列、
DeepSeek系列等。
对比他们之间的差异,以及每个系列模型演变过程。
模型族特点:对比 GPT、BERT、T5、LLaMA 等模型的方向性、典型应用、参数量级和训练目标等差异。
5.2 创新架构
Mixture of Experts
了解混合专家模型架构,与Dense架构有啥优劣
Mamba
RWKV
了解Mamba.RWKV等前沿架构,它们的创新之处。与Transformer架构的优劣对比。
6.大模型应用
6.1 检索增强生成(RAG)
检索技术。掌握检索算法(如HNSW。等)、向量数据库选择、Embedding模型微调、文档切分算法、文本相似度计算方法、Query理解、意图识别、混合检索等技术。
增强策略。如何实现多轮问答、了解RAG中的提示词工程、熟悉相关重排算法原理、如何利用专业领域知识针对性微调底座大模型等。
6.2 Agent
框架与工具。了解ReAct范式,相关工具使用等。



