组会 | 大语言模型 + LoRA

目录

    • 1 大语言模型概述
      • 1.1 模型的架构
      • 1.2 模型的细节:标记化和嵌入化
      • 1.3 模型的核心
    • 2 多头注意力机制
    • 3 LoRA 概述
      • 3.1 冻结部分模型参数
      • 3.2 低秩适配(LoRA)
        • 3.2.1 核心工作原理:冻结模型参数
        • 3.2.2 核心工作原理:添加低秩权重矩阵
      • 3.3 QLoRA


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



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 或更低);
  • 该方法大幅减少了模型的内存占用,同时保持了较高的计算效率。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/476759.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

对象:是什么,使用,遍历对象,内置对象

对象使用: 对象访问:(对象每个属性之间用逗号隔开) 补充:也可以通过 对象名[‘属性名’] 对象方法: 方法名:匿名函数 调用方法不需要控制台打印,只要调用就自动输出值 遍历对象: …

小程序24-滚动效果:scroll-view组件详解

在微信小程序中如果想实现内容滚动,需要使用 scroll-view 组件 scroll-view:可滚动视图区域,适用于需要滚动展示内容的场景,用户可以通过手指滑动或者点击滚动条滚动内容。 scroll-x允许横向滚动scroll-y允许纵向滚动 实现横向…

C++设计模式行为模式———中介者模式

文章目录 一、引言二、中介者模式三、总结 一、引言 中介者模式是一种行为设计模式, 能让你减少对象之间混乱无序的依赖关系。 该模式会限制对象之间的直接交互, 迫使它们通过一个中介者对象进行合作。 中介者模式可以减少对象之间混乱无序的依赖关系&…

AUTOSAR_EXP_ARAComAPI的7章笔记(6)

☞返回总目录 相关总结:ara::com 与 AUTOSAR 元模型的关系总结 7.4 ara::com 与 AUTOSAR 元模型的关系 在本文档中,我们一直在不涉及具体的AP元模型(其清单部分)的情况下解释 ara::com API的思想和机制,AP元模型是正…

LINUX系统编程之——环境变量

目录 环境变量 1、基本概念 2、查看环境变量的方法 三、查看PATH环境变量的內容 1)不带路径也能运行的自己的程序 a、将自己的程序直接添加到PATH指定的路径下 b、将程序所在的路径添加到PATH环境中 四、环境变量与本地变量 1、本地变量创建 2、环境变量创…

MacOS通过X11转发远程运行virt-manager进行虚机分配

今天需要通过本地macbook机器连接远程物理机,执行虚机分配,现有文档仅提供window环境安装,如下整理Mac环境下的安装步骤 操作篇 前提条件 支持x11转发的terminal,我本地使用iTerm2;本地安装XQuartz,作为…

【AI系统】AI 基本理论奠定

虽然 AI 在今年取得了举世瞩目的进展与突破,但是其当前基于的核心理论神经网络等,在这波浪潮开始前已经基本奠定,并经历了多次的起起伏伏。神经网络作为 AI 的前身,经历了以下的发展阶段: 萌芽兴奋期(约 19…

网络安全服务人才发展路线图

到2023年,全球网络安全支出规模将达到1512亿美元(约合10640.4亿元人民币),并将以9.4%的年复合增长率持续增长。与火爆的产业现状相比,中国的网络安全服务人才面临巨大缺口。相关数据显示,我国网络安全人才缺…

STM32 ADC 读取模拟量

问题 我有一个调速开关,模拟量输入,因此需要使用 STM32 读取模拟量,并通过串口输入来调试。串口相关知识参考 STM32 串口输出调试信息。 硬件信息: CubeMX version 6.12.1Keil uVision V5.41.0.0 参考知识 【STM32】HAL库 STM32CubeMX教…

[每周一更]-(第124期):模拟面试|缓存面试思路解析

文章目录 31 为什么 Redis 不立刻删除已经过期的数据?1. Redis 是怎么删除过期 key 的?2. Redis 为什么不立刻删除已经过期的 key?3. Redis 为什么不每个 key 都启动一个定时器,监控过期时间?4. Redis 是如何执行定期删除的?5. 为什么 Redis 在定期删除的时候不一次性把所…

操作系统——揭开盖子

计算机执行时——取指执行 es:bx等于从0x9000开始,到0x90200结束

uni-app 认识条件编译,了解多端部署

一. 前言 在使用 uni-app 进行跨平台开发的过程中,经常会遇到需要针对不同平台或不同环境进行条件编译的情况。条件编译是一种在编译过程中根据指定条件选择不同代码路径的技术,可以帮助我们在不同平台或环境下编写不同的代码,以适应不同的平…

模糊控制系统的设计(取材bilibili_蓝天的季洁)

模糊控制原理和传统控制原理,在框图上的区别实际上只在控制器方面存在差异,将传统的控制器改为了模糊控制器(fuzzy controller)。 通过举例说明,将原有的[0,100]的参数通过隶属函数规则,(类似于…

pytest日志总结

pytest日志分为两类: 一、终端(控制台)打印的日志 1、指定-s,脚本中print打印出的信息会显示在终端; 2、pytest打印的summary信息,这部分是pytest 的默认输出(例如测试结果PASSED, FAILED, S…

向量数据库FAISS之四:向量检索和 FAISS

来自 YouTube 1.相似度搜索的传统方法(Jaccard, w-shingling, Levenshtein) 1.Jaccard 距离 公式 Jaccard ( A , B ) 1 − ∣ A ∩ B ∣ ∣ A ∪ B ∣ \text{Jaccard}(A, B) 1 - \frac{|A \cap B|}{|A \cup B|} Jaccard(A,B)1−∣A∪B∣∣A∩B∣​ 其中, A 和 …

深入探究蓝牙节能技术:SNIFF与HOLD模式

目录 一、概述 1.1. Sniff Mode(嗅探模式/呼吸模式) 1.1.1.定义与目的 1.1.2 工作原理 1.1.3 进入与退出 1.2. Hold Mode(保持模式) 1.2.1. 定义与目的 1.2.2. 工作原理 1.2.3. 进入 1.2.4. 通知机制 二、Sniff mode&a…

Linux驱动开发快速入门——字符设备驱动(直接操作寄存器设备树版)

Linux驱动开发快速入门——字符设备驱动 前言 笔者使用开发板型号:正点原子的IMX6ULL-alpha开发板。ubuntu版本为:20.04。写此文也是以备忘为目的。 字符设备驱动 本小结将以直接操作寄存器的方式控制一个LED灯,可以通过read系统调用可以…

ROS机器视觉入门:从基础到人脸识别与目标检测

前言 从本文开始,我们将开始学习ROS机器视觉处理,刚开始先学习一部分外围的知识,为后续的人脸识别、目标跟踪和YOLOV5目标检测做准备工作。我采用的笔记本是联想拯救者游戏本,系统采用Ubuntu20.04,ROS采用noetic。 颜…

电子电气架构 ---漫谈车载网关

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 所有人的看法和评价都是暂时的,只有自己的经历是伴随一生的,几乎所有的担忧和畏惧,都是来源于自己的想象,只有你真的去做了,才会发现有多快乐。…

@Autowired与构造器注入区别,为什么spring推荐使用构造注入而不是Autowired?

目录 1.简介 2.了解两种注入方式的全过程 2.1 Autowired字段注入 2.2 构造函数注入 3.使用autowired注解注入有以下问题 3.1空指针异常 3.2测试不友好 4.使用Lombok去简化构造函数注入的臃肿代码 5.小结 5.1注解注入 5.2构造函数注入 1.简介 使用Spring开发时&#…