资讯 人工智能开发者
此为临时链接,仅用于文章预览,将在时失效

Uber 开源 AI 可视化调试工具 Manifold,2 个工作流让计算性能提升百倍

作者:杨鲤萍
2020/01/17 15:38

雷锋网 AI 开发者按:在去年 1 月,Uber 推出了一种与模型无关的机器学习可视化调试工具——Manifold,它可以让模型迭代过程更易于操作,并能够提供更多的信息;同时,该工具也被 Uber 用来识别机器学习模型中的一些问题。

官方表示,大多数开发者通常会将 20% 的精力放在构建初始的工作模型上,而将 80% 的精力用来提高模型性能,即机器学习模型开发 20/80 分配法则,这也体现出调试机器学习模型的困难。因此,为了让开发者能够更好的利用 Manifold 带来的高效率,日前 Uber 宣布,他们将 Manifold 作为开源项目发布。

Uber 开源 AI 可视化调试工具 Manifold,2 个工作流让计算性能提升百倍

Manifold 开发背景

传统上,数据科学家在开发模型时,他们使用汇总分数,例如:对数损失、曲线下面积(AUC)和平均绝对误差(MAE)来评估每个候选模型。尽管这些指标提供了有关模型执行情况的直观数据,但它们并未传达有关模型执行不佳的原因以及如何改善模型性能的大量信息。因而,模型构建者倾向于依赖反复试验和误差来决定如何改善模型。

对数损失:

http://wiki.fast.ai/index.php/Log_Loss 

曲线下面积:

https://stats.stackexchange.com/questions/132777/what-does-auc-stand-for-and-what-is-it 

平均绝对误差:

https://en.wikipedia.org/wiki/Mean_absolute_error 

为了让模型迭代过程更加可操作,并能够提供更多的信息,Manifold 应运而生,它是一个用于机器学习性能诊断和模型调试的可视化工具。Manifold 是一个独立的 Web 工具和 Python 包,它有 3 个主要优势:

Uber 开源 AI 可视化调试工具 Manifold,2 个工作流让计算性能提升百倍

来源:Uber

Manifold 利用可视化分析技术让机器学习开发者能够超越总体指标检测模型无法精准预测的数据子集;它还通过揭示性能表现较好和较差数据子集之间的特征分布差异,来说明模型性能表现不佳的潜在原因。

此外,它还可以显示对于每一个数据子集,一些候选模型将有怎样的预测准确性差异,从而为一些高级处理(如模型集成)提供数据根据。

可视化设计

随着机器学习越来越成为相关业务不可分割的部分,提供使模型更透明且易于理解工具就显得更加重要,这一工具可以使得开发者能自信自如地使用机器学习生成的预测。但考虑到机器学习模型本质上是不透明的复杂性,则需要通过新兴的机器学习可视化来解决这个问题。

以前的机器学习可视化方法通常包括:直接可视化内部结构或模型参数和受底层算法约束的设计,但这可能导致无法扩展到可以处理更大范围内的通用用例。

Uber 开源 AI 可视化调试工具 Manifold,2 个工作流让计算性能提升百倍

来源:Uber

为了应对这个挑战,Manifold 在设计之初则考虑到了机器学习模型服务,并从分类和回归模型开始入手;这也使得该工具可以通过揭示数据子集之间的特征分布差异为机器学习模型开发黑盒提供更高的透明度。

同时,借助 Manifold 的设计,开发者也颠覆了传统机器学习模型的可视化,无需检查模型,而是直接通过以下方式检查各个数据点:

工作流设计

Manifold 界面包括两个部分,分别是性能比较视图和特征属性视图。其中,性能比较视图,由带有小提琴编码的多路图组成,用于比较模型和数据段之间的性能;

Uber 开源 AI 可视化调试工具 Manifold,2 个工作流让计算性能提升百倍

Manifold 性能比较视图的可视编码由 x 轴和 y 轴以及颜色组成,x 轴表示用户选定的性能指标,而 y 轴表示数据段,颜色表示模型。曲线高度显示了在每个数据段上每个模型的性能分布 来源:Uber

而特征属性视图,由两套特征分布直方图构成,用于比较两个选定数据段的特征。

Uber 开源 AI 可视化调试工具 Manifold,2 个工作流让计算性能提升百倍

特征属性视图的可视编码包含 x 轴(特征值范围)和 y 轴(数据点的个数)以及颜色(数据段组)。根据两个数据段组的分布差异对特征进行排序 来源:Uber

Manifold 通过以下三个步骤帮助用户发现模型需要改进的区域:

Uber 开源 AI 可视化调试工具 Manifold,2 个工作流让计算性能提升百倍

该可视化原型显示了数据空间中的模型性能,根据其性能(x 轴)和其中一个特征的值(y 轴)定位每个数据点 来源:Uber

开发者希望通过可视化原型显示了数据空间中的模型性能,根据其性能(x 轴)和其中一个特征的值(y 轴)定位每个数据点,但该方法存在 3 个主要挑战:

为了提前解决这些问题,开发者实现了一些聚合 / 简化操作;即:不单独表示每个数据点,而是把它们组成子集。在开发中,无需使用 y 轴来编码特定特征的值,而是使用了表示不同数据子集的分类轴。该方法演变成了最终的性能图表,并具有两个显著的优点:

而在工具的「性能比较」视图中显示模式的关键,在于把测试数据集分成子集。在 Manifold 中,子集是基于一个或多个性能列的聚类算法自动生成的,于每个模型,具有相似性能的数据被分到同一个组中(因为该算法确保模型 X 的性能对于子集 Y 中不同的数据点是一致的)。下图则说明了这个过程:

Uber 开源 AI 可视化调试工具 Manifold,2 个工作流让计算性能提升百倍

所有的数据点收集自每个模型,根据实际情况评估后给出性能度量 来源:Uber

Uber 开源 AI 可视化调试工具 Manifold,2 个工作流让计算性能提升百倍

左侧:性能指标作为在 Manifold 中运行的聚类算法的输入。右侧:用户可以调整集群参数来探索数据集中的模式 来源:Uber

Manifold 的架构

由于生成 Manifold 可视化涉及一些密集的数值计算(聚类、KL 发散),计算性能不足会拖慢用户界面的渲染,影响到整个用户体验。因此,Manifold 使用了 Python 并利用其 DataFrame 处理和机器学习库(如 Pandas 和 Scikit-Learn)实现所有重量级的计算。

Pandas:

https://pandas.pydata.org/ 

Scikit-Learn:

https://scikit-learn.org/stable/ 

但由于依赖 Python 后端会降低了 Manifold 的灵活性,难以实现组件化,这也成了在将 Manifold 和企业机器学习生态系统集成时的一个缺点。因此,除了 Python 计算外,Manifold 用 GPU 加速器添加了第 2 个用户工作流,该 GPU 加速器是用更加灵活的 JavaScript 编写而得。下图展示了两个工作流如何与 Manifold 集成的过程:

Uber 开源 AI 可视化调试工具 Manifold,2 个工作流让计算性能提升百倍

 Manifold 由 3 个不同的部分组成:数据源、后端和前端 来源:Uber

用户可通过 2 种方式使用 Manifold,即:通过 Python 包或 npm 包(通过网页)。由于代码可重用性和模块化对两个工作流的共存至关重要,因此,Python 和 JavaScript 代码库也被组织成了 3 个不同的功能模块:

与 Python 相比,处理数据密集计算对 JavaScript 计算引擎来说是个挑战。为了让开发者看到有意义的模式,需要大约计算 1 万个数据记录(「行」)。除了其他操作,KL 发散的聚类和计算需要在前端进行,这可能会造成速度瓶颈。根据测试结果,开发者在更新性能比较视图中的簇数量时,使用纯 JavaScript 实现的计算可能需要 10 多秒时间。

因此,我们把 TensorFlow.js 作为线性代数实用库来实现我们的 k 均值聚类和 KL 发散计算。因为这种类型的计算可以被矢量化,从而可以利用 WebGL 加速,所以更新同样数量的簇的任务可以在不到 1 秒的时间里完成,超过原来性能的 100 倍。

通过组件化并将其包含在 npm 包中,Manifold 具有更好的灵活性,既可以用作独立服务,也可以集成到其他机器学习系统(如 Michelangelo)中。

因为大多数用于机器学习的可视化工具需要额外的计算处理,超过了模型训练后端具备的计算处理能力,所以在把它们与其它机器学习系统集成在一起可能很复杂且不可扩展。Manifold 针对这种情况提出了解决方案,通过在可视化分析系统中分开处理训练模型所需的计算,可以进行更快的迭代,并得到了更简洁直观的数据接口。

Manifold 特性与更新

在 Manifold 的第一个开源版本中,Uber 添加了各种特性,使模型调试比内部迭代更容易。版本 1 的特性包括:

Uber 开源 AI 可视化调试工具 Manifold,2 个工作流让计算性能提升百倍

Manifold 新的升级包括对地理空间特征的可视化支持 来源:Uber

Uber 开源 AI 可视化调试工具 Manifold,2 个工作流让计算性能提升百倍

Manifold 的 Jupyter Notebook 集成接受作为 Pandas DataFrame 对象的数据输入,并在 Jupyter Notebook UI 中呈现可视化效果 来源:Uber

目前,Manifold 的开源版本提供了 npm 软件包版本,而对于 Jupyter Notebook 的绑定,则提供了一个 Python 包版本。要开始使用 Manifold,请按照 GitHub Repo 中的文档进行操作并在本地安装,或者查看 Uber 的演示网站。

原文地址:

https://eng.uber.com/manifold-open-source/ 

Manifold 详细介绍:

https://eng.uber.com/manifold/ 

Manifold 论文地址:

https://arxiv.org/pdf/1808.00196.pdf 

雷锋网 AI 开发者   雷锋网

长按图片保存图片,分享给好友或朋友圈

Uber 开源 AI 可视化调试工具 Manifold,2 个工作流让计算性能提升百倍

扫码查看文章

正在生成分享图...

取消
相关文章