作者 | Andreas Kirsch
编译 | 翻译官balala
编辑 | Tokai
深度学习如今能够大获成功,其中的一大功臣便是大规模的标注数据。然而在大多数现实场景中,我们往往只能获得未经标注的大规模数据集,如果要对这么多数据进行人工标注,势必耗费大量的人力成本。在此前,研究界已经提出主动学习的方法来解决这一问题,然后采用该方法选择出来的数据可能存在大量重复的情况,从而造成标注冗余问题。
对此,牛津大学的理论和应用机器学习研究团队(OATML)在一篇 NeurIPS 2019 论文中提出了一种 BatchBALD 采集函数,可有效解决主动学习面临的这一难题, AI 科技评论编译如下。
在主动学习中,我们使用“人在回路”(Human in the Loop)的方法进行数据标注,可有效地减少了需要大量标注的数据量,并且该方法适用于标注成本过高时的机器学习。
我们在《BatchBALD: Efficient and Diverse Batch Acquisition for Deep Bayesian Active Learning》论文中提出了 [1], 进一步提出了 BatchBALD 采集函数:这是一种在深度主动学习中选择信息点批次的全新的实用方法,它可以解决长期困扰我们的标注冗余问题。我们提出的算法基于信息论并在有用的直觉(Intuition)上进行了扩展。
实现代码 GitHub 地址: https://github.com/BlackHC/BatchBALD
一、什么是主动学习?
我们在一系列重要的实验中,通过利用深度学习算法和大量经标注的数据集,能得到很好的结果。但在一般情况下,我们只能获取到未标注的大型数据集。例如,我们很容易获得大量的库存照片,但是标注这些图像既费时又昂贵。这就使得许多应用无法从深度学习的最新研究进展成果中受益。
在主动学习中,我们仅仅要求专家标注信息量最多的数据点,而不是预先标注整个数据集。然后我们再使用这些新获取的数据点和所有先前标注好的数据点对模型进行反复训练。重复此过程,直到模型结果的精度满足我们的要求为止。
图1: 主动学习流程。重复进行主动训练、评分、标注和获取的学习步骤,直到模型达到足够的精度为止。
要执行主动学习,我们需要定义一些信息评价指标,这通常是以“采集函数(acquisition function)”的形式完成。之所以将此评价指标称为“采集函数”,是因为它计算的分数确定了我们要获取的数据点。我们要发给专家做标注的这些未经标注的数据点,可以最大化采集函数。
二、存在什么问题?
通常来说,未标注点的信息量是单独进行评估的,其中一种流行的“采集函数”就是 BALD [2]。在主动学习中,研究者往往普遍采用 BALD 这种采集函数方法来分别对未标注点的信息量进行评估,但是由于单个信息点可能几乎相同,分别评估各个点的信息量极度浪费资源。
这意味着,如果我们单纯地获取前 K 个最有用的点,可能最终会导致让专家给 K 个几乎相同的点加标签!
图2: 来自 MNIST 数据集(手写数字)的1000个随机选择的点的 BALD 得分(信息量)。 这些点按数字标签进行颜色编码,并按分数排序。用于评分的模型已经首先训练达到 90% 的准确性。如果我们选择得分最高的分数(例如,得分高于 0.6),则大多数得分将是 8,即便我们能够假定模型在获得了前几对得分后会认为它们的信息量要少于其他可用的数据。点在x轴上通过数字标签进行了稍微移动以避免重叠。
三、我们的研究成果
在这篇论文中,我们将采集函数的概念有效地扩展到了数据点的集合,并提出了一种新的采集函数,该函数可以在获取数据点的批次时考虑到数据点之间的相似性。
为此,我们采用了常用的 BALD 采集函数,并以特定的方式将其扩展为 BatchBALD 采集函数。我们将在下文中对该采集函数进行解释。
图3:BALD采集函数 和 BatchBALD采集函数 的理想获取。如果数据集的每个数据点包含多个相似点,则 BALD 采集函数将以牺牲其他信息数据点为代价选择单个信息数据点的所有副本,从而浪费了数据效率。
但是,仅仅知道如何为每个批次数据点评分是不够的!我们仍然面临着寻找得分最高的数据点批次的难题。简单的解决方案是尝试数据点的所有子集,但那是行不通的,因为存在指数级多的可能性。
针对我们提出的采集函数,我们发现它具有一个非常有用的属性,叫做子模性(Submodularity),它使我们能够运用贪婪算法:逐个选择点,并在先前添加到数据点批次中的的所有点上调节每个新点。我们通过利用这种子模性属性,可以证明这种贪婪算法找到的子集“足够好”(也就是:1-1 / e-的近似)。
总体而言,这使得我们提出的采集函数 BatchBALD 在性能上要优于 BALD 采集函数 :对于大小相差不多的批次,它使用较少的迭代和较少的数据点即可达到更高的精度,并显著地减少了冗余的模型训练和专家标注,从而降低了成本和时间。
而且,从经验上讲,它与按顺序获取单个点的最优选择一样好,但在速度上要比后者快得多。后者在每个单点获取之后,仍需要重新训练模型。
(a) MNIST 数据集实验的性能。在采集大小为10的情况下,BatchBALD 采集函数优于 BALD 采集函数,并且性能接近最佳采集大小1
(b) MNIST 数据集实验的相对总时间,标准化训练采集大小为10的 BatchBALD 采集函数至95%的精度。星号标注表示:每种方法达到95%的准确度的点。
图4:MNIST 数据集实验的 BALD 采集函数和 BatchBALD 采集函数的性能和训练时间。采集大小为10的 BatchBALD 采集函数的性能与采集大小为1的 BALD 采集函数差异不大,但是它只需要一小段时间,因为它需要重新训练模型的次数更少。与采集大小为10的 BALD 采集函数相比,BatchBALD 采集函数也需要更少的采集来达到95%的准确度。
在解释采集函数之前,我们需要了解 BALD 采集函数的作用。
四、什么是BALD采集函数?
BALD 是贝叶斯不一致主动学习(Bayesian Active Learning by Disagreement)的简称 [2]。
如“贝叶斯”其名所示,它假设贝叶斯设定能够让我们捕获模型预测的不确定性。在贝叶斯模型中,参数不仅仅是在训练过程中更新的数字(点估计),而且是概率分布。
这使模型可以量化它的理念:参数的广泛分布意味着模型无法确定其真实值,反之狭窄的参数分布则可以量化更高的确定性。
BALD 采集函数(基于模型预测的结果 y 是否能很好地体现模型参数 ω)给一个数据点 x进行评分。为此,需要计算出互信息 Ⅱ(y , ω)。众所周知,互信息是信息论中的概念,它能捕获数量之间的信息重叠。
当使用 BALD 采集函数选择一个批次的 b 点时,我们选择的是 BALD 采集函数得分最高的前 b 个点,这是该领域的标准做法。这与最大化以下批量采集函数的做法相同:
aBALD( {x1, ... , xb} , p( ω | Dtrain ) ) := Σbi=1Ⅱ(yi ; ω | xi , Dtrain)
其中,
{x1*, ..., xb*} := arg max aBALD( {x1, ... , xb} , p(ω | Dtrain) ),{x1, ... , xb} ⊆Dpool
直观来看,如果在批次点中,我们将给定一些数据点和模型参数得到的预测信息内容视作集合,互信息则可以看作是这些集合的交集,这就对应了互信息评估信息重叠的概念。
图5:BALD采集函数 背后的直觉。灰色区域有助于BALD 得分,深灰色区域被重复计算。
事实上,Yeuang在论文《A new outlook on Shannon's information measures》中[3]表明,这种直觉是有充分依据的。我们可以定义一个信息度 μ*,从而能够使用设定操作来代表信息理论量化。
Η(x , y)= μ*(x ∪ y)
Ⅱ(x , y) = μ*(x ∩ y)
Ep(y)Η(x | y)= μ*(x y)
图 5 展示了 BALD 采集函数在获取3个点的批次时对这些集合的交集区域所计算出来的分数。
因为 BALD 采集函数是一个简单累加计算,所以会导致数据点之间的互信息被重复计算,并且 BALD 采集函数高估了真实的互信息。这就是为什么在具有同一点有很多(几乎相同)副本的数据集中,单纯使用 BALD 采集函数会导致我们选出所有副本的原因:我们对所有点之间的互信息交集进行累积计算!
五、BatchBALD 采集函数
图6:BatchBALD 采集函数背后的直觉。BatchBALD 采集函数考虑了数据点之间的相似性。
为了避免重复计算,我们要计算数量 μ*(Ui yi ∩ ω),如图 6 所示,它对应的是 yi 和 ω 的互信息Ⅱ( y1, ... , yb ; ω | x1, .... , xb, Dtrain ) :
aBatchBALD( {x1, ... , xb} , p(ω | Dtrain)) := Ⅱ(y1, ... , yb ; ω | x1, .... , xb, Dtrain )
扩展互信息的定义后,我们得到以下两项之间的区别:
aBatchBALD( {x1, ... , xb} , p(ω | Dtrain)) = H(y1, ... , yb ; ω | x1, .... , xb, Dtrain )
-E p( ω | Dtrain )[ H(y1, ... , yb | x1, .... , xb, ω) ]
第一项获取了模型的一般不确定性,第二项获取了给定模型参数描述的预期不确定性。
我们可以看到,当模型对数据点有不同的解释,也就是模型对单个点更有信心(产生较小的第二项),但预测结果彼此并不不同(产生较大的第一项)时,该模型得到的分数将变高。这就是“不一致”这个名称的由来。(这也是“贝叶斯不一致主动学习”这一名称中的“不一致”的由来)
六、子模性
现在为了确定要获取的数据点,我们将使用子模性。
基于子模性我们可以知道,这种做法带来的提升会越来越小:选中两个点带来的分数提升要比单独选中一个点大,但是也没有把两个点各自带来的提升加起来那么大:给定函数 f :Ω→R ,我们称f的子模,如果:
f(A ∪{ x,y })-f(A)≤(f(A∪{ x })-f(A)) (f(A∪ { y })-f(A))
其中,所有的 A 包含于 Ω 和所有元素 x,y∈Ω 成立。
我们在论文的附录 A 中证明,我们的采集函数满足了这一特性。
Nemhauser等人在论文《An analysis of approximations for maximizing submodular set functions》中 [4] 已经证明,在子模函数中,可以使用贪婪算法来选择点,并保证其分数至少为 1-1 / e ≈63 %是最佳的。这样的算法称为 1-1 / e- 的近似。
贪心算法以一个空批次 A = { } 开始 ,并计算所有未标注数据点的 aBatchBALD( A∪{x} ),将最高分 X 加到A上并重复此过程,直到 A 在获取大小内。
接下来的文章将对此进行详细说明。
七、一致的蒙特卡罗 Dropout
我们使用蒙特卡罗 Dropout(MC Dropout)实现贝叶斯神经网络 [5]。但是,与其他实现方法的重要区别在于,我们需要一致的 MC Dropout:为了能够计算数据点之间的联合熵,我们需要使用相同的采样模型参数来计算 aBatchBALD 。
为了弄清原因,如图 7 中所示,我们研究了随着不同样本模型参数设置的 MC Dropout 变化,评分分数将如何变化。
如果没有一致的 MC Dropout,模型将使用不同的采样模型参数集对得分进行采样,这会导致丢失 yi 与附近的 Xi 之间的函数相关性,并且由于分数被分散,它与与随机采集获取数据的方法基本上没有什么区别。
图7: 不同组的100个采样模型参数的 BatchBALD 采集函数得分。这展示了从数据集中随机选取的1000个点的 BatchBALD 采集函数得分,同时为已经达到90%精度的 MNIST 数据集实验模型选择了第10个点。单组100个模型参数的得分以蓝色显示。BatchBALD 采集函数估计值表现出很强的带宽,不同组采样参数之间的得分差异大于单个频段“轨迹”内给定组的不同数据点之间的差异。
八、在 MNIST、重复的 MNIST以及 EMNIST 上进行实验
我们已经对 EMNIST 数据集进行了分类实验,该数据集涵盖了由47个类别和120000个数据点组成的手写字母和数字。
图8:EMNIST 数据集中所有47个类别的示例
我们可以看到:在获取大批次数据时表现更差(甚至比随机获取还差!)的 BALD 采集函数有了明显的改善:
图9:EMNIST 数据集实验的性能。BatchBALD 采集函数始终优于随机采集和 BALD 采集函数,而 BALD 采集函数则无法超越随机采集方法。
这是因为与 BatchBALD 采集函数和随机采集相比,BALD 采集函数会主动选择冗余点。为了更好地理解这一点,我们可以查看所获取的分类标签并计算其分布的熵。熵越高,获取的标签就越多样化:
图10: 在 EMNIST 数据集实验中,通过获取步骤中获取的类标签的熵。BatchBALD 采集函数稳定地获取了更多不同的数据点集。
我们还可以查看模型训练结束时所获得的分类的实际分布,并发现 BALD 采集函数对某些分类进行了欠采样,而 BatchBALD 采集函数尝试更均匀地从不同分类中选择数据点(当然该算法并不知道分类)。1
图11: 在 EMNIST 数据集实验中,获取的类别标签的直方图。左图为 BatchBALD 采集函数结果,右图为 BALD 采集函数结果。根据获取次数对类进行分类,为清楚起见,仅显示下半部分。一些 EMNIST 类在 BALD 采集函数中不具有足够的代表性,而 BatchBALD 采集函数获得的类更加统一。根据所有的采集的点我们创建了如图示的直方图。
为了理解 BatchBALD 采集函数如何更好地解决不受控的场景,我们还尝试了 MNIST 数据集版本,我们将其称为重复的 MNIST 数据集( Repeated MNIST )。我们将 MNIST 数据集简单地重复了3次,并增加了一些高斯噪声,进而展示了 BALD 采集函数如何掉入陷阱中:因为数据集中有太多类似的点,使用得分排在前 b 的单个点是不利于计算的。2
图12: 在采集大小为10时重复 MNIST 数据集实验的性能。BatchBALD 采集函数的性能优于 BALD 采集函数,而由于数据集中的副本,BALD 采集函数的性能要比随机采集差。
我们还尝试了不同的采集大小,发现在 MNIST 数据集实验中,BatchBALD 采集函数甚至可以一次采集40个点,而数据效率几乎没有损失,不过 BALD 采集函数则会迅速恶化。
(BALD)
(BatchBALd)
图13:MNIST 数据集实验的性能,可增加采集大小。 随着采集规模的增加,BALD 采集函数的性能急剧下降。即使采集数量增加,BatchBALD 采集函数仍可保持很好的性能。
九、最后的一点想法
我们发现非常令人惊讶的是,当在批次数据上进行估计时,在主动学习中广泛使用的标准采集函数的结果甚至比随机基准更差。不过,我们乐于深入研究问题的核心并试图理解失败的原因,从而使我们对在该领域使用信息论工具的方式有了新的见解。
从很多方面来看,我们在这项工作中获得的真正收获是:当某件事失败时,我们需要停下来认真地思考。
脚注:
[1] 随机获取也比 BALD 采集函数能更一致地选择类,但不如 BatchBALD 采集函数效果好。
图14: 在 EMNIST 数据集实验中获取的类别标签的直方图。 左边是 BatchBALD 采集函数,右边是随机采集中心,右边是 BALD 采集函数。类按获取数量排序。在 BALD 采集函数和随机获取中,一些 EMNIST 类的代表性不足,而 BatchBALD 采集函数则更一致地获取类。直方图是用所有采集的点绘制的。
[2] 但是 BALD 采集函数并不是在这种情况下唯一失败的采集函数。
图15: 重复 MNIST 数据集实验的性能。BALD 采集函数,BatchBALD 采集函数,方差率,标准均方差和随机采集:采集大小10,带有10个 MC Dropout 样本。
参考文献
[1] BatchBALD: Efficient and Diverse Batch Acquisition for Deep Bayesian Active Learning
Kirsch, A., van Amersfoort, J. and Gal, Y., 2019.
[2] Bayesian active learning for classification and preference learning
Houlsby, N., Huszar, F., Ghahramani, Z. and Lengyel, M., 2011. arXiv preprint arXiv:1112.5745.
[3] A new outlook on Shannon's information measures
Yeung, R.W., 1991. IEEE transactions on information theory, Vol 37(3), pp. 466--474. IEEE.
[4] An analysis of approximations for maximizing submodular set functions—I
Nemhauser, G.L., Wolsey, L.A. and Fisher, M.L., 1978. Mathematical programming, Vol 14(1), pp. 265--294. Springer.
[5] Dropout as a Bayesian approximation: Representing model uncertainty in deep learning
Gal, Y. and Ghahramani, Z., 2016. international conference on machine learning, pp. 1050--1059.
via https://oatml.cs.ox.ac.uk/blog/2019/06/24/batchbald.html