4k 4 分钟

# RMSProp 算法 🏷 sec_rmsprop :numref: sec_adagrad 中的关键问题之一,是学习率按预定时间表O(t−12)\mathcal{O}(t^{-\frac{1}{2}})O(t−21​) 显著降低。 虽然这通常适用于凸问题,但对于深度学习中遇到的非凸问题,可能并不理想。 但是,作为一个预处理器,Adagrad 算法按坐标顺序的适应性是非常可取的。 :cite: Tieleman.Hinton.2012 建议以 RMSProp 算法作为将速率调度与坐标自适应学习率分离的简单修复方法。 问题在于,Adagrad 算法将梯度gt\mathbf{g}_tgt​...
4.6k 4 分钟

# 优化和深度学习 本节将讨论优化与深度学习之间的关系以及在深度学习中使用优化的挑战。对于深度学习问题,我们通常会先定义损失函数。一旦我们有了损失函数,我们就可以使用优化算法来尝试最小化损失。在优化中,损失函数通常被称为优化问题的目标函数。按照传统惯例,大多数优化算法都关注的是最小化。如果我们需要最大化目标,那么有一个简单的解决方案:在目标函数前加负号即可。 # 优化的目标 尽管优化提供了一种最大限度地减少深度学习损失函数的方法,但本质上,优化和深度学习的目标是根本不同的。前者主要关注的是最小化目标,后者则关注在给定有限数据量的情况下寻找合适的模型。在 :numref:...
11k 10 分钟

# 随机梯度下降 🏷 sec_sgd 在前面的章节中,我们一直在训练过程中使用随机梯度下降,但没有解释它为什么起作用。为了澄清这一点,我们刚在 :numref: sec_gd 中描述了梯度下降的基本原则。本节继续更详细地说明随机梯度下降(stochastic gradient descent)。 %matplotlib inlineimport mathimport torchfrom d2l import torch as d2l# 随机梯度更新 在深度学习中,目标函数通常是训练数据集中每个样本的损失函数的平均值。给定nnn...
2.7k 2 分钟

# 自动微分 🏷 sec_autograd 正如 :numref: sec_calculus 中所说,求导是几乎所有深度学习优化算法的关键步骤。 虽然求导的计算很简单,只需要一些基本的微积分。 但对于复杂的模型,手工进行更新是一件很痛苦的事情(而且经常容易出错)。 深度学习框架通过自动计算导数,即自动微分(automatic differentiation)来加快求导。 实际中,根据设计好的模型,系统会构建一个计算图(computational...
8.1k 7 分钟

# 微积分 🏷 sec_calculus 在 2500 年前,古希腊人把一个多边形分成三角形,并把它们的面积相加,才找到计算多边形面积的方法。 为了求出曲线形状(比如圆)的面积,古希腊人在这样的形状上刻内接多边形。 如 :numref: fig_circle_area 所示,内接多边形的等长边越多,就越接近圆。 这个过程也被称为逼近法(method of exhaustion)。 🏷 fig_circle_area 事实上,逼近法就是积分(integral calculus)的起源。 2000 多年后,微积分的另一支,微分(differential...
3.7k 3 分钟

# 查阅文档 由于篇幅限制,本书不可能介绍每一个 PyTorch 函数和类。 API 文档、其他教程和示例提供了本书之外的大量文档。 本节提供了一些查看 PyTorch API 的指导。 # 查找模块中的所有函数和类 为了知道模块中可以调用哪些函数和类,可以调用 dir 函数。 例如,我们可以 (查询随机数生成模块中的所有属性:) import torchprint(dir(torch.distributions))['AbsTransform', 'AffineTransform', 'Bernoulli', 'Beta',...
6.3k 6 分钟

# 数据操作 🏷 sec_ndarray 为了能够完成各种数据操作,我们需要某种方法来存储和操作数据。 通常,我们需要做两件重要的事:(1)获取数据;(2)将数据读入计算机后对其进行处理。 如果没有某种方法来存储数据,那么获取数据是没有意义的。 首先,我们介绍nnn 维数组,也称为张量(tensor)。 使用过 Python 中 NumPy 计算包的读者会对本部分很熟悉。 无论使用哪个深度学习框架,它的张量类(在 MXNet 中为 ndarray , 在 PyTorch 和 TensorFlow 中为 Tensor )都与 Numpy 的 ndarray 类似。 但深度学习框架又比...
2k 2 分钟

# 数据预处理 🏷 sec_pandas 为了能用深度学习来解决现实世界的问题,我们经常从预处理原始数据开始, 而不是从那些准备好的张量格式数据开始。 在 Python 中常用的数据分析工具中,我们通常使用 pandas 软件包。 像庞大的 Python 生态系统中的许多其他扩展包一样, pandas 可以与张量兼容。 本节我们将简要介绍使用 pandas 预处理原始数据,并将原始数据转换为张量格式的步骤。 后面的章节将介绍更多的数据预处理技术。 # 读取数据集 举一个例子,我们首先 (创建一个人工数据集,并存储在 CSV(逗号分隔值)文件) ../data/house_tiny.csv...