社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  机器学习算法

改善机器学习模型中的分布外检测

谷歌开发者 • 4 年前 • 387 次点击  

文 / Google Research 研究员,Jie Ren 和 DeepMind研究员 Balaji Lakshminarayanan


机器学习系统的成功部署是需要系统能够区分出异常数据或与训练数据有显著差异的数据。这对深度神经网络分类器十分重要,因为它可能会将 分布外 (out-of-distribution, OOD) 的输入归结到 分布式 (in-distribution) 类别中,并予以高置信度。在我们利用这些预测为现实决策提供依据时,能否区分这些数据显得尤为重要。


例如,在基因组序列的细菌检测中运用机器学习模型,是一项充满挑战的实际应用。细菌检测对败血症等传染疾病的诊断与治疗以及食源性病原体的鉴定起着关键作用。多年来,越来越多的新细菌种类被发现,尽管使用已知细菌种类进行训练并通过交叉验证的神经网络分类器可达到很高的精度,但针对细菌检测的模型部署仍具有挑战:因为现实的数据在不断地发展变化,并且不可避免地包含以往训练数据中未曾出现的基因组(分布外输入)。

近些年来,越来越多的新细菌种类被发现。基于已知种类训练的分类器在使用属于已知种类的测试输入时能够达到很高的精度,但会错误地将来自未知种类的输入(如分布外数据)分为已知种类,并赋予高置信度


NeurIPS 2019 发布的《分布外检测的似然比》("Likelihood Ratios for Out-of-Distribution Detection") 一文中,我们受到上述现实中挑战的启发,提出并发布了一种针对基因组序列 OOD 检测的现实基准数据集。我们利用基于基因组序列的生成模型验证了现有的OOD检测方法,发现 似然 值(Likelihood Value, 即输入来自使用分布不均的数据估算得出的分布模型的概率)通常是错误的。在近期的图像深度生成模型研究中,我们也观察到了这种现象。我们通过背景统计的影响数据来解释这一现象,并提出了一个基于 似然比 的解决方案,该方案可显著提高分布外检测的准确性。



为何密度模型无法应用于分布外检测?

为模拟实际问题并系统地评估不同的方法,我们新建了一个细菌数据集,其数据来自美国国家生物技术信息中心 (NCBI) 的公开原核生物目录基因组序列。为模拟基因测序数据,我们将基因组分成拥有 250 个碱基对(基于目前的测序技术生成此长度)的多个短序列。然后,我们将分布内和分布外数据按照发现日期进行分离,以便将在设定的截止日期前发现的细菌种类定义为分布内,而将之后发现的定义为分布外。


随后,我们针对分布内基因组序列训练了一个深度生成模型,并通过绘制似然值曲线,检验该模型对分布内和分布外输入的辨别能力。分布外 序列的似然值与分布内序列的似然值的直方图高度重合,表明生成模型无法区分在两个类别。


像深度生成模型的早期研究也得到过类似的结果。例如,利用 Fashion-MNIST 数据集(由衣服和鞋类图像组成)中的图像训练的 PixelCNN++ 模型,为 MNIST 数据集(由数字 0 到 9 的图像组成)中的分布外图像分配了更高的似然值。

左图:分布内和分布外基因组序列的似然值直方图。似然值未能分离出分布内和分布外 基因组序列。右图:使用 Fashion-MNIST 训练并在 MNIST 上评估的模型的似然值直方图。与分布内图像相比,该模型为 分布外 (MNIST) 分配了更高的似然值


在研究这种失败模型时,我们观察到背景统计数据可能影响到了似然值。为了更直观地理解这一现象,我们假设输入由两个部分组成:
  1. 以背景统计数据为特征的 背景 部分,
  2. 以分布内数据特有模式为特征的 语义 部分。


例如,可以将 MNIST 图像建模为背景加语义。当人类解读图像时,可以轻松地忽略背景信息,而主要关注语义信息,例如下图中的“/”标记。但为图像中所有像素计算似然值时,则同时包含了语义和背景像素。尽管我们只需要使用语义似然值来做出决策,但原始似然值结果中可能大多数都是背景成分。

左上图:Fashion-MNIST 的示例图像。左下图:MNIST 的示例图像。右图:MNIST 图像的背景和语义成分



分布外检测的似然比

我们提出了一个去除背景影响并专注于语义的 似然比方法。首先,我们在扰动的输入上训练背景模型。该方法源于基因突变,我们通过随机选择输入值的位置,将其替换为另一个具有相等概率的值。具体来说,生成图像时,我们从 256 个可能的像素值中随机选择,而生成 DNA 序列时,则从四个可能的核苷酸(A、T、C 或 G)中随机选择。适量的扰动会破坏数据的语义结构,导致只能捕获到背景。然后我们计算完整模型和背景模型的似然比,消除背景成分,从而只保留语义成分的似然值。这样一来,似然比就是 背景对比得分 即与背景相比,它捕捉到了语义的重要性。


为了定性评估似然值和似然比之间的差异,我们在 Fashion-MNIST 数据集和 MNIST 数据集中绘制了每个像素的似然值和似然比值,创建了与图像尺寸相同的热图。由此,我们可以直观地看出哪个像素对这两个值的贡献最大。从对数似然热图中,我们看到,对于似然值,背景像素比语义像素贡献更大。事后来看,这不足为奇,因为背景像素大部分由一连串零组成,该模式很容易被模型学习。MNIST 和 Fashion-MNIST 热图之间的比较则说明了为什么 MNIST 会返回更高的似然值,仅仅因为它的背景像素更多!相反,似然比的结果更多关注语义像素。

左图:Fashion-MNIST 和 MNIST 数据集的对数似然值热图。右图:Fashion-MNIST 和 MNIST 数据集的似然比热图。数值越高的像素则阴影越浅。似然值由“背景”像素决定,而似然比则更关注“语义”像素,因此更适合用于分布外检测


似然比方法修正了背景影响,基于针对 Fashion-MNIST 训练的 PixelCNN++ 模型,我们将 MNIST 图像分布外检测的 AUROC 得分从 0.089 提高到了 0.994。在将似然比方法应用于基因组基准数据集这一极具挑战的问题时,与其它 12 种基线方法相比,该方法表现出了最佳性能。


如需了解详情,请参阅我们最近发表在 NeurIPS 2019 的论文。尽管我们的似然比方法在基因组数据集上达到了最佳性能,但还未达到将模型部署到实际应用中的高准确性要求。我们鼓励研究人员分享其对这一重要问题的解决方案,一起改善当前的最佳性能。数据集已上传至我们的 GitHub 代码库



致谢

本博文所述研究是 Google AI 和 DeepMind 多个团队共同协作的成果,论文作者包括 Jie Ren、Peter J. Liu、Emily Fertig、Jasper Snoek、Ryan Poplin、Mark A. DePristo、Joshua V. Dillon、Balaji Lakshminarayanan。感谢以下 NeurIPS 2019 的审稿人、Google 和 DeepMind 同事就此项研究与我们进行的讨论和提出的反馈:Alexander A. Alemi、Andreea Gane、Brian Lee、D. Sculley、Eric Jang、Jacob Burnim、Katherine Lee、Matthew D. Hoffman、Noah Fiedel、Rif A. Saurous、Suman Ravuri、Thomas Colthurst、Yaniv Ovadia 以及 Google Brain 和 TensorFlow 团队。


如果您想详细了解 本文讨论 的相关内容,请参阅以下文档。这些文档深入探讨了这篇文章中提及的许多主题:

  • NeurIPS 2019
    https://nips.cc/Conferences/2019

  • 分布外检测的似然比 / 论文
    https://arxiv.org/abs/1906.02845

  • 发布了 / GitHub 代码库
    https://git.io/JeP2s

  • 美国国家生物技术信息中心 (NCBI) 的公开原核生物目录基因组序列
    https://www.ncbi.nlm.nih.gov/genome/browse#!/prokaryotes/

  • 早期研究
    https://arxiv.org/abs/1810.01392

  • Fashion-MNIST
    https://github.com/zalandoresearch/fashion-mnist

  • PixelCNN++
    https://arxiv.org/abs/1701.05517

  • MNIST
    http://yann.lecun.com/exdb/mnist/


更多 AI 相关阅读:



Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/53488
 
387 次点击