AI-Workshop 文献分享 2026-09-18 21:30

AI-Workshop 文献分享 #24 — Alignment Is Localized:用探针检测人类偏好表征

qyr 讲解偏好对齐后的模型差异定位问题:先回顾 RLHF(SFT → RM → PPO)与 DPO 的对齐流程,再介绍三种探针——因果探针(激活修补,逐层计算 logit 提升)、相关性探针(lasso 回归筛选重要层)、SVD 探针(对 Δh 做奇异值分解并投影替换),用于判断到底是哪些层的表征让模型更偏好人类偏好答案。

AI-Workshop 文献分享 探针 Probe RLHF DPO 可解释性

AI-Workshop 文献分享 #24 — Alignment Is Localized:用探针检测人类偏好表征

分享人:qyr | 日期:2026-09-18 21:30

论文:Alignment Is Localized — A Causal Probe into Preference Layers

主题:LLM-probe 经典文献 —— 三种探针定位人类偏好表征所在层


本篇文献是LLM-probe的经典文献,完整使用三种探针来检测人类偏好表征,是了解probe的绝佳材料。

1.目标

本文将两种东西做了排列组合:

  • 人类偏好对齐(HHH)
  • LLM探针

目标是用3种LLM探针去检测,这些人类偏好表征是怎样保存进LLM的。

2.人类偏好对齐

“对齐”是后训练的重要步骤,目标是让LLM的输出更符合人类的偏好,一般是3H准则:

  • Honesty:诚实,不撒谎
  • Harmless:无害,不造成伤害
  • Helpful:有用,能提供帮助

人类偏好对齐有两个方法:RLHF和DPO

2.1 RLHF

全程是 Reinforcement Learning from Human Feedback ,需要人类反馈的强化学习。具体步骤为:

  • 1.SFT(有监督微调) 在基模型上做有监督微调(一般有几种方式:全参数,部分参数,LoRA等,文中用的是全参数)。 构建 (prompt, 人类写的优质回答) 数据集,用来微调基模型。
  • 2.RM(奖励模型) 训练一个奖励模型,给定输入prompt,输出这个prompt的连续得分(是否符合人类偏好) 训练一般用另外一个LLM,将最后一个LM预测层换成一个单输出头的层。
  • 3.PPO 用PPO算法去继续调优模型,具体来说,先准备一批样本prompt,不需要正确答案/标签 输入给微调后的模型,将其输出结果交给RM,生成评分 评分减去KL惩罚(以冻结的SFT后模型参数为ref,计算调参后参数和ref的KL散度),避免调优和ref偏离太远,出现奖励黑客 根据奖励,使用PPO算法优化参数。 然后使用新的样本(认为旧样本不适合新参数了)继续迭代。 (问题是on-policy,比较慢)

2.2 DPO

DPO是off-policy的训练,其核心是构建一个带负例的样本(prompt,right,wrong) 让模型更容易输出好的答案,同时更难输出不好的答案。 (具体公式比较复杂,不展开了)

3.LLM探针

之前对齐之后的模型,其参数相比于基模型已经有变化了,我们如何判断是哪些变化导致了这些对齐?

本文用了三种探针去检验

3.0 探针

一般来说,探针是一些处理隐藏层输出(残差流/表征)的简单模型,用于实现探索

3.1 因果探针(patch,激活修补)

这个工作是典型的干预方法,相当于随机控制实验,具体来说:

  • 1.准备好对齐模型A和基模型B
  • 2.准备prompt,输入A模型,在第 l 层,捕获A模型的\(h_l^A\)
  • 3.将相同prompt输入B,计算B模型的 \(log_{l,base}promote = log_{l,base}p(chosen|prompt) - log_{l,base}p(reject|prompt)\),表示模型更愿意选好答案的概率提升 (这个后面细讲)
  • 4.将相同的prompot再输入B,并且将B的第 l 层的输出 替换(patch)为 \(h_l^A\),然后计算patch后B模型的 \(log_{l,base,patch}promote\) (每次输入前清空KV缓存,保持模型无状态)
  • 5.计算patch前后的logit差异 \(\Delta log_{l}p = log_{l,base,patch}promote - log_{l,base}promote\)

这个logit差异反映的是模型对于选择人类偏好答案的概率提升,越大说明影响越大。 分析每一层带来的提升,看看到底是哪些层对偏好的影响最大。

关于logit的具体计算: 对于LM来说,其最终输出的其实是每一个token的概率,并且通过logit-Lens去翻译回文本。 这里计算logit其实就是去掉翻译的过程,只保留概率。

举一个具体的例子,我们开始准备一个prompt,其形式为{prompt:"问:喝咖啡好吗?回答:",chosen:"适当饮用有好处",reject:"有害健康"}类似transformer里不断预测下一个token的过程:

  • 1.输入的上文为“问:喝咖啡好吗?回答:”,获取其下一个token=“适量”的概率,作为 p1
  • 2.输入的上文加上“适量”,变为“问:喝咖啡好吗?回答:适量”,获取其下一个token=“引用”的概率,作为 p2
  • 3.以此类推,获得p3,p4...
  • 4.\(logp(chosen|prompt) = logp1 + logp2 + logp3 + ...\)

这个patch实验可以精确的分析到底是那一层的输出让整个模型更偏好人类偏好答案。

3.2 相关性探针

使用lasso回归做探针,具体做法是:

  • 准备对齐模型A和基模型B
  • 输入相同的prompt,提取两个模型每一个隐藏层输出 \(A_h \& B_h\)
  • 比如模型有16层,那就构建一个16维的向量,每一个值是该层h对应的 \(A_h - B_h\),这个向量作为lasso的X
  • 以每一层 l 的 \(\Delta log_{l}p\) 作为y,可以发现,一个prompt能生成16个y
  • 构建一个训练集,这个训练集中,每个X要复制16份,和16个y一一对应
  • 训练lasso回归 lasso的L1正则化会让一些权重为0,这些为0的权重就是不太重要的层

3.3 SVD探针

这一部分不细说了,对于对齐模型每一层 l 的输出,用大量样本prompt输入A和B

\(h_l\) 一般是一个矩阵,即多个token向量拼起来的矩阵,每次取最后一个(即预测的token)向量

计算这些向量的 \(\Delta h_{last}^A = h_{last}^A - h_{last}^B\),然后拼在一起,形成矩阵 H

对H做SVD分解,只保留前k个主成分,得到一个投影矩阵P(用来给h_l_{last}降维)

对于每一个\(h_{last}^A\),用P投影得到\(h_{last}^AP\),然后替换\(h_{last}^B\),然后将这个向量送回B里

一个注释 本问没有检验某一层l的微调,而是从0~l所有的层微调的总效果,换言之是残差流运行到了l层后是否有效果