提交 52918df5 编写于 作者: W wizardforcel

2020-08-13 22:36:31

上级 844ab735
# 前言
在本书中,您将学习如何有效地使用 TensorFlow,这是 Google 的深度学习开源框架。 您将实现不同的深度学习网络,例如**卷积神经网络** **CNN** s,**递归神经网络****RNN** s),**深度 Q 学习网络****DQN** )和**生成对抗网络****GAN** ),易于遵循独立的配方。 您将学习如何使用 TensorFlow 将 Keras 用作后端。
在本书中,您将学习如何有效地使用 TensorFlow,这是 Google 的深度学习开源框架。 您将实现不同的深度学习网络,例如**卷积神经网络****CNN**),**循环神经网络****RNN**),**深度 Q 学习网络****DQN**)和**生成对抗网络****GAN**),易于遵循独立的配方。 您将学习如何使用 TensorFlow 将 Keras 用作后端。
您将了解如何实现不同的深度神经体系结构以执行工作中的复杂任务。 您将在一些常用数据集(例如 MNIST,CIFAR-10,Youtube8m 等)上学习不同 DNN 的性能。 您不仅将了解 TensorFlow 支持的不同移动和嵌入式平台,还将了解如何为深度学习应用程序设置云平台。 简要了解 TPU 架构以及它们将如何影响 DNN 的未来。
到本书结尾,您将成为在不断增长的实际应用和研究领域中实施深度学习技术的专家,这些领域包括增强学习,GAN,自编码器等。
到本书结尾,您将成为在不断增长的实际应用和研究领域中实施深度学习技术的专家,这些领域包括增强学习,GAN,自编码器等。
# 本书涵盖的内容
*,TensorFlow-简介*讨论了 Google 的开源框架 TensorFlow,以及为什么它对深度学习很有用。 我们将讨论如何在 MAC,Windows 和 Ubuntu 上为 CPU 和 GPU 安装 TensorFlow。 我们还将讨论整本书中将使用的其他 python 软件包。 我们将解释 TensorFlow 代码的两个组成部分,图形的定义及其执行。 我们将学习使用 TensorBoard 查看图结构。 我们将了解 TensorFlow 常量,变量和占位符之间的区别。 我们还将品尝 TensorFlow 估算器。
“TensorFlow 简介”讨论了 Google 的开源框架 TensorFlow,以及为什么它对深度学习很有用。 我们将讨论如何在 MAC,Windows 和 Ubuntu 上为 CPU 和 GPU 安装 TensorFlow。 我们还将讨论整本书中将使用的其他 python 软件包。 我们将解释 TensorFlow 代码的两个组成部分,图形的定义及其执行。 我们将学习使用 TensorBoard 查看图结构。 我们将了解 TensorFlow 常量,变量和占位符之间的区别。 我们还将品尝 TensorFlow 估算器。
*,回归,*讨论了回归及其应用。 我们将讨论回归所涉及的概念,了解回归与聚类和分类的不同之处。 我们将学习可能的不同类型的损失函数以及如何在 Tensorflow 中实现它们。 我们学习如何实现 L1 和 L2 正则化。 我们将讨论梯度下降算法,学习如何优化它并在 Tensorflow 中实现它。 我们将简要了解交叉熵函数及其实现。
“回归”讨论了回归及其应用。 我们将讨论回归所涉及的概念,了解回归与聚类和分类的不同之处。 我们将学习可能的不同类型的损失函数以及如何在 Tensorflow 中实现它们。 我们学习如何实现 L1 和 L2 正则化。 我们将讨论梯度下降算法,学习如何优化它并在 Tensorflow 中实现它。 我们将简要了解交叉熵函数及其实现。
*,神经网络-感知器*,涵盖了人工神经网络,并解释了为什么它可以完成 DNN 最近声称的出色任务。 我们将学习激活功能的不同选择。 我们将使用所有这些来构建一个简单的感知器,并将其用于功能建模。 我们将在培训之前了解数据的正则化。 我们还将学习逐步构建多层感知器(MLP)。 我们将看到 TensorFlow 的自动区分器如何使我们的工作更轻松。
“神经网络感知器”,涵盖了人工神经网络,并解释了为什么它可以完成 DNN 最近声称的出色任务。 我们将学习激活功能的不同选择。 我们将使用所有这些来构建一个简单的感知器,并将其用于功能建模。 我们将在培训之前了解数据的正则化。 我们还将学习逐步构建多层感知器(MLP)。 我们将看到 TensorFlow 的自动区分器如何使我们的工作更轻松。
*,TensorFlow-卷积神经网络*,讨论了卷积的过程及其如何提取特征。 我们将学习 CNN 的三个重要层:卷积层,池化层和完全连接层。 我们还将学习辍学,如何提高性能以及不同的 CNN 架构(例如 LeNET 和 GoogleNET)。
“TensorFlow 卷积神经网络”,讨论了卷积的过程及其如何提取特征。 我们将学习 CNN 的三个重要层:卷积层,池化层和完全连接层。 我们还将学习辍学,如何提高性能以及不同的 CNN 架构(例如 LeNET 和 GoogleNET)。
*,即 CNN 的运作*,涵盖了 CNN 的一些令人赞叹的成功案例,例如面部识别。 我们将编写一个使用 CNN 进行情感分析的方法。 我们将讨论 CNN 的预调整,并学习如何实施迁移学习。 我们将学习如何使用 VGG16 进行迁移学习。 我们将使用 VGGNet,ResNet,Inception 和 Xception 学习图像的分类。 我们将使用膨胀的 ConvNet,Wavenet 和 Nsynth 生成音乐。 我们还将学习如何进行 Visual Q &A。我们将学习如何对视频进行分类。
“CNN 的运作”,涵盖了 CNN 的一些令人赞叹的成功案例,例如面部识别。 我们将编写一个使用 CNN 进行情感分析的方法。 我们将讨论 CNN 的预调整,并学习如何实施迁移学习。 我们将学习如何使用 VGG16 进行迁移学习。 我们将使用 VGGNet,ResNet,Inception 和 Xception 学习图像的分类。 我们将使用膨胀的 ConvNet,Wavenet 和 Nsynth 生成音乐。 我们还将学习如何进行 Visual Q &A。我们将学习如何对视频进行分类。
*,递归神经网络*讨论了递归神经网络。 我们将学习 RNN 的基本单元 RNN 单元。 我们将学习单词嵌入和时间排序。 我们将简要讨论 LSTM 网络。 我们将学习 seq2seq RNN。 我们将学习如何将 RNN 应用于机器翻译,生成文本和预测未来价值
“循环神经网络”讨论了循环神经网络。 我们将学习 RNN 的基本单元 RNN 单元。 我们将学习单词嵌入和时间排序。 我们将简要讨论 LSTM 网络。 我们将学习 seq2seq RNN。 我们将学习如何将 RNN 应用于机器翻译,生成文本和预测未来价值
*,无监督学习*,讲授无监督学习范例。 我们将学习聚类和降维。 我们将学习诸如主成分分析(PCA)之类的技术,并了解如何将其用于降维。 我们将学习 k 均值聚类。 我们将了解地形图的概念,并学习如何训练自组织图。 我们将学习受限玻尔兹曼机(RBM)。 我们将讨论 RBM 的体系结构和培训。 我们将学习如何堆叠 RBM 来构成深度信念网络,并且将学习如何对其进行训练。 我们将使用预训练和微调进行情绪检测的概念来训练 DBN。
“无监督学习”,讲授无监督学习范例。 我们将学习聚类和降维。 我们将学习诸如主成分分析(PCA)之类的技术,并了解如何将其用于降维。 我们将学习 k 均值聚类。 我们将了解地形图的概念,并学习如何训练自组织图。 我们将学习受限玻尔兹曼机(RBM)。 我们将讨论 RBM 的体系结构和培训。 我们将学习如何堆叠 RBM 来构成深度信念网络,并且将学习如何对其进行训练。 我们将使用预训练和微调进行情绪检测的概念来训练 DBN。
*,即自动编码器*,使自动编码器神秘化。 我们将学习自动编码器及其应用。 我们将讨论可以使用自动编码器的各种实际示例。 我们将讨论编码和后续重构的过程。 我们将学习重建误差。 我们将学习稀疏自动编码器,即 KL 散度的概念。 我们将学习去噪自动编码器,并在给定嘈杂图像的情况下使用它们来重建清晰图像。 我们将学习如何构建卷积自动编码器和堆叠式自动编码器。
“自编码器”,使自编码器神秘化。 我们将学习自编码器及其应用。 我们将讨论可以使用自编码器的各种实际示例。 我们将讨论编码和后续重构的过程。 我们将学习重建误差。 我们将学习稀疏自编码器,即 KL 散度的概念。 我们将学习去噪自编码器,并在给定嘈杂图像的情况下使用它们来重建清晰图像。 我们将学习如何构建卷积自编码器和堆叠式自编码器。
*,强化学习*,涵盖了不同的强化学习算法。 我们将学习 Q 学习算法。 我们将讨论 Bellman-Ford 方程以及如何选择学习率,折扣因子。 我们将学习如何使用 OpenAI Gym 框架。 我们将学习体验重播和缓冲的概念,以实现价值迭代 Q 网络。 我们将使用 Q 学习和策略梯度来构建游戏代理。 最后,我们将学习如何建立自己的深度 Q 学习网络(DQN)。 简要描述 AlphaGo Zero 及其大获胜。
“强化学习”,涵盖了不同的强化学习算法。 我们将学习 Q 学习算法。 我们将讨论 Bellman-Ford 方程以及如何选择学习率,折扣因子。 我们将学习如何使用 OpenAI Gym 框架。 我们将学习体验重播和缓冲的概念,以实现价值迭代 Q 网络。 我们将使用 Q 学习和策略梯度来构建游戏代理。 最后,我们将学习如何建立自己的深度 Q 学习网络(DQN)。 简要描述 AlphaGo Zero 及其大获胜。
*[第 10 章](../Text/10.html),TensorFlow 移动计算,*涵盖了 TensorFlow 移动。 我们将学习移动深度学习的不同应用。 我们将学习如何在 Windows 平台上的 Android Studio 中使用 Tensorflow。 我们将学习如何结合使用 Tensorflow 和 XCode 来制作基于 IOS 的应用程序。 我们将学习如何优化移动设备的 Tensorflow 图。 我们还将学习如何为移动设备转换 Tensorflow 图。
第 10 章,“TensorFlow 移动计算”,涵盖了 TensorFlow 移动。 我们将学习移动深度学习的不同应用。 我们将学习如何在 Windows 平台上的 Android Studio 中使用 Tensorflow。 我们将学习如何结合使用 Tensorflow 和 XCode 来制作基于 IOS 的应用程序。 我们将学习如何优化移动设备的 Tensorflow 图。 我们还将学习如何为移动设备转换 Tensorflow 图。
*[第 11 章](../Text/11.html),TensorFlow –生成对抗网络(GAN),变体自动编码器和胶囊网络,*从生成对抗网络及其相对于其他 DNN 的优势开始。 我们探索了不同的预测模型。 我们了解 GAN 的动机及其直观工作。 我们了解基本的 GAN 架构。 我们将探索 GAN 的一些非常酷的应用程序。 我们将学习另一种生成网络,即变分自动编码器。 最后,我们将了解最近提出的胶囊网络
第 11 章,“TensorFlow 生成对抗网络(GAN),变分自编码器和胶囊网络”,从生成对抗网络及其相对于其他 DNN 的优势开始。 我们探索了不同的预测模型。 我们了解 GAN 的动机及其直观工作。 我们了解基本的 GAN 架构。 我们将探索 GAN 的一些非常酷的应用程序。 我们将学习另一种生成网络,即变分自编码器。 最后,我们将了解最近提出的胶囊网络
*[第 12 章](../Text/12.html),* *分布式 TensorFlow 和云深度学习*,介绍了云环境,泊坞窗,容器以及如何使用它们。 *我们将学习如何使用具有多个 GPU 和多个服务器的分布式 Tensorflow。 我们将学习如何设置 AWS 进行深度学习。* 我们将学习如何为深度学习应用程序设置 Google 云。 我们将学习如何为深度学习应用程序设置 Microsoft Azure 云。 我们了解其他可用的云服务
第 12 章,“分布式 TensorFlow 和云深度学习”,介绍了云环境,泊坞窗,容器以及如何使用它们。 *我们将学习如何使用具有多个 GPU 和多个服务器的分布式 Tensorflow。 我们将学习如何设置 AWS 进行深度学习。* 我们将学习如何为深度学习应用程序设置 Google 云。 我们将学习如何为深度学习应用程序设置 Microsoft Azure 云。 我们了解其他可用的云服务
[附录 A](../Text/13.html)*通过 AutoML 学习(元学习)*,简要讨论了 AutoML 和暹罗网络。
附录 A,“通过 AutoML 学习(元学习)”,简要讨论了 AutoML 和暹罗网络。
[附录 B](../Text/14.html)*TensorFlow 处理单元,*涵盖了 Tensor 处理单元,其基本架构以及它将如何影响 DNN 的未来。
附录 B,“TensorFlow 处理单元”,涵盖了 Tensor 处理单元,其基本架构以及它将如何影响 DNN 的未来。
# 这本书需要什么
......@@ -118,7 +118,7 @@ Warnings or important notes appear like this.Tips and tricks appear like this.
* Mac 版 Zipeg / iZip / UnRarX
* 适用于 Linux 的 7-Zip / PeaZip
本书的代码包也托管在 GitHub 的 [https://github.com/PacktPublishing/TensorFlow-1x-Deep-Learning-Cookbook](https://github.com/PacktPublishing/TensorFlow-1x-Deep-Learning-Cookbook) 上。 我们还从 **[https://github.com/PacktPublishing/](https://github.com/PacktPublishing/)** 提供了丰富的书籍和视频目录中的其他代码包。 去看一下!
本书的代码包也托管在 GitHub 的 [https://github.com/PacktPublishing/TensorFlow-1x-Deep-Learning-Cookbook](https://github.com/PacktPublishing/TensorFlow-1x-Deep-Learning-Cookbook) 上。 我们还从 [https://github.com/PacktPublishing/](https://github.com/PacktPublishing/) 提供了丰富的书籍和视频目录中的其他代码包。 去看一下!
# 勘误
......
......@@ -20,13 +20,13 @@ TensorFlow 使得一切变得更容易,更快捷,从而减少了实现想法
# 介绍
TensorFlow 是 Google Brain 团队针对**深层神经网络** **DNN** )开发的功能强大的开源软件库。 它于 2015 年 11 月首次在 Apache 2.x 许可下提供; 截止到今天,其 GitHub 存储库( [https://github.com/tensorflow/tensorflow](https://github.com/tensorflow/tensorflow) )提交了超过 17,000 次提交,在短短两年内大约有 845 个贡献者。 这本身就是 TensorFlow 受欢迎程度和性能的衡量标准。 下图显示了流行的深度学习框架的比较,可以明显看出 TensorFlow 是其中的佼佼者:
TensorFlow 是 Google Brain 团队针对**深层神经网络****DNN**)开发的功能强大的开源软件库。 它于 2015 年 11 月首次在 Apache 2.x 许可下提供; 截止到今天,其 GitHub 存储库( [https://github.com/tensorflow/tensorflow](https://github.com/tensorflow/tensorflow) )提交了超过 17,000 次提交,在短短两年内大约有 845 个贡献者。 这本身就是 TensorFlow 受欢迎程度和性能的衡量标准。 下图显示了流行的深度学习框架的比较,可以明显看出 TensorFlow 是其中的佼佼者:
![](img/bef34f80-4861-4dee-93e3-95a9ba165525.png)
The Figure is based on data taken from the Github repositories of each as on 12 July 2017\. Each Bubble has a legend: (Framework, contributors).
首先让我们了解 TensorFlow 到底是什么,以及为什么它在 DNN 研究人员和工程师中如此受欢迎。 TensorFlow 是开源深度学习库,它允许使用单个 TensorFlow API 在一个或多个 CPU,服务器,台式机或移动设备上的 GPU 上部署深度神经网络计算。 您可能会问,还有很多其他深度学习库,例如 Torch,Theano,Caffe 和 MxNet。 是什么让 TensorFlow 与众不同? TensorFlow 等大多数其他深度学习库具有自动区分功能,许多都是开源的,大多数都支持 CPU / GPU 选项,具有经过预训练的模型,并支持常用的 NN 体系结构,例如**递归神经网络****RNN****卷积神经网络****CNN** )和**深度置信网络****DBN** )。 那么,TensorFlow 还有什么呢? 让我们为您列出它们:
首先让我们了解 TensorFlow 到底是什么,以及为什么它在 DNN 研究人员和工程师中如此受欢迎。 TensorFlow 是开源深度学习库,它允许使用单个 TensorFlow API 在一个或多个 CPU,服务器,台式机或移动设备上的 GPU 上部署深度神经网络计算。 您可能会问,还有很多其他深度学习库,例如 Torch,Theano,Caffe 和 MxNet。 是什么让 TensorFlow 与众不同? TensorFlow 等大多数其他深度学习库具有自动区分功能,许多都是开源的,大多数都支持 CPU / GPU 选项,具有经过预训练的模型,并支持常用的 NN 体系结构,例如**循环神经网络****RNN****卷积神经网络****CNN**)和**深度置信网络****DBN**)。 那么,TensorFlow 还有什么呢? 让我们为您列出它们:
* 它适用于所有很酷的语言。 TensorFlow 适用于 Python,C ++,Java,R 和 Go。
* TensorFlow 可在多个平台上运行,甚至可以移动和分布式。
......@@ -39,7 +39,7 @@ The Figure is based on data taken from the Github repositories of each as on 12
Google 研究博客( [https://research.googleblog.com/2016/11/celebrating-tensorflows-first-year.html](https://research.googleblog.com/2016/11/celebrating-tensorflows-first-year.html) )列出了世界各地使用 TensorFlow 进行的一些引人入胜的项目:
* Google 翻译正在使用 TensorFlow 和**张量处理单元** **TPU**
* Google 翻译正在使用 TensorFlow 和**张量处理单元****TPU**
* 可以使用基于强化学习的模型生成旋律的 Magenta 项目采用 TensorFlow
* 澳大利亚海洋生物学家正在使用 TensorFlow 来发现和了解濒临灭绝的海牛
* 一位日本农民使用 TensorFlow 开发了一个应用,该应用使用大小和形状等物理参数对黄瓜进行分类
......@@ -815,7 +815,7 @@ with tf.variable_scope(tf.get_variable_scope(), resuse=True):
# 使用 XLA 增强计算性能
**加速线性代数** **XLA** )是线性代数的特定领域编译器。 根据 [https://www.tensorflow.org/performance/xla/](https://www.tensorflow.org/performance/xla/) 的说法,它仍处于实验阶段,可用于优化 TensorFlow 计算。 它可以提高服务器和移动平台上的执行速度,内存使用率和可移植性。 它提供双向 **JIT****即时**)编译或 **AoT****Atime of Time** )编译。 使用 XLA,您可以生成平台相关的二进制文件(适用于 x64,ARM 等大量平台),可以针对内存和速度进行优化。
**加速线性代数****XLA**)是线性代数的特定领域编译器。 根据 [https://www.tensorflow.org/performance/xla/](https://www.tensorflow.org/performance/xla/) 的说法,它仍处于实验阶段,可用于优化 TensorFlow 计算。 它可以提高服务器和移动平台上的执行速度,内存使用率和可移植性。 它提供双向 **JIT****即时**)编译或 **AoT****Atime of Time**)编译。 使用 XLA,您可以生成平台相关的二进制文件(适用于 x64,ARM 等大量平台),可以针对内存和速度进行优化。
# 做好准备
......@@ -1003,7 +1003,7 @@ sess.close()
![](img/2eba3092-0b16-458a-b577-d7965ed73644.png)
由 Hinton 等人定义的深度学习。 ( [https://www.cs.toronto.edu/~hinton/absps/NatureDeepReview.pdf](https://www.cs.toronto.edu/~hinton/absps/NatureDeepReview.pdf) ),由包含多个处理层(隐藏层)的计算模型组成。 层数的增加导致学习时间的增加。 由于数据集很大,因此学习时间进一步增加,正如当今的 CNN 或**生成对抗网络** **GAN** )的标准一样。 因此,要实际实现 DNN,我们需要很高的计算能力。 NVDIA®的 GPU 的出现使其变得可行,然后 Google 的 TensorFlow 使得无需复杂的数学细节即可实现复杂的 DNN 结构成为可能,并且大型数据集的可用性为 DNN 提供了必要的条件。 TensorFlow 是最受欢迎的深度学习库,其原因如下:
由 Hinton 等人定义的深度学习。 ( [https://www.cs.toronto.edu/~hinton/absps/NatureDeepReview.pdf](https://www.cs.toronto.edu/~hinton/absps/NatureDeepReview.pdf) ),由包含多个处理层(隐藏层)的计算模型组成。 层数的增加导致学习时间的增加。 由于数据集很大,因此学习时间进一步增加,正如当今的 CNN 或**生成对抗网络****GAN**)的标准一样。 因此,要实际实现 DNN,我们需要很高的计算能力。 NVDIA®的 GPU 的出现使其变得可行,然后 Google 的 TensorFlow 使得无需复杂的数学细节即可实现复杂的 DNN 结构成为可能,并且大型数据集的可用性为 DNN 提供了必要的条件。 TensorFlow 是最受欢迎的深度学习库,其原因如下:
* TensorFlow 是一个强大的库,用于执行大规模的数值计算,例如矩阵乘法或自动微分。 这两个计算对于实现和训练 DNN 是必需的。
* TensorFlow 在后端使用 C / C ++,这使其计算速度更快。
......@@ -1019,7 +1019,7 @@ sess.close()
* **CIFAR10** :此数据集包含 10 类 60,000 张 32 x 32 彩色图像,每类 6,000 张图像。 训练集包含 50,000 张图像和测试数据集-10,000 张图像。 数据集的十类是:飞机,汽车,鸟,猫,鹿,狗,青蛙,马,船和卡车。 数据由多伦多大学计算机科学系( [https://www.cs.toronto.edu/~kriz/cifar.html](https://www.cs.toronto.edu/~kriz/cifar.html) )维护。
* **WORDNET** :这是英语的词汇数据库。 它包含名词,动词,副词和形容词,它们被分组为认知同义词(同义词集),也就是说,代表相同概念的单词(例如,关闭和关闭或汽车和汽车)被分组为无序集合。 它包含 155,287 个单词,按 117,659 个同义词集进行组织,总计 206,941 个单词感对。 数据由普林斯顿大学( [https://wordnet.princeton.edu/](https://wordnet.princeton.edu/) )维护。
* **ImageNET** :这是根据 WORDNET 层次结构组织的图像数据集(目前仅名词)。 每个有意义的概念(同义词集)由多个单词或单词短语描述。 每个同义词集平均由 1,000 张图像表示。 目前,它具有 21,841 个同义词集和总共 14,197,122 张图像。 自 2010 年以来,每年组织一次 **ImageNet 大规模视觉识别挑战赛** **ILSVRC** ),以将图像分类为 1,000 个对象类别之一。 这项工作由普林斯顿大学,斯坦福大学,A9 和 Google( [http://www.image-net.org/](http://www.image-net.org/))赞助。
* **ImageNET** :这是根据 WORDNET 层次结构组织的图像数据集(目前仅名词)。 每个有意义的概念(同义词集)由多个单词或单词短语描述。 每个同义词集平均由 1,000 张图像表示。 目前,它具有 21,841 个同义词集和总共 14,197,122 张图像。 自 2010 年以来,每年组织一次 **ImageNet 大规模视觉识别挑战赛****ILSVRC**),以将图像分类为 1,000 个对象类别之一。 这项工作由普林斯顿大学,斯坦福大学,A9 和 Google( [http://www.image-net.org/](http://www.image-net.org/))赞助。
* **YouTube-8M** :这是一个大规模的标记视频数据集,包含数百万个 YouTube 视频。 它有大约 700 万个 YouTube 视频 URL,分为 4716 个类别,分为 24 个顶级类别。 它还提供了预处理支持和帧级功能。 该数据集由 Google Research( [https://research.google.com/youtube8m/](https://research.google.com/youtube8m/) )维护。
**读取数据:**在 TensorFlow 中可以通过三种方式读取数据:通过`feed_dict`馈送,从文件读取以及使用预加载的数据。 我们将在整本书中使用本食谱中描述的组件来阅读和提供数据。 在接下来的步骤中,您将学习每个步骤。
......@@ -1089,7 +1089,7 @@ with tf.Session as sess:
4. **定义模型**:建立一个描述网络结构的计算图。 它涉及指定超参数,变量和占位符序列,其中信息从一组神经元流向另一组神经元,并传递损失/错误函数。 您将在本章的后续部分中了解有关计算图的更多信息。
5. **培训/学习**:DNN 中的学习通常基于梯度下降算法,(将在[第 2 章](../Text/02.html)*回归*中详细介绍) 目的是找到训练变量(权重/偏差),以使误差或损失(由用户在步骤 2 中定义)最小。 这是通过初始化变量并使用`run()`实现的:
5. **培训/学习**:DNN 中的学习通常基于梯度下降算法,(将在第 2 章*回归*中详细介绍) 目的是找到训练变量(权重/偏差),以使误差或损失(由用户在步骤 2 中定义)最小。 这是通过初始化变量并使用`run()`实现的:
```py
with tf.Session as sess:
......
......@@ -198,7 +198,7 @@ with tf.Session() as sess:
5. 馈送到`feed_dict``X``Y`数据可以是单个`X``Y`点(随机梯度),整个训练集(香草)或批次。
6. 梯度下降的另一个变化是增加了动量项(我们将在[第 3 章](../Text/03.html)*神经网络-感知器*中找到更多相关信息)。 为此,我们使用优化器`tf.train.MomentumOptimizer()`。 它同时将`learning_rate``momentum`作为`init`参数:
6. 梯度下降的另一个变化是增加了动量项(我们将在第 3 章*神经网络-感知器*中找到更多相关信息)。 为此,我们使用优化器`tf.train.MomentumOptimizer()`。 它同时将`learning_rate``momentum`作为`init`参数:
```py
optimizer = tf.train.MomentumOtimizer(learning_rate=0.01, momentum=0.5).minimize(loss)
......
# 神经网络-感知器
自最近十年以来,神经网络一直处于机器学习研究和应用的最前沿。 **深层神经网络** **DNN** ),传递学习以及计算效率高的 GPU 的可用性已帮助在图像识别,语音识别甚至文本生成领域取得了重大进展。 在本章中,我们将专注于基本的神经网络感知器,即人工神经元的完全连接的分层体系结构。 本章将包括以下食谱:
自最近十年以来,神经网络一直处于机器学习研究和应用的最前沿。 **深层神经网络****DNN**),传递学习以及计算效率高的 GPU 的可用性已帮助在图像识别,语音识别甚至文本生成领域取得了重大进展。 在本章中,我们将专注于基本的神经网络感知器,即人工神经元的完全连接的分层体系结构。 本章将包括以下食谱:
* 激活功能
* 单层感知器
......@@ -16,7 +16,7 @@
神经网络并不是什么新鲜事物。 第一个神经网络模型 McCulloch Pitts(MCP)( [http://vordenker.de/ggphilosophy/mcculloch_a-ologic-calculus.pdf](http://vordenker.de/ggphilosophy/mcculloch_a-logical-calculus.pdf) )模型最早是在 1943 年提出的。 建造了第一台计算机!)该模型可以执行 AND / OR / NOT 之类的逻辑运算。 MCP 模型具有固定的权重和偏差; 没有学习的可能。 几年后,Frank Rosenblatt 在 1958 年解决了这个问题( [https://blogs.umass.edu/brain-wars/files/2016/03/rosenblatt-1957.pdf](https://blogs.umass.edu/brain-wars/files/2016/03/rosenblatt-1957.pdf) )。 他提出了第一个学习神经网络,称为 **Perceptron**
从那时起,众所周知,添加多层神经元并建立一个深而密集的网络将有助于神经网络解决复杂的任务。 正如母亲为孩子的成就感到自豪一样,科学家和工程师对使用**神经网络** **NN** )( [https:// www。 youtube.com/watch?v=jPHUlQiwD9Y](https://www.youtube.com/watch?v=jPHUlQiwD9Y) )。 这些声明不是虚假的,但是由于硬件计算的限制和复杂的网络结构,当时根本不可能实现它们。 这导致了 1970 年代和 1980 年代的 **AI Winters** 。 在这些寒战中,由于很少或几乎没有对基于 AI 的项目提供资金,因此该领域的进展放缓了。
从那时起,众所周知,添加多层神经元并建立一个深而密集的网络将有助于神经网络解决复杂的任务。 正如母亲为孩子的成就感到自豪一样,科学家和工程师对使用**神经网络****NN**)( [https:// www。 youtube.com/watch?v=jPHUlQiwD9Y](https://www.youtube.com/watch?v=jPHUlQiwD9Y) )。 这些声明不是虚假的,但是由于硬件计算的限制和复杂的网络结构,当时根本不可能实现它们。 这导致了 1970 年代和 1980 年代的 **AI Winters** 。 在这些寒战中,由于很少或几乎没有对基于 AI 的项目提供资金,因此该领域的进展放缓了。
随着 DNN 和 GPU 的出现,情况发生了变化。 今天,我们拥有的网络可以在较少的调整参数的情况下实现更好的性能,诸如辍学和转移学习之类的技术可以进一步减少培训时间,最后,硬件公司正在提出专门的硬件芯片来执行基于 NN 的快速计算。
......@@ -26,13 +26,13 @@
来源: [https://commons.wikimedia.org/wiki/File:Rosenblattperceptron.png](https://commons.wikimedia.org/wiki/File:Rosenblattperceptron.png)
当仅存在此类神经元的一层时,它称为感知器。 输入层称为**第零层**,因为它仅缓冲输入。 存在的唯一神经元层形成输出层。 输出层的每个神经元都有自己的权重和阈值。 当存在许多这样的层时,该网络称为**多层感知器** **MLP** )。 一个 MLP 具有一个或多个隐藏层。 这些隐藏层具有不同数量的隐藏神经元。 每个隐藏层的神经元具有相同的激活功能:
当仅存在此类神经元的一层时,它称为感知器。 输入层称为**第零层**,因为它仅缓冲输入。 存在的唯一神经元层形成输出层。 输出层的每个神经元都有自己的权重和阈值。 当存在许多这样的层时,该网络称为**多层感知器****MLP**)。 一个 MLP 具有一个或多个隐藏层。 这些隐藏层具有不同数量的隐藏神经元。 每个隐藏层的神经元具有相同的激活功能:
![](img/aa3bbbc4-cb14-4d86-bae9-70156e72a876.png)
上图显示了一个 MLP,它具有四个输入,五个隐藏层,每个隐藏层分别具有 4、5、6、4 和 3 个神经元,而在输出层中具有三个神经元。 在 MLP 中,下层的所有神经元都与其上一层的所有神经元相连。 因此,MLP 也称为**全连接层**。 MLP 中的信息流始终是从输入到输出。 由于没有反馈或跳跃,因此这些网络也称为**前馈网络**
使用**梯度下降算法**训练感知器。 在[第 2 章](../Text/02.html)*回归*中,您了解了梯度下降; 在这里,我们对其进行更深入的研究。 感知器通过有监督的学习算法进行学习,也就是说,网络由训练数据集中存在的所有输入的期望输出提供。 在输出中,我们定义一个误差函数或目标函数 *J(W)*,这样,当网络完全学习了所有训练数据时,目标函数将最小。
使用**梯度下降算法**训练感知器。 在第 2 章*回归*中,您了解了梯度下降; 在这里,我们对其进行更深入的研究。 感知器通过有监督的学习算法进行学习,也就是说,网络由训练数据集中存在的所有输入的期望输出提供。 在输出中,我们定义一个误差函数或目标函数 *J(W)*,这样,当网络完全学习了所有训练数据时,目标函数将最小。
更新输出层和隐藏层的权重,以使目标函数的梯度减小:
......@@ -42,11 +42,11 @@
梯度值越高,权重值的变化越大,反之亦然。 现在,这一切都很好,但是当梯度达到零,因此权重没有变化时,我们到达高原时就会遇到问题。 当我们进入一个小坑(局部极小值)时,我们也可能遇到问题,因为当我们尝试移动到任一侧时,坡度将增加,从而迫使网络停留在坑中。
[第 2 章](../Text/02.html)*回归*中所讨论的,梯度下降有多种变体,旨在提高收敛性,避免了陷入局部极小值或高原的问题(增加动量,可变学习 率)。
第 2 章*回归*中所讨论的,梯度下降有多种变体,旨在提高收敛性,避免了陷入局部极小值或高原的问题(增加动量,可变学习 率)。
TensorFlow 借助不同的优化器自动计算这些梯度。 但是,需要注意的重要一点是,由于 TensorFlow 将计算梯度,而梯度也将涉及激活函数的导数,因此重要的是,您选择的激活函数是可微的,并且在整个训练场景中最好具有非零梯度 。
感知器梯度下降的主要方法之一不同于[第 2 章](../Text/02.html)*回归*,应用是为输出层定义目标函数,但可用于查找目标层的权重变化 隐藏层的神经元也是如此。 这是使用**反向传播****BPN** )算法完成的,其中输出端的错误会向后传播到隐藏层,并用于确定权重变化。 您将很快了解更多信息。
感知器梯度下降的主要方法之一不同于第 2 章,*回归*,应用是为输出层定义目标函数,但可用于查找目标层的权重变化 隐藏层的神经元也是如此。 这是使用**反向传播****BPN**)算法完成的,其中输出端的错误会向后传播到隐藏层,并用于确定权重变化。 您将很快了解更多信息。
# 激活功能
......@@ -153,7 +153,7 @@ print(out)
```
5. **整流的线性单位** **ReLU** )激活功能再次内置在 TensorFlow 库中。 激活函数类似于线性激活函数,但有一个大变化-对于活动的负值,神经元不触发(零输出),对于活动的正值,神经元的输出 与给定的活动相同:
5. **整流的线性单位****ReLU**)激活功能再次内置在 TensorFlow 库中。 激活函数类似于线性激活函数,但有一个大变化-对于活动的负值,神经元不触发(零输出),对于活动的正值,神经元的输出 与给定的活动相同:
```py
# Plotting ReLU Activation function
......@@ -505,7 +505,7 @@ TensorFlow 支持自动分化; 我们可以使用 TensorFlow 优化器来计
在反向传播算法配方中,我们定义了层,权重,损耗,渐变,并手动通过渐变进行更新。 为了更好地理解,手动使用方程式进行操作是一个好主意,但是随着网络中层数的增加,这可能会非常麻烦。
在本食谱中,我们将使用强大的 TensorFlow 功能(例如 Contrib(层))来定义神经网络层,并使用 TensorFlow 自己的优化器来计算和应用梯度。 我们在[第 2 章](../Text/02.html)*回归*中了解了如何使用不同的 TensorFlow 优化器。 contrib 可用于向神经网络模型添加各种层,例如添加构建块。 我们在这里使用的一种方法是`tf.contrib.layers.fully_connected`,在 TensorFlow 文档中定义如下:
在本食谱中,我们将使用强大的 TensorFlow 功能(例如 Contrib(层))来定义神经网络层,并使用 TensorFlow 自己的优化器来计算和应用梯度。 我们在第 2 章*回归*中了解了如何使用不同的 TensorFlow 优化器。 contrib 可用于向神经网络模型添加各种层,例如添加构建块。 我们在这里使用的一种方法是`tf.contrib.layers.fully_connected`,在 TensorFlow 文档中定义如下:
```py
fully_connected(
......@@ -534,7 +534,7 @@ fully_connected(
我们按以下步骤进行:
1. 第一步是更改`loss`功能; 尽管对于分类,最好使用交叉熵`loss`函数。 我们目前继续**均方误差** **MSE** ):
1. 第一步是更改`loss`功能; 尽管对于分类,最好使用交叉熵`loss`函数。 我们目前继续**均方误差****MSE**):
```py
loss = tf.reduce_mean(tf.square(y - y_hat, name='loss'))
......@@ -615,7 +615,7 @@ Hornik *等人*( [http://www.cs.cmu.edu/~bhiksha/courses/deeplearning/Fall.201
"multilayer feedforward networks with as few as one hidden layer are indeed capable of universal approximation in a very precise and satisfactory sense."
在本食谱中,我们将向您展示如何使用 MLP 进行函数逼近; 具体来说,我们将预测波士顿的房价。 我们已经熟悉了数据集; 在[第 2 章](../Text/02.html)*回归*中,我们使用回归技术进行房价预测,现在我们将使用 MLP 进行相同的操作。
在本食谱中,我们将向您展示如何使用 MLP 进行函数逼近; 具体来说,我们将预测波士顿的房价。 我们已经熟悉了数据集; 在第 2 章*回归*中,我们使用回归技术进行房价预测,现在我们将使用 MLP 进行相同的操作。
# 做好准备
......
# 卷积神经网络
**卷积神经网络** **CNN** 或有时称为 **ConvNets** )令人着迷。 在短时间内,它们成为一种破坏性技术,打破了从文本,视频到语音的多个领域中的所有最新技术成果,远远超出了最初用于图像处理的范围。 在本章中,我们将介绍一些方法,如下所示:
**卷积神经网络****CNN** 或有时称为 **ConvNets**)令人着迷。 在短时间内,它们成为一种破坏性技术,打破了从文本,视频到语音的多个领域中的所有最新技术成果,远远超出了最初用于图像处理的范围。 在本章中,我们将介绍一些方法,如下所示:
* 创建一个 ConvNet 对手写 MNIST 编号进行分类
* 创建一个 ConvNet 对 CIFAR-10 进行分类
......@@ -1002,7 +1002,7 @@ scores = model.predict_generator(validation_generator, nb_validation_samples/bat
# 创建 DeepDream 网络
Google 于 2014 年在 **ImageNet 上训练了神经网络以应对大规模视觉识别挑战** **ILSVRC** ),并于 2015 年 7 月将其开源。*中介绍了原始算法 深入了解卷积,Christian Szegedy,刘炜,贾阳清,Pierre Sermanet,Scott Reed,Dragomir Anguelov,Dumitru Erhan,Vincent Vanhoucke 和 Andrew Rabinovich(https://arxiv.org/abs/1409.4842)*。 网络学会了每个图像的表示。 较低的层学习诸如线条和边缘之类的底层特征,而较高的层则学习诸如眼睛,鼻子,嘴等更复杂的图案。 因此,如果尝试在网络中代表更高的级别,我们将看到从原始 ImageNet 提取的各种不同特征的混合,例如鸟的眼睛和狗的嘴巴。 考虑到这一点,如果我们拍摄一张新图像并尝试使与网络上层的相似性最大化,那么结果就是一张新的有远见的图像。 在这个有远见的图像中,较高层学习的某些模式在原始图像中被梦到(例如,想象中)。 这是此类有远见的图像的示例:
Google 于 2014 年在 **ImageNet 上训练了神经网络以应对大规模视觉识别挑战****ILSVRC**),并于 2015 年 7 月将其开源。*中介绍了原始算法 深入了解卷积,Christian Szegedy,刘炜,贾阳清,Pierre Sermanet,Scott Reed,Dragomir Anguelov,Dumitru Erhan,Vincent Vanhoucke 和 Andrew Rabinovich(https://arxiv.org/abs/1409.4842)*。 网络学会了每个图像的表示。 较低的层学习诸如线条和边缘之类的底层特征,而较高的层则学习诸如眼睛,鼻子,嘴等更复杂的图案。 因此,如果尝试在网络中代表更高的级别,我们将看到从原始 ImageNet 提取的各种不同特征的混合,例如鸟的眼睛和狗的嘴巴。 考虑到这一点,如果我们拍摄一张新图像并尝试使与网络上层的相似性最大化,那么结果就是一张新的有远见的图像。 在这个有远见的图像中,较高层学习的某些模式在原始图像中被梦到(例如,想象中)。 这是此类有远见的图像的示例:
![](img/cbbf2fe8-00f2-4ee3-b340-050425f20a7c.jpg)
......
# 高级卷积神经网络
在本章中,我们将讨论如何将**卷积神经网络** **CNN** )用于除图像以外的领域中的深度学习。 我们的注意力将首先集中在文本分析和**自然语言处理****NLP** )上。 在本章中,我们将介绍一些用于以下方面的方法:
在本章中,我们将讨论如何将**卷积神经网络****CNN**)用于除图像以外的领域中的深度学习。 我们的注意力将首先集中在文本分析和**自然语言处理****NLP**)上。 在本章中,我们将介绍一些用于以下方面的方法:
* 创建 ConvNet 进行情感分析
* 检查 VGG 预制网络了解了哪些过滤器
......@@ -850,7 +850,7 @@ An example of NSynth architecture as seen in [https://magenta.tensorflow.org/nsy
# 做好准备
对于本食谱,我们不会编写代码,而是向您展示如何使用一些在线可用的代码( [https://github.com/tensorflow/magenta/tree/master/magenta/models/ nsynth](https://github.com/tensorflow/magenta/tree/master/magenta/models/nsynth) )和一些不错的演示,您可以从 Google Brain 找到 [https://aiexperiments.withgoogle.com/sound-maker](https://aiexperiments.withgoogle.com/sound-maker) )。 有兴趣的读者还可以阅读以下文章:*使用 WaveNet 自编码器的音符的神经音频合成,*杰西·恩格尔,辛琼·雷斯尼克,亚当·罗伯茨,桑德·迪勒曼,道格拉斯·埃克,卡伦·西蒙扬,穆罕默德·诺鲁兹,4 月 5 日 2017 *。* [https://arxiv.org/abs/1704.01279](https://arxiv.org/abs/1704.01279)
对于本食谱,我们不会编写代码,而是向您展示如何使用一些在线可用的代码( [https://github.com/tensorflow/magenta/tree/master/magenta/models/ nsynth](https://github.com/tensorflow/magenta/tree/master/magenta/models/nsynth) )和一些不错的演示,您可以从 Google Brain 找到 [https://aiexperiments.withgoogle.com/sound-maker](https://aiexperiments.withgoogle.com/sound-maker) )。 有兴趣的读者还可以阅读以下文章:*使用 WaveNet 自编码器的音符的神经音频合成,*杰西·恩格尔,辛琼·雷斯尼克,亚当·罗伯茨,桑德·迪勒曼,道格拉斯·埃克,卡伦·西蒙扬,穆罕默德·诺鲁兹,4 月 5 日 2017 *。* [https://arxiv.org/abs/1704.01279](https://arxiv.org/abs/1704.01279)
# 怎么做...
......@@ -1251,7 +1251,7 @@ print str(round(y_output[0,label]*100,2)).zfill(5), "% ", labelencoder.inverse_t
选择最佳方法严格取决于您的特定应用,没有明确的答案。 前三种方法通常在计算上更昂贵,而后三种方法则更便宜并且经常获得更好的性能。
在本食谱中,我们将通过描述论文*,具有递归神经网络*,蒙特斯,阿尔贝托和萨尔瓦多,阿马亚和帕斯库拉,圣地亚哥和吉罗的未修剪视频中的时间活动检测,来说明如何使用第六种方法 -i-Nieto,哈维尔,2016 年( [https://arxiv.org/abs/1608.08128](https://arxiv.org/abs/1608.08128) )。 这项工作旨在解决 ActivityNet 挑战 [http://activity-net.org/challenges/2016/](http://activity-net.org/challenges/2016/) 。 这项挑战着重于从用户生成的视频中识别高水平和面向目标的活动,类似于在互联网门户网站中找到的那些活动。 该挑战针对两项不同任务中的 200 个活动类别量身定制:
在本食谱中,我们将通过描述论文*,具有循环神经网络*,蒙特斯,阿尔贝托和萨尔瓦多,阿马亚和帕斯库拉,圣地亚哥和吉罗的未修剪视频中的时间活动检测,来说明如何使用第六种方法 -i-Nieto,哈维尔,2016 年( [https://arxiv.org/abs/1608.08128](https://arxiv.org/abs/1608.08128) )。 这项工作旨在解决 ActivityNet 挑战 [http://activity-net.org/challenges/2016/](http://activity-net.org/challenges/2016/) 。 这项挑战着重于从用户生成的视频中识别高水平和面向目标的活动,类似于在互联网门户网站中找到的那些活动。 该挑战针对两项不同任务中的 200 个活动类别量身定制:
* 未修剪的分类挑战:给定较长的视频,请预测视频中存在的活动的标签
* 检测挑战:给定较长的视频,预测视频中存在的活动的标签和时间范围
......
# 递归神经网络
# 循环神经网络
In this chapter, we will present a number of recipes covering the following topics:
......@@ -11,7 +11,7 @@ In this chapter, we will present a number of recipes covering the following topi
# 介绍
在本章中,我们将讨论**递归神经网络****RNN** )如何在保持顺序顺序重要的领域中用于深度学习。 我们的注意力将主要集中在文本分析和**自然语言处理****NLP** )上,但我们还将看到用于预测比特币价值的序列示例。
在本章中,我们将讨论**循环神经网络****RNN**)如何在保持顺序顺序重要的领域中用于深度学习。 我们的注意力将主要集中在文本分析和**自然语言处理****NLP**)上,但我们还将看到用于预测比特币价值的序列示例。
通过采用基于时间序列的模型,可以描述许多实时情况。 例如,如果您考虑编写文档,则单词的顺序很重要,而当前单词肯定取决于先前的单词。 如果我们仍然专注于文本编写,很明显单词中的下一个字符取决于前一个字符(例如*快速棕色字符...* 很有可能下一个字母 将会是字母*或*),如下图所示。 关键思想是在给定当前上下文的情况下生成下一个字符的分布,然后从该分布中采样以生成下一个候选字符:
......@@ -47,7 +47,7 @@ An example of simple tanh cell
# 消失和爆炸梯度
训练 RNN 十分困难,因为存在两个稳定性问题。 由于反馈回路的缘故,梯度可能会迅速发散到无穷大,或者它可能会迅速发散到 0。在两种情况下,如下图所示,网络将停止学习任何有用的东西。 可以使用基于**梯度修剪**的相对简单的解决方案来解决爆炸梯度的问题。 梯度消失的问题更难解决,它涉及更复杂的 RNN 基本单元的定义,例如**长短期记忆** **LSTM****门控) 循环单元****GRU** )。 让我们首先讨论爆炸渐变和渐变裁剪:
训练 RNN 十分困难,因为存在两个稳定性问题。 由于反馈回路的缘故,梯度可能会迅速发散到无穷大,或者它可能会迅速发散到 0。在两种情况下,如下图所示,网络将停止学习任何有用的东西。 可以使用基于**梯度修剪**的相对简单的解决方案来解决爆炸梯度的问题。 梯度消失的问题更难解决,它涉及更复杂的 RNN 基本单元的定义,例如**长短期记忆****LSTM****门控) 循环单元****GRU**)。 让我们首先讨论爆炸渐变和渐变裁剪:
![](img/1e10fcdf-8db6-4e52-8f7f-d1398c54c634.png)
......@@ -75,7 +75,7 @@ LSTM 网络可以控制何时让输入进入神经元,何时记住在上一个
An example of an LSTM cell
首先,我们需要一个逻辑函数σ(请参见[第 2 章](../Text/02.html)*回归*)来计算介于 0 和 1 之间的值,并控制哪些信息流过 LSTM *门[* 。 请记住,逻辑函数是可微的,因此允许反向传播。 然后,我们需要一个运算符⊗,它采用两个相同维的矩阵并生成另一个矩阵,其中每个元素 *ij* 是原始两个矩阵的元素 *ij* 的乘积。 同样,我们需要一个运算符⊕,它采用两个相同维度的矩阵并生成另一个矩阵,其中每个元素 *ij* 是原始两个矩阵的元素 *ij* 之和。 使用这些基本块,我们考虑时间 i 处的输入 X <sub>i</sub> ,并将其与上一步中的输出 Y <sub>i-1</sub> 并置。
首先,我们需要一个逻辑函数σ(请参见第 2 章*回归*)来计算介于 0 和 1 之间的值,并控制哪些信息流过 LSTM *门[* 。 请记住,逻辑函数是可微的,因此允许反向传播。 然后,我们需要一个运算符⊗,它采用两个相同维的矩阵并生成另一个矩阵,其中每个元素 *ij* 是原始两个矩阵的元素 *ij* 的乘积。 同样,我们需要一个运算符⊕,它采用两个相同维度的矩阵并生成另一个矩阵,其中每个元素 *ij* 是原始两个矩阵的元素 *ij* 之和。 使用这些基本块,我们考虑时间 i 处的输入 X <sub>i</sub> ,并将其与上一步中的输出 Y <sub>i-1</sub> 并置。
方程 *f <sub>t</sub> =σ(W <sub>f</sub> 。[y <sub>i-1</sub> ,x <sub>t</sub> ] + b [HTG9 f* 实现了控制激活门 log 的逻辑回归,并用于确定应从*先前*候选值 C <sub>i-1</sub> 获取多少信息。 传递给下一个候选值 C <sub>i</sub> (此处 *W <sub>f</sub>**b <sub>f</sub>* 矩阵和用于 logistic 回归的偏差。)如果 logistic 输出为 1,则表示*不要忘记*先前的单元格状态 C <sub>i-1;</sub> 如果输出 0, 这将意味着*忘记*先前的单元状态 C <sub>i-1</sub> 。(0,1)中的任何数字都将表示要传递的信息量。
......@@ -89,7 +89,7 @@ An example of an LSTM cell
# 门控循环单元(GRU)和窥孔 LSTM
近年来提出了许多 LSTM 细胞的变体。 其中两个真的很受欢迎。 窥孔 LSTM 允许栅极层查看单元状态,如下图虚线所示,而**门控循环单元** **GRU** )合并了隐藏状态和单元状态 进入一个单一的信息渠道。
近年来提出了许多 LSTM 细胞的变体。 其中两个真的很受欢迎。 窥孔 LSTM 允许栅极层查看单元状态,如下图虚线所示,而**门控循环单元****GRU**)合并了隐藏状态和单元状态 进入一个单一的信息渠道。
同样,GRU 和 Peephole LSTM 都可以用作标准 RNN 单元的黑盒插件,而无需了解基础数学。 这两个单元都可用于解决梯度消失的问题,并可用于构建深度神经网络:
......@@ -244,7 +244,7 @@ crossent = tf.nn.sparse_softmax_cross_entropy_with_logits(
zip(clipped_gradients, params))
```
9. 现在,我们可以运行代码并了解不同的执行步骤。 首先,创建训练图。 然后,训练迭代开始。 用于评估的度量标准是**双语评估研究** **BLEU** )。 此度量标准是评估已从一种自然语言机器翻译成另一种自然语言的文本质量的标准。 质量被认为是机器与人工输出之间的对应关系。 如您所见,该值随时间增长:
9. 现在,我们可以运行代码并了解不同的执行步骤。 首先,创建训练图。 然后,训练迭代开始。 用于评估的度量标准是**双语评估研究****BLEU**)。 此度量标准是评估已从一种自然语言机器翻译成另一种自然语言的文本质量的标准。 质量被认为是机器与人工输出之间的对应关系。 如您所见,该值随时间增长:
```py
python -m nmt.nmt --src=vi --tgt=en --vocab_prefix=/tmp/nmt_data/vocab --train_prefix=/tmp/nmt_data/train --dev_prefix=/tmp/nmt_data/tst2012 --test_prefix=/tmp/nmt_data/tst2013 --out_dir=/tmp/nmt_model --num_train_steps=12000 --steps_per_stats=100 --num_layers=2 --num_units=128 --dropout=0.2 --metrics=bleu
......@@ -432,7 +432,7 @@ An example of BLEU metrics with attention in Tensorboard
值得记住的是 seq2seq 不仅可以用于机器翻译。 让我们看一些例子:
* Lukasz Kaiser 在*作为外语的语法*[https://arxiv.org/abs/1412.7449](https://arxiv.org/abs/1412.7449) )中,使用 seq2seq 模型来构建选区解析器。 选区分析树将文本分为多个子短语。 树中的非终结符是短语的类型,终结符是句子中的单词,并且边缘未标记。
* seq2seq 的另一个应用是 SyntaxNet,又名 Parsey McParserFace(语法分析器; [https://research.googleblog.com/2016/05/announcing-syntaxnet-worlds-most.html](https://research.googleblog.com/2016/05/announcing-syntaxnet-worlds-most.html) ),它是 许多 NLU 系统中的关键第一组件。 给定一个句子作为输入,它将使用描述单词的句法功能的**词性** **POS** )标签标记每个单词,并确定单词中句法之间的句法关系 句子,在依存关系分析树中表示。 这些句法关系与所讨论句子的潜在含义直接相关。
* seq2seq 的另一个应用是 SyntaxNet,又名 Parsey McParserFace(语法分析器; [https://research.googleblog.com/2016/05/announcing-syntaxnet-worlds-most.html](https://research.googleblog.com/2016/05/announcing-syntaxnet-worlds-most.html) ),它是 许多 NLU 系统中的关键第一组件。 给定一个句子作为输入,它将使用描述单词的句法功能的**词性****POS**)标签标记每个单词,并确定单词中句法之间的句法关系 句子,在依存关系分析树中表示。 这些句法关系与所讨论句子的潜在含义直接相关。
下图使我们对该概念有了一个很好的了解:
......@@ -612,7 +612,7 @@ And the provest and stand,
# 还有更多...
博客文章*递归神经网络的不合理有效性*( [http://karpathy.github.io/2015/05/21/rnn-effectiveness/](http://karpathy.github.io/2015/05/21/rnn-effectiveness/) )描述了一组引人入胜的示例 RNN 字符级语言模型,包括以下内容:
博客文章*循环神经网络的不合理有效性*( [http://karpathy.github.io/2015/05/21/rnn-effectiveness/](http://karpathy.github.io/2015/05/21/rnn-effectiveness/) )描述了一组引人入胜的示例 RNN 字符级语言模型,包括以下内容:
* 莎士比亚文字生成类似于此示例
* Wikipedia 文本生成类似于此示例,但是基于不同的训练文本
......
......@@ -21,7 +21,7 @@
# 主成分分析
**主成分分析** **PCA** )是用于降维的最流行的多元统计技术。 它分析了由几个因变量组成的训练数据,这些因变量通常是相互关联的,并以一组称为**主成分**的新正交变量的形式从训练数据中提取重要信息。 我们可以使用两种方法执行 PCA-**本征分解****奇异值分解****SVD** )。
**主成分分析****PCA**)是用于降维的最流行的多元统计技术。 它分析了由几个因变量组成的训练数据,这些因变量通常是相互关联的,并以一组称为**主成分**的新正交变量的形式从训练数据中提取重要信息。 我们可以使用两种方法执行 PCA-**本征分解****奇异值分解****SVD**)。
# 做好准备
......@@ -335,7 +335,7 @@ ScatterPlot(x[:,0], x[:,1], assignments, clusters)
# 这个怎么运作...
前面的配方使用 TensorFlow 的 k 均值聚类估计器将给定数据聚类为聚类。 在这里,由于我们知道集群的数量,我们决定保留`num_clusters=3`,但是在大多数情况下,如果使用未标记的数据,则永远无法确定存在多少集群。 可以使用弯头法确定最佳簇数。 该方法基于以下原则:我们应选择能减少**平方误差和** **SSE** )距离的簇数。 如果 *k* 是簇数,则随着 *k* 增加,SSE 减少,SSE = 0; 当 *k* 等于数据点数时,每个点都是其自己的簇。 我们想要一个 *k* 较低的值,以使 SSE 也较低。 在 TensorFlow 中,我们可以使用`KmeansClustering`类中定义的`score()`方法找到 SSE; 该方法将距离的总和返回到最近的聚类:
前面的配方使用 TensorFlow 的 k 均值聚类估计器将给定数据聚类为聚类。 在这里,由于我们知道集群的数量,我们决定保留`num_clusters=3`,但是在大多数情况下,如果使用未标记的数据,则永远无法确定存在多少集群。 可以使用弯头法确定最佳簇数。 该方法基于以下原则:我们应选择能减少**平方误差和****SSE**)距离的簇数。 如果 *k* 是簇数,则随着 *k* 增加,SSE 减少,SSE = 0; 当 *k* 等于数据点数时,每个点都是其自己的簇。 我们想要一个 *k* 较低的值,以使 SSE 也较低。 在 TensorFlow 中,我们可以使用`KmeansClustering`类中定义的`score()`方法找到 SSE; 该方法将距离的总和返回到最近的聚类:
```py
sum_distances = kmeans.score(input_fn=input_fn, steps=100)
......@@ -363,7 +363,7 @@ K 均值聚类非常流行,因为它快速,简单且健壮。 它还有一
# 自组织图
**自组织地图** **SOM** ),有时也称为 **Kohonen 网络****获胜者获得所有单位****WTU** ),是一种非常特殊的神经网络,受人脑的独特特征驱动。 在我们的大脑中,不同的感觉输入以拓扑有序的方式表示。 与其他神经网络不同,神经元并非都通过权重相互连接,而是会影响彼此的学习。 SOM 的最重要方面是神经元以拓扑方式表示学习的输入。
**自组织地图****SOM**),有时也称为 **Kohonen 网络****获胜者获得所有单位****WTU**),是一种非常特殊的神经网络,受人脑的独特特征驱动。 在我们的大脑中,不同的感觉输入以拓扑有序的方式表示。 与其他神经网络不同,神经元并非都通过权重相互连接,而是会影响彼此的学习。 SOM 的最重要方面是神经元以拓扑方式表示学习的输入。
在 SOM 中,神经元通常放置在(1D 或 2D)晶格的节点上。 更大的尺寸也是可能的,但实际上很少使用。 晶格中的每个神经元都通过权重矩阵连接到所有输入单元。 在这里,您可以看到一个具有 3 x 4(12 个神经元)和七个输入的 SOM。 为了清楚起见,仅显示将所有输入连接到一个神经元的权重向量。 在这种情况下,每个神经元将具有七个元素,从而形成大小为(12 x 7)的组合权重矩阵:
......@@ -611,7 +611,7 @@ SOM 在计算上很昂贵,因此对于非常大的数据集并没有真正的
# 受限玻尔兹曼机
**受限玻尔兹曼机** **RBM** )是两层神经网络,第一层称为**可见层**,第二层称为[HTG6 隐藏层。 它们被称为**浅层神经网络**,因为它们只有两层深。 它们最初是由 1986 年由保罗·斯莫伦斯基(Paul Smolensky)(他称其为 Harmony Networks <sup>[1]</sup> )提出的,后来由 Geoffrey Hinton 提出,于 2006 年提出了**对比发散****CD** )作为培训他们的方法。 可见层中的所有神经元都与隐藏层中的所有神经元相连,但是存在**限制**-同一层中没有神经元可以连接。 所有神经元本质上都是二进制的:
**受限玻尔兹曼机****RBM**)是两层神经网络,第一层称为**可见层**,第二层称为[HTG6 隐藏层。 它们被称为**浅层神经网络**,因为它们只有两层深。 它们最初是由 1986 年由保罗·斯莫伦斯基(Paul Smolensky)(他称其为 Harmony Networks <sup>[1]</sup> )提出的,后来由 Geoffrey Hinton 提出,于 2006 年提出了**对比发散****CD**)作为培训他们的方法。 可见层中的所有神经元都与隐藏层中的所有神经元相连,但是存在**限制**-同一层中没有神经元可以连接。 所有神经元本质上都是二进制的:
![](img/06c4c832-db20-40c8-bf83-39d907a5a660.png)
......
此差异已折叠。
# 强化学习
本章介绍**强化学习** **RL** )-学习最少,但最有前途的学习范例。 本章包括以下主题:
本章介绍**强化学习****RL**)-学习最少,但最有前途的学习范例。 本章包括以下主题:
* 学习 OpenAI 体育馆
* 实现神经网络代理来扮演吃豆人
......@@ -25,7 +25,7 @@ AlphaGo 在基于 RL 算法的深度神经网络与最先进的树搜索算法
因此,出现的第一个问题是什么是 RL,它与我们在前几章中探讨的有监督和无监督学习有何不同?
拥有宠物的任何人都知道,训练宠物的最佳策略是奖励其期望的行为,并惩罚其不良行为。 RL 也称为与批评者进行的**学习,它是一种学习范例,其中代理以相同的方式进行学习。 这里的代理对应我们的网络(程序); 它可以执行一组**动作**(****),这会导致环境的**状态**( **s** )发生变化。 ,则代理会感知其是否获得奖励或惩罚。**
拥有宠物的任何人都知道,训练宠物的最佳策略是奖励其期望的行为,并惩罚其不良行为。 RL 也称为与批评者进行的**学习,它是一种学习范例,其中代理以相同的方式进行学习。 这里的代理对应我们的网络(程序); 它可以执行一组**动作**(****),这会导致环境的**状态**(**s**)发生变化。 ,则代理会感知其是否获得奖励或惩罚。**
例如,在狗的情况下,狗是我们的代理人,狗的自愿肌肉运动是动作,地面是环境。 狗给我们骨头作为奖励,从而感觉到我们对其动作的反应:
......@@ -497,7 +497,7 @@ if __name__ == '__main__':
# 使用 Deep Q Networks 的 Atari 游戏
**深层 Q 网络** **DQN** )是 Q 学习与**卷积神经网络****CNN** )的结合。 其他在 2013 年( [https://arxiv.org/pdf/1312.5602.pdf](https://arxiv.org/pdf/1312.5602.pdf) )。 CNN 网络具有提取空间信息的能力,因此能够从原始像素数据中学习成功的控制策略。 我们已经在[第 4 章](../Text/04.html)*卷积神经网络*中使用了 CNN,因此我们直接从这里开始。
**深层 Q 网络****DQN**)是 Q 学习与**卷积神经网络****CNN**)的结合。 其他在 2013 年( [https://arxiv.org/pdf/1312.5602.pdf](https://arxiv.org/pdf/1312.5602.pdf) )。 CNN 网络具有提取空间信息的能力,因此能够从原始像素数据中学习成功的控制策略。 我们已经在第 4 章*卷积神经网络*中使用了 CNN,因此我们直接从这里开始。
This recipe is based on the original DQN paper, Playing Atari with Deep Reinforcement Learning by DeepMind. In the paper, they used a concept called **experience replay**, which involved randomly sampling the previous game moves (state, action reward, next state).
......
......@@ -31,7 +31,7 @@
# 做好准备
我们将使用 Android Studio,这是适用于 Google Android 操作系统的官方**集成开发环境** **IDE** )。
我们将使用 Android Studio,这是适用于 Google Android 操作系统的官方**集成开发环境****IDE**)。
# 怎么做...
......
......@@ -5,12 +5,12 @@
* 学习使用 Simple GAN 伪造 MNIST 图像
* 学习使用 DCGAN 伪造 MNIST 图像
* 学习使用 DCGAN 伪造名人面孔和其他数据集
* 实现变体自编码器
* 实现变体自编码器
* 通过 Capsule Networks 学习击败 MNIST 的最新结果
# 介绍
在本章中,我们将讨论如何将**生成对抗网络** **GAN** )用于深度学习领域,其中关键方法是通过同时训练鉴别器来挑战图像来训练图像生成器 后者用于改进。 可以将相同的方法应用于不同于 Image 的域。 另外,我们将讨论变分自动编码器。
在本章中,我们将讨论如何将**生成对抗网络****GAN**)用于深度学习领域,其中关键方法是通过同时训练鉴别器来挑战图像来训练图像生成器 后者用于改进。 可以将相同的方法应用于不同于 Image 的域。 另外,我们将讨论变分自编码器。
GAN 已被定义为*,这是 ML*[https://www.quora.com/What-are-some-recent-and-potentially-upcoming- 深度学习之父之一 Yann LeCun 的“深度学习突破](https://www.quora.com/What-are-some-recent-and-potentially-upcoming-breakthroughs-in-deep-learning)”)。 GAN 能够学习如何再现看起来真实的合成数据。 例如,计算机可以学习如何绘制和创建逼真的图像。 这个想法最初是由与蒙特利尔大学 Google Brain 合作的 Ian Goodfellow 提出的,最近由 OpenAI( [https://openai.com/](https://openai.com/) )提出。
......@@ -601,9 +601,9 @@ Example of forged celebrities with a DCGAN
内容感知填充是摄影师使用的一种工具,用于填充不需要的或丢失的图像部分。 Raymond A. Yeh,Chen Chen,Teck Yian Lim,Alexander G. Schwing,Mark Hasegawa--的论文 [*具有感知和上下文损失的语义图像修复*](https://arxiv.org/abs/1607.07539) *和* 约翰逊(Minh N.)的约翰逊(Johnson),2016 年使用 DCGAN 进行图像完成,并学习如何填充部分图像。
# 实现变体自编码器
# 实现变体自编码器
**变分自编码器** **VAE** )是神经网络和贝叶斯推理两者的最佳结合。 它们是最酷的神经网络,并已成为无监督学习的流行方法之一。 它们是自动编码器。 与传统的编码器和自动编码器的解码器网络(请参阅第 8 章*自动编码器*)一起,它们还具有其他随机层。 编码器网络之后的随机层使用高斯分布对数据进行采样,解码器网络之后的随机层使用伯努利分布对数据进行采样。 像 GAN 一样,可以使用变分自动编码器根据经过训练的分布来生成图像和图形。 VAE 允许人们设置潜在的复杂先验,从而学习强大的潜在表示。
**变分自编码器****VAE**)是神经网络和贝叶斯推理两者的最佳结合。 它们是最酷的神经网络,并已成为无监督学习的流行方法之一。 它们是自编码器。 与传统的编码器和自编码器的解码器网络(请参阅第 8 章*自编码器*)一起,它们还具有其他随机层。 编码器网络之后的随机层使用高斯分布对数据进行采样,解码器网络之后的随机层使用伯努利分布对数据进行采样。 像 GAN 一样,可以使用变分自编码器根据经过训练的分布来生成图像和图形。 VAE 允许人们设置潜在的复杂先验,从而学习强大的潜在表示。
下图描述了 VAE。 编码器网络*qᵩ(z | x)*逼近真实但棘手的后验分布 *p(z | x)*,其中 *x* 是 VAE 的输入, *z* 是潜在表示。 解码器网络 *p <sub>ϴ</sub> (x | z* )将 *d* 维潜在变量(也称为潜在空间)作为其输入,并根据 与 *P(x)*相同的分布。 从 z | x〜![](img/054d905b-e2ab-43ae-9ca0-4d6bc08481a9.png)中采样潜在表示 *z* ,解码器网络的输出从 x | z〜![](img/7eab5955-16aa-4182-b62e-7278f7600221.png)中采样 x | z:
......@@ -865,7 +865,7 @@ plt.tight_layout()
```
以下是自编码器生成的 MNIST 类字符的范围:
以下是自编码器生成的 MNIST 类字符的范围:
![](img/a797224e-349b-4e69-864c-5beae8fe0092.png)
......
......@@ -18,7 +18,7 @@
我强烈建议读者看一看大型分布式深度网络 Jeffrey Dean,Greg S.Corrado,Rajat Monga,Kai Chen,Matthieu Devin,Quoc V.Le,Mark Z.Mao,Marc'Aurelio Ranzato,Andrew Senior ,Paul Tucker,Ke Yang 和 Andrew Y. Ng。 NIPS,2012 年, [https://research.google.com/archive/large_deep_networks_nips2012.html](https://research.google.com/archive/large_deep_networks_nips2012.html)
本文的一项关键结果是证明可以运行分布式**随机梯度下降** **SDG** ),其中多个节点在数据碎片上并行工作,并且独立且异步地更新 通过将更新发送到参数服务器来实现渐变。 引用论文摘要:
本文的一项关键结果是证明可以运行分布式**随机梯度下降****SDG**),其中多个节点在数据碎片上并行工作,并且独立且异步地更新 通过将更新发送到参数服务器来实现渐变。 引用论文摘要:
*Our experiments reveal several surprising results about large-scale nonconvex optimization. Firstly, asynchronous SGD, rarely applied to nonconvex problems, works very well for training deep networks, particularly when combined with Adagrad adaptive learning rates.*
......
......@@ -6,15 +6,15 @@
# 带有递归网络和强化学习的元学习
解决此问题的关键思想是拥有一个控制器网络,该控制器网络会在给定特定网络输入的情况下,以概率 *p* 提出*子*模型架构。 对孩子进行训练和评估,以解决要解决的特定任务(例如,孩子获得的准确度 *R* )。 该评估 *R* 被传递回控制器,该控制器进而使用 R 来改善下一个候选架构。 在此框架下,可以将候选儿童到控制器的反馈建模为计算 *p* 的梯度的任务,然后通过 *R* 缩放此梯度。 控制器可以实现为递归神经网络(请参见下图)。 这样做,控制器将倾向于在迭代之后获得更好的 *R* 的体系结构候选区域,并倾向于给得分不那么高的候选区域分配较低的概率。
解决此问题的关键思想是拥有一个控制器网络,该控制器网络会在给定特定网络输入的情况下,以概率 *p* 提出*子*模型架构。 对孩子进行训练和评估,以解决要解决的特定任务(例如,孩子获得的准确度 *R* )。 该评估 *R* 被传递回控制器,该控制器进而使用 R 来改善下一个候选架构。 在此框架下,可以将候选儿童到控制器的反馈建模为计算 *p* 的梯度的任务,然后通过 *R* 缩放此梯度。 控制器可以实现为循环神经网络(请参见下图)。 这样做,控制器将倾向于在迭代之后获得更好的 *R* 的体系结构候选区域,并倾向于给得分不那么高的候选区域分配较低的概率。
![](img/30ccd28f-f08f-4323-aae4-313b11ba8ddb.png)
例如,控制器递归神经网络可以对卷积网络进行采样。 控制器可以预测许多超参数,例如滤镜高度,滤镜宽度,步幅高度,步幅宽度和一层滤镜的数量,然后可以重复。 每个预测可以由 softmax 分类器执行,然后输入到下一个 RNN 时间步中。 以下图片来自*带增强学习的神经体系结构搜索*,Barret Zoph,Quoc V. Le, [https://arxiv.org/abs/1611.01578](https://arxiv.org/abs/1611.01578)
例如,控制器循环神经网络可以对卷积网络进行采样。 控制器可以预测许多超参数,例如滤镜高度,滤镜宽度,步幅高度,步幅宽度和一层滤镜的数量,然后可以重复。 每个预测可以由 softmax 分类器执行,然后输入到下一个 RNN 时间步中。 以下图片来自*带增强学习的神经体系结构搜索*,Barret Zoph,Quoc V. Le, [https://arxiv.org/abs/1611.01578](https://arxiv.org/abs/1611.01578)
![](img/9986f40c-9051-4483-959c-00a067ed0e2a.png)
预测超参数是不够的,因为最好定义一组动作以在网络中创建新层。 这特别困难,因为描述新层的奖励函数极有可能是不可区分的,因此无法通过标准技术(例如 SGD)对其进行优化。 解决方案来自强化学习,它包括采用类似于我们的[第 9 章](../Text/09.html)*强化学习*中所述的策略梯度网络。
预测超参数是不够的,因为最好定义一组动作以在网络中创建新层。 这特别困难,因为描述新层的奖励函数极有可能是不可区分的,因此无法通过标准技术(例如 SGD)对其进行优化。 解决方案来自强化学习,它包括采用类似于我们的第 9 章*强化学习*中所述的策略梯度网络。
除此之外,并行性可用于优化控制器 RNN 的参数。 Quoc Le&Barret Zoph 建议采用参数服务器方案,其中我们有一个 S 碎片的参数服务器,用于存储 K 个控制器副本的共享参数。 每个控制器副本都采样了如下图所示的并行训练的不同子架构,如下图所示,取自*带增强学习的神经架构搜索*,Barret Zoph,Quoc V. Le, [https:// arxiv.org/abs/1611.01578](https://arxiv.org/abs/1611.01578)
......@@ -24,7 +24,7 @@ Quoc 和 Barret 将 AutoML 技术用于神经体系结构搜索应用于 Penn Tr
# 元学习块
*用于可伸缩图像识别的学习可传输体系结构*中,Barret Zoph,Vijay Vasudevan,Jonathon Shlens,Quoc V. Le,2017 [https://arxiv.org/abs/1707.07012](https://arxiv.org/abs/1707.07012) 。 建议在小型数据集上学习建筑构造块,然后将其传输到大型数据集。 作者建议在 CIFAR-10 数据集上搜索最佳的卷积层(或单元),然后通过堆叠该单元的更多副本(每个都有其自己的参数),将此学习到的单元应用于 ImageNet 数据集。 准确地说,所有卷积网络都是由结构相同但权重不同的卷积层(或单元)组成的。 因此,将搜索最佳卷积体系结构简化为搜索最佳单元结构,这样可以更快地将其推广到其他问题。 尽管无法在 ImageNet 上直接学习该单元,但是在已发表的工作中,由学得最好的单元构成的体系结构可实现 ImageNet 的最新精度为 82.7%top-1 和 96.2%top-5。 该模型的 top-1 准确性比人类发明的最佳体系结构高 1.2%,而 FLOPS 则减少了 90 亿个,与之前的最新模型相比降低了 28%。 还需要注意的重要一点是,使用 RNN + RL(递归神经网络+强化学习)学习的模型正在击败随机搜索(RL)代表的基线,如本文中所取的图所示。 在 RL 与 RS 中确定的前 5 名和前 25 名模型的平均表现中,RL 始终是赢家:
*用于可伸缩图像识别的学习可传输体系结构*中,Barret Zoph,Vijay Vasudevan,Jonathon Shlens,Quoc V. Le,2017 [https://arxiv.org/abs/1707.07012](https://arxiv.org/abs/1707.07012) 。 建议在小型数据集上学习建筑构造块,然后将其传输到大型数据集。 作者建议在 CIFAR-10 数据集上搜索最佳的卷积层(或单元),然后通过堆叠该单元的更多副本(每个都有其自己的参数),将此学习到的单元应用于 ImageNet 数据集。 准确地说,所有卷积网络都是由结构相同但权重不同的卷积层(或单元)组成的。 因此,将搜索最佳卷积体系结构简化为搜索最佳单元结构,这样可以更快地将其推广到其他问题。 尽管无法在 ImageNet 上直接学习该单元,但是在已发表的工作中,由学得最好的单元构成的体系结构可实现 ImageNet 的最新精度为 82.7%top-1 和 96.2%top-5。 该模型的 top-1 准确性比人类发明的最佳体系结构高 1.2%,而 FLOPS 则减少了 90 亿个,与之前的最新模型相比降低了 28%。 还需要注意的重要一点是,使用 RNN + RL(循环神经网络+强化学习)学习的模型正在击败随机搜索(RL)代表的基线,如本文中所取的图所示。 在 RL 与 RS 中确定的前 5 名和前 25 名模型的平均表现中,RL 始终是赢家:
![](img/c806db28-97c3-409d-8877-d86502c86e12.png)
......
......@@ -4,7 +4,7 @@ Google 服务(例如 Google 搜索(RankBrain),街景,Google 照片和
您可能在想什么是 TPU,这些服务有什么好处? 所有这些服务都在后台使用最新的机器学习算法,并且这些算法涉及大量计算。 TPU 有助于加速所涉及的神经网络计算。 甚至 AlphaGo,一种在 Go 游戏中击败 Lee Sedol 的深度学习程序,都由 TPU 推动。 因此,让我们看看 TPU 到底是什么。
TPU 是 Google 专门为机器学习而定制的定制专用集成电路( **ASIC** ),是针对 Tensorflow 量身定制的。 它基于 28 纳米工艺构建,运行频率为 700 MHz,运行时消耗 40 W 的能量。 它包装为外部加速卡,可以插入现有的 SATA 硬盘插槽中。 TPU 通过 PCIe Gen 3×16 总线连接到主机 CPU,该总线提供 12.5 GB / s 的有效带宽。
TPU 是 Google 专门为机器学习而定制的定制专用集成电路(**ASIC**),是针对 Tensorflow 量身定制的。 它基于 28 纳米工艺构建,运行频率为 700 MHz,运行时消耗 40 W 的能量。 它包装为外部加速卡,可以插入现有的 SATA 硬盘插槽中。 TPU 通过 PCIe Gen 3×16 总线连接到主机 CPU,该总线提供 12.5 GB / s 的有效带宽。
到目前为止,第一代 TPU 的目标是推理,即使用已经训练好的模型。 DNN 的训练通常需要更多时间,但仍在 CPU 和 GPU 上进行。 在 2017 年 5 月的博客文章[(https://www.blog.google/topics/google-cloud/google-cloud-offer-tpus-machine-learning/](https://www.blog.google/topics/google-cloud/google-cloud-offer-tpus-machine-learning/) )中宣布的第二代 TPU 都可以 训练和推断机器学习模型。
......@@ -14,7 +14,7 @@ TPU 是 Google 专门为机器学习而定制的定制专用集成电路( **AS
前两个成分是矩阵乘法的一部分:权重矩阵 ***W*** 需要与输入矩阵 ***X*** 相乘 ***W <sup>T</sup> X*** ; 矩阵乘法在 CPU 上的计算量很大,尽管 GPU 使操作并行化,但仍有改进的余地。
TPU 具有 65,536 个 8 位整数矩阵乘法器单元( **MXU** ),峰值吞吐量为 92 TOPS。 GPU 和 TPU 乘法之间的主要区别在于 GPU 包含浮点乘法器,而 TPU 包含 8 位整数乘法器。 TPU 还包含一个统一缓冲区( **UB** ),用作寄存器的 24 MB SRAM 和一个包含硬接线激活功能的激活单元( **AU** )。
TPU 具有 65,536 个 8 位整数矩阵乘法器单元(**MXU**),峰值吞吐量为 92 TOPS。 GPU 和 TPU 乘法之间的主要区别在于 GPU 包含浮点乘法器,而 TPU 包含 8 位整数乘法器。 TPU 还包含一个统一缓冲区(**UB**),用作寄存器的 24 MB SRAM 和一个包含硬接线激活功能的激活单元(**AU**)。
MXU 是使用脉动阵列架构实现的。 它包含一个阵列算术逻辑单元(ALU),该阵列连接到网状拓扑中的少量最近邻居。 每个数据值仅读取一次,但在流过 ALU 数组时会多次用于不同的操作,而无需将其存储回寄存器。 TPU 中的 ALU 仅以固定模式执行乘法和加法。 MXU 已针对矩阵乘法进行了优化,不适用于通用计算。
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册