本文最初发表在 Towards Data Science 博客,经原作者 Alexandros Zenonos 授权,InfoQ 中文站翻译并分享。
隐私不仅是与人工智能有关的问题,也是任何与数据相关的领域普遍关注的问题。隐私是关于人们对其个人数据和基于这些数据所做的决定的控制。
在欧洲,2018 年生效的《通用数据保护条例》(General Data Protection Regulation,GDPR)对个人数据的收集和使用进行了规范。数据保护条例并没有明确提及人工智能或机器学习,但对个人数据的大规模自动处理和自动决策非常重视。这意味着,凡是人工智能使用个人数据的地方,都属于该条例的范围,皆适用 GDPR 原则。这可以通过使用个人数据来训练、测试或部署人工智能系统。如果不遵守 GDPR,可能会导致相关公司受到巨额处罚。
个人数据的一些例子包括出生日期、邮政编码、性别、甚至用户的 IP 地址。
具体来说,GDPR 赋予个人不受制于完全自动化决定的权利。那么,人工智能专家的关键问题就是:当你作出关于个人的人工智能辅助决定时,如何证明你以透明的方式公平地对待个人,或者给他们机会对这种决定提出异议?
尽管 GDPR 与欧洲和英国的关系最为密切,但其主要原则和理念在全球范围内应该适用。
尽管模型的公平性和可解释性是人工智能中的主要研究课题,但在数据隐私方面,至少有五个考虑因素你已经可以考虑了。
当你的训练标签不成比例地偏向某一特定类时,就会发生类不平衡。换句话说,在二进制分类问题中,对于输出为 0 的情况,你有很多样本;但当输出为 1 时,你就只有少数样本了,反之亦然。这可能是由于数据收集过程中存在偏差,例如,只从本地分支机构收集数据;或者是领域的固有属性,例如,识别制造过程中的异常数据点。
类不平衡性是造成模型偏差的最常见原因之一,但它经常被数据科学家所忽视。这是因为,通常情况下,轻微的不平衡并不会带来巨大的风险,因为模型可以同样好地学习所有类的特征。然而,当出现严重的类不平衡时,事情就会变得棘手了。具体来说,少数的类更难预测,因此你的模型将会偏向于多数类。
例如,当你训练人工智能系统来识别图像时,你可能会面临许多潜在的问题,类不平衡性可能就是其中之一。想象一下,有一组 100000 张照片,其中只有 100 张是毕业证的图片,99900 张是狗子的图片,会怎么样呢?你训练的人工智能系统更有可能预测狗子,因为它被训练得更频繁;它没有足够的负类案例来准确区分这两类图像。
这个潜在的问题并不像错误地将猫狗分类那么单纯。试想一下,你正在训练一个接受或拒绝个人贷款的模型,而大多数历史性的贷款(出于某种原因)都被拒绝了。你猜怎么着?你的模型可能会拒绝大部分或所有未来的贷款申请,因为它更容易接触到这类信息,并且可能没有学会区分这两种情况。从数据隐私的角度来看,这就是一个问题,因为该模型不能产生公平的结果。
首先,尽早确定这是否会成为一个问题很重要。你可以通过了解属于你每个类的数据点的数量来检查:
df[‘your_label’].value_counts()
如果你确实注意到了存在类不平衡性的现象,但仍然在数据上运行了一个简单的模型,那么就正确率而言,你可能还是会得到很好的结果。你的测试数据可能遵循与你的训练数据相同的分布,因此,如果大多数实例主要来自一个类,那么只要总是预测这个类就会得到很好的正确率得分。
但不要被这些所迷惑。通常情况下,混淆矩阵会让你更好地了解你的模型实际在做什么。缓解相关问题的主要和最简单的策略之一是随机重采样。你可以减少你的多数类以匹配少数类(欠采样),或者对少数类进行过采样。
在实践中,
count_0, count_1=df.target.value_counts()
df_class_0=df[df[‘your_label’]==0].sample(count_1)#under sample
或
df_class_1=df_class_1.sample(count_0, replace=True)#over sample
你同样也可以使用 NumPy 或其他库来对数据进行采样,比如 Imblearn。此外,还有许多其他方法可以解决这个问题比如 SMOTE 和 Tomek 链接。
对人工智能系统的对抗性攻击可以使系统完全混乱。例如,图像识别系统被证明有弱点或易受到对抗性攻击。研究人员已经证明,即使人工智能系统对数以千计的图像进行了训练,图像中一个精心放置的像素也能从根本上改变人工智能系统对它的感知,从而导致错误的预测。这可能会对涉及个人身份识别的实际应用产生严重影响。想象一下一个安全摄像机镜头的场景,由于这种攻击,人工智能系统误认了罪犯。
我们需要使我们的深度学习模型更加健壮。但不幸的是,这个问题也很棘手。目前,世界顶级大学都在进行研究层面的调查。然而,从理论上讲,你应该不仅能够在一个看不见的测试数据集上测试你的模型,而且还可以模拟这些类型的对抗性攻击来评估其健壮性。深度学习模型中的神经元如果被错误激活,可能会被丢弃,以提高健壮性。 2019 年的这篇论文讨论了这些方法。
人工智能中的一个常见问题是,如果要复制我们获得的结果,或者我们生成的模型,到底有多容易。许多算法在训练模型时都存在随机因素。因此,不同的训练运行会产生不同的模型(假设存在不同的随机种子),不同的模型可能会产生不同的预测结果。我们该如何确保一个关系到个人的预测不会被下一个基于相同数据的模型所推翻呢?
另外,如果一个系统在我们的本地机器上,使用我们的数据表现良好,那么在现场测试的话,却有可能表现不佳。我们该如何确保最初的性能传播到已部署的应用程序呢?我们又该如何确保系统的性能不会随着时间的推移而恶化,从而影响对个人的决策呢?
这些是多个相关问题,需要采取多种方法。为了确保结果的一致性,你通常应该使用交叉验证技术,以确保你的结果不是基于对训练集和测试集的幸运分割。要获得实际指导,请参阅这篇帖子:《使用 Python 交叉验证的完整指南与示例》( Complete guide to Python’s cross-validation with examples)。
此外,对于预测模型,你可以做一个反向测试,并评估如果在过去的某个时间点部署模型时,只给出到那个点为止的训练数据,看看性能将会如何。
另外,在一个完全不同的数据集上评估你的模型,用类似的输入来检查它在给定的数据集之外的通用性,也是一个好主意。但重要的是,当你在现实世界中部署一个模型时,数据应该遵循与你的训练数据相同的分布。在任何其他情况下,性能都会出现不可预知的下降。
最后,监视已部署的模型并评估其在新数据上的性能,总是一种很好的实践做法。如果性能突然下降或漂移,这可能是模型需要重新训练的迹象。当然,这也取决于具体的应用。根据应用程序的不同,你可能有重新训练的策略,以便每天、每周、每季度、每年都会有新的模型。
构建人工智能系统时,关键问题应该是“我们如何评估系统?”。最常见的度量指标之一是正确率。换句话说,无论你的模型在它测试的总样本上预测正确与否。但正确率是一个很好的度量标准吗?让我们试想这样一个问题,你有 100 个女人,其中有 10 个怀孕了。假设你有一些关于这些女人的信息,你试图建立一个模型来预测谁怀孕了,谁没怀孕。你要是这样做的话,你的模型的正确率将只有 85%。这是不是意味着你有一个好的模型呢?另一方面,让我们假设你没有模型,而你宁愿做的是预测所有的女人都没有怀孕。令人惊讶的是,它的正确率居然是 90%,因为你将会在 100 次预测中有 90 次是正确的。这比你上面创建的实际模型更好吗?那么,我们该使用什么度量标准,以及如何评估模型的性能呢?你会仅仅依靠正确率来作出影响个人的决定吗?
答案显然是否定的。事实上,通常情况下,最好的方法是比较多个度量指标,理想情况下,仔细检查混淆矩阵,以了解模型的优缺点。
因此,对于上面那个正确率为 90% 的天真方法,F1-Score 实际上是 0,因为没有真正类(只有真负类)。相反,你那个正确率只有 85% 的模型,事实上,F1-Score 可能有 67%,这在特定的应用中可能是可接受的,也可能是不可接受的。其他需要寻找的度量指标是接收者操作特征(Receiver Operating Characteristic,ROC)的曲线下面积(area under the curve,AUC)、精确性、召回率和特异性,仅举几例。
依靠历史数据来预测未来并不总是有效的。一个很好的例子就是预测股市。这在本质上是很困难的,原因有很多。使用长期以来具有某种结果的数据,会创建在其历史边界内工作的模型。这意味着,如果你在一个没有市场崩盘的时期训练一个模型,那么这个模型就不可能永远预测到市场崩盘。即使你在市场崩盘期间进行了训练,但由于事件的罕见性以及缺乏指向该方向的明确信号,模型仍然不太可能知道什么时候会发生崩盘。现在,让我们设想在全球大流行时期作出影响个人的决策的模型。由于所有的模型在过去都没有看到过类似的数据,所以不可能会像大流行之前那样准确地对个人作出决定。
在这种情况下,模型可能需要用从新情况中获取的数据进行重新训练,以便在新的现实中运行。这可能会暂时起作用,直到行为再次转向旧的标准。如果再训练是不可能的,那么就不应该自动作出决定,因为它们很可能是错误的。不过,这需要经过测试和验证。
总而言之,在我们的模型目前运作的假设下,要预测黑天鹅事件是不可能的。在你知道你所预测的数据与你所训练的数据并不遵循相同的分布的情况下,对个人进行预测并作出决定是不负责任的做法。这并不是说模型不能作为一种有用的咨询工具。此外,George Box 曾说过:“所有的模型都是错误的,只有一些模型是有用的。”
Alexandros Zenonos,博士,对人工智能、数据科学和个人理财感兴趣。