JOVANA
Library Glossary Getting Started Three Levels Fields How it works Mission
Join the mission
All guides

AI 中的偏见与公平

当一个模型对某些群体的对待比对另一些群体更差时,原因很少是某一行恶意代码——它藏在数据里、标签里,甚至藏在我们对“公平”的定义里。这篇导读梳理算法偏见从何而来,以及为什么那些看似整洁的公平性指标会悄悄彼此矛盾。

偏见不是你能用 grep 搜到的 bug

到现在你已经知道,一个模型里装的并不是某人敲进去的规则,而是为了最小化损失、根据数据拟合出来的参数。仅这一点就重塑了关于公平的整场讨论。当一个招聘模型偏向某个群体时,通常并没有哪一行写着 `if female: reject`。模型只是在做它被训练去做的事——复现它所见样本中的模式。[[algorithmic-bias|算法偏见]]就是由此产生的、系统性的、与群体相关的误差;而令人不安的真相是,它是“数据加目标”所涌现出的性质,而不是一个你能找到并删掉的拼写错误。

把听起来相似、含义却相反的两种“偏差/偏见”分开会很有帮助。在你统计学阶梯里学过的偏差—方差意义上,偏差指模型太简单、抓不住现实——这是个纯技术量。而在公平意义上,偏见恰恰意味着模型*太准确*地捕捉了一个本身就不公正的现实。一个模型完全可以同时拥有低统计偏差和高社会偏见。把两者分清,能省去许多各说各话的争论。

偏见究竟从哪里进来

第一个来源是数据本身。[[dataset-bias|数据集偏差]]指你的训练集并不是模型将要面对的那个世界的公平采样。也许一个医学数据集 90% 来自某一血统,于是模型在浅肤色上学会识别皮损,却在深肤色上栽跟头。也许历史贷款记录反映了几十年的“红线划区”歧视,于是“谁还了款”和“谁曾经获得过贷款机会”纠缠在了一起。模型无从得知样本是偏的——对它来说,数据*就是*世界。这直接关联到你早先遇到的类别不平衡和采样问题,只不过现在赌注变成了活生生的人。

第二个来源是标签。大多数监督学习训练依赖人工标注,而人会把自己的处境一并带进来。给“毒性”打分的标注者,可能更常把非裔美国人英语方言标为粗鲁;评判“职业形象”的评分者,会带入自己的文化规范。标签本应是真实答案,但它其实是*某个人的判断被冻结成了一个数字*。如果这种判断在不同群体之间并不均衡,模型就会继承这种不均衡——更糟的是,它还会把其中的分歧磨平成一个自信满满的单一答案。

第三个来源最为狡猾:模型抓住了一个伪相关——一种在训练数据中成立、却不是你真正在意的东西的模式。一个皮肤癌检测器学到,手术标尺(医生放在真肿瘤旁边的)能预测恶性;一个肺炎模型读的是医院便携扫描仪的水印,而不是肺。这种捷径学习既高效又往往隐形——尤其是在一个抽自同一偏斜来源的测试集上,根本看不出来;这正是为什么偏见能在一个看起来很漂亮的准确率数字背后存活下来。

定义“公平”——并发现它是复数

要度量公平,你就得先定义它;而你一旦动手去定义,它就碎裂开来。最简单的群体定义是[[demographic-parity|人口平价]](demographic parity):模型对每个群体应当接受相同的*比例*。如果 20% 的男性获得贷款,那么也应有 20% 的女性获得。它直观、易于审计。但它忽略了各群体中的人在你要预测的那件事上是否真的相似——它可能逼着你为了拉平比例,去批准某个群体中不合格的申请人,或拒绝另一个群体中合格的申请人。

一个更精细的概念是[[equalized-odds|均等几率]](equalized odds):在那些*确实*合格的人当中,各群体的通过率应当一致(真正例率相等);在那些确实不合格的人当中,犯错率也应一致(假正例率相等)。它说的是“对所有人犯同样种类、同样比例的错误”,这感觉更接近正义。回想你的评估阶梯——这些不过是按群体切分的混淆矩阵切片,是你早已熟悉的真/假正例率,只是分别在每个群体上单独计算而已。

下面这个结论,终结了“存在唯一完美指标”的幻想。除非各群体的底层基础率完全相同——或者你的模型是个完美的先知——否则你*不可能*同时满足人口平价、均等几率和预测值相等这三者。这是一个已被证明的不可能性,而非工程上的不足。因此,选择一个公平定义,本质上就是在选择谁的错误更要紧;它是一个披着公式外衣的价值判断,再多的聪明才智也化解不掉这个取舍。

Group A: base rate 30% qualify   Group B: base rate 10% qualify

Force equal acceptance (parity)  ->  must over-accept B or reject qualified A
Force equal error rates (odds)   ->  acceptance fractions then differ

  parity  AND  equalized-odds  AND  equal predictive value
  ---- impossible together unless base rates match ----
不同的基础率使三条公平准则相互排斥——这是那个不可能性结论的示意图。

群体公平与个体

上面每一个指标都是*群体*统计量——它比较的是各类别之间的平均值。但还有一种与之竞争的直觉,即个体公平:相似的人应当被相似地对待,无关群体。这两种理想会正面相撞。为拉平结果而对各群体分别调整阈值(群体公平),就意味着两个档案完全相同的申请人,会因为群体不同而得到不同的决定(个体不公)。这里没有中立地带;即便是“对所有人用同一条规则”,本身也是一个有赢家和输家的选择。

还有一类伤害,是任何分配性指标都完全捕捉不到的:[[representational-harm|表征性伤害]]。它指系统贬低或抹除某个群体,而不是错配某种资源。一个把“CEO”一律生成为男性、把“护士”一律生成为女性的图像生成器;一个把“穆斯林是”补全为暴力的自动补全;一个默认把医生译为“他”的翻译工具——这些都没有拒绝任何人的贷款,可每一个都在大规模地强化刻板印象。由于这种伤害关乎意义与尊严,而非一个是/否的决定,你无法用混淆矩阵去审计它;你必须去看模型究竟*说了*什么、*描绘了*什么。

你实际上能做些什么

这一切并不是要你绝望。偏见并非无法修补;它只是无法*自动地、一劳永逸地*修补。诚实的做法是:让偏见显形,让取舍摊在明处,然后在部署之后持续盯着。把公平当作一项持续进行的审计,而不是发布前打勾的一个选项框。

  1. 拆分你的评估:永远别相信一个总体准确率数字。把每个指标都按群体切片,去看最差的那一片,而不是平均值。
  2. 审问数据和标签:谁被遗漏了,是谁标注的,又有什么东西可能成为敏感特征的代理或捷径?
  3. 审慎地选定一个公平定义,写清楚为什么,并承认这个选择牺牲了什么——因为你不可能全都要。
  4. 在高风险决策中保留一个人在回路里,并在发布后持续监控,因为世界会随时间漂离你的训练数据。