立即下载

基于移动设备的机器学习,本地与云端孰优孰劣?

来源:极客头条

本文转自雷锋网,原文《基于移动设备的机器学习,本地与云端孰优孰劣?》,作者:陈鸣鸠 ,文章转载已获授权,转载请联系雷锋网

如果您觉得,是时候给自己的手机应用添加一些热门的机器学习或深度学习算法…..这是个好想法!但您会怎么选择?致力于提供算法服务及小白科普的咨询师 Matthijs Hollemans 近期在博客上分享了他的一些心得体会

绝大多数机器学习实现方法的步骤不外乎如下三点:

假设想做一个“名人匹配 (celebrity match) ”的应用程序,告诉用户他们和哪位名人最相似。首先收集众多名人的脸部照片; 然后基于这些照片,训练出一个深度网络上并使其能够辨认出每个名人的模样。这将用到某种卷积神经网络,然后训练这个网络,直到它能比较普通人和名人之间的脸部差异。

训练过程困难重重且代价不菲,但一旦模型训练有成,实现了“推断 (inference) ”——换句话说,做出预测是相当容易的。上传一张自拍给模型它会立即说:“您和George Clooney的相似度达到85%,但您有一双Lady Gaga的眼睛!”

图片描述

需要什么样数据、设计什么样的模型、以及该如何训练这个模型,完全取决于您想构建什么样的应用程序。但如何把机器学习系统融合到您的产品中,还需做出一些抉择,这也是本篇博客存在的原因。

需要做出决定的事情主要是:

换言之,应该使用云服务进行深度学习,还是应该自己一手操办?让我们一探究竟!

简单快速的选项

第一个问题是:真的需要拥有自己的模型吗?

使用别人的模型是目前为止最简单的方法。机器学习领域的新公司如雨后春笋般出现,他们能提供定制服务,例如语音识别,文本分析,或者图像分类。您不能直接访问他们的模型,因为这是他们的机密,但通过一个API接口,就可以将这些模型为己所用。

提供此类机器学习服务的供应商有:

各地涌现的类似服务商还有很多。如果应用程序需要执行这些特定服务中的一个,那么您应该考虑使用这些服务。

图片描述

工作原理:移动应用程序仅需向此类网络服务发送一个HTTPS请求以及提供预测所需的数据,例如由设备的相机拍摄的照片,那么在几秒钟之内,设备就能接收到预测结果。一般情况下,您需要依据不同请求,支付不同的费用,除此之外不需要担心别的。您唯一需要做的,是在应用程序内部连接服务的API接口,通常有软件开发工具包 (SDK) 会让这些服务易于集成。为了让模型保持最新,服务供应商会在后台使用他们的数据对模型进行重复训练。每当他们改进模型,您自然而然地能从中受益,而不必为了使用这些服务去了解任何机器学习的事。

使用这种“全包的”机器学习服务的好处是:

这种方法的缺点:

注意:这些服务实际上只允许有限种类的训练。例如Clarifai,允许上传自定义的训练图像来创建自己的模型,这样增强他们现有模型的功能后,对于特定的图像,能获得更好的推断结果。

如果现有的模型符合您所有的需求,使用全盘管理的机器学习服务是一个明智的选择。对于大多数移动应用程序,选这个服务就对了!

训练自己的模型

如果您的数据在某种场景下上是独一无二的,或者对现有的解决方案不满意,那么您需要训练自己的模型。数据是成功进行机器学习的关键,数据的质量和数量是重中之重。如果想训练自己的模型,您需要海量的数据。一旦收集好了训练数据,下一步是决定在哪里训练和如何训练,这取决于模型的复杂性和收集到的训练数据的数量。

除非您有自己的数据中心或是一个土壕,否则最实际的做法还是租用其他电脑的计算能力,许多云平台 恭候您的光临。如今,您可以在云中租用GPU来训练深度学习系统。

所以您要决定:租用,购买,哪个更便宜吗?然而除了价格,还有其他条件需要考虑。让我们来看看其中一些考虑因素。

提示:在设备上训练又怎样呢?如果需要进行推断的所有数据在用户设备上都有——并且不需要其他来源的数据——完全可以不需要云端平台,在设备上进行训练即可,可是这方法只适用于小型数据集和基础的机器学习算法。这样的做法还没摸到深入学习的门栏。

1. 在云端训练

你的选择有两个:

让我们先看看通用云计算。

工作原理:在别处数据中心租用一台或多台计算机,在这些电脑上无论做什么都随您喜欢。让云计算机访问训练数据,然后运行您喜欢的训练软件,模型训练开始。完成训练后,支付用于训练模型所用时间消耗的费用,就可以下载模型得出的参数和删除计算实例。这样就有了一个训练好的且可以用于任何地方的的模型。

图片描述

提供这类服务的有Amazon EC2Amazon Virtual Machines。针对深度学习,除了租用高速GPU,甚至可以租用案例。

好处:

缺点:

注意:上面的讨论只和训练机器学习模型相关,而不是和推断相关。一旦训练好模型,需要设法让它在应用程序上可用,使得程序可以用该模型做出推断。如果决定在本地设备上进行推断,那么将模型嵌入到移动应用程序中即可。但是如果在云中做推断,您仍然需要建立自己的网络服务来完成推理,随之而来的是一系列需要考虑的因素(详情在下面讨论)。

托管机器学习

另一个云端选择是托管机器学习。如亚马逊,微软和谷歌等公司,早已把提供机器学习列为云服务的首要任务。

工作原理:不需要您具备训练模型的专业知识,只需上传数据,选择想使用的模型型号,并让机器学习服务接管一切。

图片描述

这是个介于使用完全托管服务和自己亲力亲为之间的选项,绝对比自己的训练要容易得多,特别是如果对训练模型不是很有信心。但是大多数这类服务不允许您下载训练好的模型,所以对于应用程序的推断部分,您别无选择,只能使用他们的平台进行推断。不能把训练好的模型移植到移动设备上,也就是不能在设备上进行预测,每进行一次推断,都要连接他们的API接口和发送用户的数据。

虽然这事未必对应用程序造成困扰,但这是需要在开始之前就注意到的事情。举个例子来说,一旦使用了 Microsoft Azure Machine Learning的服务,基本上永远被Azure套牢。如果想切换到另一个服务,带不走训练好的模型——您必须在新平台上从头开始训练,并再次承担训练费用。这种类型的服务收取训练期间消耗的运算时间产生的租金,以及训练数据所占的存储空间的费用。由于该服务提供了应用程序用于请求预测的API接口,您还需要为每个预测请求支付费用。

使用托管服务的好处:

缺点:

注意:新的谷歌Cloud Machine Learning平台(当前为测试版)似乎是一个让人值得高兴的例外。和其他竞争对手一样,这个云服务允许训练自己的模型(如果愿意,您还能部署它们)。可以移植训练好的模型,离线预测得以实现,如果是TensorFlow粉丝,这项服务是一个非常好的选择。再次注意,TensorFlow的运行也是基于亚马逊和Azure计算实例,从价格上也看得出它总是物超所值。

2. 在自己的电脑上训练

原理:除了使用一台或多台自己的电脑外,在自己电脑上训练和在云上训练,真的没有差异。在计算机上加载自己喜欢的集成库,赋予他们访问数据的权限,启动它们,训练开始。如果对深入学习的态度非常严肃,或者如果碰巧身边有一些闲置的计算机,那么从长远来看,这个选择可能比租用别人的电脑更实惠。

提示:即使想在云端训练,明智的做法是在自己计算机上,尝试用简化的数据集运行模型,确认模型运行结果的正确性。当模型给出了有效的预测且对运行结果感到满意,再用完整的数据集在计算能力更强的计算机进一步训练。

云训练的一个问题是,需要将数据上传到云服务。因为数字存储是云公司的业务之一,一般他们都会妥善保管好您的数据。但是数据也可能敏感到不希望它离开您的住所,这种情况下,训练同样需要在自己电脑上进行。

好处:

缺点:

概述:训练选项

使用“托管”机器学习服务,您提供数据,服务商接管训练过程,其中一个很大的缺点是训练好的模型 并不归自己所有。如果使用此类服务,则还必须使用他们的API接口执行预测。所以如果想在模型上训练自己的数据,并且能够离线使用训练好的模型,那么只有这些选项:

因为绝大多数的云服务提供的功能非常相似,所以在选择服务商之前,一定要货比三家,让自己尽可能 地少花冤枉钱。

注意:另一件需要考虑的事情是重新训练模型的频率。是偶尔地再运行一次相同的程序?还是经常地重新训练模型?不是所有的托管机器学习服务商都支持在线学习,如果在云上做在线学习,需要长期租用这些电脑。如果碰到这种情况,在自己电脑上训练会经济得多。

推断:做出预测

很明显,无论是在自己的电脑或是租用的电脑,训练都是脱机进行的。但是,能选择在设备上推断,这样的推断并不需要网络连接。

让我们看一下这些选项:

权衡之一是速度:是在移动设备上进行推断得出结果更快?还是发送一个网络请求让性能更优越的服务器做出推断后返回结果更快?

然而某些推断任务不可能在移动设备上完成——可能设备没有足够的处理能力或RAM,或者可能受到其他条件约束。哪个选项更实用完全取决于案例需求。

1. 在服务器上的推断

工作原理:创建一个服务器——要么是在用自己的设备搭建的服务器要么是在云中租用的服务器——将训练好的模型上传到该服务器上。应用程序通过互联网和服务器会话,服务器放出一个网络API接口给应用程序使用。

图片描述

假设一个应用程序能将照片转成基于深度学习的数字艺术,用户可以在他们的照片上加不同的效果。应用程序将照片发送到服务器,服务器通过深度学习网络给照片加上所需的效果,几秒钟后,程序就收到修改好的图像。使用服务器进行推断使移动应用本身更简洁,所有复杂的事都在控制之下在服务器上进行处理。您可以随时改进模型或添加新的功能,只要更新服务器,就能部署改进的模型——不必更新移动设备上的应用程序。

好处:

缺点:

使用托管机器学习服务,只需点击一个按钮即可将训练好的模型部署到网络API接口。创建和托管自己的 API后,程序的灵活性将大大提高,但缺点也很明显——所有事情都得自己动手。如果应用程序做得非常成功,有数百万的(付费)用户,那么它值得让您搭建一个自己维护的推断后端。对于很多成功的应用程序,这样做可能更便宜,而且使用云内全方位服务的机器学习方案,麻烦也更少。

注意:与其从头开始搭建自己的API接口,不如使用类似TensorFlow Serving的现成工具。

2. 在设备上的推断

工作原理:把模型的得出参数加载到应用程序中,应用程序在本地设备的CPU或GPU上运行所有的推理计算——全程不需要与服务器通信。这个是框架服务统治的领域,像IOS上的BNNS and Metal CNN,但是一些机器学习集成库,例如TensorFlow和Caffe也同样在设备上运行。

图片描述

直接在设备上做推理的主要原因是即时性,不需要通过互联网发送请求并等待答复——相反地,推断(几乎在)瞬间完成。还是把照片变成“深度艺术”的那个例子:如果把这例子移植到直播的相机里并且要求反馈实时结果呢?用发送网络请求的方法来实现这功能是不可能的——它必须直接在设备上完成。

注意:说真的,这个例子不具备现实意义,很多深度学习模型都做不到实时回馈。但要知道这点:速度方面,本地处理无可匹敌。

在服务器上进行推断的一个最大的好处是,可以将改进的模型立即投入使用:你需要做的仅仅是将新模型上传到服务器,要在移动设备上做到这一点可没那么简单,因为需要设法把改进的模型推送到所有安装了应用程序的设备上。如果经常重复训练模型,为了方便把更新的模型参数发送到用户的设备上,您可能需要搭建服务器等基本设备。

在设备上做推理的好处:

注意:在设备上做推断,用户为此付出的代价是消耗更多的电量。实际上,和以免导致糟糕的用户体验一样,这也是不在设备上做推断的原因。

缺点:

还有另一个潜在问题同样需要注意:其他开发人员可以在您的应用程序包挖掘信息。复制参数是很容易的 事情。如果使用了TensorFlow图形定义或caffemodel文件,居心不测的人剽窃整个模型也很容易做到。如果这个模型让您拥有了竞争优势,为了保持优势,或许您该模糊处理这些数据。

结论

正如您所知道,选择有很多!毫无疑问地,未来几个月或几年内,市面上将会冒出越来越多的机器学习服务。什么服务最适合您的app、业务还有用户——真的取决于您正在做的机器学习的类型。所以服务商在不知道确切的细节情况下提供合适的建议,是不可能的。但至少我希望这篇博文给了您一个确切可行的想法!

即使是一小步
也想与你分享