【大模型基础_毛玉仁】5.3 附加参数法:T-Patcher


目录

    • 5.3 附加参数法:T-Patcher
      • 5.3.1 补丁的位置
        • 1)键值存储体
        • 2)补丁设计
      • 5.3.2 补丁的形式
      • 5.3.3 补丁的实现
        • 1)准确性
        • 2)局部性


5.3 附加参数法:T-Patcher

附加参数法:通过引入可训练的额外参数实现模型知识编辑,在准确性、泛化性等方面表现优异。

其中,T-Patcher作为代表性方法,在Transformer模型的最后一个前馈层中添加"补丁"参数,通过训练这些参数实现特定知识编辑,且不改变原始模型架构。

该方法主要从补丁位置(如前馈层)、补丁形式(参数结构设计)及实现方式(训练策略) 三方面展开。

图 5.9: T-Patcher 方法 (图中紫色图块为补丁)

在这里插入图片描述

.

5.3.1 补丁的位置

T-Patcher选择在Transformer模型最后一个全连接前馈层添加补丁参数,将全连接前馈层视为键值存储体。通过向该层注入少量可训练参数形成新记忆单元,结合精确的激活控制机制,既能针对性修正特定输入的知识,又可避免干扰无关输入。这种设计因FFN结构简单而具备参数高效性,仅需少量参数即可实现有效编辑。

.

1)键值存储体

图 5.10: 键值存储体 (省略激活函数)
在这里插入图片描述

包含:键向量矩阵 W f c = [ k 1 , k 2 , . . . , k n ] W_{fc} = [k_1, k_2, . . . , k_n] Wfc=[k1,k2,...,kn] 及其偏置向量 b k b_k bk、激活函数 σ 和值向量矩阵 W p r o j = [ v 1 , v 2 , . . . , v n ] W_{proj} = [v_1, v_2, . . . , v_n] Wproj=[v1,v2,...,vn] 及其偏置向量 b v b_v bv

  • 键向量矩阵​:对应输入文本中的特定模式。

  • 值向量矩阵​:关联模型输出的概率分布。

查询过程:输入 Token 的查询向量 q 与 Wfc​ 相乘计算激活值向量 a,然后与 Wproj​ 相乘得到输出结果。

a = σ ( q ⋅ W f c + b k ) F F N ( q ) = a ⋅ W p r o j + b v \begin{aligned} a = \sigma(q \cdot W_{fc} + b_k) \\ \\ FFN(q) = a \cdot W_{proj} + b_v \end{aligned} a=σ(qWfc+bk)FFN(q)=aWproj+bv

隐藏层维度:代表模型“记忆”的文本模式数量。

.

2)补丁设计
  • 位置:在 Transformer 模型的最后一个全连接前馈层添加补丁。

  • 作用:通过添加少量参数(键值对)插入新事实信息,实现模型编辑。

  • 优势:参数高效,针对性强,避免干扰无关输入。

.

5.3.2 补丁的形式

补丁的形式如下图所示,主要包括一个键向量 k_p、一个值向量 v_p 和一个偏置项 b_p。

图 5.11: 补丁的形式
在这里插入图片描述

在添加补丁后,全连接前馈层的输出被调整为:

[ a a p ] = σ ( q ⋅ [ W f c k p ] + [ b k b p ] ) F F N p ( q ) = [ a a p ] ⋅ [ W p r o j v p ] ⊤ + b v = F F N ( q ) + a p ⋅ v p \begin{aligned} [a \quad a_p] &= \sigma(q \cdot [W_{fc} \quad k_p] + [b_k \quad b_p]) \\ \\ FFN_p(q) &= [a \quad a_p] \cdot [W_{proj} \quad v_p]^{\top} + b_v = FFN(q) + a_p \cdot v_p \end{aligned} [aap]FFNp(q)=σ(q[Wfckp]+[bkbp])=[aap][Wprojvp]+bv=FFN(q)+apvp

其中,

  • a_p 为补丁的激活值,代表补丁对输入查询的响应程度。

  • 添加补丁后,a_p 与值向量 v_p 的乘积会形成偏置项叠加到全连接前馈层的原始输出之上,以调整模型的输出。

补丁就像一个很小的修正器,只会被相关的输入查询激活。

.

5.3.3 补丁的实现

T-Patcher 为每个需要编辑的 Token 都添加一个补丁,从而精确针对每个编辑需求进行调整。

最后,T-Patcher 从编辑的准确性局部性两个角度出发对损失函数进行设计。接下来对其损失函数进行介绍。

.

1)准确性

对于补丁的准确性, T-Patcher 主要关注两个方面:

  • (1)确保补丁可以在目标输入下可以被激活;

  • (2)一 旦被激活,补丁应该能够准确地调整模型输出以符合预期的结果。

为此,T-Patcher 设计了准确性损失 L a c c L_{acc} Lacc,它包括激活损失 l a l_a la编辑损失 l e l_e le

L A c c = l a ( k p , b p ) + α l e ( k p , v p , b p ) L_{Acc} = l_a(k_p, b_p) + \alpha l_e(k_p, v_p, b_p) LAcc=la(kp,bp)+αle(kp,vp,bp)
l a ( k p , b p ) = exp ⁡ ( − q e ⋅ k p − b p ) l_a(k_p, b_p) = \exp(-q_e \cdot k_p - b_p) la(kp,bp)=exp(qekpbp)
l e ( k p , v p , b p ) = C E ( y e , p e ) l_e(k_p, v_p, b_p) = CE(y_e, p_e) le(kp,vp,bp)=CE(ye,pe)

其中,

  • q e q_e qe 是编辑样本在全连接前馈层处的查询向量,

  • y e y_e ye 是该补丁对应的目标 Token,

  • p e p_e pe 是模型在补丁作用下的预测输出,

  • CE 是交叉熵损失函数,

  • α 是激活损失 l a l_a la 的权重。

激活损失l_a

  • 激活损失确保补丁在目标输入下被激活。

  • 通过最大化编辑样本的查询向量 q_e 对补丁的激活值,确保补丁对特定编辑需求的响应。

编辑损失l_e

  • 编辑损失确保补丁在被激活后能够将模型输出调整为目标 Token。

  • 使用交叉熵损失函数评估补丁调整后的输出 p_e 与目标 Token y_e 的一致性,确保补丁的调整正确实现预期的修正效果。

.

2)局部性

为了保证编辑的局部性,T-Patcher 设计了特定的损失函数来限制补丁的激活范围,确保其只在相关的输入上被激活。具体而言,T-Patcher 通过以下方式实现:

记忆数据集 D M D_M DM:随机保留先前处理过的与当前编辑目标无关的查询向量,组成记忆数据集 D M = q i i = 1 ∣ D M ∣ D_M = {q_i}_{i=1}^{|D_M|} DM=qii=1DM

记忆损失 L m L_m Lm:定义了记忆损失 L m L_m Lm 来保证编辑的局部性,该损失包含 l m 1 l_{m1} lm1 l m 2 l_{m2} lm2 两项:

  • l m 1 l_{m1} lm1:确保记忆数据集中的查询向量在补丁上的激活值低于阈值 β \beta β

  • l m 2 l_{m2} lm2:确保记忆数据集中的查询向量与编辑样本的查询向量 q e q_e qe 在补丁上的激活差异低于阈值 γ \gamma γ

L m = l m 1 ( k p , b p ) + l m 2 ( k p , b p , q e ) L_m = l_{m1}(k_p, b_p) + l_{m2}(k_p, b_p, q_e) Lm=lm1(kp,bp)+lm2(kp,bp,qe)
l m 1 ( k p , b p ) = 1 ∣ D M ∣ ∑ i = 1 ∣ D M ∣ ( max ⁡ ( q i ⋅ k p + b p − β , 0 ) ) l_{m1}(k_p, b_p) = \frac{1}{|D_M|} \sum_{i=1}^{|D_M|} (\max(q_i \cdot k_p + b_p - \beta, 0)) lm1(kp,bp)=DM1i=1DM(max(qikp+bpβ,0))
l m 2 ( k p , b p ) = 1 ∣ D M ∣ ∑ i = 1 ∣ D M ∣ ( max ⁡ ( ( q i − q e ) ⋅ k p + b p − γ , 0 ) ) l_{m2}(k_p, b_p) = \frac{1}{|D_M|} \sum_{i=1}^{|D_M|} (\max((q_i - q_e) \cdot k_p + b_p - \gamma, 0)) lm2(kp,bp)=DM1i=1DM(max((qiqe)kp+bpγ,0))

将这些损失项整合,T-Patcher 的总损失函数 L_p 可以表达为:

L p = L A c c + β ⋅ L m = l e + α ⋅ l a + β ⋅ ( l m 1 + l m 2 ) L_p = L_{Acc} + \beta \cdot L_m = l_e + \alpha \cdot l_a + \beta \cdot (l_{m1} + l_{m2}) Lp=LAcc+βLm=le+αla+β(lm1+lm2)

通过这些损失函数,T-Patcher 确保补丁在无关输入上不会被激活,从而保证编辑的局部性。

T-Patcher 在 GPT-J 模型上表现出较好的准确性和泛化性,但也存在局限性,如在不同模型架构上性能波动较大,批量编辑时内存需求高,限制了其在资源受限环境下的应用。

相比之下,ROME 方法更加稳定,通过将知识编辑视为一个带有线性等式约束的最小二乘问题,实现了对模型特定知识的精确修改,在准确性、泛化性和局部性等方面表现出色。

.


其他参考:【大模型基础_毛玉仁】系列文章


声明:资源可能存在第三方来源,若有侵权请联系删除!

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

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

相关文章

【原理系列】计算机组成原理-第一遍阅读总结

目录 创作灵感: 总览: 1、计算机抽象与技术 2、ISA指令集架构 3、CPU处理器 4、存储器 创作灵感: 夯实计算机原理,构建知识框架 此系列将总结和记录我对 【深入浅出计算机组成原理-台湾科技大学/元智大学的刘一宇教授】 的…

React程序打包与部署

===================== 推荐超级课程: 本地离线DeepSeek AI方案部署实战教程【完全版】Docker快速入门到精通Kubernetes入门到大师通关课AWS云服务快速入门实战目录 为生产环境准备React应用最小化和打包环境变量错误处理部署到托管服务部署到Netlify探索高级主题:Hooks、Su…

C++运算符重载、类的转换构造函数和类型转换函数的基础练习

练习1:(困难) 建立一个矩阵类,可以完成指定的操作或运算。 说明: (1)、矩阵为2行3列,基类型为整型; (2)、操作或运算:初始化&…

PERL开发环境搭建>>Windows,Linux,Mac OS

特点 简单 快速 perl解释器直接对源代码程序解释执行,是一个解释性的语言, 不需要编译器和链接器来运行代码>>速度快 灵活 借鉴了C/C, Basic, Pascal, awk, sed等多种语言, 定位于实用性语言,既具备了脚本语言的所有功能,也添加了高级语言功能 开源.免费 没有&qu…

docker(2) -- 启动后修改目录和网络

1. 前言 docker启动前是image文件,启动后是container文件,启动的时候我们可以指定容器的挂载目录以及网络类型,但启动后,这些信息都以配置文件的形式保存在container中,container重新启动时无法重新指定这些信息&…

Flutter开发中如何避免UI显示溢出的问题

文章目录 1. 使用灵活的布局组件2. 允许内容滚动3. 处理文本溢出4. 检查父容器约束5. 使用自适应布局6. 调试工具7. 其他技巧总结 在 Flutter 开发中,UI 溢出(如 A RenderFlex overflowed 错误)通常是由于布局空间不足或子组件尺寸超出父容器…

使用FastExcel时的单个和批量插入的问题

在我们用excel表进行插入导出的时候,通常使用easyexcel或者FastExcel,而fastexcel是easy的升级版本,今天我们就对使用FastExcel时往数据库插入数据的业务场景做出一个详细的剖析 场景1 现在我们数据库有一张组织表,组织表的字段…

【力扣刷题|第十七天】0-1 背包 完全背包

目标和 力扣题目网址:目标和 这道题我们先用回溯的思想来做。首先我们设正数和为S,数组和为N,目标值为T,那么S-(N-S)T化简之后可以得S(TN)/2即选择的正数个数为偶数,而且NT也为偶数,那么第一个判断条件我们就有了&…

深入浅出 Embedding

1. 什么是 Embedding? Embedding(嵌入)是一种将高维数据映射到低维连续空间的技术,用于表达数据的语义关系。简单来说,它是一种向量化表示,将文本、图像、用户行为等信息转换为数值向量,使得相似的数据在向量空间中距离更近。 2. 如何理解 Embedding? 2.1 浅显易懂的…

【云服务器】在Linux CentOS 7上快速搭建我的世界 Minecraft Fabric 服务器搭建,Fabric 模组详细搭建教程

【云服务器】在Linux CentOS 7上快速搭建我的世界 Minecraft Fabric 服务器搭建,Fabric 模组详细搭建教程 一、 服务器介绍二、安装 JDK 21三、搭建 Minecraft 服务端四、本地测试连接五、如何添加模组(mods)六、添加服务,并设置开…

【MLP-BEV(10)】BEVPooling V1和BEVPooling V2的view_transformer,进行鱼眼图片实践

文章目录 先说说 BEVPoolv1步骤1:3D点生成步骤2 2D特征采样和BEV特征生成特点再谈谈BEVPoolv2步骤1:3D点生成步骤2: 计算索引关系步骤3: `voxel_pooling`计算鱼眼图片进行实践步骤1、3D点生成(基于Kannala-Brandt 进行调整)步骤2、2D特征采样和BEV特征生成(1) 体素化 (Voxe…

鸿蒙项目源码-天气预报app-原创!原创!原创!

鸿蒙天气预报项目源码包运行成功含文档ArkTS语言。 我半个月写的原创作品,请尊重原创。 原创作品,盗版必究!!!! 原创作品,盗版必究!!!! 原创作品…

告别桌面杂乱与充电焦虑,移速165W百变桌面充电站首发体验

告别桌面杂乱与充电焦虑,移速165W百变桌面充电站首发体验 哈喽小伙伴们好,我是Stark-C~ 先如今,家里的电子产品越来越多,手机、平板、电脑三件套已经是基础配置,还有相机、Switch、智能手表等,这些产品用…

skill插件教程——skill程序的组成以及调用方法

skill程序的基本组成 1、基础的程序文件 插件运行的基础——就是你写程序的文件,格式为il文件,就是文本文件格式 2、调用程序的文件——allegro.ilint 文件申明在那个位置——在这个文件夹下,写入你调用的函数。 例如load(“…

解决Dubbo3调用Springcloud接口报No provider available from registry RegistryDirectory

解决Dubbo调用Springcloud接口报No provider available from registry RegistryDirectory 问题发现问题解决 问题发现 在学习Dubbo过程中,Dubbo官网有一篇文章《微服务最佳实践,零改造实现 Spring Cloud & Apache Dubbo 互通》,跟着示例…

基于RFID技术建筑物资材料智能管理解决方案

建筑行业仓库和物资材料管理面临诸多挑战,如工程设备重复利用的管理需求、物资出入库管理不规范、账物不符、物资丢失等问题。特别是在复杂多变的工地环境中,对物资进行科学规范的管理难度极大。上海岳冉基于RFID技术的建筑物资材料智能管理解决方案聚焦…

WSL系统找不到指定的文件

问题介绍 在尝试使用linux子系统时,发现无法打开 在尝试使用docker时无法使用 在命令行cmd或者powershell使用wls相关命令时,报错 相关错误提示均为: 系统找不到指定的文件 解决方法 试了各种方法无效。 直接到github下载最新版的wsl安装…

海量数据处理

1.海量数据处理问题 给两个文件,分别有100亿个query,只有1G内存,如何找到两个文件交集? 解决方案一: 可以先用布隆过滤器,一个文件的query放进布隆过滤器,另一个文件依次查找,在的…

英伟达GB300新宠:新型LPDDR5X SOCAMM内存

随着人工智能(AI)、机器学习(ML)和高性能计算(HPC)应用的快速发展,对于高效能、大容量且低延迟内存的需求日益增长。NVIDIA在其GB系列GPU中引入了不同的内存模块设计,以满足这些严格…

PC名词解释-笔记本的S0,S1,S2,S3,S4,S5状态

​🎓作者简介:程序员转项目管理领域优质创作者 💌个人邮箱:[2707492172qq.com] 🌐PMP资料导航:PM菜鸟(查阅PMP大纲考点) 💡座右铭:上善若水,水善利…