原题:Uncertainty: a Tutorial (不确定性:一份教程)
作者:Eric Jang
译者:尹肖贻
“不确定”这个词儿,三脚猫专家到处滥用,在人工智能安全(AI safety)、风险管理、投资组合优化、科学计量、保险等领域尤甚。试摘录几则,常见于日常交流之间:
- “机器学习模型,应学其所未定。”【原文是“知其所未知”】
- “诊病开方的AI,反馈其对结果的信心。”
- “科学计数法的有效数字,表示了结果的不确定性。”
- “自主系统应当探索其(对于反馈或预测)不确定的领域,以获得小概率的额外收益。”
- “投资组合,当在确保收益的同时,控制风险。”
-
“美国股市在2018年遗憾收尾,源于地缘政治的不确定性。”
那么问题来了,上文的各个“不确定”、“信心”、“风险”什么的,都是个啥?
在数学上,不确定性反应了随机变量的离散程度。换句话说,不确定性是一个具体的数值,反应某个随机变量有多么“随机”。在金融领域,不确定性还有个名字,叫风险。
说来奇怪,至今没有公式来表示不确定性。现存度量离散程度的方法有多种:标准差、方差、风险值(value-at-risk,VaR)、熵。不过,对于以上方法算来的数值,却不尽然反应“随机性”,这是因为随机性涉及整个随机变量的全部。
尽管如此,为了优化和比较,将随机性降低到单个数字表示是必要的。 划重点,“不确定性更大”,通常等同于“更糟糕”(增强学习的某些实验除外)。
不确定性的类型
统计机器学习关注模型的参数估计,进而估计未知的随机变量。多种形式的不确定性在这里发挥作用,其中一些描述了预期的内在随机性(例如硬币翻转的结果),其他一些则来源于对模型参数的信心程度。
为了使上述理论更具体,让我们考虑一个递归神经网络(RNN),它从一系列地表的气压计读数中预测当天的降雨量。 气压计测量大气压力,即将下雨时通常气压会下降。 下图总结了降雨预测模型里,不同类型不确定性的图表。
内在不确定性(Aleatoric Uncertainty)
内在不确定性中,aleatory的拉丁文词源是aleatorius,本意是用来当骰子玩的羊距骨,引申义为蕴含随机性的过程。内在不确定性描述了数据生成过程本身的随机性。哪怕采样再多的数据,也无法消除这一随机性。 正如抛掷硬币,在落地之前无法知道其结果。
我们用降雨预测做类比,气压表的不精确带来了内在不确定性。除此之外,还有一些重要的变量在数据收集设置里没有观察到:昨天有多少降雨量? 我们是在测量当前的气压,还是最后一次冰期时的气压?这些未知变量是我们数据收集装置所固有的,因此从该系统收集更多数据,并不能免除这种不确定性。
内在的不确定性将会从输入,一直延续到模型的预测结果。考虑一个简单的模型,输入采用正态分布式。这时。因此,预测分布的内在不确定性可以用来描述。当然,在输入数据的随机机制不清楚时,预测内在不确定性会更难。
有人可能会认为,由于内在不确定性是不可减少的,因而对此也做不了什么,所以应该忽略它。 事实上并不是!训练模型时须注意选择那些能够正确表示内在不确定性的输出表示。 标准LSTM不会产生概率分布,因此尝试学习硬币翻转的结果只会收敛到均值。 相反,用于语言生成的模型产生了一系列分类分布的随机概率(单词或字符),可以用在句子补全任务中,捕获模型的内在不确定性。
认知不确定性(Epistemic Uncertainty)
“好的模型总是相似的;坏的模型各有各的错法。”
认知不确定性中,Epistemic源于希腊词根epistēmē,意思是有关知识的知识。 它衡量的是,由于我们对正确模型参数的未知,而带来的对正确预测的未知程度。
下图是某些一维数据上高斯过程回归的模型图。 置信区间(蓝色)反映了认知不确定性。对于训练数据(红点),不确定性为零。随着我们离训练点越来越远,预测分布将分配到更高的标准差。 与内在不确定性不同,我们可以通过在缺乏知识的输入区域收集更多数据,来“消除”模型的认知不确定性。
有一条内容详实的研究线索将深度学习与高斯过程联系起来。该研究的目标是,使用神经网络的强大表示能力,来提升高斯过程不确定性的表达精度。不幸的是,高斯过程很难被扩展到大型数据集上;训练时均匀采样的随机小批量数据并不适用。所以在大模型和大数据集上,高斯过程失去了青睐。
如果想要在模型选择上注入更大的灵活性,一个好主意就是使用模型集成(ensemble),即合理利用“多个独立学习模型结果”的一种巧妙方式。类似于高斯过程解析地定义了预测分布,集成学习估计了预测的经验分布。
由于在训练过程中发生的随机偏差,任何单个模型都会产生一些错误。但是,把多个模型集成起来就会很强大。因为集成的模型犯错类型不同,当某个模型暴露其具有自身风格的失败时,其他多数模型与正确推断的预测一致。
我们如何从多个模型中随机抽样,构建集成模型呢?在使用自举聚合进行集成【也叫bagging】时,我们从规模为 的训练数据集中,采样个大小为的数据集(其中各个数据集都不涵盖整个原始训练集)。使用个模型在各自的数据集上独立训练,其结果预测形成共同的经验预测分布。
如果训练多个模型代价太大,也可以使用Dropout操作来近似模型集成。不过,引入Dropout涉及额外的超参数,并且可能损害单个模型的性能(对于现实中的应用,Dropout在准确性要求极高,而不确定性估计是次要的场景中,是不能使用的)。
因此,如果你拥有丰富的计算资源(就像谷歌那样),训练一个模型的多个副本,【对于减少认知不确定性来说,】通常会更容易。这种做法具备集成的好处,而又不会损害性能。这即是深度集成学习这篇论文采用的方法。论文的作者还提到,不同权重初始化将引起训练的随机波动,这就足以形成多种【表现迥异的】模型,而不必通过自举聚合来应对训练集的多样性。从实际工程的角度来看,不以模型的性能为依据的风险评估方法是明智的。研究人员想要尝试的其他集成方法,在选择模型时,都不应该仅依据模型的性能表现。
越界不确定性(Out-of-Distribution Uncertainty)
对于我们的降雨量预测器,如果输入数据不是地表气压计的连续读数,而是太阳附近的温度,结果会如何?如果输入是一系列零呢?或者气压计读数单位不统一呢? 我们的RNN模型会“愉快地”计算并报告一个预测,但结果毫无意义。
上述情况下,一旦测试了与训练集不同的数据,模型的预测将完全不合格。这是一种在(基准驱动的)机器学习研究中经常被忽略的典型失败模式,因为我们通常假设训练集、验证集和测试集都是由干净的、独立同分布的数据组成的。
输入数据是否“有效”,是在实践中部署模型的一个需要特别注意的问题,有时这被称为越界(Out of Distribution,下文简称OoD)问题。有时也被称为模型错误指定或异常检测。
OoD检测的适用范围并不限于强化学习系统。例如,我们希望构建一个监控患者生命体征的系统,并在出现问题时提醒我们,而不必做所有病理检查。再如,我们管理数据中心时,想了解每时每刻可能发生的异常活动(像磁盘填满、安全漏洞、硬件故障等)。
由于OoD仅在测试时发生,我们不应该假设提前知道模型遇到的异常分布。这就是使OoD检测变得棘手的原因——我们必须强化模型,防止在训练期间遇到从未见过的输入!这正是对抗样本学习中典型的攻击系统的情形。
有两种方法可以处理机器学习模型的OoD输入:1)在我们将它们放入模型之前捕获不良输入;2)给出模型预测输入的“怪异性”,暗示我们输入可能是错误的。
第一种方法,我们不假设下游机器学习任务,只考虑输入数据是否在训练分布中。这正是生成式对抗网络(GAN)中判别器的职责。然而,单个判别器并不很可靠,它只能区分真实据分布和产生器的分布;当输入数据出离二者之外,判别器将反馈任意预测。
判别器不成了,我们就构建了预测正常分布的概率密度的模型,例如核密度估计器、或将归一化流拟合到数据。最近我和Hyunsun Choi在使用现代生成模型进行OoD检测的论文中对此进行了研究。
第二种OoD检测方法,则是使用模型预测(认知)不确定性,在输入是OoD的时候告诉我们。理想情况下,错误输入将会产生“怪异的”预测分布。例如,Hendrycks和Gimpel证明,OoD输入的最大softmax概率(即预测类别)往往低于正常分布的输入。在这里,不确定性与最大softmax概率建模的“置信度”成反比。高斯过程这样的模型,构造性给出不确定性估计,而另一种做法,就是通过深度集成学习(Deep Ensembles)计算认知不确定性。
在强化学习中,遇到OoD输入是好事,因为OoD代表了实际过程中模型尚不明确如何处理的输入。鼓励政策把寻找OoD输入看作成全其“自身的好奇心”的手段,以探索模型预测不佳的区域。这样的策略很好,但我很想知道,在现实世界环境中,如果发生了传感器破裂、或其他实验异常时,这些好奇心驱动的模型会发生什么。机器人将如何区分“没见过的状态”(好OoD)和“传感器破坏”(坏OoD)?是否会导致模型学到干扰它们的传感器机制,以产生最大的新奇感?
谁来看住看门狗?
如前一节所述,防御OoD输入的方法之一是建立一个“监视”输入的模型。我更喜欢这种方法,它将OoD问题与任务模型中的认知不确定性与内在不确定性脱钩。从工程角度来看,更易于分析。
但我们不应该忘记,模型也是一个函数逼近器,可能有它自己的OoD错误! 我们在最近关于产生式集成学习的论文中给出(DeepMind的同时期工作也给出类似结论),在CIFAR似然模型下,来自SVHN的图像比CIFAR自身图像具有更大的似然值!
不过,情况并非一塌糊涂! 事实证明,似然模型的认知不确定性是似然模型自身的OoD检测器。 通过使用密度估计来实现认知不确定性估计,我们可以使用似然模型的集成学习,来以模型无关的方式保护机器学习模型,免受OoD输入的影响。
校准(可重复性):下一个需要注意的问题?
假设我们的降雨RNN预测模型告诉我们,今天的雨量将服从。如果我们的模型被校准,那么在相同条件下重复这个实验,我们将会观察到雨量的经验分布为。
承接上文,我要提醒读者:不要仅仅看到模型输出了置信区间,就以为区间内的值代表了实际结果的概率!
置信区间(例如)隐含地假设预测分布是高斯分布。如果尝试预测的分布是多模态的、或长尾的,那么模型将无法精确地校准(重复)!
当今学术界开发的机器学习模型,主要针对测试精度,或某些适应度函数进行优化。研究人员没有通过在重复相同的实验中部署模型,并测量校准误差来进行模型选择。因此(不出所料),我们的模型往往校准不佳。
展望未来,如果我们相信在现实世界中部署的机器学习系统(机器人、医疗保健等),“证明我们的模型正确理解世界”的更强大的方法是测试它们的统计校准。良好的校准性也意味着良好的准确性,因此校准将是一个严格的标准。
不确定性应该是标量吗?
尽管标量的不确定性有用,随机变量形式的不确定性将提供更多信息。我发现,像粒子滤波和基于优化分布的强化学习等方法,在整个数据分布上进行优化,无需借助简单的正态分布来跟踪不确定性,这些方法很酷!我们构建基于机器学习的决策系统时,可以诉诸于分布的完整结构,而不是使用单个标量的“不确定性”,来决定下一步做什么。
隐含量化网络(Implicit Quantile Networks)的论文(Dabney等人)就如何从输出分布中构建“风险敏感模型”进行了详细的讨论。在某些环境中,人们可能更倾向于选择探索未知的机会;而在另一些环境中,未知事物可能不安全,应该避免。风险度量的选择决定了如何将模型输出的分布映射到可以优化的标量。所有风险度量都可以从分布中计算出来,因此一旦预测了完整分布,我们就能够轻松地组合多种风险。此外,支持灵活的预测分布似乎是改进模型校准的好方法。
风险度量是金融资产管理者非常重要的研究课题。普通的Markowitz投资组合的目标,是最小化投资组合收益的加权方差。然而在金融语境中,方差不是“风险”的直观选择:大多数投资者介意的并不是回报超出预期,而是回报少或为负。因此一些风险度量,如Value-at-Risk(风险值)、Shortfall Probability(差额概率)、Target Semivariance(目标的半方差),只是关注了“坏”结果的可能性,仅在优化目标的意义上有用。
更糟的是,即使在分析意义上,它们也难以使用。我希望,对于基于优化分布的强化学习系统、蒙特卡罗方法、灵活的生成式模型的研究,将建立与投资组合优化器紧密结合的风险度量的可微松弛。如果你从事金融工作,我强烈建议你阅读IQN论文的“强化学习中的风险”部分。
总结
以下是本文的重点概述:
- 不确定性/风险是度量“随机性”的标量。将随机变量简化到单个数字是为了优化和数学表达的方便。
- 预测不确定性可以分解为内在不确定性(由数据收集过程产生的、不可减少的噪声),认知不确定性(源于对真实模型的无知)和越界不确定性(在测试时、输入可能是畸形的)。
- 可以通过softmax预测阈值或集成学习来减轻认知不确定性。
- 我们可以使用与任务无关的滤波机制来防止“格式错误的输入”,而不是将OoD不确定性传播到预测中。
- 密度模型是在测试时过滤输入的上佳选择。然而,重要的是要认识到密度模型仅仅是真实密度函数的近似值,并且它们本身易受输入分布的影响。
- 自检验:生成式集成学习减少了似然模型的认知不确定性,因此它们可用于检测OoD输入。
- 校准在模型研究中很重要,但未被充分认识。
- 一些算法(如基于优化分布的强化学习系统)将机器学习算法扩展到灵活的概率分布模型,这提供了比单个风险度量更多的信息。
进一步阅读
- 我特别推荐Litterman等人的现代投资管理第3章(“风险测量”),以案例的方式了解风险。
- http://uqpm2017.usacm.org/sites/default/files/DStarcuzzi_UQConf.pdf
- http://mlg.eng.cam.ac.uk/yarin/blog_2248.html