组会 | 大语言模型 + 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 或更低);
  • 该方法大幅减少了模型的内存占用,同时保持了较高的计算效率。
相关推荐
铭瑾熙29 分钟前
深度学习之人脸检测
人工智能·深度学习
白光白光1 小时前
量子卷积神经网络
人工智能·神经网络·cnn
陈苏同学3 小时前
机器翻译 & 数据集 (NLP基础 - 预处理 → tokenize → 词表 → 截断/填充 → 迭代器) + 代码实现 —— 笔记3.9《动手学深度学习》
人工智能·pytorch·笔记·python·深度学习·自然语言处理·机器翻译
sp_fyf_20243 小时前
【大语言模型】ACL2024论文-20 SCIMON:面向新颖性的科学启示机器优化
人工智能·深度学习·机器学习·语言模型·自然语言处理·数据挖掘
宋138102797203 小时前
SouVR Feedback force7 力反馈设备
人工智能·机器人·vr
我叫白小猿3 小时前
【大模型-智能体】AutoGen Studio测试和导出工作流程
人工智能·python·workflow·工作流·智能体·autogen
CopyLower4 小时前
AI赋能电商:智能购物推荐、会员分类与商品定价的创新探索
人工智能·分类·数据挖掘
界面开发小八哥4 小时前
界面控件DevExpress WinForms v24.2新功能预览 - 人工智能(AI)
人工智能·.net·界面控件·devexpress·ui开发
2zcode4 小时前
基于YOLOv8深度学习的独居老人情感状态监护系统(PyQt5界面+数据集+训练代码)
人工智能·深度学习·yolo