束搜索

束搜索 在上节中,我们逐个预测输出序列, 直到预测序列中出现特定的序列结束词元“<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

多输入多输出通道

多输入多输出通道 虽然我们描述了构成每个图像的多个通道和多层卷积层。例如彩色图像具有标准的RGB通道来代表红、绿和蓝。 但是到目前为止,我们仅展示了单个输入和单个输出通道的简化例子。 这使得我们可以将输入、卷积核和输出看作二维张量。 当我们添加通道时,我们的输入和隐藏的表示都变成了三维张量。例如,每

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

多层感知机

多层感知机 我们介绍了softmax回归,训练分类器从低分辨率图像中识别10类服装。 在这个过程中,我们学习了如何处理数据,如何将输出转换为有效的概率分布, 并应用适当的损失函数,根据模型参数最小化损失。 我们已经在简单的线性模型背景下掌握了这些知识, 现在我们可以开始对深度神经网络的探索,这也是本

Vincent Vincent 发布于 2024-04-07

softmax回归的简洁实现

softmax回归的简洁实现 在 3.3节中, 我们发现通过深度学习框架的高级API能够使实现 线性回归变得更加容易。 同样,通过深度学习框架的高级API也能更方便地实现softmax回归模型。 本节如在

Vincent Vincent 发布于 2024-04-07

softmax回归的从零开始实现

softmax回归的从零开始实现 就像我们从零开始实现线性回归一样, 我们认为softmax回归也是重要的基础,因此应该知道实现softmax回归的细节。 本节我们将使用刚刚在 3.5节中引入的Fashion-MNIST数据集, 并设置数据

Vincent Vincent 发布于 2024-04-07

图像分类数据集

图像分类数据集 MNIST数据集 (LeCun et al., 1998) 是图像分类中广泛使用的数据集之一,但作为基准数据集过于简单。 我们将使用类似但更复杂的Fashion-MNIST数据集 (

Vincent Vincent 发布于 2024-04-07

softmax回归

softmax回归 在 3.1节中我们介绍了线性回归。 随后,在

Vincent Vincent 发布于 2024-04-07

线性回归的简洁实现

线性回归的简洁实现 在过去的几年里,出于对深度学习强烈的兴趣, 许多公司、学者和业余爱好者开发了各种成熟的开源框架。 这些框架可以自动化基于梯度的学习算法中重复性的工作。 在 3.2节中,我们只运用了: (1)通过张量来进行数据存储和线性代数; (2)通过自动微分来计算梯度。 实际上,由于

Vincent Vincent 发布于 2024-04-07

线性回归的从零开始实现

线性回归的从零开始实现 在了解线性回归的关键思想之后,我们可以开始通过代码来动手实现线性回归了。 在这一节中,我们将从零开始实现整个方法, 包括数据流水线、模型、损失函数和小批量随机梯度下降优化器。 虽然现代的深度学习框架几乎可以自动化地进行所有这些工作,但从零开始实现可以确保我们真正知道自己在做什

Vincent Vincent 发布于 2024-04-07

线性回归

线性回归 回归(regression)是能为一个或多个自变量与因变量之间关系建模的一类方法。 在自然科学和社会科学领域,回归经常用来表示输入和输出之间的关系。 在机器学习领域中的大多数任务通常都与预测(prediction)有关。 当我们想预测一个数值时,就会涉及到回归问题。 常见的例子包括:预测价

Vincent Vincent 发布于 2024-04-07