想象你是一座大型档案馆的管理员。馆里整齐存放着几百万张知识卡片,每张卡片写着一条事实,比如“埃菲尔铁塔|位于|巴黎”。突然有一天,上级检查发现其中一张卡片写错了:“埃菲尔铁塔位于伦敦”。要修正这个错误,你有两个选择:一是把整个档案馆的所有卡片全部重新印刷一遍——准确、彻底,但耗费数月时间和天文数字的经费;二是找到那张卡片所在的柜子、所在的抽屉,用一张修正贴精准地改写它,几分钟搞定,而且不影响相邻的卡片。在大模型的世界里,前者叫“全量重训”,后者叫“知识编辑”。这篇实战文章,讲的就是后者:怎么用扰动实验“翻箱倒柜”找到知识藏在哪一层(causal tracing)、怎么用秩一更新公式精确改写那一条记忆(ROME)、怎么一次性批量更正几十上百条过时事实(MEMIT),以及改完之后如何验收、又会遇到哪些边界。
对 AI 从业者而言,掌握 ROME/MEMIT 意味着你可以在不启动大规模训练的前提下,用分钟级成本修正模型的事实错误,这是大模型运维、知识库更新和快速迭代场景的硬核竞争力。
目录
可视化演示
展示通过Causal Tracing定位知识存储层、ROME秩一更新精确修改事实、MEMIT批量编辑多条知识的技术流程,直观理解大模型知识编辑原理。
本节配有交互动效(进入视口后自动加载,约 3KB)。
Causal Tracing知识定位 通过掩码各层MLP输出,追踪特定事实知识存储在哪个Transformer层 中间层的MLP神经元对事实知识贡献最大,是编辑的目标位置 因果效应 = |logit(x) - logit(x corrupted)| 定位后可精准编辑
知识编辑背景:为何不推倒重来
王叔的档案馆年度盘点时,发现“埃菲尔铁塔位于伦敦”这种低级错误。按老办法,得把几百万张卡片全部重印——相当于大模型场景下的“全量重训”。一个 7B 参数的大模型,在数万亿 token 的语料上重新训练,动辄需要几百上千张 GPU 卡跑数周,成本以百万美元计。王叔算了一笔账:为改一张卡片烧掉一座金山,这笔买卖不划算。于是他把目光投向了“知识编辑”:在参数空间中做一次微创手术,只改动和这条事实相关的极小一部分权重,其余参数原封不动。
为什么“只改一小部分”可行?因为大模型里的知识并非均匀摊在全部参数上,而是像档案馆的卡片一样,被“登记”在特定层的特定权重里。知识编辑要做的事,是先定位、再修改。这个概念在工业界非常实用:产品上线当天发现模型把一个新功能的描述记错了,全量重训来不及,知识编辑能让你在几分钟内完成修正并验证,让模型下一秒就输出正确答案。
为了直观理解全量重训为什么贵,可以用一个经典公式估算训练成本:给定模型参数量 N 和训练数据规模 D(以 token 计),前向与反向传播所需的浮点运算量约是:
王叔终于说服了馆长:与其推倒整座档案馆,不如请来一位“定点手术医生”。接下来的问题只有一个——那张写错的卡片,到底藏在哪个柜子的哪一层抽屉里?
- 参数量 N模型的权重总个数,例如 7B 表示 70 亿个参数。N 越大,模型记忆容量越大,但训练也越贵。
- 数据规模 D训练时看到的 token 总数。大模型通常在上万亿 token 上预训练,相当于档案馆里所有卡片的“印刷次数”。
- 系数 6前向传播和反向传播加起来,每个参数每 token 大约需要 6 次浮点运算,这是一个经验常数。
- 对比编辑开销ROME/MEMIT 只需在定位到的层上做一次矩阵运算,开销约为 O(n),其中 n 是编辑条数,与 N 无关。
因果追踪定位:揪出藏卡片的抽屉
档案馆的档案柜有十几层抽屉。王叔不知道“埃菲尔铁塔位于伦敦”这张卡片在哪层,但他想到了一个敲山震虎的办法:夜里关掉大楼总电闸,然后一层一层地恢复供电,观察哪层一断电、某个区域的灯就全灭了,说明那个区域的线路就在这层。映射到模型里,“灯”就是模型回答目标事实的概率,“断电”就是往某一层的隐藏状态里注入噪声扰动。
这个技术叫因果追踪(causal tracing)。做法是:把一条知识对应的句子(比如“埃菲尔铁塔位于”)输入模型,正常前向传播得到目标答案“巴黎”的概率;然后对每一层分别做“污染实验”——把该层的隐藏状态换成一个损坏句子的对应状态,或者直接注入高斯噪声,再继续后续层的计算,测量目标概率的跌落幅度。跌落越猛,说明该层越是这条知识的关键承重墙。ROME 的研究者在 GPT-2、GPT-J 上做了大量这类实验,发现事实知识主要集中在中后段的 MLP(前馈网络)层里,而不是 Attention 层。
用一个公式描述“因果效应”:我们固定第 l 层的状态不被污染,只污染它之前的所有层,然后记录第 l 层的“原始状态”对答案概率的贡献。更常见的写法是,比较干净路径与全污染路径在第 l 层恢复时的概率差:
王叔用这招敲完了十几层抽屉,最终把目光锁定在第 4 层。现在他知道了卡片的位置,下一步就是动手改写——但怎么改才能既改对这张、又不碰坏隔壁的卡片呢?
- 目标答案 \(y_{\text{obj}}\)我们希望模型回忆出的事实宾语,比如“埃菲尔铁塔位于”后面应该接的“巴黎”。
- 隐藏状态 \(h_l\)模型第 l 层输出的特征向量,可以理解为这一层“读到的语义摘要”。
- 干净路径 \(h_l^{\text{clean}}\)正常输入时第 l 层的状态,未被任何噪声污染。
- 污染路径 \(h_l^{\text{corrupt}}\)把第 l 层状态换成损坏句子的状态,模拟“断电”效果。
- 概率差 \(\Delta_l P\)两个概率相减,数值越大说明该层对事实的贡献越强,是定位的关键信号。
ROME秩一更新:一张修正贴的精准手术
找到了抽屉,王叔要变戏法了。想象抽屉里有一排标准格式的卡片,每张卡片的索引栏写着“键”(key),内容栏写着“值”(value)。在模型的 MLP 层,键就是句子的主语表示(比如“埃菲尔铁塔”经过多层编码后的向量),值就是模型希望输出的答案表示(“巴黎”)。模型记知识的方式,就像用权重矩阵 W 把键翻译成值。ROME(Rank-One Model Editing,秩一模型编辑)的做法是:构造一个“秩一修正矩阵”,也就是一个非常“窄”的修正项,让它在键的方向上产生想要的改变,而在其他方向上几乎不动。
这个修正项长什么样?ROME 把它写成一个带约束的最小扰动问题:新权重必须在键 \(v_*\) 上把旧输出 \(W v_*\) 拉向目标值 \(k_*\),同时在所有其他知识上尽量保持原样。解这个约束问题会得到一个漂亮的封闭解——用你熟悉的语言说,就是“除了一张修正贴的位置,其他都保持原样”。公式如下:
王叔小心翼翼地把修正贴贴上去,第 4 层抽屉里那张“埃菲尔铁塔位于伦敦”的卡片被改成了“位于巴黎”,旁边的“凯旋门位于巴黎”安然无恙。但王叔又收到新命令:这次不是改一张,而是五十张卡片都写错了。一个一个贴修正贴,会不会越贴越乱?这就需要更大的工具了。
- 键向量 \(v_*\)触发知识检索的输入表示,例如“埃菲尔铁塔”这个主语经过模型前若干层后的隐藏状态。它是本次编辑的“触发词”。
- 值向量 \(k_*\)编辑后期望输出的表示,即答案“巴黎”对应的目标向量。写卡片时,我们要把“内容栏”填成这个值。
- 残差 \(k_* - W v_*\)当前模型把键翻译成值时相差的“缺口”,是待修正的错误量。
- 协方差矩阵 \(C_0\)从模型见过的海量文本里统计出的键向量协方差,代表“既有的知识分布形状”。用它加权,可以保证修正方向尽量贴合分布、避开其他知识。
- 外层积构造秩一矩阵分子中残差向量与加权键向量做外积,得到的是一个只有一行方向上“隆起”的矩阵,这正是“秩一”的含义。
- 归一化与正则 \(\lambda\)分母 \(v_*^T C_0 v_* + \lambda\) 把修正量缩放到合适尺度,\(\lambda\) 防止分母为零导致计算崩溃。
MEMIT批量编辑:档案局批量更正流水线
王叔试过用 ROME 循环五十次,结果发现一个尴尬现象:改第二十张的时候,第一张刚改好的答案又变成旧值了。原因不难理解:每次秩一更新都是独立的,后一次更新会在权重矩阵上叠加新的修正项,把前一次的成果“顶歪”。就像在同一张卡片上反复贴修正贴,最后厚厚一叠,反而看不清原始字迹。
MEMIT(Mass-Editing Memory in a Transformer)的办法是“一次算总账”:把五十条编辑请求放进同一个优化问题里联立求解,一次性算出一组相互协调的更新量,再分摊到多个贡献最高的 MLP 层上写入。因为更新量是同时算出来的,彼此之间不会打架。这相当于档案馆引入了一台“批量更正印章机”——把五十张新卡片摆好,机器一次盖章,全部同步更新。
MEMIT 的批量求解公式,是把 ROME 的单条外积推广成矩阵形式:把多个键堆叠成矩阵 \(V\),把多个目标值堆叠成矩阵 \(K\),然后求解一个最小二乘问题,最终更新量是一个“广义秩”的修正矩阵:
王叔把五十张新卡片放进批量更正印章机,一次操作全部更新完毕。他揉揉眼睛,开始验收:改对了吗?换种问法还能对吗?旁边的卡片有没有被误伤?这些都要靠一套科学的“验收指标”来说话。
- 键矩阵 \(V\)把 n 条待编辑知识的键向量按列排成矩阵,尺寸为 \(d \times n\),相当于一摞待改卡片的“索引栏”。
- 值矩阵 \(K\)n 个目标值向量的堆叠,尺寸同样为 \(d \times n\),是这一摞卡片希望改成的“新内容”。
- 残差矩阵 \(K - W V\)当前模型对所有 n 条知识的输出与目标之间的“总缺口”,批量修改要填平的正是它。
- 正则化项 \(\lambda I\)保证括号里的矩阵可逆,数值上更稳定,让批量求解在稀疏键矩阵下也能收敛。
- 投影矩阵 \((V^T C V + \lambda I)^{-1} V^T C\)把残差“分配”到 n 个键方向上,并考虑协方差权重,是批量更新不发散的关键。
- 最终写入\(\Delta\) 同时对所有键生效。当 n=1 时,(V^T C V) 退化为标量,公式回归 ROME。
评估指标体系:改对了吗?改坏了吗?
档案馆的验收工作有三道工序。第一道:直接抽查被改的卡片,看“埃菲尔铁塔位于哪”是否答“巴黎”——这叫可靠性(reliability);第二道:换一种问法,“法国首都的地标建筑在哪”,模型还能答对,说明新知识真正被内化而不是死记硬背——这叫泛化性(generalization);第三道:拿完全无关的问题去问,比如“伦敦在哪个国家”,答案不能被误改成“巴黎”,这叫局部性(specificity)。三道都通过,修正贴才算贴得合格。
落到大模型上,评估方法就是构造三组测试问题,分别计算准确率。假设编辑了 n 条事实,对每条事实构造一个直接提问 \(q_i\),编辑后的模型 \(f_{\theta'}\) 输出正确新答案 \(y_i\) 的比率就是可靠性。类似地,用改写问法构造泛化问题、用无关邻居构造局部性问题。一个常用的可靠性指标公式如下:
王叔的三道验收工序全部通过后,正准备向馆长汇报,突然发现角落里有些卡片开始“起皱”——原来是有些卡片被反复编辑过,键位还和邻居共享,修改量已经开始互相挤压。这个发现让王叔意识到:手术刀再锋利,也有够不着的地方。
- 指示函数 \(\mathbb{I}[\cdot]\)一个开关函数,条件为真输出 1,为假输出 0。它把“模型答对没有”变成可求和的数字。
- 编辑后的模型 \(f_{\theta'}\)经过 ROME 或 MEMIT 修改权重后的模型,参数从 \(\theta\) 变成了 \(\theta'\)。
- 测试问题 \(q_i\) 与标准答案 \(y_i\)第 i 条被编辑知识的直接提问(如“埃菲尔铁塔位于哪?”)和编辑后期望的新答案(“巴黎”)。
- 取平均把所有样本的指示值加起来除以 n,得到 0 到 1 之间的比率,越接近 1 说明编辑越可靠。
局限与边界:手术刀的刀刃长度
王叔的批量更正印机也不是万能的。他在验收时发现三类问题:第一,编辑容量有限——当一次要改几百上千条事实时,修正矩阵的信息量会超过权重矩阵的有效自由度,副作用率明显上升;第二,键位冲突——如果两条知识共用同一个主语键(比如“埃菲尔铁塔”既关联“位于巴黎”又关联“高 330 米”),修改一个会牵连另一个;第三,结构性缺陷——模型输出里的系统性偏见、幻觉,往往分散编码在大量参数中,根本无法定位到少数几个关键层,用 ROME 去修就像拿修正贴去补一面裂缝纵横的墙。
这些局限可以用一个“副作用集合”来精确刻画:编辑后输出发生变化的那些查询组成的集合。理想情况下,这个集合恰好等于“我们想改的旧事实相关的问题”;现实里,它往往比理想集合大一圈,多出来的部分就是编辑带来的损伤:
王叔把这三类问题记在工作手册上,给馆长写了一份血泪总结:ROME 和 MEMIT 是高效的“定点修正手术刀”,适合高频小批量的知识更新;但想靠它解决模型所有的“思想钢印”,那是拿手术刀当推土机用。未来的研究方向,也正朝着更大容量、更少冲突、更强鲁棒性的方向演进。
- 原模型 \(f_{\theta}\)编辑发生前的模型,是“副作用对比”的基准线。
- 编辑后模型 \(f_{\theta'}\)完成一次或多次编辑后的模型,部分参数发生了改变。
- 查询集合 \(\{q'\}\)所有可能的输入问题,既包括与编辑目标相关的改写问法,也包括无关问题。
- 副作用集合 \(\mathcal{S}\)输出发生变化的查询子集。理想情况是 \(S\) 只包含与编辑相关的问题;现实中它常会“外溢”到无关区域。
AI 应用场景
智能客服的“分钟级纠错”
阶段:模型上线后的缺陷修复与知识更新
解决的问题:大模型客服上线首日,经常被用户发现某些事实答错了,比如产品价格、活动规则、政策条款。传统做法是记录问题、等下一个训练周期再全量重训或微调,往往要等几周。ROME 提供了一条即时通道:定位错误知识所在的层,用秩一更新直接改写,几分钟内完成修复,立即上线验证。
具体案例:某电商平台的智能客服将“超级会员月费 98 元”错答成“198 元”。运维工程师用 causal tracing 定位到模型第 14 层的 MLP 权重,用 ROME 脚本做一次秩一更新,5 分钟完成修正。随后用三组测试(直接问、改写问、无关问)验证,确认“98 元”新答案生效,且“普通会员 58 元”等旧知识未受影响。
企业知识库的月度批量同步
阶段:周期性知识库更新
解决的问题:企业产品线每月调整,几十条规格、价格、联系人等事实同时过期。逐条用 ROME 修改会因多次写入相互干扰而失效。MEMIT 把所有变更合并成一次批量更新,分摊到多个关键层写入,既省时间又降低互伤风险。
具体案例:某车企的智能助手每月更新车型参数(续航、售价、上市时间),约 30 条变更通过 MEMIT 一次性写入。更新后跑一遍自动回归:可靠性 100%、泛化性 96%、局部性 98%,全部达标后才发布上线。
Python 演示
import numpy as np class KnowledgeStore: """线性知识存储: 答案向量 = W @ 键向量""" def __init__(self, dim=16, seed=42): rng = np.random.default_rng(seed) self.W = rng.normal(0, 0.1, (dim, dim)) self.dim = dim def __call__(self, key): return self.W @ key def edit_rome(self, key, target, cov=None, lam=1e-3): """ROME: 单条事实的秩一更新""" cov = np.eye(self.dim) if cov is None else cov resid = target - self.W @ key scale = key @ cov @ key + lam self.W += np.outer(resid, cov @ key) / scale def edit_memit(self, keys, targets, cov=None, lam=1e-3): """MEMIT: 批量编辑多条事实, 单条时退化为 ROME""" cov = np.eye(self.dim) if cov is None else cov V = np.stack(keys).T K = np.stack(targets).T resid = K - self.W @ V S = np.linalg.inv(V.T @ cov @ V + lam * np.eye(V.shape[1])) @ (V.T @ cov) self.W += resid @ S def cosine(self, a, b): return a @ b / (np.linalg.norm(a) * np.linalg.norm(b) + 1e-9) def main(): dim = 16 rng = np.random.default_rng(7) keys = [rng.normal(0, 1, dim) for _ in range(5)] new_objs = [rng.normal(0, 1, dim) for _ in range(5)] store = KnowledgeStore(dim) store.edit_rome(keys[0], new_objs[0]) sim = store.cosine(store(keys[0]), new_objs[0]) print("ROME 后对应事实余弦相似度: %.3f" % sim) print("ROME 修改是否成功:", sim > 0.99) bulk = KnowledgeStore(dim) old = [bulk(k) for k in keys] bulk.edit_memit(keys, new_objs) for i in range(len(keys)): hit = bulk.cosine(bulk(keys[i]), new_objs[i]) keep = bulk.cosine(bulk(keys[i]), old[i]) print("第%d条 命中: %.3f 旧值残留: %.3f" % (i + 1, hit, keep)) ok = all(bulk.cosine(bulk(keys[i]), new_objs[i]) > 0.99 for i in range(len(keys))) print("MEMIT 批量编辑全部命中:", ok) if __name__ == "__main__": main()
resid = target - self.W @ key计算当前模型输出与期望答案之间的“缺口”,这是所有修正的起点。scale = key @ cov @ key + lam归一化分母,让修正量尺度合适,lam防止除零。self.W += np.outer(resid, cov @ key) / scaleROME 的灵魂:一次外积构成的秩一更新,只朝键的方向推权重。V = np.stack(keys).T把 5 条知识的键向量排成矩阵,批量问题由此展开。S = np.linalg.inv(V.T @ cov @ V + lam * np.eye(V.shape[1])) @ (V.T @ cov)MEMIT 的批量投影矩阵,让多条修正互相协调、一次写入。self.W += resid @ S相比 ROME 的单向量外积,这里是矩阵乘矩阵,同时满足多个键到值的约束。if __name__ == "__main__":保证脚本可独立运行,也是实验复现的入口。
常见误区
误区我一开始以为所谓知识编辑,就是把新知识拼进训练数据,然后对模型做几轮微调,本质还是梯度下降训练。
正解ROME/MEMIT 完全不是这个思路。它们先通过因果追踪定位知识所在的层,然后对定位层的权重直接写出一个数学上的封闭解(秩一更新),整个过程没有梯度迭代。就像档案管理员直接抽出写错的卡片改掉,而不是把整本档案册重新誊抄一遍。
为何常见:大家对“改模型”的直觉都来自“训练 = 梯度下降”的框架,很少接触直接求权重封闭解的方法。
误区听说 ROME 每次只能编辑一个事实,就认为它的实战价值很低,模型里错误那么多,改不过来。
正解ROME 解决的是“单条精确修改”问题,它的后续方法 MEMIT 把编辑请求分摊到多个层,批量编辑几百上千条都已验证可行。真实工作流是:单点错误用 ROME 快速修复,批量过期知识用 MEMIT 统一更新。
为何常见:只记住了 ROME 论文里的单条编辑实验,忽略了同系列方法在批量方向上的扩展。
误区改完后测一句“埃菲尔铁塔位于哪里?”答出巴黎,我就宣布编辑成功,其余问题一概不管。
正解专业的验收必须看三个维度:可靠性(直接问对)、泛化性(换个问法仍对)、局部性(无关问题不受影响)。论文里的评估体系也是围绕这三项设计,只测一句相当于只检查了修正贴有没有贴上,没检查有没有粘坏别的字。
为何常见:“改对了”最直观可见,而“没改坏”需要额外设计测试集,容易在流程上被省略。
误区我打算写个 for 循环,把 ROME 依次跑在几十条知识上,以为这样就是批量编辑。
正解循环逐条修改会互相干扰——后一次更新会拉偏前一次刚写好的输出。MEMIT 的要点是把所有编辑请求放进同一个目标函数联立求解,得到一组相互协调的更新量再一次性写入。好比一摞卡片要用同一个模板批量复印,而不是每张分别手写。
为何常见:“多次单操作 = 批量操作”这个直觉在无耦合场景成立,但权重更新是强耦合的,直觉在此失效。
误区既然 ROME 能改知识,那模型输出的幻觉、偏见、事实错误,全部都可以交给它修,省去重新训练。
正解ROME/MEMIT 擅长修“可定位的离散事实”(如“某地首都在哪”),而幻觉和偏见是多层分布式编码、与训练语料统计强相关的结构性问题,往往无法归因到少数关键神经元。硬用 ROME 去修,要么定位不到,要么副作用失控。这类问题应交给全量重训、对齐或检索增强方案。
为何常见:把“知识编辑”的名称理解成万能修改器,忽略了它本质是“局部事实改写”这个边界。
面试题
Q1. ROME 方法在定位阶段采用哪种技术找出知识存储的层?
- A.梯度下降搜索
- B.因果追踪技术← 正确答案
- C.无监督聚类
- D.主成分分析
答案:B。ROME 的定位阶段用因果追踪(causal tracing)对每一层隐藏状态注入噪声,观察目标事实回答概率的下降幅度来锁定关键层。梯度下降是训练手段,聚类和主成分分析与定位无关。
Q2. 关于 ROME 的秩一更新,下列说法正确的是?
- A.更新会改变模型全部参数
- B.更新只叠加在关键层权重上← 正确答案
- C.更新需要重新训练整个模型
- D.更新只修改嵌入层参数
答案:B。ROME 将秩一修正矩阵叠加在定位到的 MLP 层权重上,其他层参数不变,这正是它“精确修改、减少误伤”的关键。它不依赖训练,也不碰嵌入层。
Q3. ROME 更新公式中的 C0 表示什么?
- A.学习率相关的超参数
- B.键向量的协方差统计← 正确答案
- C.优化器的动量系数
- D.训练时的批次规模
答案:B。C0 是从模型预训练语料中统计出的键向量协方差矩阵,代表既有知识分布的形态。用它加权可以让修正方向顺着已有分布走,从而尽量不干扰其他知识。
Q4. MEMIT 相对于 ROME 的主要改进是什么?
- A.支持多GPU并行大模型训练
- B.批量编辑并分摊到多个层← 正确答案
- C.省去因果追踪的定位阶段
- D.完全避免修改任何模型参数
答案:B。MEMIT 将多条编辑请求联立求解,把修正量分摊到因果追踪选出的多个关键层,解决了批量编辑时单层容量不足的问题。它同样需要定位,也要改权重。
Q5. 评估知识编辑效果时,典型的衡量指标包括?
- A.编辑后直接提问是否答对← 正确答案
- B.改写问法后是否仍然答对← 正确答案
- C.无关提问是否不受影响← 正确答案
- D.编辑后模型参数量减少
答案:ABC。可靠性(直接问)、泛化性(改写问)、局部性(无关问)是编辑评估三大支柱。参数量不会因编辑减少,与效果无关。
Q6. causal tracing 中,对某一层注入噪声后,模型对目标事实的回答概率大幅下降,说明什么?
- A.该层没有存储任何知识
- B.该层是知识的重要存储层← 正确答案
- C.模型在小样本上过拟合
- D.该层权重需要做正则化
答案:B。概率骤降说明该层状态对回忆该事实必不可少,这就是“知识存储层”的信号。若无关紧要,扰动后概率应几乎不变。
Q7. 关于 ROME/MEMIT 的局限性,下列说法正确的是?
- A.批量编辑过多时副作用明显增大← 正确答案
- B.编辑完全不会改变模型分布
- C.共用键位的知识可能互相冲突← 正确答案
- D.所有错误都能通过 ROME 修复
答案:AC。编辑容量有限,批量过大会让副作用集合快速膨胀;共用同一键位的知识会相互挤压。ROME 只适合局部事实,结构性问题无法修复。
Q8. ROME 中最常被编辑的权重矩阵位于模型的哪个部分?
- A.注意力机制的查询矩阵
- B.前馈神经网络层权重← 正确答案
- C.分词器的词表映射
- D.层归一化缩放参数
答案:B。ROME 的因果实验发现事实知识主要存储在中后段 FFN(MLP)层的权重中,因此编辑目标选在 FFN 层,而非 Attention 或归一化层。
Q9. 在 ROME 的键值框架中,“键”和“值”分别对应什么?
- A.键为主语表示,值为宾语表示← 正确答案
- B.键为宾语表示,值为主语表示
- C.键为句法位置,值为词性标签
- D.键为注意力分数,值为权重
答案:A。键是触发知识检索的主语表示(如“埃菲尔铁塔”),值是编辑后期望输出的宾语表示(如“巴黎”)。权重的作用就是把键映射到正确的值。
Q10. MEMIT 如何把批量修正分摊到多个层?
- A.每层分别计算并逐层应用← 正确答案
- B.只在一层执行其余不变
- C.按因果分数选择多个关键层← 正确答案
- D.用梯度上升迭代搜索权重
答案:AC。MEMIT 先对每条知识跑因果追踪,选出贡献分数最高的若干层,再为每一层独立计算批量更新量并逐一应用。它不在一层硬扛,也不用梯度迭代。