【学习笔记】大模型
ch01 大模型原理
典型的LLM结构
- 输入层:输入文本分词为词元(Token)序列;每个词元进一步映射到对应的Token ID;最终转换为多维数值矩阵。
- 多层Decoder堆叠结构:由多个完全相同的Decoder层堆叠而成。通过逐层计算,模型逐步总结和建模输入序列的深层语义与依赖关系。每个Decoder层的关键组件如下:
- 自注意力(Self-Attention)机制:通过查询(Q)、键(K)、值(V)向量进行注意力计算,并结合因果掩码,保证每个词元只能关注其之前的序列位置,使模型能够建模序列中不同词元之间的语义关系。自注意力机制通常以多头注意力(MHA)、多查询注意力(MQA)、分组查询注意力(GQA)、多头潜在注意力(MLA)等形式实现。
- 位置编码(Positional Encoding):通过引入序列中的词元位置信息,帮助模型理解序列的相对和绝对位置。RoPE方法被广泛使用。
- 前馈网络(Feed-Forward Network, FFN):对经过自注意力机制计算的隐藏状态(Hidden States)进行非线性变换,进一步提取特征和语义。FFN内部通常包含激活函数(例如 SwiGLU),以提高模型的非线性拟合能力,捕捉更复杂的模式。对于采用MoE结构的LLM,FFN部分通常由多个专家网络组成,并通过路由机制动态激活少数专家,从而提升模型的容量和计算效率。
- 归一化(Normalization):采用RMSNorm等层归一化(Layer Normalization)方法,稳定数值计算,提升训练稳定性并加速模型收敛。
- 残差连接(Residual Connection):在每个子层输入和输出之间添加残差连接,确保信息顺畅传递,缓解深层网络中的梯度消失问题,提升模型训练效率。
- 输出层:将Decoder输出的多维隐藏状态通过线性变换映射到全词表的Logits,得到词元候选的概率分布。随后,解码模块根据概率分布,采用不同的解码算法生成最终输出文本。
- 提取最后位置的Logits:推理时只计算最后一个位置的Logits。预测下一个词元仅依赖序列最后一个位置的Logits,因此需要从所有位置的Logits中提取最后一个位置的Logits。
- 解码(Decoding):根据概率分布,应用解码策略(随机采样、或选择最大概率)确定最终预测的下一个词元。例如,在贪婪搜索解码策略下,选择概率最高的词元作为预测结果。
(1)预填充阶段(Prefill):一次性处理完整的输入序列并计算其隐藏状态。随后,模型计算下一个词元的概率分布。
(2)继续生成:模型接续迭代计算,逐步生成其余Token。
模型在每个生成步骤中都需要重复计算相同的前缀。为提升推理效率,通常会采用KVCache等缓存机制来减少冗余计算。
每个词元对应的向量,是通过预训练学习得到的,蕴含了词元的语义信息。
