提交 461e4a7e 编写于 作者: W wizardforcel

2020-12-06 13:09:27

上级 ba3529b2
# 前言
**人工智能** **AI** )的最新发展已将强大的力量交在人类手中。 权力越大,责任就成比例。 无人驾驶汽车,聊天机器人和对未来的日益准确的预测只是 AI 能够超越人类增长和进步能力的几个例子。
**人工智能****AI**)的最新发展已将强大的力量交在人类手中。 权力越大,责任就成比例。 无人驾驶汽车,聊天机器人和对未来的日益准确的预测只是 AI 能够超越人类增长和进步能力的几个例子。
人工智能正在成为一条核心的,变革性的道路,正在改变我们思考生活各个方面的方式。 它正在影响行业。 它正在变得越来越普遍,并嵌入到我们的日常生活中。 最令人兴奋的是,这是一个仍处于起步阶段的领域:AI 革命才刚刚开始。
......@@ -80,7 +80,7 @@
*第 15 章**自然语言处理*
本章将重点介绍 AI 的重要领域,即**自然语言处理** **NLP** )。 它将讨论各种概念,例如标记化,词干化和词形化处理文本。 它还将介绍如何构建“语言袋”模型并将其用于分类文本。 它将演示如何使用机器学习来分析给定句子的情感。 最后,它将显示主题建模并介绍用于识别文档中主题的系统实现。
本章将重点介绍 AI 的重要领域,即**自然语言处理****NLP**)。 它将讨论各种概念,例如标记化,词干化和词形化处理文本。 它还将介绍如何构建“语言袋”模型并将其用于分类文本。 它将演示如何使用机器学习来分析给定句子的情感。 最后,它将显示主题建模并介绍用于识别文档中主题的系统实现。
*第 16 章**聊天机器人*
......@@ -110,7 +110,7 @@
*第 22 章**通过强化学习创建智能代理*
本章将定义**强化学习** **RL** ),并涵盖 RL 模型中的组件。 它将详细介绍用于构建 RL 系统的技术。 最后,它将演示如何构建可以通过与环境交互进行学习的学习代理。
本章将定义**强化学习****RL**),并涵盖 RL 模型中的组件。 它将详细介绍用于构建 RL 系统的技术。 最后,它将演示如何构建可以通过与环境交互进行学习的学习代理。
*第 23 章**人工智能和大数据*
......
......@@ -2,7 +2,7 @@
# 人工智能简介
在本章中,我们将讨论**人工智能** **AI** )的概念及其在现实世界中的应用。 我们在日常生活中花费了大量时间与智能系统进行交互。 这可以采取以下形式:在互联网上搜索某些内容,进行生物特征识别的面部识别或将口语单词转换为文本。 人工智能是这一切的核心,它正在成为我们现代生活方式的重要组成部分。 所有这些系统都是复杂的实际应用程序,而 AI 通过数学和算法解决了这些问题。 在整本书中,我们将学习可用于构建此类应用程序的基本原理。 我们的总体目标是使您能够应对日常生活中可能遇到的具有挑战性的新 AI 问题。
在本章中,我们将讨论**人工智能****AI**)的概念及其在现实世界中的应用。 我们在日常生活中花费了大量时间与智能系统进行交互。 这可以采取以下形式:在互联网上搜索某些内容,进行生物特征识别的面部识别或将口语单词转换为文本。 人工智能是这一切的核心,它正在成为我们现代生活方式的重要组成部分。 所有这些系统都是复杂的实际应用程序,而 AI 通过数学和算法解决了这些问题。 在整本书中,我们将学习可用于构建此类应用程序的基本原理。 我们的总体目标是使您能够应对日常生活中可能遇到的具有挑战性的新 AI 问题。
到本章末,您将了解:
......@@ -195,9 +195,9 @@
# 通用问题解决器
**通用问题解决器** **GPS** )是由 Herbert Simon,J.C。Shaw 和 Allen Newell 提出的 AI 程序。 它是 AI 世界中第一个有用的计算机程序。 目的是使其能够作为通用的问题解决机器。 当然,以前有很多软件程序,但是这些程序执行特定的任务。 GPS 是第一个旨在解决任何一般问题的程序。 GPS 应该针对每个问题使用相同的基本算法来解决所有问题。
**通用问题解决器****GPS**)是由 Herbert Simon,J.C。Shaw 和 Allen Newell 提出的 AI 程序。 它是 AI 世界中第一个有用的计算机程序。 目的是使其能够作为通用的问题解决机器。 当然,以前有很多软件程序,但是这些程序执行特定的任务。 GPS 是第一个旨在解决任何一般问题的程序。 GPS 应该针对每个问题使用相同的基本算法来解决所有问题。
您一定已经意识到,这是艰巨的战斗! 为了对 GPS 进行编程,作者创建了一种新语言,称为**信息处理语言** **IPL** )。 基本前提是使用一组格式正确的公式来表达任何问题。 这些公式将成为有多个源和汇的有向图的一部分。 在图中,源是指起始节点,宿是指终止节点。 对于 GPS,源是公理,汇是结论。
您一定已经意识到,这是艰巨的战斗! 为了对 GPS 进行编程,作者创建了一种新语言,称为**信息处理语言****IPL**)。 基本前提是使用一组格式正确的公式来表达任何问题。 这些公式将成为有多个源和汇的有向图的一部分。 在图中,源是指起始节点,宿是指终止节点。 对于 GPS,源是公理,汇是结论。
即使 GPS 只是通用的,它也只能解决明确定义的问题,例如证明几何和逻辑上的数学定理。 它还可以解决单词拼图和下棋。 原因是这些问题可以在合理范围内形式化。 但是在现实世界中,由于您可以采取多种可能的途径,因此这很快变得很棘手。 如果它试图通过计算图表中的步数来强行解决问题,则完全无法计算 。
......
......@@ -2,7 +2,7 @@
# 人工智能的基本用例
在本章中,我们将讨论**人工智能** **AI** )的一些用例。 这绝不是详尽的清单。 许多行业已受到 AI 的影响,但尚未受影响的那些行业的清单每天都在缩短。 具有讽刺意味的是,机器人,自动化和 AI 无法接手的某些工作是薪水较低,需要较少“大脑”力量的工作。 例如,在我们能够代替发型师和水管工之前还需要一段时间。 这两项工作都需要机器人还需要掌握很多技巧和细节。 我知道,我的妻子要花很长时间才能将她的头发信任除当前发型师以外的任何人,更不用说机器人了。
在本章中,我们将讨论**人工智能****AI**)的一些用例。 这绝不是详尽的清单。 许多行业已受到 AI 的影响,但尚未受影响的那些行业的清单每天都在缩短。 具有讽刺意味的是,机器人,自动化和 AI 无法接手的某些工作是薪水较低,需要较少“大脑”力量的工作。 例如,在我们能够代替发型师和水管工之前还需要一段时间。 这两项工作都需要机器人还需要掌握很多技巧和细节。 我知道,我的妻子要花很长时间才能将她的头发信任除当前发型师以外的任何人,更不用说机器人了。
本章将讨论:
......@@ -14,13 +14,13 @@
从金融到医学,很难找到一个不受人工智能干扰的行业。 我们将重点关注日常生活中最流行的 AI 应用的真实示例。 我们将探索当前的技术水平以及即将发生的事情。 最重要的是,也许这本书会激发您的想象力,并且您会提出一些对社会产生积极影响的新想法,我们可以将其添加到本书的下一版中。
人工智能,认知计算,机器学习和深度学习只是当今促成快速变化的一些破坏性技术。 由于云计算,**物联网** **IoT** )和边缘计算的进步,可以更快地采用这些技术。 通过将所有这些技术整合在一起,组织正在重塑开展业务的方式。 这仅仅是个开始; 我们甚至不在第一局,甚至还没有记录过第一击!
人工智能,认知计算,机器学习和深度学习只是当今促成快速变化的一些破坏性技术。 由于云计算,**物联网****IoT**)和边缘计算的进步,可以更快地采用这些技术。 通过将所有这些技术整合在一起,组织正在重塑开展业务的方式。 这仅仅是个开始; 我们甚至不在第一局,甚至还没有记录过第一击!
到此为止,让我们开始看一下 AI 的一些当代应用。
# 数字个人助理和聊天机器人
不幸的是,对于某些呼叫中心来说,仍然太普遍以至于无法使用制作为的传统**交互式语音响应** **IVR** **系统** 称他们为耐心锻炼。 但是,我们在自然语言处理领域取得了巨大的进步:聊天机器人。 一些最受欢迎的示例是:
不幸的是,对于某些呼叫中心来说,仍然太普遍以至于无法使用制作为的传统**交互式语音响应****IVR****系统** 称他们为耐心锻炼。 但是,我们在自然语言处理领域取得了巨大的进步:聊天机器人。 一些最受欢迎的示例是:
* **Google 助手**:Google 助手于 2016 年启动,是目前可用的最高级聊天机器人之一。 可以在各种设备中找到它,例如电话,耳机,扬声器,洗衣机,电视和冰箱。 如今,大多数 Android 手机都包含 Google Assistant。 Google Home 和 Nest Home Hub 也支持 Google Assistant。
* **Amazon Alexa** :Alexa 是由 Amazon 开发和销售的虚拟助手。 它可以通过语音和执行命令(例如播放音乐,创建待办事项,设置警报,播放有声读物和回答基本问题)与用户互动。 它甚至可以按需告诉您一个笑话或故事。 Alexa 还可以用于控制兼容的智能设备。 开发人员可以通过安装技能来扩展 Alexa 的功能。 Alexa 技能是第三方供应商开发的其他功能。
......@@ -107,7 +107,7 @@ Waymo 于 2018 年在美国亚利桑那州推出了首项商业无人驾驶服
**Uber ATG**
Uber 的**先进技术小组** **ATG** )是 Uber 的子公司,致力于开发自动驾驶技术。 2016 年,Uber 在匹兹堡的街道上推出了一项实验性汽车服务。 优步计划购买多达 24,000 辆沃尔沃 XC90,并为其配备自动驾驶技术,并于 2021 年开始以一定容量实现商业化。
Uber 的**先进技术小组****ATG**)是 Uber 的子公司,致力于开发自动驾驶技术。 2016 年,Uber 在匹兹堡的街道上推出了一项实验性汽车服务。 优步计划购买多达 24,000 辆沃尔沃 XC90,并为其配备自动驾驶技术,并于 2021 年开始以一定容量实现商业化。
可悲的是,2018 年 3 月,伊莱恩·赫兹伯格(Elaine Herzberg)参与了一辆 Uber 无人驾驶汽车的事故并死亡。 根据警方的报道,她在试图通过手机观看视频时,试图过马路时被 Uber 车辆撞倒。 赫兹伯格女士成为涉及无人驾驶汽车的事故中首批死亡的人之一。 理想情况下,我们希望这种技术不会发生任何事故,但是我们需要根据当前交通事故带来的危机来调整我们要求的安全水平。 就背景而言,2017 年美国有 40,100 辆汽车死亡; 即使我们继续看到无人驾驶汽车发生事故,如果将死亡人数削减一半,每年也可以挽救数千人的生命。
......@@ -133,11 +133,11 @@ AI 可以协助生成候选药物(即要在医学上测试的分子),然
此外,在某些情况下,我们可以在计算机中模拟实验,否则在现实生活中执行该实验会更加昂贵。
此外,在某些情况下,研究人员仍在进行真实世界的实验,但依靠机器人进行实验并加快处理过程。 这些新兴领域被称为**高通量筛选** **HTS** )和**虚拟高通量筛选****VHTS** )。
此外,在某些情况下,研究人员仍在进行真实世界的实验,但依靠机器人进行实验并加快处理过程。 这些新兴领域被称为**高通量筛选****HTS**)和**虚拟高通量筛选****VHTS**)。
机器学习已开始越来越多地用于增强临床试验。 埃森哲咨询公司开发了一种称为**智能临床试验** **ITP** )的工具。 它用于预测临床试验的时间。
机器学习已开始越来越多地用于增强临床试验。 埃森哲咨询公司开发了一种称为**智能临床试验****ITP**)的工具。 它用于预测临床试验的时间。
可以令人惊讶地使用的另一种方法是应用于药物发现的方法是**自然语言处理** **NLP** )。 可以使用一串字母来表示基因组数据,并且可以使用 NLP 技术来处理或“理解”基因组序列的含义。
可以令人惊讶地使用的另一种方法是应用于药物发现的方法是**自然语言处理****NLP**)。 可以使用一串字母来表示基因组数据,并且可以使用 NLP 技术来处理或“理解”基因组序列的含义。
**保险定价**
......@@ -165,7 +165,7 @@ AI 可以协助生成候选药物(即要在医学上测试的分子),然
数据科学家开发了支持 AI 的平台,与传统方法相比,该平台可以在几分钟(而不是几天)内解释 MRI 扫描和放射图像,并且准确性更高。
令人惊讶的是,美国放射学院的领导者们对此并不感到担心,而是将 AI 的出现视为对医生有价值的工具。 为了促进该领域的进一步发展,**美国放射学院数据研究所** **ACR DSI** )发布了医学成像中的多个 AI 用例,并计划继续发布 更多。
令人惊讶的是,美国放射学院的领导者们对此并不感到担心,而是将 AI 的出现视为对医生有价值的工具。 为了促进该领域的进一步发展,**美国放射学院数据研究所****ACR DSI**)发布了医学成像中的多个 AI 用例,并计划继续发布 更多。
**精神病学分析**
......@@ -265,7 +265,7 @@ Pandora 的推荐器基于多个层次:
机器人顾问是推荐引擎,可在最少人参与的情况下提供投资或财务建议和管理。 这些服务使用机器学习来自动分配,管理和优化客户的资产组合。 他们可以以比传统顾问更低的成本提供这些服务,因为它们的开销更低,并且其方法更具可扩展性。
现在,在这个领域竞争激烈,有超过 100 家公司提供此类服务。 机器人顾问被认为是一个巨大的突破。 以前,财富管理服务是专为高净值人士提供的专有且昂贵的服务。 与传统的人工服务相比,机器人顾问承诺以更低的成本向更广泛的受众提供类似的服务。 机器人顾问可以潜在地将投资分配到各种各样的投资产品中,例如股票,债券,期货,商品,房地产以及其他外来投资。 但是,为了简单起见,投资通常限于**交易所交易基金** **ETF** )。
现在,在这个领域竞争激烈,有超过 100 家公司提供此类服务。 机器人顾问被认为是一个巨大的突破。 以前,财富管理服务是专为高净值人士提供的专有且昂贵的服务。 与传统的人工服务相比,机器人顾问承诺以更低的成本向更广泛的受众提供类似的服务。 机器人顾问可以潜在地将投资分配到各种各样的投资产品中,例如股票,债券,期货,商品,房地产以及其他外来投资。 但是,为了简单起见,投资通常限于**交易所交易基金****ETF**)。
正如我们提到的,有许多公司提供机器人咨询。 例如,您可能需要研究 Betterment 以了解有关此主题的更多信息。 填写风险调查表后,Betterment 将为用户提供定制的,多样化的产品组合。 通常,Betterment 将推荐低收费股票和债券指数基金的组合。 Betterment 收取管理费(占产品组合的百分比),但低于大多数人力服务。 请注意,我们不认可这项服务,我们仅将其作为金融行业推荐引擎的示例。
......@@ -425,7 +425,7 @@ Deepfake 是*术语*或“深度学习”和“ fake”的混合。 这是一种
他们不会很快获得的奥斯卡金像奖,但是有两个项目致力于制作电影剧本。 最著名的例子之一是 Sunspring。
《 Sunspring》是一部实验科幻短片,于 2016 年发行。它完全是使用深度学习技术编写的。 这部电影的剧本是使用名为本杰明(Benjamin)的**长短期记忆** **LSTM** )模型创建的。 它的创作者是由 BAFTA 提名的电影人奥斯卡·夏普(Oscar Sharp)和纽约大学 AI 研究人员罗斯·古德温(Ross Goodwin)。 电影中的演员是托马斯·米德迪奇,伊丽莎白·格雷和汉弗莱·克尔。 它们的字符名称分别是 H,H2 和 C,它们将保留在未来。 他们最终相互联系,形成了三角恋。
《 Sunspring》是一部实验科幻短片,于 2016 年发行。它完全是使用深度学习技术编写的。 这部电影的剧本是使用名为本杰明(Benjamin)的**长短期记忆****LSTM**)模型创建的。 它的创作者是由 BAFTA 提名的电影人奥斯卡·夏普(Oscar Sharp)和纽约大学 AI 研究人员罗斯·古德温(Ross Goodwin)。 电影中的演员是托马斯·米德迪奇,伊丽莎白·格雷和汉弗莱·克尔。 它们的字符名称分别是 H,H2 和 C,它们将保留在未来。 他们最终相互联系,形成了三角恋。
最初在科幻-伦敦电影节的 48 小时挑战赛上放映,并于 2016 年 6 月由技术新闻网站 Ars Technica 在线发布。
......
......@@ -298,7 +298,7 @@
* **自动化**:尽可能早地自动化训练和模型发布。
* **可扩展性**:如果需要定期更新模型,则需要从头开始制定计划。
* **模块化**:尽可能地对代码进行模块化,并确保已放置控件以忠实地再现跨环境的管道(DEV,QA,TEST)。
* **测试**:分配时间表的重要部分以测试机器学习管道。 尽可能使自动化,并从一开始就将其集成到您的过程中。 探索**测试驱动开发** **TDD** )和**行为驱动开发****BDD** )。
* **测试**:分配时间表的重要部分以测试机器学习管道。 尽可能使自动化,并从一开始就将其集成到您的过程中。 探索**测试驱动开发****TDD**)和**行为驱动开发****BDD**)。
## 性能监控
......@@ -333,7 +333,7 @@
### 服务表现
不在业务问题的上下文中的技术是没有用的。 企业经常与技术部门签订**服务级别协议** **SLA** ),或至少应该拥有。 SLA 的示例:
不在业务问题的上下文中的技术是没有用的。 企业经常与技术部门签订**服务级别协议****SLA**),或至少应该拥有。 SLA 的示例:
* 在一天内修复所有关键错误
* 确保 API 在 100 毫秒内响应
......
......@@ -234,7 +234,7 @@ g=sns.heatmap(data[top_corr_features].corr(),annot=True,cmap="RdYlGn")
在上一章中,我们探讨了贷款违约问题。 凭直觉,可以推测,如果借款人的工资高,借款人的违约率就会降低。 同样,我们可以假设,与余额较低的人相比,信用卡余额较大的借款人可能很难偿还这些余额。
现在我们有了新知识,让我们尝试直观地确定谁将偿还贷款,谁不偿还贷款。 如果借款人 *A* 的信用卡余额为$ 10,000,而借款人 *B* 的余额为$ 20,000,您认为谁有更大的机会还清债务? 如果没有其他信息,我们可以说借款人 *A* 是更安全的选择。 现在,如果我告诉您借款人 *A* 年收入为 20,000 美元,借款人 *B* 年收入为 100,000 美元,该怎么办? 那改变了一切,不是吗? 我们如何定量捕捉两个特征之间的关系? 银行经常使用所谓的,**债务与收入** **DTI** )比率,该比率的计算方法如下:
现在我们有了新知识,让我们尝试直观地确定谁将偿还贷款,谁不偿还贷款。 如果借款人 *A* 的信用卡余额为$ 10,000,而借款人 *B* 的余额为$ 20,000,您认为谁有更大的机会还清债务? 如果没有其他信息,我们可以说借款人 *A* 是更安全的选择。 现在,如果我告诉您借款人 *A* 年收入为 20,000 美元,借款人 *B* 年收入为 100,000 美元,该怎么办? 那改变了一切,不是吗? 我们如何定量捕捉两个特征之间的关系? 银行经常使用所谓的,**债务与收入****DTI**)比率,该比率的计算方法如下:
![](img/B15441_04_001.png)
......
......@@ -643,7 +643,7 @@ Whit e 表示较高的值,而黑色表示较低的值,如在图像右侧的
# 支持 ort 矢量机
**支持向量机** **SVM** )是分类器,使用类别之间的分隔超平面进行定义。 此**超平面**是直线的 N 维版本。 给定带标签的训练数据和二进制分类问题,SVM 会找到将训练数据分为两类的最佳超平面。 这很容易扩展到`N`类的问题。
**支持向量机****SVM**)是分类器,使用类别之间的分隔超平面进行定义。 此**超平面**是直线的 N 维版本。 给定带标签的训练数据和二进制分类问题,SVM 会找到将训练数据分为两类的最佳超平面。 这很容易扩展到`N`类的问题。
让我们考虑具有两类点的二维情况。 考虑到它是 2D,我们只必须处理 2D 平面上的点和线。 这比在高维空间中的矢量和超平面更容易可视化。 当然,这是 SVM 问题的简化版本,但是在将其应用于高维数据之前,了解它并对其进行可视化非常重要。
......@@ -959,13 +959,13 @@ R2 score = 0.86
New mean absolute error = 0.59
```
**平均绝对误差** **MAE** )是绝对误差的平均值:
**平均绝对误差****MAE**)是绝对误差的平均值:
![](img/B15441_05_002.png)
其中 *y* <sub style="font-style: italic;">i</sub> 是预测值, *x* <sub style="font-style: italic;">i</sub> 是实际值。
**均方误差** **MSE** )是误差平方的平均值,即,预测值和实际值之间的均方差。 由于随机性,MSE 几乎总是严格为正(而不是零)。 MSE 是评估器质量的度量。 它始终是非负值,并且值越接近零越好。
**均方误差****MSE**)是误差平方的平均值,即,预测值和实际值之间的均方差。 由于随机性,MSE 几乎总是严格为正(而不是零)。 MSE 是评估器质量的度量。 它始终是非负值,并且值越接近零越好。
解释的差异衡量模型占数据集中差异的比例。 通常,将变异量化为方差; 还可以使用更具体的术语解释方差。 总变化的其余部分是无法解释的或剩余的变化。
......
......@@ -397,7 +397,7 @@ plt.show()
# 什么是高斯混合模型?
在讨论**高斯混合模型** **GMM** )之前,让我们首先了解什么是混合模型。 混合模型是一种概率密度模型,其中假定数据由几种成分分布控制。 如果这些分布是高斯分布,则该模型将变为高斯混合模型。 组合这些成分分布以提供多峰密度函数,该函数成为混合模型。
在讨论**高斯混合模型****GMM**)之前,让我们首先了解什么是混合模型。 混合模型是一种概率密度模型,其中假定数据由几种成分分布控制。 如果这些分布是高斯分布,则该模型将变为高斯混合模型。 组合这些成分分布以提供多峰密度函数,该函数成为混合模型。
让我们看一个示例,以了解混合模型如何工作。 我们要模拟南美所有人的购物习惯。 做到这一点的一种方法是对整个大陆进行建模,然后将所有内容拟合为一个模型,但是不同国家/地区的人购物方式不同。 因此,我们需要了解各个国家/地区的人们如何购物以及他们的行为方式。
......@@ -407,7 +407,7 @@ plt.show()
需要注意的有趣一点是,混合模型是半参数的,这意味着它们部分依赖于一组预定义的函数。 它们可以为数据的基础分布建模提供更高的精度和灵活性。 它们可以消除因稀疏数据而导致的差距。
定义函数后,混合模型将从半参数变为参数。 因此, GMM 是一个参数模型,表示为分量高斯函数的加权和。 我们假设数据是由一组以某种方式组合的高斯模型生成的。 GMM 非常强大,并用于许多领域。 GMM 的参数是使用算法(例如**期望最大化** **EM** )或**最大后验身**([ **MAP** )估算。 GMM inc 的一些流行应用包括图像数据库检索,股票市场波动建模,生物特征验证等。
定义函数后,混合模型将从半参数变为参数。 因此, GMM 是一个参数模型,表示为分量高斯函数的加权和。 我们假设数据是由一组以某种方式组合的高斯模型生成的。 GMM 非常强大,并用于许多领域。 GMM 的参数是使用算法(例如**期望最大化****EM**)或**最大后验身**([ **MAP** )估算。 GMM inc 的一些流行应用包括图像数据库检索,股票市场波动建模,生物特征验证等。
现在我们已经描述了什么是 GMM,让我们看看如何应用它们。
......
......@@ -18,7 +18,7 @@
# 什么是逻辑编程?
逻辑编程是一种编程范例,基本上意味着它是一种进行编程的方法。 在我们讨论它的构成及其在**人工智能** **AI** )中的相关性之前,让我们先讨论一下编程范例。
逻辑编程是一种编程范例,基本上意味着它是一种进行编程的方法。 在我们讨论它的构成及其在**人工智能****AI**)中的相关性之前,让我们先讨论一下编程范例。
编程范例的概念源于对编程语言进行分类的需求。 它是指计算机程序通过代码解决问题的方式。
......
......@@ -33,7 +33,7 @@
## 不知情或知情的搜索
如果您熟悉计算机科学,则可能听说过深度优先搜索( **DFS** ),**广度优先 搜索****BFS** ),以及**统一成本搜索****UCS** )。 这些是搜索技术,其中通常用于图形上以获得解决方案。 这些是不知情的搜索示例。 他们不使用任何先验信息或规则来消除某些路径。 他们检查所有可能的路径并选择最佳路径。
如果您熟悉计算机科学,则可能听说过深度优先搜索(**DFS**),**广度优先 搜索****BFS**),以及**统一成本搜索****UCS**)。 这些是搜索技术,其中通常用于图形上以获得解决方案。 这些是不知情的搜索示例。 他们不使用任何先验信息或规则来消除某些路径。 他们检查所有可能的路径并选择最佳路径。
另一方面,启发式搜索称为**通知搜索**,因为它使用先验信息或规则来消除不必要的路径。 不了解情况的搜索技术不会考虑目标。 不了解情况的搜索技术会盲目搜索,并且对最终解决方案没有先验知识。
......@@ -45,7 +45,7 @@
有许多必须在约束条件下解决的问题。 这些约束基本上是解决问题的过程中不能违反的条件。
这些问题称为**约束满意度问题** **CSP** )。
这些问题称为**约束满意度问题****CSP**)。
为了获得一些直观的理解,让我们快速看一下 Sudoku 拼图的示例部分。 数独游戏是我们不能在水平线,垂直线或同一方块中两次拥有相同的数字。 这是数独板的示例:
......
......@@ -21,7 +21,7 @@
遗传算法是一种进化算法。 因此,为了理解遗传算法,我们需要讨论进化算法。 进化算法是一种运用启发式原理解决问题的元启发式优化算法。 进化的概念就像我们在自然界中发现的那样。 就像环境通过进化积极驱动“解决方案”一样,我们直接使用问题的函数和变量来得出解决方案。 但是在遗传算法中,任何给定的问题都以该算法操纵的位模式进行编码。
自主地解决问题是人工智能和机器学习的中心目标。 **遗传算法** **GA** )是一种进化计算技术,可自动解决问题,而无需用户事先知道或指定解决方案的形式或结构。 从最抽象的层次上讲,GA 是计算机自动解决问题的一种系统的,与领域无关的方法,它从需要做什么的高级说明开始 e。
自主地解决问题是人工智能和机器学习的中心目标。 **遗传算法****GA**)是一种进化计算技术,可自动解决问题,而无需用户事先知道或指定解决方案的形式或结构。 从最抽象的层次上讲,GA 是计算机自动解决问题的一种系统的,与领域无关的方法,它从需要做什么的高级说明开始 e。
进化算法的基本步骤如下:
......@@ -351,7 +351,7 @@ if __name__ == "__main__":
# 可视化演变
让我们看看如何可视化演变过程。 在`DEAP`中,有一种称为**协方差矩阵适应演化策略** **CMA-ES** )的方法可以可视化演化。 是一种进化算法,用于解决连续域中的非线性问题。 CMA-ES 技术是可靠的,经过充分研究的,并且在进化算法中被认为是“最新技术”。 通过深入研究源代码来看看它是如何工作的。 以下代码是`DEAP`库中显示的示例的微小变化。
让我们看看如何可视化演变过程。 在`DEAP`中,有一种称为**协方差矩阵适应演化策略****CMA-ES**)的方法可以可视化演化。 是一种进化算法,用于解决连续域中的非线性问题。 CMA-ES 技术是可靠的,经过充分研究的,并且在进化算法中被认为是“最新技术”。 通过深入研究源代码来看看它是如何工作的。 以下代码是`DEAP`库中显示的示例的微小变化。
创建一个新的 Python 文件并导入以下内容:
......@@ -624,7 +624,7 @@ def eval_func(individual, points):
func = toolbox.compile(expr=individual)
```
计算先前定义的函数和原始表达式之间的**均方误差** **MSE** ):
计算先前定义的函数和原始表达式之间的**均方误差****MSE**):
```py
# Evaluate the mean squared error
......
......@@ -62,7 +62,7 @@ AWS 还拥有一支由顾问组成的大军,致力于帮助其客户部署 AWS
传统的工作负载通常由传统上是 Microsoft 客户的客户在 Azure 上运行,并试图利用他们以前在该技术堆栈中的投资。
对于新的云部署,由于 Microsoft 为应用程序开发提供了强大的产品,专业的**平台即服务** **PaaS** )功能,数据存储,机器,Azure 云服务之所以吸引人 ]学习和**物联网****IoT** )服务。
对于新的云部署,由于 Microsoft 为应用程序开发提供了强大的产品,专业的**平台即服务****PaaS**)功能,数据存储,机器,Azure 云服务之所以吸引人 ]学习和**物联网****IoT**)服务。
在战略上致力于 Microsoft 技术堆栈的企业已经能够在生产中部署许多大型应用程序。 当开发人员完全致力于 Microsoft 产品套件(例如.NET 应用程序),然后将其部署在 Azure 上时,Azure 尤其有用。 微软之所以能够深入市场,是因为其经验丰富的销售人员和广泛的合作伙伴网络。
......@@ -78,7 +78,7 @@ Gartner 的一份报告指出:“ *微软对未来具有独特的愿景,涉
他们最近加强了销售人员,他们有足够的财力,并且有强烈的动机要不落伍,所以不要打折扣。
Google 作为机器学习领导者的声誉无可争议,因此 GCP 拥有强大的大数据和机器学习产品也就不足为奇了。 但是 GCP 也在取得进展,吸引了较大的企业,这些企业希望托管诸如 SAP 和其他传统**客户关系管理** **CRM** )系统之类的传统工作负载。
Google 作为机器学习领导者的声誉无可争议,因此 GCP 拥有强大的大数据和机器学习产品也就不足为奇了。 但是 GCP 也在取得进展,吸引了较大的企业,这些企业希望托管诸如 SAP 和其他传统**客户关系管理****CRM**)系统之类的传统工作负载。
Google 在机器学习,自动化,容器和网络方面的内部创新以及 TensorFlow 和 Kubernetes 等产品具有先进的云开发能力。 GPS 的技术围绕着对开源的贡献。
......@@ -120,7 +120,7 @@ Oracle 云基础架构(OCI)是于 2016 年推出的第二代服务,旨在
OCI 同时提供虚拟服务器和裸机服务器,并一键式安装和配置 Oracle 数据库和容器服务。
OCI 吸引具有 Oracle 工作负载的客户,这些工作负载只需要基本的**基础架构即服务** **IaaS** )功能。
OCI 吸引具有 Oracle 工作负载的客户,这些工作负载只需要基本的**基础架构即服务****IaaS**)功能。
Oracle 的云战略依赖于其应用程序,数据库和中间件。
......@@ -182,7 +182,7 @@ Amazon SageMaker 使开发人员可以在整个机器学习管道中提高生产
**算法调整和优化** – Amazon SageMaker 提供自动模型调整,也称为超参数调整。 调整通过在指定的超参数范围内使用相同的输入数据集和相同的算法运行多个迭代来找到模型的最佳参数集。 随着培训工作的进行,计分卡将保留该模型的最佳性能版本。 “最佳”的定义基于预定义的指标。
例如,假设我们正在尝试解决二进制分类问题。 目标是通过训练 XGBoost 算法模型,最大化算法的曲线( **AUC** )度量下的面积。 我们可以为该算法调整以下超参数:
例如,假设我们正在尝试解决二进制分类问题。 目标是通过训练 XGBoost 算法模型,最大化算法的曲线(**AUC**)度量下的面积。 我们可以为该算法调整以下超参数:
* `alpha`
* `eta`
......@@ -228,7 +228,7 @@ Amazon Lex 是用于建立对话代理的服务。 Amazon Lex 和其他聊天机
## Amazon Comprehend –自然语言处理
Amazon Comprehend 是 AWS 提供的**自然语言处理** **NLP** )服务。 它使用机器学习来分析内容,执行实体识别以及发现隐式和显式关系。 公司开始意识到他们每天产生的大量数据中都有有价值的信息。 可以从客户的电子邮件,支持通知单,产品评论,呼叫中心对话和社交媒体互动中确定有价值的见解。 直到最近,尝试获得这些见解都在成本上处于禁止状态,但是 Amazon Comprehend 之类的工具使对大量数据进行分析具有成本效益。
Amazon Comprehend 是 AWS 提供的**自然语言处理****NLP**)服务。 它使用机器学习来分析内容,执行实体识别以及发现隐式和显式关系。 公司开始意识到他们每天产生的大量数据中都有有价值的信息。 可以从客户的电子邮件,支持通知单,产品评论,呼叫中心对话和社交媒体互动中确定有价值的见解。 直到最近,尝试获得这些见解都在成本上处于禁止状态,但是 Amazon Comprehend 之类的工具使对大量数据进行分析具有成本效益。
该服务的另一个优点是,它是另一项完全受管的 AWS 服务,因此无需置备服务器,安装驱动程序和升级软件。 它使用简单,不需要 NLP 的丰富经验即可快速提高生产力。
......@@ -240,7 +240,7 @@ Amazon Comprehend 是 AWS 提供的**自然语言处理**( **NLP** )服务
**控制台访问** –可以从 AWS 管理控制台访问 Amazon Comprehend 。 将数据提取到服务中的最简单方法之一是使用 Amazon S3。 然后,我们可以调用 Comprehend 服务以分析文本中的关键短语和关系。 理解可以为每个用户请求返回一个置信度分数,以确定准确性的置信度; 百分比越高,服务越有信心。 Comprehend 可以轻松地批量处理单个请求或多个请求。
可用的**应用程序编程接口** **API** )–截至为止,Comprehend 提供了六个不同的 API 来提供见解。 他们是:
可用的**应用程序编程接口****API**)–截至为止,Comprehend 提供了六个不同的 API 来提供见解。 他们是:
* **关键字提取 API** –标识关键字和术语。
* **情绪分析 API** –返回文本的整体含义和感觉,无论是是肯定,否定,中立还是混合。
......@@ -365,7 +365,7 @@ Amazon Translate 使用机器学习和连续学习模型来改善其翻译的性
在 2017 年 re:Invent 会议上发布的另一项服务是 Amazon Transcribe。 您可以将 Amazon Transcribe 当作您的私人秘书,在讲话时做笔记。
Amazon Transcribe 是**自动语音识别** **ASR** )服务,允许开发人员向各种应用程序添加语音到文本功能。 Amazon Transcribe API 可用于分析存储的音频文件。 该服务返回一个包含转录语音的文本文件。 Amazon Transcribe 也可以实时使用。 它可以接收实时音频流,并将生成包含转录文本的实时流。
Amazon Transcribe 是**自动语音识别****ASR**)服务,允许开发人员向各种应用程序添加语音到文本功能。 Amazon Transcribe API 可用于分析存储的音频文件。 该服务返回一个包含转录语音的文本文件。 Amazon Transcribe 也可以实时使用。 它可以接收实时音频流,并将生成包含转录文本的实时流。
Amazon Transcribe 可用于转录客户服务呼叫并生成音频和视频内容的字幕。 该服务支持常见的音频格式,例如 WAV 和 MP3。 它可以为每个单词生成一个时间戳。 这有助于使用生成的文本快速找到原始音频源。 像其他 Amazon 机器学习服务一样,Amazon Transcribe 不断从文本中学习其正在处理以不断改进服务。
......@@ -442,7 +442,7 @@ Learning Studio 不需要任何编程。 通过直观地连接数据集和模块
## Azure 机器学习服务
**Azure 机器学习** **AML** )服务是一个平台,可让数据科学家和数据工程师大规模地在云中训练,部署,自动化和管理机器学习模型 。 服务的用户可以使用基于 Python 的库来创建功能强大的应用程序和工作流。 AML 服务是一个框架,允许开发人员使用预定义的数据集训练模型,然后将其模型作为 Web 服务包装在 Docker 容器中,并使用各种容器协调器进行部署。
**Azure 机器学习****AML**)服务是一个平台,可让数据科学家和数据工程师大规模地在云中训练,部署,自动化和管理机器学习模型 。 服务的用户可以使用基于 Python 的库来创建功能强大的应用程序和工作流。 AML 服务是一个框架,允许开发人员使用预定义的数据集训练模型,然后将其模型作为 Web 服务包装在 Docker 容器中,并使用各种容器协调器进行部署。
可以通过以下两种方式之一访问和使用 Azure 机器学习服务:
......@@ -563,7 +563,7 @@ Video Intelligence API 具有经过预先训练的模型,可以识别各种常
**AutoML 自然语言和自然语言 API** –该服务可用于对文本分类,执行实体提取和情感检测,所有这些都使用简单易用的 API。 用户可以利用 AutoML 自然语言界面来提供数据集并确定将使用哪些自定义模型。
Natural 语言 API 具有预先训练的模型,该模型使 API 的用户可以访问**自然语言理解** **NLU** )功能,包括:
Natural 语言 API 具有预先训练的模型,该模型使 API 的用户可以访问**自然语言理解****NLU**)功能,包括:
* 实体分析
* 情绪分析
......
......@@ -455,9 +455,9 @@ if __name__=='__main__':
# 提取语音特征
我们学习了如何将时域信号转换为频域。 频域功能已在所有语音识别系统中广泛使用。 我们之前讨论的概念是对该概念的介绍,但实际的频域功能要复杂一些。 将信号转换到频域后,我们需要确保以特征向量的形式使用该信号。 这就是 **Mel 频率倒谱系数** **MFCC** )的概念。 MFCC 是工具,用于从 g 偶数音频信号中提取频域特征。
我们学习了如何将时域信号转换为频域。 频域功能已在所有语音识别系统中广泛使用。 我们之前讨论的概念是对该概念的介绍,但实际的频域功能要复杂一些。 将信号转换到频域后,我们需要确保以特征向量的形式使用该信号。 这就是 **Mel 频率倒谱系数****MFCC**)的概念。 MFCC 是工具,用于从 g 偶数音频信号中提取频域特征。
为了从音频信号中提取频率特征,MFCC 首先提取功率谱。 然后,它使用滤波器组和**离散余弦变换** **DCT** )提取特征。 如果您有兴趣进一步研究 MFCC,[请查看以下链接](http://practicalcryptography.com/miscellaneous/machine-learning/guide-mel-frequency-cepstral-coefficients-mfccs)
为了从音频信号中提取频率特征,MFCC 首先提取功率谱。 然后,它使用滤波器组和**离散余弦变换****DCT**)提取特征。 如果您有兴趣进一步研究 MFCC,[请查看以下链接](http://practicalcryptography.com/miscellaneous/machine-learning/guide-mel-frequency-cepstral-coefficients-mfccs)
我们将使用一个名为`python_speech_features`的程序包来提取 MFCC 功能。 [该软件包在这里可用](http://python-speech-features.readthedocs.org/en/latest)
......@@ -558,7 +558,7 @@ plt.show()
# 识别口语
现在已经学习了分析语音信号的所有技术,让我们继续学习如何识别语音。 语音识别系统将音频信号作为输入并识别正在说的单词。 **隐藏的马尔可夫模型** **HMM** )将用于此任务。
现在已经学习了分析语音信号的所有技术,让我们继续学习如何识别语音。 语音识别系统将音频信号作为输入并识别正在说的单词。 **隐藏的马尔可夫模型****HMM**)将用于此任务。
正如我们在上一章中讨论的那样,HMM 非常适合分析顺序数据。 音频信号是时间序列信号,是顺序数据的体现。 假定输出是由系统经过一系列隐藏状态生成的。 我们的目标是找出这些隐藏状态是什么,以便我们可以识别信号中的单词。 如果您有兴趣深入研究,[请查看以下链接](https://web.stanford.edu/~jurafsky/slp3/A.pdf)
......
......@@ -21,13 +21,13 @@
# 软件包的介绍和安装
**自然语言处理** **NLP** )已成为现代系统的重要组成部分。 它广泛用于搜索引擎,会话界面,文档处理器等。 机器可以很好地处理结构化数据,但是在处理自由格式的文本时,它们会遇到困难。 NLP 的目标是开发使计算机能够理解自由格式文本并帮助他们理解语言的算法。
**自然语言处理****NLP**)已成为现代系统的重要组成部分。 它广泛用于搜索引擎,会话界面,文档处理器等。 机器可以很好地处理结构化数据,但是在处理自由格式的文本时,它们会遇到困难。 NLP 的目标是开发使计算机能够理解自由格式文本并帮助他们理解语言的算法。
自由处理-形式自然语言最具挑战性的之一是数量众多。 上下文在句子的理解中起着非常重要的作用。 人类天生善于理解语言。 尚不清楚人类如何轻松而直观地理解语言。 我们利用我们过去的知识和经验来理解对话,即使在几乎没有明确上下文的情况下,我们也可以迅速了解其他人在谈论什么。
为了解决这个问题,NLP 研究人员开始使用机器学习方法来开发各种应用程序。 为了构建这样的应用程序,需要获取大量的文本,然后在该数据上训练算法以执行各种任务,例如对文本进行分类,分析情感和对主题进行建模。 对算法进行训练,以检测输入文本数据中的模式并从中获取见解。
在本章中,我们将讨论用于分析文本和构建 NLP 应用程序的各种基础概念。 这将使我们了解如何从给定的文本数据中提取有意义的信息。 我们将使用称为**自然语言工具包** **NLTK** )的 Python 软件包来构建这些应用程序。 您可以通过运行以下命令来安装它:
在本章中,我们将讨论用于分析文本和构建 NLP 应用程序的各种基础概念。 这将使我们了解如何从给定的文本数据中提取有意义的信息。 我们将使用称为**自然语言工具包****NLTK**)的 Python 软件包来构建这些应用程序。 您可以通过运行以下命令来安装它:
```py
$ pip3 install nltk
......@@ -434,11 +434,11 @@ for word, item in zip(vocabulary, document_term_matrix.T):
类别预测器用于预测给定文本所属的类别。 这在文本分类中经常用于对文本文档进行分类。 搜索引擎经常使用此工具按相关性对搜索结果进行排序。 例如,假设我们要预测给定的句子是属于体育,政治还是科学。 为此,我们建立了一个数据集并训练了一个算法。 然后可以将该算法用于推断未知数据。
为了构建此预测变量,我们将使用一个称为**术语频率-文档反向频率** **tf-idf** )的度量。 在文档集中,我们需要了解每个单词的重要性。 tf-idf 指标可帮助我们了解给定单词对文档集中的文档 t 的重要性。
为了构建此预测变量,我们将使用一个称为**术语频率-文档反向频率****tf-idf**)的度量。 在文档集中,我们需要了解每个单词的重要性。 tf-idf 指标可帮助我们了解给定单词对文档集中的文档 t 的重要性。
让我们考虑该指标的的第一部分。 **术语频率** **tf** )基本上是,用于衡量每个单词在给定文档中出现的频率。 由于不同的文档具有不同的单词数,因此直方图中的确切数字将有所不同。 为了有一个公平的竞争环境,我们需要标准化直方图。 因此,我们将每个单词的计数除以给定文档中的单词总数,以获得词频。
让我们考虑该指标的的第一部分。 **术语频率****tf**)基本上是,用于衡量每个单词在给定文档中出现的频率。 由于不同的文档具有不同的单词数,因此直方图中的确切数字将有所不同。 为了有一个公平的竞争环境,我们需要标准化直方图。 因此,我们将每个单词的计数除以给定文档中的单词总数,以获得词频。
度量的第二部分是,**反向文档频率** **idf** ),它是一个单词在给定文档集中对文档的唯一性的度量。 当我们计算频率一词时,假设所有单词都同等重要。 但是我们不能仅仅依靠每个单词的频率,因为*和**或*以及等单词的出现很多。 为了平衡这些常见单词的频率,我们需要减少它们的权重并增加稀有单词的权重。 这也有助于我们识别每个文档唯一的单词,从而帮助我们制定独特的特征向量。
度量的第二部分是,**反向文档频率****idf**),它是一个单词在给定文档集中对文档的唯一性的度量。 当我们计算频率一词时,假设所有单词都同等重要。 但是我们不能仅仅依靠每个单词的频率,因为*和**或*以及等单词的出现很多。 为了平衡这些常见单词的频率,我们需要减少它们的权重并增加稀有单词的权重。 这也有助于我们识别每个文档唯一的单词,从而帮助我们制定独特的特征向量。
要计算此统计信息,我们需要计算具有给定单词的文档数量的比率,并将其除以文档总数。 该比率实质上是包含给定单词的文档的一部分。 然后通过采用该比率的负算法来计算文档的逆向频率。
......
......@@ -183,7 +183,7 @@ Webhook 是,HTTP 推送 API 或 Web 回调。 它也称为反向 API,因为
**可用性**
应该有一个聊天机器人可以帮助用户。 这超出了传统平台的可用性。 当然,我们的聊天机器人应该随时准备提供帮助,并在需要时随时进行访问。 但这也适用于我们能够以多快的速度获取聊天机器人来帮助我们实现意图。 想一想在传统**交互式语音响应** **IVR** )系统中的导航树,在这些导航树中,我们必须按很多数字,然后他们才知道我们要执行的意图。 此类系统的可用性较低。
应该有一个聊天机器人可以帮助用户。 这超出了传统平台的可用性。 当然,我们的聊天机器人应该随时准备提供帮助,并在需要时随时进行访问。 但这也适用于我们能够以多快的速度获取聊天机器人来帮助我们实现意图。 想一想在传统**交互式语音响应****IVR**)系统中的导航树,在这些导航树中,我们必须按很多数字,然后他们才知道我们要执行的意图。 此类系统的可用性较低。
**相关性**
......@@ -205,9 +205,9 @@ Webhook 是,HTTP 推送 API 或 Web 回调。 它也称为反向 API,因为
# 使用 DialogFlow 创建聊天机器人
Google 在机器学习和**自然语言处理** **NLP** )中有着广泛的研究历史。 这项研究的大部分内容都反映在他们的 DialogFlow 工具中。 DialogFlow 与 Google Cloud 语音转文本 API 以及其他第三方服务(例如 Google Assistant,Amazon Alexa 和 Facebook Messenger)集成在一起。
Google 在机器学习和**自然语言处理****NLP**)中有着广泛的研究历史。 这项研究的大部分内容都反映在他们的 DialogFlow 工具中。 DialogFlow 与 Google Cloud 语音转文本 API 以及其他第三方服务(例如 Google Assistant,Amazon Alexa 和 Facebook Messenger)集成在一起。
无需编写任何代码即可创建提供很多功能的聊天机器人。 最初,我们将回顾如何使用 **Google Cloud Platform****GCP** )控制台,仅通过即可不使用代码来配置聊天机器人。 在本章的以下各节中,我们将演示如何将 chatbot 与其他服务集成。 本章后面的部分将需要对 Python 语言有基本的了解。
无需编写任何代码即可创建提供很多功能的聊天机器人。 最初,我们将回顾如何使用 **Google Cloud Platform****GCP**)控制台,仅通过即可不使用代码来配置聊天机器人。 在本章的以下各节中,我们将演示如何将 chatbot 与其他服务集成。 本章后面的部分将需要对 Python 语言有基本的了解。
**入门步骤**
......
......@@ -439,15 +439,15 @@ plt.show()
图 11:逐行均值和相关系数
上图中的相关系数表示每个维度与所有其他维度的相关程度。 `1.0`的相关性表示完全相关,而`0.0`的相关性表示变量根本不相关。 `dim1``dim1`完美相关,`dim2``dim2`完美相关。 在任何混淆矩阵中,情况总是如此。 只是说一个变量与其自身完全相关。 另外,`dim1``dim2`具有低相关性。 这意味着`dim1`将具有较低的功率来预测`dim2`的值。 到目前为止,我们将不会很快凭借我们的模型及其预测股票价格的能力而成为百万富翁。 在下一节中,我们将学习一种有用的技术来分析时间序列数据,称为 **Hi dden Markov 模型** **HMM** )。
上图中的相关系数表示每个维度与所有其他维度的相关程度。 `1.0`的相关性表示完全相关,而`0.0`的相关性表示变量根本不相关。 `dim1``dim1`完美相关,`dim2``dim2`完美相关。 在任何混淆矩阵中,情况总是如此。 只是说一个变量与其自身完全相关。 另外,`dim1``dim2`具有低相关性。 这意味着`dim1`将具有较低的功率来预测`dim2`的值。 到目前为止,我们将不会很快凭借我们的模型及其预测股票价格的能力而成为百万富翁。 在下一节中,我们将学习一种有用的技术来分析时间序列数据,称为 **Hi dden Markov 模型****HMM**)。
# 使用隐马尔可夫模型生成数据
**隐藏马尔可夫模型** **HMM** )是一种用于分析连续数据的强大分析技术。 假设要建模的系统是具有隐藏状态的马尔可夫过程。 这意味着基础系统可以是一组可能状态中的一个。
**隐藏马尔可夫模型****HMM**)是一种用于分析连续数据的强大分析技术。 假设要建模的系统是具有隐藏状态的马尔可夫过程。 这意味着基础系统可以是一组可能状态中的一个。
它经历一系列状态转换,从而产生一系列输出。 我们只能观察输出,而不能观察状态。 因此,这些状态对我们是隐藏的。 我们的目标是对数据建模,以便我们可以推断未知数据的状态转换。
为了理解 HMM,让我们考虑**旅行商问题** **TSP** )的版本。 在此示例中,推销员必须在以下三个城市之间旅行才能工作:伦敦,巴塞罗那和纽约。 他的目标是最大程度地减少旅行时间,以使其成为最有效率的人。 考虑到他的工作承诺和时间表,我们有一组概率决定了从城市 *X* 到城市 *Y* 的机会。 在给出的以下信息中, *P(X-> Y)*表示从城市 *X* 到城市 *Y* 的概率:
为了理解 HMM,让我们考虑**旅行商问题****TSP**)的版本。 在此示例中,推销员必须在以下三个城市之间旅行才能工作:伦敦,巴塞罗那和纽约。 他的目标是最大程度地减少旅行时间,以使其成为最有效率的人。 考虑到他的工作承诺和时间表,我们有一组概率决定了从城市 *X* 到城市 *Y* 的机会。 在给出的以下信息中, *P(X-> Y)*表示从城市 *X* 到城市 *Y* 的概率:
<colgroup><col> <col></colgroup>
| **城市** | **概率** |
......@@ -586,7 +586,7 @@ plt.show()
# 使用条件随机字段识别字母序列
**条件随机字段** **CRF** )是概率模型,经常用于分析结构化数据。 我们使用它们以各种形式标记和分割顺序数据。 以下是一些应用 CRF 的最常见用例:
**条件随机字段****CRF**)是概率模型,经常用于分析结构化数据。 我们使用它们以各种形式标记和分割顺序数据。 以下是一些应用 CRF 的最常见用例:
* 手写识别
* 字符识别
......
......@@ -39,7 +39,7 @@
# OpenCV
在本章中,我们将使用名为 OpenCV 的软件包。 的名称隐含了 **OpenCV** **开源计算机视觉**)是一个开源跨平台 Python 软件包,可用于启用实时计算机视觉。 该工具起源于英特尔实验室。
在本章中,我们将使用名为 OpenCV 的软件包。 的名称隐含了 **OpenCV****开源计算机视觉**)是一个开源跨平台 Python 软件包,可用于启用实时计算机视觉。 该工具起源于英特尔实验室。
OpenCV 可以与 TensorFlow,PyTorch 和 Caffe 结合使用。
......
......@@ -12,8 +12,8 @@
* 构建多层神经网络
* 构建矢量量化器
* 使用递归神经网络分析顺序数据
***光学字符识别** **OCR** )数据库中可视化字符
* 构建**光学字符识别** **OCR** )引擎
***光学字符识别****OCR**)数据库中可视化字符
* 构建**光学字符识别****OCR**)引擎
让我们开始介绍神经网络。
......@@ -39,7 +39,7 @@
误差是预测输出与实际输出之间的差。 基于误差有多大,神经网络会自行调整并重新训练,直到其更接近可解度。
足够抽象地思考神经网络。 就像我们在本书中一直在做的那样,是时候动手动手,边做边学。 在本章中,我们将使用名为 **NeuroLab** 的库。 NeuroLab 是库,它实现了基本的神经网络算法。 它具有各种参数,可以对其进行配置。 其界面类似于 **MATLAB** 中的**神经网络工具箱** **NNT** )软件包。 该库是基于 NumPy 软件包的。 [您可以在以下位置找到有关它的更多信息](https://pythonhosted.org/neurolab)
足够抽象地思考神经网络。 就像我们在本书中一直在做的那样,是时候动手动手,边做边学。 在本章中,我们将使用名为 **NeuroLab** 的库。 NeuroLab 是库,它实现了基本的神经网络算法。 它具有各种参数,可以对其进行配置。 其界面类似于 **MATLAB** 中的**神经网络工具箱****NNT**)软件包。 该库是基于 NumPy 软件包的。 [您可以在以下位置找到有关它的更多信息](https://pythonhosted.org/neurolab)
您可以通过在终端上运行以下命令来安装它:
......@@ -519,7 +519,7 @@ plt.show()
# 使用递归神经网络分析顺序数据
到目前为止,在我们所有的神经网络示例中,一直在使用静态数据。 神经网络也可以有效地用于构建处理顺序数据的模型。 **递归神经网络** **RNN** )在建模顺序数据方面非常出色。 [您可以在以下位置了解有关递归神经网络的更多信息](https://www.jeremyjordan.me/introduction-to-recurrent-neural-networks/)
到目前为止,在我们所有的神经网络示例中,一直在使用静态数据。 神经网络也可以有效地用于构建处理顺序数据的模型。 **递归神经网络****RNN**)在建模顺序数据方面非常出色。 [您可以在以下位置了解有关递归神经网络的更多信息](https://www.jeremyjordan.me/introduction-to-recurrent-neural-networks/)
当我们使用时间序列数据时,我们通常不能使用通用学习模型。 我们需要捕获数据中的时间依赖性,以便可以构建健壮的模型。 让我们看看如何构建它。
......@@ -664,7 +664,7 @@ if __name__=='__main__':
考虑这种情况。 您曾经写下任何东西吗?五分钟后,您无法阅读自己的笔迹? 计算机也总是会出现此问题。 写下数字 *6* 的方法有无数种,其中有些看起来比 *6 更像 *0* 或 *5* 。* 。 我可能是错的,但是我认为我们将找到一种治愈癌症的方法,然后才能找到一种可靠的方法来使计算机识别医生的笔迹。 我们已经可以达到很高的准确性,并且*的笔迹越漂亮*,阅读起来就越容易。 我们继续尝试解决此问题的原因是,这是一个有价值的目标,具有许多应用程序。 举一个简短的例子,医生的时间受到高度重视。 随着系统能够更好地识别他们的笔记,他们将获得更多的精力来专注于实际治疗和帮助患者的精力,而不再关注文书工作。
**光学字符识别** **OCR** )是识别图像中手写字符的过程。 在构建模型之前,让我们使熟悉数据集。 [我们将使用以下位置提供的数据集](http://ai.stanford.edu/~btaskar/ocr)
**光学字符识别****OCR**)是识别图像中手写字符的过程。 在构建模型之前,让我们使熟悉数据集。 [我们将使用以下位置提供的数据集](http://ai.stanford.edu/~btaskar/ocr)
您将下载一个名为`letter.data`的文件。 为了方便起见,此文件已在代码包中提供给您。 让我们看看如何加载数据并形象化角色。
......
......@@ -2,7 +2,7 @@
# 使用卷积神经网络进行深度学习
在本章中,我们将学习深度学习和**卷积神经网络** **CNN** )。 在过去的几年中,CNN 取得了很大的发展势头,尤其是在图像识别领域。 我们将讨论 CNN 的体系结构以及内部使用的层的类型。 我们将看到如何使用一个名为 TensorFlow 的软件包。 我们将构建一个基于感知器的线性回归器。 我们将学习如何使用单层神经网络构建图像分类器。
在本章中,我们将学习深度学习和**卷积神经网络****CNN**)。 在过去的几年中,CNN 取得了很大的发展势头,尤其是在图像识别领域。 我们将讨论 CNN 的体系结构以及内部使用的层的类型。 我们将看到如何使用一个名为 TensorFlow 的软件包。 我们将构建一个基于感知器的线性回归器。 我们将学习如何使用单层神经网络构建图像分类器。
然后,我们将使用 CNN 构建图像分类器。 图像分类器有许多应用。 这是一个奇特的名字,但这只是计算机辨别对象是什么的能力。 例如,您可以构建一个分类器来确定某物是热狗还是非热狗。 这是一个轻松的示例,但是图像分类器也可以使用生死攸关的应用程序。 为嵌入了图像分类软件的无人机拍照,它可以区分平民和敌方战斗人员。 在这种情况下不能犯任何错误。
......@@ -497,7 +497,7 @@ x_image = tf.reshape(x, [-1, 28, 28, 1])
W_conv1, b_conv1 = create_layer([5, 5, 1, 32])
```
将图像与上一步中计算的权重张量进行卷积,然后向其添加偏差 tenso r。 然后,我们需要将**整流线性单位** **ReLU** )函数应用到输出:
将图像与上一步中计算的权重张量进行卷积,然后向其添加偏差 tenso r。 然后,我们需要将**整流线性单位****ReLU**)函数应用到输出:
```py
# Convolve the image with weight tensor, add the
......@@ -657,7 +657,7 @@ print('Test accuracy =', accuracy.eval(feed_dict = {
在本章中,我们学习了深度学习和 CNN。 我们讨论了什么是 CNN,以及我们为什么需要它们。 我们讨论了 CNN 的体系结构。 我们了解了 CNN 中使用的各种类型的图层。 我们讨论了如何使用 TensorFlow。 我们使用它来构建基于感知器的线性回归器。 我们学习了如何使用单层神经网络构建图像分类器。 然后,我们使用 CNN 构建了图像分类器。
在下一章中,我们将了解 CNN 的另一个受欢迎的兄弟– **递归神经网络** **RNN** )。 像 CNN 一样,RNN 也已流行,并且现在非常流行。 与以前的模型相比,它们取得了令人印象深刻的结果。 在某些情况下,甚至在某些情况下甚至超过了人类的表现。
在下一章中,我们将了解 CNN 的另一个受欢迎的兄弟– **递归神经网络****RNN**)。 像 CNN 一样,RNN 也已流行,并且现在非常流行。 与以前的模型相比,它们取得了令人印象深刻的结果。 在某些情况下,甚至在某些情况下甚至超过了人类的表现。
# 参考
......
......@@ -2,7 +2,7 @@
# 递归神经网络和其他深度学习模型
在本章中,我们将学习深度学习和**递归神经网络** **RNN** )。 像前几章所介绍的 CNN 一样,RNN 在过去几年中也获得了很大发展。 就 RNN 而言,它们在语音识别领域被大量使用。 当今许多聊天机器人都基于 RNN 技术建立了基础。 使用 RNN 预测金融市场已经取得了一些成功。 例如,我们可能有一个带有单词序列的文本,并且我们有一个目标来预测序列中的下一个单词。
在本章中,我们将学习深度学习和**递归神经网络****RNN**)。 像前几章所介绍的 CNN 一样,RNN 在过去几年中也获得了很大发展。 就 RNN 而言,它们在语音识别领域被大量使用。 当今许多聊天机器人都基于 RNN 技术建立了基础。 使用 RNN 预测金融市场已经取得了一些成功。 例如,我们可能有一个带有单词序列的文本,并且我们有一个目标来预测序列中的下一个单词。
我们将讨论 RNN 的体系结构及其组件。 我们将继续使用上一章开始学习的 TensorFlow。 我们将使用 TensorFlow 快速构建 RNN。 我们还将学习如何使用单层神经网络构建 RNN 分类器。 然后,我们将使用 CNN 构建图像分类器。
......@@ -19,9 +19,9 @@
# 递归神经网络的基础
RNN 是另一种流行的模型,目前正在获得很大的关注。 正如我们在*第 1 章**人工智能导论*中讨论的那样,对一般神经网络(尤其是 RNN)的研究是*联系主义者*部落( 在 Pedro Domingos 的 AI 分类中进行了介绍)。 RNN 通常用于解决自然语言处理( **NLP** )和**自然语言理解****NLU** )问题 。
RNN 是另一种流行的模型,目前正在获得很大的关注。 正如我们在*第 1 章**人工智能导论*中讨论的那样,对一般神经网络(尤其是 RNN)的研究是*联系主义者*部落( 在 Pedro Domingos 的 AI 分类中进行了介绍)。 RNN 通常用于解决自然语言处理(**NLP**)和**自然语言理解****NLU**)问题 。
RNN 背后的数学有时可能会令人不知所措。 在深入研究 RNN 之前,请牢记以下思想:赛车手不需要完全了解其赛车的机械原理即可使其快速行驶并赢得比赛。 同样,我们不一定需要完全了解 RNN 在幕后的工作方式,以使其对我们有用,有时甚至是令人印象深刻的工作。 Keras 库的创建者 Francois Chollet 描述了**长短期记忆** **LSTM** )网络,这是 RNN 的一种形式,如下所示:
RNN 背后的数学有时可能会令人不知所措。 在深入研究 RNN 之前,请牢记以下思想:赛车手不需要完全了解其赛车的机械原理即可使其快速行驶并赢得比赛。 同样,我们不一定需要完全了解 RNN 在幕后的工作方式,以使其对我们有用,有时甚至是令人印象深刻的工作。 Keras 库的创建者 Francois Chollet 描述了**长短期记忆****LSTM**)网络,这是 RNN 的一种形式,如下所示:
> “您不需要了解有关 LSTM 单元的特定体系结构的所有内容;作为人类,理解它不是您的工作。只需记住 LSTM 单元的含义:允许过去的信息 以后再注射。”
......@@ -78,7 +78,7 @@ S 型函数(也称为作为逻辑函数)定义如下:
## ReLU 功能
**整流线性单元** **ReLU** )函数可能是在 CNN 和 RNN 模型中最流行的激活函数。 给定负输入时,该函数返回 0。 给定任何正值时,它将返回该值。 因此,它可以写为:
**整流线性单元****ReLU**)函数可能是在 CNN 和 RNN 模型中最流行的激活函数。 给定负输入时,该函数返回 0。 给定任何正值时,它将返回该值。 因此,它可以写为:
*f(x)= max(0,x)*
......@@ -158,7 +158,7 @@ RNN 之所以称为递归,是因为这些算法对序列的每个元素执行
首先,像这样的模型可以用作评分机制。 语言模型可用于选择最可能的下一个单词。 从直觉上讲,最可能出现的下一个单词在语法上可能是正确的。
语言建模具有重要应用程序。 因为它可以预测给定前面单词的单词的概率,所以可以将其用于**自然文本生成** **NTG** )。 给定一个现有的单词序列,从概率最高的单词列表中建议一个单词,然后重复该过程,直到生成完整的句子为止。
语言建模具有重要应用程序。 因为它可以预测给定前面单词的单词的概率,所以可以将其用于**自然文本生成****NTG**)。 给定一个现有的单词序列,从概率最高的单词列表中建议一个单词,然后重复该过程,直到生成完整的句子为止。
注意,在前面的等式中,每个单词的概率以所有先前的单词为条件。 在更实际的情况下,由于计算或内存限制,模型可能很难代表长期依赖关系。 因此,大多数模型通常仅限于仅查看少量的先前单词。
......@@ -450,7 +450,7 @@ plt.show()
如我们所见,预测值与初始值是相当一致的,因此这是一个不错的结果。 RNN 本质上是随机的,因此下一次我们运行示例时,对齐方式可能会更好或更坏。 您可能会看到不同的对齐方式。
最后,让我们计算**均方根误差** **RMSE** )分数:
最后,让我们计算**均方根误差****RMSE**)分数:
```py
from sklearn.metrics import mean_squared_error
......
......@@ -2,7 +2,7 @@
# 通过强化学习创建智能代理
在本章中,我们将学习**强化学习** **RL** )。 我们将讨论 RL 的前提。 我们将讨论 RL 和监督学习之间的区别。 我们将通过一些真实的 RL 实例来了解 RL 如何以各种形式表现出来。 我们将学习 RL 的组成部分以及所涉及的各种概念。 然后,我们将在 Python 中创建一个环境,以了解其在实际中的工作方式。 然后,我们将使用这些概念来构建学习代理。
在本章中,我们将学习**强化学习****RL**)。 我们将讨论 RL 的前提。 我们将讨论 RL 和监督学习之间的区别。 我们将通过一些真实的 RL 实例来了解 RL 如何以各种形式表现出来。 我们将学习 RL 的组成部分以及所涉及的各种概念。 然后,我们将在 Python 中创建一个环境,以了解其在实际中的工作方式。 然后,我们将使用这些概念来构建学习代理。
在本章中,我们将介绍以下主题:
......
......@@ -127,7 +127,7 @@ Google 的工作方式与图书馆卡目录类似,不同之处在于 Google
* 自定义蜘蛛爬网网站
* 专有内部数据库
* 定制编程语言
* 专有文件系统称为 **Google 文件系统** **GFS** )或 Colossus
* 专有文件系统称为 **Google 文件系统****GFS**)或 Colossus
希望您觉得自己对大数据有了更好的了解。 现在让我们增加一些混乱,让我们看看为什么当进入大数据时,大小并不是唯一重要的事情。
......@@ -251,7 +251,7 @@ Hadoop 是最早开发的,因此,它有很多心得和实现。 但是在许
### 弹性分布式数据集
**弹性分布式数据集** **RDD** )是 Spark 的基础组件。 RDD 具有以下特征:
**弹性分布式数据集****RDD**)是 Spark 的基础组件。 RDD 具有以下特征:
* 不变性
* 分散式
......@@ -299,7 +299,7 @@ SparkSQL 无需修改即可运行 Hive 查询。 它重写了 Hive 前端和元
## Apache Impala
在某些方面,例如 Apache Spark,Apache Impala 是用于存储在运行的集群中的数据的开源**大规模并行处理** **MPP** )SQL 引擎。 在 Apache Hadoop 上。 它在 Apache Hadoop 之上运行。
在某些方面,例如 Apache Spark,Apache Impala 是用于存储在运行的集群中的数据的开源**大规模并行处理****MPP**)SQL 引擎。 在 Apache Hadoop 上。 它在 Apache Hadoop 之上运行。
Impala 为 Hadoop 提供了可扩展的并行 SQL 数据库引擎,使开发人员可以对存储在 Apache HBase,Amazon S3 和 HDFS 中的数据创建并运行低延迟 SQL 查询,而无需在读取数据之前先进行移动或转换。
......
......@@ -4,7 +4,7 @@
**生成对抗网络** **GAN** )具有建立下一代模型的潜力,因为它们可以模拟任何数据分布。 由于它是**机器学习****ML** )增长最快的领域之一,因此正在该领域进行重大研究和开发工作。 当您在 GAN 域中构建八个端到端项目时,本书将测试训练神经网络的无监督技术。
**生成对抗网络****GAN**)具有建立下一代模型的潜力,因为它们可以模拟任何数据分布。 由于它是**机器学习****ML**)增长最快的领域之一,因此正在该领域进行重大研究和开发工作。 当您在 GAN 域中构建八个端到端项目时,本书将测试训练神经网络的无监督技术。
*生成对抗网络项目*首先介绍了用于构建高效项目的概念,工具和库。 您还将在本书的不同项目中使用各种数据集。 在每一章中,复杂性和操作的水平都会提高,从而帮助您掌握 GAN 域。
......
......@@ -4,7 +4,7 @@
在本章中,我们将研究**生成对抗网络** **GAN** )。 它们是一种深度神经网络架构,它使用无监督的机器学习来生成数据。 他们在 2014 年由 Ian Goodfellow,Yoshua Bengio 和 Aaron Courville 的论文中介绍,[可在以下链接中找到](https://arxiv.org/pdf/1406.2661)。 GAN 具有许多应用,包括图像生成和药物开发。
在本章中,我们将研究**生成对抗网络****GAN**)。 它们是一种深度神经网络架构,它使用无监督的机器学习来生成数据。 他们在 2014 年由 Ian Goodfellow,Yoshua Bengio 和 Aaron Courville 的论文中介绍,[可在以下链接中找到](https://arxiv.org/pdf/1406.2661)。 GAN 具有许多应用,包括图像生成和药物开发。
本章将向您介绍 GAN 的核心组件。 它将带您了解每个组件的工作方式以及 GAN 背后的重要概念和技术。 它还将简要概述使用 GAN 的优缺点 ,并深入了解某些实际应用。
......@@ -92,7 +92,7 @@ GAN 具有一些相当有用的实际应用,其中包括:
GAN 的体系结构具有两个基本元素:生成器网络和鉴别器网络。 每个网络都可以是任何神经网络,例如**人工神经网络** **ANN** ),**卷积神经网络****CNN** ), **递归神经网络****RNN** ),或**长短期记忆****LSTM** )。 鉴别器必须具有完全连接的层,最后是分类器。
GAN 的体系结构具有两个基本元素:生成器网络和鉴别器网络。 每个网络都可以是任何神经网络,例如**人工神经网络****ANN**),**卷积神经网络****CNN**), **递归神经网络****RNN**),或**长短期记忆****LSTM**)。 鉴别器必须具有完全连接的层,最后是分类器。
让我们仔细看一下 GAN 架构的组件。 在此示例中,我们将想象正在创建一个虚拟 GAN。
......@@ -189,7 +189,7 @@ The architecture of the discriminator network
**Jensen-Shannon** 散度(也称为**信息半径** **IRaD** )或**总散度与平均值**)[ 是两个概率分布之间相似度的另一种度量。 它基于 KL 散度。 但是,与 KL 散度不同,JS 散度本质上是对称的,可用于测量两个概率分布之间的距离。 如果我们采用 Jensen-Shannon 发散的平方根,则会得到 Jensen-Shannon 距离,因此它是距离度量。
**Jensen-Shannon** 散度(也称为**信息半径****IRaD**)或**总散度与平均值**)[ 是两个概率分布之间相似度的另一种度量。 它基于 KL 散度。 但是,与 KL 散度不同,JS 散度本质上是对称的,可用于测量两个概率分布之间的距离。 如果我们采用 Jensen-Shannon 发散的平方根,则会得到 Jensen-Shannon 距离,因此它是距离度量。
以下 等式表示两个概率分布 *p**q* 之间的 Jensen-Shannon 散度: ]
......@@ -229,7 +229,7 @@ The architecture of the discriminator network
在前面的等式中,![](img/a86a4cb0-47d0-4123-8c40-207579ac79c4.png)是鉴别器模型,![](img/692e8b22-1448-49a9-8d2e-6ccfcba6e5b3.png)是生成器模型,![](img/1cf58b02-f255-4082-8b3a-1db3bf0ac832.png)是实际数据分布,![](img/8cdff081-d911-4e9a-80c3-fa21211eb3bb.png)是生成器生成的数据的分布,![](img/39400e6f-0df8-46a1-b80c-17516e3c6adf.png)是 预期的输出。
在训练期间, **D** **鉴别器**)想要使整个输出最大化,而 G(生成器)希望使整个输出最小化,从而训练 GAN 达到平衡 生成器和鉴别器网络。 当它达到平衡时,我们说模型已经收敛。 这个平衡就是纳什平衡。 训练完成后,我们将获得一个生成器模型,该模型能够生成逼真的图像。
在训练期间, **D****鉴别器**)想要使整个输出最大化,而 G(生成器)希望使整个输出最小化,从而训练 GAN 达到平衡 生成器和鉴别器网络。 当它达到平衡时,我们说模型已经收敛。 这个平衡就是纳什平衡。 训练完成后,我们将获得一个生成器模型,该模型能够生成逼真的图像。
......@@ -278,7 +278,7 @@ The architecture of the discriminator network
为了克服初始分数的各种缺点,Martin Heusel 等人在他们的论文 *GAN 中提出了**Fréchlet 初始距离**( **FID** ),[收敛到局部纳什平衡的规模更新规则](https://arxiv.org/pdf/1706.08500.pdf)
为了克服初始分数的各种缺点,Martin Heusel 等人在他们的论文 *GAN 中提出了**Fréchlet 初始距离**(**FID**),[收敛到局部纳什平衡的规模更新规则](https://arxiv.org/pdf/1706.08500.pdf)
计算 FID 分数的公式如下:
......@@ -305,7 +305,7 @@ There are more scoring algorithms available that have been recently proposed by
Alec Radford,Luke Metz 和 Soumith Chintala 在名为*深度卷积生成对抗网络*的无监督表示学习*中提出了**深层卷积 GAN** ( **DCGAN** ),[可通过以下链接获得](https://arxiv.org/pdf/1511.06434.pdf) 。 香草 GAN 通常在其网络中没有**卷积神经网络**( **CNN** )。 这是在 DCGAN 的引入下首次提出的。 我们将在[第 3 章](../Text/3.html)和*使用条件 GAN* **进行面部老化,以学习如何使用 DCGAN 生成**动漫 ch 动漫面孔。
Alec Radford,Luke Metz 和 Soumith Chintala 在名为*深度卷积生成对抗网络*的无监督表示学习*中提出了**深层卷积 GAN**(**DCGAN**),[可通过以下链接获得](https://arxiv.org/pdf/1511.06434.pdf) 。 香草 GAN 通常在其网络中没有**卷积神经网络**(**CNN**)。 这是在 DCGAN 的引入下首次提出的。 我们将在[第 3 章](../Text/3.html)和*使用条件 GAN* **进行面部老化,以学习如何使用 DCGAN 生成**动漫 ch 动漫面孔。
......
......@@ -24,7 +24,7 @@
**3D 生成对抗网络** **3D-GAN** )是 GAN 的变体,就像 StackGAN,CycleGAN 和 **S** **上层分辨率一样 生成对抗网络****SRGAN** )。 与香草 GAN 相似,它具有生成器和鉴别器模型。 这两个网络都使用 3D 卷积层,而不是使用 2D 卷积。 如果提供足够的数据,它可以学习生成具有良好视觉质量的 3D 形状。
**3D 生成对抗网络****3D-GAN**)是 GAN 的变体,就像 StackGAN,CycleGAN 和 **S** **上层分辨率一样 生成对抗网络****SRGAN**)。 与香草 GAN 相似,它具有生成器和鉴别器模型。 这两个网络都使用 3D 卷积层,而不是使用 2D 卷积。 如果提供足够的数据,它可以学习生成具有良好视觉质量的 3D 形状。
在仔细查看 3D-GAN 网络之前,让我们了解 3D 卷积。
......
......@@ -4,7 +4,7 @@
**条件 GAN****cGAN** )是 GAN 模型的扩展。 它们允许生成具有特定条件或属性的图像,因此被证明比香草 GAN 更好。 在本章中,我们将实现一个 cGAN,该 cGAN 一旦经过培训,就可以执行自动面部老化。 Grigory Antipov,Moez Baccouche 和 Jean-Luc Dugelay 在其名为 *有条件生成对抗网络* 的人脸衰老的论文中,首先介绍了我们将要实现的 cGAN 网络。 [可以在以下链接中找到](https://arxiv.org/pdf/1702.01983.pdf)
**条件 GAN****cGAN**)是 GAN 模型的扩展。 它们允许生成具有特定条件或属性的图像,因此被证明比香草 GAN 更好。 在本章中,我们将实现一个 cGAN,该 cGAN 一旦经过培训,就可以执行自动面部老化。 Grigory Antipov,Moez Baccouche 和 Jean-Luc Dugelay 在其名为 *有条件生成对抗网络* 的人脸衰老的论文中,首先介绍了我们将要实现的 cGAN 网络。 [可以在以下链接中找到](https://arxiv.org/pdf/1702.01983.pdf)
在本章中,我们将介绍以下主题:
......@@ -352,7 +352,7 @@ from scipy.io import loadmat
编码器网络是**卷积神经网络** **CNN** ),可将图像( *x* )编码为潜矢量( *z* )或 潜在的矢量表示。 让我们从在 Keras 框架中实现编码器网络开始。
编码器网络是**卷积神经网络****CNN**),可将图像( *x* )编码为潜矢量( *z* )或 潜在的矢量表示。 让我们从在 Keras 框架中实现编码器网络开始。
执行以下步骤来实现编码器网络:
......@@ -1224,7 +1224,7 @@ encoder.save_weights("encoder.h5")
在前面的两个步骤中,我们成功地训练了生成器网络,鉴别器网络和编码器网络。 在本节中,我们将改进编码器和发电机网络。 在这些步骤中,我们将使用**人脸识别** **FR** )网络,该网络会生成输入给它的特定输入的 128 维嵌入,以改善生成器和编码器 网络。
在前面的两个步骤中,我们成功地训练了生成器网络,鉴别器网络和编码器网络。 在本节中,我们将改进编码器和发电机网络。 在这些步骤中,我们将使用**人脸识别****FR**)网络,该网络会生成输入给它的特定输入的 128 维嵌入,以改善生成器和编码器 网络。
执行以下步骤:
......
......@@ -4,7 +4,7 @@
众所周知,卷积层确实擅长处理图像。 他们能够学习重要的特征,例如边缘,形状和复杂的对象,有效的, ,例如神经网络,例如 Inception,AlexNet, **视觉几何组****VGG** )和 ResNet。 Ian Goodfellow 等人在其名为*生成对抗性网络*的论文中提出了具有密集层的**生成对抗网络****GAN** ),[该网络可在以下链接获得](https://arxiv.org/pdf/1406.2661.pdf)。 复杂的神经网络,例如**卷积神经网络****CNN** ),**递归神经网络****RNN** )和**长短 长期记忆****LSTM** )最初并未在 GAN 中进行测试。 **深度卷积生成对抗网络****DCGAN** )的发展是使用 CNN 进行图像生成的重要一步。 DCGAN 使用卷积层而不是密集层。 它们是由研究人员 Alec Radford , Luke Metz , Soumith Chintala 等提出的,我在其论文中,*通过深度卷积生成对抗性技术* *网络*的无监督表示学习,[可以在以下链接中找到](https://arxiv.org/pdf/1511.06434.pdf)。 从那时起,DCGAN 被广泛用于各种图像生成任务。 在本章中,我们将使用 DCGAN 架构生成动漫角色。
众所周知,卷积层确实擅长处理图像。 他们能够学习重要的特征,例如边缘,形状和复杂的对象,有效的, ,例如神经网络,例如 Inception,AlexNet, **视觉几何组****VGG**)和 ResNet。 Ian Goodfellow 等人在其名为*生成对抗性网络*的论文中提出了具有密集层的**生成对抗网络****GAN**),[该网络可在以下链接获得](https://arxiv.org/pdf/1406.2661.pdf)。 复杂的神经网络,例如**卷积神经网络****CNN**),**递归神经网络****RNN**)和**长短 长期记忆****LSTM**)最初并未在 GAN 中进行测试。 **深度卷积生成对抗网络****DCGAN**)的发展是使用 CNN 进行图像生成的重要一步。 DCGAN 使用卷积层而不是密集层。 它们是由研究人员 Alec Radford , Luke Metz , Soumith Chintala 等提出的,我在其论文中,*通过深度卷积生成对抗性技术* *网络*的无监督表示学习,[可以在以下链接中找到](https://arxiv.org/pdf/1511.06434.pdf)。 从那时起,DCGAN 被广泛用于各种图像生成任务。 在本章中,我们将使用 DCGAN 架构生成动漫角色。
在本章中,我们将介绍以下主题:
......@@ -26,7 +26,7 @@
CNN 在计算机视觉任务中非常出色,无论是用于分类图像还是检测图像中的对象。 CNN 善于理解图像,以至于激发研究人员在 GAN 网络中使用 CNN。 最初,GAN 官方论文的作者介绍了仅具有密集层的**深层神经网络** **DNN** )。 在 GAN 网络的原始实现中未使用卷积层。 在以前的 GAN 中,生成器和鉴别器网络仅使用密集的隐藏层。 相反,作者建议在 GAN 设置中可以使用不同的神经网络体系结构。
CNN 在计算机视觉任务中非常出色,无论是用于分类图像还是检测图像中的对象。 CNN 善于理解图像,以至于激发研究人员在 GAN 网络中使用 CNN。 最初,GAN 官方论文的作者介绍了仅具有密集层的**深层神经网络****DNN**)。 在 GAN 网络的原始实现中未使用卷积层。 在以前的 GAN 中,生成器和鉴别器网络仅使用密集的隐藏层。 相反,作者建议在 GAN 设置中可以使用不同的神经网络体系结构。
DCGAN 扩展了在鉴别器和生成器网络中使用卷积层的思想。 DCGAN 的设置类似于香草 GAN。 它由两个网络组成:生成器和鉴别器。 生成器是具有卷积层的 DNN,而鉴别器是具有卷积层的 DNN。 训练 DCGAN 类似于训练普通 GAN 网络。 在第一章中,我们了解到网络参与了非合作博弈,其中鉴别器网络将其错误反向传播到生成器网络,生成器网络使用此错误来提高其权重。
......@@ -442,7 +442,7 @@ gen_model.add(Conv2D(3, (5, 5), padding='same'))
gen_model.add(Activation('tanh'))
```
生成器网络将输出`(batch_size, 64, 64, 3)`形状的张量。 这批张量中的一个图像张量类似于具有三个通道的尺寸为 64 x 64 的图像: **红色,绿色** **和** **蓝色** **RGB** )。
生成器网络将输出`(batch_size, 64, 64, 3)`形状的张量。 这批张量中的一个图像张量类似于具有三个通道的尺寸为 64 x 64 的图像: **红色,绿色** **和** **蓝色****RGB**)。
用 Python 方法包装的生成器网络的完整代码如下所示:
......
......@@ -4,7 +4,7 @@
**超分辨率生成对抗网络****SRGAN** ,是**生成对抗网络** **GAN** ), 低分辨率图像中的高分辨率图像,具有更好的细节和更高的质量 。 CNN 较早用于产生高分辨率图像,该图像可以更快地训练并达到高水平的精度。 但是,在某些情况下,它们无法恢复更精细的细节,并且通常会生成模糊的图像。 在本章中,我们将在 Keras 框架中实现一个 SRGAN 网络,该网络将能够生成高分辨率图像。 SRGAN 在标题为*使用生成对抗网络的逼真的单图像超分辨率的论文中引入,*,作者是 Christian Ledig,Lucas Theis,Ferenc Huszar, Jose Caballero,Andrew Cunningham 等,[可以在以下链接中找到](https://arxiv.org/pdf/1609.04802.pdf)
**超分辨率生成对抗网络****SRGAN** ,是**生成对抗网络****GAN**), 低分辨率图像中的高分辨率图像,具有更好的细节和更高的质量 。 CNN 较早用于产生高分辨率图像,该图像可以更快地训练并达到高水平的精度。 但是,在某些情况下,它们无法恢复更精细的细节,并且通常会生成模糊的图像。 在本章中,我们将在 Keras 框架中实现一个 SRGAN 网络,该网络将能够生成高分辨率图像。 SRGAN 在标题为*使用生成对抗网络的逼真的单图像超分辨率的论文中引入,*,作者是 Christian Ledig,Lucas Theis,Ferenc Huszar, Jose Caballero,Andrew Cunningham 等,[可以在以下链接中找到](https://arxiv.org/pdf/1609.04802.pdf)
在本章中, e 将涵盖以下主题:
......@@ -268,7 +268,7 @@ pip install -r requirements.txt
在本章中,我们将使用大型 **CelebFaces 属性** **CelebA** )数据集,该数据集可从[这里](http://mmlab.ie.cuhk.edu.hk/projects/CelebA.html)获得。 数据集包含 202、599 名名人的面部图像。
在本章中,我们将使用大型 **CelebFaces 属性****CelebA**)数据集,该数据集可从[这里](http://mmlab.ie.cuhk.edu.hk/projects/CelebA.html)获得。 数据集包含 202、599 名名人的面部图像。
The dataset is available for non-commercial research purposes only and can't be used for commercial purposes. If you intend to use the dataset for commercial purposes, seek permissions from the owners of the images.
......
......@@ -4,7 +4,7 @@
文本到图像的合成是**生成对抗网络** **GAN** )的用例之一,它具有许多工业应用,就像前面章节中描述的 GAN 一样。 从文本描述中合成图像非常困难,因为要构建可以生成反映文本含义的图像的 模型非常困难。 一个试图解决这个问题的网络是 StackGAN。 在本章中,我们将使用 TensorFlow 作为后端在 Keras 框架中实现 StackGAN。
文本到图像的合成是**生成对抗网络****GAN**)的用例之一,它具有许多工业应用,就像前面章节中描述的 GAN 一样。 从文本描述中合成图像非常困难,因为要构建可以生成反映文本含义的图像的 模型非常困难。 一个试图解决这个问题的网络是 StackGAN。 在本章中,我们将使用 TensorFlow 作为后端在 Keras 框架中实现 StackGAN。
在本章中,我们将介绍以下主题:
......@@ -26,7 +26,7 @@
之所以这样称呼 StackGAN,是因为它具有两个 GAN,这些 GAN 堆叠在一起形成了一个能够生成高分辨率图像的网络。 它分为两个阶段,第一阶段和第二阶段。 Stage-I 网络生成具有基本颜色和粗略草图的低分辨率图像,并以文本嵌入为条件;而 Stage-II 网络获取由 Stage-I 网络生成的图像,并生成以条件为基础的高分辨率图像 文字嵌入。 基本上,第二个网络会纠正缺陷并添加引人注目的细节,从而产生更逼真的高分辨率图像。
我们可以将 StackGAN 网络与画家的作品进行比较。 当画家开始工作时,他们会绘制原始形状,例如线条,圆形和矩形。 然后,他们尝试填充颜色。 随着绘画的进行,越来越多的细节被添加。 在 StackGAN 中,Stage-I 与绘制基本形状有关,而 Stage-II 与校正由 Stage-I 网络生成的图像中的缺陷有关。 Stage-II 还添加了更多细节,以使图像看起来更逼真。 这两个阶段的生成器网络都是**条件生成对抗网络** **CGAN** )。 f irst GAN 以文本描述为条件,而第二网络以文本描述和第一个 GAN 生成的图像为条件。
我们可以将 StackGAN 网络与画家的作品进行比较。 当画家开始工作时,他们会绘制原始形状,例如线条,圆形和矩形。 然后,他们尝试填充颜色。 随着绘画的进行,越来越多的细节被添加。 在 StackGAN 中,Stage-I 与绘制基本形状有关,而 Stage-II 与校正由 Stage-I 网络生成的图像中的缺陷有关。 Stage-II 还添加了更多细节,以使图像看起来更逼真。 这两个阶段的生成器网络都是**条件生成对抗网络****CGAN**)。 f irst GAN 以文本描述为条件,而第二网络以文本描述和第一个 GAN 生成的图像为条件。
......@@ -82,7 +82,7 @@ Source: arXiv:1612.03242 [cs.CV]
**条件增强** **CA** )网络从表示为![](img/cb774d54-76ee-4c94-89a7-94e8b16c4493.png)的分布中采样随机潜在变量![](img/d86d468c-b92c-41c9-83f1-75baf727847c.png)。 我们将在后面的部分中详细了解这种分布。 添加 CA 块有很多优点,如下所示:
**条件增强****CA**)网络从表示为![](img/cb774d54-76ee-4c94-89a7-94e8b16c4493.png)的分布中采样随机潜在变量![](img/d86d468c-b92c-41c9-83f1-75baf727847c.png)。 我们将在后面的部分中详细了解这种分布。 添加 CA 块有很多优点,如下所示:
* 它为网络增加了随机性。
* 通过捕获具有各种姿势和外观的各种对象,它使生成器网络变得强大。
......@@ -255,7 +255,7 @@ The architecture of the Stage-II discriminator network.
![](img/8d494e68-1020-471d-91de-e2d6acf9552c.png)
前面的方程式也很容易解释。 它代表了生成器网络的损失函数,其中两个网络都以文本嵌入为条件。 它还包括对损失函数的 **Kullback-Leibler****KL** )发散项。
前面的方程式也很容易解释。 它代表了生成器网络的损失函数,其中两个网络都以文本嵌入为条件。 它还包括对损失函数的 **Kullback-Leibler****KL**)发散项。
......@@ -510,7 +510,7 @@ def build_ca_model():
生成器网络是**条件生成对抗网络** **CGAN** )。 我们将要创建的生成器网络以 text-condition 变量为条件。 它采用从潜在空间采样的随机噪声矢量,并生成形状为`64x64x3`的图像。
生成器网络是**条件生成对抗网络****CGAN**)。 我们将要创建的生成器网络以 text-condition 变量为条件。 它采用从潜在空间采样的随机噪声矢量,并生成形状为`64x64x3`的图像。
让我们从编写生成器网络的代码开始:
......
......@@ -4,7 +4,7 @@
CycleGAN 是一种**生成对抗性** **网络** **GAN** )的类型,用于跨域传输任务,例如更改图像的样式,将绘画转变为照片, 反之亦然,例如照片增强功能,更改照片的季节等等。 CycleGAN 由朱俊彦,Taesung Park,Phillip Isola 和 Alexei A. Efros 在题为*的非配对图像到图像转换中使用循环一致对抗网络*引入。 该产品于 2018 年 2 月在加州大学伯克利分校的 **Berkeley AI Research****BAIR** )实验室生产,[可通过以下链接获得](https://arxiv.org/pdf/1703.10593.pdf)。 由于其广泛的使用案例,CycleGAN 在 GAN 社区引起了轰动。 在本章中,我们将与 CycleGAN 一起使用,尤其是使用它们将绘画转换为照片。
CycleGAN 是一种**生成对抗性** **网络****GAN**)的类型,用于跨域传输任务,例如更改图像的样式,将绘画转变为照片, 反之亦然,例如照片增强功能,更改照片的季节等等。 CycleGAN 由朱俊彦,Taesung Park,Phillip Isola 和 Alexei A. Efros 在题为*的非配对图像到图像转换中使用循环一致对抗网络*引入。 该产品于 2018 年 2 月在加州大学伯克利分校的 **Berkeley AI Research****BAIR**)实验室生产,[可通过以下链接获得](https://arxiv.org/pdf/1703.10593.pdf)。 由于其广泛的使用案例,CycleGAN 在 GAN 社区引起了轰动。 在本章中,我们将与 CycleGAN 一起使用,尤其是使用它们将绘画转换为照片。
在本章中,我们将介绍以下主题:
......@@ -287,7 +287,7 @@ pip install -r requirements.txt
在本章中,我们将使用`monet2photo`数据集。 该数据集是开放源代码,可以由 UC Berkeley 的 **Berkeley AI Research****BAIR** )实验室使用。 [您可以从以下链接选择手动下载数据集](https://people.eecs.berkeley.edu/~taesung_park/CycleGAN/datasets/monet2photo.zip)
在本章中,我们将使用`monet2photo`数据集。 该数据集是开放源代码,可以由 UC Berkeley 的 **Berkeley AI Research****BAIR**)实验室使用。 [您可以从以下链接选择手动下载数据集](https://people.eecs.berkeley.edu/~taesung_park/CycleGAN/datasets/monet2photo.zip)
下载后,将其解压缩到根目录中。
......
......@@ -4,7 +4,7 @@
Pix2pix 是一种**生成对抗网络** **GAN** ),用于图像到图像的翻译。 图像到图像转换是一种将图像的一种表示形式转换为另一种表示形式的方法。 Pix2pix 学习从输入图像到输出图像的映射。 它可用于将黑白图像转换为彩色图像,将草图转换为照片,将白天图像转换为夜间图像,将卫星图像转换为地图图像。 pix2pix 网络最早是由菲利普·伊索拉(Phillip Isola),朱俊彦,周婷慧,阿列克谢·埃弗罗斯(Alexei A. Efros)在名为*和条件对抗网络*的图像到图像转换中引入的。 可以在[以下链接中找到](https://arxiv.org/pdf/1611.07004.pdf)
Pix2pix 是一种**生成对抗网络****GAN**),用于图像到图像的翻译。 图像到图像转换是一种将图像的一种表示形式转换为另一种表示形式的方法。 Pix2pix 学习从输入图像到输出图像的映射。 它可用于将黑白图像转换为彩色图像,将草图转换为照片,将白天图像转换为夜间图像,将卫星图像转换为地图图像。 pix2pix 网络最早是由菲利普·伊索拉(Phillip Isola),朱俊彦,周婷慧,阿列克谢·埃弗罗斯(Alexei A. Efros)在名为*和条件对抗网络*的图像到图像转换中引入的。 可以在[以下链接中找到](https://arxiv.org/pdf/1611.07004.pdf)
在本章中,我们将介绍以下主题:
......@@ -25,7 +25,7 @@ Pix2pix 是一种**生成对抗网络**( **GAN** ),用于图像到图像
Pix2pix 是条件 GAN 的变体。 我们已经在 [第 3 章](../Text/3.html)*中使用条件 GAN(cGAN)*进行面部老化处理。 在继续之前,请确保您了解什么是 cGAN。 一旦熟悉了 cGAN,就可以继续本章。 Pix2pix 是一种 GAN,能够使用**机器学习** **ML** )的无监督方法执行图像到图像的翻译。 经过训练后,pix2pix 可以将图像从域 A 转换为域 B。香草 CNN 也可以用于图像到图像的转换,但是它们不会生成逼真的图像。 另一方面,pix2pix 显示出巨大的潜力,能够生成逼真的图像。 我们将训练 pix2pix 将立面的标签转换为立面的图像。 让我们从了解 pix2pix 的体系结构开始。
Pix2pix 是条件 GAN 的变体。 我们已经在 [第 3 章](../Text/3.html)*中使用条件 GAN(cGAN)*进行面部老化处理。 在继续之前,请确保您了解什么是 cGAN。 一旦熟悉了 cGAN,就可以继续本章。 Pix2pix 是一种 GAN,能够使用**机器学习****ML**)的无监督方法执行图像到图像的翻译。 经过训练后,pix2pix 可以将图像从域 A 转换为域 B。香草 CNN 也可以用于图像到图像的转换,但是它们不会生成逼真的图像。 另一方面,pix2pix 显示出巨大的潜力,能够生成逼真的图像。 我们将训练 pix2pix 将立面的标签转换为立面的图像。 让我们从了解 pix2pix 的体系结构开始。
......
......@@ -4,15 +4,15 @@
如果您已完成本书各章中的所有练习,则为学习和编码**生成对抗网络** **GAN** )进行了很长的路要走。 世界应用。 GAN 有可能在许多不同行业中造成破坏。 科学家和研究人员开发了各种可用于构建商业应用的 GAN。 在本书中,我们探索并实现了一些最著名的 GAN 架构。
如果您已完成本书各章中的所有练习,则为学习和编码**生成对抗网络****GAN**)进行了很长的路要走。 世界应用。 GAN 有可能在许多不同行业中造成破坏。 科学家和研究人员开发了各种可用于构建商业应用的 GAN。 在本书中,我们探索并实现了一些最著名的 GAN 架构。
因此,让我们回顾一下到目前为止所学到的东西:
* 我们从对 GAN 的简要介绍开始,学习了各种重要概念。
* 然后,我们探索了 3D-GAN,这是一种可以生成 3D 图像的 GAN。 我们训练了 3D-GAN,以生成现实世界对象的 3D 模型,例如*飞机**桌子。*
* 在第三章中,我们探索了用于面部衰老的条件 GAN。 我们学习了如何使用条件 GAN 将处于年龄的的人脸图像转换为同一张脸的图像。 我们还讨论了 Age-cGAN 的各种实际应用。
* 之后,我们探索了**深度卷积生成对抗网络** **DCGANs** ),该网络用于生成动漫人物的面孔。
* 在第五章中,我们探讨了**超分辨率生成对抗网络** **SRGAN** ),该网络可用于从低分辨率图像生成高分辨率图像。 之后,我们讨论了 SRGAN 如何解决一些非常有趣的现实问题。
* 之后,我们探索了**深度卷积生成对抗网络****DCGANs**),该网络用于生成动漫人物的面孔。
* 在第五章中,我们探讨了**超分辨率生成对抗网络****SRGAN**),该网络可用于从低分辨率图像生成高分辨率图像。 之后,我们讨论了 SRGAN 如何解决一些非常有趣的现实问题。
* 然后,我们探索了 StackGAN,我们将其用于执行文本到图像的合成任务。 我们在训练 StackGAN 之前先探索了一个数据集,然后通过讨论 StackGAN 的实际应用来结束本章。
* 在第七章中,我们探索了 CycleGAN,这是一次图像到图像的翻译任务。 我们的目标是将绘画变成照片。 我们还讨论了 CycleGAN 的实际应用
......
......@@ -168,7 +168,7 @@ Learned distribution
![](img/c7e60603-2d54-4e9f-90b6-acbbb6fc56e5.png)
如上一节中所述,所有样本必须是独立于**且从数据生成过程中均匀采样的** **IID** )值相等。 特别是,所有类别都必须代表实际分布(例如,如果 *p(y = 0)= 0.4**p(y = 1)= 0.6* ,则比例应为 40% 或 60%)。 但是,为了避免偏差,当类别之间的差异不是很大时,合理的选择是完全均匀的采样,并且对于 *y = 1,2,...,M* 具有相同的代表数 ]。
如上一节中所述,所有样本必须是独立于**且从数据生成过程中均匀采样的****IID**)值相等。 特别是,所有类别都必须代表实际分布(例如,如果 *p(y = 0)= 0.4**p(y = 1)= 0.6* ,则比例应为 40% 或 60%)。 但是,为了避免偏差,当类别之间的差异不是很大时,合理的选择是完全均匀的采样,并且对于 *y = 1,2,...,M* 具有相同的代表数 ]。
通用分类器![](img/91b8220c-e8df-436d-98be-2c519efcb45d.png)可以通过两种方式建模:
......@@ -187,7 +187,7 @@ Learned distribution
![](img/ee38c0ea-fb0c-48b1-abd7-30b4dd44be28.png)
可以通过不同的方式(针对特定算法)优化这种成本函数,但是(在深度学习中最重要的)一种非常通用的策略是采用 S **随机梯度下降** **SGD** )算法。 它包含以下两个步骤的迭代:
可以通过不同的方式(针对特定算法)优化这种成本函数,但是(在深度学习中最重要的)一种非常通用的策略是采用 S **随机梯度下降****SGD**)算法。 它包含以下两个步骤的迭代:
* 用一小批样本 *x <sub class="calibre20">i</sub> ∈X* 计算梯度 *∇L*(相对于参数矢量)
* 更新权重,并沿梯度*-∇L*的相反方向移动参数(请记住,梯度始终指向最大值)
......@@ -318,7 +318,7 @@ Dataset and regression line
在训练阶段结束时,我们假设 *L→0* ,所以 *p≈p <sub class="calibre20">数据</sub>* 。 通过这种方式,我们不仅将分析限于可能的样本子集,还限于整个分布。 使用生成模型,您可以绘制新样本,这些样本可能与为训练过程选择的样本有很大差异,但是它们始终属于同一分布。 因此,它们(可能)始终是可接受的。
例如,**生成对抗网络** **GAN** )是一种特殊的深度学习模型,能够学习图像集的分布,生成几乎无法区分的新样本(与 视觉语义的观点)。 由于无监督学习是本书的主要主题,因此在本简介中,我们将不再进一步介绍 GAN。 所有这些概念将在接下来的所有章节中进行广泛讨论(并带有实际示例)。
例如,**生成对抗网络****GAN**)是一种特殊的深度学习模型,能够学习图像集的分布,生成几乎无法区分的新样本(与 视觉语义的观点)。 由于无监督学习是本书的主要主题,因此在本简介中,我们将不再进一步介绍 GAN。 所有这些概念将在接下来的所有章节中进行广泛讨论(并带有实际示例)。
......@@ -350,7 +350,7 @@ Dataset and regression line
此分布描述了在预定时间间隔内观察 *k* 事件的可能性。 在我们的案例中,间隔始终为一小时,因此我们非常希望估算观察 10 列以上火车的可能性。 如何获得*μ*的正确数字?
最常见的策略称为**最大似然估计** **MLE** )。 它收集了一组观测值,并找到了 *μ*的值,该值最大化了通过我们的分布生成所有点的概率。
最常见的策略称为**最大似然估计****MLE**)。 它收集了一组观测值,并找到了 *μ*的值,该值最大化了通过我们的分布生成所有点的概率。
假设我们收集了 *N 个*观测值(每个观测值是一个小时内的到达次数),则*μ***可能性**相对于所有样本的概率就是 使用 *μ*计算的概率分布下的所有样本(为简单起见,假设为 IID):
......@@ -389,7 +389,7 @@ mu = 9.12
Histogram of the initial distribution
为了计算请求的概率,我们需要使用**累积分布函数** **CDF** ),该函数在 SciPy 中实现(在`scipy.stats`包中)。 特别是,由于我们对观测比固定值更多的火车的可能性感兴趣,因此有必要使用**生存函数****SF** ),它对应于 *1- CDF* ,如下所示:
为了计算请求的概率,我们需要使用**累积分布函数****CDF**),该函数在 SciPy 中实现(在`scipy.stats`包中)。 特别是,由于我们对观测比固定值更多的火车的可能性感兴趣,因此有必要使用**生存函数****SF**),它对应于 *1- CDF* ,如下所示:
```py
from scipy.stats import poisson
......@@ -527,7 +527,7 @@ Histogram of 2000 points sampled from the final Poisson distribution
我们还重点研究了前两个模型,探讨了有监督,无监督,半监督和强化学习之间的差异。 我们还使用了两个简单的示例来了解监督和非监督方法。
在下一章中,我们将介绍聚类分析的基本概念,并将讨论重点放在一些非常著名的算法上,例如 k 均值和 **K 最近邻** **KNN** ) ,以及最重要的评估指标。
在下一章中,我们将介绍聚类分析的基本概念,并将讨论重点放在一些非常著名的算法上,例如 k 均值和 **K 最近邻****KNN**) ,以及最重要的评估指标。
......
......@@ -11,8 +11,8 @@
* 聚类和距离函数简介
* K 均值和 K 均值++
* 评估指标
* **最近的邻居** **KNN**
* **矢量量化** **VQ**
* **最近的邻居****KNN**
* **矢量量化****VQ**
......@@ -245,7 +245,7 @@ Pair-plot of perimeter mean, area mean, smoothness mean, concavity mean, and sym
* 其他图(例如`perimeter_mean` / `area_mean``smoothness_mean``area_mean``symmetry_mean``concavity_mean``smoothness_mean``concavity_mean``symmetry_mean`)具有水平间距( 变为垂直反转轴)。 这意味着,对于独立变量( *x* 轴)假定的几乎所有值,都有一个阈值将另一个变量的值分成两组(良性和恶性)。
* 一些图(例如`perimeter_mean` / `area_mean``concavity_mean` / `concavity_mean``symmetry_mean`)显示了略微负的斜对角线间距。 这意味着,当自变量较小时,诊断几乎对因变量的所有值均保持不变,而另一方面,当自变量变得越来越大时,诊断将按比例切换为相反的值。 例如,对于较小的`perimeter_mean`值,`concavity_mean`可以达到最大值而不影响诊断(良性),而`perimeter_mean > 150`总是独立于`concavity_mean`进行恶性诊断。
当然,我们不能轻易地从拆分分析中得出结论(因为我们需要考虑所有交互作用),但是此活动将有助于为每个群集提供语义标签。 此时,通过 **t 分布随机邻居嵌入** **t-SNE** )变换(用于 进一步的细节,请检查*使用 t-SNE 可视化数据, van der Maaten L.,Hinton G.,Journal of Machine Learning Research 9,* 2008)。 可以按照以下步骤进行:
当然,我们不能轻易地从拆分分析中得出结论(因为我们需要考虑所有交互作用),但是此活动将有助于为每个群集提供语义标签。 此时,通过 **t 分布随机邻居嵌入****t-SNE**)变换(用于 进一步的细节,请检查*使用 t-SNE 可视化数据, van der Maaten L.,Hinton G.,Journal of Machine Learning Research 9,* 2008)。 可以按照以下步骤进行:
```py
import pandas as pd
......@@ -575,7 +575,7 @@ V-Score: 0.46479332792160793
该分数的主要目标是评估 *Y <sub class="calibre20">true</sub>**Y <sub class="calibre20">pred</sub>* 之间的一致性水平 。 可以通过采用**互信息** **MI** )的信息论概念来衡量这一目标; 在我们的例子中,它定义为:
该分数的主要目标是评估 *Y <sub class="calibre20">true</sub>**Y <sub class="calibre20">pred</sub>* 之间的一致性水平 。 可以通过采用**互信息****MI**)的信息论概念来衡量这一目标; 在我们的例子中,它定义为:
![](img/208136bf-137d-46b0-a63c-99b1a72464e5.png)
......@@ -779,7 +779,7 @@ First 50 neighbors using a radius query
**矢量量化** **VQ** )是一种利用无监督学习对样本 *x <sub class="calibre20">i</sub> ∈ℜ<sup class="calibre27">进行有损压缩的方法。 N</sup>* (为简单起见,我们假设多维样本被展平)或整个数据集 *X* 。 主要思想是找到带有许多条目 *C < < N* 的密码本 *Q* ,并将每个元素与条目 *q <sub class="calibre20">相关联 i</sub> ∈Q* 。 在单个样本的情况下,每个条目将代表一个或多个特征组(例如,可以是均值),因此,该过程可以描述为一种变换 *T* ,其一般表示为 :
**矢量量化****VQ**)是一种利用无监督学习对样本 *x <sub class="calibre20">i</sub> ∈ℜ<sup class="calibre27">进行有损压缩的方法。 N</sup>* (为简单起见,我们假设多维样本被展平)或整个数据集 *X* 。 主要思想是找到带有许多条目 *C < < N* 的密码本 *Q* ,并将每个元素与条目 *q <sub class="calibre20">相关联 i</sub> ∈Q* 。 在单个样本的情况下,每个条目将代表一个或多个特征组(例如,可以是均值),因此,该过程可以描述为一种变换 *T* ,其一般表示为 :
![](img/cfb86f7a-2dce-4c03-9d28-1886d7c91fea.png)
......
......@@ -10,10 +10,10 @@
* 光谱聚类
* 平均移动
* **具有噪声** **DBSCAN** )的应用程序的基于密度的空间聚类
* **具有噪声****DBSCAN**)的应用程序的基于密度的空间聚类
* 其他评估指标:Calinski-Harabasz 指数和集群不稳定性
* K-类固醇
* 在线聚类(小批量 K 均值和**使用层次结构** **BIRCH** )平衡的迭代减少和聚类)
* 在线聚类(小批量 K 均值和**使用层次结构****BIRCH**)平衡的迭代减少和聚类)
......@@ -52,7 +52,7 @@
Example of a graph: Point x<sub class="calibre26">0</sub> is the only one that is connected to x<sub class="calibre26">1</sub>
可以使用两种主要策略来确定权重 *w <sub class="calibre20">ij</sub>* :KNN 和**径向基函数** **RBF** )。 第一个基于上一章中讨论的相同算法。 考虑到邻居数 *k* ,数据集表示为球树或 kd 树,对于每个样本 *x <sub class="calibre20">i</sub>* ,集合 *计算 kNN(x <sub class="calibre20">i</sub> )*。 此时,给定另一个样本 *x <sub class="calibre20">j</sub>* ,权重计算如下:
可以使用两种主要策略来确定权重 *w <sub class="calibre20">ij</sub>* :KNN 和**径向基函数****RBF**)。 第一个基于上一章中讨论的相同算法。 考虑到邻居数 *k* ,数据集表示为球树或 kd 树,对于每个样本 *x <sub class="calibre20">i</sub>* ,集合 *计算 kNN(x <sub class="calibre20">i</sub> )*。 此时,给定另一个样本 *x <sub class="calibre20">j</sub>* ,权重计算如下:
![](img/4db86673-2afb-402b-a4b5-024582b58949.png)
......@@ -145,7 +145,7 @@ Original dataset (left). Spectral clustering result (center). K-means result (ri
让我们考虑一个数据集 *X∈ <sup class="calibre27">M×N</sup>**MN* 维样本)是从多元数据生成过程 *p <sub class="calibre20">数据中得出的</sub>***均值漂移**算法应用于聚类问题的目的是找到 *p <sub class="calibre20">数据</sub>* 最大的区域,并将周围子区域中包含的样本与 同一集群。 由于 *p <sub class="calibre20">数据</sub>* 是 P **鲁棒性密度函数** **PDF** ),因此将其表示为 以一小部分参数(例如均值和方差)为特征的常规 PDF(例如,高斯)的总和。 以这种方式,可以认为 PDF 由样本生成的概率最高。 我们还将在[第 5 章](../Text/05.html)*软聚类和高斯混合模型,*[第 6 章](../Text/06.html)*异常检测*中讨论该过程。 出于我们的目的,将问题重构为一个迭代过程,可以更新均值矢量(质心)的位置,直到达到最大值为止。 当质心到达其最终位置时,将使用标准邻域函数将样本分配给每个聚类。
让我们考虑一个数据集 *X∈ <sup class="calibre27">M×N</sup>**MN* 维样本)是从多元数据生成过程 *p <sub class="calibre20">数据中得出的</sub>***均值漂移**算法应用于聚类问题的目的是找到 *p <sub class="calibre20">数据</sub>* 最大的区域,并将周围子区域中包含的样本与 同一集群。 由于 *p <sub class="calibre20">数据</sub>* 是 P **鲁棒性密度函数****PDF**),因此将其表示为 以一小部分参数(例如均值和方差)为特征的常规 PDF(例如,高斯)的总和。 以这种方式,可以认为 PDF 由样本生成的概率最高。 我们还将在[第 5 章](../Text/05.html)*软聚类和高斯混合模型,*[第 6 章](../Text/06.html)*异常检测*中讨论该过程。 出于我们的目的,将问题重构为一个迭代过程,可以更新均值矢量(质心)的位置,直到达到最大值为止。 当质心到达其最终位置时,将使用标准邻域函数将样本分配给每个聚类。
该算法的第一步是确定近似 p <sub class="calibre20">数据</sub>的合适方法。 一种经典方法(将在 **Parzen 的使用上(将在[第 6](https://cdp.packtpub.com/hands_on_unsupervised_learning_with_python/wp-admin/post.php?post=26&action=edit#post_29) , *异常检测*中进行讨论)。 Windows** 。 就目前而言,可以说 Parzen 窗口是一个非负内核函数 *f(•)*,其特征是称为**带宽**的参数(有关更多详细信息,请参阅原始论文) *关于概率密度函数和模式的估计,Parzen E。, 《数理统计年鉴》 33,* 1962)。 顾名思义,此参数的作用是加宽或限制 Parzen 窗口接近其最大值的区域。 考虑到与高斯分布的类比,带宽具有与方差相同的作用。 因此,较小的带宽将产生在均值附近非常峰值的函数,而较大的值与较平坦的函数关联。 不难理解,在这种特定情况下,群集的数量由带宽和相反的方式隐式确定。 因此,大多数实现(例如 scikit-learn)仅采用一个参数,然后计算另一个参数。 考虑到该算法已设计为适用于概率分布,自然的选择是指定所需带宽或让实现检测最佳带宽。 这个过程看起来比施加特定数量的群集更为复杂,但是,在许多实际情况下,尤其是当至少部分地了解了基本事实时,测试不同带宽的结果会更容易。
......@@ -256,11 +256,11 @@ The point x<sub class="calibre26">2</sub> is density-reachable from x<sub class=
假设将聚类算法应用于包含 *M* 个样本的数据集 *X* ,以便将其分割为 *n <sub class="calibre20">c</sub>* 聚类[ 由重心*μ <sub class="calibre20">i</sub> 表示的 HTG8 C <sub class="calibre20">i</sub>* i = 1..n <sub class="calibre20">c</sub> 。 我们可以将 **W** **ithin-Cluster Dispersion** ( **WCD** )定义如下:
假设将聚类算法应用于包含 *M* 个样本的数据集 *X* ,以便将其分割为 *n <sub class="calibre20">c</sub>* 聚类[ 由重心*μ <sub class="calibre20">i</sub> 表示的 HTG8 C <sub class="calibre20">i</sub>* i = 1..n <sub class="calibre20">c</sub> 。 我们可以将 **W** **ithin-Cluster Dispersion**(**WCD**)定义如下:
![](img/741ff380-397d-4cc0-b3e3-e2386ba5783e.png)
如果 *x <sub class="calibre20">i</sub>**N* 维列向量,则 *X <sub class="calibre20">k</sub> ∈ℜ <sup class="calibre27">N×N</sup>* 。 不难理解, *WCD(k)*编码有关群集的*伪方差*的全局信息。 如果满足最大内聚条件,我们预计质心周围的分散性有限。 另一方面,即使 *WCD(k)*也可能受到包含异常值的单个群集的负面影响。 因此,我们的目标是在每种情况下都将 *WCD(k)*最小化。 以类似的方式,我们可以将 **B** **集群间色散** **BCD** )定义为:
如果 *x <sub class="calibre20">i</sub>**N* 维列向量,则 *X <sub class="calibre20">k</sub> ∈ℜ <sup class="calibre27">N×N</sup>* 。 不难理解, *WCD(k)*编码有关群集的*伪方差*的全局信息。 如果满足最大内聚条件,我们预计质心周围的分散性有限。 另一方面,即使 *WCD(k)*也可能受到包含异常值的单个群集的负面影响。 因此,我们的目标是在每种情况下都将 *WCD(k)*最小化。 以类似的方式,我们可以将 **B** **集群间色散****BCD**)定义为:
![](img/35bb2ca3-fcae-4e7b-9943-107c6e61c69d.png)
......
......@@ -86,7 +86,7 @@
![](img/f6f3bba1-aaea-4d25-85a7-a5c056ec4320.png)
余弦距离的应用非常特殊(例如**自然语言处理** **NLP** )),因此,这不是一个常见的选择。 但是,我建议您使用一些样本矢量(例如[ *0、1* 、、 [ *1、0* ]和( *0.5、0.5* ),因为它可以解决许多现实生活中的问题(例如,在 word2vec 中,可以通过检查它们的余弦相似度来轻松评估两个单词的相似度)。一旦定义了距离度量,定义[ **接近矩阵**, *P* :
余弦距离的应用非常特殊(例如**自然语言处理****NLP**)),因此,这不是一个常见的选择。 但是,我建议您使用一些样本矢量(例如[ *0、1* 、、 [ *1、0* ]和( *0.5、0.5* ),因为它可以解决许多现实生活中的问题(例如,在 word2vec 中,可以通过检查它们的余弦相似度来轻松评估两个单词的相似度)。一旦定义了距离度量,定义[ **接近矩阵**, *P* :
![](img/3e160312-31e8-4484-bd90-4697761fa04f.png)
......@@ -130,7 +130,7 @@
另一种常见的方法称为**平均链接**(或**具有算术平均值的非加权对组方法** **UPGMA** )。 定义如下:
另一种常见的方法称为**平均链接**(或**具有算术平均值的非加权对组方法****UPGMA**)。 定义如下:
![](img/4fc15787-cd87-42b0-85ce-5ca51d3e66f9.png)
......@@ -256,7 +256,7 @@ plt.show()
![](img/5a3b29f5-fbf7-4acd-abfb-849ff081295e.png)
换句话说, *CP <sub class="calibre20">ij</sub>* 元素是观察 *x <sub class="calibre20">i</sub>**x <sub class="calibre20">j 所需的最小差异 同一群集中的</sub>* 。 可以证明 *CP <sub class="calibre20">ij</sub>**x <sub class="calibre20">i</sub>**x <sub class="calibre20">j</sub> 之间的距离度量* ,; 因此, *CP**P* 类似,并且具有与邻近矩阵相同的属性(例如,所有对角元素为空)。 特别是,我们对它们的相关性感兴趣(在 *-1**1* 范围内标准化)。 这样的值(**色相关系数** **CPC** )表示 *P**CP* 之间的一致性程度,并且可以很容易地计算出, 如以下等式所示。
换句话说, *CP <sub class="calibre20">ij</sub>* 元素是观察 *x <sub class="calibre20">i</sub>**x <sub class="calibre20">j 所需的最小差异 同一群集中的</sub>* 。 可以证明 *CP <sub class="calibre20">ij</sub>**x <sub class="calibre20">i</sub>**x <sub class="calibre20">j</sub> 之间的距离度量* ,; 因此, *CP**P* 类似,并且具有与邻近矩阵相同的属性(例如,所有对角元素为空)。 特别是,我们对它们的相关性感兴趣(在 *-1**1* 范围内标准化)。 这样的值(**色相关系数****CPC**)表示 *P**CP* 之间的一致性程度,并且可以很容易地计算出, 如以下等式所示。
由于 *P**CP* 均为( *n×n* )对称矩阵且对角元素为空,因此可以仅考虑下三角 部分(不包括对角线,表示为 *Tril(•)*),包含 *n(n-1)/ 2* 值。 因此,平均值如下:
......
......@@ -244,7 +244,7 @@ print(W[:, im])
![](img/e3538331-6360-40d2-a9ad-3e1208b7bc2e.png)
在前面的公式中,我们利用指数指示符表示法,它依赖于 *z <sub class="calibre20">ij</sub>* 只能为 0 或 1 的事实。因此,当 *z <sub class="calibre20">ij</sub> = 0* ,这意味着 *j* <sup xmlns:epub="http://www.idpf.org/2007/ops" class="calibre27">th</sup> 高斯尚未生成样本 *x <sub class="calibre20">i</sub>* 乘积中的对应项变为 1(即 *x <sup class="calibre27">0</sup> = 1* )。 相反,当 *z <sub class="calibre20">ij</sub> = 1* 时,该项等于 *x <sub class="calibre20">i</sub>**j [* <sup xmlns:epub="http://www.idpf.org/2007/ops" class="calibre27">th</sup> 高斯。 因此,假设每个 *x <sub class="calibre20">i</sub> ∈X* 独立且均匀分布,则联合对数似然是模型已生成整个数据集的联合概率( **IID** )。 要解决的问题是**最大似然估计****MLE** ),换句话说,就是找到最大化 *L( θ; X,Z )*。 但是,没有观察到(或隐含)变量 *z <sub class="calibre20">ij</sub>* ,因此无法直接最大化可能性,因为我们不知道它们的值。
在前面的公式中,我们利用指数指示符表示法,它依赖于 *z <sub class="calibre20">ij</sub>* 只能为 0 或 1 的事实。因此,当 *z <sub class="calibre20">ij</sub> = 0* ,这意味着 *j* <sup xmlns:epub="http://www.idpf.org/2007/ops" class="calibre27">th</sup> 高斯尚未生成样本 *x <sub class="calibre20">i</sub>* 乘积中的对应项变为 1(即 *x <sup class="calibre27">0</sup> = 1* )。 相反,当 *z <sub class="calibre20">ij</sub> = 1* 时,该项等于 *x <sub class="calibre20">i</sub>**j [* <sup xmlns:epub="http://www.idpf.org/2007/ops" class="calibre27">th</sup> 高斯。 因此,假设每个 *x <sub class="calibre20">i</sub> ∈X* 独立且均匀分布,则联合对数似然是模型已生成整个数据集的联合概率(**IID**)。 要解决的问题是**最大似然估计****MLE**),换句话说,就是找到最大化 *L( θ; X,Z )*。 但是,没有观察到(或隐含)变量 *z <sub class="calibre20">ij</sub>* ,因此无法直接最大化可能性,因为我们不知道它们的值。
解决此问题的最有效方法是采用 EM 算法(由 Dempster AP,Laird NM 和 Rubin DB 中的 Dempster,Laird 和 Rubin 提出,*通过 EM 算法,皇家统计协会杂志*,系列 B. 39(1),1977 年。 完整的解释超出了本书的范围,但是我们想提供主要步骤。 首先要做的是使用概率的链式规则,以便将先前的表达式转换为条件概率的总和(可以很容易地对其进行管理):
......@@ -405,13 +405,13 @@ P([1, 0]=G1) = 0.068 and P([1, 0]=G2) = 0.932
由于高斯混合是一个概率模型,因此要找到最佳的组件数,需要的方法不同于前面章节中分析的方法。 **赤池信息准则** **AIC** )是使用最广泛的技术之一,它基于信息论(首次在 Akaike H.中提出, *请看统计模型识别,IEEE 自动控制事务,* 19(6))。 如果概率模型具有 *n <sub class="calibre20">p</sub>* 参数(即,必须学习的单个值)并且达到最大负对数可能性,则 *L <sub class="calibre20">选择</sub>* ,AIC 定义如下:
由于高斯混合是一个概率模型,因此要找到最佳的组件数,需要的方法不同于前面章节中分析的方法。 **赤池信息准则****AIC**)是使用最广泛的技术之一,它基于信息论(首次在 Akaike H.中提出, *请看统计模型识别,IEEE 自动控制事务,* 19(6))。 如果概率模型具有 *n <sub class="calibre20">p</sub>* 参数(即,必须学习的单个值)并且达到最大负对数可能性,则 *L <sub class="calibre20">选择</sub>* ,AIC 定义如下:
![](img/be138ce2-232e-4f56-bea4-bb9522afbb79.png)
这种方法有两个重要含义。 第一个是关于价值本身。 AIC 越小,得分越高。 实际上,考虑到奥卡姆(Occam)的剃刀原理,模型的目的是用最少的参数获得最佳的似然性。 第二个含义与信息理论严格相关(我们不在讨论数学上繁琐的细节),尤其是与数据生成过程和通用概率模型之间的信息丢失有关。 可以证明 AIC 的渐近最小化(即,当样本数量趋于无穷大时)等于信息丢失的最小化。 考虑基于不同成分数量的几种高斯混合( *n <sub class="calibre20">p</sub>* 是所有权重,均值和协方差参数的总和),具有最小 AIC 的配置对应于该模型 可以最高精度地再现数据生成过程。 AIC 的主要局限性在于小型数据集。 在这种情况下,AIC 倾向于针对大量参数达到最小值,这与 Occam 的剃刀原理相反。 但是,在大多数现实生活中,AIC 提供了一种有用的相对措施,可以帮助数据科学家排除许多配置并仅分析最有前途的配置。
当需要强制将参数的数量保持在非常低的水平时,可以使用**贝叶斯信息准则** **BIC** ),其定义如下:
当需要强制将参数的数量保持在非常低的水平时,可以使用**贝叶斯信息准则****BIC**),其定义如下:
![](img/21e81cf5-322e-49fe-ab4a-4128de243bf0.png)
......
......@@ -10,7 +10,7 @@
* 概率密度函数及其基本性质简介
* 直方图及其局限性
* **内核密度估计** **KDE**
* **内核密度估计****KDE**
* 带宽选择标准
* 异常检测的单变量示例
* 使用 KDD Cup 99 数据集的 HTTP 攻击异常检测示例
......@@ -46,7 +46,7 @@
在所有先前的章节 中,我们一直认为我们的数据集是从隐式数据生成过程 *p <sub class="calibre20">数据</sub>* 以及所有 算法假设 *x <sub class="calibre20">i</sub> ∈X***独立且均匀分布的** **IID** )并进行均匀采样。 我们假设 *X* 足够准确地表示 *p <sub class="calibre20">数据</sub>* ,以便算法可以学习使用有限的初始知识进行概括。 相反,在本章中,我们感兴趣的是直接建模 *p <sub class="calibre20">数据</sub>* ,而没有任何具体限制(例如,高斯混合模型通过对数据结构施加约束来实现此目标 分布)。 在讨论一些非常有效的方法之前,简要回顾一下在可测量子集 *X ![](img/6cce89ef-bec6-4be5-a2af-54e4704353b1.png)ℜn*上定义的通用连续概率密度函数 *p(x)*的性质很有帮助(避免 混淆,我们将用 *p(x)*表示密度函数,用 *P(x)*表示实际概率):
在所有先前的章节 中,我们一直认为我们的数据集是从隐式数据生成过程 *p <sub class="calibre20">数据</sub>* 以及所有 算法假设 *x <sub class="calibre20">i</sub> ∈X***独立且均匀分布的****IID**)并进行均匀采样。 我们假设 *X* 足够准确地表示 *p <sub class="calibre20">数据</sub>* ,以便算法可以学习使用有限的初始知识进行概括。 相反,在本章中,我们感兴趣的是直接建模 *p <sub class="calibre20">数据</sub>* ,而没有任何具体限制(例如,高斯混合模型通过对数据结构施加约束来实现此目标 分布)。 在讨论一些非常有效的方法之前,简要回顾一下在可测量子集 *X ![](img/6cce89ef-bec6-4be5-a2af-54e4704353b1.png)ℜn*上定义的通用连续概率密度函数 *p(x)*的性质很有帮助(避免 混淆,我们将用 *p(x)*表示密度函数,用 *P(x)*表示实际概率):
![](img/56c00e44-2ed4-4572-a7cd-087d8160596e.png)
......@@ -144,7 +144,7 @@ The dataset can be reproduced only using the random seed `1000` (that is, settin
![](img/ad9c7ed6-68a9-47f3-9993-9ed18def14f8.png)
在上式中,**四分位数范围** **IQR** )对应于第 75 <sup class="calibre27"></sup>和第 25 <sup class="calibre27"></sup>百分位数。 由于我们对分布没有一个清晰的概念,因此我们希望依靠自动选择,如以下代码片段所示:
在上式中,**四分位数范围****IQR**)对应于第 75 <sup class="calibre27"></sup>和第 25 <sup class="calibre27"></sup>百分位数。 由于我们对分布没有一个清晰的概念,因此我们希望依靠自动选择,如以下代码片段所示:
```py
import numpy as np
......@@ -204,7 +204,7 @@ P(48.84 < x < 51.58) = 0.13 (13.43%)
![](img/57b50dc7-5192-473a-bd5c-40297d344ae6.png)
在讨论称为**核密度估计** **KDE** )的技术之前,显示 *K(•)*的一些常见选择将很有帮助。
在讨论称为**核密度估计****KDE**)的技术之前,显示 *K(•)*的一些常见选择将很有帮助。
......@@ -264,7 +264,7 @@ Epanechnikov kernel
Exponential kernel
可以看到,这样的函数适合于建模非常不规则的分布,其密度高度集中在某些特定点周围。 另一方面,当数据生成过程非常规则且表面光滑时,误差可能会非常高。 **平均积分平方误差** **MISE** )可以用来评估内核(和带宽)的性能,是一种很好的理论方法,其定义如下:
可以看到,这样的函数适合于建模非常不规则的分布,其密度高度集中在某些特定点周围。 另一方面,当数据生成过程非常规则且表面光滑时,误差可能会非常高。 **平均积分平方误差****MISE**)可以用来评估内核(和带宽)的性能,是一种很好的理论方法,其定义如下:
![](img/2f177691-5433-440d-b548-5620efa7b7af.png)
......@@ -660,7 +660,7 @@ Bivariate plot of the source and destination bytes densities
一类**支持向量机** **SVM** )的概念已由 SchölkopfB,Platt JC,Shawe-Taylor JC,Smola AJ 和 Williamson RC 提出[ *,《估计高维分布的支持》,《神经计算》,13 / 7,2001* 作为一种将新颖性分类为从真实数据生成过程中抽取的样本或异常值的方法。 让我们从我们要实现的目标开始:找到一个无监督模型,在给定样本 *x <sub class="calibre20">i</sub>* 的情况下,可以产生二进制输出 *y <sub class="calibre20">i</sub>* (通常,SVM 的结果是双极性的,分别为-1 和+1),因此,如果 *x <sub class="calibre20">i</sub>* 属于内在 *y <sub class="calibre20">i</sub> = 如果 *x <sub class="calibre20">i</sub>* 是一个异常值,则[+1]* 以及 *y <sub class="calibre20">i</sub> = -1* ,在上述论文中,假设对构成训练集的大多数内线而言,结果是 *1* 。 乍一看,这似乎是一个经典的监督问题。 但是,这不是因为不需要标签数据集。 实际上,给定一个包含 *m* 样本 *x <sub class="calibre20">i</sub> ∈ <sup class="calibre27">n</sup>* 的数据集 *X* ,模型将是 使用一个固定的类进行训练,目的是找到一个分离的超平面,该平面使 *X* 与原点之间的距离最大化。 首先,让我们考虑一个简单的线性情况,如下图所示:
一类**支持向量机****SVM**)的概念已由 SchölkopfB,Platt JC,Shawe-Taylor JC,Smola AJ 和 Williamson RC 提出[ *,《估计高维分布的支持》,《神经计算》,13 / 7,2001* 作为一种将新颖性分类为从真实数据生成过程中抽取的样本或异常值的方法。 让我们从我们要实现的目标开始:找到一个无监督模型,在给定样本 *x <sub class="calibre20">i</sub>* 的情况下,可以产生二进制输出 *y <sub class="calibre20">i</sub>* (通常,SVM 的结果是双极性的,分别为-1 和+1),因此,如果 *x <sub class="calibre20">i</sub>* 属于内在 *y <sub class="calibre20">i</sub> = 如果 *x <sub class="calibre20">i</sub>* 是一个异常值,则[+1]* 以及 *y <sub class="calibre20">i</sub> = -1* ,在上述论文中,假设对构成训练集的大多数内线而言,结果是 *1* 。 乍一看,这似乎是一个经典的监督问题。 但是,这不是因为不需要标签数据集。 实际上,给定一个包含 *m* 样本 *x <sub class="calibre20">i</sub> ∈ <sup class="calibre27">n</sup>* 的数据集 *X* ,模型将是 使用一个固定的类进行训练,目的是找到一个分离的超平面,该平面使 *X* 与原点之间的距离最大化。 首先,让我们考虑一个简单的线性情况,如下图所示:
![](img/0b1fe0d8-9c63-476f-85b5-359a89c61f10.png)
......
......@@ -8,14 +8,14 @@
特别是,我们将讨论以下主题:
* **主成分分析** **PCA**
* **奇异值分解** **SVD** )和增白
* **主成分分析****PCA**
* **奇异值分解****SVD**)和增白
* 内核 PCA
* 稀疏的 PCA 和字典学习
* 因子分析
* **独立成分分析** **ICA**
* **非负矩阵分解** **NNMF**
* **潜在狄利克雷分配** **LDA**
* **独立成分分析****ICA**
* **非负矩阵分解****NNMF**
* **潜在狄利克雷分配****LDA**
......@@ -52,7 +52,7 @@
在前面的公式中,*Σ*是协方差矩阵。 如果我们假设(不失一般性) *Σ*是对角线,那么很容易理解,熵(成比例地)大于每个单个分量的方差*σ <sub class="calibre20">i</sub> <sup class="calibre27">2</sup>* 。 这不足为奇,因为方差低的随机变量集中在均值附近,出现意外的可能性低。 另一方面,当*σ <sup class="calibre27">2</sup>* 变得越来越大时,潜在结果随着不确定性而增加,不确定性与信息量成正比。
当然,组件的影响通常是不同的; 因此,**主成分分析** **PCA** )的目标是,可以找到可以将其投影到较低维子空间的样本的线性变换,因此 以保持最大的初始方差量。 实际上,让我们考虑一个数据集 *X∈G <sup class="calibre27">m×n</sup>*
当然,组件的影响通常是不同的; 因此,**主成分分析****PCA**)的目标是,可以找到可以将其投影到较低维子空间的样本的线性变换,因此 以保持最大的初始方差量。 实际上,让我们考虑一个数据集 *X∈G <sup class="calibre27">m×n</sup>*
![](img/f228a482-b17a-47db-a19c-cdce3779555f.png)
......@@ -104,7 +104,7 @@ Principal components of a bidimensional dataset; the first principal component l
即使我们将采用完整的 PCA 实施,了解如何有效地执行此过程也将有所帮助。 当然,最明显的处理方法是基于样本协方差矩阵的计算,其特征分解(将输出特征值和对应的特征向量),然后最后可以构建变换矩阵。 这种方法很简单,但不幸的是,它效率也不高。 主要原因是我们需要计算样本协方差矩阵,这对于大型数据集而言可能是一项非常长的任务。
**奇异值分解** **SVD** )提供了一种更为有效的方法,它是一种线性代数程序,具有一些重要特征:它可以直接在数据集上操作,可以停止 当提取了所需数量的组件时,并且有增量版本可以小批量工作,从而解决了内存不足的问题。 特别地,考虑到数据集 *X∈ <sup class="calibre27">m×n</sup>* ,SVD 可以表示为:
**奇异值分解****SVD**)提供了一种更为有效的方法,它是一种线性代数程序,具有一些重要特征:它可以直接在数据集上操作,可以停止 当提取了所需数量的组件时,并且有增量版本可以小批量工作,从而解决了内存不足的问题。 特别地,考虑到数据集 *X∈ <sup class="calibre27">m×n</sup>* ,SVD 可以表示为:
![](img/8c7d96e8-429e-41e8-b107-4f95d67c39c3.png)
......@@ -299,7 +299,7 @@ Original dataset (left); PCA projected version (right)
一些常见的内核如下:
* **径向基函数** **RBF** )或高斯核:![](img/be7df07d-e755-4712-9b16-409ec45c4d9d.png)
* **径向基函数****RBF**)或高斯核:![](img/be7df07d-e755-4712-9b16-409ec45c4d9d.png)
* *p* 为![](img/464465b9-c466-4538-8f60-33259f9424d7.png)的多项式内核
* 乙状结肠内核:![](img/f1b5b271-2c9d-46d2-99c5-e00687a24f4c.png)
......@@ -342,7 +342,7 @@ Original dataset (left); kernel PCA projected version (right)
![](img/f30e647b-5fcb-4fb0-a0fc-26e5698a673d.png)
因此,我们现在假设样本 *x <sub class="calibre20">i</sub>* 是一组高斯潜变量加上一个额外的异方差噪声项的组合。 由于潜在变量的维数较低,因此问题与标准 PCA 非常相似,主要区别在于,我们现在考虑了异方差噪声(当然, *n* 项也可以为 null,或者 同调)。 因此,当确定分量(即潜在变量)时,模型中将包括不同噪声方差的影响,最终效果是部分滤波(降噪)。 在上述论文中,作者提出了一种优化算法,该算法形式上不是很复杂,但是需要许多数学操作(因此,我们省略了任何证明)。 此方法基于**期望最大化** **EM** )算法,该算法有助于查找使对数似然性最大化的参数集。 在本书中,我们无需讨论所有数学细节(可在原始论文中找到),而是检查该方法的属性并将结果与​​标准 PCA 进行比较。
因此,我们现在假设样本 *x <sub class="calibre20">i</sub>* 是一组高斯潜变量加上一个额外的异方差噪声项的组合。 由于潜在变量的维数较低,因此问题与标准 PCA 非常相似,主要区别在于,我们现在考虑了异方差噪声(当然, *n* 项也可以为 null,或者 同调)。 因此,当确定分量(即潜在变量)时,模型中将包括不同噪声方差的影响,最终效果是部分滤波(降噪)。 在上述论文中,作者提出了一种优化算法,该算法形式上不是很复杂,但是需要许多数学操作(因此,我们省略了任何证明)。 此方法基于**期望最大化****EM**)算法,该算法有助于查找使对数似然性最大化的参数集。 在本书中,我们无需讨论所有数学细节(可在原始论文中找到),而是检查该方法的属性并将结果与​​标准 PCA 进行比较。
让我们首先加载 Olivetti 人脸数据集,将其零居中,然后创建一个异方差嘈杂的版本,如下所示:
......@@ -458,7 +458,7 @@ Absolute coefficients for the sparse transformation of the digit X[0]
当数据集 *X* 为非负数时,可以应用已被证明的分解技术(例如,在*中通过非负矩阵分解学习对象的部分, Lee DD 和 Seung,SH,Nature,* 401,10 / 1999)在任务目标是提取与样品结构部分相对应的原子时更加可靠。 例如,在图像的情况下,它们应该是几何元素,甚至是更复杂的部分。 **非负矩阵分解** **NNMF** )施加的主要条件是,所有涉及的矩阵都必须为非负,并且 *X = UV* 。 因此,一旦定义了标准 *N* (例如 Frobenius),则简单目标就变成了:
当数据集 *X* 为非负数时,可以应用已被证明的分解技术(例如,在*中通过非负矩阵分解学习对象的部分, Lee DD 和 Seung,SH,Nature,* 401,10 / 1999)在任务目标是提取与样品结构部分相对应的原子时更加可靠。 例如,在图像的情况下,它们应该是几何元素,甚至是更复杂的部分。 **非负矩阵分解****NNMF**)施加的主要条件是,所有涉及的矩阵都必须为非负,并且 *X = UV* 。 因此,一旦定义了标准 *N* (例如 Frobenius),则简单目标就变成了:
![](img/f554b0eb-d763-49ca-a7c2-6916ff5e9523.png)
......@@ -617,7 +617,7 @@ ica.fit(faces['data'])
![](img/92cf505a-127c-48d7-b166-8e5a743c9be2.png)
**潜在狄利克雷分配** **LDA** )是一个生成模型(训练目标以简单的方式包括找到最佳参数*α**γ)* ),它能够从语料库中提取固定数量的主题,并用一组单词来表征它们。 给定示例文档,它可以通过提供主题混合概率矢量( *θ <sub class="calibre20">i</sub> = (p(t <sub class="calibre20">1</sub> ),p(t <sub class="calibre20">2</sub> ),...,p(t <sub class="calibre20">k</sub> )*);它也可以处理看不见的文档(使用同一词典)。
**潜在狄利克雷分配****LDA**)是一个生成模型(训练目标以简单的方式包括找到最佳参数*α**γ)* ),它能够从语料库中提取固定数量的主题,并用一组单词来表征它们。 给定示例文档,它可以通过提供主题混合概率矢量( *θ <sub class="calibre20">i</sub> = (p(t <sub class="calibre20">1</sub> ),p(t <sub class="calibre20">2</sub> ),...,p(t <sub class="calibre20">k</sub> )*);它也可以处理看不见的文档(使用同一词典)。
现在,让我们将 LDA 应用于 20 个新闻组数据集中的一个子集,其中包含数千个已公开发布以供 NLP 研究的消息。 特别是,我们要对`rec.autos``comp.sys.mac.hardware`子组建模。 我们可以使用内置的 scikit-learn `fetch_20newsgroups()`函数,要求去除所有不必要的页眉,页脚和引号(答案所附的其他帖子):
......
......@@ -15,7 +15,7 @@
* PCA 神经网络:
* 桑格的网络
* Rubner-Attic 的网络
* 无人监督**深度信任网络** **DBN**
* 无人监督**深度信任网络****DBN**
......@@ -48,7 +48,7 @@
[第 7 章](../Text/07.html)*降维和成分分析*中,我们讨论了一些通用的方法,这些方法可用于降低数据集的维数,因为其具有特殊的统计属性(例如协方差) 矩阵)。 但是,当复杂度增加时,即使**内核主成分分析** **k** **内核 PCA** )也可能找不到合适的低维表示形式。 换句话说,信息的丢失可以克服一个阈值,该阈值保证了有效重建样本的可能性。 **自动编码器**是利用神经网络的极端非线性特性来查找给定数据集的低维表示的模型。 特别地,假设 *X* 是从数据生成过程中提取的一组样本, *p <sub class="calibre20">数据</sub>(x)*。 为简单起见,我们将考虑 *x <sub class="calibre20">i</sub> ∈ <sup class="calibre27">n</sup>* ,但对支撑结构没有任何限制(例如,对于 RGB 图像,[ *x <sub class="calibre20">i</sub> ∈ <sup class="calibre27">n×m×3</sup>* )。 自动编码器在形式上分为两个部分:有一个编码器,它将高维输入转换为较短的代码;一个解码器,执行逆运算(如下图所示):
[第 7 章](../Text/07.html)*降维和成分分析*中,我们讨论了一些通用的方法,这些方法可用于降低数据集的维数,因为其具有特殊的统计属性(例如协方差) 矩阵)。 但是,当复杂度增加时,即使**内核主成分分析****k** **内核 PCA**)也可能找不到合适的低维表示形式。 换句话说,信息的丢失可以克服一个阈值,该阈值保证了有效重建样本的可能性。 **自动编码器**是利用神经网络的极端非线性特性来查找给定数据集的低维表示的模型。 特别地,假设 *X* 是从数据生成过程中提取的一组样本, *p <sub class="calibre20">数据</sub>(x)*。 为简单起见,我们将考虑 *x <sub class="calibre20">i</sub> ∈ <sup class="calibre27">n</sup>* ,但对支撑结构没有任何限制(例如,对于 RGB 图像,[ *x <sub class="calibre20">i</sub> ∈ <sup class="calibre27">n×m×3</sup>* )。 自动编码器在形式上分为两个部分:有一个编码器,它将高维输入转换为较短的代码;一个解码器,执行逆运算(如下图所示):
![](img/d2603e73-6156-40fe-b0f1-a2a37672819f.png)
......@@ -462,7 +462,7 @@ Epoch 600) Average loss per sample: 0.8058895015716553 (Code mean: 0.02853894419
![](img/56fb3b12-7f9b-4028-bb8d-116c18a81409.png)
左侧是模型下样本的对数似然,而右侧是非负项(KL 散度)和另一个称为**证据下界** **ELBO** ):
左侧是模型下样本的对数似然,而右侧是非负项(KL 散度)和另一个称为**证据下界****ELBO**):
![](img/8f1e8ea7-da26-4a01-9ca8-27e38f809cfa.png)
......@@ -472,7 +472,7 @@ Epoch 600) Average loss per sample: 0.8058895015716553 (Code mean: 0.02853894419
![](img/30ba70c1-c5f3-4ea6-b019-0e51ab9b72ad.png)
在前面的公式中, *p* 是代码长度,因此它是均值和对角协方差向量的维数。 右侧的表达式非常容易计算,因为*Σ*是对角线的(也就是说,迹线是元素的总和,行列式是乘积)。 但是,当使用**随机梯度下降** **SGD** )算法时,此公式的最大值尽管正确,但却不是可微的运算。 为了克服这个问题,作者建议重新分配分布。
在前面的公式中, *p* 是代码长度,因此它是均值和对角协方差向量的维数。 右侧的表达式非常容易计算,因为*Σ*是对角线的(也就是说,迹线是元素的总和,行列式是乘积)。 但是,当使用**随机梯度下降****SGD**)算法时,此公式的最大值尽管正确,但却不是可微的运算。 为了克服这个问题,作者建议重新分配分布。
当提供一批时,对正态分布进行采样,获得*α〜N(0,I)*。 使用该值,可以使用概率编码器的输出来构建所需的样本: *μ(z | x;θ <sub class="calibre20">q</sub> )+α• ∑(z | x;θ <sub class="calibre20">q</sub>* *) <sup class="calibre27">2</sup>* 。 该表达式是可区分的,因为*α*在每个批次中都是常数(当然,*μ(z | x;θ <sub class="calibre20">q</sub> z | x;θ <sub class="calibre20">q</sub> )*用神经网络参数化,它们是可微的。
......@@ -675,7 +675,7 @@ Sample reconstructions produced by the variational autoencoder
在本节中,我们将分析两个神经模型(Sanger 和 Rubner-Tavan 网络),它们可以执行**主成分分析** **PCA** ),而无需对协方差矩阵进行特征分解 或执行截断的 SVD。 它们都是基于 **Hebbian learning** 的概念(有关更多详细信息,请参阅 Dayan,P.和 Abbott,LF, *Theoretical Neuroscience,MIT Press,* 2005 或 Bonaccorso, G., *Mastering Machine Learning Algorithms,* Packt,2018),这是有关非常简单的神经元动力学的第一批数学理论之一。 然而,这些概念具有非常有趣的含义,尤其是在组件分析领域。 为了更好地了解网络的动力学,提供神经元基本模型的快速概述将很有帮助。 让我们考虑一个输入 *x∈ <sup class="calibre27">n</sup>* 和权重向量 *w ∈ ℜ <sup class="calibre27">n [</sup>* 。 神经元执行点积(无偏差),以产生标量输出 *y*
在本节中,我们将分析两个神经模型(Sanger 和 Rubner-Tavan 网络),它们可以执行**主成分分析****PCA**),而无需对协方差矩阵进行特征分解 或执行截断的 SVD。 它们都是基于 **Hebbian learning** 的概念(有关更多详细信息,请参阅 Dayan,P.和 Abbott,LF, *Theoretical Neuroscience,MIT Press,* 2005 或 Bonaccorso, G., *Mastering Machine Learning Algorithms,* Packt,2018),这是有关非常简单的神经元动力学的第一批数学理论之一。 然而,这些概念具有非常有趣的含义,尤其是在组件分析领域。 为了更好地了解网络的动力学,提供神经元基本模型的快速概述将很有帮助。 让我们考虑一个输入 *x∈ <sup class="calibre27">n</sup>* 和权重向量 *w ∈ ℜ <sup class="calibre27">n [</sup>* 。 神经元执行点积(无偏差),以产生标量输出 *y*
![](img/82b33ae4-637c-4004-b89b-c6e72863705d.png)
......@@ -701,7 +701,7 @@ Sanger 的网络模型由 Sanger 提出(在 Sanger,TD,*单层线性前馈
![](img/09e7fdb7-16a9-4ec9-87ba-717623f9c860.png)
Sanger 的网络基于 Oja 规则的修改版本,该规则定义为**广义 Hebbian 学习** **GHL** )。 假设我们有一个数据集 *X,*包含 *m* 个向量, *x <sub class="calibre20">i</sub> ∈ <sup class="calibre27">n</sup>* 。 下图显示了网络的结构:
Sanger 的网络基于 Oja 规则的修改版本,该规则定义为**广义 Hebbian 学习****GHL**)。 假设我们有一个数据集 *X,*包含 *m* 个向量, *x <sub class="calibre20">i</sub> ∈ <sup class="calibre27">n</sup>* 。 下图显示了网络的结构:
![](img/f212e875-6028-405a-a901-657d01e39d7e.png)
......@@ -997,7 +997,7 @@ Final covariance matrix: [[28.9963492 0.31487817]
在本节中,我们将讨论一个非常著名的生成模型,该模型可以在无人监督的情况下使用,以执行从预定义的数据生成过程中提取的输入数据集 *X* 的降维。 由于本书没有特定的先决条件,并且数学上的复杂度很高,因此我们将简要介绍这些概念,而无需提供证明,也不会对算法的结构进行深入分析。 在讨论**深度信任网络** **DBN** )之前,有必要介绍另一种模型**受限玻尔兹曼机****RBM** ), 被视为 DBN 的构建块。
在本节中,我们将讨论一个非常著名的生成模型,该模型可以在无人监督的情况下使用,以执行从预定义的数据生成过程中提取的输入数据集 *X* 的降维。 由于本书没有特定的先决条件,并且数学上的复杂度很高,因此我们将简要介绍这些概念,而无需提供证明,也不会对算法的结构进行深入分析。 在讨论**深度信任网络****DBN**)之前,有必要介绍另一种模型**受限玻尔兹曼机****RBM**), 被视为 DBN 的构建块。
......@@ -1013,7 +1013,7 @@ Final covariance matrix: [[28.9963492 0.31487817]
Structure of a generic Restricted Boltzmann Machine
神经元 *x <sub class="calibre20">i</sub>* 是可观察到的(也就是说,它们代表 RBM 必须学习的过程生成的向量),而 *h <sub class="calibre20">j</sub>* 是潜在的(也就是说,它们是隐藏的并且有助于 *x <sub class="calibre20">i</sub>* 假定的值)。 由于没有任何进一步的细节,我们需要说这个模型具有 **Markov 随机场** **MRF** )的结构,这是由于相同神经元之间没有连接 层(即描述网络的图是二分图)。 MRF 的一个重要特性是可以用吉布斯分布对整个联合概率 *p(x,h;θ)*进行建模:
神经元 *x <sub class="calibre20">i</sub>* 是可观察到的(也就是说,它们代表 RBM 必须学习的过程生成的向量),而 *h <sub class="calibre20">j</sub>* 是潜在的(也就是说,它们是隐藏的并且有助于 *x <sub class="calibre20">i</sub>* 假定的值)。 由于没有任何进一步的细节,我们需要说这个模型具有 **Markov 随机场****MRF**)的结构,这是由于相同神经元之间没有连接 层(即描述网络的图是二分图)。 MRF 的一个重要特性是可以用吉布斯分布对整个联合概率 *p(x,h;θ)*进行建模:
![](img/c997f7bc-603a-4fd5-8bdf-6ab3fad3a30c.png)
......@@ -1131,7 +1131,7 @@ t-SNE plot of the unsupervised DBN output representations
Sanger 和 Rubner-Tavan 的网络是神经模型,能够在不进行任何统计预处理的情况下提取数据集的前 *k* 主成分。 它们还具有以在线方式自然工作的优势(尽管标准 PCA 经常需要整个数据集,即使存在性能稍逊于脱机算法的增量变体),也可以按降序提取组件。 我们讨论的最后一个模型是在无监督的情况下的 DBN。 我们描述了其构建基块 RBM 的生成属性,然后分析了此类模型如何学习数据生成过程的内部(通常为低维)表示。
在下一章中,我们将讨论其他神经模型-**生成对抗网络** **GAN** )和**自组织图****SOM** ) 。 前者可以学习输入分布并从中获取新样本,而后者则基于大脑某些特定区域的功能,并训练它们的单位以接受特定的输入模式。
在下一章中,我们将讨论其他神经模型-**生成对抗网络****GAN**)和**自组织图****SOM**) 。 前者可以学习输入分布并从中获取新样本,而后者则基于大脑某些特定区域的功能,并训练它们的单位以接受特定的输入模式。
......
......@@ -8,10 +8,10 @@
特别是,我们将讨论以下主题:
* **生成对抗网络** **GAN**
* **深卷积 GAN****DCGAN**
* **Wasserstein GAN****WGAN**
* **自组织映射** **SOM**
* **生成对抗网络****GAN**
* **深卷积 GAN****DCGAN**
* **Wasserstein GAN****WGAN**
* **自组织映射****SOM**
......@@ -762,7 +762,7 @@ Mexican hat selectivity developed by an SOM
![](img/1d22e1e2-5d4d-472e-90eb-af603c0116eb.png)
训练过程通常分为两个不同的阶段:**调整****收敛**。 在调整阶段,更新会扩展到获胜单位的所有邻居,而在后者期间,只会增强权重 *W(n <sub class="calibre20">w</sub> )* 。 但是,平滑而渐进的下降比快速下降更可取; 因此, *n <sub class="calibre20">s</sub> (i,j)*的邻域大小的常见选择是基于**径向基函数** **RBF** )具有指数衰减的方差:
训练过程通常分为两个不同的阶段:**调整****收敛**。 在调整阶段,更新会扩展到获胜单位的所有邻居,而在后者期间,只会增强权重 *W(n <sub class="calibre20">w</sub> )* 。 但是,平滑而渐进的下降比快速下降更可取; 因此, *n <sub class="calibre20">s</sub> (i,j)*的邻域大小的常见选择是基于**径向基函数****RBF**)具有指数衰减的方差:
![](img/1cc30811-63e7-4ceb-a338-df23c28ca834.png)
......
......@@ -14,7 +14,7 @@
1. 无监督学习可以独立于有监督的方法应用,因为其目标是不同的。 如果问题需要监督的方法,则通常不能采用无监督的学习作为替代解决方案。 通常,无监督方法尝试从数据集中提取信息片段(例如,聚类)而没有任何外部提示(例如预测错误)。 相反,受监督的方法需要提示才能更正其参数。
2. 由于目标是找到趋势的原因,因此有必要执行诊断分析。
3. 没有; 从单个分布中提取 *n 个*独立样本的可能性作为单个概率的乘积(主要假设请参见问题 4)。
4. 主要假设是样本是**独立且** **均匀分布的** **IID** )。
4. 主要假设是样本是**独立且** **均匀分布的****IID**)。
5. 性别可以编码为数字特征(例如,一键编码); 因此,我们需要考虑两种可能性。 如果在属性之间不存在性别,而其他特征与性别不相关,则聚类结果是完全合理的。 如果存在性别(作为通用聚类方法)是基于样本之间的相似性的,则 50/50 的结果表示性别不是歧视性特征。 换句话说,给定两个随机选择的样本,它们的相似性不受性别影响(或受到轻微影响),因为其他特征占主导。 例如,在这种特殊情况下,平均分数或年龄有较大的差异,因此它们的影响更大。
6. 我们可以预期会有更紧凑的群体,其中每个主要特征的范围都较小。 例如,一个小组可以包含 13-15 岁的学生,并带有所有可能的分数,依此类推。 另外,我们可以观察基于单个特征的细分(例如年龄,平均分数等)。 最终结果取决于矢量的数值结构,距离函数,当然还取决于算法。
......
......@@ -4,7 +4,7 @@
**人工智能****AI** ),是计算机中人类智能的模拟,历史悠久。 自 1956 年正式诞生以来,人工智能经历了数次兴衰。 持续不断的 AI 复兴或新的 AI 革命始于深度学习的突破。深度学习是机器学习的一个分支,由于深度学习,机器学习的分支现已成为 AI 最热门的分支。 深度卷积神经网络 ( **DCNN** )赢得了 ImageNet 大规模视觉识别挑战赛,其错误率仅为 16.4%,相比之下,第二最佳非 DCNN 条目 错误率为 26.2%。 自 2012 年以来,基于 DCNN 的改进条目每年都赢得了 ImageNet 挑战,并且深度学习技术已应用于计算机视觉以外的许多硬 AI 问题,例如语音识别,机器翻译和围棋游戏,从而取得了突破 接 another 而至。 2016 年 3 月,谷歌 DeepMind 的 AlphaGo 通过深度强化学习构建,击败了 18 届人类世界围棋冠军 Lee Sedol 4:1。 在 2017 年 Google I / O 大会上,Google 宣布他们正从移动优先转变为 AI 优先。 其他领先的公司,例如亚马逊,苹果,Facebook 和微软,都对 AI 进行了大量投资,并推出了许多基于 AI 的产品。
**人工智能****AI**),是计算机中人类智能的模拟,历史悠久。 自 1956 年正式诞生以来,人工智能经历了数次兴衰。 持续不断的 AI 复兴或新的 AI 革命始于深度学习的突破。深度学习是机器学习的一个分支,由于深度学习,机器学习的分支现已成为 AI 最热门的分支。 深度卷积神经网络(**DCNN**)赢得了 ImageNet 大规模视觉识别挑战赛,其错误率仅为 16.4%,相比之下,第二最佳非 DCNN 条目 错误率为 26.2%。 自 2012 年以来,基于 DCNN 的改进条目每年都赢得了 ImageNet 挑战,并且深度学习技术已应用于计算机视觉以外的许多硬 AI 问题,例如语音识别,机器翻译和围棋游戏,从而取得了突破 接 another 而至。 2016 年 3 月,谷歌 DeepMind 的 AlphaGo 通过深度强化学习构建,击败了 18 届人类世界围棋冠军 Lee Sedol 4:1。 在 2017 年 Google I / O 大会上,Google 宣布他们正从移动优先转变为 AI 优先。 其他领先的公司,例如亚马逊,苹果,Facebook 和微软,都对 AI 进行了大量投资,并推出了许多基于 AI 的产品。
TensorFlow 是 Google 的开放源代码框架,用于构建机器学习 AI 应用程序。 自 2015 年 11 月首次发布以来,TensorFlow 已经有数个流行的开源深度学习框架,在不到两年的时间内,它已迅速成为最受欢迎的开源深度学习框架。 每周都会构建新的 TensorFlow 模型,以解决需要人类甚至是超人类智能的所有任务。 关于 TensorFlow 的数十本书已经出版。 TensorFlow 上的更多在线博客,教程,课程和视频已可用。 很明显,AI 和 TensorFlow 很热门,但为什么还要再加上一本书标题中带有“ TensorFlow”一词呢?
......@@ -14,7 +14,7 @@ TensorFlow 是 Google 的开放源代码框架,用于构建机器学习 AI 应
确实,在 TensorFlow 开源项目中已经有一些 TensorFlow iOS 和 Android 应用程序示例,可以帮助您开始使用移动 TensorFlow。 但是,如果您曾经尝试在 iOS 或 Android 设备上运行令您惊讶的酷 TensorFlow 模型,则很可能会遇到很多麻烦,然后才能在手机上成功看到运行的模型。
本书向您展示了如何解决在移动平台上运行 TensorFlow 模型时可能遇到的所有常见问题,从而可以节省大量时间和精力。 您会在一书中看到超过 10 个完整的从零开始构建的 TensorFlow iOS 和 Android 应用程序,它们运行着各种凉爽的 TensorFlow 模型,包括最新和最酷的**生成对抗网络****GAN** )和类似 AlphaZero 的模型。
本书向您展示了如何解决在移动平台上运行 TensorFlow 模型时可能遇到的所有常见问题,从而可以节省大量时间和精力。 您会在一书中看到超过 10 个完整的从零开始构建的 TensorFlow iOS 和 Android 应用程序,它们运行着各种凉爽的 TensorFlow 模型,包括最新和最酷的**生成对抗网络****GAN**)和类似 AlphaZero 的模型。
......
......@@ -79,7 +79,7 @@ bazel-bin/tensorflow/tools/pip_package/build_pip_package /tmp/tensorflow_pkg
sudo pip install --upgrade /tmp/tensorflow_pkg/tensorflow-1.4.0-cp27-cp27m-macosx_10_12_intel.whl
```
老实说,如果您在此过程中遇到任何错误,则搜索错误消息应该是修复该错误的最佳方法,因为我们打算在本书中重点介绍从我们长期积累的技巧和知识,而这些技巧和知识在其他地方不易获得 数小时的构建和调试实用的移动 TensorFlow 应用程序。 运行`sudo pip install`命令时,您可能会看到的一个特定错误是`Operation not permitted`错误。 要解决此问题,您可以通过重新启动 Mac 并点击 *Cmd* + *R* 键来禁用 Mac 的**系统完整性保护** **SIP** ) 要进入恢复模式,请在实用程序终端下,在重新启动 Mac 之前运行 csrutil disable。 如果您对禁用 SIP 不满意,可以按照 TensorFlow 文档尝试使用更复杂的安装方法之一,例如 virtualenv。
老实说,如果您在此过程中遇到任何错误,则搜索错误消息应该是修复该错误的最佳方法,因为我们打算在本书中重点介绍从我们长期积累的技巧和知识,而这些技巧和知识在其他地方不易获得 数小时的构建和调试实用的移动 TensorFlow 应用程序。 运行`sudo pip install`命令时,您可能会看到的一个特定错误是`Operation not permitted`错误。 要解决此问题,您可以通过重新启动 Mac 并点击 *Cmd* + *R* 键来禁用 Mac 的**系统完整性保护****SIP**) 要进入恢复模式,请在实用程序终端下,在重新启动 Mac 之前运行 csrutil disable。 如果您对禁用 SIP 不满意,可以按照 TensorFlow 文档尝试使用更复杂的安装方法之一,例如 virtualenv。
如果一切顺利,则应该能够在终端窗口,Python 或最好在 IPython 上运行,然后运行`import tensorflow as tf``tf.__version__`将 1.4.0 作为输出。
......@@ -91,7 +91,7 @@ sudo pip install --upgrade /tmp/tensorflow_pkg/tensorflow-1.4.0-cp27-cp27m-macos
使用良好的深度学习框架(例如 TensorFlow)的好处之一是在模型训练中无缝支持使用**图形处理单元** **GPU** ) 。 在 GPU 上训练非平凡的基于 TensorFlow 的模型要比在 CPU 上训练要快得多,并且当前 NVIDIA 提供 TensorFlow 支持的最佳和最具成本效益的 GPU。 Ubuntu 是使用 TensorFlow 运行 NVIDIA GPU 的最佳操作系统。 您可以花几百美元轻松购买一个 GPU,然后将其安装在带有 Ubuntu 系统的廉价台式机上。 您也可以在 Windows 上安装 NVIDIA GPU,但 TensorFlow 对 Windows 的支持不如对 Ubuntu 的支持。
使用良好的深度学习框架(例如 TensorFlow)的好处之一是在模型训练中无缝支持使用**图形处理单元****GPU**) 。 在 GPU 上训练非平凡的基于 TensorFlow 的模型要比在 CPU 上训练要快得多,并且当前 NVIDIA 提供 TensorFlow 支持的最佳和最具成本效益的 GPU。 Ubuntu 是使用 TensorFlow 运行 NVIDIA GPU 的最佳操作系统。 您可以花几百美元轻松购买一个 GPU,然后将其安装在带有 Ubuntu 系统的廉价台式机上。 您也可以在 Windows 上安装 NVIDIA GPU,但 TensorFlow 对 Windows 的支持不如对 Ubuntu 的支持。
为了训练本书中应用程序中部署的模型,我们使用 NVIDIA GTX 1070,您可以在 Amazon 或 eBay 上以大约 400 美元的价格购买。 蒂姆·戴特默斯(Tim Dettmers)有一个不错的博客,其中介绍了[用于深度学习的 GPU](http://timdettmers.com/2017/04/09/which-gpu-for-deep-learning/)。 在获得这样的 GPU 并将其安装在 Ubuntu 系统上之后,以及在安装启用 GPU 的 TensorFlow 之前,您需要安装 NVIDIA CUDA 8.0(或 9.0)和 cuDNN(CUDA- Deep Neural Network library)6.0 (或 7.0),两者均受 TensorFlow 1.4 支持。
......@@ -211,7 +211,7 @@ Android Studio 是开发 Android 应用程序的最佳工具,并且 TensorFlow
![](img/3b90efdb-6655-4e35-b74a-a44e69e17487.png)Fig 1.4 Android SDK Manager to install SDK tools and NDK
最后,由于 TensorFlow Android 应用程序使用 C ++中的本机 TensorFlow 库来加载和运行 TensorFlow 模型,因此您需要安装 Android **本机开发套件** **NDK** ),您可以执行以下任一操作 从上一个屏幕快照中显示的 Android SDK Manager 中获取,或者直接从[这里](https://developer.android.com/ndk/downloads/index.html)下载 NDK。 NDK 版本 r16b 和 r15c 均已通过测试可运行本书中的 Android 应用。 如果直接下载 NDK,则在打开项目并选择 Android Studio 的 File | 文件后,您可能还需要设置 Android NDK 位置。 项目结构,如以下屏幕截图所示:
最后,由于 TensorFlow Android 应用程序使用 C ++中的本机 TensorFlow 库来加载和运行 TensorFlow 模型,因此您需要安装 Android **本机开发套件****NDK**),您可以执行以下任一操作 从上一个屏幕快照中显示的 Android SDK Manager 中获取,或者直接从[这里](https://developer.android.com/ndk/downloads/index.html)下载 NDK。 NDK 版本 r16b 和 r15c 均已通过测试可运行本书中的 Android 应用。 如果直接下载 NDK,则在打开项目并选择 Android Studio 的 File | 文件后,您可能还需要设置 Android NDK 位置。 项目结构,如以下屏幕截图所示:
![](img/1f6a2d74-0be0-4f36-9796-2cf66eb1694f.png)Fig 1.5 Setting project-level Android NDK location
......@@ -283,7 +283,7 @@ open tf_benchmark_example.xcworkspace
`tensorflow/examples/android`中有四个样本 TensorFlow Android 应用,分别为 TF 分类,TF 检测,TF 语音和 TF 风格化。 运行这些示例的最简单方法是使用 Android Studio 在前面的文件夹中打开项目,如*设置 Android Studio* 部分中所示,然后通过编辑项目的`build.gradle`文件进行单个更改 并将`def nativeBuildSystem = 'bazel'`更改为`def nativeBuildSystem = 'none'`
现在,将 Android 设备连接到您的计算机,然后通过选择 Android Studio 的运行|生成,安装和运行该应用。 运行'android'。 这会在您的设备上安装四个名称为 *TF 分类**TF 检测**TF 语音**TF 风格化*的 Android 应用。 TF Classify 就像 iOS 相机应用程序一样,使用 TensorFlow Inception v1 模型对设备相机进行实时对象分类。 TF Detect 使用另一种模型,称为**单发多盒检测器** **SSD** )和 MobileNet,这是 Google 发布的一组新的深度学习模型,专门针对移动和嵌入式设备, 要执行对象检测,请在检测到的对象上绘制矩形。 TF 语音使用另一种不同的深度学习(语音识别)模型来收听和识别一小部分单词,例如“是”,“否”,“左”,“右”,“停止”和“开始”。 TF Stylize 使用另一种模型来更改相机看到的图像样式。 有关这些应用程序的更多详细信息,您可以在[这个页面](https://github.com/tensorflow/tensorflow/tree/master/tensorflow/examples/android)中查看 TensorFlow Android 示例文档。
现在,将 Android 设备连接到您的计算机,然后通过选择 Android Studio 的运行|生成,安装和运行该应用。 运行'android'。 这会在您的设备上安装四个名称为 *TF 分类**TF 检测**TF 语音**TF 风格化*的 Android 应用。 TF Classify 就像 iOS 相机应用程序一样,使用 TensorFlow Inception v1 模型对设备相机进行实时对象分类。 TF Detect 使用另一种模型,称为**单发多盒检测器****SSD**)和 MobileNet,这是 Google 发布的一组新的深度学习模型,专门针对移动和嵌入式设备, 要执行对象检测,请在检测到的对象上绘制矩形。 TF 语音使用另一种不同的深度学习(语音识别)模型来收听和识别一小部分单词,例如“是”,“否”,“左”,“右”,“停止”和“开始”。 TF Stylize 使用另一种模型来更改相机看到的图像样式。 有关这些应用程序的更多详细信息,您可以在[这个页面](https://github.com/tensorflow/tensorflow/tree/master/tensorflow/examples/android)中查看 TensorFlow Android 示例文档。
......
......@@ -30,7 +30,7 @@
我们人类不会从头开始学习新事物。 取而代之的是,无论是否有意识地,我们都充分利用所学到的知识。 人工智能中的转移学习试图做同样的事情-这种技术通常只需要训练的大型模型中的一小块,然后将其重新用于相关任务的新模型中,而无需访问大型训练数据和计算资源 训练原始模型。 总体而言,迁移学习仍然是 AI 中的一个开放问题,因为在许多情况下,仅需人类反复尝试几个例子,然后再学习掌握新事物,就会花很多时间来训练和学习 AI。 但是,在图像识别领域,转移学习已被证明是非常有效的。
用于图像识别的现代深度学习模型通常是深度神经网络,或更具体地说,是具有许多层的深度**卷积神经网络** **CNN** )。 这种 CNN 的较低层负责学习和识别较低层的功能,例如图像的边缘,轮廓和零件,而最后一层则确定图像的类别。 对于不同类型的对象,例如犬种或花朵类型,我们不需要重新学习网络较低层的参数或权重。 实际上,从头开始需要花费数周的培训来学习用于图像识别的现代 CNN 的所有权重,通常是数百万甚至更多。 传输 在图像分类的情况下,学习使我们能够使用特定的图像集重新训练此类 CNN 的最后一层,通常不到一小时,而 所有其他层都保持不变,并且达到了几乎相同的精度,就像我们从头开始训练整个网络数周一样。
用于图像识别的现代深度学习模型通常是深度神经网络,或更具体地说,是具有许多层的深度**卷积神经网络****CNN**)。 这种 CNN 的较低层负责学习和识别较低层的功能,例如图像的边缘,轮廓和零件,而最后一层则确定图像的类别。 对于不同类型的对象,例如犬种或花朵类型,我们不需要重新学习网络较低层的参数或权重。 实际上,从头开始需要花费数周的培训来学习用于图像识别的现代 CNN 的所有权重,通常是数百万甚至更多。 传输 在图像分类的情况下,学习使我们能够使用特定的图像集重新训练此类 CNN 的最后一层,通常不到一小时,而 所有其他层都保持不变,并且达到了几乎相同的精度,就像我们从头开始训练整个网络数周一样。
转移学习的第二个主要好处是,我们只需要少量的训练数据就可以重新训练 CNN 的最后一层。 如果必须从头开始训练深层 CNN 的数百万个参数,则需要大量的训练数据。 例如,对于我们的狗品种再训练,我们只需要为每个狗品种提供 100 幅以上的图像,即可建立一个比原始图像分类模型更好的狗品种分类模型。
......
......@@ -4,7 +4,7 @@
如今,语音服务(例如 Apple Siri,Amazon Alexa,Google Assistant 和 Google Translate)已变得越来越流行,因为语音是我们在某些情况下查找信息或完成任务的最自然和有效的方法。 这些语音服务中的许多服务都是基于云的,因为用户语音可能会很长而且很自由,并且**自动语音识别** **ASR** )非常复杂,并且需要大量的计算能力。 实际上,得益于深度学习的突破,仅在最近几年,在自然和嘈杂的环境中 ASR 才变得可行。
如今,语音服务(例如 Apple Siri,Amazon Alexa,Google Assistant 和 Google Translate)已变得越来越流行,因为语音是我们在某些情况下查找信息或完成任务的最自然和有效的方法。 这些语音服务中的许多服务都是基于云的,因为用户语音可能会很长而且很自由,并且**自动语音识别****ASR**)非常复杂,并且需要大量的计算能力。 实际上,得益于深度学习的突破,仅在最近几年,在自然和嘈杂的环境中 ASR 才变得可行。
但是在某些情况下,能够离线识别设备上的简单语音命令是有意义的。 例如,要控制 Raspberry-Pi 驱动的机器人的运动,您不需要复杂的语音命令,不仅设备上的 ASR 比基于云的解决方案还快,而且即使在 没有网络访问的环境。 设备上的简单语音命令识别还可以通过仅在发出某些明确的用户命令时才向服务器发送复杂的用户语音来节省网络带宽。
......@@ -26,13 +26,13 @@
1990 年代出现了第一个实用的独立于说话者的大词汇量和连续语音识别系统。 在 2000 年代初期,领先的初创公司 Nuance 和 SpeechWorks 提供的语音识别引擎为许多第一代基于 Web 的语音服务提供了支持,例如 TellMe,Phone 的 AOL 和 BeVocal。 当时构建的语音识别系统主要基于传统的**隐马尔可夫模型** **HMM** ),并且需要手动编写语法和安静环境以帮助识别引擎更准确地工作。
1990 年代出现了第一个实用的独立于说话者的大词汇量和连续语音识别系统。 在 2000 年代初期,领先的初创公司 Nuance 和 SpeechWorks 提供的语音识别引擎为许多第一代基于 Web 的语音服务提供了支持,例如 TellMe,Phone 的 AOL 和 BeVocal。 当时构建的语音识别系统主要基于传统的**隐马尔可夫模型****HMM**),并且需要手动编写语法和安静环境以帮助识别引擎更准确地工作。
现代语音识别引擎几乎可以理解嘈杂环境下人们的任何说话,并且基于端到端深度学习,尤其是另一种更适合自然语言处理的深度神经网络,称为**递归神经网络** ]( **RNN** )。 与传统的基于 HMM 的语音识别不同,传统的基于 HMM 的语音识别需要人的专业知识来构建和微调手工设计的功能以及声学和语言模型,而基于 RNN 的端到端语音识别系统则将音频输入直接转换为文本,而无需 将音频输入转换为语音表示以进行进一步处理。
现代语音识别引擎几乎可以理解嘈杂环境下人们的任何说话,并且基于端到端深度学习,尤其是另一种更适合自然语言处理的深度神经网络,称为**递归神经网络** ](**RNN**)。 与传统的基于 HMM 的语音识别不同,传统的基于 HMM 的语音识别需要人的专业知识来构建和微调手工设计的功能以及声学和语言模型,而基于 RNN 的端到端语音识别系统则将音频输入直接转换为文本,而无需 将音频输入转换为语音表示以进行进一步处理。
RNN allows us to handle sequences of input and/or output, because the network, by design, has memory of previous items in an input sequence or can generate a sequence of output. This makes RNN more appropriate for speech recognition, (where the input is a sequence of words uttered by users), image captioning, (where the output is a natural language sentence consisting of a series of words), text generation, and time series prediction. If you're unfamiliar with RNN, you should definitely check out *Andrey Karpathy's* blog, *The Unreasonable Effectiveness of Recurrent Neural Networks* ([http://karpathy.github.io/2015/05/21/rnn-effectiveness](http://karpathy.github.io/2015/05/21/rnn-effectiveness)). We'll also cover some detailed RNN models later in the book.
[关于 RNN 端到端语音识别的第一篇研究论文发表于 2014 年](http://proceedings.mlr.press/v32/graves14.pdf),使用的是**连接主义的时间分类** **CTC** )层。 2014 年下半年,百度发布了 [Deep Speech](https://arxiv.org/abs/1412.5567),这是第一个使用基于 CTC 的端到端 RNN 构建但拥有庞大数据集的商业系统之一 ,并在嘈杂的环境中实现了比传统 ASR 系统更低的错误率。 如果您有兴趣,可以查看[深度语音的 TensorFlow 实现](https://github.com/mozilla/DeepSpeech),但是生成的模型会 由于此类基于 CTC 的系统存在问题,因此需要太多的资源才能在手机上运行。 在部署期间,它需要一个大型语言模型来纠正部分由 RNN 的性质引起的生成的文本错误(如果您想知道为什么,请阅读前面链接的 RNN 博客以获取一些见识)。
[关于 RNN 端到端语音识别的第一篇研究论文发表于 2014 年](http://proceedings.mlr.press/v32/graves14.pdf),使用的是**连接主义的时间分类****CTC**)层。 2014 年下半年,百度发布了 [Deep Speech](https://arxiv.org/abs/1412.5567),这是第一个使用基于 CTC 的端到端 RNN 构建但拥有庞大数据集的商业系统之一 ,并在嘈杂的环境中实现了比传统 ASR 系统更低的错误率。 如果您有兴趣,可以查看[深度语音的 TensorFlow 实现](https://github.com/mozilla/DeepSpeech),但是生成的模型会 由于此类基于 CTC 的系统存在问题,因此需要太多的资源才能在手机上运行。 在部署期间,它需要一个大型语言模型来纠正部分由 RNN 的性质引起的生成的文本错误(如果您想知道为什么,请阅读前面链接的 RNN 博客以获取一些见识)。
在 2015 年和 2016 年,较新的语音识别系统使用了类似的端到端 RNN 方法,但将 CTC 层替换为[基于注意力的模型](https://arxiv.org/pdf/1508.01211.pdf),因此 运行模型时不需要大型语言模型,因此可以在内存有限的移动设备上进行部署。 在本书的此版本中,我们将不会探讨这种可能性,而将介绍如何在移动应用中使用最新的高级 ASR 模型。 相反,我们将从一个更简单的语音识别模型开始,我们知道该模型肯定会在移动设备上很好地工作。
......@@ -57,7 +57,7 @@ RNN allows us to handle sequences of input and/or output, because the network, b
The speech commands dataset is collected from an Open Speech Recording site ([https://aiyprojects.withgoogle.com/open_speech_recording](https://aiyprojects.withgoogle.com/open_speech_recording)). You should give it a try and maybe contribute a few minutes of your own recordings to help it improve and also get a sense of how you can collect your own speech commands dataset if needed. There's also a Kaggle competition ([https://www.kaggle.com/c/tensorflow-speech-recognition-challenge](https://www.kaggle.com/c/tensorflow-speech-recognition-challenge)) on using the dataset to build a model and you can learn more about speech models and tips there.
在移动应用中要训练和使用的模型基于纸质卷积神经网络,[用于小尺寸关键词发现](http://www.isca-speech.org/archive/interspeech_2015/papers/i15_1478.pdf),这与大多数其他基于 RNN 的大规模语音识别模型不同。 基于 CNN 的语音识别模型是可能的,但很有趣,因为对于简单的语音命令识别,我们可以在短时间内将音频信号转换为图像,或更准确地说,将频谱图转换为频率 窗口期间音频信号的分布(有关使用`wav_to_spectrogram`脚本生成的示例频谱图图像,请参见本节开头的 TensorFlow 教程链接)。 换句话说,我们可以将音频信号从其原始时域表示转换为频域表示。 进行此转换的最佳算法是**离散傅立叶变换** **DFT** ),**快速傅立叶变换****FFT** )只是一种有效的选择 DFT 实现的算法。
在移动应用中要训练和使用的模型基于纸质卷积神经网络,[用于小尺寸关键词发现](http://www.isca-speech.org/archive/interspeech_2015/papers/i15_1478.pdf),这与大多数其他基于 RNN 的大规模语音识别模型不同。 基于 CNN 的语音识别模型是可能的,但很有趣,因为对于简单的语音命令识别,我们可以在短时间内将音频信号转换为图像,或更准确地说,将频谱图转换为频率 窗口期间音频信号的分布(有关使用`wav_to_spectrogram`脚本生成的示例频谱图图像,请参见本节开头的 TensorFlow 教程链接)。 换句话说,我们可以将音频信号从其原始时域表示转换为频域表示。 进行此转换的最佳算法是**离散傅立叶变换****DFT**),**快速傅立叶变换****FFT**)只是一种有效的选择 DFT 实现的算法。
As mobile developers, you probably don't need to understand DFT and FFT. But you'd better appreciate how all this model training works when used in mobile apps by knowing that behind the scenes of the TensorFlow simple speech commands model training that we're about to cover, it's the use of FFT, one of the top 10 algorithms in the 20th century, among other things of course, that makes the CNN-based speech command recognition model training possible. For a fun and intuitive tutorial on DFT, you can read this article: [http://practicalcryptography.com/miscellaneous/machine-learning/intuitive-guide-discrete-fourier-transform](http://practicalcryptography.com/miscellaneous/machine-learning/intuitive-guide-discrete-fourier-transform) .
......
......@@ -30,7 +30,7 @@
为了表示目标自然语言输出中的每个单词,使用了单词嵌入方法。 词嵌入只是词的向量表示。 [TensorFlow 网站上有一个不错的教程](https://www.tensorflow.org/tutorials/word2vec),介绍如何构建模型来获取单词的矢量表示。
现在,在既表示输入图像又表示输出单词的情况下(每个这样的单词对构成一个训练示例),给定的最佳训练模型可用于最大化在目标输出中生成每个单词 *w* 的概率 输入图像和该单词 *w,*之前的先前单词是 RNN 序列模型,或更具体地说,是**长短期记忆** **LSTM** )的 RNN 模型类型。 LSTM 以解决常规 RNN 模型固有的消失和爆炸梯度问题而闻名。 为了更好地了解 LSTM,[您应该查看这个热门博客](http://colah.github.io/posts/2015-08-Understanding-LSTMs)
现在,在既表示输入图像又表示输出单词的情况下(每个这样的单词对构成一个训练示例),给定的最佳训练模型可用于最大化在目标输出中生成每个单词 *w* 的概率 输入图像和该单词 *w,*之前的先前单词是 RNN 序列模型,或更具体地说,是**长短期记忆****LSTM**)的 RNN 模型类型。 LSTM 以解决常规 RNN 模型固有的消失和爆炸梯度问题而闻名。 为了更好地了解 LSTM,[您应该查看这个热门博客](http://colah.github.io/posts/2015-08-Understanding-LSTMs)
The gradient concept is used in the back propagation process to update network weights so it can learn to generate better outputs. If you're not familiar with the back propagation process, one of the most fundamental and powerful algorithms in neural networks, you should definitely spend some time understanding it – just Google "backprop" and the top five results won't disappoint. Vanishing gradient means that, during the deep neural network back propagation learning process, network weights in earlier layers barely get updated so the network never converges; exploding gradient means that those weights get updated too wildly, causing the network to diverge a lot. So, if someone has a closed mind and never learns, or if someone gets crazy about new things as fast as he loses interest, you know what kind of gradient problem they seem to have.
......@@ -62,7 +62,7 @@ The gradient concept is used in the back propagation process to update network w
git clone https://github.com/tensorflow/models
```
您可能尚未安装的一个 Python 库是 **自然语言工具包** **NLTK** ),这是最流行的用于自然语言处理的 Python 库之一。 只需访问[其网站](http://www.nltk.org)以获得安装说明。
您可能尚未安装的一个 Python 库是 **自然语言工具包****NLTK**),这是最流行的用于自然语言处理的 Python 库之一。 只需访问[其网站](http://www.nltk.org)以获得安装说明。
现在,请按照以下步骤来训练模型:
......
......@@ -4,7 +4,7 @@
自 2012 年深度学习起步以来,有人认为 Ian Goodfellow 在 2014 年提出的[**生成对抗网络**](https://arxiv.org/abs/1406.2661) **GAN** )比这更有趣或更有前途。 实际上, Facebook AI 研究主管和之一,深度学习研究人员之一的 Yann LeCun 将 GAN 和对抗训练称为*,“这是近十年来机器学习中最有趣的想法。 ”* 因此,我们如何在这里不介绍它,以了解 GAN 为什么如此令人兴奋,以及如何构建 GAN 模型并在 iOS 和 Android 上运行它们?
自 2012 年深度学习起步以来,有人认为 Ian Goodfellow 在 2014 年提出的[**生成对抗网络**](https://arxiv.org/abs/1406.2661)**GAN**)比这更有趣或更有前途。 实际上, Facebook AI 研究主管和之一,深度学习研究人员之一的 Yann LeCun 将 GAN 和对抗训练称为*,“这是近十年来机器学习中最有趣的想法。 ”* 因此,我们如何在这里不介绍它,以了解 GAN 为什么如此令人兴奋,以及如何构建 GAN 模型并在 iOS 和 Android 上运行它们?
在本章中,我们将首先概述 GAN 是什么,它如何工作以及为什么它具有如此巨大的潜力。 然后,我们将研究两个 GAN 模型:一个基本的 GAN 模型可用于生成类似人的手写数字,另一个更高级的 GAN 模型可将低分辨率的图像增强为高分辨率的图像。 我们将向您展示如何在 Python 和 TensorFlow 中构建和训练此类模型,以及如何为移动部署准备模型。 然后,我们将提供带有完整源代码的 iOS 和 Android 应用程序,它们使用这些模型来生成手写数字并增强图像。 在本章的最后,您应该准备好进一步探索各种基于 GAN 的模型,或者开始构建自己的模型,并了解如何在移动应用程序中运行它们。
......@@ -264,7 +264,7 @@ python tensorflow/python/tools/freeze_graph.py \
--input_binary=true
```
11. 生成的`pix2pix.pb`模型文件很大,约为 217 MB,将其加载到 iOS 或 Android 设备上时会崩溃或导致**内存不足** **OOM** )错误。 我们必须像在[第 6 章](../Text/06.html)*以自然语言*描述图像的复杂 im2txt 模型中所做的那样,将其转换为 iOS 的映射格式。
11. 生成的`pix2pix.pb`模型文件很大,约为 217 MB,将其加载到 iOS 或 Android 设备上时会崩溃或导致**内存不足****OOM**)错误。 我们必须像在[第 6 章](../Text/06.html)*以自然语言*描述图像的复杂 im2txt 模型中所做的那样,将其转换为 iOS 的映射格式。
```py
bazel-bin/tensorflow/tools/graph_transforms/transform_graph \
......
......@@ -4,7 +4,7 @@
尽管现代**人工智能** **AI** )的日益普及基本上是由 2012 年深度学习的突破引起的,但 Google DeepMind 的 AlphaGo 击败李·塞多尔(Lee Sedol)的历史性事件是[ 《 HTG4》(HTG5)在 2016 年 3 月以 4-1 击败了 GO 世界冠军,然后在 2017 年 5 月以 3-0 击败了目前排名第一的 GO 玩家 Ke Jie,这在很大程度上使 AI 成为了家庭 首字母缩写词。 由于 GO 游戏的复杂性,人们普遍认为无法实现 任务,或者至少再十年无法实现, 认为计算机程序会击败顶级 GO 玩家 。
尽管现代**人工智能****AI**)的日益普及基本上是由 2012 年深度学习的突破引起的,但 Google DeepMind 的 AlphaGo 击败李·塞多尔(Lee Sedol)的历史性事件是[ 《 HTG4》(HTG5)在 2016 年 3 月以 4-1 击败了 GO 世界冠军,然后在 2017 年 5 月以 3-0 击败了目前排名第一的 GO 玩家 Ke Jie,这在很大程度上使 AI 成为了家庭 首字母缩写词。 由于 GO 游戏的复杂性,人们普遍认为无法实现 任务,或者至少再十年无法实现, 认为计算机程序会击败顶级 GO 玩家 。
在 2017 年 5 月 AlphaGo 和 Ke Jie 的比赛之后,Google 退役了 AlphaGo; 谷歌(DeepMind)是 Google 因其开创性的深度强化学习技术而收购的创业公司,也是 AlphaGo 的开发商,决定将其 AI 研究重点放在其他领域。 然后,有趣的是,在 2017 年 10 月,DeepMind 在游戏上发表了另一篇论文[《GO:在没有人类知识的情况下掌握围棋游戏》](https://deepmind.com/research/publications/mastering-game-go-without-human-knowledge),它描述了一种称为 AlphaGo Zero 的改进算法,该算法仅通过自我强化学习来学习如何玩围棋,而无需依赖任何人类专家知识,例如 大量专业的围棋游戏,AlphaGo 用来训练其模型。 令人惊讶的是,AlphaGo Zero 完全击败了 AlphaGo,后者在几个月前以 100-0 击败了世界上最好的人类 GO 玩家!
......@@ -31,7 +31,7 @@ AlphaZero 算法包含三个主要组件:
* 一个深度卷积神经网络,它以棋盘位置(或状态)为输入,并从该位置输出一个值作为预测的博弈结果,该策略是输入棋盘状态下每个可能动作的移动概率列表。
* 一种通用的强化学习算法,该算法通过自玩从头开始学习,除了游戏规则外,没有特定的领域知识。 通过自增强学习学习深度神经网络的参数,以使预测值与实际自游戏结果之间的损失最小,并使预测策略与搜索概率之间的相似性最大化,这来自以下算法。
* 一种通用(与域无关)的**蒙特卡洛树搜索** **MCTS** )算法,该算法从头至尾模拟自玩游戏,并通过 考虑到从深度神经网络返回的预测值和策略概率值,以及访问节点的频率—有时,选择访问次数较少的节点称为强化学习中的探索(与采取较高预测值的举动相反) 价值和政策,这称为剥削)。 勘探与开发之间的良好平衡可以带来更好的结果。
* 一种通用(与域无关)的**蒙特卡洛树搜索****MCTS**)算法,该算法从头至尾模拟自玩游戏,并通过 考虑到从深度神经网络返回的预测值和策略概率值,以及访问节点的频率—有时,选择访问次数较少的节点称为强化学习中的探索(与采取较高预测值的举动相反) 价值和政策,这称为剥削)。 勘探与开发之间的良好平衡可以带来更好的结果。
强化学习的历史可以追溯到 1960 年代,当时该术语在工程文献中首次使用。 但是突破发生在 2013 年,当时 DeepMind 将强化学习与深度学习相结合,并开发了深度强化学习应用程序,该应用程序学会了从头开始玩 Atari 游戏,以原始像素为输入的,并随后击败了人类。 与监督学习不同,监督学习需要标记数据进行训练,就像我们在前几章中建立或使用的许多模型中所看到的那样,强化学习使用反复试验的方法来获得更好的效果:代理与环境交互并接收 对每个州采取的任何行动都会获得奖励(正面或负面)。 在 AlphaZero 下棋 象棋的示例中,只有在游戏结束后才能获得奖励,获胜的结果为+1,失败的为-1,平局为 0。强化学习 AlphaZero 中的算法对我们前面提到的损失使用梯度下降来更新 深层神经网络的 参数, 就像一个通用函数近似,可以学习和 编码游戏技巧。
......
......@@ -6,7 +6,7 @@
在前九章中,我们使用 TensorFlow Mobile 在移动设备上运行各种由 TensorFlow 和 Keras 构建的强大的深度学习模型。 正如我们在[第 1 章](../Text/01.html)*移动 TensorFlow* 入门中提到的那样,Google 还提供了 TensorFlow Lite(可替代 TensorFlow Mobile 的版本)在移动设备上运行模型。 尽管自 Google I / O 2018 起它仍在开发人员预览中,但 Google 打算“ 大大简化开发人员针对小型设备的模型定位的体验。” 因此,值得详细研究 TensorFlow Lite 并为未来做好准备。
如果您是 iOS 开发人员,或者同时使用 iOS 和 Android,则 Apple 一年一度的**全球开发人员大会** **WWDC** )是您不容错过的活动。 在 WWDC 2017 中,Apple 宣布了新的 Core ML 框架,以支持 iOS(以及所有其他 Apple OS 平台:macOS,tvOS 和 watchOS)上的深度学习模型和标准机器学习模型的运行。 自 iOS 11 起,Core ML 就可用了,截至 2018 年 5 月,Core ML 已占到 80%的标记份额。至少了解您可以在 iOS 应用中使用 Core ML 的基本知识绝对有意义。
如果您是 iOS 开发人员,或者同时使用 iOS 和 Android,则 Apple 一年一度的**全球开发人员大会****WWDC**)是您不容错过的活动。 在 WWDC 2017 中,Apple 宣布了新的 Core ML 框架,以支持 iOS(以及所有其他 Apple OS 平台:macOS,tvOS 和 watchOS)上的深度学习模型和标准机器学习模型的运行。 自 iOS 11 起,Core ML 就可用了,截至 2018 年 5 月,Core ML 已占到 80%的标记份额。至少了解您可以在 iOS 应用中使用 Core ML 的基本知识绝对有意义。
因此,我们将在本章涵盖 TensorFlow Lite 和 Core ML,并通过以下主题展示两者的优势和局限性:
......
......@@ -346,7 +346,7 @@ tensorflow/contrib/pi_examples/camera/gen/bin/camera
默认情况下,摄像机示例还使用`label_image/data`文件夹中解压缩的预构建 Inception 模型。 但是对于您自己的特定图像分类任务,您可以像通过[第 2 章](../Text/02.html)*使用*通过转移学习对图像进行分类一样,提供通过转移学习重新训练的模型。 ]参数在运行两个示例应用程序时。
通常,语音是 Raspberry Pi 机器人与我们互动的主要 UI。 理想情况下,我们应该运行 TensorFlow 支持的自然声音**文本到语音** **TTS** )模型,例如 [WaveNet](https://deepmind.com/blog/wavenet-generative-model-raw-audio)[Tacotron](https://github.com/keithito/tacotron),但运行和部署不在本章范围之内。 这样的模型。 事实证明,我们可以使用称为 [CMU **Flite**](http://www.festvox.org/flite) 的简单得多的 TTS 库,它提供了相当不错的 TTS,并且 只需一个简单的命令即可安装它:`sudo apt-get install flite`。 如果要安装最新版本的 Flite 以期希望获得更好的 TTS 质量,只需从链接下载最新的 Flite 源并进行构建。
通常,语音是 Raspberry Pi 机器人与我们互动的主要 UI。 理想情况下,我们应该运行 TensorFlow 支持的自然声音**文本到语音****TTS**)模型,例如 [WaveNet](https://deepmind.com/blog/wavenet-generative-model-raw-audio)[Tacotron](https://github.com/keithito/tacotron),但运行和部署不在本章范围之内。 这样的模型。 事实证明,我们可以使用称为 [CMU **Flite**](http://www.festvox.org/flite) 的简单得多的 TTS 库,它提供了相当不错的 TTS,并且 只需一个简单的命令即可安装它:`sudo apt-get install flite`。 如果要安装最新版本的 Flite 以期希望获得更好的 TTS 质量,只需从链接下载最新的 Flite 源并进行构建。
要使用我们的 USB 扬声器测试 Flite,请使用`-t`参数运行 flite,然后使用双引号引起来的文本字符串,例如 `flite -t "i recommend the ATM machine"`。 如果您不喜欢默认语音,则可以通过运行 `flite -lv`找到其他受支持的语音,它们应返回 `Voices available: kal awb_time kal16 awb rms slt` 。 然后,您可以指定用于 TTS 的语音: `flite -voice rms -t "i recommend the ATM machine"`
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册