Day 26 : 公平指标与实作 Fairness Indicators

模型公平性的思考

  • 随着 AI 对於各领域和社会的影响逐渐增加,建立公平且可包容所有人的系统至关重要,为达到负责任的 AI,重视公平性,实践以人为本的设计初衷,确定多个指标来训练与评估,检查原始资料、理解资料与模型的局限性、部署後继续监控和更新系统成了 MLOps 重要动力。

  • 关於公平性没有绝对的定义,不同国情、文化都有在意的事情,您可以参考就业服务法第5条所示的就业平等认定,这是法律揭示应在就业情境中平等的规定,可用以检视与追踪您的服务模型与表达方式,以中性字眼表述,并持续调整。

  • 平等不是指齐头式的平等,而是客户主观意识认为接受到的服务是有受重视与在意本身需求。像是您不应该向素食主义者优先推荐荤食餐厅,宗教的饮食忌讳应降低推荐优先顺序、以双北生活圈习惯类推全台餐饮口味(北部粽、南部粽与...中部粽?)、推荐青少年不符年龄的游戏清单、忽视生理性别与心理性别的服务推荐、将“护士”或“保姆”等词翻译成西班牙语时使用女性代词等。以上现象在传统数据分析、做研究追求整体准确率时不是考虑重点,却是用於生产的机械学习服务必须要重视的关键任务。

    就业服务法第五条

    • 为保障国民就业机会平等,雇主对求职人或所雇用员工,不得以种族、阶级、语言、思想、宗教、党派、籍贯、出生地、性别、性倾向、年龄、婚姻、容貌、五官、身心障碍、星座、血型或以往工会会员身分为由,予以歧视;其他法律有明文规定者,从其规定。
  • 具体实践机械学习系统的公平性来说,可以使用 Fairness Indicators 察觉模型数据在不同切片的表现,进行识别、改进模型。Google 的第二条 AI 原则指出,我们的技术应避免产生或强化不公平的偏见,提高模型的公平性。

可观察公平性的指标

阳性率、阴性率 positive, negative rate

  • 基本的阳性或阴性的数据比率。
    • 应为独立标签,如果是平等的,子资料集也应该是平等的。可以用以检视不同分组资料集的 PR 与 NR 比率应类似。
  • 真阳率 true positive rate (TPR),及假阴率 false negative rate (FPR)。
    • 真阳率 TPR 衡量在真实预测中被正确预测为阳性的阳性的比率。
    • 假阴率 FNR 衡量被错误预测为阴性的阳性数据比率。
    • 子资料集也应该有相同的 TPR 与 FNR 。

真假阳性率 TPR / FPR

  • 真阴率 true negative rate (TNR) ,衡量实际为阴性、正确预测为阴性的比率。
  • 假阳率 false positive rate (FPR) ,衡量实际为阴性、误报为阳性的比率。
  • 子资料集应该也有相似的 TNR 与 FPR。 FPR 误报在分类的後续错误处置方式可能有不良影响,如果子资料集的 FPR 大於整体 FPR ,应该是值得关注的焦点。

准确率和 AUC

  • 准确率 Accuracy 为判读正确的比率, area under the curve (AUC) 为ROC曲线下与座标轴围成的面积,最大值不大於1。
  • 子资料集也应该与整体资料有相似的准确率与 AUC ,如果比较时有显着差异可能表明您的模型可能存在公平性问题。

公平指标实作

本篇文章采用 TensorFlow 官方 Colab 范例 使用 ( CelebA ) 资料集训练一个简单的神经网络模型来检测出微笑的明星图像,部分说明以动画呈现帮助您理解操作过程。

  • 使用公平指标 fairness-indicators ,根据跨年龄组的常用公平指标评估模型性能。
  • 设置一个简单的约束优化问题,以在各个年龄段实现更公平的性能。
  • 重新训练现在"受约束的"模型并再次评估性能,确保我们选择的公平性指标得到改善。

1. 前置作业

  • 本示范主要以fairness-indicatorstensorflow_constrained_optimization (TFCO) 模组与相依套件进行示范, fairness-indicators 为 Google 开源的模组,可以比较模型分类结果的公平指标,依赖 TensorFlow Extended (TFX) 的模型分析 TFMA 模组。 fairness-indicators 可以在验证资料与模型分析时呈现,另外也可以运用在 TensorBoard 。

    !pip install -q -U pip==20.2
    
    !pip install git+https://github.com/google-research/tensorflow_constrained_optimization
    !pip install -q tensorflow-datasets tensorflow
    !pip install fairness-indicators \
      "absl-py==0.12.0" \
      "apache-beam<3,>=2.31" \
      "avro-python3==1.9.1" \
      "pyzmq==17.0.0"
    
    • 在 Colab 安装完需重新启动执行阶段 (Restart Runtime)。
  • 下载 CelebA 资料集

    • CelebA 是一个拥有超过 20 万张名人图像的大规模人脸属性数据集,每个图像有 40 个属性注释(如头发类型、时尚配饰、面部特徵等)和 5 个标志性位置(眼睛、嘴巴和鼻子位置)。
    • 建立 "young" 标签作为预测结果的 y,是布林值。
    • 将图片转为28X28像素方便训练。
  • 建立训练模型

    • tf.keras.Sequential建立基本模型。
    • 设定辅助函数、预处理函数、 用来使用 TFMA 的评述设定等。
  • 检视资料

    • 看明星们心情很好,但请记得此资料集不能作为商业用途喔。
    • df.info()得知除了标示位置有座标、影像为矩阵之外,其余特徵都以布林值表示。

2. 训练与评估模型

  • 在测试数据上评估模型的最终准确度得分应略高於 85%。
  • 然而,跨年龄组评估的表现可能会揭示一些缺点。为了进一步探索这一点,我们使用公平指标(通过 TFMA)评估模型。我们特别感兴趣的是,在评估误报率时,"young" 的二元分类之间的性能是否存在显着差异。
  • 当名人“不微笑”的图像并且模型预测“微笑”时,就会出现假阳性 (FP) 结果。我们可以透 FPR 作为测试准确性的衡量标准。虽然在这种情况下这是一个相对普通的错误,但误报错误有时会导致更多的问题行为,例如垃圾邮件分类器中的误报错误可能会导致用户错过重要电子邮件。
  • 您可以透过tfma.addons.fairness.view.widget_view.render_fairness_indicator(eval_results_unconstrained) 指令视觉化查看是否年轻/微笑的 FPR 情形。

3. 约束模型设置

  • 使用TFCO ,帮助限制问题:
    1. tfco.rate_context() 用於构建约束。
    2. tfco.RateMinimizationProblem()设定年龄类别小於或等於 5% 的误报率将被设置为约束。
    3. tfco.ProxyLagrangianOptimizerV2() – 这是真正解决速率约束问题的帮手。
      # 摘述TVCO相关部分内容
      # 创建整份内容,子内容设定groups_tensor < 1,即"not young"的图片。
      context = tfco.rate_context(predictions, labels=lambda:labels_tensor)
      context_subset = context.subset(lambda:groups_tensor < 1)
      
      # 约束设定为 FPR 小於等於 0.05 。
      constraints = [tfco.false_positive_rate(context_subset) <= 0.05]
      
      # 设置最小化错误
      problem = tfco.RateMinimizationProblem(tfco.error_rate(context), constraints)
      
      # 建立约束优化器,
      optimizer = tfco.ProxyLagrangianOptimizerV2(
            optimizer=tf.keras.optimizers.Adam(learning_rate=0.001),
            constraint_optimizer=tf.keras.optimizers.Adam(learning_rate=0.001),
            num_constraints=problem.num_constraints)
      
      # 取得使用优化器 TVCO 取得所有可训练变量list
      var_list = (model_constrained.trainable_weights + list(problem.trainable_variables) +
                  optimizer.trainable_variables())
      
  • 该模型现已建立并准备好使用跨年龄组的误报率(伪阳率, FPR) 约束进行训练。
  • TFCO 模组功能包含 tfco.find_best_candidate_index() 可以帮助从每个 epoch 中选择最佳模型。
  • tfco.find_best_candidate_index() 可以视为一种附加的启发式方法,它根据训练数据的准确性和公平性约束(在本例中为跨年龄组的 FPR )对每个结果进行排名。这样,它可以在整体准确性和公平性约束之间寻找更好的权衡。
  • 我们可以使用 false_positive_rate 以查看我们感兴趣的指标,经过 TFCO 约束优化後,对於不年轻的子资料集,假阳率 FPR 从 0.077 下降为 0.12 ,成功减缓因为年龄造成的预测错误问题。

小结

  • 由於 TFCO 能够帮助该模型实现了更理想的结果,能够找到一个接近满足约束并尽可能减少分组之间差异的模型。实现公平的可能,但仍有改进空间,改进的方向除了透过数据 FPR 观察,也应该有意识的探索公平性主题。
  • 探索公平性主题可以求助领域专家,您也可以针对所有特徵进行切片检视 FPR ,设定需要关注的门槛值,如果时间允许可以更深入的探究误报问题,也请留意探索公平性是更广泛的评估 UX 的一部分。
  • 鉴於人文如此复杂,一个好的经验法则是尽量多对资料切片观察,留意可能较敏感的种族、性别、宗教等议题。

/images/emoticon/emoticon07.gif

参考


<<:  Python - 根据输入的英文字母排列出有意义的单词-参考笔记

>>:  Day14: Inspector简介

自动化初步-试着用pyautogui操作一般软件

import pyautogui import pyperclip import time def ...

[Day18] Null byte Injection

前言 %00 正文 概念 Null byte Injection是一种将Null Byte(如%00...

Day 27:「流浪到淡水!」- 手风琴选单

嘿,今天是怎样? 都没有人交作业,是不是昨天的太小菜一叠了! 今天是昨天的延伸, 但说难也难不到哪...

[Day30]-30天完赛的心得~~~

终於到了第30天了,这30天说长不长,说短不短中间有一度想要放弃但最後还是撑过来了??,还蛮开心自己...

Day1 补贴目录与相关概念

在这个资讯过多的时代,我们必须要具备有自己过滤资讯的能力, 网上充斥着许多的名词与概念,这边会帮各位...