2019 年中国人工智能基础数据服务白皮书

人工智能基础数据服务:指为 AI 算法训练及优化提供的数据采集、清洗、信息抽取、标注等服务,以采集和标注为主。《2019 年中国人工智能基础数据服务白皮书》由艾瑞和百度数据众包联合发布,报告主要分析中国人工智能基础数据服务的现状以及未来发展方向,重点讨论人工智能基础数据服务的价值、发展背景、产业链、市场空间和应用场景。

在经历了一段时期的野蛮生长之后,人工智能基础数据服务行业进入成长期,行业格局逐渐清晰。人工智能基础数据服务方的上游是数据生产和外包提供者,下游是 AI 算法研发单位,人工智能基础数据服务方通过数据处理能力和项目管理能力为其提供整体的数据资源服务,不过 AI 算法研发单位和 AI 中台也可提供一些数据处理工具,产业上下游普遍存在交叉。

2018 年中国人工智能基础数据服务市场规模为 25.86 亿元,其中数据资源定制服务占比 86%,预计 2025年市场规模将突破 113 亿元。市场供给方主要由人工智能基础数据服务供应商和算法研发单位自建或直接获取外包标注团队的形式组成,其中供应商是行业主要支撑力量。

数据安全、采标能力、数据质量、管理能力、服务能力等仍是需求方的痛点,需要人工智能基础服务商有明确具体的安全管理流程、能够深入理解算法标注需求、可提供精力集中且高质量的服务、能够积极配合、快速响应需求方的要求。

随着算法需求越来越旺盛,依赖人工标注不能满足市场需求,因此增强数据处理平台持续学习能力,由机器持续学习人工标注,提升预标注和自动标注能力对人工的替代率将成趋势。远期,越来越多的长尾、小概率事件所产生的数据需求增强,机器模拟或机器生成数据会是解决这一问题的良好途径,及早研发相应技术也将成为 AI 基础数据服务商未来的护城河。

《人工智能产品经理的新起点》PPT

原作者:黄钊;PPT 目录大纲:

  1. AI PM 在做什么、如何做?
    AI 的时代背景及真正瓶颈
    如何选行业方向 in AI
    如何找场景痛点 in AI 应用层 (2B/2C)
    如何做体验设计 in 对话聊天产品
  2. 如何从互联网 PM 转型成 AI PM
    AI PM 能力模型
    AI 技术概念厘清
    如何转型
  3. 人工智能的本质及脑洞 AI 的过去和现在
    AI 的未来和突破口
    AI 的本质、效用和终局
  • 下载地址 1:https://pan.baidu.com/s/1mjM5PQo 密码: gxmw
  • 下载地址 2:https://pan.baidu.com/s/1brbHw7d 密码: 9t5a

本地下载:人工智能产品经理的新起点

MediaPipe:Google 开源多媒体机器学习框架

MediaPipe 是一款由 Google Research 开发并开源的多媒体机器学习模型应用框架。在谷歌,一系列重要产品,如 YouTubeGoogle LensARCoreGoogle Home 以及 Nest,都已深度整合了 MediaPipe。

作为一款跨平台框架,MediaPipe 不仅可以被部署在服务器端,更可以在多个移动端 (安卓和苹果 iOS)和嵌入式平台(Google Coral 和树莓派)中作为设备端机器学习推理 (On-device Machine Learning Inference)框架。

为什么需要 MediaPipe?

一款多媒体机器学习应用的成败除了依赖于模型本身的好坏,还取决于设备资源的有效调配、多个输入流之间的高效同步、跨平台部署上的便捷程度、以及应用搭建的快速与否。

基于这些需求,谷歌开发并开源了 MediaPipe 项目。除了上述的特性,MediaPipe 还支持 TensorFlow 和 TF Lite 的推理引擎(Inference Engine),任何 TensorFlow 和 TF Lite 的模型都可以在 MediaPipe 上使用。同时,在移动端和嵌入式平台,MediaPipe 也支持设备本身的 GPU 加速。

MediaPipe 演示案例

在今年六月举行的 CVPR 会议上,Google Research 开源了 MediaPipe 的预览版。为方便开发者学习和使用,我们提供了多个桌面系统和移动端的示例。作为一款应用于多媒体的框架,现已开源的安卓和苹果 iOS 示例包括:

MediaPipe 主要概念

MediaPipe 的核心框架由 C++ 实现,并提供 Java 以及 Objective C 等语言的支持。MediaPipe 的主要概念包括数据包(Packet)、数据流(Stream)、计算单元(Calculator)、图(Graph)以及子图(Subgraph)。数据包是最基础的数据单位,一个数据包代表了在某一特定时间节点的数据,例如一帧图像或一小段音频信号;数据流是由按时间顺序升序排列的多个数据包组成,一个数据流的某一特定时间戳(Timestamp)只允许至多一个数据包的存在;而数据流则是在多个计算单元构成的图中流动。MediaPipe 的图是有向的——数据包从数据源(Source Calculator或者 Graph Input Stream)流入图直至在汇聚结点(Sink Calculator 或者 Graph Output Stream) 离开。

 

MediaPipe 主要概念
MediaPipe 主要概念

MediaPipe 在开源了多个由谷歌内部团队实现的计算单元(Calculator)的同时,也向用户提供定制新计算单元的接口。创建一个新的 Calculator,需要用户实现 Open(),Process(),Close() 去分别定义 Calculator 的初始化,针对数据流的处理方法,以及 Calculator 在完成所有运算后的关闭步骤。为了方便用户在多个图中复用已有的通用组件,例如图像数据的预处理、模型的推理以及图像的渲染等, MediaPipe 引入了子图(Subgraph)的概念。因此,一个 MediaPipe 图中的节点既可以是计算单元,亦可以是子图。子图在不同图内的复用,方便了大规模模块化的应用搭建。

想了解更多 MediaPipe 的概念和使用方法,请移步我们的 GitHub 文档。同时,我们也提供了MediaPipe 移动端的使用教程及示例代码:

机器感知实例 —— 手部关键点追踪

一个使用 MediaPipe 的实例是在图片或视频中检测手部关键点。我们最近在 谷歌 AI 博客上发表了一篇相关文章: “使用 MediaPipe 实现设备端实时手部追踪”介绍了我们如何使用 MediaPipe 来搭建这个应用。

手部关键点追踪解决方案有两部分:手掌检测(Hand Detection)及手部关键点回归 (Hand Landmark Regression)。

手掌模型检测教程
手掌模型检测教程

我们训练了基于SSD 架构的 BlazePalm 模型来进行手掌检测,并对移动端进行了优化。手部检测相较人脸检测来说,是一个更加困难的问题,例如:手的大小角度会有较大范围的变动,手没有显著的纹理结构,以及存在更多遮挡的情景。因此,我们的解决方案采取了不同的思路。我们训练的模型只对手掌区域进行检测,其好处体现在以下几点:首先,手掌相对于整个手而言是一个较为受限的目标,并且由于手掌的区域较小,我们的非极大抑制(Non-Maximum Suppression)算法也会有更好的效果,例如,在两只手相握的情况下,即使手的大部分区域重叠在一起,两只手掌的区域依然可以被区分开;其次,手掌的边框可以用正方形来描述,这样可以减少 3-5 倍数量的锚定位(Anchor),从而最大化模型的容量;最后,经过实验,我们发现使用focal loss可以获得最好的检测结果。该模型在我们的测试数据集上可以达到 95.7% 的平均准确率。

MediaPipe BlazePlam 手掌检测应用

我们使用 MediaPipe 来做移动端模型推理的框架,如下图所示,input_video 为输入图像,output_video 为输出图像。为了保证整个应用的实时运算,我们使用 FlowLimiterCalculator 来筛选进行运算的输入帧数,只有当前一帧的运算完成后,才会将下一帧图像送入模型。当模型推理完成后,我们使用 MediaPipe 提供的一系列计算单元来进行输出的渲染和展示——结合使用 DetectionsToRenderDataCalculator, RectToRenderDataCalculator 及AnnotationOverlayCalculator 将检测结果渲染在输出图像上。

使用 MediaPipe 来做移动端模型推理的框架
使用 MediaPipe 来做移动端模型推理的框架

手掌检测应用的核心部分为上图中的蓝紫色模块(HandDetection子图)。如下图所示,HandDetection 子图包含了一系列图像处理的计算单元和机器学习模型推理的模块。ImageTransformationCalculator 将输入的图像调整到模型可以接受的尺寸,用以送入 TF Lite 模型的推理模块;使用 TfLiteTensorsToDetectionsCalculator,将模型输出的 Tensor 转换成检测结果;运用 NonMaxSuppressionCalculator 等计算单元做后处理;最终从HandDetection子图输出检测结果给主图。

从HandDetection子图输出检测结果
从HandDetection子图输出检测结果

GitHub地址项目 GitHub 地址

TensorFlow 2.0 实战教程

这是一份来自 IJCAI 2019上的一个 TensorFlow 2.0 实操教程,这个教程包含 117 页 PPT,由 Google 资深开发人员 Josh Gordon 讲授,提供了最新 TensorFlow 2.0 的实操介绍,重点介绍了最佳实践。读者将学习编写几种类型的神经网络(Dense, Convolutional, 和 Recurrent),以及生成对抗网络(Generative Adversarial Network)。

Hands on TensorFlow 2.0
Hands on TensorFlow 2.0

TensorFlow 是一个基于数据流编程(Dataflow Programming)的符号数学系统,被广泛应用于各类机器学习(Machine Learning)算法的编程实现,其前身是谷歌的神经网络算法库 DistBelief。

Tensorflow 拥有多层级结构,可部署于各类服务器、PC 终端和网页并支持 GPU 和 TPU 高性能数值计算,被广泛应用于谷歌内部的产品开发和各领域的科学研究。

如果你想学习新发布的 TensorFlow 2.0 版本,那么本教程非常适合您。不过您需要事先熟悉一些基本的机器学习知识。该教程将介绍深度学习中的关键概念。本教程的目标是帮助您高效地开始使用 TensorFlow,这样您就可以继续自学了。

《Hands on TensorFlow 2.0》教程下载

《动手学深度学习》PyTorch 版

我们知道,作为 MXNet 的作者之一,李沐的这本《动手学深度学习》也是使用 MXNet 框架写成的。但是很多入坑机器学习的萌新们,使用的却是 PyTorch。如果有教材对应的 PyTorch 实现代码就更好了!今天就给大家带来这本书的 PyTorch 实现源码。最近,来自印度理工学院的数据科学小组,把《动手学深度学习》从 MXNet 『翻译』成了 PyTorch,经过 3 个月的努力,这个项目已经基本完成,并登上了 GitHub 热榜。

d2l-pytorch
d2l-pytorch

其中,每一小节都是可以运行的 Jupyter 记事本,你可以自由修改代码和超参数来获取及时反馈,从而积累深度学习的实战经验。

GitHub地址项目 GitHub 地址

谷歌发布用于保护数据隐私的开发工具

无论你是城市规划师还是小型企业 CEO 或者是一名软件开发者,利用好数据可以让你更好地为客户提供服务,但是如果没有强有力的隐私保护,你也可能因此失去用户的信任。差分隐私是数据分析的一种手段,旨在提供一种当从统计数据库查询时,最大化数据查询的准确性,同时最大限度减少识别其记录的机会。例如,如果您是一名健康研究人员,您可能想要比较不同医院的患者住院的平均时间,以确定在护理方面是否存在差异。差别隐私是一种高度可靠的分析方法,可以在确保个人隐私的前提下做数据分析。

近日,谷歌开源了其差异隐私平台,该技术已经用于谷歌内部的一些核心应用,谷歌表示开源该技术是为了满足开发人员的需求而设计的。除了可以自由访问,它还希望它易于部署和使用。

以下是该库的一些功能特性:

  • 统计功能:这个版本支持大多数常见的数据科学操作。开发人员可以使用该库计算计数、和、平均值、中位数和百分位数等运算。
  • 严格的测试:正确区分隐私是一项挑战。除了一个广泛的测试组件,它还包括一个可扩展的“随机差异隐私模型检查器库”,以此避免发生错误。
  • 快速入门:开源发行版的真正用途在于回答“我可以使用这个吗?”这也是为什么谷歌加入了一个 PostgreSQL 扩展和一些常用操作指南的原因。此外,谷歌特地在一篇技术论文中描述了该库使用方法的细节
  • 模块化:谷歌设计的这个开源库可以扩展到其他功能,比如附加机制、聚合功能或隐私预算管理。

自从我们在 2014 年发布 RAPPOR 以帮助改进 Chrome 以来,谷歌一直致力于研究和开发实用的差异私有技术,例如出行软件 Project Fi 中可以了解一天中的业务繁忙程度、特定餐厅的菜肴在 Google 地图中的受欢迎程度等。今年,宣布了几项开源隐私技术 —— Tensorflow Privacy,Tensorflow Federated,,Private Join and Compute,涵盖的领域从医学到政府再到商业等。

GitHub地址项目 GitHub 地址

滴滴开源的 AoE:工程实践中的图像处理

近期,滴滴开源了 AOE 项目,很多人还是一脸懵逼,不太清楚 AOE 到底是干什么的,所以今天我们再来听听官方工程师是怎么介绍的吧,不信你还是听不懂:近期我们开发了一个银行卡 OCR 项目。需求是用手机对着银行卡拍摄以后,通过推理,可以识别出卡片上的卡号。

工程开发过程中,我们发现手机拍摄以后的图像,并不能满足模型的输入要求。以 Android 为例,从摄像头获取到的预览图像是带 90 度旋转的 NV21 格式的图片,而我们的模型要求的输入,只需要卡片区域这一块的图像,并且需要转成固定尺寸的 BGR 格式。所以在图像输入到模型之前,我们需要对采集到的图像做图像处理,如下图所示:

OCR 案例
OCR 案例

在开发的过程中,我们对 YUV 图像格式和 libyuv 进行了研究,也积累了一些经验。下文我们结合银行卡 OCR 项目,讲一讲里面涉及到的一些基础知识:

  1. 什么是YUV格式
  2. 如何对YUV图像进行裁剪
  3. 如何对YUV图像进行旋转
  4. 图像处理中的Stride
  5. 如何进行缩放和格式转换
  6. libyuv的使用

想要对采集到的 YUV 格式的图像进行处理,首先我们需要了解什么是 YUV 格式。

什么是 YUV 格式

YUV 是一种颜色编码方法,YUV,分为三个分量:

  • 『Y』 表示明亮度(Luminance 或 Luma),也就是灰度值;
  • 『U』和『V』 表示的则是色度(Chrominance 或 Chroma)。
  • 主流的采样方式有三种,YUV4:4:4,YUV4:2:2,YUV4:2:0。

这部分专业的知识,网络上有详细的解释。我们简单理解一下,RGB 和 YUV 都使用三个值来描述一个像素点,只是这三个值的意义不同。通过固定的公式,我们可以对 RGB 和 YUV 进行相互转换。工程里常见的 I420,NV21,NV12,都是属于 YUV420,每四个 Y 共用一组 UV 分量。YUV420 主要包含两种格式,YUV420SP 和 YUV420P。

  • YUV420SP,先排列Y分量,UV分量交替排列,例如:NV12: YYYYYYYY UVUV 和 NV21: YYYYYYYY VUVU (上文中我们在安卓上采集到的图像就是这种格式)。

    YUV420SP
    YUV420SP
  • YUV420P,先排列U(或者V)分量,再排列V(或者U)分量。例如:I420: YYYYYYYY UU VV 和 YV12: YYYYYYYY VV UU。

    YUV420P
    YUV420P

了解了 YUV 的图像格式以后,我们就可以尝试对图片进行裁剪和旋转了。我们的想法是先在图片上裁剪出银行卡的区域,再进行一次旋转。

对图片进行裁剪和旋转
对图片进行裁剪和旋转

如何对 YUV 图像进行裁剪

YUV420SP 和 YUV420P 裁剪的过程类似,以 YUV420SP 为例,我们要裁剪图中的这块区域:

YUV420SP
YUV420SP

在图上看起来就非常明显了,只要找到裁剪区域对应的 Y 分量和 UV 分量,按行拷贝到目标空间里就可以了。

我们再来看一张图,是否可以用上面的方法来裁剪图中的这块区域呢?

答案是否定的,如果你按照上面说的方法来操作,最后你会发现你保存出来的图,颜色基本是不对的,甚至会有内存错误。原因很简单,仔细观察一下,当 ClipLeft 或者 ClipTop 是奇数的时候,会导致拷贝的时候 UV 分量错乱。如果把错误的图像数据输入到模型里面,肯定是得不到我们期望的结果的。所以我们在做裁剪的时候,需要规避掉奇数的场景,否则你会遇到意想不到的结果。

如何对 YUV 图像进行旋转?

对上文裁剪后的图像做顺时针 90 度旋转,相比裁剪,转换要稍微复杂一些。

基本方法是一样的,拷贝对应的 Y 分量和 UV 分量到目标空间里。

在了解了裁剪和旋转的方法以后,我们发现在学习的过程中不可避免地遇到了 Stride 这个词。那它在图像中的作用是什么呢?

图像处理中的 Stride

Stride 是非常重要的一个概念,Stride 指在内存中每行像素所占的空间,它是一个大于等于图像宽度的内存对齐的长度。如下图所示:

Stride 是非常重要的一个概念
Stride 是非常重要的一个概念

回过头来看我们上面说到的裁剪和旋转,是否有什么问题?以 Android 上的 YV12 为例,Google Doc 里是这样描述的:

YV12 is a 4:2:0 YCrCb planar format comprised of a WxH Y plane followed by (W/2) x (H/2) Cr and Cb planes.

This format assumes
• an even width
• an even height
• a horizontal stride multiple of 16 pixels
• a vertical stride equal to the height

y_size = stride * height
c_stride = ALIGN(stride / 2, 16)
c_size = c_stride * height / 2
size = y_size + c_size * 2
cr_offset = y_size
cb_offize = y_size + c_size

所以在不同的平台和设备上,需要按照文档和 stride 来进行计算。例如计算 Buffer 的大小,很多文章都是简单的 “*3/2” ,仔细考虑一下,这其实是有问题的。如果不考虑 stride ,会有带来什么后果?如果 “运气” 足够好,一切看起来很正常。“运气”不够好,你会发现很多奇怪的问题,例如花屏,绿条纹,内存错误等等。这和我们平常工作中遇到的很多的奇怪问题一样,实际上背后都是有深层次的原因的。

经过裁剪和旋转,我们只需要把图像缩放成模型需要的尺寸,转成模型需要的 BGR 格式就可以了。

如何进行缩放和格式转换

以缩放为例,有临近插值,线性插值,立方插值,兰索斯插值等算法。YUV 和 RGB 之间的转换,转换的公式也有很多种,例如量化和非量化。这些涉及到专业的知识,需要大量的时间去学习和理解。

这么多的转换,我们是否都要自己去实现?

很多优秀的开源项目已经提供了完善的 API 给我们调用,例如 OpenCV,libyuv 等。我们需要做的是理解基本的原理,站在别人的肩膀上,做到心里有数,这样即使遇到问题,也能很快地定位解决。

经过调查和比较,我们选择了 libyuv 来做图像处理的库。libyuv 是 Google 开源的实现各种 YUV 与 RGB 之间相互转换、旋转、缩放的库。它是跨平台的,可在 Windows、Linux、Mac、Android 等操作系统,x86、x64、arm 架构上进行编译运行,支持 SSE、AVX、NEON等SIMD 指令加速。

libyuv 的使用

引入 libyuv 以后,我们只需要调用 libyuv 提供的相关 API 就可以了。在银行卡 OCR 工程使用的过程中,我们主要遇到了 2 个问题:

  1. 在Android开发的初期,我们发现识别率和我们的期望存在一定的差距。我们怀疑是模型的输入数据有问题,通过排查发现是使用libyuv的时候,没注意到它是little endian。例如这个方法:int BGRAToARGB(…),BGRA little endian,在内存里顺序实际是ARGB。所以在使用的时候需要弄清楚你的数据在内存里是什么顺序的,修改这个问题后识别率达到了我们的预期。
  2. 在大部分机型上运行正常,但在部分机型上出现了 Native 层的内存异常。

通过多次定位,最后发现是 stride 和 buffersize 的计算错误引起的。由于 libyuv 是 C/C++ 实现的,使用的时候不是那么的便捷。为了提高开发效率,我们提取了一个 AoeVision 组件,对libyuv封装了一层 JNI 接口,包括了一些基础的转换和一些 Sample,这样使用起来更加简单方便,AoeVision组件还在不断开发和完善中。

GitHub地址项目 GitHub 地址

计算机科学 (CS) 顶会历届最佳论文列表

历届最佳论文大列表,从 1996 年至 2018 年都包含了。机器学习、深度学习前沿 Paper 都能找得到!这些『顶会』包括:

AAAI, ACL, CHI, CIKM, CVPR, FOCS, FSE, ICCV, ICML, ICSE, IJCAI, INFOCOM, KDD, MOBICOM, NSDI, OSDI, PLDI, PODS, S&P, SIGCOMM, SIGIR, SIGMETRICS, SIGMOD, SODA, SOSP, STOC, UIST, VLDB, WWW

这个网页上,按照不同顶会,列举了各个年份的最佳 CS 论文,论文源地址和作者信息都有了!几个 AI 领域的代表性顶会最佳论文资源包括:

  •  AAAI (Artificial Intelligence)
  •  ACL (Natural Language Processing)
  • CVPR (Computer Vision)
  • ICCV (Computer Vision)
  • ICML (Machine Learning)
  • IJCAI (Artificial Intelligence)

以上是人工智能领域具有代表性的几个顶会,相应的最佳论文都按照不同年份列举出来了,非常便于查找和定位。除此之外,还包括其他 CS 顶会的最佳论文。

Google 发布姿势估测应用

Google 日前发布一款 TensorFlow Lite 示例应用,该应用使用 PoseNet 模型在 Android 中实现人体姿势估测。PoseNet 是一种视觉模块,通过检测人体关键部位的位置,来估测图像或视频中的人体姿势。例如,该模型可以估测图像中人物手肘和膝盖的所在位置。姿势估测模型只会识别人体关键部位的位置,而不会去辨别图像中的人物。TensorFlow Lite 现与您分享这款 Android 示例应用,该应用可利用设备的相机实时检测和显示个人的关键身体部位。

使用 PoseNet 模型在 Android 中实现人体姿势估测
使用 PoseNet 模型在 Android 中实现人体姿势估测

PoseNet 应用前景

姿势估测存在多种用途。例如,开发者可根据人体图像增强现实、制作计算机图形人物动画以及为运动中的运动员分析步态。在 Google I/O 2019 大会上,TensorFlow Lite 展示了使用 PoseNet 模块帮助用户学习舞蹈的应用 Dance Like。借助这款示例应用,应用开发者和机器学习专家能够更轻松地探索轻量级移动模型的各种可能性。

PoseNet 示例应用

不同于用 Java 编写的现有 Andriod 应用,PoseNet 示例应用的开发采用 Kotlin 语言。开发此应用旨在让所有人都能以低成本轻松使用 PoseNet 模型。示例应用包含可消除模型复杂性的 PoseNet 库。下图展示应用、PoseNet 库 和 TensorFlow Lite 库之间的工作流。

PoseNet 应用工作流
PoseNet 应用工作流

PoseNet 库

PoseNet 库提供了一个接口,通过该接口接收经处理的相机图像,并返回人体关键部位所在位置的相关信息。此功能由 estimateSinglePose() 函数提供,该函数会在经处理的 RGB 位图上运行 TensorFlow Lite 解释器并返回 Person 对象。了解 PoseNet 输入和输出的含义

PoseNet 示例应用

PoseNet 示例应用是一种设备端相机应用,该应用可通过相机捕获帧,并实时覆盖图像上的关键点。针对每张传入的相机图像,该应用均会执行以下步骤:

  1. 从相机预览中捕获图像数据,并将其格式从 YUV_420_888 转换为 ARGB_888。
  2. 创建 Bitmap 对象,以保存 RGB 格式帧数据的像素。将 Bitmap 裁剪并缩放至可输入模块的尺寸,从而将其传入模块。
  3. 调用 PoseNet 库的 estimateSinglePose () 函数,以获取 Person 对象。
  4. 将 Bitmap 重新缩放至屏幕尺寸。在 Canvas 对象上绘制新 Bitmap。
  5. 使用通过 Person 对象获取的关键点位置,在画布上绘制骨架。显示可信度高于特定阈值(默认为 0.2)的关键点。

为使姿势渲染与相机帧同步,我们对输出显示使用单个 SurfaceView,而非分别对姿势与相机使用 View 实例。SurfaceView 会在 View 画布上进行捕获、锁定和绘制,从而确保在屏幕上实时显示画面。

发展蓝图

我们希望未来能为此示例应用开发更多功能,其中包括:

  • 多姿势估测
  • 使用 GPU 代理实现 GPU 加速
  • 使用 NNAPI 代理实现 NNAPI 加速
  • 使用模型的训练后量化降低延迟
  • 更多模型选项,例如 ResNet PoseNet 模型

GitHub地址项目 GitHub 地址

数据科学家常用自然语言处理Python库

此前,跨象乘云™ 发布过系列文章 ——

互联网上大约有 70% 以上的数据不是结构化格式的。非结构化数据包括传感器数据、图像、视频文件、音频文件、网站和 API 的数据、社交媒体数据、电子邮件以及更多与文本相关的信息。由于其特殊的特性,我们无法以一种简单的方式处理数据,为了解决这一问题,在大数据和数据科学环境下,出现了许多技术和工具来解决这一问题。

自然语言处理,是人工智能领域的前沿技术之一。它研究能实现人与计算机之间用自然语言进行有效通信的各种理论和方法。NLP 的最终目标是以一种有价值的方式阅读、破译、理解和理解人类语言。大多数 NLP 技术依靠机器学习从人类语言中获得意义。基于 NLP 最著名的应用是:

  • Google Speech Recognition.
  • Apple’s Siri.
  • Microsoft’s Cortona.
  • Amazon’s Alexa.
  • Ok Google in Android Mobiles.
  • Interactive voice responses used in call centers.
  • Grammarly

1. spaCy

非常优化的 NLP 库,可以与 TensorFlowPyTorch 等深度学习框架一起使用。它是一个高级的 NLP 库,可在 Python 和 Cython 中的使用,它帮助我们可以进行快速的开发,spaCy 提供了预先训练的统计模型和单词向量,目前支持 50 多种语言的标记化。它具有最先进的速度,卷积神经网络模型的标签,解析和命名实体识别和易于深入学习集成。

# Importing the Library
import spacy

NLPLagnguageType = spacy.load('en')
text = NLPLanguageType('Earth Revolves around the sun.')
# Iterating over the text
for token in text:
print(token.text,token_pos_)

在上面的例子中,我们实现了一个简单的 NLP 例子,他将输出文本,并加上每个单词的词性:

> > > 地球名词

> > > 是动词

这样的例子不胜枚举。它将生成给定文本中每个单词的词性。

2. Gensim

Gensim 是一个用于从文档中自动提取语义主题的 Python 库,目标受众是自然语言处理 (NLP) 和信息检索 (IR) 社区。具有以下特性:

  • 内存独立:对于训练语料来说,没必要在任何时间将整个语料都驻留在RAM中
  • 有效实现了许多流行的向量空间算法,包括 tf-idf,分布式 LSA,分布式 LDA 以及 RP;并且很容易添加新算法
  • 对流行的数据格式进行了 IO 封装和转换
  • 在其语义表达中,可以相似查询

Gensim 的创建的目的是,由于缺乏简单的(java 很复杂)实现主题建模的可扩展软件框架。

import gensim
id2word = gensim.corpora.Dictionary.load_from_text('wiki_en_wordids.txt')
mm = gensim.corpora.MmCorpus('wiki_en_tfidf.mm')

lda = gensim.models.ldamodel.LdaModel(corpus=mm, id2word=id2word, num_topics=10, update_every=1, chunksize=10000, passes=1)

lda.print_topics(1)

上面示例可以看到一个通过 LDA 从 Wikipedia 转储中提取主题的非常简单的示例。

3. Pattern

Pattern 是采用 Python 开发的数据挖掘库,用于抓取和解析各种数据源,如谷歌、Twitter、Wikipedia 等等。

它提供了各种 NLP 工具 (PoS 标签、n- gram、WordNet)、机器学习功能 (向量空间模型、聚类、分类) 和用于进行网络分析的各种工具。它是由 CLiPS 维护的,因此不仅有很好的文档和许多例子,而且有许多学术出版物正在利用图书馆。

# Importing Libraries
from pattern.web import Google
from pattern.en import ngrams

engine = Google(license=API_LICENSE)

for result in engine.search('NLP', cached=False):
print(result.url, result.text)
print(ngrams(result.text, n=2))

在上面的示例中,是爬取谷歌以获取包含关键字『NLP』的结果,它将输出所有的结果 url 和文本。虽然这确实是一个毫无意义的示例,但它展示了如何通过 Pattern 执行爬行和 NLP 任务。

4. Natural Language Tool KIT [NLTK]

NLTK 是可用来训练 NLP 模型的最好的库之一。这个库很容易使用。它是一个初学者友好的 NLP 库。它有很多预先训练好的模型和语料库,可以帮助我们很容易地分析事物。

# Importing Libraries
import nltk
text = 'Earth Revovles around the Sun.'
# Token Generator--> Separates the sentence into tokens
tokens = nltk.word_tokenize(text)
for token in tokens:
print(token)

word_tokenize() 将帮助我们将一组文本创建为简单的单词。我们把它叫做 token,输出 ——

Earth
Revolves
around
the
Sun

5. TextBlob

TextBlob 基于 Pattern 和 NLTK,后者为所有常见的 NLP 操作提供了一个很棒的 API 调用。它不是最快或最完整的库,但它以一种极容易访问和管理的方式提供了人们日常所需功能。

# Importing Module
from textblob import TextBlob

text = 'Earth Revolves around the sun.'

text_blob = TextBlob(text)

for sentence in blob.sentences:
print(sentence.sentiment.polarity)

在上面的示例中,我们考虑 NLTK 库中获取的相同示例文本。在这个程序中,textblob 首先将句子分割成 Token,并在标记上执行情感分析,这只是句子极性分析。希望你对 Python 中自然语言的流行库有一个完整,由于 NLP 是一门难学课程,初学者可能无法正确理解它。但是那些想要开始 NLP 的人,那么你应该使用上面的任何一个库。如果你是一名自然语言处理的新手,我强烈建议您从 NLTK 开始,这将是一个很好的开始。

联合国教科文组织正式发布《北京共识 – 人工智能与教育》

近日,联合国教科文组织正式发布国际人工智能与教育大会成果文件《北京共识 – 人工智能与教育》。这是联合国教科文组织首个为利用人工智能技术实现 2030 年教育议程提供指导和建议的重要文件。

2019 年 5 月,中国政府与联合国教科文组织合作在北京举办国际人工智能与教育大会。会议以『规划人工智能时代的教育:引领与跨越』为主题。国家主席习近平为大会致贺信。国务院副总理孙春兰出席会议并致辞。来自全球 100 多个国家、10 余个国际组织的约 500 位代表共同探讨智能时代教育发展大计,审议并通过成果文件《北京共识》,形成了国际社会对智能时代教育发展的共同愿景。

《北京共识》以联合国6种官方语言发布,共 44 条,从智能时代的教育政策规划、教育管理和供给、教学教师、学习评价、价值观和技能、全民终身学习、公平包容的应用、性别平等、伦理、监测评估和研究以及筹资和国际合作等方面,分别对教科文组织会员国政府和利益攸关方、国际组织及合作伙伴、教科文组织总干事提出建议。

《北京共识》提出,各国要引领实施适当的政策应对策略,通过人工智能与教育的系统融合,全面创新教育、教学和学习方式,并利用人工智能加快建设开放灵活的教育体系,确保全民享有公平、适合每个人且优质的终身学习机会,从而推动可持续发展目标和人类命运共同体的实现。

《北京共识》强调,要采用人工智能平台和基于数据的学习分析等关键技术构建可支持人人皆学、处处能学、时时可学的综合型终身学习体系。要确保人工智能促进全民优质教育和学习机会,无论性别、残疾状况、社会和经济条件、民族或文化背景以及地理位置如何。

《北京共识》倡议,要支持对与新兴人工智能发展影响相关的前沿问题进行前瞻性研究,推动探索利用人工智能促进教育创新的有效战略和实践模式,以期构建一个在人工智能与教育问题上持有共同愿景的国际社会。

序言

1. 我们 —— 国际人工智能与教育大会与会者,包括 50 名政府部长和副部长、来自 100 多个会员国以及联合国机构、学术机构、民间社会和私营部门的约 500 名代表,于 2019 年 5 月 16 –18 日齐聚中国北京。我们衷心感谢联合国教育、科学及文化组织和中华人民共和国政府合作举办此次大会,以及北京市政府的热情欢迎和盛情款待。

2. 我们重申了《2030 年可持续发展议程》中的承诺,特别是可持续发展目标 4 及其各项具体目标,并讨论了教育和培训系统在实现可持续 发展目标 4 时所面临的挑战。我们致力于引领实施适当的政策应对策略,通过人工智能与教育的系统融合,全面创新教育、教学和学习方式,并利用人工智能加快建设开放灵活的教育体系,确保全民享有公平、适合每个人且优质的终身学习机会,从而推动可持续发展目标和人类命运共同体的实现。

3. 我们回顾 2015 年通过的关于利用信息通信技术(信通技术)实现可持续发展目标 4 的《青岛宣言》,其中指出必须利用新兴技术强化教育体系、拓展全民教育机会、提高学习质量和效果以及强化公平和更高效的教育服务供给;当我步入人工智能广泛应用的时代时,我们认识到重申并更新这一承诺的迫切需要。

4. 我们研究了人工智能演变的最新趋势及其对人类社会、经济和劳动力市场以及教育和终身学习体系的深远影响。我们审视了人工智能对于未来工作和技能养的潜在影响,并探讨了其在重塑教育、教学和学习的核心基础方面的潜力。

5. 我们认识到人工智能领域的复杂性和迅猛发展速度、对人工智能的多元化理解、宽泛的外延和各种差异较大的定义、以及在不同场景中的多样化应用及其引发的伦理挑战。

6. 我们还认识到人类智能的独特性。忆及《世界人权宣言》中确立的原则,我们重申联合国教科文组织在人工智能使用方面的人文主义取向,以期保护人权并确保所有人具备在生活、学习和工作中进行有效人机合作以及可持续发展所需的相应价值观和技能。

7. 我们还申明,人工智能的开发应当为人所控、以人为本;人工智能的部署应当服务于人并以增强人的能力为目的;人工智能的设计应合乎伦理、避免歧视、公平、透明和可审核;应在整个价值链全过程中监测并评估人工智能对人和社会的影响。

我们建议,联合国教科文组织会员国政府及其他利益攸关方根据其法律、公共政策和公共惯例,考虑实施以下行动,应对人工智能带来的相关教育机遇和挑战:

规划教育人工智能政策

8. 认识到人工智能的多学科特性及其影响;确保教育人工智能与公共政策特别是教育政策有机配合;采取政府全体参与、跨部门整合和多方协作的方法规划和治理教育人工智能政策;根据本地在实现可持续发展目标 4 及其具体目标以及其他可持续发展目标的工作中遇到的挑战,确定政策的战略优先领域。从终身学习的角度规划并制定与教育政策接轨和有机协调的全系统教育人工智能战略。

9. 意识到推行教育人工智能政策和工程的巨大投资需求。审慎权衡不同教育政策重点之间的优先级,确定不同的筹资渠道,包括国家经费(公共和私人)、国际资金和创新性的筹资机制。还要考虑到人工智能在合并和分析多个数据来源从而提高决策效率方面的潜力。

人工智能促进教育的管理和供给

10. 意识到应用数据变革基于实证的政策规划方面的突破。考虑整合或开发合适的人工智能技术和工具对教育管理信息系统(EMIS)进行升级换代,以加强数据收集和处理,使教育的管理和供给更加公平、包容、开放和个性化。

11. 还考虑在不同学习机构和学习场境中引入能够通过运用人工智能实现的新的教育和培训供给模式,以便服务于学生、教职人员、家长和社区等不同行为者。

人工智能赋能教学和教师

12. 注意到虽然人工智能为支持教师履行教育和教学职责提供了机会,但教师和学生之间的人际互动和协作应确保作为教育的核心。意识到教师无法被机器取代,应确保他们的权利和工作条件受到保护。

13. 在教师政策框架内动态地审视并界定教师的角色及其所需能力,强化教师培训机构并制定适当的能力建设方案,支持教师为在富含人工智能的教育环境中有效工作做好准备。

人工智能促进学习和学习评价

14. 认识到人工智能在支持学习和学习评价潜能方面的发展趋势,评估并调整课程,以促进人工智能与学习方式变革的深度融合。在使用人工智能的惠益明显大于其风险的领域,考虑应用现有的人工智能工具或开发创新性人工智能解决方案,辅助不同学科领域中明确界定的学习任务,并为开发跨学科技能和能力所需的人工智能工具提供支持。

15. 支持采用全校模式围绕利用人工智能促进教学和学习创新开展试点测试,从成功案例中汲取经验并推广有证据支持的实践模式。

16. 应用或开发人工智能工具以支持动态适应性学习过程;发掘数据潜能,支持学生综合能力的多维度评价;支持大规模远程评价。

培养人工智能时代生活和工作所需的价值观和技能

17. 注意到采用人工智能所致的劳动力市场的系统性和长期性变革,包括性别平等方面的动态。更新并开发有效机制和工具,以预测并确认当前和未来人工智能发展所引发的相关技能需求,以便确保课程与不断变化的经济、劳动力市场和社会相适应。将人工智能相关技能纳入中小学学校课程和职业技术教育与培训(TVET)以及高等教育的资历认证体系中,同时考虑到伦理层面以及相互关联的人文学科。

18. 认识到进行有效的人机协作需要具备一系列人工智能素养,同时不能忽视对识字和算术等基本技能的需求。采取体制化的行动,提高社会各个层面所需的本人工智能素养。

19. 制定中长期规划并采取紧急行动,支持高等教育及研究机构开发或加强课程和研究项目,培养本地人工智能高端人才,以期建立一个具备人工智能系统设计、编程和开发的大型本地人工智能专业人才库。

人工智能服务于提供全民终身学习机会

20. 重申终身学习是实现可持续发展目标4的指导方针,其中包括正规、非正规和非正式学习。采用人工智能平台和基于数据的学习分析等关键技术构建可支持人人皆学、处处能学、时时可学的综合型终身学习体系,同时尊重学习者的能动性。开发人工智能在促进灵活的终身学习途径以及学习结果累积、承认、认证和转移方面的潜力。

21. 意识到需要在政策层面对老年人尤其是老年妇女的需求给予适当关注,并使他们具备人工智能时代生活所需的价值观和技能,以便为数字化生活消除障碍。规划并实施有充足经费支持的项目,使较年长的劳动者具备技能和选择,能够随自己所愿保持在经济上的从业身份并融入社会。

促进教育人工智能应用的公平与包容

22. 重申确保教育领域的包容与公平以及通过教育实现包容与公平,并为所有人提供终身学习机会,是实现可持续发展目标 4 — 2030 年教育的基石。重申教育人工智能方面的技术突破应被视为改善最弱势群体受教育机会的一个契机。

23. 确保人工智能促进全民优质教育和学习机会,无论性别、残疾状况、社会和经济条件、民族或文化背景以及地理位置如何。教育人工智能的开发和使用不应加深数字鸿沟,也不能对任何少数群体或弱势群体表现出偏见。

24. 确保教学和学习中的人工智能工具能够有效包容有学习障碍或残疾的学生,以及使用非母语学习的学生。

性别公平的人工智能和应用人工智能促进性别平等

25. 强调数字技能方面的性别差距是人工智能专业人员中女性占比低的原因之一,且进一步加剧了已有的性别不平等现象。

26. 申明我们致力于在教育领域开发不带性别偏见的人工智能应用程序,并确保人工智能开发所使用的数据具有性别敏感性。同时,人工智能应用程序应有利于推动性别平等。

27. 在人工智能工具的开发中促进性别平等,通过提升女童和妇女的人工智能技能增强她们的权能,在人工智能劳动力市场和雇主中推动性别平等。

确保教育数据和算法使用合乎伦理、透明且可审核

28. 认识到人工智能应用程序可能带有不同类型的偏见,这些偏见是训练人工智能技术所使用和输入的数据自身所携带的以及流程和算法的构建和使用方式中所固有的。认识到在数据开放获取和数据隐私保护之间的两难困境。注意到与数据所有权、数据隐私和服务于公共利益的 数据可用性相关的法律问题和伦理风险。注意到采纳合乎伦理、注重隐私和通过设计确保安全等原则的重要性。

29. 测试并采用新兴人工智能技术和工具,确保教师和学习者的数据隐私保护和数据安全。支持对人工智能领域深层次伦理问题进行稳妥、长期的研究,确保善用人工智能,防止其有害应用。制定全面的数据保 护法规以及监管框架,保证对学习者的数据进行合乎伦理、非歧视、公平、透明和可审核的使用和重用。

30. 调整现有的监管框架或采用新的监管框架,以确保负责任地开发和使用用于教育和学习的人工智能工具。推动关于人工智能伦理、数据隐私和安全相关问题,以及人工智能对人权和性别平等负面影响等问题的研究。

监测、评估和研究

31. 注意到缺乏有关人工智能应用于教育所产生影响的系统性研究。支持就人工智能对学习实践、学习成果以及对新学习形式的出现和验证产生的影响开展研究、创新和分析。采取跨学科办法研究教育领域的人工智能应用。鼓励跨国比较研究及合作。

32. 考虑开发监测和评估机制,衡量人工智能对教育、教学和学习产生的影响,以便为决策提供可靠和坚实的证据基础。

我们建议活跃在这一领域的国际组织和伙伴考虑实施下列行动:

筹资、伙伴关系和国际合作

33. 基于各国自愿提交的数据,监测并评估各国之间人工智能鸿沟和人工智能发展不平衡现象,并且注意到能够获取使用和开发人工智能和无法使用人工智能的国家之间两极分化的风险。重申解决这些忧虑的重要性,并特别优先考虑非洲、最不发达国家、小岛屿发展中国家以及受冲突和灾害影响的国家。

34. 在『2030 年教育』的全球和地区架构范围内,协调集体行动,通过分享人工智能技术、能力建设方案和资源等途径,促进教育人工智能的公平使用,同时对人权和性别平等给予应有的尊重。

35. 支持对与新兴人工智能发展影响相关的前沿问题进行前瞻性研究,推动探索利用人工智能促进教育创新的有效战略和实践模式,以期构建一个在人工智能与教育问题上持有共同愿景的国际社会。

36. 确保国际合作有机配合各国在教育人工智能开发和使用以及跨部门合作方面的需求,以便加强人工智能专业人员在人工智能技术开发方面的自主性。加强信息共享和有良好前景应用模式的交流,以及各国之间的协调和互补协作。

37. 通过联合国教科文组织移动学习周等方式并借助其他联合国机构,为各国之间交流有关教育人工智能领域的监管框架、规范文本和监管方式提供适当的平台,从而支持在发掘人工智能潜力促进可持续发展目标4方面开展南南合作和北南南合作,并从中受益。

38. 建立多利益攸关方伙伴关系并筹集资源,以便缩小人工智能鸿沟,增加对教育人工智能领域的投资。

我们请联合国教科文组织总干事努力实施下列行动:

39. 建立一个『人工智能服务于教育』的平台,作为开源人工智能课程、人工智能工具、教育人工智能政策实例、监管框架和最佳做法的信息交流中心,以期推动利用人工智能促进可持续发展目标4,支持就教育和学习的未来开展辩论,并使开源人工智能资源和课程向所有人开放。

40. 在与会员国开展咨询的基础上制定教育人工智能指导纲要并开发资源,以支持会员国制定促进教育领域有效和公平应用人工智能的政策和战略。支持对教育政策制定者的相关能力建设。

41. 通过强化相关部门及处室并动员联合国教科文组织的机构和网络,加强联合国教科文组织在教育人工智能领域的引领作用。

42. 支持将人工智能技能纳入教师信通技术能力框架,支持各国就教职人员如何在富含人工智能的教育环境下工作开展培训。

43. 在教育人工智能方面,进一步扩大联合国教科文组织与相关联合国机构和多边合作伙伴、地区开发银行和组织以及私营部门的合作。

44. 此次大会之后,采取适当的地区和国际性后续行动,与活跃在这一领域的发展伙伴合作,巩固并扩大本共识的影响。

TensorFlow VS. PyTorch V2

此前,跨象乘云™ 发布过《TensorFlow VS. PyTorch》 —— 谷歌的 Tensorflow 与 Facebook 的 PyTorch 一直是颇受社区欢迎的两种深度学习框架。那么究竟哪种框架最适宜自己手边的深度学习项目呢?本文作者从这两种框架各自的功能效果、优缺点以及安装、版本更新等诸多方面给出了自己的建议。如果你在读这篇文章,那么你可能已经开始了自己的深度学习之旅。如果你对这一领域还不是很熟悉,那么简单来说,深度学习使用了「人工神经网络」,这是一种类似大脑的特殊架构,这个领域的发展目标是开发出能解决真实世界问题的类人计算机。为了帮助开发这些架构,谷歌、Facebook 和 Uber 等科技巨头已经为 Python 深度学习环境发布了多款框架,这让人们可以更轻松地学习、构建和训练不同类型的神经网络。本文将详细介绍和比较两种流行的框架: TensorFlow 与 PyTorch。

谷歌的 TensorFlow

TensorFlow 是谷歌的开发者创造的一款开源的深度学习框架,于 2015 年发布。官方研究发布于论文《TensorFlow:异构分布式系统上的大规模机器学习》。TensorFlow 现已被公司、企业与创业公司广泛用于自动化工作任务和开发新系统,其在分布式训练支持、可扩展的生产和部署选项、多种设备(比如安卓)支持方面备受好评。

Facebook 的 PyTorch

PyTorch 是最新的深度学习框架之一,由 Facebook 的团队开发,并于 2017 年在 GitHub 上开源。有关其开发的更多信息请参阅论文《PyTorch 中的自动微分》。PyTorch 很简洁、易于使用、支持动态计算图而且内存使用很高效,因此越来越受欢迎。接下来还会更详细地介绍。

我们可以用 TensorFlow 和 PyTorch 构建什么?

神经网络起初是被用于解决手写数字识别或用相机识别汽车注册车牌等简单的分类问题。但随着近来框架的发展以及英伟达高计算性能图形处理单元(GPU)的进步,我们可以在 TB 级的数据上训练神经网络并求解远远更加复杂的问题。一个值得提及的成就是在 TensorFlow 和 PyTorch 中实现的卷积神经网络在 ImageNet 上都达到了当前最佳的表现。训练后的模型可以用在不同的应用中,比如目标检测、图像语义分割等等。

尽管神经网络架构可以基于任何框架实现,但结果却并不一样。训练过程有大量参数都与框架息息相关。举个例子,如果你在 PyTorch 上训练一个数据集,那么你可以使用 GPU 来增强其训练过程,因为它们运行在 CUDA(一种 C++ 后端)上。TensorFlow 也能使用 GPU,但它使用的是自己内置的 GPU 加速。因此,根据你所选框架的不同,训练模型的时间也总是各不相同。

TensorFlow 顶级项目

  • Magenta:一个探索将机器学习用作创造过程的工具的开源研究项目
  • Sonnet:这是一个基于 TensorFlow 的软件库,可用于构建复杂的神经网络
  • Ludwig:这是一个无需写代码就能训练和测试深度学习模型的工具箱

PyTorch 顶级项目

  • CheXNet:使用深度学习来分析胸部 X 光照片,能实现放射科医生水平的肺炎监测
  • PYRO:这是一种用 Python 编写的通用概率编程语言(PPL),后端由 PyTorch 支持
  • Horizon:一个用于应用强化学习(Applied RL)的平台

这些只是基于 TensorFlow 和 PyTorch 构建的少量框架和项目。你能在 TensorFlow 和 PyTorch 的 GitHub 和官网上找到更多。

PyTorch 和 TensorFlow 对比

PyTorch 和 TensorFlow 的关键差异是它们执行代码的方式。这两个框架都基于基础数据类型张量(tensor)而工作。你可以将张量看作是下图所示的多维数组。

多维数组
多维数组

机制:动态图定义与静态图定义

TensorFlow 框架由两个核心构建模块组成:

  • 一个用于定义计算图以及在各种不同硬件上执行这些图的运行时间的软件库。
  • 一个具有许多优点的计算图(后面很快就会介绍这些优点)。

计算图是一种将计算描述成有向图的抽象方式。图是一种由节点(顶点)和边构成的数据结构,是由有向的边成对连接的顶点的集合。

当你在 TensorFlow 中运行代码时,计算图是以静态方式定义的。与外部世界的所有通信都是通过 tf.Sessionobject 和 tf.Placeholder 执行,它们是在运行时会被外部数据替换的张量。例如,看看以下代码段:

近期 Keras 被合并到了 TensorFlow 库中,这是一个使用 TensorFlow 作为后端的神经网络框架。从那时起,在 TensorFlow 中声明层的句法就与 Keras 的句法类似了。首先,我们声明变量并将其分配给我们将要声明的架构类型,这里的例子是一个 Sequential() 架构。

接下来,我们使用 model.add() 方法以序列方式直接添加层。层的类型可以从 tf.layers 导入,如下代码片段所示:

TensorFlow 和 PyTorch 的优缺点

TensorFlow 和 PyTorch 各有其优缺点。

TensorFlow 的优点:

  • 简单的内置高级 API
  • 使用 TensorBoard 可视化训练
  • 通过 TensorFlow serving 容易实现生产部署
  • 很容易的移动平台支持
  • 开源
  • 良好的文档和社区支持

TensorFlow 的缺点:

  • 静态图
  • 调试方法
  • 难以快速修改

PyTorch 的优点

  • 类 Python 的代码
  • 动态图
  • 轻松快速的编辑
  • 良好的文档和社区支持
  • 开源
  • 很多项目都使用 PyTorch

PyTorch 的缺点:

  • 可视化需要第三方
  • 生产部署需要 API 服务器

TensorFlow 还是 PyTorch?

PyTorch 和 TensorFlow 近期都发布了新版本:PyTorch 1.0(首个稳定版)和 TensorFlow 2.0(beta 测试版)。这两个版本都有重大的更新和新功能,让训练过程更高效、流畅和强大。

如果你要在自己的机器上安装这些框架的最新版,你可以用源代码 build 或通过 pip 安装。

TensorFlow 是一种非常强大和成熟的深度学习库,具有很强的可视化功能和多个用于高级模型开发的选项。它有面向生产部署的选项,并且支持移动平台。另一方面,PyTorch 框架还很年轻,拥有更强的社区动员,而且它对 Python 友好。

建议是:如果你想更快速地开发和构建 AI 相关产品,TensorFlow 是很好的选择。建议研究型开发者使用 PyTorch,因为它支持快速和动态的训练。

DeepMind 强化学习框架:覆盖28款游戏,24类算法

近日,DeepMind 开源了史上最全强化学习框架 OpenSpiel

在这个框架中,实现了 28 款可用于研究强化学习的棋牌类游戏和 24 个强化学习中常用的算法,DeepMind 的成名作 AlphaGo 的基础算法也在其列。

此外,还包括用于分析学习动态和其他常见评估指标的工具。更关键的是,OpenSpiel 适用人群也非常广泛。它的核心 API 和游戏用 C++ 实现,并提供了 Python API,可用于更高级别的机器学习,优化和强化学习。这些语言也可以很容易地组合在一起。而且,代码的一个子集也已经使用 Swift for Tensorflow 直接移植到了 Swift 进行学习和推理,不需要跨语言操作。

目前,在 OpenSpiel 中实现的算法一共有 24 种,分别是:

极小化极大(Alpha-beta剪枝)搜索、蒙特卡洛树搜索、序列形式线性规划、虚拟遗憾最小化(CFR)、Exploitability、外部抽样蒙特卡洛 CFR、结果抽样蒙特卡洛CFR、Q-learning、价值迭代、优势动作评论算法(Advantage Actor Critic,A2C)、Deep Q-networks (DQN)、短期价值调整(EVA)、Deep CFR、Exploitability 下降(ED) 、(扩展形式)虚拟博弈(XFP)、神经虚拟自博弈(NFSP)、Neural Replicator Dynamics(NeuRD)、遗憾策略梯度(RPG, RMPG)、策略空间回应oracle(PSRO)、基于Q的所有行动策略梯度(QPG)、回归 CFR (RCFR)、PSROrN、α-Rank、复制/演化动力学。

Spiel 意指桌面游戏。因此,OpenSpiel 中的环境就是相关棋牌类游戏。一共有 28 款:

双陆棋、突围棋、定约桥牌、Coin Game、屏风式四子棋、协作推箱子、国际象棋、第一价格密封拍卖、围棋、Goofspiel(一种多玩家纸牌游戏)、三宝棋、六贯棋、Kuhn 扑克、Leduc 扑克、大话骰、Markov Soccer、配对硬币(3人游戏)、矩阵游戏、Oshi-Zumo、西非播棋、转盘五子棋、Phantom 三连棋、Pig 游戏、三连棋、Tiny Bridge、Y(一种棋类游戏)、Catch(仅支持Python)、Cliff-Walking在悬崖边走的醉汉(仅支持Python)。

GitHub地址项目 GitHub 地址

DeepMind 发布星际争霸强化学习课程

此前,跨象乘云介绍了:Pysc2 —— 基于 Python 的星际争霸 II 机器学习环境,这是 DeepMind 和暴雪合作开发星际争霸 II 到强化学习研究的一个丰富环境,为强化学习代理提供了与星际争霸 II 进行交互的界面,获得观察结果并发送动作。

很长时间以来,因为星际争霸这个游戏包含非常多的状态和动作空间,以及只有部分可观察和多玩家的特点,这个游戏一直被机器学习界认为是人工智能的下一个『大挑战』。

于是,一个由澳大利亚开发人员、机器学习工程师和研究人员组成的团队 —— StarAi 就基于星际争霸开发了一个机器学习课程!

课程特色

大多数强化学习课程都是采用高度数学化的方法学习的,但是这个课程使用更加人性化工具 —— 『故事』,来解释基本的强化学习概念。不能自己动手创造的东西你是不会明白的!所以课程提供了易于实际操作的练习,与步骤详解,以帮助学习。

学习方法

所有练习都在谷歌实验室中执行,直接在浏览器中就可以操作,而与硬件无关。所以你所需要的只是一个谷歌帐户和 Chrome 浏览器。学习的步骤就是先观看演讲材料,然后尝试进行练习。当然课程官方就像高中老师一样,也是要求你在自己实际操作很多遍之后如果还不能解决再看答案,不要直接看答案!

而对于基础较好的技术人员,如果想深入了解的话,课程还提供了Sutton & Bartos 的优秀教科书《An Introduction for each week’s material》中相关章节的链接。课程一共六周,每一部分都包含视频讲解、PPT、课后练习和答案,非常完善!赶紧上手进行学习吧!

课程链接

https://www.starai.io/course/