选择服务器和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

凸性

凸性 凸性(convexity)在优化算法的设计中起到至关重要的作用, 这主要是由于在这种情况下对算法进行分析和测试要容易。 换言之,如果算法在凸性条件设定下的效果很差, 那通常我们很难在其他条件下看到好的结果。 此外,即使深度学习中的优化问题通常是非凸的, 它们也经常在局部极小值附近表现出一些凸性

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

束搜索

束搜索 在上节中,我们逐个预测输出序列, 直到预测序列中出现特定的序列结束词元“<eos>”。 本节将首先介绍贪心搜索(greedy search)策略, 并探讨其存在的问题,然后对比其他替代策略: 穷举搜索(exhaustive search)和束搜索(beam search)。 在正式介绍贪心搜

Vincent Vincent 发布于 2024-04-07

序列到序列学习(seq2seq)

序列到序列学习(seq2seq) 正如我们在上面中看到的, 机器翻译中的输入序列和输出序列都是长度可变的。 为了解决这类问题,我们在上节中 设计了一个通用的”编码器-解码器“架构。 本节,我们将使用两个循环神经网络的编码器和解码器, 并将其应用于序列到序列(sequence to sequence,

Vincent Vincent 发布于 2024-04-07

编码器-解码器架构

编码器-解码器架构 正如我们之前所讨论的, 机器翻译是序列转换模型的一个核心问题, 其输入和输出都是长度可变的序列。 为了处理这种类型的输入和输出, 我们可以设计一个包含两个主要组件的架构: 第一个组件是一个编码器(encoder): 它接受一个长度可变的序列作为输入, 并将其转换为具有固定形状的编

Vincent Vincent 发布于 2024-04-07

机器翻译与数据集

机器翻译与数据集 语言模型是自然语言处理的关键, 而机器翻译是语言模型最成功的基准测试。 因为机器翻译正是将输入序列转换成输出序列的 序列转换模型(sequence transduction)的核心问题。 序列转换模型在各类现代人工智能应用中发挥着至关重要的作用, 因此我们将其做为本章剩余部分的重点

Vincent Vincent 发布于 2024-04-07

双向循环神经网络

双向循环神经网络 在序列学习中,我们以往假设的目标是: 在给定观测的情况下 (例如,在时间序列的上下文中或在语言模型的上下文中), 对下一个输出进行建模。 虽然这是一个典型情景,但不是唯一的。 还可能发生什么其它的情况呢? 我们考虑以下三个在文本序列中填空的任务。 我___。 我___饿了。 我__

Vincent Vincent 发布于 2024-04-07

深度循环神经网络

深度循环神经网络 到目前为止,我们只讨论了具有一个单向隐藏层的循环神经网络。 其中,隐变量和观测值与具体的函数形式的交互方式是相当随意的。 只要交互类型建模具有足够的灵活性,这就不是一个大问题。 然而,对一个单层来说,这可能具有相当的挑战性。 之前在线性模型中,我们通过添加更多的层来解决这个问题。

Vincent Vincent 发布于 2024-04-07

长短期记忆网络(LSTM)

长短期记忆网络(LSTM) 长期以来,隐变量模型存在着长期信息保存和短期输入缺失的问题。 解决这一问题的最早方法之一是长短期存储器(long short-term memory,LSTM) (Hochreiter and Schmidhuber, 1997)。 它有许多与门控循环单元一样的属性。 有

Vincent Vincent 发布于 2024-04-07

门控循环单元(GRU)

门控循环单元(GRU) 在之前, 我们讨论了如何在循环神经网络中计算梯度, 以及矩阵连续乘积可以导致梯度消失或梯度爆炸的问题。 下面我们简单思考一下这种梯度异常在实践中的意义: 我们可能会遇到这样的情况:早期观测值对预测所有未来观测值具有非常重要的意义。 考虑一个极端情况,其中第一个观测值包含一个校

Vincent Vincent 发布于 2024-04-07

通过时间反向传播

通过时间反向传播 到目前为止,我们已经反复提到像梯度爆炸或梯度消失, 以及需要对循环神经网络分离梯度。 例如,我们在序列上调用了detach函数。 为了能够快速构建模型并了解其工作原理, 上面所说的这些概念都没有得到充分的解释。 本节将更深入地探讨序列模型反向传播的细节, 以及相关的数学原理。 当我

Vincent Vincent 发布于 2024-04-07

循环神经网络的简洁实现

循环神经网络的简洁实现 虽然上节对了解循环神经网络的实现方式具有指导意义,但并不方便。 本节将展示如何使用深度学习框架的高级API提供的函数更有效地实现相同的语言模型。 我们仍然从读取时光机器数据集开始。 from mxnet import np, npx from mxnet.gluon impo

Vincent Vincent 发布于 2024-04-07

循环神经网络的从零开始实现

循环神经网络的从零开始实现 本节将从头开始基于循环神经网络实现字符级语言模型。 这样的模型将在H.G.Wells的时光机器数据集上训练。 和前面介绍过的一样, 我们先读取数据集。 %matplotlib inline import math from mxnet import autograd, g

Vincent Vincent 发布于 2024-04-07

循环神经网络

循环神经网络 我们介绍了�元语法模型, 其中单词��在时间步�的条件概率仅取决于前面�−1个单词。 对于时间步�−(�−1)之前的单词, 如果我们想将其可能产生的影响合并到��上, 需要增加�,然而模型参数的数量也会随之呈指数增长, 因为词表�需要存储|�|�个数字, 因此与其将�(��∣��−1,

Vincent Vincent 发布于 2024-04-07

语言模型和数据集

语言模型和数据集 我们了解了如何将文本数据映射为词元, 以及将这些词元可以视为一系列离散的观测,例如单词或字符。 假设长度为�的文本序列中的词元依次为�1,�2,…,��。 于是,��(1≤�≤�) 可以被认为是文本序列在时间步�处的观测或标签。 在给定这样的文本序列时,语言模型(language

Vincent Vincent 发布于 2024-04-07

序列模型

序列模型 想象一下有人正在看网飞(Netflix,一个国外的视频网站)上的电影。 一名忠实的用户会对每一部电影都给出评价, 毕竟一部好电影需要更多的支持和认可。 然而事实证明,事情并不那么简单。 随着时间的推移,人们对电影的看法会发生很大的变化。 事实上,心理学家甚至对这些现象起了名字: 锚定(an

Vincent Vincent 发布于 2024-04-07

文本预处理

文本预处理 对于序列数据处理问题,我们评估了所需的统计工具和预测时面临的挑战。 这样的数据存在许多种形式,文本是最常见例子之一。 例如,一篇文章可以被简单地看作一串单词序列,甚至是一串字符序列。 本节中,我们将解析文本的常见预处理步骤。 这些步骤通常包括: 将文本作为字符串加载到内存中。 将字符串拆

Vincent Vincent 发布于 2024-04-07

稠密连接网络(DenseNet)

稠密连接网络(DenseNet) ResNet极大地改变了如何参数化深层网络中函数的观点。 稠密连接网络(DenseNet) (Huang et al., 2017)在某种程度上是ResNet的逻辑扩展。让我们先从数学上了解一下。

Vincent Vincent 发布于 2024-04-07

残差网络(ResNet)

残差网络(ResNet) 随着我们设计越来越深的网络,深刻理解“新添加的层如何提升神经网络的性能”变得至关重要。更重要的是设计网络的能力,在这种网络中,添加层会使网络更具表现力, 为了取得质的突破,我们需要一些数学基础知识。 7.6.1. 函数类 首先,假设有一类特定的神经网络架构�,它包括学习速率

Vincent Vincent 发布于 2024-04-07

批量规范化

批量规范化 训练深层神经网络是十分困难的,特别是在较短的时间内使他们收敛更加棘手。 本节将介绍批量规范化(batch normalization) (Ioffe and Szegedy, 2015),这是一种流行且有效的技术,可持续加速深层网络的收敛速度。 再结合将介绍的残差块,批量规范化使得研究人

Vincent Vincent 发布于 2024-04-07

含并行连结的网络(GoogLeNet)

含并行连结的网络(GoogLeNet) 在2014年的ImageNet图像识别挑战赛中,一个名叫GoogLeNet (Szegedy et al., 2015)的网络架构大放异彩。 GoogLeNet吸收了NiN中串联网络的思想,并在此基础上做了改进

Vincent Vincent 发布于 2024-04-07

网络中的网络(NiN)

网络中的网络(NiN) LeNet、AlexNet和VGG都有一个共同的设计模式:通过一系列的卷积层与汇聚层来提取空间结构特征;然后通过全连接层对特征的表征进行处理。 AlexNet和VGG对LeNet的改进主要在于如何扩大和加深这两个模块。 或者,可以想象在这个过程的早期使用全连接层。然而,如果使

Vincent Vincent 发布于 2024-04-07

使用块的网络(VGG)

使用块的网络(VGG) 虽然AlexNet证明深层神经网络卓有成效,但它没有提供一个通用的模板来指导后续的研究人员设计新的网络。 在下面的几个章节中,我们将介绍一些常用于设计深层神经网络的启发式概念。 与芯片设计中工程师从放置晶体管到逻辑元件再到逻辑块的过程类似,神经网络架构的设计也逐渐变得更加抽象

Vincent Vincent 发布于 2024-04-07

深度卷积神经网络(AlexNet)

深度卷积神经网络(AlexNet) 在LeNet提出后,卷积神经网络在计算机视觉和机器学习领域中很有名气。但卷积神经网络并没有主导这些领域。这是因为虽然LeNet在小数据集上取得了很好的效果,但是在更大、更真实的数据集上训练卷积神经网络的性能和可行性还有待研究。事实上,在上世纪90年代初到2012年

Vincent Vincent 发布于 2024-04-07

卷积神经网络(LeNet)

卷积神经网络(LeNet) COLAB [MXNET] Open the notebook in Colab

Vincent Vincent 发布于 2024-04-07

汇聚层

汇聚层 通常当我们处理图像时,我们希望逐渐降低隐藏表示的空间分辨率、聚集信息,这样随着我们在神经网络中层叠的上升,每个神经元对其敏感的感受野(输入)就越大。 而我们的机器学习任务通常会跟全局图像的问题有关(例如,“图像是否包含一只猫呢?”),所以我们最后一层的神经元应该对整个输入的全局敏感。通过逐渐

Vincent Vincent 发布于 2024-04-07

填充和步幅

填充和步幅 在前面的例子中,输入的高度和宽度都为3,卷积核的高度和宽度都为2,生成的输出表征的维数为2×2。 正如我们所概括的那样,假设输入形状为�ℎ×��,卷积核形状为�ℎ×��,那么输出形状将是(�ℎ−�ℎ+1)×(��−��+1)。 因此,卷积的输出形状取决于输入形状和卷积核的形状。 还有什么

Vincent Vincent 发布于 2024-04-07

图像卷积

图像卷积 上节我们解析了卷积层的原理,现在我们看看它的实际应用。由于卷积神经网络的设计是用于探索图像数据,本节我们将以图像为例。 互相关运算 严格来说,卷积层是个错误的叫法,因为它所表达的运算其实是互相关运算(cross-correlation),而不是卷积运算。 根据

Vincent Vincent 发布于 2024-04-07

从全连接层到卷积

从全连接层到卷积 COLAB [MXNET] Open the notebook in Colab

Vincent Vincent 发布于 2024-04-07

GPU

GPU 我们回顾了过去20年计算能力的快速增长。 简而言之,自2000年以来,GPU性能每十年增长1000倍。 本节,我们将讨论如何利用这种计算性能进行研究。 首先是如何使用单个GPU,然后是如何使用多个GPU和多个服务器(具有多个GPU)。 我们先看看如何使用单个NVIDIA GPU进行计算。 首

Vincent Vincent 发布于 2024-04-07

读写文件

读写文件 到目前为止,我们讨论了如何处理数据, 以及如何构建、训练和测试深度学习模型。 然而,有时我们希望保存训练的模型, 以备将来在各种环境中使用(比如在部署中进行预测)。 此外,当运行一个耗时较长的训练过程时, 最佳的做法是定期保存中间结果, 以确保在服务器电源被不小心断掉时,我们不会损失几天的

Vincent Vincent 发布于 2024-04-07

自定义层

自定义层 深度学习成功背后的一个因素是神经网络的灵活性: 我们可以用创造性的方式组合不同的层,从而设计出适用于各种任务的架构。 例如,研究人员发明了专门用于处理图像、文本、序列数据和执行动态规划的层。 有时我们会遇到或要自己发明一个现在在深度学习框架中还不存在的层。 在这些情况下,必须构建自定义层。

Vincent Vincent 发布于 2024-04-07

延后初始化

延后初始化 到目前为止,我们忽略了建立网络时需要做的以下这些事情: 我们定义了网络架构,但没有指定输入维度。 我们添加层时没有指定前一层的输出维度。 我们在初始化参数时,甚至没有足够的信息来确定模型应该包含多少参数。 有些读者可能会对我们的代码能运行感到惊讶。 毕竟,深度学习框架无法判断网络的输入维

Vincent Vincent 发布于 2024-04-07

参数管理

参数管理 在选择了架构并设置了超参数后,我们就进入了训练阶段。 此时,我们的目标是找到使损失函数最小化的模型参数值。 经过训练后,我们将需要使用这些参数来做出未来的预测。 此外,有时我们希望提取参数,以便在其他环境中复用它们, 将模型保存下来,以便它可以在其他软件中执行, 或者为了获得科学的理解而进

Vincent Vincent 发布于 2024-04-07

层和块

层和块 之前首次介绍神经网络时,我们关注的是具有单一输出的线性模型。 在这里,整个模型只有一个输出。 注意,单个神经网络 (1)接受一些输入; (2)生成相应的标量输出; (3)具有一组相关 参数(parameters),更新这些参数可以优化某目标函数。 然后,当考虑具有多个输出的网络时, 我们利用

Vincent Vincent 发布于 2024-04-07

实战Kaggle比赛:预测房价

实战Kaggle比赛:预测房价 COLAB [MXNET] Open the notebook in Colab

Vincent Vincent 发布于 2024-04-07

环境和分布偏移

环境和分布偏移 前面我们学习了许多机器学习的实际应用,将模型拟合各种数据集。 然而,我们从来没有想过数据最初从哪里来?以及我们计划最终如何处理模型的输出? 通常情况下,开发人员会拥有一些数据且急于开发模型,而不关注这些基本问题。 许多失败的机器学习部署(即实际应用)都可以追究到这种方式。 有时,根据

Vincent Vincent 发布于 2024-04-07

数值稳定性和模型初始化

数值稳定性和模型初始化 到目前为止,我们实现的每个模型都是根据某个预先指定的分布来初始化模型的参数。 有人会认为初始化方案是理所当然的,忽略了如何做出这些选择的细节。甚至有人可能会觉得,初始化方案的选择并不是特别重要。 相反,初始化方案的选择在神经网络学习中起着举足轻重的作用, 它对保持数值稳定性至

Vincent Vincent 发布于 2024-04-07

前向传播、反向传播和计算图

前向传播、反向传播和计算图 我们已经学习了如何用小批量随机梯度下降训练模型。 然而当实现该算法时,我们只考虑了通过前向传播(forward propagation)所涉及的计算。 在计算梯度时,我们只调用了深度学习框架提供的反向传播函数,而不知其所以然。 梯度的自动计算(自动微分)大大简化了深度学习

Vincent Vincent 发布于 2024-04-07

暂退法(Dropout)

暂退法(Dropout) 在之前, 我们介绍了通过惩罚权重的�2范数来正则化统计模型的经典方法。 在概率角度看,我们可以通过以下论证来证明这一技术的合理性: 我们已经假设了一个先验,即权重的值取自均值为0的高斯分布。 更直观的是,我们希望模型深度挖掘特征,即将其权重分散到许多特征中, 而不是过于依赖

Vincent Vincent 发布于 2024-04-07

权重衰减

权重衰减 前一节我们描述了过拟合的问题,本节我们将介绍一些正则化模型的技术。 我们总是可以通过去收集更多的训练数据来缓解过拟合。 但这可能成本很高,耗时颇多,或者完全超出我们的控制,因而在短期内不可能做到。 假设我们已经拥有尽可能多的高质量数据,我们便可以将重点放在正则化技术上。 回想一下,在多项式

Vincent Vincent 发布于 2024-04-07

模型选择、欠拟合和过拟合

模型选择、欠拟合和过拟合 作为机器学习科学家,我们的目标是发现模式(pattern)。 但是,我们如何才能确定模型是真正发现了一种泛化的模式, 而不是简单地记住了数据呢? 例如,我们想要在患者的基因数据与痴呆状态之间寻找模式, 其中标签是从集合痴呆轻度认知障碍健康{痴呆,轻度认知障碍,健康}中提取的

Vincent Vincent 发布于 2024-04-07

多层感知机的简洁实现

多层感知机的简洁实现 本节将介绍通过高级API更简洁地实现多层感知机。 from mxnet import gluon, init, npx from mxnet.gluon import nn from d2l import mxnet as d2l npx.set_np()

Vincent Vincent 发布于 2024-04-07

多层感知机的从零开始实现

多层感知机的从零开始实现 我们已经描述了多层感知机(MLP), 现在让我们尝试自己实现一个多层感知机。 为了与之前softmax回归 获得的结果进行比较, 我们将继续使用Fashion-MNIST图像分类数据集 。 MXN

Vincent Vincent 发布于 2024-04-07