组会 | 大语言模型 + LoRA

目录


⚠️ 本博客仅记录了组会里提及的内容

1 大语言模型概述

1.1 模型的架构

模型的训练过程包含以下步骤:

  1. 标记化:将文本划分为更小的片段,即标记,便于模型处理;
  2. 嵌入化:将标记转换为向量,以捕捉语义信息;
  3. 前向传播:向量在模型中逐层传递并计算输出,直到生成最终的预测值;
  4. 计算损失:使用损失函数计算预测值与真实值之间的差距;
  5. 反向传播:根据链式法则,计算损失函数相对于模型中每个参数的梯度;
  6. 优化器:根据计算出的梯度以及所采用的策略来更新模型的参数;
  7. 训练迭代:模型多次遍历数据,每次遍历称为一个 epoch,如此循环直至训练收敛。

1.2 模型的细节:标记化和嵌入化

标记化的步骤包括:

  1. 将输入文本分解为单个句子;
  2. 将句子进一步分解为标记,即一个小而有意义的单位。

说明:可以根据实际任务需求设置 "标记" 的大小,即它不仅可以是单词,还可以细分到标点,甚至是字母。

嵌入化的步骤包括:

  1. 将标记映射到词汇字典中的唯一 ID;
  2. 将 ID 转换为模型可以理解的向量。

注意:正如上周组会所提到的,Embedding 的过程中需要考虑上下文语境。比如,我们希望使用不同的向量来表示 "an apple and an orange" 和 "an apple phone" 中的 "apple" 一词,这是因为 "apple" 在两个句子中的语义不同。

1.3 模型的核心

语言模型的核心由编码器、解码器和注意力机制组成:

  • 编码器:处理输入文本并生成丰富的语义表示;
  • 解码器:利用编码器的表示生成输出文本,通常以自回归方式逐步预测;
  • 注意力机制:帮助模型在生成输出文本时,关注于输入文本中最相关的部分。

我的理解:编码器负责转换为模型理解的形式,解码器负责转换为人类理解的形式。

2 多头注意力机制

这里回顾多头注意力机制,貌似是因为 LoRA 从中汲取了灵感 😇

先计算每个头,公式如下:

h e a d i = A t t e n t i o n ( Q W i Q , K W i K , V W i V ) head_i=\mathrm{Attention}(QW_i^Q, KW_i^K, VW_i^V) headi=Attention(QWiQ,KWiK,VWiV)

再拼接所有头,公式如下:

M u l t i H e a d ( Q , K , V ) = C o n c a t ( h e a d 1 , . . . , h e a d n ) W O \mathrm{MultiHead}(Q,K,V)=\mathrm{Concat}(head_1,...,head_n)W^O MultiHead(Q,K,V)=Concat(head1,...,headn)WO

我们可以通过牺牲模型的表达能力,来换取更快的计算速度。

上图将 Q Q Q 和 K K K 分成四部分,而我们可以只将 Q Q Q 和 K K K 分成两部分。虽然 Q i Q_i Qi 和 K i K_i Ki 的个数减少了,但通过与个数保持不变的 V i V_i Vi 相乘,仍然可以保持 h e a d i head_i headi 的个数保持不变。如下图所示:

我的理解:本质上是减少了 W i Q W_i^Q WiQ 和 W i K W_i^K WiK 的个数。

3 LoRA 概述

3.1 冻结部分模型参数

之所以介绍本小节内容,是因为 LoRA 有用到

  • 目的:优化内存使用
  • 含义:冻结参数在模型训练过程中不会参与更新
  • 该方式使得我们无需保存冻结参数的梯度,从而减少 GPU 内存的使用

例如,我们可以只保留 Transformer 中最后的线性层作为可训练部分,如下图所示:

虽然该方法减少了内存占用并加快了训练速度,但也限制了模型的表达能力和性能。

3.2 低秩适配(LoRA)

  • 全称:Low-Rank Adaptation
  • 作用:是一种高效的微调方法,旨在减少内存占用和计算资源,同时保持良好的性能表现
3.2.1 核心工作原理:冻结模型参数
  • 在使用 LoRA 时,预训练模型的所有参数将被冻结,即这些参数在微调过程中不会被更新;
  • 其目的是减少内存占用,同时保留预训练模型所具备的知识。
3.2.2 核心工作原理:添加低秩权重矩阵
  • 含义:在模型的某些 "冻结模型参数" 矩阵上,添加一个新的、可训练的低秩矩阵;
  • 其中低秩矩阵是两个较小的矩阵 A A A 和 B B B 的乘积结果,即: Δ W = A × B \Delta W=A\times B ΔW=A×B;
  • 由于矩阵 A A A 和 B B B 的维度较小,因此能够显著减小可训练参数的数量。

上图中超参数 r r r 的取值为 8 8 8

超参数: r r r、 B e t a = A l p h a / r \mathrm{Beta}=\mathrm{Alpha}/r Beta=Alpha/r

B e t a \mathrm{Beta} Beta 参数的作用:

  • 使得模型能够学习对新领域的适配方法,同时又不会偏离原始模型太远;
  • 防止过拟合,同时避免遗忘预训练模型已经学到的知识。

GPT:Beta 参数用于控制低秩矩阵对原始模型输出的影响程度。如果 Beta 值较大,那么低秩矩阵的影响会更显著;如果 Beta 值较小,那么其影响则会减弱。

3.3 QLoRA

  • QLoRA 在 LoRA 的基础上,进一步对模型参数进行了量化;
  • 即在微调前,将模型参数从高精度(如 float32 或 float16)量化到低精度(如 float8 或更低);
  • 该方法大幅减少了模型的内存占用,同时保持了较高的计算效率。
相关推荐
Ai_easygo10 分钟前
多Agent协作与A2A协议——CrewAI + LangGraph搭建AI协作团队
人工智能
HIT_Weston18 分钟前
151、【Agent】【OpenCode】启动分析(CLI 命令注册)
人工智能·agent·opencode
笑小枫23 分钟前
用 Claude Code 推翻重写笑小枫网站
java·人工智能·spring boot·ai编程
audyxiao00131 分钟前
人工智能顶会AAAI 2026论文分享|SlideBot:用于生成信息丰富、可靠、多模态幻灯片的多智能体框架
人工智能·大模型·aaai·智能体·幻灯片
用户9385156350735 分钟前
Workflow 与 Agent 之争:确定性执行与智能探索的深度剖析
人工智能
阿里云大数据AI技术42 分钟前
阿里云 EMR Serverless StarRocks(Stella 2.2.0) 发布:内表与湖表同时支持向量、全文与 AI Function,一条 SQL 完成多模态检索
人工智能
格林威42 分钟前
工业相机Chunk功能全解析:图像嵌入时间戳、编码器元数据(附堡盟C#代码)
开发语言·人工智能·数码相机·计算机视觉·c#·视觉检测·工业相机
怪奇云呼军1 小时前
闪电智能Voice Agent:ASR 首字延迟和最终识别延迟怎么测?t0-t3 埋点实战
人工智能·科技·ai·语音识别
冬哥聊AI1 小时前
百万行代码里跑Claude Code?三面这题80%的人答不上来
人工智能
甄同学1 小时前
第二十三篇:Tasks系统,Claude Code如何统一管理7种后台任务
人工智能