2014 年,AWS 在 re:Invent 上发布 Lambda 做事的时候,很多开拓者尚未意识到这个做事能给他们带来若何的好处。时隔三年,Lambda 做事已经成为了“Serverless”和“Function as a Service”开拓范式的代表,并且已经承担起为数不少的企业关键业务。可以说,Lambda 做事为运用开拓领域开辟了一片全新的游戏园地。
在 InfoQ 编辑看来,AWS CEO Andy Jassy 在今年的 re:Invent 大会上发布的 Amazon SageMaker 也是一个改写游戏办法的关键标志,而这一次的游戏园地是在人工智能领域(2017 年 AWS re:Invent 的产品发布列表见之前的这篇宣布)。

http://www.infoq.com/cn/news/2017/11/aws-reinvent-2017-andy-announce

在 2017 年的本日,阻碍人工智能技能被广泛运用的最紧张的门槛是什么?
芯片、框架、算法、数据量?这些领域当然还有很大成长空间,但很难说是当前的最大门槛。有人说,最大的门槛是准确率还不足,尤其是 toC 领域的自然措辞处理这样的场景,机器对人的表达办法的理解还远远达不到可以正常互换的水平。对付这个准确率的问题,每个体验过干系做事的读者该当都有自己的判断。但如果说这个问题为真,那么下一个问题是:为什么在这些领域,准确率提高得还不足快?
用机器学习来办理一个问题是建立在一个假设之上:针对任何一个问题,我们是能够根据固天命量的变量,得到一个足够好的模型,从而对其进行有效的阐明与预测的。以是,基于这样的一个假设,那么准确率低的问题,便是一个模型不足好的问题。
模型不足好有很多缘故原由,可能是由于演习数据不足,也可能是由于算法不得当,或者算法的参数没选择到最得当的组合。演习数据不足,就要多采集数据、多存储数据、多洗濯数据。算法不得当,可能是由于参数的调试还没做到位,可能由于参数的调试须要耗费太多韶光和其他本钱以是在一个局部最优解就停下了,也可能是由于利用的框架(引擎)不得当。至于哪个框架更得当,可能须要多试几个框架,乃至于可能当前市情优势行的框架都不得当,须要一个新的框架。
对付以上各种可能的问题来源,Andy Jassy 提出了一个大概是更根本的问题:
大概,我们在建模这个层面的人手太少了?
根据 InfoQ 编辑所理解,目前市情上有一些业务做得很好的大数据公司,他们的技能团队 / 数据团队有 80% 的精力都用来做什么事情呢?
数据准备。
剩下的 20% 精力,又有很大部分是用在支配集群、安装框架、调优这些“杂活儿”上面了。
从当前的客不雅观情形来看,这是把数据剖析业务做好的一个基本功。然而从空想天下的角度来看,这样的现状是相称惊人的摧残浪费蹂躏。AI 领域大牛李飞飞,她有多少韶光是用在改进框架和算法上,有多少韶光是投入到标记那 320 万张图片上?
这就好比在云打算涌现之前,一个开拓者想要开拓一个运用,可能 80% 的韶光是用在大班事器、安装操作系统、调试数据库、支配扩容备份等等跟开拓运用无关的事情上了。现在的数据领域,跟那个年代的运用开拓领域实在是非常相似的——一半以上的韶光都不是用来产出的。
有些开拓者可能还没动手就被这些麻烦事儿吓跑了。坚持在这个领域深耕的数据科学家们,他们的精力也用不到刀刃上。这便是 AWS 发布 SageMaker 的态度:让有能力去改进框架和算法的开拓者,尽可能少花费精力在那些跟主业无关的事情上。
大略的看一下 SageMaker 的基本用法——如何演习一个模型。以下内容来自 AWS 布道师 Randall Hunt 发布的博客。
首先,在 AWS 的后台新建一个 Notebook 用来放置你的代码和一些配置信息。新建好的 Notebook 下面会自带一个叫做 sample-notebooks 的目录,里面包含了一些预置的算法:
无论是哪种算法,代码大致上是下面这个构造:
def train( channel_input_dirs, hyperparameters, output_data_dir, model_dir, num_gpus, hosts, current_host): # 给演习代码占座 pass def save(model): # 找个地方保存模型文件 pass
首先,channel input dirs:演习数据从哪儿来?可以是本地的一个目录,也可以是云真个。自从 S3 支持工具级别的查询之后,S3 在这几年已经变成一个挺盛行的 Data Lake 选项。现在有了新发布的 S3 Select,这个 Data Lake 的查询变得更高效了。而且现在还有了 Glacier Select,于是那些冷数据也可以直接被拿来当作演习数据(题外话:Andy Jassy 说这两个 Select 功能是研发了一年的韶光做出来的。你怎么看?我至心以为还挺快的。)
然后,hyperparameters:这一个步骤便是 SageMaker 的第一个邪术所在了。看看教程中是怎么定义这个 hyperparameter 的:
hyperparameters={ 'batch_size': 128, 'epochs': 50, 'learning_rate': 0.1, 'momentum': 0.9 }
传统来说,这些 hyperparameter 的初始设置可能对终极的模型质量有很大的影响。比如这个 learning rate,如果设置太低,则学习得太慢;如果设置太高,可能压根跑不出来结果。于是乎,数据科学家们不得不一次又一次的试错,一贯试错到他们以为足够好,或者他们以为足够烦了为止。
SageMaker 的第一个邪术就在于这一个步骤的自动化:把试错这件事交给机器来做,直到机器认为足够好了为止——机器可是从来都不会厌烦的。
别的的演习参数定义比较直不雅观,就不多先容了。要跑演习的时候,假设你要用 MXNet 这个框架合营一个你写好的 cifar10 算法,那么你就这么写(点击这里查看 AWS 供应的 sample notebook - cifar10.py 文件的详细内容,以及 AWS Github 账号上的 SageMaker Python SDK。这个文件利用了 Gluon API。):
import sagemaker from sagemaker.mxnet import MXNet m = MXNet(\"大众cifar10.py\"大众, role=role, train_instance_count=4, train_instance_type=\"大众ml.p2.xlarge\公众, hyperparameters={'batch_size': 128, 'epochs': 50, 'learning_rate': 0.1, 'momentum': 0.9})
现在,可以把演习数据丢给它了:
m.fit(\"大众s3://randall-likes-sagemaker/data/gluon-cifar10\"大众)
于是你就有了四个 P2 实例开始帮你跑演习了!
当演习跑完的时候,你就有了一个模型 m,可以拿来做预测了。至于这四个 P2 实例,它们会被自动开释,不用去管它们。这是 SageMaker 的第二个邪术:忘却你的做事器,也不用折腾各种框架的安装支配这些底层事情。SageMaker 上的这些框架都是已经优化好的,你自己支配的话,效果多数不会比它更好。
预测的实行也仅仅须要下面这一个指令,不须要在主机层面搞东搞西:
predictor = m.deploy(initial_instance_count=1, instance_type='ml.c4.xlarge')
比如,可以把想要做预测的在线实时数据——比如一张 Twitter 上的新照片——通过一个 Flask App 丢过去:
@app.route('/invocations', methods=[\"大众POST\"大众]) def invoke: data = request.get_json(force=True) return jsonify(predict.download_and_predict(data['url']))
然后你就可以得到你的预测结果——比如说,这张照片的拍摄地点。
那么你要问了,SageMaker 对付数据准备这个最大的“杂活儿”有啥帮助呢?
SageMaker 有一个 preprocess 数据的功能。至于这个功能能做到什么程度,还得试试才知道,详细情形可以参考这个文档。我想,恐怕暂时还不能跟那些专门供应数据准备做事的质量比较,由于这个文档里面同时也推举了 Marketplace 上的干系做事。
不过,能够节省下创建实例、安装框架、演习试错这些方面的事情,已经是一个很大的进步。现在,开拓者只要有一个 AWS 账号就可以体验 SageMaker,而且现在是有两个月的免费额度的,正是尝鲜的最佳机遇。AWS 的开拓者文档网站已经更新了 SageMaker 的详细解释,可以在此查看:
https://aws.amazon.com/blogs/aws/sagemaker/
期待看到 SageMaker 之后的发展情形。






