微软技术专家深度解析:机器学习服务全揭秘

发表时间: 2017-07-23 17:44

大家好,我是刘士君,目前在中国微软集团担任开发者体验与平台推广事业部兼云平台的技术顾问,今天我将更多的和大家分享微软云已有的技术,如基于微软云怎么开发人工智能的应用、开发机器学习的模型等等。

人工智能是现在非常重要同时也是非常火爆的话题,随着互联网的接入,底层性能的提升,数据采集和存储已经不成问题,基于这些海量数据我们可以做一些机器学习或者大数据分析。

如今不管是路演还是各种大会,人工智能都是绕不过的主题,所以在这次IT168主办的创客沙龙活动中,我也想和大家分享知名公司在人工智能或机器学习方向已有的实践经验和成熟产品,希望能对大家有所帮助。

上图是微软提供的整套和大数据、数据分析相关的产品,英文名称是MS Cortana Intelligence Suite,翻译成中文就是Cortana智能套件,这里面包含了微软云平台上提供的数据信息管理、存储,一般分析,高级分析,机器学习,人工智能以及最终层可视化相关的所有服务。

最底层的信息管理Data Factory,其实就是一个ETL的工具,Event Hub我们称之为事件中心,是微软提供的针对物联网的信息和数据采集服务;再上一层是大数据存储,如数据仓库、数据湖等等;再上一层是Hadoop、Spark类似的数据分析工具;再上一层是机器学习,是微软提供的针对数据科学家或者算法工程师快速搭建机器学习算法的PaaS平台,Azure Machine Learning;再上一层是微软API层和人工智能相关的服务,如认知服务就是一套人工智能的API,其中包括人脸识别,语音识别,表情识别,语音分析相关的API服务。Bot Framework是现在比较火的客服机器人或者是智能客服,可以用来帮你在应用网站或者微信公众号里面快速搭智能的客服机器人,并自动智能的做语音和语义的回复。而Cortana是微软集成在Win10中的成熟的语音助理,可以帮你做一些日常管理和建议;最顶层是PowerBI服务,是数据完成存储分析机器学习之后的可视化工具。

今天我们的重点是微软的机器学习和人工智能这两块,也就是数据分析层。在这一层微软提供四层服务,底层的是面对开发者的认知服务,开箱既用,它是一套API可以直接在应用网站中调用,去做人脸识别或者是语音识别。再上一层是进一步针对例如结构化数据进行机器学习的算法建模,在机器学习平台上做算法的快速搭建。如果觉得这个平台封装过于死板或者需要完全自定义,那么可以在微软提供的R Server和HDInsight实现完全基于自己需求的功能。最上面的是微软提供的跟深度学习相关的框架,分布式深度学习算法包CNTK,你可以基于这套算法的Python SDK或C++ SDK完成自己深度学习算法的搭建和基于GPU的分布式训练。

认知服务是一套智能服务的API,相当于给你的应用或网站增加了眼耳口鼻大脑的思考和交互能力。

认知服务如果从具体服务来讲会分为几个层面:

第一个视觉,它为应用提供了计算机视觉API、情感识别API、人脸识别API、视频检测API;

第二个是语音,它为应用提供了自定义智能语音识别服务、声纹识别API、语音识别API;

第三个是语言,微软是一个全球化的公司,它大部分的服务都会先出一个英文版本,第二出一个中文版本。语言理解服务就是去理解你话里的意思,例如主谓宾,其次它还可以识别语言的类别,如这句话是中文还是日语。然后,它还会根据这句话的字面意思去识别这句话所带的感情色彩,是消极还是积极。针对大段文字,还可以提取关键字,总结中心思想。

第三个是知识,主要是针对学术方面的搜索,你可以输入自己需要搜索的作者或者是学术主题,他会反馈给你相应的搜索的内容,如发表文章、获奖情况、成就等等,这些都是基于微软的Bing搜索引擎做到的。

最后是Bing搜索引擎所有API的开放,包括文字回复,图片,视频,新闻等等。

表情识别API可以传入画面中有单人或多人的图片,然后通过他面部的位置以及表情,识别出此人是高兴还是难过,各种情绪的比重有多少。如果大家用过有道翻译官这个应用,就知道那里有一个拍照翻译还有一个表情翻译,其中表情翻译就是用微软的表情识别API做的,如果你自拍之后可以基于识别出的表情为你推荐一些有趣的英语学习资料,这是一种很有趣的英语学习方式。

人脸识别API,包括对五官、性别、年龄、胡子、头发以及眼睛的识别,甚至还可以做人脸的比对,如这两个人是否为同一人,多人分组,哪几个人为同一类。

微软人脸识别的API是全球版的,不仅针对中国人,所有人种都可以做人脸识别。我们可以看到上图中是一个外国人,他的肤色较深,除此之外,他还有一个特征那就是这是张侧颜照,微软人脸识别API在侧位60度或者45度时,仍然可以识别,然后是识别这个人的脸部和五官位置,大致会识别29个五官特征,然后从多张照片中辨别出来。

关于人脸识别比较典型的案例是Uber,美国Uber为了确保驾驶员安全,每次在登录应用时,都要求他们先进行刷脸识别,确认使用手机的是司机本人才可以登录到应用中,进行接单接乘客的服务,提高轿车服务司机的安全性。

语音服务包括语音的识别输出、语音目的检测,针对文字本身还有一些情感以及主谓宾的识别。

日常语音通常分为短模式和长模式,短模式通常小于15秒,而长模式通常是小于2分钟。微软语音识别除了支持这两种语音模式,还会返回多个最佳结果(N-Best),其中这个N是可以通过API本身参数设定,且并不是一段语音结束才返回结果,而是每次断句都会返回N个结果,也可以基于中间结果做识别和分析。

语音输出除了支持多种语言还支持多种发声,如男声女声以及一些特定的声调,最长支持15秒发声。

微软翻译服务支持50多种语言,你可以自己设置的翻译的语言类型,它会为你返回一个翻译结果。大家常用的微信翻译有一部分是有道提供的服务,还有一部分就是微软所提供的服务。

这一整套认知服务API可以帮助你快速在应用或网站中集成人工智能服务,增加应用的交互趣味性。

下面我们来讲一下跟机器学习操作相关的微软机器学习服务,总共有三个:Azure Machine Learning Studio、Azure R Server、Azure R Service on Spark。这里的R不是平常开源的R,而是微软提供的商业R,所以会有许可证费用。

机器学习可以帮助我们在海量数据中获得人类分析无法获得的隐性规律,然后通过发现的规律去指导人类理解数据,所以机器学习并不是一个传统分析或者模式识别。

举个例子,机器学习经常会被用来做信用卡的七大检测,当数据量较少时,我们可以通过分析或咨询人员来判断哪一类特征的人群有欺诈或可能有欺诈行为,但是如果数据量大时,分析或咨询人员可能就无能为力了。

上图右下角的表记录了每个人不同的特征,通过机器学习,我们很容易就可以得出具备哪些特征的人群可能会有欺诈行为,如年龄在23岁以下的美国公民,在南美或俄罗斯进行过两千美元以上的交易,欺诈的可能性很大。

传统机器学习的工具有很多,但是它们也存在很多缺陷,如数据孤立不能共享,对数据的支持也没有那么充分,在部署到真正的生产环境中也会遇到一些难题。

相比于传统机器学习工具,微软提供的Machine Learning工具更加简单易用:第一它不需要安装任何环境,完全由微软公有云维护,底层的R、Python或者机器学习的算法包也会实时更新。这样你就可以通过在线网站搭建算法,而且微软也会提供一些打包好的机器学习基础算法,同时也支持R和Python扩展。最后,当算法训练完成之后,一键式将代码完全转换成部署代码,发布API,还可以调节API的调用量。

上图是Azure Machine Learn Service全过程,左边的数据可以应用微软或者外部的数据库服务,然后通过内置算法或者R扩展完成整个算法的训练和部署,最后,发布的API可以直接在应用网站或者任何服务中调用。

这里提供了几个基础类的机器学习算法,包括回归、分类、决策树、决策森林等等,如果你是基于传统机器学习算法做数据分析、训练,那么绝对可以满足。另外,每个模块都会有几个参数是可以设置的,如迭代次数,所以你不一定要死板的使用一个算法,可以通过设置参数定制自己的算法。

其它的一些功能模块包括机器学习评估、数据处理、特征选择、其它模块。

微软和某知名品牌基于发动机预测性维护性的合作,这项合作的业务要求包括设备故障预测,故障原因诊断,故障识别,维护操作推荐。

虽然提出了诸多需求,但是最终目标只有一个,那就是预测设备多久会出现故障,也就是剩余使用时间。当时提供的数据有很多,包括故障历史,即什么时候出现什么故障;维修历史,即该机器进行过怎么样维修;机器状态,即各种传感器的数据,以及所处环境的作用等等。

我们将这些数据收集起来,绘制了上面的表格,包括设备ID、使用时长、设备相关背景数据以及21个传感器的实时数据,作为其训练数据。因为这个预测是一个连续的时间,所以是回归算法。

这是在这套POC里面使用Machine Learning Studio去搭建的算法,包括从一开始的数据导入到前期使用,不管是R或Python自定义还是已经打包好的模块都可以进行属性更改、滑动以及平均值的计算。在后面采用了两个算法,分别是决策树回归和加速决策树回归。最后将这个模块直接部署到微软公有云服务器中,直接发布API,这样你只需要学习如何使用这个API即可。

上图是预测性维护互联网整体架构图,左边有一个C#做的模拟设备端,通过微软的物联网IOT相关服务做数据的实时收集,然后进到流式分析服务,通过SQL语句对数据进行实时的筛选和分流。微软Event Hub中介服务,将数据输入到Web Job ,在这里面它会把收集到的数据传到调用它的API,完成数据的分析返回,把数据结果存到storage里面。这里存的是设备注册的信息,它一共做了两步,一个是把设备注册的信息存下来,另外一个是调用API做数据的机器学习,再存到Blog里面去,网站就会读取到机器学习的结果做出实时显示。

现在很多企业已经针对他们通过互联网或物联网收集到的海量数据做了简单的机器学习和数据分析,并且快速部署到生产环境中。但是他们缺乏足够多的算法工程师或者是数据科学家,通过MachineLearning Studio,在有基础的数学知识或者是简单的机器学习的数据算法之后就可以快速的把数据导进来,完成算法的搭建、部署,帮助企业解决数据分析的需求。

如果大家觉得Machine Learning还是太顶层化、定制能力太弱。那么可以使用Azure R Server。

它是真正用于企业级部属的版本,能够帮助用户搭建分布式的计算架构。通过右下角的图片,我们可以看到它会配置好Web Node,在虚机里面配置好网络节点和计算节点,所有的算法会分布到各个计算结点进行运算,外部结点是用来做API的模型最终的发布,然后暴露出一个API给应用调用,所有的数据配置到SQLite DB里做存储。如果你觉得一个计算节点不够用,你还可以配置多个节点或者是跨多个虚机的节点。这样整套基于R机器学习算法就完成了分布式搭建。

微软收购了一家专业做商业版Hadoop的公司,其包括有Hadoop On Spark,基于Hadoop的R Server服务。微软提供的PaaS服务可以一键式安装所有底层HDMS部署,以及工作节点的部署,支持实时扩展、自动伸缩,就连上层机器学习的相关模块也会自动安装好。

最顶层微软提供深度学习的分布式算法包CNTK,去年CNTK算法包开源了。它既可以通过基本的函数模板构建深度学习网络,如CNN,RNN等一些现成的模板,也可以通过底层的求导去构建自己的深度学习算法。

CNTK的强大之处在于它支持多机多卡,即你可以在多个CPU上运行,甚至是在多个服务器的GPU上做分布式的运行,且性能也非常出色。除此之外,它支持跨平台在Windows、 Linux、 Docker和 Cudnn5都可以部署。

深度学习是今年特别火的话题,之前参加了很多人工智能公司的峰会,发现他们都在做无人驾驶、自动驾驶、零售推荐以及医学领域的图像识别,而这些都会使用到深度学习框架。

ImageNet图像识别大赛是业界很重要的比赛,上图是ImageNet大赛的经典框架。自从2012年的ImageNet 竞赛上,Alexnet取得突破发展,成为第一个应用深度神经网络的应用,其他关于DNN的更复杂的应用也陆续出现,微软的ResNet框架也在2015年夺冠,去年中国公司在大赛上也取得了很好的名词,所以中国在深度学习领域甚至是人工智能领域都处在比较领先的地位。

深度神经网络简单来说就是很多层的神经网络,最底层是输入层,中间层用来做特征转换,最上层是输出层,每个神经元通过联线的方式,对上层的输入做加权整合,然后它的输出成为下一个神经元的输入,通过这种连接网络完成整个神经网络的搭建。

为什么说深度学习在图像领域和语音识别领域前景比较好呢?那是因为它可以通过深层网络对特征进行表达。以图片识别为例,每一层运算之后它都会提取图像的特征,如最底层提取图像的线条,再上一层提取角落的结构,再上一层提取部分的特征,以猫为例,这一层提取到的可能是猫的眼睛、鼻子,再上一层是把猫的五官全部提取出来,再上一层是猫的整个身体被提取出来。通过深度学习层层提取出特征,最后基于特征去计算你的图片是猫是狗还是其他。

现在深度学习的框架有很多,上图列举了一些国际上比较知名的框架,前段时间TensorFlow刚刚发布了正式版本,而CNTK比较有特色的是它支持多GPU训练,也支持跨机。

这是微软做的基于不同深度学习算法多GPU性能的比较。从中可以看出CNTK在语音识别和语音理解的相关算法中表现出色,在图像相关算法中,CNTK虽然不是最好的,但其性能也相当不错。

右图中使用的是全连接网络,GPU个数分别为1个、2个、4个和8个,从结果中我们看到GPU数量越多,CNTK的性能越突出。

如何通过模块化的方式构建深度学习网络呢?深度学习的各个部分都可以通过模块化的标准来实现,如你可以设置是多少维度,定义每一层的参数、输入、特征以及函数处理,甚至评价标准也可以通过模块化的标准来定义。

网络和输入设置好之后就可以进入到训练过程,它提供了几乎所有常见的训练方式,如SGD是大家都知道的做多机多卡深度网络训练的命令,所以我们可以获得一个比较好的训练性能。

以上就是我今天想要和大家分享的微软在机器学习和人工智能领域相关的服务,希望能够对大家在根据自己的需求进行机器学习和人工智能开发时有所帮助。