选择服务器和GPU

选择服务器和GPU 深度学习训练通常需要大量的计算。目前,GPU是深度学习最具成本效益的硬件加速器。与CPU相比,GPU更便宜,性能更高,通常超过一个数量级。此外,一台服务器可以支持多个GPU,高端服务器最多支持8个GPU。更典型的数字是工程工作站最多4个GPU,这是因为热量、冷却和电源需求会迅速增

Vincent Vincent 发布于 2024-04-07

使用Amazon EC2实例

使用Amazon EC2实例 本节将展示如何在原始Linux机器上安装所有库。回想一下,讨论了如何使用Amazon SageMaker,而在云上自己构建实例的成本更低。本演示包括三个步骤。 从AWS EC2请求GPU Linux实例。 安装CUDA(或使用预装CUDA的Amazon机器映像)。 安装

Vincent Vincent 发布于 2024-04-07

使用Amazon SageMaker

使用Amazon SageMaker 深度学习程序可能需要很多计算资源,这很容易超出你的本地计算机所能提供的范围。云计算服务允许你使用功能更强大的计算机更轻松地运行本书的GPU密集型代码。本节将介绍如何使用Amazon SageMaker运行本书的代码。 注册 首先,我们需要在注册一个帐户https

Vincent Vincent 发布于 2024-04-07

使用Jupyter Notebook

使用Jupyter Notebook 本节介绍如何使用Jupyter Notebook编辑和运行本书各章中的代码。确保你已按照 安装中的说明安装了Jupyter并下载了代码。如果你想了解更多关于Jupyter的信息,请参阅其

Vincent Vincent 发布于 2024-04-07

自然语言推断:微调BERT

自然语言推断:微调BERT 在本章的前面几节中,我们已经为SNLI数据集上的自然语言推断任务设计了一个基于注意力的结构。现在,我们通过微调BERT来重新审视这项任务。正如讨论的那样,自然语言推断是一个序列级别的文本对分类问题,而微调BERT只需要一个额外的基于多层感知机的架构,如所示。

Vincent Vincent 发布于 2024-04-07

针对序列级和词元级应用微调BERT

针对序列级和词元级应用微调BERT 在本章的前几节中,我们为自然语言处理应用设计了不同的模型,例如基于循环神经网络、卷积神经网络、注意力和多层感知机。这些模型在有空间或时间限制的情况下是有帮助的,但是,为每个自然语言处理任务精心设计一个特定的模型实际上是不可行的。在

Vincent Vincent 发布于 2024-04-07

自然语言推断:使用注意力

自然语言推断:使用注意力 我们介绍了自然语言推断任务和SNLI数据集。鉴于许多模型都是基于复杂而深度的架构,Parikh等人提出用注意力机制解决自然语言推断问题,并称之为“可分解注意力模型” (Parikh et al., 2016)。这使得模型没有循环层或卷积层,在SNLI数据集

Vincent Vincent 发布于 2024-04-07

自然语言推断与数据集

自然语言推断与数据集 我们讨论了情感分析问题。这个任务的目的是将单个文本序列分类到预定义的类别中,例如一组情感极性中。然而,当需要决定一个句子是否可以从另一个句子推断出来,或者需要通过识别语义等价的句子来消除句子间冗余时,知道如何对一个文本序列进行分类是不够的。相反,我们需要能够对成对的文本序列进行

Vincent Vincent 发布于 2024-04-07

情感分析:使用卷积神经网络

情感分析:使用卷积神经网络 我们探讨了使用二维卷积神经网络处理二维图像数据的机制,并将其应用于局部特征,如相邻像素。虽然卷积神经网络最初是为计算机视觉设计的,但它也被广泛用于自然语言处理。简单地说,只要将任何文本序列想象成一维图像即可。通过这种方式,一维卷积神经网络可以处理文本中的局部特征,例如�元

Vincent Vincent 发布于 2024-04-07

情感分析:使用循环神经网络

情感分析:使用循环神经网络 与词相似度和类比任务一样,我们也可以将预先训练的词向量应用于情感分析。由于IMDb评论数据集不是很大,使用在大规模语料库上预训练的文本表示可以减少模型的过拟合。作为所示的具体示例,我们将使用预训练的GloVe模型来表示每个词元,并将这些词元表示送入多层双向循环神经网络以获

Vincent Vincent 发布于 2024-04-07

情感分析及数据集

情感分析及数据集 随着在线社交媒体和评论平台的快速发展,大量评论的数据被记录下来。这些数据具有支持决策过程的巨大潜力。 情感分析(sentiment analysis)研究人们在文本中 (如产品评论、博客评论和论坛讨论等)“隐藏”的情绪。 它在广泛应用于政治(如公众对政策的情绪分析)、 金融(如市场

Vincent Vincent 发布于 2024-04-07

预训练BERT

预训练BERT 利用实现的BERT模型和从WikiText-2数据集生成的预训练样本,我们将在本节中在WikiText-2数据集上对BERT进行预训练。 from mxnet import autograd, gluon, init, np, npx from d2l import mxnet as

Vincent Vincent 发布于 2024-04-07

用于预训练BERT的数据集

用于预训练BERT的数据集 为了预训练实现的BERT模型,我们需要以理想的格式生成数据集,以便于两个预训练任务:遮蔽语言模型和下一句预测。一方面,最初的BERT模型是在两个庞大的图书语料库和英语维基百科的合集上预训练的,但它很难吸引这本书的大多数读者。另一方面,现成的预训练BERT模型可能不适合医学

Vincent Vincent 发布于 2024-04-07

来自Transformers的双向编码器表示(BERT)

来自Transformers的双向编码器表示(BERT) 我们已经介绍了几种用于自然语言理解的词嵌入模型。在预训练之后,输出可以被认为是一个矩阵,其中每一行都是一个表示预定义词表中词的向量。事实上,这些词嵌入模型都是与上下文无关的。让我们先来说明这个性质。 从上下文无关到上下文敏感

Vincent Vincent 发布于 2024-04-07

词的相似性和类比任务

词的相似性和类比任务 我们在一个小的数据集上训练了一个word2vec模型,并使用它为一个输入词寻找语义相似的词。实际上,在大型语料库上预先训练的词向量可以应用于下游的自然语言处理任务,这将在后面讨论。为了直观地演示大型语料库中预训练词向量的语义,让我们将预训练词向量应用到词的相似性和类比任务中。

Vincent Vincent 发布于 2024-04-07

子词嵌入

子词嵌入 在英语中,“helps”“helped”和“helping”等单词都是同一个词“help”的变形形式。“dog”和“dogs”之间的关系与“cat”和“cats”之间的关系相同,“boy”和“boyfriend”之间的关系与“girl”和“girlfriend”之间的关系相同。在法语和西班

Vincent Vincent 发布于 2024-04-07

全局向量的词嵌入(GloVe)

全局向量的词嵌入(GloVe) 上下文窗口内的词共现可以携带丰富的语义信息。例如,在一个大型语料库中,“固体”比“气体”更有可能与“冰”共现,但“气体”一词与“蒸汽”的共现频率可能比与“冰”的共现频率更高。此外,可以预先计算此类共现的全局语料库统计数据:这可以提高训练效率。为了利用整个语料库中的统计

Vincent Vincent 发布于 2024-04-07

预训练word2vec

预训练word2vec 我们继续实现定义的跳元语法模型。然后,我们将在PTB数据集上使用负采样预训练word2vec。首先,让我们通过调用d2l.load_data_ptb函数来获得该数据集的数据迭代器和词表,该函数在进行了描述。 import math from mxnet import auto

Vincent Vincent 发布于 2024-04-07

用于预训练词嵌入的数据集

用于预训练词嵌入的数据集 现在我们已经了解了word2vec模型的技术细节和大致的训练方法,让我们来看看它们的实现。具体地说,我们将以 跳元模型和负采样为例。本节从用于预训练词嵌入模型的数据集开始:数据的原始格式将被转换为可以在训练期间迭代的小批量。 import math import os im

Vincent Vincent 发布于 2024-04-07

近似训练

近似训练 回想一下我们的讨论。跳元模型的主要思想是使用softmax运算来计算基于给定的中心词��生成上下文字��的条件概率),对应的对数损失在给出。 由于softmax操作的性质,上下文词可以是词表�中的任意项,包含与整个词表大小一样多的项的求和。因此, 中跳元模型的梯度计算和 中的连续词袋模型的

Vincent Vincent 发布于 2024-04-07

词嵌入(word2vec)

词嵌入(word2vec) 自然语言是用来表达人脑思维的复杂系统。 在这个系统中,词是意义的基本单元。顾名思义, 词向量是用于表示单词意义的向量, 并且还可以被认为是单词的特征向量或表示。 将单词映射到实向量的技术称为词嵌入。 近年来,词嵌入逐渐成为自然语言处理的基础知识。 为何独热向量是一个糟糕的

Vincent Vincent 发布于 2024-04-07

风格迁移

风格迁移 摄影爱好者也许接触过滤波器。它能改变照片的颜色风格,从而使风景照更加锐利或者令人像更加美白。但一个滤波器通常只能改变照片的某个方面。如果要照片达到理想中的风格,可能需要尝试大量不同的组合。这个过程的复杂程度不亚于模型调参。 本节将介绍如何使用卷积神经网络,自动将一个图像中的风格应用在另一图

Vincent Vincent 发布于 2024-04-07

全卷积网络

全卷积网络 语义分割是对图像中的每个像素分类。 全卷积网络(fully convolutional network,FCN)采用卷积神经网络实现了从图像像素到像素类别的变换 (Long et al., 2015)。 与我们之前在图像分类或目标检测部分介绍的卷积神经网络不同,全卷积网络将中间层特征图的

Vincent Vincent 发布于 2024-04-07

转置卷积

转置卷积 到目前为止,我们所见到的卷积神经网络层,例如卷积层和汇聚层,通常会减少下采样输入图像的空间维度(高和宽)。 然而如果输入和输出图像的空间维度相同,在以像素级分类的语义分割中将会很方便。 例如,输出像素所处的通道维可以保有输入像素在同一位置上的分类结果。 为了实现这一点,尤其是在空间维度被卷

Vincent Vincent 发布于 2024-04-07

义分割和数据集

语义分割和数据集 讨论的目标检测问题中,我们一直使用方形边界框来标注和预测图像中的目标。 本节将探讨语义分割(semantic segmentation)问题,它重点关注于如何将图像分割成属于不同语义类别的区域。 与目标检测不同,语义分割可以识别并理解图像中每一个像素的内容:其语义区域的标注和预测是

Vincent Vincent 发布于 2024-04-07

区域卷积神经网络(R-CNN)系列

区域卷积神经网络(R-CNN)系列 除了描述的单发多框检测之外, 区域卷积神经网络(region-based CNN或regions with CNN features,R-CNN) (Girshick et al., 2014)也是将深度模

Vincent Vincent 发布于 2024-04-07

单发多框检测(SSD)

单发多框检测(SSD) 我们分别介绍了边界框、锚框、多尺度目标检测和用于目标检测的数据集。 现在我们已经准备好使用这样的背景知识来设计一个目标检测模型:单发多框检测(SSD) (Liu et al., 2016)。 该模型简单、快速且被广泛使用。尽管这只是其中一种目标检测模型,但本节中的一些设计原则

Vincent Vincent 发布于 2024-04-07

目标检测数据集

目标检测数据集 目标检测领域没有像MNIST和Fashion-MNIST那样的小数据集。 为了快速测试目标检测模型,我们收集并标记了一个小型数据集。 首先,我们拍摄了一组香蕉的照片,并生成了1000张不同角度和大小的香蕉图像。 然后,我们在一些背景图片的随机位置上放一张香蕉的图像。 最后,我们在图片

Vincent Vincent 发布于 2024-04-07

多尺度目标检测

多尺度目标检测 我们以输入图像的每个像素为中心,生成了多个锚框。 基本而言,这些锚框代表了图像不同区域的样本。 然而,如果为每个像素都生成的锚框,我们最终可能会得到太多需要计算的锚框。 想象一个561×728的输入图像,如果以每个像素为中心生成五个形状不同的锚框,就需要在图像上标记和预测超过200万

Vincent Vincent 发布于 2024-04-07

锚框

锚框 目标检测算法通常会在输入图像中采样大量的区域,然后判断这些区域中是否包含我们感兴趣的目标,并调整区域边界从而更准确地预测目标的真实边界框(ground-truth bounding box)。 不同的模型使用的区域采样方法可能不同。 这里我们介绍其中的一种方法:以每个像素为中心,生成多个缩放比

Vincent Vincent 发布于 2024-04-07

目标检测和边界框

目标检测和边界框 前面的章节介绍了各种图像分类模型。 在图像分类任务中,我们假设图像中只有一个主要物体对象,我们只关注如何识别其类别。 然而,很多时候图像里有多个我们感兴趣的目标,我们不仅想知道它们的类别,还想得到它们在图像中的具体位置。 在计算机视觉里,我们将这类任务称为目标检测(object d

Vincent Vincent 发布于 2024-04-07

微调

微调 前面的一些章节介绍了如何在只有6万张图像的Fashion-MNIST训练数据集上训练模型。 我们还描述了学术界当下使用最广泛的大规模图像数据集ImageNet,它有超过1000万的图像和1000类的物体。 然而,我们平常接触到的数据集的规模通常在这两者之间。 假如我们想识别图片中不同类型的椅子

Vincent Vincent 发布于 2024-04-07

图像增广

图像增广 提到过大型数据集是成功应用深度神经网络的先决条件。 图像增广在对训练图像进行一系列的随机变化之后,生成相似但不同的训练样本,从而扩大了训练集的规模。 此外,应用图像增广的原因是,随机改变训练样本可以减少模型对某些属性的依赖,从而提高模型的泛化能力。 例如,我们可以以不同的方式裁剪图像,使感

Vincent Vincent 发布于 2024-04-07

参数服务器

参数服务器 当我们从一个GPU迁移到多个GPU时,以及再迁移到包含多个GPU的多个服务器时(可能所有服务器的分布跨越了多个机架和多个网络交换机),分布式并行训练算法也需要变得更加复杂。通过细节可以知道,一方面是不同的互连方式的带宽存在极大的区别(例如,NVLink可以通过设置实现跨6条链路的高达10

Vincent Vincent 发布于 2024-04-07

多GPU的简洁实现

多GPU的简洁实现 每个新模型的并行计算都从零开始实现是无趣的。此外,优化同步工具以获得高性能也是有好处的。下面我们将展示如何使用深度学习框架的高级API来实现这一点。数学和算法相同。本节的代码至少需要两个GPU来运行。 from mxnet import autograd, gluon, init

Vincent Vincent 发布于 2024-04-07

多GPU训练

多GPU训练 到目前为止,我们讨论了如何在CPU和GPU上高效地训练模型,同时展示了深度学习框架如何在CPU和GPU之间自动地并行化计算和通信,还展示了如何使用nvidia-smi命令列出计算机上所有可用的GPU。 但是我们没有讨论如何真正实现深度学习训练的并行化。 是否一种方法,以某种方式分割数据

Vincent Vincent 发布于 2024-04-07

硬件

硬件 很好地理解算法和模型才可以捕获统计方面的问题,构建出具有出色性能的系统。同时,至少对底层硬件有一定的了解也是必不可少的。本节不能替代硬件和系统设计的相关课程。相反,本节的内容可以作为理解某些算法为什么比其他算法更高效以及如何实现良好吞吐量的起点。一个好的设计可以很容易地在性能上造就数量级的差异

Vincent Vincent 发布于 2024-04-07

自动并行

自动并行 深度学习框架(例如,MxNet、飞桨和PyTorch)会在后端自动构建计算图。利用计算图,系统可以了解所有依赖关系,并且可以选择性地并行执行多个不相互依赖的任务以提高速度。例如,独立初始化两个变量。因此,系统可以选择并行执行它们。 通常情况下单个操作符将使用所有CPU或单个GPU上的所有计

Vincent Vincent 发布于 2024-04-07

异步计算

异步计算 今天的计算机是高度并行的系统,由多个CPU核、多个GPU、多个处理单元组成。通常每个CPU核有多个线程,每个设备通常有多个GPU,每个GPU有多个处理单元。总之,我们可以同时处理许多不同的事情,并且通常是在不同的设备上。不幸的是,Python并不善于编写并行和异步代码,至少在没有额外帮助的

Vincent Vincent 发布于 2024-04-07

编译器和解释器

编译器和解释器 目前为止,本书主要关注的是命令式编程(imperative programming)。 命令式编程使用诸如print、“+”和if之类的语句来更改程序的状态。 考虑下面这段简单的命令式程序: def add(a, b): return a + b def fancy_fun

Vincent Vincent 发布于 2024-04-07

学习率调度器

学习率调度器 到目前为止,我们主要关注如何更新权重向量的优化算法,而不是它们的更新速率。 然而,调整学习率通常与实际算法同样重要,有如下几方面需要考虑: 首先,学习率的大小很重要。如果它太大,优化就会发散;如果它太小,训练就会需要过长时间,或者我们最终只能得到次优的结果。我们之前看到问题的条件数很重

Vincent Vincent 发布于 2024-04-07

Adam算法

Adam算法 本章我们已经学习了许多有效优化的技术。 在本节讨论之前,我们先详细回顾一下这些技术: 我们学习了:随机梯度下降在解决优化问题时比梯度下降更有效。 我们学习了:在一个小批量中使用更大的观测值集,可以通过向量化提供额外效率。这是高效的多机、多GPU和整体并行处理的关键。 我们添加了一种机制

Vincent Vincent 发布于 2024-04-07

Adadelta

Adadelta Adadelta是AdaGrad的另一种变体, 主要区别在于前者减少了学习率适应坐标的数量。 此外,广义上Adadelta被称为没有学习率,因为它使用变化量本身作为未来变化的校准。 Adadelta算法是在 (Zeiler, 2012)中提出的。 Adadelta算法 简而言之,A

Vincent Vincent 发布于 2024-04-07

RMSProp算法

RMSProp算法 上节关键问题之一,是学习率按预定时间表�(�−12)显著降低。 虽然这通常适用于凸问题,但对于深度学习中遇到的非凸问题,可能并不理想。 但是,作为一个预处理器,Adagrad算法按坐标顺序的适应性是非常可取的。 (

Vincent Vincent 发布于 2024-04-07

AdaGrad算法

AdaGrad算法 我们从有关特征学习中并不常见的问题入手。 稀疏特征和学习率 假设我们正在训练一个语言模型。 为了获得良好的准确性,我们大多希望在训练的过程中降低学习率,速度通常为�(�−12)或更低。 现在讨论关于稀疏特征(即只在偶尔出现的特征)的模型训练,这对自然语言来说很常见。 例如,我们看

Vincent Vincent 发布于 2024-04-07

动量法

动量法 在上面,我们详述了如何执行随机梯度下降,即在只有嘈杂的梯度可用的情况下执行优化时会发生什么。 对于嘈杂的梯度,我们在选择学习率需要格外谨慎。 如果衰减速度太快,收敛就会停滞。 相反,如果太宽松,我们可能无法收敛到最优解。 基础 本节将探讨更有效的优化算法,尤其是针对实验中常见的某些类型的优化

Vincent Vincent 发布于 2024-04-07

小批量随机梯度下降

小批量随机梯度下降 到目前为止,我们在基于梯度的学习方法中遇到了两个极端情况: 使用完整数据集来计算梯度并更新参数,一次处理一个训练样本来取得进展。 二者各有利弊:每当数据非常相似时,梯度下降并不是非常“数据高效”。 而由于CPU和GPU无法充分利用向量化,随机梯度下降并不特别“计算高效”。 这暗示

Vincent Vincent 发布于 2024-04-07

随机梯度下降

随机梯度下降 在前面的章节中,我们一直在训练过程中使用随机梯度下降,但没有解释它为什么起作用。为了澄清这一点,我们刚描述了梯度下降的基本原则。本节继续更详细地说明随机梯度下降(stochastic gradient descent)。 %matplotlib inline import math f

Vincent Vincent 发布于 2024-04-07

梯度下降

梯度下降 尽管梯度下降(gradient descent)很少直接用于深度学习, 但了解它是理解下一节随机梯度下降算法的关键。 例如,由于学习率过大,优化问题可能会发散,这种现象早已在梯度下降中出现。 同样地,预处理(preconditioning)是梯度下降中的一种常用技术, 还被沿用到更高级的算

Vincent Vincent 发布于 2024-04-07

优化和深度学习

优化和深度学习 本节将讨论优化与深度学习之间的关系以及在深度学习中使用优化的挑战。对于深度学习问题,我们通常会先定义损失函数。一旦我们有了损失函数,我们就可以使用优化算法来尝试最小化损失。在优化中,损失函数通常被称为优化问题的目标函数。按照传统惯例,大多数优化算法都关注的是最小化。如果我们需要最大化

Vincent Vincent 发布于 2024-04-07

Transformer

Transformer 上面我们比较了卷积神经网络(CNN)、循环神经网络(RNN)和自注意力(self-attention)。值得注意的是,自注意力同时具有并行计算和最短的最大路径长度这两个优势。因此,使用自注意力来设计深度架构是很有吸引力的。对比之前仍然依赖循环神经网络实现输入表示的自注意力模型

Vincent Vincent 发布于 2024-04-07

自注意力和位置编码

自注意力和位置编码 在深度学习中,经常使用卷积神经网络(CNN)或循环神经网络(RNN)对序列进行编码。 想象一下,有了注意力机制之后,我们将词元序列输入注意力池化中, 以便同一组词元同时充当查询、键和值。 具体来说,每个查询都会关注所有的键-值对并生成一个注意力输出。 由于查询、键和值来自同一组输

Vincent Vincent 发布于 2024-04-07

多头注意力

多头注意力 在实践中,当给定相同的查询、键和值的集合时, 我们希望模型可以基于相同的注意力机制学习到不同的行为, 然后将不同的行为作为知识组合起来, 捕获序列内各种范围的依赖关系 (例如,短距离依赖和长距离依赖关系)。 因此,允许注意力机制组合使用查询、键和值的不同 子空间表示(representa

Vincent Vincent 发布于 2024-04-07

Bahdanau 注意力

Bahdanau 注意力 之前探讨了机器翻译问题: 通过设计一个基于两个循环神经网络的编码器-解码器架构, 用于序列到序列学习。 具体来说,循环神经网络编码器将长度可变的序列转换为固定形状的上下文变量, 然后循环神经网络解码器根据生成的词元和上下文变量 按词元生成输出(目标)序列词元。 然而,即使并

Vincent Vincent 发布于 2024-04-07

注意力评分函数

注意力评分函数 上节使用了高斯核来对查询和键之间的关系建模。 高斯核指数部分可以视为注意力评分函数(attention scoring function), 简称评分函数(scoring function), 然后把这个函数的输出结果输入到softmax函数中进行运

Vincent Vincent 发布于 2024-04-07

注意力汇聚:Nadaraya-Watson 核回归

注意力汇聚:Nadaraya-Watson 核回归 上节介绍了框架下的注意力机制的主要成分: 查询(自主提示)和键(非自主提示)之间的交互形成了注意力汇聚; 注意力汇聚有选择地聚合了值(感官输入)以生成最终的输出。 本节将介绍注意力汇聚的更多细节, 以便从宏观上了解注意力机制在实践中的运作方式。 具

Vincent Vincent 发布于 2024-04-07

注意力提示

注意力提示 感谢读者对本书的关注,因为读者的注意力是一种稀缺的资源: 此刻读者正在阅读本书(而忽略了其他的书), 因此读者的注意力是用机会成本(与金钱类似)来支付的。 为了确保读者现在投入的注意力是值得的, 作者们尽全力(全部的注意力)创作一本好书。 自经济学研究稀缺资源分配以来,人们正处在“注意力

Vincent Vincent 发布于 2024-04-07