具有前景的深度学习工具一览
解决问题往往需要大量工具的支持,深度学习也不例外。要说真有什么区别的话,那就是在不远的将来,用好这一领域的工具将愈发重要。
深度学习虽是一颗冉冉升起的“超新星”,但目前仍处于发展初期,许多该领域的工程师与有志之士正为深度学习的高效化进程而拼搏奋斗。除了人才辈出,我们还见证着越来越多深度学习工具的诞生,它们有助于推进深度学习曲折的发展进程,增加其便利性与高效性。
深度学习正逐渐从学者专家的理论研究迈向一个更为广阔的世界,在那里,深度学习爱好者想要投身该领域(便利性),越来越多的工程小组想要简化运作流程,化繁为简(高效性)。随着这一进程的发展,我们也整理出了一份最佳深度学习工具图表。
研究深度学习生命周期
要想对高效便捷的深度学习工具做出更好的评估,我们应先了解下深度学习周期的大致情况。(有监督)深度学习应用的生命周期包括多个不同步骤,始于原始数据,终于实况预测。
数据来源
任何深度学习技术应用的第一步都是确定正确信息的来源。如果幸运的话,你会轻而易举地找到可用的历史数据。否则,你要搜索开源数据集,在网页中提取信息,购买原始数据或使用模拟数据集。鉴于该步骤要视手头所拥有的具体技术应用而定,我们便未将其列入文末的工具图表中。不过请注意,谷歌数据集搜索或Fast.ai数据等网站会帮助我们省去不少麻烦。
数据标注
许多监督深度学习技术应用涉及对图片、视频、文本与音像的处理。在进行模式训练前,要用真值(真实的有效值)来标注原始数据(未处理数据)。数据标注高成本,高耗时。
在一个理想的安装程序中,数据标注往往与模型训练与模型部署紧密相连,并尽可能(虽然目前效果不尽如人意)地对深度学习训练模型做出调节。
数据版本
(假设你有个智能标注处理流程,随着数据集的增长,模型也得到不断地重训)数据会随时间推移而演变,而时间过得越久,对数据集的版本更新就愈发重要(这和经常更新代码和训练模型是一个道理)。
硬件规模
对模型训练与模型部署来说,有一点很重要——采用适当的硬件规模。在模型训练从本地服务器发展到大规模实验这一过程中,硬件的规模也需要做出适当调整。这就和部署模型时要根据用户需求来调整硬件规模是一个道理。
模型结构
想要开始模型训练,需要选择一个神经网络模型结构。
提醒:如果你有一个标准问题(例如找出网络上与猫有关的表情包),这就意味着只需要在GitHub开源代码库中找出一个最先进的模型直接照搬即可,不过有的时候为了改善性能,要亲自动手调整自己的模型结构。随着诸如神经网络架构搜索(Neural Architecture Search)等新途径的出现,选择合适的模型架构逐渐并入模型训练这一步骤,不过对于2018年大部分技术应用来说,使用NAS的性价比并不够高。
一想到深度学习技术应用的编码,人们首先想到的往往就是模型结构这一步骤,但是这只是深度学习运行周期中区区一环而已,并且通常而言,这还不是最重要的一环。
模型训练
在模型训练中,所标注数据需录入神经网络,并通过迭代来更新权值(即参数),以此实现损失(函数)的最小化。一旦确定了一个指标,便可用很多组不同的超参数(如学习率、模型架构与可选预处理步骤)来训练模型,这个过程便叫做超参数调优。
模型评价
如果你不能甄别模型的好坏,那训练神经网络无从谈起。在模型评价中,你通常会选择一个指标对其优化(同时你也可以观测许多不同的指标)。对于这个指标,你通常会找出一个最佳建模,它可以从训练数据推广到验证数据。而这需要跟踪记录不同的实验数据(不同的超参数、模型结构与数据集)与性能指标,实现训练模型的输出可视化并将各个实验进行比对。
如果没有合适的工具予以辅助,尤其是在许多工程师采用同样的深度学习数据管道进行作业时,这个过程很快便会变得盘根错节,扑朔迷离。
模型版本管理
这是在模型评价和模型部署之间的一个小环节(但仍值得一提):给不同版本下的模型添上标识符。在最新版本没有达到你的预期时,你可以通过这个标识符轻松返回到上一个运行正常的版本。
模型部署
如果你愿意将模型版本投入生产,那需要对该模型做出部署,使其与用户(人或另一个应用)实现交互:用户能对其发送数据请求并收到模型做出的预测。理论上来说,模型部署工具支持不同版本的渐进性变化,因此你可以预测出新投入生产模型的运行效果。
监控预测
一旦模型部署完成,你肯定会想密切关注模型的实地预测数据,时刻留意其数据发布与运行性能,以防用户在发现模型出问题后上门投诉。
提醒:上面提到的流程图已反映出深度学习这一工作流程的循环特性。实际上,深度学习应用要想成功,要点之一就是将所部署模型与新添加的标记之间构成的反馈回路(即人机回圈)视为深度学习工作流程中的重中之重。
与流程图上描述的相比,现实中深度学习的运行要复杂得多。你会发现深度学习的运行出现很多问题:“一跃千里”(比如处理预处理数据集时跳步骤),“重蹈覆辙”(模型性能数据不够准确,因此你需要搜集更多的数据),“鬼打墙”(陷入一个死循环,如建模——训练——评价——训练——评价——建模)。