风格迁移

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

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

多输入多输出通道

多输入多输出通道 虽然我们描述了构成每个图像的多个通道和多层卷积层。例如彩色图像具有标准的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

查阅文档

查阅文档 由于篇幅限制,本书不可能介绍每一个MXNet函数和类。 API文档、其他教程和示例提供了本书之外的大量文档。 本节提供了一些查看MXNet API的指导。 2.7.1. 查找模块中的所有函数和类 为了知道模块中可以调用哪些函数和类,可以调用dir函数。 例如,我们可以查询随机数生成模块中的

Vincent Vincent 发布于 2024-04-07

概率

概率 简单地说,机器学习就是做出预测。 根据病人的临床病史,我们可能想预测他们在下一年心脏病发作的概率。 在飞机喷气发动机的异常检测中,我们想要评估一组发动机读数为正常运行情况的概率有多大。 在强化学习中,我们希望智能体(agent)能在一个环境中智能地行动。 这意味着我们需要考虑在每种可行的行为下

Vincent Vincent 发布于 2024-04-07

自动微分

自动微分 正如 2.4节中所说,求导是几乎所有深度学习优化算法的关键步骤。 虽然求导的计算很简单,只需要一些基本的微积分。 但对于复杂的模型,手工进行更新是一件很痛苦的事情(而且经常容易出错)。 深度学习框架通过自动计算导数,即自动微分(automatic differentiation)来加快求导

Vincent Vincent 发布于 2024-04-07

微积分

微积分 在2500年前,古希腊人把一个多边形分成三角形,并把它们的面积相加,才找到计算多边形面积的方法。 为了求出曲线形状(比如圆)的面积,古希腊人在这样的形状上刻内接多边形。 如 图2.4.1所示,内接多边形的等长边越多,就越接近圆。 这个过程也被称为逼近法(method of exhaustio

Vincent Vincent 发布于 2024-04-07

线性代数

线性代数 在介绍完如何存储和操作数据后,接下来将简要地回顾一下部分基本线性代数内容。 这些内容有助于读者了解和实现本书中介绍的大多数模型。 本节将介绍线性代数中的基本数学对象、算术和运算,并用数学符号和相应的代码实现来表示它们。 2.3.1. 标量 如果你曾经在餐厅支付餐费,那么应该已经知道一些基本

Vincent Vincent 发布于 2024-04-07

数据预处理

数据预处理 为了能用深度学习来解决现实世界的问题,我们经常从预处理原始数据开始, 而不是从那些准备好的张量格式数据开始。 在Python中常用的数据分析工具中,我们通常使用pandas软件包。 像庞大的Python生态系统中的许多其他扩展包一样,pandas可以与张量兼容。 本节我们将简要介绍使用p

Vincent Vincent 发布于 2024-04-07

数据操作

数据操作 为了能够完成各种数据操作,我们需要某种方法来存储和操作数据。 通常,我们需要做两件重要的事:(1)获取数据;(2)将数据读入计算机后对其进行处理。 如果没有某种方法来存储数据,那么获取数据是没有意义的。 首先,我们介绍�维数组,也称为张量(tensor)。 使用过Python中NumPy计

Vincent Vincent 发布于 2024-04-07

知识概要

引言 时至今日,人们常用的计算机程序几乎都是软件开发人员从零编写的。 比如,现在开发人员要编写一个程序来管理网上商城。 经过思考,开发人员可能提出如下一个解决方案: 首先,用户通过Web浏览器(或移动应用程序)与应用程序进行交互; 紧接着,应用程序与数据库引擎进行交互,以保存交易历史记录并跟踪每个用

Vincent Vincent 发布于 2024-04-07