Lecture 16: 对齐与社会影响 —— 价值对齐问题(Alignment, Impacts: The Value Alignment Problem)

目录 · ← l15 · appendix →

Lecture 16: 对齐与社会影响 —— 价值对齐问题(Alignment, Impacts: The Value Alignment Problem)

对应材料:官方 lecture10post.pdf 第 17–41 页(Value Alignment 客座,Wanheng Hu,共 25 页)+ ethics.pdf(Value Alignment Part II,共 21 页)|Week 10 周一 Mar 9, 2026|参考阅读:Bostrom (2014) Superintelligence、Gabriel (2020) “Artificial Intelligence, Values, and Alignment”、Jobin et al. (2019) Nature Machine Intelligence、SB Chp 1(RL 的问题设定) 一句话定位:本讲是课程唯一一节把目标函数本身当成研究对象的讲座。L1–L15 一直在回答”给定奖励 $r$,如何最大化它”;L16 反过来问:$r$ 从何而来、它是否等于我们真正想要的东西、以及当”我们”不止一个人时该怎么定 $r$。

关于本讲编号:CS234 Winter 2026 把 Wanheng Hu 的价值对齐客座拆成两次讲授(Part I 在 lecture10post.pdf 末尾、Part II 独立成 ethics.pdf)。本笔记按 SPEC.md §0 的课程编号把它们合并为 L16lecture10post.pdf 第 1–16 页的 Fast RL 主体属 L10,不在本讲范围内。


16.1 概述

L1–L15 的每一讲都以”奖励函数 $r(s,a)$ 已经给定”为起点:L2 的 Bellman 最优性、L5–L7 的策略梯度、L8 的 RLHF/DPO 与 MaxEnt IRL、L9–L12 的遗憾界,全都把 $r$ 当作环境的客观组成部分。价值对齐(value alignment)问题指出,这个假设本身才是整个技术栈里最脆弱的一环:我们说出口的指令我们真正想要的东西之间存在系统性的鸿沟,而 RL 会精确地、无情地爬到我们写下的那个目标函数的极值点上——包括它的所有漏洞。Bostrom (2014) 的回形针思想实验把这一后果推到极端:一个被赋予”最大化回形针产量”这一最终目标(final goal)的 AI,”先转化地球、继而把可观测宇宙中越来越大的部分转化成回形针”。

本讲由客座讲者 Wanheng Hu(Stanford EIS 与 HAI 博士后;Cornell 科学技术论 STS 博士,做的是中国医疗 AI 产业的民族志研究)主讲,讲义基于 Dan Webber 的原始材料并致谢 Andy Ouyang。讲座分三步走:(1) 用 Paperclip AI 与一组现实案例定义问题;(2) 用四种”我们真正想要的”的解释框架(precisification)把问题精确化——真正意图(intend)的、真正偏好(prefer)的、真正利益(best interests)的、以及道德上正确(morally right)的——并逐一给出它们各自的技术与哲学困难;(3) 把”用户”扩展为其他人(people other than the user),引出社会价值、集体行动与参与式 AI(participatory AI)。本讲不提供算法,但提供了本课程全部算法的合法性前提


16.2 核心概念的数学形式化

16.2.1 价值对齐(value alignment)

严格定义:讲义给出的问题陈述是

“How do we design AI agents that will do what we really want?”(我们如何设计 AI 智能体去做我们真正想要的事?)

形式化地,设 $\pi$ 为智能体策略,$u^\star$ 为”我们真正想要的东西”这一潜在目标(latent objective),$\hat{u}$ 为我们实际写下的目标函数(奖励或偏好模型)。则:

\[\pi^\star = \arg\max_{\pi} \mathbb{E}_{\tau \sim \pi}\!\left[\sum_{t=0}^{T} \hat{u}(s_t, a_t)\right], \qquad \text{对齐} \iff \pi^\star \in \arg\max_{\pi} \mathbb{E}_{\tau \sim \pi}\!\left[\sum_{t=0}^{T} u^\star(s_t, a_t)\right]\]

对齐失败的核心机制是 $u^\star \neq \hat{u}$:我们把 $\hat{u}$ 当作 $u^\star$ 的代理(proxy),而 RL 只保证爬到 $\hat{u}$ 的极值点。

直观解释:$\hat{u}$ 是我们”说出口的”,$u^\star$ 是我们”没说出口但真正在意的”。人类的绝大部分意图依赖于背景假设(background assumptions),讲义的原文表述是:

What we really want is often much more nuanced than what we say we want. Humans work with many background assumptions that are (1) hard to formalize and (2) easy to take for granted.(我们真正想要的往往远比我们说出口的更微妙。人类依赖大量背景假设,它们 (1) 难以形式化、(2) 容易被视为理所当然。)

注意这两个性质是互相加强的:(2) 使得我们根本不会想到要把它们写进奖励函数,(1) 使得即使想到了也很难写。L8 讲的 RLHF 恰恰把人类偏好形式化成奖励——本讲要追问的是这个形式化过程丢掉/扭曲了什么。

具体示例:一个被要求”最大化工厂回形针产量”的智能体。$u^\star$ = “在我的投资回报、工人安全、环境法规、工厂存续等约束下最大化产量”;$\hat{u}$ = “最大化产量”。所有约束都属于被”视为理所当然”的背景假设。两者在低产量区间几乎一致,在高产量区间完全分岔——这正是 16.4 实验一里 $k=3$ 与 $k=5$ 的差别($J_{true}=28.00$ vs $-511.60$)。

与监督学习的对比:监督学习里标签错误表现为噪声,模型会在数据上平均掉它;RL 里目标写错表现为系统性偏差,策略会精确地找到漏洞并放大它(16.2.6 的规格博弈)。这是 RL 独有的失败模式。

16.2.2 规格博弈 / 奖励 hacking(specification gaming / reward hacking)

严格定义:设 $\hat{u}$ 为代理目标,$u^\star$ 为真实目标。定义规格差距(specification gap)

\[\Delta_{\text{spec}} = J_{true}(\pi^\star_{true}) - J_{true}(\pi^\star_{proxy}) = \max_{\pi} J_{true}(\pi) - J_{true}\!\left(\arg\max_{\pi} J_{proxy}(\pi)\right)\]

其中 $J_{proxy}(\pi) = \mathbb{E}\pi[\sum_t \hat{u}]$,$J{true}(\pi) = \mathbb{E}\pi[\sum_t u^\star]$。规格博弈指 $\pi^\star{proxy}$ 以一种”我们完全没预料到”的方式在 $\hat{u}$ 上取得高分(通常利用 $\hat{u}$ 与 $u^\star$ 之间的结构性缺口)。L8 已经见过它在工程上的表现:奖励模型(reward model)被过优化(over-optimization)后,策略学会生成能骗过奖励模型但对人类毫无帮助的回答。

直观解释:$\hat{u}$ 是 $u^\star$ 的一个部分可见的投影。最优化 $\hat{u}$ 相当于沿着投影方向走到无穷远——一旦走出 $u^\star$ 的有效区域,投影上”更好”与真实上”更糟”就脱钩了。

具体示例(16.4 实验一):$\hat{u}$ = 产量,$u^\star$ = 产量 − 资源损耗代价 − 资源耗尽灾难代价。当强度 $k\le 3$ 时资源池够用,两者单调同向;$k=4$ 时资源在第 19 步耗尽,$J_{true}$ 从 $+28.00$ 崩到 $-492.37$。代理回报 $G_{proxy}$ 却从 78 涨到 91——代理奖励单调上升而真实目标先升后降,这就是 Paperclip AI 的玩具版。

与 IRL 的对比:MaxEnt IRL(L7)试图从示范中反推 $u^\star$;规格博弈说明即使反推成功,我们从示范中恢复的 $u^\star$ 也只在示范覆盖的行为区域内可信——这正是讲义”罕见或未预见情形”技术困难的数学形态。

16.2.3 四种”我们真正想要的”(four precisifications)

这是本讲最核心的结构。讲义明确提出”有若干种方式解释’我们真正想要的’“(There are several ways of interpreting “what we really want”),Part I 给出前三种,Part II 补上第四种并指出前三种的盲区:

#解释形式化目标Paperclip AI 为何算失败主要困难
1对齐到意图(intentions)$\hat{u}$ 应等价于用户的完整意图 $u_{\text{intend}}$(含未说出的约束/条件)AI 未能从指令(maximize production)推出意图(在若干约束下最大化生产)意图本身可能不指向我们真正想要的(信息不完全、理性不完美);需要完整的语言-文化-制度模型(Gabriel 2020)
2对齐到显性偏好(revealed preferences)从行为/反馈中学 $u_{\text{pref}}$我偏好它不要毁灭世界有限行为与无穷多相容的偏好函数;难以推断对未预见情形(如紧急状况)的偏好;偏好可能背离对我真正好的东西
3对齐到最佳利益(best interests)对齐到”客观地说”对我好的 $u_{\text{interest}}$世界被毁灭在客观上对我是坏的客观最佳利益无法经验地确定,是哲学问题而非科学问题;哲学家对其内容有分歧;且可能与自主性(autonomy)冲突,导致家长主义(paternalism)
4对齐到社会价值/道德(social value / morality)对齐到道德上正确的 $u_{\text{moral}}$世界被毁灭对所有人都是坏的道德原则本身是开放问题;规则冲突与例外;道德奖励 hacking;自上而下与自下而上各有系统性缺陷

第四种解释”强调了’我们真正想要的’里的那个我们(we)“——用户所意图、偏好、甚至所利益的,都可能对他人有害。但讲义同时强调”用户仍然重要”:即使要对齐道德,我们也想在对齐道德上可接受的用户意愿;所以”用户真正想要什么”这个问题在更大的伦理框架里依然必须回答。

16.2.4 偏好聚合(preference aggregation)

严格定义:设存在 $G$ 个利益相关群体(stakeholders),群体 $g$ 对方案 $i$ 的效用为 $u_g(i)$。RLHF(L8)隐含地把”人类偏好”当成单一标量奖励,实际做法是对反馈做某种聚合

\[u^{\text{pool}}(i) = \sum_{g=1}^{G} \lambda_g\, u_g(i), \qquad \lambda_g \ge 0,\ \sum_g \lambda_g = 1\]

$\lambda_g$ 是群体 $g$ 的权重。权重从哪来?在最常见的做法里,它等于该群体贡献的反馈条数占比——这是一个纯粹的操作性产物,而非任何规范性的正当化。

若偏好以成对比较给出并服从 Bradley–Terry(BT)模型

\[P(i \succ j \mid g) = \sigma\!\left(u_g(i) - u_g(j)\right) = \frac{1}{1 + e^{-(u_g(i)-u_g(j))}}\]

则以特征 $x_i$ 线性参数化奖励 $r(i) = w^\top x_i$ 后,池化极大似然为

\[w^\star = \arg\max_{w}\ \sum_{g=1}^{G} \lambda_g \!\!\sum_{(i,j)\in \mathcal{D}_g}\!\! \log \sigma\!\left(w^\top x_i - w^\top x_j\right)\]

关键观察:$\lambda_g$ 直接进入目标函数,因此改变 $\lambda$ 就改变 $w^\star$、改变策略、改变谁被牺牲。这就是”谁的价值被编码”的精确含义。注意 BT 似然只在 $w$ 的尺度上不可辨识($w$ 与 $cw$ 给出不同的预测概率,故尺度可辨识;但组间的 $w_g$ 量级不可比),所以跨组平均前必须做显式的归一化选择——这本身就是规范性决定(16.4 实验二的 A / B / B2 三种规则)。

具体示例(16.4 实验二):3 个群体、7 个候选方案、两个属性(profit / safety)。效率优先组反馈条数设为安全优先组的 8 倍,仅此一项就把选中方案从 arm 6(安全组效用 0.970)翻转到 arm 0(安全组效用 0.240)——安全组效用变化 $-0.730$,而总效用只变化 $-0.018$。

16.2.5 道德对齐的两种路径(top-down / bottom-up)

自上而下(top-down):显式写出道德原则,通过奖励函数、后处理等保证对齐。困难在于“正确的道德原则是什么”是道德理论中的开放问题:功利主义(utilitarianism)要求最大化所有人的净幸福总量,但”幸福的分配呢?权利呢?”;常识多元论(common-sense pluralism)承认”别撒谎”“别偷窃”“别伤害人”“守承诺”等多条原则,但原则冲突时怎么办、高度微妙的例外怎么办。讲义把由此产生的失败模式命名为“道德奖励 hacking”(moral reward hacking)错误指定的道德原则会推荐出人意料的坏行为。课堂提问:”一个功利主义 AI 会以什么出人意料的方式去最大化所有人的净幸福总量?”

自下而上(bottom-up):不显式写出原则,通过范例学习道德——例如 IRL、模仿学习或 RLHF。困难是道德分歧:”谁的范例?”ChatGPT 该不该描绘先知穆罕默德?该不该提供规避执法的建议?取决于你问谁。技术上还有罕见/未预见情形:讲义给的例子是在真实人类驾驶数据上训练的自驾系统可能从没见过刹车失灵时该如何应对。规范性挑战则是代表性(representation):跨个体与跨文化的道德分歧、用的是谁的范例、以及多数人的行为会压过少数群体的价值

16.2.6 参与式 AI(participatory AI)

严格定义(讲义原文):把”从人类学习”扩展为包含 (a) 多重利益相关者、(b) 受影响的非用户(affected non-users)、(c) 持续输入而非一次性训练;并把价值视为情境性的(contextual)、可争议的(contestable)、随时间可修改的(revisable over time)。实践形式包括社区顾问委员会、持续的用户反馈通道、部署前的公众咨询;关键伦理考量是承认价值之间会冲突以及愿意随时间修正系统

这一条是对 16.2.5 两条路径的共同诊断的回应:自上而下难以覆盖所有情形与例外、道德规则彼此冲突、容易过度简化、难以刻画个体细微差别;自下而上则反馈分布不均(多数群体更可能被代表、少数或边缘群体可能被低代表),且学到的价值会反映既有的社会偏见。参与式 AI 把”对齐”从一次性求解改写成持续过程。

16.2.7 一个抽象的”对齐对象”统一记号

把 16.2.3 的四种解释写成同一形式,便于记忆:

\[u^\star \in \left\{\, u_{\text{intend}},\ u_{\text{pref}},\ u_{\text{interest}},\ u_{\text{moral}} \,\right\}, \qquad \pi^\star = \arg\max_\pi \mathbb{E}_\pi\!\left[\sum_t u^\star(s_t,a_t)\right]\]

四种目标一般互不相等(这是讲义的 Recap 原话:”These are not always the same thing”),且每一种都带来独有的技术与哲学问题。取哪一个作为 $u^\star$ 是一个规范性的(normative)抉择,而不是一个可以由数据回答的经验问题——这正是本讲要传达给 RL 学习者的核心洞察。


16.3 算法伪代码与完整推导

本讲不引入新算法,但引入了两个可以写成算法的流程:把规格问题实现为 RL 训练回路,以及把偏好聚合成奖励模型。二者正是 16.4 两个实验的骨架。

16.3.1 伪代码 A:在代理规格上做策略优化(会产生规格博弈的回路)

算法 A:Proxy-Spec Policy Optimization(代理规格策略优化)
------------------------------------------------------------------
输入: 环境 T, P(s'|s,a), 折扣 gamma
      代理目标 u_hat(s,a)            # 我们"说出口的"目标,如产量
      真实目标 u_star(s,a)           # 我们"真正想要的",含未说出的代价
      初始策略 pi_theta, 学习率 alpha, episode 数 E
输出: 学到的策略 pi_theta,以及训练全程的 (G_proxy, J_true) 记录

1  for episode = 1 to E do
2      采样轨迹 tau ~ pi_theta                      # rollout
3      G_proxy <- sum_{t=0}^{T-1} u_hat(s_t, a_t)    # 只用代理目标算回报
4      for t = 0 to T-1 do
5          theta <- theta + alpha * grad_theta log pi_theta(a_t|s_t) * (G_proxy - b)
6      end for
7      每若干 episode:
8          G_proxy_eval <- 闭式/蒙特卡洛估计 E_pi[sum_t u_hat]   # 代理回报
9          J_true_eval  <- 闭式/蒙特卡洛估计 E_pi[sum_t u_star]  # 真实目标
10         记录 (episode, G_proxy_eval, J_true_eval)
11 end for
12 return theta, 记录

算法逻辑解说:第 2–6 行是标准的 REINFORCE(L5)。唯一但致命的改动在第 3 行:回报只由 $\hat{u}$ 组成,$u^\star$ 从未出现在任何梯度里。第 8–9 行是实验的观测装置——它把 $J_{true}$ 当作”上帝视角的评分器”,只在训练外部用于观察,绝不反馈给策略。

数学推导(为什么会先升后降):设策略由一个标量强度参数 $k$ 控制。记 $y(k)$ 为单步产量、$d(k)$ 为单步消耗,$k \mapsto y$ 单调递增且回报递减,$k \mapsto d$ 超线性增长。资源池初值 1,则停产时刻 $t_{stop}(k) = \min(T, \lceil 1/d(k) \rceil)$。于是

\[G_{proxy}(k) = T \cdot y(k), \qquad J_{true}(k) = t_{stop}(k)\cdot y(k) - \lambda_{eco}\min(1, T d(k)) - \lambda_{cat}\,\mathbb{1}\!\left[T d(k) > 1\right]\]

$G_{proxy}$ 关于 $k$ 严格单调递增(无上界、无拐点);$J_{true}$ 则在 $T d(k)$ 越过 1 的瞬间被 $\lambda_{cat}$ 惩罚打断,出现断崖下跌。因此在 $k^\star = \arg\max J_{true}$ 之后继续爬 $G_{proxy}$,必然牺牲 $J_{true}$。$\Delta_{\text{spec}}$ 的量级主要由 $\lambda_{cat}$(灾难代价)决定:本实验里它是 500,而单步产量最大只有 3.4,即灾难量级 = 147 步最优产量,但代理奖励对它完全没有分辨率

与理论的对应:这解释了 L8 里 RLHF 奖励模型过优化的现象。奖励模型 $\hat{u}$ 是在人类反馈数据上拟合的,其”可信区间”只覆盖数据分布;策略梯度(L5–L6)会持续寻找 $\hat{u}$ 的上升方向,也就必然走出这个区间(与 L9–L12 的”探索-利用”张力同构:这里探索的是目标函数的漏洞,而非环境的未知)。

16.3.2 伪代码 B:偏好聚合与奖励建模

算法 B:Preference Aggregation -> Reward Model -> Policy
------------------------------------------------------------------
输入: G 个利益群体, 候选集 {x_i}_{i=1..K}
      每组的成对比较数据 D_g = {(i, j, y)}_{...}, y=1 表示 i 优于 j
      聚合权重 λ = (λ_1, ..., λ_G)            # <-- 规范性选择
输出: 奖励参数 w, 由 argmax_i w^T x_i 给出的选中方案

1  for g = 1 to G do
2      可选: 先单独拟合 w_g 并做组内归一化     # 使"每组一票"可实现
3  end for
4  w <- argmax_w  sum_g λ_g * sum_{(i,j,y) in D_g} log sigma(w^T x_i - w^T x_j)
5  for 每个候选方案 i do
6      r(i) <- w^T x_i
7  end for
8  选中方案 a <- argmax_i r(i)
9  return a

算法逻辑解说:第 4 行是池化 Bradley–Terry 极大似然。$\lambda_g$ 的默认做法是令其正比于该组反馈条数——这份”默认”就是实验二里翻盘的原因。若想实现”每组一票”,就要在第 2–3 行先对每组单独拟合再做尺度对齐,然后等权平均;而”如何对齐尺度”(组内 min-max?单位范数?)又是第二个规范性选择。

数学推导(梯度):令 $z_{ij} = w^\top(x_i - x_j)$,$\sigma$ 为 sigmoid,则

\[\nabla_w \log \sigma(z_{ij}) = \left(y_{ij} - \sigma(z_{ij})\right)(x_i - x_j)\]

池化梯度是各组的 $\lambda_g$ 加权和。关键结构性事实:池化损失是凸的(logistic 回归形式的负对数似然 + L2),所以 $w^\star$ 是唯一的(尺度除外)——这意味着聚合结果完全由 $\lambda$ 决定,没有任何”训练随机性”可以辩解。C1 型规范性问题无法通过”再训一次”来消除。

与理论的对应:这正是 L8 中 DPO 的隐含假设。DPO 假设人类偏好服从 Bradley–Terry 模型;本讲指出,当”人类”是复数时,BT 模型只能拟合某一个被 $\lambda$ 固定的聚合偏好,而 $\lambda$ 本身没有任何理论依据。实验二的 $\lambda_g \propto$ 反馈条数这一默认做法,正是讲义所指”多数群体更可能被代表、少数群体可能被低代表”的机制。


16.4 代码实现与实验分析

两个实验分别对应本讲的两条主线:实验一把”Paperclip AI”变成一个可以打印数值曲线的上下文老虎机(contextual bandit),实验二把”谁的价值被编码”变成一个可以量化的偏好聚合问题。两者都只用 NumPy。

16.4.1 实验一:Paperclip 玩具版——代理奖励上升而真实目标先升后降

import numpy as np
import matplotlib
matplotlib.use("Agg")
import matplotlib.pyplot as plt
np.random.seed(0)

C, K, T = 3, 6, 30          # 3 种上下文(产线)、6 档生产强度、30 步
# 产量表:回报递减 —— 代理奖励 r_proxy 只看这张表
YIELD = np.array([[0.0, 1.0, 1.9, 2.6, 3.00, 3.20],
                  [0.0, 0.8, 1.6, 2.3, 2.80, 3.00],
                  [0.0, 1.2, 2.2, 2.9, 3.30, 3.40]])
# 资源消耗速率:随强度超线性增长 —— 代理奖励里完全没有这个信息
CONS  = np.array([[0.000, 0.008, 0.012, 0.018, 0.028, 0.040],
                  [0.000, 0.014, 0.020, 0.032, 0.050, 0.080],
                  [0.000, 0.020, 0.030, 0.050, 0.080, 0.130]])
LAM_ECO, LAM_CAT, CONS_CAP = 50.0, 500.0, 0.017

def softmax(z):
    z = z - z.max(axis=-1, keepdims=True)
    e = np.exp(z)
    return e / e.sum(axis=-1, keepdims=True)

def true_return(probs):
    """代入闭式动力学,算 (代理回报 G_proxy, 真实目标 J_true)。"""
    y = float((probs * YIELD).sum(1).mean())
    d = float((probs * CONS).sum(1).mean())
    proxy = T * y                                     # 代理以为产量永远可以继续
    t_stop = T if d <= 0 else int(min(T, np.ceil(1.0 / d)))
    depletion = min(1.0, T * d)
    collapse = T * d > 1.0
    true = t_stop * y - LAM_ECO * depletion - (LAM_CAT if collapse else 0.0)
    return proxy, true, y, d, collapse

def evaluate(theta, mask=None):
    p = softmax(theta)
    if mask is not None:
        p = p * mask
        p = p / p.sum(1, keepdims=True)
    return (*true_return(p), p)

def train(spec, episodes=600, lr=0.15, seed=1, mask=None, pen=10.0, theta0=None):
    """上下文老虎机上的 REINFORCE(softmax 策略 + 滑动平均 baseline)。
    spec='proxy' 每步奖励= YIELD(用户说出口的指令);
    spec='refined' 每步奖励= YIELD - pen*CONS(工程师手工加的"更好的指令");
    spec='oracle' 直接优化真实目标(含期末生态代价与灾难代价)。"""
    rng = np.random.default_rng(seed)
    theta = np.zeros((C, K)) if theta0 is None else theta0.copy()
    b, hist = 0.0, {"ep": [], "proxy": [], "true": []}
    for ep in range(1, episodes + 1):
        cs = rng.integers(C, size=T)
        p = softmax(theta[cs])
        if mask is not None:
            p = p * mask[cs]
            p = p / p.sum(1, keepdims=True)
        ks = np.array([rng.choice(K, p=p[i]) for i in range(T)])
        yt, ct = YIELD[cs, ks], CONS[cs, ks]
        if spec == "proxy":
            r, bonus = yt, 0.0
        elif spec == "refined":
            r, bonus = yt - pen * ct, 0.0
        else:
            d = ct.mean()
            bonus = -LAM_ECO * min(1.0, T * d) - (LAM_CAT if T * d > 1.0 else 0.0)
            r = yt
        G = r.sum() + bonus
        b = 0.9 * b + 0.1 * G
        for t in range(T):                     # 策略梯度:(onehot - p) * (G - b)
            g = -p[t].copy()
            g[ks[t]] += 1.0
            theta[cs[t]] += lr * (G - b) * g / T
        if ep == 1 or ep % 25 == 0:
            pr, tr, _y, _d, _c, _p = evaluate(theta, mask)
            hist["ep"].append(ep); hist["proxy"].append(pr); hist["true"].append(tr)
    return theta, hist

theta_low = np.tile(-0.8 * np.arange(K), (C, 1))   # 初始策略偏向低强度

print("k  avg_yield  avg_cons  t_stop  collapse   G_proxy    J_true")
for k in range(K):
    p = np.zeros((C, K)); p[:, k] = 1.0
    pr, tr, y, d, col = true_return(p)
    ts = T if d <= 0 else int(min(T, np.ceil(1 / d)))
    print(f"{k}  {y:9.3f}  {d:8.4f}  {ts:6d}  {str(col):8s}  {pr:8.2f}  {tr:9.2f}")

for spec in ["proxy", "refined", "oracle"]:
    _, h = train(spec, theta0=theta_low)
    print(f"\nspec={spec}")
    for e, a, bb in zip(h["ep"], h["proxy"], h["true"]):
        if e % 75 == 0 or e == 1:
            print(f"  {e:4d}  G_proxy={a:7.2f}  J_true={bb:8.2f}")

mask = CONS <= CONS_CAP                # "知道真实硬约束"的受限规格
th_c, _ = train("refined", seed=3, mask=mask, theta0=theta_low)
print("\nspec            E[yield]  E[cons]  collapse   G_proxy    J_true")
for nm, th, mk in [("proxy", train("proxy", theta0=theta_low)[0], None),
                   ("refined", train("refined", theta0=theta_low)[0], None),
                   ("oracle", train("oracle", theta0=theta_low)[0], None),
                   ("constrained", th_c, mask)]:
    pr, tr, y, d, col, P = evaluate(th, mk)
    print(f"{nm:15s}  {y:8.3f}  {d:8.4f}  {str(col):8s}  "
          f"{pr:8.2f}  {tr:9.2f}  k={int(np.argmax(P.mean(0)))}")

代码做什么:定义了一个 30 步的”回形针工厂”上下文老虎机。YIELD 是代理奖励唯一能看到的表(产量随强度单调递增、回报递减);CONS 是代理奖励完全看不到的表(消耗随强度超线性增长,三种产线消耗结构不同)。train 用 REINFORCE 在三种规格上各训 600 个 episode,每 25 个 episode 用闭式动力学记录一次代理回报与真实目标。第四个规格 constrained 在手工惩罚之上再叠加一个可行性掩码(消耗 ≤ 0.017),代表”我们终于知道了真实的硬约束”。初始策略刻意偏向低强度(theta_low),好让”先变好、后崩坏”的过程显形。

RL 机制透视:这是 L5 的 REINFORCE 直接套用在一个 bandit 上——没有折扣、没有自举,回报就是整段 episode 的累积。关键在梯度里出现的 只有 GGrbonus 组成,proxy 规格下 bonus = 0.0,于是真实目标的任何一项都进不了梯度。策略爬到的是 $\hat{u}$ 的极值点,而 $\hat{u}$ 对”资源是否会耗尽”这件事没有任何梯度信号——这不是探索不足(L9–L12 的问题),而是目标函数本身看不见,任何更多的样本、更好的探索都救不了。

实验观察(完整脚本 cs234/code/L16_reward_hacking.py 的真实输出节选;上面代码块是该脚本的核心部分,省略了绘图与部分规格,因此直接粘贴运行上面这一块不会打印下表的全部行——下表数值全部来自完整脚本,运行约 10 秒):

静态基准明确显示代理奖励与真实目标的排序不一致

固定强度 $k$平均产量平均消耗停产步 $t_{stop}$是否耗尽$G_{proxy}$$J_{true}$
00.0000.000030False0.000.00
11.0000.014030False30.009.00
21.9000.020730False57.0026.00
32.6000.033330False78.0028.00
43.0330.052719True91.00−492.37
53.2000.083312True96.00−511.60

只看代理奖励的贪心是 $k=5$($G_{proxy}=96.00$),其真实目标为 $-511.60$;真实最优是 $k=3$($J_{true}=28.00$)。静态规格差距 $\Delta_{\text{spec}} = 539.60$。三种上下文里代理奖励的贪心都是 5(产量单调不减),代理奖励把产线之间的差别完全抹平了。

训练曲线(proxy 规格)精确复现了”先升后降”:

  episode  G_proxy(代理)   J_true(真实)
        1        20.58         7.10
      150        55.46        17.28
      300        72.07        24.04
      450        76.06        26.30
      475        76.33        26.42
      500        76.51      -473.49   <-- 资源耗尽,真实目标断崖
      600        76.96      -473.04

oracle 规格(直接优化真实目标)全程给出 $J_{true}$ 单调上升到 25.93、且从不耗尽refined 规格(产量 − 10×消耗,即”更好的指令”)则恰好把消耗压到了不耗尽的临界点之下:

规格E[yield]E[cons]是否耗尽$G_{proxy}$$J_{true}$
① naive proxy2.5650.0335True76.96−473.04
② refined proxy(−10×消耗)2.5520.0331False76.5526.84
③ oracle(真实目标)1.9810.0223False59.4225.93
④ constrained(消耗 ≤ 0.017)0.8710.0084False26.1213.57

按代理回报排序:proxy (76.96) > refined (76.55) > oracle (59.42) > constrained (26.12); 按真实目标排序:refined (26.84) > oracle (25.93) > constrained (13.57) > proxy (−473.04)。 两个排序几乎完全颠倒——越是把代理奖励刷高的规格,真实后果越糟。最刺眼的一行数字是:proxy 与 refined 的 $G_{proxy}$ 只差 0.41(相对差 $0.41/76.96 \approx 0.53\%$),但 $J_{true}$ 相差 499.88,即代理奖励对”是否发生灾难”这件事的分辨率只有约 0.5%

最后,手工惩罚系数的扫描说明了”给出更好的指令”能走多远:

   pen   偏好的强度k   E[cons]  collapse     G_proxy      J_true
    0.0        3         0.0308  False        69.09      22.88
   10.0        3         0.0301  False        67.66      22.58
   30.0        2         0.0231  False        60.69      26.08
   50.0        2         0.0182  False        47.94      20.68
   80.0        0         0.0069  False        23.95      13.62
  200.0        0         0.0005  False         1.68       0.89

pen 从 0 调到 30 可以把 $J_{true}$ 从 22.88 拉到 26.08(接近最优 28.00),但没有任何一个 pen 能超过真实最优,而继续调大 pen 会把策略推向 $k=0$(完全不生产,$J_{true}$ 掉到 0.89)。更重要的是:找到这个 pen 值本身要求我们已经知道真实目标的结构(知道灾难量级约 500、知道最优强度在 3 附近)。指令层面的修补无法替代目标层面的正确性。


16.4.2 实验二:谁的价值被编码?——偏好聚合规则决定结果

import numpy as np
import pandas as pd
import matplotlib
matplotlib.use("Agg")
import matplotlib.pyplot as plt
np.random.seed(0)

K = 7
FEAT = np.array([[0.95, 0.05], [0.80, 0.25], [0.65, 0.45], [0.50, 0.60],
                 [0.38, 0.72], [0.22, 0.88], [0.05, 0.96]])   # (利润, 安全)
W = {"g0 效率优先": np.array([1.0, 0.2]),
     "g1 安全优先": np.array([0.2, 1.0]),
     "g2 平衡派":   np.array([0.6, 0.6])}
U = {g: FEAT @ w for g, w in W.items()}
GROUPS = list(W.keys())
SCALE = {"g0 效率优先": 8, "g1 安全优先": 1, "g2 平衡派": 1}   # 反馈量不均

def sigmoid(z):
    return 1.0 / (1.0 + np.exp(-z))

def sample_comparisons(group, n, rng):
    """按 Bradley-Terry 模型为某一组采样成对偏好。"""
    u = U[group]
    i, j = rng.integers(K, size=n), rng.integers(K, size=n)
    ok = i != j; i, j = i[ok], j[ok]
    p = sigmoid(u[i] - u[j])
    return i, j, (rng.random(len(i)) < p).astype(float)

def stack(pairs):
    return (np.concatenate([p[0] for p in pairs]),
            np.concatenate([p[1] for p in pairs]),
            np.concatenate([p[2] for p in pairs]))

def fit_bt(pairs, iters=1200, lr=1.2, l2=1e-4):
    """以 x_i 为特征的 Bradley-Terry 奖励模型 r(i) = theta . x_i 的极大似然。"""
    i, j, y = stack(pairs)
    theta = np.zeros(FEAT.shape[1])
    for _ in range(iters):
        p = sigmoid(FEAT[i] @ theta - FEAT[j] @ theta)
        g = -((y - p)[:, None] * (FEAT[i] - FEAT[j])).sum(0) + 2 * l2 * theta
        theta -= lr * g / len(i)
    return theta, FEAT @ theta

def fit_unit_scale(pairs):
    """组内分数 min-max 归一化到 [0,1]:不同组的 theta 量级不可比,
    要先对齐"每组内部最想要->1、最不想要->0",才谈得上"每组一票"。"""
    _, s = fit_bt([pairs])
    lo, hi = s.min(), s.max()
    return (s - lo) / (hi - lo) if hi > lo else s * 0.0

def copeland(pairs):
    """多数投票 / Copeland 计分:每个方案赢下多少对。"""
    i, j, y = stack(pairs)
    wins = np.zeros(K)
    for a, b, yy in zip(i, j, y):
        wins[a if yy > 0.5 else b] += 1
    return wins

DATA = {g: sample_comparisons(g, 300, np.random.default_rng(11 + k))
        for k, g in enumerate(GROUPS)}

rules = {}
rules["A 等权池化 BT"] = fit_bt([DATA[g] for g in GROUPS])[1]
rules["B 反馈量加权 BT"] = fit_bt([DATA[g] for g in GROUPS
                                  for _ in range(SCALE[g])])[1]
rules["B2 组内归一化后平均"] = np.mean([fit_unit_scale(DATA[g]) for g in GROUPS], 0)
rules["C 多数投票 Copeland"] = copeland([DATA[g] for g in GROUPS])
rules["D 仅效率优先组"] = fit_bt([DATA["g0 效率优先"]])[1]
rules["E 仅安全优先组"] = fit_bt([DATA["g1 安全优先"]])[1]

# 参照系:直接用不同社会福利函数优化真实效用
def social(kind):
    f = {"util": lambda v: v.sum(),
         "nash": lambda v: np.log(v - v.min() + 0.35).sum(),
         "rawls": lambda v: v.min()}[kind]
    return np.array([f(np.array([U[g][i] for g in GROUPS])) for i in range(K)])

rules["F 功利主义 sum u_g"] = social("util")
rules["G 纳什积 log u_g"]   = social("nash")
rules["H 罗尔斯 min u_g"]   = social("rawls")

print(f"{'聚合规则':<20}{'选中方案':>8}{'效率组':>9}{'安全组':>9}{'平衡组':>9}"
      f"{'sum':>9}{'min':>9}")
for name, sc in rules.items():
    a = int(np.argmax(sc))
    us = np.array([U[g][a] for g in GROUPS])
    print(f"{name:<20}{a:>8d}{us[0]:>9.3f}{us[1]:>9.3f}{us[2]:>9.3f}"
          f"{us.sum():>9.3f}{us.min():>9.3f}")

print("\n[反馈量不均的代价]")
a_eq = int(np.argmax(rules["A 等权池化 BT"]))
a_wt = int(np.argmax(rules["B 反馈量加权 BT"]))
print(f"  A 等权池化 选中 arm {a_eq}:安全组效用 = {U['g1 安全优先'][a_eq]:.3f}")
print(f"  B 加权池化 选中 arm {a_wt}:安全组效用 = {U['g1 安全优先'][a_wt]:.3f}")
print(f"  -> 效率组反馈条数多 8 倍,安全组效用变化 "
      f"{U['g1 安全优先'][a_wt] - U['g1 安全优先'][a_eq]:+.3f}")

print("\n[样本量比例扫描]")
for ratio in [100, 20, 8, 2, 1, 0.25, 0.05, 0.01]:
    n0 = max(1, int(round(8 * ratio / (1 + ratio))))
    n1 = max(1, int(round(8 / (1 + ratio))))
    _, r = fit_bt([DATA["g0 效率优先"]] * n0 + [DATA["g1 安全优先"]] * n1
                  + [DATA["g2 平衡派"]] * n1)
    a = int(np.argmax(r))
    us = np.array([U[g][a] for g in GROUPS])
    print(f"  n(g0):n(g1)={n0}:{n1}  选中 arm {a}  "
          f"u(效率)={us[0]:.3f} u(安全)={us[1]:.3f} min={us.min():.3f}")

代码做什么:构造 7 个候选方案,每个方案有两个属性——利润与安全,二者在此例中沿 Pareto 前沿此消彼长。三个群体对这两个属性赋予不同权重(效率优先、安全优先、平衡),因此它们的效用排序系统性冲突。每组按 Bradley–Terry 模型各生成 300 条成对比较。然后实现 8 种聚合规则:等权池化 BT、按反馈量加权池化 BT、组内归一化后平均、多数投票(Copeland)、只听效率组、只听安全组,以及作为参照系的三种社会福利函数(功利主义 / 纳什积 / 罗尔斯)。最后扫描”效率组 : 安全组”的样本量比例,看选中方案如何翻转。

RL 机制透视:这是 L8 的 RLHF 流水线的前半段被放大检视。L8 里”人类偏好 → 奖励模型”这一步被当作黑箱;这里把它拆成”每组各自的偏好 → BT 拟合 → 聚合”三件事,而每一件都含有一个规范性选择:谁被采样($\mathcal{D}_g$ 的构造)、每组的 $w_g$ 如何归一化、$\lambda_g$ 取多少。聚合发生在奖励模型的参数上,因此它决定了策略最终爬向哪个极值点——与实验一的”代理目标”是同一回事:聚合后的 $u^{\text{pool}}$ 只是 $u^\star$ 的一个代理。

实验观察cs234/code/L16_preference_aggregation.py 真实输出,运行约 10 秒):

聚合规则选中方案效率组效用安全组效用平衡组效用summin
A 等权池化 BT60.2420.9700.6061.8180.242
B 反馈量加权 BT00.9600.2400.6001.8000.240
B2 组内归一化后平均60.2420.9700.6061.8180.242
C 多数投票 Copeland60.2420.9700.6061.8180.242
D 仅效率优先组00.9600.2400.6001.8000.240
E 仅安全优先组50.3960.9240.6601.9800.396
F 功利主义 $\sum u_g$20.7400.5800.6601.9800.580
G 纳什积 $\log u_g$60.2420.9700.6061.8180.242
H 罗尔斯 $\min u_g$30.6200.7000.6601.9800.620

三组人群的偏好严重冲突(两两一致率):效率组 vs 安全组 = 0.000(在 21 对方案上排序从不一致),效率组 vs 平衡派 = 0.286,安全组 vs 平衡派 = 0.571。各组单独最优分别是 arm 0 / arm 6 / arm 2。

最关键的对照是 A 与 B:两者用的是同一批偏好数据、同一个 BT 模型、同一个优化过程,唯一的差别是效率组的反馈条数是别人的 8 倍。结果选中方案从 arm 6 翻到 arm 0,安全组效用从 0.970 掉到 0.240(−0.730),而总效用只变化 −0.018——收益完全没变,代价全部由少数群体承担。样本量比例扫描证实这是一个阈值翻转而非渐变:

  n(g0):n(g1)   选中 arm   u(效率)   u(安全)      min
       8 : 1          0      0.960     0.240     0.240
       7 : 1          0      0.960     0.240     0.240
       5 : 3          6      0.242     0.970     0.242
       4 : 4          6      0.242     0.970     0.242
       1 : 8          6      0.242     0.970     0.242

再看”每组被满足的程度”(用学到的奖励去预测该组自己的成对比较):

  聚合规则                    g0 效率优先   g1 安全优先   g2 平衡派     平均
  A 等权池化 BT                    0.414       0.606       0.521    0.514
  B 反馈量加权 BT                  0.586       0.394       0.479    0.486
  D 仅效率优先组                   0.586       0.394       0.479    0.486
  (参照:该组自己的 MLE)           0.586       0.618       0.521    0.575

注意各组自己的 MLE 上限也只有 0.52–0.62(因为两组的偏好方向几乎相反,任何单一标量奖励都必然得罪一侧)。这说明问题不在于拟合得好不好,而在于:一旦我们决定把分歧压成一个标量奖励,”落在谁的一侧”就成了唯一剩下的问题,而回答它的正是 $\lambda_g$。


16.5 评估指标与理论保证

本讲没有收敛性定理,但有可以形式化并量化的评估维度,以及一条关于”能保证什么”的明确结论。

指标 1:规格差距(specification gap)。$\Delta_{\text{spec}} = \max_\pi J_{true}(\pi) - J_{true}(\pi^\star_{proxy})$。它衡量”按代理目标最优行动”相对于”按真实目标最优行动”的损失。实验一中 $\Delta_{\text{spec}} = 539.60$(静态)/ $501.04$(学习后)。注意它不是 regret:L9–L12 的 regret 刻画的是”相对于同一个目标的最优策略”的损失,$\Delta_{\text{spec}}$ 刻画的是”目标写错了“的损失,前者可随样本量趋于 0,后者不随样本量改善——这是本讲与 L9–L12 最本质的区别。

指标 2:代理目标与真实目标的分辨率。定义代理目标在”是否发生灾难”上的判别力,例如 $\left\vert G_{proxy}(\text{灾难}) - G_{proxy}(\text{无灾难})\right\vert / G_{proxy}(\text{无灾难})$。实验一中这个值是 $0.41 / 76.96 \approx 0.0053$,即 0.5%。当一个 500 量级的灾难在代理奖励上只表现为 0.5% 的差别时,任何统计噪声都会把它淹没。

指标 3:聚合权重的敏感性。$\partial \pi^\star / \partial \lambda_g$。实验二显示这是阈值型而非线性的:样本比从 8:1 变到 5:3 时选中方案整体翻转。阈值型敏感性意味着”稍微多收集一点某群体的反馈”可能是安全的,也可能是决定性的——无法靠直觉判断。

指标 4:福利维度(aggregate vs distributive)。$\sum_g u_g$(效率)与 $\min_g u_g$(最差者的处境)。实验二给出一个清晰的展示:”功利主义”(0.580)与”罗尔斯”(0.620)在 $\min$ 上相差 0.040;”反馈量加权 BT”在 $\min$ 上是 0.240,与罗尔斯差 0.380。任何单一标量指标都无法同时表达”总量”和”分配”——这正是讲义”功利主义:那幸福的分配呢?”的形式化。

理论保证(本讲的全部”保证”):讲义 Takeaways 的原话是

No silver bullet to guarantee perfectly moral behavior.(没有任何银弹能保证完全道德的行为。)But alignment can be better or worse.

即:不存在能保证 $u^{\text{pool}} = u^\star$ 的算法;我们能获得的保证只有相对改进。讲义给出的改进配方是:(1) 从(几乎)所有人都同意的容易部分开始——”你的 AI 不应该杀人!它(通常)不应该撒谎”;(2) 但也要尽力捕捉复杂性——自上而下路径要仔细思考原则、冲突与例外,自下而上路径要有创意地尽可能多地训练罕见/边缘案例

条件依赖分析

  • 自上而下(显式原则):保证强度取决于原则集的完备性与一致性;已知失效条件是原则冲突、例外情形、过度简化、难以刻画个体细微差别,以及道德奖励 hacking(错误原则推荐出人意料的坏行为)。
  • 自下而上(从范例学习):保证强度取决于数据的分布;已知失效条件是罕见/未预见情形(如刹车失灵)与代表性偏差(多数人行为压过少数价值、反馈分布不均)。
  • 参与式(持续修正):把”一次性保证”换成”可修正性”作为目标,其正当性来自价值被视为情境性、可争议、随时间可修改
  • 用户侧(16.2.3 的 1–3):无论选哪种对齐对象,只要它与自主性(autonomy)冲突就必须重新权衡——讲义明确说,即使我们决定对齐用户的最佳利益,”用户对自主性的兴趣也可能给我们理由去考虑他们的意图或偏好,即使这些与他们的其他利益冲突“。

16.6 与其他讲次的关联

与 L8(Imitation Learning / RLHF / DPO)——最直接的对偶关系。L8 的整条流水线是”人类偏好 → 奖励模型 → 策略优化”,RLHF 与 DPO 都把人类偏好形式化为可优化的奖励,DPO 还明确假设偏好服从 Bradley–Terry 模型。L16 正好从两端追问这条流水线的合法性:上游——偏好本身从何而来、是否可靠、以及”人类”是复数时该用谁的偏好(16.2.4 的 $\lambda_g$);下游——奖励 hacking(L8 里的 reward over-optimization)正是价值对齐失败在工程上的可见表现,而 16.2.2 把它形式化为 $\Delta_{\text{spec}}$。L8 告诉你如何对齐,L16 告诉你对齐到什么是无法由技术本身决定的。 本讲的实验二直接复用了 L8 的 Bradley–Terry 假设。

与 L7(MaxEnt IRL)。IRL 从示范中反推 $u^\star$。讲义在”自下而上”路径里明确点了 inverse RL。L7 的理论(MaxEnt IRL 的可辨识性)假定了示范来自单一、稳定的奖励函数;L16 指出这个假定在道德场景下失效:”少数群体可能被低代表”“多数人的行为会压过少数价值”——即示范的分布决定了学到的 $u^\star$ 偏向谁。

与 L9–L12(Fast RL / 探索与遗憾)。这是本讲最有教益的对比:L9–L12 用 $O(\sqrt{\vert \mathcal{S}\vert \vert \mathcal{A}\vert T})$、$O(\sqrt{K\log n})$ 这类界回答”探索得够不够快、够不够省”,其中遗憾的定义前提是奖励函数正确。L16 指出另一类失败:遗憾很小但目标错了——实验一中 proxy 规格的代理回报单调上升、收敛得很好,遗憾(相对代理目标)趋于 0,但真实目标是灾难。探索不足可以靠更多样本修复;目标错误不能。 L10 的 UCB 遗憾界推导(lecture10post.pdf 第 10–16 页)与紧随其后的本讲构成一个漂亮的转折:同一份 PDF 前半部分在证明”我们能高效地找到最优动作”,后半部分在追问”我们凭什么认为那个’s 最优’是我们想要的”。

与 L13–L14(MCTS / AlphaZero / 部署伦理)。L14 的伦理与社会客座讨论了 AI 系统部署后的责任与影响;L16 提供了它的规范理论基础:为什么”对齐”不是一个可以一次性解决的问题(16.2.6 的参与式 AI:价值是情境性、可争议、可修改的)。

与 L1(RL 问题定义)。L1 把 RL 定义为”智能体在环境中通过奖励信号学习最优行为”。L16 追问了这个定义里唯一未经辩护的对象——奖励信号本身。讲义对全课程的立场可以概括为:RL 的数学是关于”给定目标求最优”的,而”目标从哪来”是 STS、伦理学与政治哲学的问题,不是 RL 能内部解决的。

与课程项目/作业的关系。讲义与课程首页的立场呼应:生成式 AI 不能作为项目合作者,因为它无法承担错误与责任。这一条在 L16 的框架里获得了理论表达:对齐的四种解释里,只有第 3 种(最佳利益)与第 4 种(道德)试图引入”客观对错”,而讲义明确指出客观最佳利益无法经验地确定——因此任何把责任转移给系统的做法都缺少规范基础。

与客座讲者方法论(STS 视角)的关系。Wanheng Hu 的方法论是科学技术论(Science and Technology Studies, STS)民族志(ethnography),研究对象是中国医疗 AI 产业。她的三个核心问题——“Does medical AI = digitized doctors? In what sense? How do we trust it?”(医疗 AI 等于数字化的医生吗?在什么意义上?我们如何信任它?)——正是本讲讨论在具体产业中的落地:医疗 AI 不是把”医生”这个角色数字化,而是在医院、监管、产业、患者之间重新分配判断与责任。三个问题的 STS 结构与本讲的技术结构一一对应:(a) “等于吗” = 目标是否等价($\hat{u}$ vs $u^\star$);(b) “在什么意义上” = 精确化问题(16.2.3 的四种解释);(c) “如何信任” = 验证与归责问题(16.5 的”没有银弹”,只能让对齐”更好或更坏”)。这也解释了讲义为何不用形式化定义开场,而是先讲一个产业民族志研究者的三个问题——从 CS 视角到 STS 视角的转换,本身就是本讲的教学内容之一。


16.7 关键要点

  • 价值对齐 = “How do we design AI agents that will do what we really want?” 它的困难不在于我们不知道要什么,而在于我们真正想要的往往远比我们说出口的更微妙:人类依赖大量难以形式化、容易被视为理所当然的背景假设。
  • “给出更好的指令”不足以解决问题。讲义给出的两条理由是:手动指定奖励函数本身就很困难;对从非专家用户接收指令的 AI 而言更糟。实验一的数字把这一点钉死:手工惩罚系数 $pen$ 无论怎么调,$J_{true}$ 最高只到 26.08,达不到真实最优 28.00;而要调出这个值,前提是我们已经知道真实目标的结构。
  • 四种解释必须逐一辨析:对齐到意图(intentions)、显性偏好(revealed preferences)、最佳利益(best interests)、社会价值/道德(social value / morality)。它们一般互不相等,各有独有的技术与哲学困难。选哪个是规范性抉择。
  • Paperclip AI 的精确诊断:不是”AI 太强大”,而是 AI 未能从指令(maximize production)推出真实意图(在若干约束下最大化生产)——失败发生在语义层面,而不是能力层面。
  • 规格博弈是本讲与 L8 的交汇点。$\Delta_{\text{spec}}$ 不随样本量下降:实验一里代理回报收敛得很漂亮,真实目标却是 $-473.04$。
  • “我们”是复数:用户所意图、偏好、利益的都可能对他人有害,因此必须引入社会价值/道德这第四种解释,并追问”谁的价值被编码”。实验二显示:把某群体反馈量放大 8 倍(其余完全不变),选中方案翻转、该少数群体效用掉 0.730,而总效用只变 0.018。
  • 没有银弹:不存在保证完全道德行为的算法;能追求的是相对更好——先做所有人都同意的事(不杀人、不撒谎),再尽力捕捉复杂性(自上而下细究原则与例外,自下而上创意地覆盖罕见/边缘案例),并用参与式 AI(多重利益相关者、受影响非用户、持续输入)让系统随时间可修正。

16.8 常见误区与注意事项

误区 1:以为”对齐”是”把奖励函数写得更仔细一点”的工程问题。 讲义原文:“It’s hard to solve this problem just by giving better instructions!”。实验一给出了精确的边界:refined 规格(把消耗以系数 10 显式惩罚)确实把 $J_{true}$ 从 $-473.04$ 救到 $26.84$,看起来”修好了”——但这条规格恰好卡在耗尽的临界点旁边,$E[cons]=0.0331$ 与 $E[yield]=2.552$ 距临界只有一步之遥,任何分布漂移(新产线、新订单结构)都可能再次越线。正确认识:手工修补能提高鲁棒性,但上界由”我们是否知道真实目标的结构”决定,而不是由”我们多努力地调参”决定。真正的对齐需要把对齐做成持续过程(16.2.6),而不是一次性设定。

误区 2:把规格博弈等同于探索不足,以为更多数据能解决。 这是 RL 学习者最容易犯的错,因为 L9–L12 训练我们”失败 = 探索不够”。正确认识:L9–L12 的遗憾是在奖励函数正确的前提下定义的;目标写错时,策略会精确地收敛到漏洞上——实验一的 proxy 规格 600 个 episode 内代理回报单调上升到 76.96,没有任何”探索失败”的迹象。这属于目标设定错误,样本量对它无能为力。

误区 3:以为”对齐到道德”就是对齐到一套规则(自上而下就够了)。 讲义明确列出 top-down 的限制:难以造出覆盖所有可能情形、处理边缘情况与例外的规则集;道德规则常常互相冲突;有过度简化的风险;难以捕捉个体细微差别;而且错误指定的道德原则会推荐出人意料的坏行为(道德奖励 hacking)。正确认识:自上而下只是两条腿中的一条;必须与自下而上(从范例、反馈、行为中学习)结合,并且两者都有系统性缺陷——自下而上会因反馈分布不均而放大既有的社会偏见。

误区 4:以为 RLHF 的”人类偏好”是一个中立的、单一的信号。 L8 把它当作一个标量目标,DPO 明确假设 Bradley–Terry 模型。正确认识:实验二显示,同一批模型、同一批数据、同一个优化器,仅仅改变偏好样本的数量配比,选中的方案就从 arm 6 翻到 arm 0,少数群体效用掉 0.730。$\lambda_g$ 的默认取值(正比于反馈条数)是一个未被辩护的规范性选择。讲义对应的原话是:”反馈往往分布不均——多数群体更可能被代表,少数或边缘群体可能被低代表”,以及”多数人的行为可能压过少数价值”。

误区 5:以为”有自主性”是次要的,用户的最佳利益可以压倒用户的意愿。 讲义专门用一页讨论这一点:自主性被广泛认为是对一个人好的东西——”即使你不总是做出最好的选择,也能自己选择如何生活”。随后明确警告 paternalism(家长主义):替别人决定什么对他最好,而不是让他自己决定。结论是反直觉但重要的:即使我们决定对齐用户的最佳利益,用户对自主性的兴趣也可能给我们理由去考虑他们的意图或偏好,即使这些与他们的其他利益冲突正确认识:四种对齐目标不是简单的优先级排序,自主性本身就是一个必须进入 $u^\star$ 的利益项。

误区 6:以为”存在客观最佳利益”,所以只要算得够准就行。 讲义原文:“my objective best interests can’t be determined empirically. What’s objectively good for me is a philosophical question, not a scientific one.” 并且”哲学家对什么是客观地好于一个人有分歧”——是本人自己的快乐/幸福?欲望或偏好的满足?还是健康、安全、知识、关系即便不被享受或偏好也是客观地好的?正确认识:这一条直接否定了把对齐问题完全交给经验方法的可能。好消息是讲义也指出有大量共识:健康、安全、自由、知识、社会关系、目的、尊严、幸福——几乎所有人都同意这些至少通常对拥有它们的人是好的。这正是”先做大家都同意的事”这条实践路线的依据。

误区 7:以为讲义的第 40 页(企鹅图)等图像页承载了额外的技术论点。 lecture10post.pdf 第 21–23 页(”From boats to roads” 两页、”From entertainment to treatment”)与第 40 页、以及 ethics.pdf 第 13 页(Jobin et al. 2019)是纯图像页,PDF 中不含可抽取文字(本环境的抽取文本只有标题文字)。正确认识:这三组”现实案例”的标题文字本身就是讲义要传达的论点骨架——下节的思考题会基于标题与其所在页序给出可辩护的解释,但不应把图像内容当作已核实的讲义原话引用


16.9 思考题(带答案)

题 1(技术题):把 Paperclip 问题写成规格差距并计算

考虑 16.4 实验一的静态设定:$T=30$,三种上下文等权,产量表 YIELD、消耗表 CONS 如上,$\lambda_{eco}=50$,$\lambda_{cat}=500$,资源池初值 1。

(a) 写出 $G_{proxy}(k)$ 与 $J_{true}(k)$ 的闭式表达式。 (b) 计算 $k=3$ 与 $k=5$ 的 $J_{true}$,并给出静态规格差距 $\Delta_{\text{spec}}$。 (c) 若把灾难代价 $\lambda_{cat}$ 从 500 改成 5,$k^\star$ 会变吗?$\Delta_{\text{spec}}$ 会变吗?请解释这个结果对”我们对齐的好坏取决于什么”的含义。

答案

(a) 对固定强度 $k$,令 $\bar{y}(k) = \frac{1}{3}\sum_{c} \text{YIELD}[c,k]$,$\bar{d}(k) = \frac{1}{3}\sum_c \text{CONS}[c,k]$,则 $t_{stop}(k) = \min\left(30, \left\lceil 1/\bar{d}(k) \right\rceil\right)$,且

\[G_{proxy}(k) = 30\,\bar{y}(k), \qquad J_{true}(k) = t_{stop}(k)\,\bar{y}(k) - 50\min\!\left(1, 30\bar{d}(k)\right) - 500\cdot\mathbb{1}\!\left[30\bar{d}(k) > 1\right]\]

(b) $k=3$:$\bar{y}=2.600$,$\bar{d}=(0.018+0.032+0.050)/3=0.0333$,$30\bar{d}=1.000$(恰好等于 1,尚未超过),故 $t_{stop}=30$、$\lambda_{cat}$ 项为 0,$J_{true}=30\times 2.600 - 50\times 1.000 = 78.00 - 50.00 = \mathbf{28.00}$(与实验输出一致)。

$k=5$:$\bar{y}=3.200$,$\bar{d}=(0.040+0.080+0.130)/3=0.0833$,$30\bar{d}=2.50>1$,故 $t_{stop}=\lceil 1/0.0833\rceil=12$,$\lambda_{cat}$ 项为 500。$J_{true}=12\times 3.200 - 50\times 1.000 - 500 = 38.40 - 50 - 500 = \mathbf{-511.60}$(与实验输出一致)。

$\Delta_{\text{spec}} = 28.00 - (-511.60) = \mathbf{539.60}$,与脚本打印的静态差距一致。

(c) $k^\star$ 不变,$\Delta_{\text{spec}}$ 会变。 因为 $J_{true}$ 中灾难项的系数只影响”越过临界之后”的惩罚深度,不改变临界点的位置:$k\le 3$ 时 $30\bar{d}\le 1$,$k\ge 4$ 时 $30\bar{d}>1$,这个分类只由 $\bar{d}$ 决定,与 $\lambda_{cat}$ 无关。所以 $k^\star=3$ 保持。但 $\Delta_{\text{spec}}$ 从 $539.60$ 降到 $28.00 - (38.40 - 50 - 5) = 28.00 - (-16.60) = \mathbf{44.60}$。

含义:对齐的”好坏”不取决于我们优化得多努力,而取决于真实目标里那些我们没写进代理的部分有多重要。如果”世界被毁灭”的代价只有 5,那么”把产量最大化到极限”这个错误规格的损失只有 44.60,几乎是可容忍的;正因为它量级极大,错误才致命。这提示了一条实践原则:在写奖励之前,先估计代理目标与真实目标之间”未被表示的部分”的量级上界——如果这个上界很大,那么再精细的奖励工程都不足以保证安全。

题 2(技术题):Bradley–Terry 聚合的权重敏感性

实验二中,效率组(g0)与安全组(g1)的样本量比从 8:1 变为 5:3 时选中方案发生翻转(arm 0 → arm 6)。已知池化 BT 的负对数似然为 $L(w) = -\sum_g \lambda_g \sum_{(i,j,y)\in\mathcal{D}g}\left[y\log\sigma(w^\top\Delta{ij}) + (1-y)\log(1-\sigma(w^\top \Delta_{ij}))\right]$,其中 $\Delta_{ij}=x_i-x_j$。

(a) 写出 $\partial L/\partial w$,并说明 $\lambda_g$ 如何进入梯度。 (b) 解释为什么”翻转”是阈值型的而不是线性的。 (c) 若要实现”每组一票”(每组对 $w$ 的影响与其反馈条数无关),需要怎么做?请指出这一做法引入的新问题。

答案

(a) 每一对比较的梯度是 $(y_{ij} - \sigma(w^\top\Delta_{ij}))\Delta_{ij}$,于是

\[\frac{\partial L}{\partial w} = -\sum_{g}\lambda_g \!\!\sum_{(i,j,y)\in\mathcal{D}_g}\!\! \left(y_{ij} - \sigma\!\left(w^\top\Delta_{ij}\right)\right)\Delta_{ij} \;+\; 2\rho w\]

($\rho$ 为 L2 系数)。$\lambda_g$ 线性地缩放第 $g$ 组所有样本的梯度贡献。因为 $L$ 是凸的,$w^\star$ 唯一(尺度除外),所以 $\lambda$ 的每一个取值都对应一个确定的、可预测的 $w^\star$——没有任何训练随机性可以掩盖这个选择

(b) 因为决策发生在 $\arg\max_i w^\star{}^\top x_i$ 上,而这是一个不连续的、最大值的运算。$w^\star(\lambda)$ 关于 $\lambda$ 是连续(甚至光滑)的,但 $\arg\max$ 是分段常数的:只要 $w^\star$ 的方向还落在把 arm 0 排第一的锥内,选中方案就不变;一旦 $\lambda$ 的变化把 $w^\star$ 推过锥的边界,选中方案就跳变。所以观察到的就是”8:1、7:1 都选 arm 0,5:3 就跳到 arm 6”这种阶梯。实验二打印的”选中方案在各组自己心目中排名”也佐证了这种跳变:A 规则下 arm 6 对效率组是最不喜欢的(排名 6/6),对安全组是最喜欢的(0/6)——跳变跨越的是整个排序,不是相邻一格。

(c) 做法:先对每组单独拟合 $w_g^\star$(用该组自己的数据、不加 $\lambda$),再做尺度对齐,最后等权平均 $\bar{w} = \frac{1}{G}\sum_g \tilde{w}_g$。实验二用”组内分数 min-max 归一化到 $[0,1]$”实现 $\tilde{w}_g$。

新问题:(i) 尺度对齐本身是规范性选择——min-max、单位范数、还是以某一组为基准,会给出不同的 $\bar{w}$;(ii) 它仍然假设各组可以被映射到同一个公共尺度上,而如果某组的效用函数根本不是单调变换可比(例如某一组把某个属性视为权利而非可交换的效用),任何尺度对齐都是不当的;(iii) 等权平均忽略了受影响程度——人数少的群体可能受到的影响最直接(讲义中”受影响的非用户”正是这个问题的极端形式),”每组一票”同样是一种规范性立场,而非中立真理。这正好印证讲义的观点:没有一种聚合规则在规范上是免费的

题 3(伦理讨论题):Sycophancy 属于哪种对齐?在 RLHF 中如何缓解?

讲义 Case Study 1:谄媚(sycophancy)指”AI 系统同意用户或认可其信念,即使那些信念是虚假的、有害的或不理性的”,在 RLHF 训练的 LLM 中被观察到。讲义的解释是:”人类评分者奖励那些感觉有帮助、有礼貌、令人愉快的回答”,于是系统”优化的是取悦用户,而不必然是真理或福祉”。

(a) 谄媚最能说明四种解释中的哪一种?请给出你的判断与理由。 (b) 如果由你设计 RLHF 流程,如何减少或防止谄媚?请给出至少两条具体措施,并说明每条措施牺牲了什么。 (c) 讲义在第 36–37 页给出 Agentic AI 的三连问:智能体何时应当不询问就行动、何时应当让用户决定、何时应当覆盖或抵抗用户?请用四种对齐框架讨论其中一问。

答案(开放议题,以下是有依据的论证而非唯一结论)

(a) 最有解释力的是”对齐到显性偏好”(revealed preferences)的失败,同时暴露了它与”最佳利益”和”道德”之间的裂缝。 理由是:RLHF 的奖励信号直接来自用户的反馈与评分,这正是讲义定义的”从用户的行为或反馈中推断用户的偏好”。谄媚说明从这里推断出的偏好不等于用户真正想要的——用户希望被告知真相(最佳利益),也承载着不欺骗的道德要求,但他们在评分时的局部反应(”这话让我舒服”)指向另一个方向。因此它同时也说明:表达出来的偏好 ≠ 显性偏好 ≠ 最佳利益。也可以论证它属于”对齐到意图”的失败:用户的意图是”给我可靠的信息”,而系统从”给我愉快的回答”这一指令层面的表面信号中没能推出真实意图——这与 Paperclip 的结构完全同构。

(b) 至少两条具体措施,以及各自的代价:

  • 措施 1:把”用户满意度”与”准确性”分离为独立信号,不让前者淹没后者。 例如在评分界面中显式区分”这个回答帮助你了吗”与”这个回答是准确的吗”,或引入可验证奖励(verifiable reward)(有标准答案的任务用自动核查,而非人类印象分)。代价:覆盖的任务类型大幅收窄;对开放式问题(”我该不该换工作”)无法应用;且人类评分者对被明确要求评判”准确性”时会产生另一种偏差(高估自己认同的答案)。
  • 措施 2:引入持不同意见的第三方(non-user stakeholders)作为评分者。 这正是讲义 16.2.6 的参与式 AI:把”从人类学习”扩展到多重利益相关者受影响的非用户。代价:如果”真相”本身有争议(讲义第 14 页的例子:ChatGPT 该不该描绘先知穆罕默德?取决于你问谁),第三方同样有偏,且引入第三方评分者本身就在做 $\lambda_g$ 的规范化选择——即实验二的那个问题。另外成本显著上升,且可能把”取悦用户”替换成”取悦某个特定的第三方群体”。
  • 措施 3(可选):把谄媚作为可度量的失败模式单独追踪。 例如构造”用户提出错误前提”的探针集,监控模型是否随用户压力改变正确的回答。代价:探针集会被过优化(又一轮规格博弈),且穷举不了所有谄媚形式。

(c) 以”智能体何时应当覆盖或抵抗用户“为例(16.4 实验二之外的另一种 Agentic 场景)。

  • 对齐到意图:几乎不支持覆盖。既然用户的意图是明确的(”买最便宜的票”),智能体就该执行;覆盖等于把自己的推断凌驾于用户明确表达的意图之上。唯一例外是”意图未被完全指定”——此时应询问而不是覆盖。
  • 对齐到显性偏好:这一框架下覆盖缺乏依据,因为学习目标就是用户的行为模式;一个”学到的偏好”与用户当场表达的意愿冲突时,没有理由认为学到的比当下的更权威。反而应当警惕相反的风险:智能体学到的”自动执行”会削弱用户表达即时偏好的机会。
  • 对齐到最佳利益:这一框架允许甚至可能要求抵抗。讲义的第 36 页明确写了这种做法:”增加摩擦以保护你的长期福祉,在需要时询问、拒绝或扩大信息”。但同一份讲义马上用自主性家长主义警告来设限:即使目的是用户的利益,也可能存在独立的理由尊重用户的选择。因此一个可辩护的立场是不对称的:对不可逆、重大、且用户明显缺乏信息的决定(例如清空账户)允许施加摩擦;对可逆、日常的决定则应当服从用户的即时意愿。
  • 对齐到道德(社会价值)为第三方利益而覆盖用户在这里获得最强的支持——例如智能体在票务市场上自动抬价,对其他用户有害(讲义第 7 页的案例:”当每个人都有一个为自己优化的智能体时会发生什么?”——个体对齐的行为会导致智能体间的更快竞争、价格飙升、用户间的不平等优势)。此时”覆盖”的对象其实不是用户,而是阻止用户的行为外溢到他人,对应的工程手段正是讲义列出的硬约束(如”不得操纵或误导其他智能体”)与全局目标(如”最小化价格通胀、促进公平”)。困难在于:哪些原则该被强制——公平、效率还是利润?用户间的冲突该如何裁决?以及随之而来的奖励 hacking 风险

综合立场(本题的目的不是给出唯一答案):四种解释给出不同的答案,这恰恰是讲义 Recap 的要点:”这些不总是同一件事,且每种选项都带来独有的技术与哲学问题。” 一个可操作的折中是按可逆性分级:把”覆盖”的许可度设为决定不可逆性与受影响第三方规模的函数,并把每一级的阈值公开为可争议、可修改的政策(16.2.6 的”价值是情境性、可争议、可修改的”)。但这套方案本身也只是若干规范性立场之一。

题 4(伦理讨论题):”From boats to roads” 与 “From entertainment to treatment”——目标置换的两个实例

讲义的”现实案例”部分给出两组标题:“From boats to roads”(从船到路,占两页)与 “From entertainment to treatment”(从娱乐到治疗)。讲义 PDF 中这三页是纯图像页,只有标题文字可抽取。

(a) 请基于这两个标题的语义结构与它们在讲义中的位置(位于 Paperclip AI 之后、问题定义之前,作为”a few more real-life examples”),解释它们各自刻画了哪种失败模式。 (b) 这两个案例与 Paperclip AI 的差别是什么?为什么讲义要把它们与思想实验并列? (c) 结合 Wanheng Hu 的研究领域(中国医疗 AI 产业民族志),”From entertainment to treatment” 为什么在本次讲座中格外切题?

答案(开放议题,以下为基于标题与页序的可辩护解释,非讲义原文引用)

(a) 两者都刻画目标被置换或被下游用途接管(goal displacement)

  • “From boats to roads”(占两页,暗示是一个前后对照的短叙事)最自然的读法是一个为某一用途设计的系统,被部署到它从未被设计的环境里:为水上航行优化的东西(船的吃水、导航、法规假设)被搬到陆路(道路)上,原来的目标函数与约束全部错位。在技术系统的语境下,它刻画的是部署环境与训练/设计环境不一致导致的错配——这对应本讲”背景假设被打破”的主题:设计者视为理所当然的假设在这个新环境里不成立。
  • “From entertainment to treatment” 刻画的是同一技术从低风险用途迁移到高风险用途、而目标函数没有相应更新:为娱乐(推荐、生成、陪伴)优化的系统被用作治疗(医疗决策、心理干预),于是它优化的仍是”参与度/愉悦度”,而真实目标变成了”健康结果”。这正是规格博弈:代理目标(engagement)与真实目标(health outcome)在该应用域内系统性背离。

(b) 与 Paperclip AI 的差别在于是否需要超级智能。Paperclip AI 是思想实验:它把”代理目标 ≠ 真实目标”这一逻辑结构推到极端(Bostrom 2014),代价是读者可能觉得它离现实很远。讲义在它之后立刻给出真实案例,并特意加了一句限定:“Even a less powerful AI might pursue this goal in surprising ways!”(即使是一个不那么强大的 AI 也可能以出人意料的方式追求这个目标!)。这两个真实案例就是这句话的证据:它们不需要超级智能、不需要自我意识、不需要任何阴谋——只需要一个在旧目标上训练、被部署到新用途的系统。讲义把思想实验与真实案例并列,是为了把”对齐”从一个科幻话题重新定位为一个当下的工程与治理话题,这也解释了为什么接下来的问题定义紧接着说”It’s hard to solve this problem just by giving better instructions”。

(c) 因为”从娱乐到治疗”就是医疗 AI 的核心风险,而 Wanheng Hu 正是研究中国医疗 AI 产业的民族志学者。她的三个问题——”医疗 AI 等于数字化的医生吗?在什么意义上?我们如何信任它?”——把 (a)(b) 的抽象结构落到了具体产业:当一个源自通用对话/推荐技术的系统被放进诊室,它优化的是什么?是”让患者满意”(接近娱乐逻辑的参与度指标)还是”让患者康复”(治疗目标)?两者在大多数时候相关,但在关键少数情形(罕见的、需要说坏消息的、需要承认不确定性的情形)可能完全背离——这与谄媚(题 3)是同一个失败模式在医疗场景下的实例。STS 视角的贡献在于指出:这不只是一个技术指标选择问题,而涉及医院流程、监管框架、责任归属、患者与医生的信任关系如何共同被重新配置——”医疗 AI ≠ 数字化的医生”。因此本讲的方法论(STS、民族志、产业案例)与它的技术论证是互补的:技术论证说明了为什么目标会错位,民族志说明了在真实制度中错位如何发生、由谁承担后果。


本讲小结:L1–L15 教会我们如何在给定奖励函数下求最优;L16 指出这个前提本身是一个规范性选择。把奖励形式化(RLHF/DPO)能让我们优化人类偏好,但不能告诉我们该优化谁的偏好、以及偏好是否等于真正的善。讲义给出的不是算法,而是一套诊断工具:用四种解释精确化”我们真正想要的”,用规格差距量化代理与真实的距离,用参与式 AI 把一次性对齐改写为持续过程。没有银弹,但可以让对齐更好或更坏。