小叽导读:复杂的深度模型中,如果效果不好,是因为网络设计的欠缺?还是数据天然缺陷?是训练代码的 bug?还是 Tensorflow 自身的问题?基于此,阿里工程师推出了 DeepInsight 深度学习质量平台,致力于解决当前模型调试和问题定位等一系列问题。接下来,阿里巴巴高级技术专家、DeepInsight 深度学习质量平台技术负责人:孙凯(花名:路宸),带我们一起探索。
1. 背景
机器学习训练过程的调试、可视化以及训练效果的评估一直是业界难题。在数据较少,模型较简单,如 LR、GBDT、SVM,超参不多的情况下,模型的可调性和可解释性都有一定保障,那么我们用简单的训练,再观察召回 / 精度 /AUC 等指标就可以应对。
而深度学习时代,模型的复杂性远远超乎想象,层层嵌套的网络结构,优化器和大量超参的选择,特征的连续化,一起构建了复杂的深度模型。如果效果不好,其原因是多样的,为了定位和解决这些问题,算法研发同学需要花费大量精力反复尝试,而且很可能得不到准确的答案。简单来说,网络模型近似于黑盒。
2. DeepInsight
通过研究,我们发现训练和评估过程中大量中间指标与模型效果能产生关系,通过系统的分析建模张量、梯度、权重和更新量,能够对算法调优、问题定位起到辅助决策作用。而且,通过改进 AUC 算法,分析 ROC、PR、预估分布等更多评估指标,能够更全面地评估模型效果。
通过 2 个多月的努力,我们推出了 DeepInsight 平台,致力于解决当前模型调试和问题定位等一系列问题。提交模型开始训练之后,用户可以通过 DeepInsight 平台,能一站式查看并分析训练过程,从训练中间指标到预测指标,再到性能数据,一应俱全。对于训练中明显的问题,平台也会高亮给予提示。未来,我们希望平台能更好地帮助用户发现和定位训练中的问题,并能给予适当提示(如更改某些子网络的最优化算法、更改学习率动量等),就如同 GDB 之于 C ++ 一样。
2.1 目标
沉淀并持久化训练数据。深度学习的数据非常宝贵,每次训练的网络拓扑、参数、训练中间过程、模型评估指标都会持久存储,方便后续人工分析和二次建模;
沉淀对模型训练的认识,提供分析调优手段,辅助决策,同时规避各类已知问题;
利用大数据分析建模,寻找中间过程指标的关系,更好地辅助决策,我们称这个目标为 Model on Model,即利用新的模型来分析评估深度模型;
在大数据分析建模的基础上,尝试对已有模型进行深度强化学习(DRL),提高深度学习调试效率。
2.2 架构
系统主要分为四层:输入层、解析层、评估层、输出层;
同时包括五大组件:Tensorboard+ 可视化分析;TensorViewer 日志展示对比;TensorDealer 集成配置;TensorTracer 数据透出;TensorDissection 分析调优。
2.3 进展
2.3.1 高性能可视化组件 TensorBoard+
Google 的 TensorBoard(简称为 TB)是 TensorFlow(简称为 TF)的可视化组件,可以查看深度学习的网络结构、中间指标等。原生的 TB 是单机版命令行方式运行,无法多用户使用;易用性差,每次切换日志路径都需要 kill 掉当前进程;同时性能也很差,加载工业模型数据立即卡死;指标分层混乱,几千个指标全都罗列,无法查看;用法复杂功能较弱,不支持已展示图形的二次数据对比,不支持 X 轴浮点数据展示等。
因此,我们重构了 TB 的核心代码,支持 GB 级日志加载和数据分层,将整个服务改造成多用户版本,利用 Docker 灵活管理资源并自动回收。UI 上支持了高亮自定义指标、分层展示、数据对比、日志上传等,具体如下:
支持在线更改 TF 日志路径:
支持图形数据在线聚合对比:
支持 X 轴浮点数值类型展示:
支持图形数据 Hightlight 分维度显示:
支持手动调整前端定时刷新时间,实时展示数据:
2.3.2 集成配置日志管理系统 TensorViewer
TF 的任务缺乏有效管理,用户无法按需查看和分析数据,更无法回顾历史数据。我们打通了 TF 与 DeepInsight 的通路,收集了所有任务的信息,用户可以查看每次训练的实时数据和所有历史数据,支持多任务对比分析;同时支持一键跳转到 Tensorboard+,直接对当前日志数据进行可视化展示。
2.3.3 改进 TensorFlow 的可视化数据透出
我们定义了一套数据透出方式,可以把所有内部数据透出成统一的 Summary 格式,并被 Tensorboard+ 处理。由于 PS 架构没有 Master 集中处理中间数据,再加上张量、梯度等指标的透出是极为消耗资源的,所以,如何透出数据是值得深入研究的。当前我们在 Worker0 上透出数据,能满足一般模型训练的要求,未来,会研究 Snapshot 数据透出方案,在大规模网络下也能取得较好效果。
当前,我们已经初步解析了 Tensorflow 透出的过程指标,正在这些海量指标上进行有监督和无监督的建模探索。
2.3.4 改进模型评估指标
Tensorflow 自带的 AUC 计算方式分桶较少,计算精度有 bug,在处理大量数据时性能不够,而且,仅仅能计算 AUC,无法绘制 ROC、PR 等曲线。
我们改进了计算方式,引入更多桶,并提升计算效率,同时,绘制了更多新的指标。当前绘制的指标包括 AUC、ROC、PR、波动率、正负样本分桶分布。通过观察正负样本的分布,我们发现 Tensorflow 异步计算的缺陷,导致某些桶的样本数量有误差,会带来 AUC 上极小波动,这个 bug 目前尚未解决。所有的预估指标都无缝接入 DeepInsight 平台。
2.3.5 研究模型训练中间指标
通过深入观察和建模大规模 Embedding 子网络的训练指标,我们发现权重(偏置)值的变化可以反应出相关网络结构是否被有效训练。权重(偏置)值变化微弱的区域即为训练的“盲区”—该部分网络没有被训练起来。通过观察权重(偏置)的梯度,可以帮助我们诊断梯度弥散或梯度爆炸等问题,分析了解训练该部分网络的难易程度,有针对性地调整优化器以及学习率等设置。通过全面考察整个网络各部分的激活以及梯度,可以帮助我们深入了解整个网络前后向多路信息相互耦合、协同传导的复杂机制,从而更有效地进行模型结构的设计调优。
对中间指标的研究会沉淀回流到 DeepInsight,在训练指标产出后,对用户给予提示,做到辅助决策的作用。
本文作者:孙凯阅读原文
本文来自云栖社区合作伙伴“阿里技术”,如需转载请联系原作者。