吴恩达《Machine Learning》课程笔记

吴恩达在 Coursera 上开设的《Machine Learning》课程。这门课最大的特点就是基本没有复杂的数学理论和公式推导,非常适合入门!本课程将广泛介绍机器学习、数据挖掘和统计模式识别。相关主题包括:

  1. 监督式学习(参数和非参数算法、支持向量机、核函数和神经网络)。
  2. 无监督学习(集群、降维、推荐系统和深度学习)。
  3. 机器学习实例(偏见/方差理论;机器学习和 AI 领域的创新)。

课程将引用很多案例和应用,您还需要学习如何在不同领域应用学习算法,例如智能机器人(感知和控制)、文本理解(网络搜索和垃圾邮件过滤)、计算机视觉、医学信息学、音频、数据库挖掘等领域。

这门课基本涵盖了机器学习的主要知识点,例如:线性回归、逻辑回归、支持向量机、神经网络、K-Means、异常检测等等。而且课程中没有复杂的公式推导和理论分析。Ng 的目的是让机器学习初学者能够快速对整个机器学习知识点有比较整体的认识,便于快速入门。

这门课的笔记网上有很多,但今天推荐一份不错的全面的笔记。该笔记的特点是所有内容都是基于 Jupyter Notebook 写的,集图片、公式、代码、练习题于一体,非常方便实用!另外,这门课配套相应的练习题。Github 上已经有人把作业整理成为 Python 的形式了。有 .py 和 .ipynb 两种格式。

https://github.com/nsoojin/coursera-ml-py

https://github.com/kaleko/CourseraML 

GitHub地址项目 GitHub 地址

 

《统计学习方法》第 2 版课件 + 算法实现代码

李航的《统计学习方法》(GitHub 地址)可以说是机器学习的入门宝典,许多机器学习培训班、互联网企业的面试、笔试题目,很多都参考这本书。该书从 2005 年开始写作一直到 2012 年完成,包含了众多主要的监督学习算法与模型。今年,《统计学习方法》第二版正式发布,通过 6 年时间的努力,在第一版的基础上又增加了无监督学习的主要算法与模型。

这里插入个图表,列举了各个章节所占篇幅,其中 SVM 是监督学习里面占用篇幅最大的,MCMC 是无监督里面篇幅占用最大的,另外 DT,HMM,CRF,SVD,PCA,LDA,PageRank 也占了相对较大的篇幅。
这里插入个图表,列举了各个章节所占篇幅,其中 SVM 是监督学习里面占用篇幅最大的,MCMC 是无监督里面篇幅占用最大的,另外 DT,HMM,CRF,SVD,PCA,LDA,PageRank 也占了相对较大的篇幅。

《统计学习方法》第二版的最新课件,是由清华大学深圳研究院的袁春教授制作的。

所有的课件都是 PPT 格式,总共包含 22 章。正好是《统计学习方法》第 2 版的完整内容。

其中,第 1 章至第 12 章主要是《统计学习方法》第一版的内容。主要介绍统计学习及监督学习概论、感知机、近邻法、朴素贝叶斯法、决策树、逻辑斯谛回归与最大熵模型、支持向量机、提升方法、EM 算法及其推广、隐马尔可夫模型、条件随机场、监督学习方法总结。

第 2 版增加的新内容包括:

  • 第 13 章 – 无监督学习概论
  • 第 14 章 – 聚类方法
  • 第 15 章 – 奇异值分解
  • 第 16 章 – 主成分分析
  • 第 17 章 – 潜在语义分析
  • 第 18 章 – 概率潜在语义分析
  • 第 19 章 – 马尔可夫链蒙特卡罗法
  • 第 20 章 – 潜在狄利克雷分配
  • 第 21 章 – PageRank 算法
  • 第 22 章 – 无监督学习方法总结
整个这本书里面各章节也不是完全独立的,这部分希望整理章节之间的联系以及适用的数据集。算法到底实现到什么程度,能跑什么数据集也是一方面。
整个这本书里面各章节也不是完全独立的,这部分希望整理章节之间的联系以及适用的数据集。算法到底实现到什么程度,能跑什么数据集也是一方面。

最后,Github 上有同学将第一版相关的机器学习算法用 Python 实现了一遍,致力于将李航博士《统计学习方法》一书中所有算法实现一遍。

GitHub地址项目 GitHub 地址

机器学习的数学基础

此前,跨象乘云™ 曾发布过由 Marc Peter Deisenroth,A Aldo Faisal 和 Cheng Soon Ong 撰写的《机器学习数学基础》。这个是从大学教材里搜集的机器学习数学基础资料,分为高等数学,线性代数、概率论与数理统计三部分。另外包括了斯坦福大学 CS 229 机器学习课程的基础材料,难度应该在本科 3 年级左右。数据科学需要一定的数学基础,但仅仅做应用的话,如果时间不多,不用学太深,了解基本公式即可,遇到问题再查吧。

GitHub地址项目 GitHub 地址

Spark模型在Uber机器学习平台应用

Evolving Michelangelo Model Representation for Flexibility at Scale
Evolving Michelangelo Model Representation for Flexibility at Scale

Michelangelo 是 Uber 的机器学习(ML)平台,可以训练并服务于整个公司范围内生产环境中的数千种模型。该平台被设计成了一个端到端的工作流,目前支持经典的机器学习、时间序列预测和深度学习模型,可以涵盖大量的用例,从 生成市场预测、响应客户支持工单 到 准确计算预计到达时间(EAT) 以及使用自然语言处理(NLP)模型在驾驶员 App 中提供 一键式聊天功能。

大多数 Michelangelo 模型都是基于 Apache Spark MLlib 的,这是一个可伸缩的 Apache Spark 机器学习库。为了处理高 QPS 的在线服务,Michelangelo 最初仅通过内部定制的模型序列化和表示支持 Spark MLlib 模型的一个子集,这使得客户无法灵活地试验任意复杂的模型管道,限制了 Michelangelo 的扩展速度。为了解决这些问题,我们改进了 Michelangelo 对 Spark MLlib 的使用,特别是在模型表示、持久性和在线服务方面。

在 Michelangelo 中改进 Spark MLlib 用法的动机

我们最初开发 Michelangelo 是为了为生产环境提供可扩展的机器学习模型。它对基于 Spark 的数据摄取调度、模型训练和评估以及批量和在线模型服务部署提供端到端的支持,在 Uber 获得了广泛的认可。

为了将 Spark 用于数据预处理和低延迟服务,并使用 GPU 进行分布式深度学习训练,Michelangelo 针对深度学习用例使用了一致的 Spark 管道架构。
为了将 Spark 用于数据预处理和低延迟服务,并使用 GPU 进行分布式深度学习训练,Michelangelo 针对深度学习用例使用了一致的 Spark 管道架构。

最近,Michelangelo 已经发展到可以处理更多的用例,包括提供在核心 Michelangelo 之外训练过的模型。例如,深度学习模型的扩展和端到端加速训练需要在不同环境中执行操作步骤,以便利用 Spark 的分布式计算转换、Spark Pipelines 在 CPU 上的低延迟服务以及使用 Horovod(Uber 的分布深度学习框架)在 GPU 集群上的分布式深度学习训练。为了使这些需求更容易实现,并保证训练和服务的一致性,有一个一致的架构和模型表示很重要,它可以利用我们现有的低延迟的基于 JVM 的模型服务基础设施,同时提供正确的抽象来封装这些需求。

具有活动 Spark 会话的外部环境可以无缝地反序列化来自 Michelangelo 的经过训练的管道模型,并序列化供 Michelangelo 生态系统的其余部分使用的模型。Apache Spark 是 Apache 软件基金会在美国和 / 或其他国家的注册商标。使用这个标识并不意味着 Apache 软件基金会的认可。
具有活动 Spark 会话的外部环境可以无缝地反序列化来自 Michelangelo 的经过训练的管道模型,并序列化供 Michelangelo 生态系统的其余部分使用的模型。Apache Spark 是 Apache 软件基金会在美国和 / 或其他国家的注册商标。使用这个标识并不意味着 Apache 软件基金会的认可。

另一个动机是使数据科学家能够使用 PySpark 在熟悉的 Jupyter 笔记本(数据科学工作台)中构建和试验任意复杂的模型,同时仍然能够利用 Michelangelo 生态系统可靠地进行分布式训练、部署和服务。这也为 集成学习 或 多任务学习 技术所需的更复杂的模型结构提供了可能性,同时让用户可以动态地实现数据操作和自定义评估。

因此,我们回顾了 Michelangelo 对 Spark MLlib 和 Spark ML 管道 的使用,概括了其模型持久性和在线服务机制,目的是在不影响可伸缩性的情况下实现可扩展性和互操作性。

Michelangelo 最初推出的是一个统一的架构,它负责管理紧耦合的工作流和用于训练和服务的 Spark 作业。Michelangelo 对每种支持的模型类型都有特定的管道模型定义,并使用内部定制的 protobuf 表示经过训练的服务模型。离线服务通过 Spark 处理;在线服务使用添加到 Spark 内部版本的自定义 API 来处理,以实现高效的单行预测。

向本地 Spark 序列化和反序列化转变在模型持久化管道阶段(Transformer/Estimator)层面上实现了灵活性和跨环境兼容性。Apache Spark 是 Apache 软件基金会在美国和 / 或其他国家的注册商标。使用这个标识并不意味着 Apache 软件基金会的认可。
向本地 Spark 序列化和反序列化转变在模型持久化管道阶段(Transformer/Estimator)层面上实现了灵活性和跨环境兼容性。Apache Spark 是 Apache 软件基金会在美国和 / 或其他国家的注册商标。使用这个标识并不意味着 Apache 软件基金会的认可。

最初的架构支持通用机器学习模型(如广义线性模型 GLM 和梯度增强决策树模型 GBDT)的大规模训练和服务,但是自定义的 protobuf 表示使添加对新 Spark 转换器的支持变得困难,并排除了在 Michelangelo 之外训练的模型。当新版本的 Spark 可用时,Spark 的自定义内部版本也使得每次的升级迭代变得复杂。为了提高对新转换器的支持速度,并允许客户将自己的模型引入 Michelangelo,我们考虑了如何改进模型表示并更加顺畅地添加在线服务接口。

Michelangelo 的架构和模型表示法的演变

Michelangelo 的架构必须处理由不同功能需求带来的复杂性,并保持训练和服务环境之间的一致性。 Uber 的机器学习工作流通常很复杂,涉及不同的团队、库、数据格式和语言;为了使模型表示和在线服务接口可以恰当地演化,我们需要考虑所有这些维度。
Michelangelo 的架构必须处理由不同功能需求带来的复杂性,并保持训练和服务环境之间的一致性。

Uber 的机器学习工作流通常很复杂,涉及不同的团队、库、数据格式和语言;为了使模型表示和在线服务接口可以恰当地演化,我们需要考虑所有这些维度。

部署并提供机器学习管道模型服务包括模型前面的所有转换和操作步骤。
部署并提供机器学习管道模型服务包括模型前面的所有转换和操作步骤。

要部署用于服务的机器学习模型,需要部署整个管道,包括模型前面的转换工作流。通常还需要打包数据转换、特征提取、预处理甚至预测后转换。原始预测通常需要解释或转换回标签,在某些情况下需要转换到不同的维度空间,比如日志空间,以便下游服务使用。它也可以用于通过额外的数据加强原始预测,如它们的置信区间,通过 概率校准 来校准概率。我们想要一个能够反映 Spark MLlib 模型固有管道步骤的模型表示,并允许 Michelangelo 与外部工具进行无缝交互。

选择一种最新的模型表示

在评估可供选择的模型表示时,我们评估了不同的需求,包括:

  • 表示广义转换序列的能力(必需)
  • 处理在线用例的轻量级服务的可扩展性(必需)
  • 支持使用非 Michelangelo 原生 Spark 工具替换存储在 Michelangelo 中的模型(必需)
  • 训练时和服务时的模型解释偏差风险低(非常想要)
  • Spark 更新速度要快,并且易于编写新的估计器 / 转换器(非常想要)

我们考虑的一种方法是使用 MLeap,这是一个独立的库,它通过一个专用的运行时来执行管道,提供了管道和模型序列化(到 Bundle.ML)和反序列化支持。MLeap 具有所需的表达能力和对轻量级在线服务的支持。但是,它有自己专有的持久化格式,这限制了与序列化和反序列化普通 Spark MLlib 模型的工具集的互操作性。

MLeap 还引入了服务时行为偏离训练时评估的风险,因为在技术上,正在提供服务的模型加载时的格式与训练时内存中的格式不同。MLeap 还降低了 Spark 更新的速度,因为除了 Spark MLlib 本地使用的方法之外,还必须为每个转换器和估计器添加单独的 MLeap 保存 / 加载方法。Databricks 的 ML 模型导出 dbml-local 提供了类似的方法。

我们考虑的另一种方法就是将训练模型导出到一个标准的格式,如 预测模型标记语言(PMML) 或 可移植分析格式(PFA),它们都具备我们需要的表达能力并且可以和 Spark 交互,Spark 直接提供了 PMML 支持,而 aardpfark 可以将 Spark 模型导出为 PFA。然而,这些表示还是存在服务时行为偏离方面的风险,我们认为这一风险高于 MLeap,因为一般标准在特定的实现中通常会有不同的解释。这些标准在 Spark 更新速度方面也带来了更大的阻碍,因为根据 Spark 变化的性质,标准本身可能需要更新。

我们发现,最直接的方法是使用标准的 Spark ML 管道序列化来表示模型。Spark ML 管道展示了我们想要的表达能力,允许与 Michelangelo 之外的 Spark 工具集交互,展现出了低风险的模型解释偏差,对 Spark 的更新速度影响较小。它还有助于编写自定义的转换器和估计器。

我们看到,使用 Spark 管道序列化的主要挑战是它与在线服务需求的不兼容性(Nick Pentreath 在 2018 年的 Spark AI 峰会 上也讨论了这一点)。这种方法会启动一个本地 Spark 会话,并用它来加载一个训练好的 Spark MLlib 模型,这相当于在单台主机上运行一个小型集群,内存开销和延迟都很大,使它不适合许多在线服务场景要求的 p99 毫秒级延迟。虽然现有的用于提供服务的 Spark API 集在性能上还不足以满足 Uber 的用例,但我们发现,我们可以在这种开箱即用的体验中进行许多直接的更改,以满足我们的需求。

为了提供用于在线服务的轻量级接口,我们将 anOnlineTransformer添加 到可以提供在线服务的转换器中,包括利用低级 Spark 预测方法的单个方法和小型方法列表。我们还调整了模型加载的性能,以满足我们的目标开销要求。

使用增强型转换器和估计器的管道

为了实现一个可以由 Michelangelo 在线训练并提供服务的 Transformer 或 Estimator,我们构建了一个 OnlineTransformer 接口,它扩展了开箱即用的 Spark Transformer 接口,并执行两个方法:1)Transform(instance: Dataset[Any]) ;2)ScoreInstance(instance: Map[String, Any])。

Transform(instance: Dataset[Object]) 作为分布式批处理服务的入口,提供了开箱即用的基于数据集的执行模型。ScoreInstance(instance: Map[String, Object]): Map[String, Object] 作为较为轻量级的 API,用于低延迟、实时服务场景中出现的针对单一特征值映射集的单行预测请求。ScoreInstance 背后的动机是提供一个更轻量级的 API,它可以绕过依赖于 Spark SQL Engine 的 Catalyst Optimizer 的 Dataset 所带来的巨大开销,从而对每个请求进行查询规划和优化。如上所述,这对于实时服务场景(如市场营销和欺诈检测)非常重要,其中 p99 延迟的 SLA 通常是毫秒级的。

当加载 Spark PipelineModel 时,任何具有相似类(包含 OnlineTransformer 特性)的 Transformer 都会映射到该类。这使得现有的训练好的 Spark 模型(由支持的转换器组成)获得了提供在线服务的能力,而且没有任何额外的工作。注意,OnlineTransformer 还实现了 Spark 的 MLWritable 和 MLReadable 接口,这为 Spark 免费提供了对序列化和反序列化的本地支持。

保持在线和离线服务一致性

转向标准的 PipelineModel 驱动的架构,通过消除 PipelineModel 之外的任何自定义预评分和后评分实现,进一步加强了在线和离线服务准确性之间的一致性。在每个管道阶段,实现自定义评分方法时的标准实践是首先实现一个公共评分函数。在离线转换中,它可以作为 DataFrame 输入上的一组 Spark 用户定义函数(UDF)运行,相同的评分函数也可以应用于在线 scoreInstance 和 scoreInstances 方法。在线和离线评分一致性将通过单元测试和端到端集成测试进一步保证。

性能优化

我们最初的度量结果显示,与我们自定义的 protobuf 表示的加载延迟相比,原生 Spark 管道加载延迟非常高,如下表所示:

这种序列化模型加载时间上的性能差异对于在线服务场景是不可接受的。模型实际上被分片到每个在线预测服务实例中,并在每个服务实例启动时、新模型部署期间或接收到针对特定模型的预测请求时加载。在我们的多租户模型服务设置中,过长的加载时间会影响服务器资源的敏捷性和健康状况监控。我们分析了加载延迟的来源,并进行了一些调优更改。

影响所有转换器加载时间的一个开销来源是 Spark 本地使用 sc.textFile 读取转换器元数据;从一个小的单行文件生成一个字符串 RDD 非常慢。对于本地文件,用 Java I/O 替换这段代码要快得多:

[loadMetadata in src/main/scala/org/apache/spark/ml/util/ReadWrite.scala]

在我们的用例中(例如,LogisticRegression、StringIndexer 和 LinearRegression),影响许多转换器的另一个开销来源是对与转换器相关的少量数据使用 Spark 分布式 read/select 命令。对于这些情况,我们使用 ParquetUtil.read 代替 sparkSession.read.parquet;直接进行 Parquet read/getRecord 大大降低了转换器的加载时间。

树集成(Tree ensemble)转换器有一些特殊的调优机会。加载树集成模型需要将序列化到磁盘的模型元数据文件读取到磁盘,这会触发小文件的 groupByKey、sortByKey 以及 Spark 的分布式 read/select/sort/collect 操作,这些操作非常慢。我们直接用更快的 Parquet read/getRecord 代替了它们。在树集成模型保存方面,我们合并了树集成节点和元数据权重 DataFrame,以避免写入大量读起来很慢的小文件。

通过这些调优工作,我们能够将基准示例的本地 Spark 模型加载时间从 8 到 44 倍减少到仅比从自定义 protobuf 加载慢 2 到 3 倍,这相当于比 Spark 原生模型快 4 到 15 倍。考虑到使用标准表示的好处,这种水平的开销是可以接受的。

需要注意的是,Michelangelo 在线服务创建了一个本地的 SparkContext 来处理任何未加密的转换器的负载,因此,在线服务不需要 SparkContext。我们发现,当没有模型加载处于活动状态时,让 SparkContext 继续运行会对性能产生负面影响并导致延迟,例如,通过 SparkContext 清理器的操作。为了避免这种影响,我们在没有运行负载时停止 SparkContext。

可服务管道的灵活结构

使用管道模型作为 Michelangelo 的模型表示,用户可以灵活地组合和扩展可服务组件单元,使它们在线和离线服务时保持一致。然而,这并没有完全封装管道模型在机器学习工作流的各个阶段使用时的操作需求差异。有些操作步骤或概念本质上与机器学习工作流的特定阶段相关,而与其他阶段完全无关。例如,当用户对模型进行评估和迭代时,常常需要进行超参数优化、交叉验证以及生成模型解释及评估所需的特定元数据等操作。这些步骤允许用户帮助生成模型、与模型交互以及评估管道模型,但是一旦准备好进行产品化,就不应该将这些步骤合并到模型服务中。

同时,在机器学习工作流不同阶段的需求差异,促使我们开发了一个基于通用编排引擎的工作流和操作员框架。除了组合自定义可服务管道模型的灵活性之外,这还允许用户以有向图或工作流的形式组合和编排自定义操作的执行,以实现最终的可服务管道模型。

Michelangelo 基于 Operator Framework 的工作流提供了另一种程度的灵活性,通过优化的执行计划来方便地定制操作,从而生成可服务的、序列化的 Michelangelo 管道模型以及有用的工件。Apache Spark 是 Apache 软件基金会在美国和 / 或其他国家的注册商标。使用这个标记并不意味着 Apache 软件基金会的认可。Docker 和 Docker 标识是 Docker 公司在美国和 / 或其他国家的商标或注册商标。Docker 公司及其他各方也可以在本协议中使用的其他条款中享有商标权。本标记的使用并不意味着 Docker 的认可。TensorFlow、TensorFlow 标识及任何相关标识均为谷歌公司的商标。
Michelangelo 基于 Operator Framework 的工作流提供了另一种程度的灵活性,通过优化的执行计划来方便地定制操作,从而生成可服务的、序列化的 Michelangelo 管道模型以及有用的工件。Apache Spark 是 Apache 软件基金会在美国和 / 或其他国家的注册商标。使用这个标记并不意味着 Apache 软件基金会的认可。Docker 和 Docker 标识是 Docker 公司在美国和 / 或其他国家的商标或注册商标。Docker 公司及其他各方也可以在本协议中使用的其他条款中享有商标权。本标记的使用并不意味着 Docker 的认可。TensorFlow、TensorFlow 标识及任何相关标识均为谷歌公司的商标。

未来展望

在这一点上,Spark 原生模型表示已经在 Michelangelo 生产环境中运行了一年多,作为一种健壮且可扩展的方法,在我们公司范围内提供 ML 模型。得益于这种演变和 Michelangelo 平台的其他更新,Uber 的技术栈可以支持新的用例(如灵活的试验和在 Uber 的 数据科学工作台 中训练模型)、Jupyter 笔记本环境以及使用 TFTransformers 的端到端深度学习。为了介绍我们的经验并帮助其他人扩展他们自己的 ML 建模解决方案,我们在 2019 年 4 月的 Spark AI 峰会 上讨论了这些更新,并提交了 SPIP 和 JIRA,把我们对 Spark MLlib 的更改开源。

《美团机器学习实践》下载

美团作为国内 O2O 领域领 先的服务平台,结合自身的业务场景和数据,积极进行了人工智能领域的应用探索。在美团的搜索、推荐、计算广告、风控、图像处理等领域,相关的人工智能技术得到广泛的应用。本书包括通用流程、数据挖掘、搜索和推荐、计算广告、深度学习以及算法工程 6 大部分内容,全面介绍了美团在多个重要方面对机器学习的应用。

本书非常适合有一定机器学习基础的工程技术人员和在校大学生学习和阅读。通过本书,有经验的算法工程师可以了解美团在这方面的做法,在校大学生可以学习机器学习算法如何在具体的业务场景中落地。

下载:https://pan.baidu.com/s/1NC2aov1iszDQPEr09OyVCQ
提取码:841h

吴恩达《机器学习训练秘籍》完整中文版 – 更新

此前,我们发布了『吴恩达《机器学习训练秘籍》完整中文版』信息,目前该开源项目已迁移到新的地址。请在新的地址开始在线阅读《机器学习训练秘籍》样稿,相关代码开源地址如下:

Machine Learning Yearning
Machine Learning Yearning

GitHub地址项目 GitHub 地址

Gartner:2019年人工智能成熟度曲线的超前趋势

Gartner 的这种成熟度周期凸显出人工智能正以多种不同的方式影响企业

根据 Gartner 对 2019 年的 CIO 议程调查,2018 年至 2019 年间,部署人工智能 (AI) 的组织从 4% 增长到了14%。与几年前相比,人工智能正在以多种不同的方式影响组织,当时没有其他方法可以替代使用机器学习 (ML) 构建自己的解决方案。AutoML 和智能应用拥有较明显的发展势头,其他方法也同样值得关注——即人工智能平台即服务(AIPaaS)或人工智能云服务。受亚马逊 Alexa、谷歌 Assistant 等公司在全球范围内取得成功的推动,对话人工智能仍是企业规划日程中的首要内容。与此同时,诸如增强智能、边缘人工智能、数据标签和可解释的人工智能等新技术不断涌现。

今年的成熟度曲线出现了许多新技术,但被大众所知晓的有价值或目标的很少

Gartner 2019 年人工智能成熟度曲线审查了在 AI 领域的创新和趋势潮流,以及 AI 计划范围。快速跟风者,首先应该为 AI 设计一个商业案例。对于早期使用者来说,AI 的可扩展性是下一个挑战。

今年的成熟度周期包含了很多新技术,但被大众所知晓的有价值或目标的很少,而被主流应用的则少之又少。“这并不代表 AI 是不可用的。这表示它将会发生改变,为了评估 AI 的价值和风险,CIO 需要为其设定现实的预期。” Gartner 副总裁分析师 Svetlana Sicular 表示。

以下是 Sicular 重点介绍的人工智能技术,这些技术必须在 CIO 的计划上,才能在未来两到五年内对业务转型产生巨大影响。

Hype_Cycle_for_AI_2019
Hype_Cycle_for_AI_2019

增强型智能(Augmented intelligence)

增强型智能是以人为中心的 AI 与人协作提高认知能力的合作模式。它关注的是人工智能在提高人类能力方面的辅助作用。

AI 与人们互动,改善他们已经知道的事物,可以减少日常失误,并可以改善客户互动、市民服务和病人护理。增强型智能的目标是提高自动化的效率,同时辅以人性化和常识来管理决策自动化的风险。

吐槽:不再是我们日常所调戏的Siri和人工智障爱酱,开始追求更高的智慧,比如阿尔法狗这种,目前听说过的比较成功的就是游戏的黑科技外挂,星际 1、拳皇 97 的黑科技可以秒杀世界顶级选手,如果在其他领域开发出这样的增强型智能程序,是不是离 Skynet也不远了。

聊天机器人(ChatBots)

聊天机器人是 AI 的代表,影响着人们所有可交流的领域,比如汽车制造商 KIA,它每周与 11.5 万名用户对话,或者 Lidl 的 Winebot Margot,它提供购买葡萄酒的指导和食物搭配方面的建议。

聊天机器人可以基于文本或语音,也可以两者结合,并依赖于极少人为干预的脚本响应。

常见的应用程序存在于 HR、IT 帮助台和自助服务中,聊天机器人在客户服务领域已经产生极大影响,尤其是改变了客户服务的执行方式。从“用户学习界面”到“聊天机器人正在学习用户想要的东西”的转变,意味着对员工入职、工作效率和培训的更大影响。

机器学习(Machine Learning, ML)

机器学习可以解决业务问题,如个性化的客户服务、供应链推荐、动态定价、医疗诊断和反洗黑钱。ML 使用数学模型从数据中提取知识和模式。随着组织面临的数据量的指数增长和计算基础设施的改进,ML 的使用也在增加。

目前,ML 被用于多个领域和行业,以推动改进,并为业务问题找到新的解决方案。美国运通使用数据分析和 ML 算法来帮助检测几乎实时的欺诈行为,以节省数百万美元的损失。沃尔沃利用数据帮助预测零部件何时可能出现故障,何时需要维修,从而提高了其汽车的安全性。

AI 治理

组织不应该忽视 AI 治理。他们需要意识到潜在的监管和声誉风险。Sicular 说:“AI 治理是制定政策,对抗 AI 相关的偏见、歧视和 AI 其他负面影响的过程。”

确定数据源和算法的透明度要求,减少风险并增强信心

为了发展人工智能治理,数据和分析领导者和 CIO 应该关注三个领域:信任、透明度和多样性。他们需要关注对数据源和人工智能结果的信任,以确保人工智能的成功使用。他们还需要确定数据源和算法的透明度要求,以降低风险,增强对人工智能的信心。此外,应该确保数据、算法和观点的多样性,以追求人工智能的道德伦理和准确性。

智能应用

大多数组织对获取 AI 功能的偏好正在发生改变,更倾向于将其用于企业应用程序中。智能应用是具有嵌入式或集成 AI 技术的企业应用,通过智能自动化、以数据为基础的分析和指导建议来支持或替代基于人工的活动,以提高生产力和决策制定。

今天,企业应用程序供应商正在他们的产品中嵌入 AI 技术,并引入人工智能平台功能——从企业资源规划到客户关系管理,再到人力资源管理,再到劳动力生产率应用程序。

CIO 们应该向他们的外包软件供应商提出要求,需要他们在产品路线图中概述如何结合 AI,以高级分析、智能流程和高级用户体验的形式增加业务价值。

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 地址

计算机科学 (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 地址

最新《机器学习优化》教程

一、资源简介

普林斯顿大学在 19 年开设了 COS 598D《机器学习优化》课程的讲义,这个课程主要介绍机器学习中出现的优化问题,以及解决这些问题的有效算法。这份讲义内容详实循序渐进,非常适合想要入门机器学习优化的同学阅读。

官网:
https://sites.google.com/view/optimization4machinelearning/home

作者简介:
Elad Hazan :普林斯顿大学计算机系的教授,重点研究机器学习和优化的基本问题。曾获得贝尔实验室奖、2012 年和 2008 年 IBM 哥德堡最佳论文奖、欧洲研究理事会奖、居里夫人奖和谷歌研究奖。曾担任计算学习协会指导委员会委员,并担任 COLT 2015 项目主席。2017 年,创立了专注于高效优化与控制的In8 inc,并于 2018 年被谷歌收购。普林斯顿大学商学院的联合创始人和联合董事。

二、主要内容

下面是这份讲义的主要目录:

  1. 介绍
  2. 优化和分析的基本概念
  3. 随机梯度下降法
  4. 泛化和非光滑优化
  5. 正则化
  6. 自适应正则化
  7. 方差减少
  8. Nesterov加速度(Nesterov Acceleration)
  9. 条件梯度法
  10. 机器学习的二阶方法
  11. Hyperparameter优化(Hyperparameter Optimization)

新一代 MNIST 数据集 – QMNIST

在机器学习研究中,MNIST 手写数字图像数据集已经作为基准使用了二十余年。该数据集虽然经典,但也存在测试集过小等问题。近日,来自 Facebook 和纽约大学的研究者重建并扩展了该数据集,在测试集中新增了 50,000 个样本。MNIST 作者之一的 Yann LeCun 在推特中表示

如果多次使用原版的 MNIST 测试集,你的模型可能在测试集上已经过拟合了。是时候在新增的样本上试一下了。

MNIST 数据集
MNIST 数据集

MNIST 是一个由 Yann Lecun 等人创建的手写数字图像数据集,是研究者研究机器学习、模式识别等任务的高质量数据库。它包含训练集和测试集,训练集包含 60,000 个样本,测试集包含 10,000 个样本。

MNIST 数据集抽取自 NIST 数据库。NIST 手写字符集第一个分区的发布要早一年,其训练集是由 2,000 名人口普查局雇员手写的,而测试集更加有挑战性,是由 500 名在校生手写的。

LeCun、Cortes 和 Burges 的其中一个目的是创建一个分布相似的训练集和测试集。据他们描述,这个过程产生了两个 60,000 个样本的集合。然后通过下采样将测试集样本数降低到 10,000 个,可能是因为用当时的电脑处理这样一个数据集会非常慢。剩余的 50,000 个样本从此就丢失了。

20 多年来,MNIST 数据集都被认为是标准的机器学习基准。在过去的十年来,许多研究者都表达过这个数据集已经被过度使用的观点。尤其是其测试集过小,只有 10,000 样本,这引起了很多担忧。数以百计的论文都依据这同一个测试集,得到的性能越来越高。那么模型是否已经在测试集上过拟合?我们还能否相信在该数据集上取得的新结论?机器学习数据集到底能用多久?

为了解决原版 MNIST 测试集过小等问题,来自 Facebook 和研究者决定重建该数据集。QMNIST 的 GitHub 页上提供了 Pytorch 平台的 QMNIST 数据加载器,需要将数据集下载至与 pytorch.py 相同的文件夹下将网络下载选项设置为 download=’True’。

from qmnist import QMNIST

# the qmnist training set, download from the web if not found
qtrain = QMNIST('_qmnist', train=True, download=True)

# the qmnist testing set, do not download.
qtest = QMNIST('_qmnist', train=False)

# the first 10k of the qmnist testing set with extended labels
# (targets are a torch vector of 8 integers)
qtest10k = QMNIST('_qmnist', what='test10k', compat=False, download='True')

# all the NIST digits with extended labels
qall = QMNIST('_qmnist', what='nist', compat=False)

它与标准的 Pytorch MNIST 数据加载器兼容。

GitHub地址项目 GitHub 地址

机器学习科普大全

一、资源简介

机器学习作为人工智能领域里的一个重要部分,越来越多的人开始关注。但是大部分人对机器学习的了解不深入,不完整,甚至是存在一些误解。本文就是面向所有人的机器学习科普大全,涉及所有机器学习相关的关键知识点。

机器学习
机器学习

机器学习属于人工智能的范畴,所以我们需要先简单了解一下人工智能的 3 个关键要素:

数据;算法;算力

3 大要素
3 大要素

我们以制造桌子为例:木材就是数据,提供基础是素材;制造桌子的流水线就是一套算法,解决把木头变成桌子;工厂里的机器就是算力,机器越厉害,制造桌子的效率就越高,速度就越快。

二、主要内容目录

主要讲解的算法有:

  1. 线性回归
  2. 逻辑回归
  3. 线性判别分析
  4. 决策树
  5. 朴素贝叶斯
  6. K邻近算法
  7. 学习向量量化
  8. 支持向量机
  9. 随机森林
  10. Adaboost
  11. 限制玻尔兹曼机
  12. K均值聚类

三、资源分享

同时为了方便大家,我们把最新 PDF 已打包好,可以直接下载

机器学习科普大全

第二版《机器学习基础》发布

Foundations of Machine Learning

从 05 年到 19 年,Mehryar Mohri 在纽约大学已经教过 14 年的 Foundations of Machine Learning 课程。在 2012 年,他就完成了第一版的《机器学习基础》,这本书的数学氛围非常浓厚。2018 年 Mohri 等研究者又完成了第二版,现在第二版及其资料都已经开放下载。

书籍主页:https://cs.nyu.edu/~mohri/mlbook/

百度云下载地址:https://pan.baidu.com/s/194wEpl5fsyJHKE49uc92pg;提取码: xud2

机器学习基础》(Foundations of Machine Learning)是对机器学习的通用简介,可作为研究者的参考书和学生的教科书来使用。该书覆盖机器学习领域的基础现代话题,同时提供讨论和算法证明所需的理论基础与概念工具。这本书还介绍了算法应用的多个关键方面。

这本书旨在呈现最新的理论工具和概念,同时提供准确的证明。该书写作风格力求简洁,同时讨论了机器学习领域的一些关键复杂话题,以及多个开放性研究问题。一些经常与其他话题混合的话题以及没有得到足够关注的话题在本书中得到了单独讨论和重视,例如,这本书专门有一个章节讲多类别分类、排序和回归。

这本书覆盖了机器学习领域的大量重要话题,但作者也省略了个别话题,如图模型和流行的神经网络,这是出于简洁性的考虑,以及这些方法暂时缺少一些坚实的理论保证。

什么样的读者适合读

这本书针对的读者群体是机器学习、统计学及相关领域的学生和研究者。它可用作机器学习研究生和高年级本科生的教材,或者科研讨论会的参考书。

本书前三四章主要讲理论,为后续章节夯实理论基础。其他章各自独立,第 6 和 13 章除外,第六章介绍了和后面章节有关的一些概念,第 13 章和 第 12 章关联度很高。每一章的最后都有一系列练习题(附完整答案)。

本书希望读者熟悉、概率和算法分析。但是,为了进一步帮助到大家,这本书的扩展附录中还包括:对线性代数的概述、简介、概率论简介、对书中算法分析和讨论有用的一些集中不等式(Concentration inequality),以及简介。

第二版的小目标

Mehryar Mohri 等作者的目标是为多个主题和领域提供统一的内容框架,而不是其它书籍采用的专题展示。这些专题书籍只描述某个特殊的视角或主题,例如贝叶斯视角或核方法主题。这本书有比较强的理论基础,证明与分析也会着重强调,因此它相比很多书籍都有较大的差别。

在第二版中,作者们更新了整本书。其主要改变体现在很多章节的写作风格、新的图表可视化、简化的内容与推导过程、对现有章节的一些补充,特别是第 6 章与第 17 章等一些新的章节。此外,作者们新添了完整的章节「模型选择」(第四章),这是非常重要的一个主题,但以前只简要讨论过。

对于第二版的最后,作者在附录中添加了很多新内容,包括线性代数和概率论等数学基础,也包括了信息论等机器学习基础。另外,作者为新章节提供了很多练习题与解决方案,读者也可以做做习题。

补充资料

这本书提供了很多材料,其中大多数都是纽约大学 Mehryar Mohri 的课程机器学习基础(Foundations of Machine Learning)提供的。这门课已经开展了 14 年,这本书也是该课程的内容概述。Mehryar Mohri 表示,正因为该课程学生的一些好建议,第二版才能最终出版。

课程主页:https://cs.nyu.edu/~mohri/ml18/

该课程主页上有额外的家庭作业、课件和项目等资料,配合书籍使用效果更佳。

目录

1~4.3
1~4.3
4.4~7.2
4.4~7.2
7.3~10.3
7.3~10.3
10.4~12.9
10.4~12.9
12.1~16.1
12.1~16.1
16.2~17.6
16.2~17.6