随着 AI 对於各领域和社会的影响逐渐增加,建立公平且可包容所有人的系统至关重要,为达到负责任的 AI,重视公平性,实践以人为本的设计初衷,确定多个指标来训练与评估,检查原始资料、理解资料与模型的局限性、部署後继续监控和更新系统成了 MLOps 重要动力。
关於公平性没有绝对的定义,不同国情、文化都有在意的事情,您可以参考就业服务法第5条所示的就业平等认定,这是法律揭示应在就业情境中平等的规定,可用以检视与追踪您的服务模型与表达方式,以中性字眼表述,并持续调整。
平等不是指齐头式的平等,而是客户主观意识认为接受到的服务是有受重视与在意本身需求。像是您不应该向素食主义者优先推荐荤食餐厅,宗教的饮食忌讳应降低推荐优先顺序、以双北生活圈习惯类推全台餐饮口味(北部粽、南部粽与...中部粽?)、推荐青少年不符年龄的游戏清单、忽视生理性别与心理性别的服务推荐、将“护士”或“保姆”等词翻译成西班牙语时使用女性代词等。以上现象在传统数据分析、做研究追求整体准确率时不是考虑重点,却是用於生产的机械学习服务必须要重视的关键任务。
就业服务法第五条
- 为保障国民就业机会平等,雇主对求职人或所雇用员工,不得以种族、阶级、语言、思想、宗教、党派、籍贯、出生地、性别、性倾向、年龄、婚姻、容貌、五官、身心障碍、星座、血型或以往工会会员身分为由,予以歧视;其他法律有明文规定者,从其规定。
具体实践机械学习系统的公平性来说,可以使用 Fairness Indicators 察觉模型数据在不同切片的表现,进行识别、改进模型。Google 的第二条 AI 原则指出,我们的技术应避免产生或强化不公平的偏见,提高模型的公平性。
本篇文章采用 TensorFlow 官方 Colab 范例 使用 ( CelebA ) 资料集训练一个简单的神经网络模型来检测出微笑的明星图像,部分说明以动画呈现帮助您理解操作过程。
fairness-indicators
,根据跨年龄组的常用公平指标评估模型性能。本示范主要以fairness-indicators
、 tensorflow_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"
下载 CelebA 资料集
建立训练模型
tf.keras.Sequential
建立基本模型。检视资料
df.info()
得知除了标示位置有座标、影像为矩阵之外,其余特徵都以布林值表示。tfma.addons.fairness.view.widget_view.render_fairness_indicator(eval_results_unconstrained)
指令视觉化查看是否年轻/微笑的 FPR 情形。tfco.rate_context()
用於构建约束。tfco.RateMinimizationProblem()
设定年龄类别小於或等於 5% 的误报率将被设置为约束。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())
tfco.find_best_candidate_index()
可以帮助从每个 epoch 中选择最佳模型。tfco.find_best_candidate_index()
可以视为一种附加的启发式方法,它根据训练数据的准确性和公平性约束(在本例中为跨年龄组的 FPR )对每个结果进行排名。这样,它可以在整体准确性和公平性约束之间寻找更好的权衡。false_positive_rate
以查看我们感兴趣的指标,经过 TFCO 约束优化後,对於不年轻的子资料集,假阳率 FPR 从 0.077 下降为 0.12 ,成功减缓因为年龄造成的预测错误问题。
<<: Python - 根据输入的英文字母排列出有意义的单词-参考笔记
import pyautogui import pyperclip import time def ...
前言 %00 正文 概念 Null byte Injection是一种将Null Byte(如%00...
嘿,今天是怎样? 都没有人交作业,是不是昨天的太小菜一叠了! 今天是昨天的延伸, 但说难也难不到哪...
终於到了第30天了,这30天说长不长,说短不短中间有一度想要放弃但最後还是撑过来了??,还蛮开心自己...
在这个资讯过多的时代,我们必须要具备有自己过滤资讯的能力, 网上充斥着许多的名词与概念,这边会帮各位...