【大模型基础_毛玉仁】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=σ(q⋅Wfc+bk)FFN(q)=a⋅Wproj+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)+ap⋅vp
其中,
-
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(−qe⋅kp−bp)
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=1∣DM∣
记忆损失 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)=∣DM∣1i=1∑∣DM∣(max(qi⋅kp+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)=∣DM∣1i=1∑∣DM∣(max((qi−qe)⋅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 方法更加稳定,通过将知识编辑视为一个带有线性等式约束的最小二乘问题,实现了对模型特定知识的精确修改,在准确性、泛化性和局部性等方面表现出色。
.
其他参考:【大模型基础_毛玉仁】系列文章
声明:资源可能存在第三方来源,若有侵权请联系删除!