提交 844ab735 编写于 作者: W wizardforcel

2020-08-08 09:58:27

上级 66b5a9d4
# 前言
在本书中,您将学习如何有效地使用 TensorFlow,这是 Google 的深度学习开源框架。 您将实现不同的深度学习网络,例如**卷积神经网络****CNN** s,**递归神经网络****RNN** s),**深度 Q 学习网络****DQN** )和**生成对抗网络****GAN** ),易于遵循独立的配方。 您将学习如何使用 TensorFlow 将 Keras 用作后端。
您将了解如何实现不同的深度神经体系结构以执行工作中的复杂任务。 您将在一些常用数据集(例如 MNIST,CIFAR-10,Youtube8m 等)上学习不同 DNN 的性能。 您不仅将了解 TensorFlow 支持的不同移动和嵌入式平台,还将了解如何为深度学习应用程序设置云平台。 简要了解 TPU 架构以及它们将如何影响 DNN 的未来。
到本书结尾,您将成为在不断增长的实际应用和研究领域中实施深度学习技术的专家,这些领域包括增强学习,GAN,自动编码器等。
# 本书涵盖的内容
*,TensorFlow-简介*讨论了 Google 的开源框架 TensorFlow,以及为什么它对深度学习很有用。 我们将讨论如何在 MAC,Windows 和 Ubuntu 上为 CPU 和 GPU 安装 TensorFlow。 我们还将讨论整本书中将使用的其他 python 软件包。 我们将解释 TensorFlow 代码的两个组成部分,图形的定义及其执行。 我们将学习使用 TensorBoard 查看图结构。 我们将了解 TensorFlow 常量,变量和占位符之间的区别。 我们还将品尝 TensorFlow 估算器。
*,回归,*讨论了回归及其应用。 我们将讨论回归所涉及的概念,了解回归与聚类和分类的不同之处。 我们将学习可能的不同类型的损失函数以及如何在 Tensorflow 中实现它们。 我们学习如何实现 L1 和 L2 正则化。 我们将讨论梯度下降算法,学习如何优化它并在 Tensorflow 中实现它。 我们将简要了解交叉熵函数及其实现。
*,神经网络-感知器*,涵盖了人工神经网络,并解释了为什么它可以完成 DNN 最近声称的出色任务。 我们将学习激活功能的不同选择。 我们将使用所有这些来构建一个简单的感知器,并将其用于功能建模。 我们将在培训之前了解数据的正则化。 我们还将学习逐步构建多层感知器(MLP)。 我们将看到 TensorFlow 的自动区分器如何使我们的工作更轻松。
*,TensorFlow-卷积神经网络*,讨论了卷积的过程及其如何提取特征。 我们将学习 CNN 的三个重要层:卷积层,池化层和完全连接层。 我们还将学习辍学,如何提高性能以及不同的 CNN 架构(例如 LeNET 和 GoogleNET)。
*,即 CNN 的运作*,涵盖了 CNN 的一些令人赞叹的成功案例,例如面部识别。 我们将编写一个使用 CNN 进行情感分析的方法。 我们将讨论 CNN 的预调整,并学习如何实施迁移学习。 我们将学习如何使用 VGG16 进行迁移学习。 我们将使用 VGGNet,ResNet,Inception 和 Xception 学习图像的分类。 我们将使用膨胀的 ConvNet,Wavenet 和 Nsynth 生成音乐。 我们还将学习如何进行 Visual Q &A。我们将学习如何对视频进行分类。
*,递归神经网络*讨论了递归神经网络。 我们将学习 RNN 的基本单元 RNN 单元。 我们将学习单词嵌入和时间排序。 我们将简要讨论 LSTM 网络。 我们将学习 seq2seq RNN。 我们将学习如何将 RNN 应用于机器翻译,生成文本和预测未来价值
*,无监督学习*,讲授无监督学习范例。 我们将学习聚类和降维。 我们将学习诸如主成分分析(PCA)之类的技术,并了解如何将其用于降维。 我们将学习 k 均值聚类。 我们将了解地形图的概念,并学习如何训练自组织图。 我们将学习受限玻尔兹曼机(RBM)。 我们将讨论 RBM 的体系结构和培训。 我们将学习如何堆叠 RBM 来构成深度信念网络,并且将学习如何对其进行训练。 我们将使用预训练和微调进行情绪检测的概念来训练 DBN。
*,即自动编码器*,使自动编码器神秘化。 我们将学习自动编码器及其应用。 我们将讨论可以使用自动编码器的各种实际示例。 我们将讨论编码和后续重构的过程。 我们将学习重建误差。 我们将学习稀疏自动编码器,即 KL 散度的概念。 我们将学习去噪自动编码器,并在给定嘈杂图像的情况下使用它们来重建清晰图像。 我们将学习如何构建卷积自动编码器和堆叠式自动编码器。
*,强化学习*,涵盖了不同的强化学习算法。 我们将学习 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 图。
*[第 11 章](../Text/11.html),TensorFlow –生成对抗网络(GAN),变体自动编码器和胶囊网络,*从生成对抗网络及其相对于其他 DNN 的优势开始。 我们探索了不同的预测模型。 我们了解 GAN 的动机及其直观工作。 我们了解基本的 GAN 架构。 我们将探索 GAN 的一些非常酷的应用程序。 我们将学习另一种生成网络,即变分自动编码器。 最后,我们将了解最近提出的胶囊网络
*[第 12 章](../Text/12.html),* *分布式 TensorFlow 和云深度学习*,介绍了云环境,泊坞窗,容器以及如何使用它们。 *我们将学习如何使用具有多个 GPU 和多个服务器的分布式 Tensorflow。 我们将学习如何设置 AWS 进行深度学习。* 我们将学习如何为深度学习应用程序设置 Google 云。 我们将学习如何为深度学习应用程序设置 Microsoft Azure 云。 我们了解其他可用的云服务
[附录 A](../Text/13.html)*通过 AutoML 学习(元学习)*,简要讨论了 AutoML 和暹罗网络。
[附录 B](../Text/14.html)*TensorFlow 处理单元,*涵盖了 Tensor 处理单元,其基本架构以及它将如何影响 DNN 的未来。
# 这本书需要什么
对于这本书,您将需要 Python 版本 3.5( [https://www.continuum.io/downloads](https://www.continuum.io/downloads) )和 TensorFlow( [www.tensorflow.org](http://www.tensorflow.org) )。 建议使用以下硬件规格:
* CPU 架构:x86_64
* 系统内存:8-32 GB
* CPU:4-8 核
* GPU :(可选,最低 NVDIA®GTX 650)
# 这本书是给谁的
本书面向希望定期执行机器学习任务的数据科学家,机器学习从业人员和深度学习爱好者。 稍微熟悉深度神经网络并希望获得与 CNN 和 RNN 一起工作的专业知识的人会发现这本书很有用。
# 栏目
在本书中,您会发现经常出现的几个标题(准备工作,如何做……,如何工作……,还有更多……以及另请参见)。 为了给出有关如何完成配方的明确说明,我们使用以下部分。
# 做好准备
本节将告诉您配方中的预期内容,并介绍如何设置配方所需的任何软件或任何初步设置。
# 怎么做…
本节包含遵循食谱所需的步骤。
# 这个怎么运作…
本节通常包括对上一节中发生的情况的详细说明。
# 还有更多…
本节包含有关配方的其他信息,以使读者对配方有更多的了解。
# 也可以看看
本节提供了指向该食谱其他有用信息的有用链接。
# 约定
在本书中,您将找到许多可以区分不同类型信息的文本样式。 以下是这些样式的一些示例,并解释了其含义。 文本,数据库表名称,文件夹名称,文件名,文件扩展名,路径名,虚拟 URL,用户输入和 Twitter 句柄中的代码字显示如下:“在数据库中为 JIRA 创建新用户并授予该用户访问 我们刚刚使用以下命令创建了`jiradb`数据库:“
代码块设置如下:
```py
<Contextpath="/jira"docBase="${catalina.home}
/atlassian- jira" reloadable="false" useHttpOnly="true">
```
任何命令行输入或输出的编写方式如下:
```py
mysql -u root -p
```
**新术语****重要词**以粗体显示。 您在屏幕上看到的单词,例如在菜单或对话框中,将以如下形式出现:“从“管理”面板中选择“系统信息”。
Warnings or important notes appear like this.Tips and tricks appear like this.
# 读者反馈
始终欢迎读者的反馈。 让我们知道您对这本书的看法-您喜欢或不喜欢的书。 读者反馈对我们很重要,因为它可以帮助我们开发出您真正能充分利用的标题。 要向我们发送一般反馈,只需发送电子邮件`feedback@packtpub.com`,然后在您的邮件主题中提及该书的标题。 如果您有专业知识的主题,并且对写作或撰写书籍感兴趣,请参阅 [www.packtpub.com/authors](http://www.packtpub.com/authors) 上的作者指南。
# 客户支持
既然您是 Packt 书的骄傲拥有者,我们可以通过很多方法来帮助您从购买中获得最大收益。
# 下载示例代码
您可以从 [http://www.packtpub.com](http://www.packtpub.com) 的帐户中下载本书的示例代码文件。 如果您在其他地方购买了此书,则可以访问 [http://www.packtpub.com/support](http://www.packtpub.com/support) 并注册以将文件直接通过电子邮件发送给您。 您可以按照以下步骤下载代码文件:
1. 使用您的电子邮件地址和密码登录或注册到我们的网站。
2. 将鼠标指针悬停在顶部的“支持”选项卡上。
3. 单击代码下载和勘误。
4. 在搜索框中输入书籍的名称。
5. 选择您要下载其代码文件的书。
6. 从购买本书的下拉菜单中选择。
7. 单击代码下载。
您还可以通过在 Packt Publishing 网站上的图书网页上单击“代码文件”按钮来下载代码文件。 通过在“搜索”框中输入书名可以访问该页面。 请注意,您需要登录到 Packt 帐户。 下载文件后,请确保使用以下最新版本解压缩或解压缩文件夹:
* Windows 的 WinRAR / 7-Zip
* 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/)** 提供了丰富的书籍和视频目录中的其他代码包。 去看一下!
# 勘误
尽管我们已尽一切努力确保内容的准确性,但还是会发生错误。 如果您发现我们的其中一本书中有错误-可能是文字或代码中的错误-请向我们报告,我们将不胜感激。 这样,您可以使其他读者免于沮丧,并帮助我们改进本书的后续版本。 如果您发现任何勘误,请访问 [http://www.packtpub.com/submit-errata](http://www.packtpub.com/submit-errata) 进行报告,选择您的图书,点击“勘误提交表格”链接,然后输入勘误的详细信息 。 一旦您的勘误得到验证,您的提交将被接受,勘误将被上载到我们的网站或添加到该标题的勘误部分下的任何现有勘误列表中。 要查看以前提交的勘误,请转到 [https://www.packtpub.com/books/content/support](https://www.packtpub.com/books/content/support) ,然后在搜索字段中输入书籍的名称。 所需信息将出现在“勘误”部分下。
# 海盗行为
互联网上版权材料的盗版在所有媒体中都是一个持续存在的问题。 在 Packt,我们非常重视版权和许可的保护。 如果您在 Internet 上以任何形式发现我们的作品的任何非法副本,请立即向我们提供位置地址或网站名称,以便我们寻求补救。 请通过`copyright@packtpub.com`与我们联系,并提供指向可疑盗版材料的链接。 感谢您在保护我们的作者方面的帮助以及我们为您带来有价值的内容的能力。
# 问题
如果您对本书的任何方面都有疑问,可以通过`questions@packtpub.com`与我们联系,我们将尽力解决该问题。
\ No newline at end of file
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
# 学习使用 AutoML 学习(元学习)
深度学习的成功极大地促进了特征工程的工作。 确实,传统的机器学习很大程度上取决于对正确的功能集的选择,而且与选择特定的学习算法相比,这一步骤通常更为重要。 深度学习改变了这种情况。 创建正确的模型仍然非常重要,但是现今的网络对特定功能集的选择已不那么敏感,并且能够自动选择真正重要的功能。
取而代之的是,深度学习的引入使人们更加关注正确的神经网络架构的选择。 这意味着研究人员的兴趣正逐渐从功能工程转向网络工程**。 AutoML****元学习**)是一个新兴的研究主题,旨在针对给定的学习任务自动选择最有效的神经网络。 换句话说,AutoML 代表*或学习如何有效学习* 的一组方法。 考虑例如机器翻译,图像识别或游戏的任务。 通常,模型是由工程师,数据科学家和领域专家组成的团队手动设计的。 如果您认为一个典型的 10 层网络可以具有约 10 个 <sup>10</sup> 候选网络,那么您就会知道该过程可能很昂贵,容易出错并且最终不是最佳选择。
# 带有递归网络和强化学习的元学习
解决此问题的关键思想是拥有一个控制器网络,该控制器网络会在给定特定网络输入的情况下,以概率 *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)
![](img/9986f40c-9051-4483-959c-00a067ed0e2a.png)
预测超参数是不够的,因为最好定义一组动作以在网络中创建新层。 这特别困难,因为描述新层的奖励函数极有可能是不可区分的,因此无法通过标准技术(例如 SGD)对其进行优化。 解决方案来自强化学习,它包括采用类似于我们的[第 9 章](../Text/09.html)*强化学习*中所述的策略梯度网络。
除此之外,并行性可用于优化控制器 RNN 的参数。 Quoc Le&Barret Zoph 建议采用参数服务器方案,其中我们有一个 S 碎片的参数服务器,用于存储 K 个控制器副本的共享参数。 每个控制器副本都采样了如下图所示的并行训练的不同子架构,如下图所示,取自*带增强学习的神经架构搜索*,Barret Zoph,Quoc V. Le, [https:// arxiv.org/abs/1611.01578](https://arxiv.org/abs/1611.01578)
![](img/23d54b43-728d-4230-b0ab-4d219de2c679.png)
Quoc 和 Barret 将 AutoML 技术用于神经体系结构搜索应用于 Penn Treebank 数据集( [https://en.wikipedia.org/wiki/Treebank](https://en.wikipedia.org/wiki/Treebank) ),这是语言建模的著名基准。 他们的结果改进了目前被认为是最先进的手动设计网络。 特别是,他们在 Penn Treebank 上实现了 62.4 的测试集困惑,这比以前的最新模型好 3.6 困惑。 同样,在 CIFAR-10 数据集( [https://www.cs.toronto.edu/~kriz/cifar.html](https://www.cs.toronto.edu/~kriz/cifar.html) )上,该方法可以设计一种新颖的网络架构,与 测试集准确性方面最好的人类发明架构。 提出的 CIFAR-10 模型实现了 3.65 的测试错误率,比使用类似架构方案的最新技术模型好 0.09%,并且快 1.05 倍。
# 元学习块
*用于可伸缩图像识别的学习可传输体系结构*中,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)
# 元学习新任务
可以对元学习系统进行培训以完成大量任务,然后对其元学习新任务的能力进行测试。 这种元学习的一个著名例子是在高级 CNN 章节中讨论的所谓转移学习,其中网络可以从相对较小的数据集中成功学习基于图像的新任务。 但是,对于诸如语音,语言和文本之类的非视觉领域,没有类似的预训练方案。
*用于快速适应深度网络的模型不可知元学习*,切尔西·芬恩(Chelsea Finn),彼得·阿比尔(Siety Levine),2017 年, [https://arxiv.org/abs/1703.03400](https://arxiv.org/abs/1703.03400) 提出了一个模型 -不可知论方法的名称为 MAML,它与经过梯度下降训练的任何模型兼容,并且适用于各种不同的学习问题,包括分类,回归和强化学习。 元学习的目标是针对各种学习任务训练模型,以便仅使用少量训练样本即可解决新的学习任务。 元学习器旨在找到一种可以快速(以很少的步骤)并有效地(仅使用几个示例)快速适应各种问题的初始化。 用参数为θ的参数化函数 f <sub>θ</sub>表示的模型。 当适应新任务 T <sub>i</sub> 时,模型参数θ变为θ <sub>i</sub> <sup></sup>。 在 MAML 中,使用对任务 T <sub>i</sub> 的一个或多个梯度下降更新来计算更新的参数向量θ <sub>i</sub> <sup>'</sup>
例如,当使用一个梯度更新时,θ <sub>i</sub> <sup></sup> =θ-α∇<sub>θ</sub> L <sub>Ti</sub> (f <sub>θ</sub> )其中 L <sub>Ti</sub> 是任务 T 的损失函数,而α是元学习参数。 该图报告了 MAML 算法:
![](img/30503d87-ad59-4ec7-8e66-2918624faaf7.png)
MAML 能够在流行的少拍图像分类基准上大大胜过许多现有方法。 旨在从一个或几个概念中学习新概念的镜头很少有挑战性。 例如,*通过概率性程序归纳*进行人级概念学习,Brenden M. Lake,Ruslan Salakhutdinov,Joshua B. Tenenbaum,2015 年, [https://www.cs.cmu.edu/ 〜rsalakhu / papers / LakeEtAl2015Science.pdf](https://www.cs.cmu.edu/~rsalakhu/papers/LakeEtAl2015Science.pdf) ,建议人们可以学会从单个图片中识别新颖的两轮车,例如红色框中包含的图片,如下所示:
![](img/d55d0f5e-ee42-4c09-a213-65fadee76b26.png)
在 2017 年底,AutoML(或元学习)主题是一个活跃的研究主题,旨在针对给定的学习任务自动选择最高效的神经网络。 目标是学习如何高效,自动地设计网络,从而可以学习特定任务或适应新任务。 主要问题是不能简单地用可微分的损失函数描述网络的设计,因此传统的优化技术不能简单地用于元学习。 因此,已经提出了一些解决方案,包括具有控制器递归网络(RNN)和基于强化学习的奖励策略的思想,以及具有与模型无关的元学习的思想。 两种方法都非常有前途,但是肯定还有很多研究空间。
因此,如果您对一个热门话题感兴趣,那么*学习为深度学习*当然是一个可以考虑作为下一份工作的空间。
* Google 在*中提出了采用 RNN 作为控制器的方法,该方法使用机器学习来探索神经网络架构*; Quoc Le & Barret Zoph,2017 年, [https://research.googleblog.com/2017/05/using-machine-learning-to-explore.html](https://research.googleblog.com/2017/05/using-machine-learning-to-explore.html)
* *带有增强学习的神经体系结构搜索*,Barret Zoph,Quoc V. Le, [https://arxiv.org/abs/1611.01578](https://arxiv.org/abs/1611.01578) 是一篇开创性的论文,它证明了有关 Google 方法的更多细节。 但是,RNN 不是唯一的选择。
* *图像分类器的大规模发展*,Esteban Real,Sherry Moore,Andrew Selle,Saurabh Saxena,Yutaka Leon Suematsu,Jie Tan,Quoc Le,Alex Kurakin,2017 年, [https:// arxiv。 org / abs / 1703.01041](https://arxiv.org/abs/1703.01041) 提出在进化遗传算法中使用遗传计算来探索新的候选网络。
* *学习用于可伸缩图像识别的可转移体系结构*,Barret Zoph,Vijay Vasudevan,Jonathon Shlens,Quoc V. Le [https://arxiv.org/abs/1707.07012](https://arxiv.org/abs/1707.07012) 提出了 在 CIFAR 上学习的单元,用于改善 ImageNet 分类。
* *建筑物 A.I. 可以建立人工智能:谷歌和其他公司为争夺一小部分研究人员而奋斗,他们正在寻找自动方法来应对人工智能专家的短缺。* ,《纽约时报》 [https://www.nytimes.com/2017/11/05/technology/machine-learning-artificial-intelligence-ai.html](https://www.nytimes.com/2017/11/05/technology/machine-learning-artificial-intelligence-ai.html)
* *用于快速适应深度网络的模型不可知元学习*,切尔西·芬恩(Chelsea Finn),彼得·阿比耶尔(Pieter Abbeel),谢尔盖·莱文(Sergey Levine),2017 年, [https://arxiv.org/abs/1703.03400](https://arxiv.org/abs/1703.03400)
* *通过梯度下降学习*,Marcin Andrychowicz,Misha Denil,Sergio Gomez,Matthew W. Hoffman,David Pfau,Tom Schaul,Brendan Shillingford,Nando de Freitas, [https:// arxiv.org/abs/1606.04474](https://arxiv.org/abs/1606.04474) 展示了如何将优化算法的设计转换为学习问题,从而使该算法能够自动学习感兴趣的问题中的结构。 LSMT 学习的算法在训练任务上胜过手工设计的竞争对手,并且可以很好地推广到结构相似的新任务。 该算法的代码可在 GitHub 上的 [https://github.com/deepmind/learning-to-learn](https://github.com/deepmind/learning-to-learn) 上获得。
# 连体网络
暹罗网络是 Yann LeCun 及其同事在 NIPS 1994 中提出的一种特殊类型的神经网络( [http://www.worldscientific.com/doi/pdf/10.1142/S0218001493000339](http://www.worldscientific.com/doi/pdf/10.1142/S0218001493000339) )。 它们背后的基本思想是,像“暹罗双胞胎”一样,该网络由两个不同的神经网络组成,它们共享相同的架构和权重。
在这里,您可以看到暹罗建筑:
![](img/15b0d10f-3abe-4254-87dd-e3cb5ad93494.png)
在训练阶段,该对网络会显示一个训练对*(X <sub>1</sub> ,X <sub>2</sub> )*,其中两个输入不同但相似,对于 例如, *X <sub>1</sub> =他很聪明*,而 *X <sub>2</sub> =他是一个聪明人*。 这两个神经网络将产生两个不同的结果。 可以将组合网络视为测量训练对*(X <sub>1</sub> ,X <sub>2</sub> )*之间相似度的标量**能量函数** , 定义为:
![](img/7ae40c9e-adb2-4c8b-bb4d-1dab0e5c19b0.png)
暹罗网络的目标是训练对*(X <sub>1</sub> ,X <sub>2</sub> )*之间的能量应小于其他冒名顶替者对之间的能量 *(X <sub>1</sub> ,![](img/614c63fc-d9d0-4c05-b5b9-f5f579dca4eb.png))*
这可以通过使用**对比损失函数**进行训练来实现。
在训练阶段,网络被输入一个训练对和一个与之相关的标签,告诉它是一个真正的对或冒名顶替者对的网络:*(X <sub>1</sub> ,X <sub>2</sub> ,Y) <sup>*i*</sup>**i <sup>th</sup>* 训练样本。 对比损失函数计算如下:
L ![](img/32f13c94-c144-4116-bd64-e97805948eb6.png)
其中,![](img/633e200a-ea56-49bd-9669-15c9effa8a56.png)*L <sub> G </sub>* 是真正对的部分损失, *L <sub> I </sub>* 是冒名顶替者的部分损失 对和 *P* 训练样本数。 当成对的货真价实时,标签 Y 的值为 0;当冒充的成对商品时,标签 Y 的值为 1。 设计局部损耗 *L <sub> G </sub>**L <sub> I </sub>* 的方式应使对比损耗 *L( W)*将减少真正对的能量并增加冒名顶替者的能量。 这是通过选择部分损失 *L <sub> G </sub>* 单调增加而选择部分损失 L <sub>I</sub> 单调减少 f 来实现的。 一种可能的选择是使用余弦相似度来计算部分损耗。
使用反向传播算法调整权重。
# 连体网络的应用
近年来,暹罗网络已用于许多应用程序。 他们在 LeCun 论文中首次使用的是签名验证。 从那时起,出现了许多应用程序,我们将介绍一些最近的应用程序:
* 与暹罗网络进行说话人和语音相似性的联合学习( [https://pdfs.semanticscholar.org/4ffe/3394628a8a0ffd4cba1a77ea85e197bd4c22.pdf](https://pdfs.semanticscholar.org/4ffe/3394628a8a0ffd4cba1a77ea85e197bd4c22.pdf) ):他们训练了一个多输出暹罗网络,其中一个输出用于语音相似性和 其他为讲者相似。 他们将工作扩展到 Triamese 网络。
* 用于对象跟踪的全卷积暹罗网络( [https://link.springer.com/chapter/10.1007/978-3-319-48881-3_56](https://link.springer.com/chapter/10.1007/978-3-319-48881-3_56) ):他们使用在 ILSVRC15 数据集上训练的卷积暹罗网络 视频中的目标检测。
* 我们站在一起:暹罗网络进行类似问题的检索( [http://www.aclweb.org/anthology/P16-1036](http://www.aclweb.org/anthology/P16-1036) ):本文使用暹罗网络来查找当前问题和已归档问题之间的语义相似性 。 他们还使用了卷积暹罗网络。
除此之外,还对暹罗网络进行了脸部验证/识别( [https://github.com/harveyslash/Facial-Similarity-with-Siamese-Networks-in-Pytorch](https://github.com/harveyslash/Facial-Similarity-with-Siamese-Networks-in-Pytorch) )。 它们已用于问题解答( [https://arxiv.org/pdf/1512.05193v2.pdf](https://arxiv.org/pdf/1512.05193v2.pdf) )。
# 一个有效的例子-MNIST
工作示例基于 Github 页面: [https://github.com/ywpkwon/siamese_tf_mnist](https://github.com/ywpkwon/siamese_tf_mnist) 。 此处的代码使用 Siamese 网络将手写的 MNIST 数字嵌入到 2D 空间中,属于同一类的数字被嵌入在一起。 该代码包含三个主要文件:
`run.py`:它包含执行训练的基本包装。 它使用“梯度下降”算法将对比度损失降至最低。
`inference.py`:包含定义 3 层全连接网络的暹罗类。 代码中两个网络的输出之间的相似性是欧几里得。 然后,使用部分生成损失和部分冒名顶替者损失来计算对比损失。
`visualize.py`:这只是用于可视化结果的包装。
经过前 100,000 个培训步骤,结果是:
![](img/8b5c32c0-e504-4d4d-bdaf-24d3eb4ccef3.png)
您可以看到相同(标记)的数字一起嵌入 2D 空间。
[上还有另一个有趣的示例,https://github.com/dhwajraj/deep-siamese-text-similarity](https://github.com/dhwajraj/deep-siamese-text-similarity)
在这里,使用 Tensorflow,训练了深层的暹罗 LSTM 网络以使用字符嵌入来捕获短语/句子相似性。
\ No newline at end of file
# TensorFlow 处理单元
Google 服务(例如 Google 搜索(RankBrain),街景,Google 照片和 Google 翻译)有一个共同点:它们都使用 Google 的 Tensor 处理单元或 **TPU** 进行计算。
您可能在想什么是 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 的目标是推理,即使用已经训练好的模型。 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 都可以 训练和推断机器学习模型。
# TPU 的组件
在本书涵盖的所有深度学习模型中,无论学习范例如何,都需要进行三个基本计算:乘法,加法和激活函数的应用。
前两个成分是矩阵乘法的一部分:权重矩阵 ***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** )。
MXU 是使用脉动阵列架构实现的。 它包含一个阵列算术逻辑单元(ALU),该阵列连接到网状拓扑中的少量最近邻居。 每个数据值仅读取一次,但在流过 ALU 数组时会多次用于不同的操作,而无需将其存储回寄存器。 TPU 中的 ALU 仅以固定模式执行乘法和加法。 MXU 已针对矩阵乘法进行了优化,不适用于通用计算。
每个 TPU 还具有一个片外 8GiB DRAM 池,称为加权存储器。 它具有四个阶段的流水线,并执行 CISC 指令。 到目前为止,TPU 由六个神经网络组成:两个 MLP,两个 CNN 和两个 LSTM。
在高级指令的帮助下对 TPU 进行编程; 下面是一些用于对 TPU 进行编程的指令:
* `Read_Weights`:从内存读取权重
* `Read_Host_Memory`:从内存中读取数据
* `MatrixMultiply/Convolve`:与数据相乘或卷积并累加结果
* `Activate`:应用激活功能
* `Write_Host_Memory`:将结果写入存储器
Google 创建了一个 API 堆栈,以方便 TPU 编程; 它将来自 Tensorflow 图的 API 调用转换为 TPU 指令。
# TPU 的优势
TPU 提供的优于 GPU 和 CPU 的首要优势是性能。 Google 将 TPU 的性能与运行基准代码(代表 95%的推理工作量)的服务器级 Intel Haswell CPU 和 NVIDIA K80 GPU 进行了比较。 它发现 TPU 的速度比 NVIDIA GPU 和 Intel CPU 快 15-30 倍。
第二个重要参数是功耗。 降低功耗非常重要,因为它具有双重能源优势:它不仅减少了功耗,而且还通过降低散热成本来散热,从而节省了功耗,从而消除了加工过程中产生的热量。 TPU / CPU 每瓦性能比其他 CPU 和 GPU 配置提高了 30-80 倍。
TPU 的另一个优点是其最小化和确定性的设计,因为它们一次只能执行一个任务。
As compared to CPUs and GPUs, the single-threaded TPU has none of the sophisticated microarchitectural features that consume transistors and energy to improve the average case but not the 99th-percentile case: no caches, branch prediction, out-of-order execution, multiprocessing, speculative prefetching, address coalescing, multithreading, context switching, and so forth. Minimalism is a virtue of domain-specific processors.
# 访问 TPU
Google 已决定不直接将 TPU 出售给他人; 取而代之的是,将通过 Google 云平台提供 TPU:Cloud TPU Alpha( [https://cloud.google.com/tpu/](https://cloud.google.com/tpu/) )。 Cloud TPU Alpha 将提供高达 180 teraflops 的计算性能和 64 GB 的超高带宽内存。 用户将能够从自定义虚拟机连接到这些 Cloud TPU。
Google 还决定向全球的机器学习研究人员免费提供 1000 个云 TPU 集群,以加快开放式机器学习研究的步伐。 在有限的计算时间内,将授予选定的个人访问权限; 个人可以使用以下链接进行注册: [https://services.google.com/fb/forms/tpusignup/](https://services.google.com/fb/forms/tpusignup/) 。 根据 Google Blog:
"Since the main goal of the TensorFlow Research Cloud is to benefit the open machine learning research community as a whole, successful applicants will be expected to do the following:
Share their TFRC-supported research with the world through peer-reviewed publications, open-source code, blog posts, or other open media
Share concrete, constructive feedback with Google to help us improve the TFRC program and the underlying Cloud TPU platform over time.
Imagine a future in which ML acceleration is abundant and develop new kinds of machine learning models in anticipation of that future"
# TPU 上的资源
* Norman P.Jouppi 等人,*张量处理单元*的数据中心内性能分析,arXiv 预印本 arXiv:1704.04760(2017)。 在本文中,作者将 TPU 与服务器级的 Intel Haswell CPU 和 NVIDIA k80 GPU 进行了比较。 本文以 TPU 与 CPU 和 K80 GPU 的性能为基准。
* 此 Google 博客通过以下简单术语说明了 TPU 及其工作原理: [https://cloud.google.com/blog/big-data/2017/05/an-in-depth-look-at-googles-first 张量处理单元 tpu](https://cloud.google.com/blog/big-data/2017/05/an-in-depth-look-at-googles-first-tensor-processing-unit-tpu)
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册