第 9 章 荒野中的 PyTorch 野生 PyTorch
本作品已使用人工智能进行翻译。欢迎您提供反馈和意见:translation-feedback@oreilly.com
在最后一章,我们将看看其他人和公司是如何使用 PyTorch 的。你还会学到一些新技术,包括调整图片大小、生成文本以及创建可以骗过神经网络的图像。与之前的章节略有不同的是,我们将集中讨论如何使用现有的库来启动和运行,而不是从头开始学习 PyTorch。我希望这将成为进一步探索的跳板。
首先,让我们来看看从数据中获取最大收益的一些最新方法。
数据增强:混合与平滑
早在第 4 章中,我们就研究了增强数据的各种方法,以帮助减少模型在训练数据集上的过拟合。用更少的数据做更多事情的能力自然是 Deep Learning 研究的一个高活跃度领域,在本节中,我们将介绍两种日益流行的从数据中榨取最后一滴信号的方法。这两种方法也将改变我们计算损失函数的方式,因此这将是对我们刚刚创建的更灵活的训练循环的一次很好的测试。
混合
mixup是一种引人入胜的增强技术,它源于我们对模型功能的错误理解。我们对模型的通常理解是,我们向它发送一张如图 9-1所示的图像,并希望模型返回该图像是一只狐狸的结果。
图 9-1. 一只狐狸
但正如你所知道的,我们从模型中得到的不仅仅是这个结果;我们得到的是一个包含所有可能类别的张量,并且希望该张量中值最大的元素是狐狸类别。事实上,在理想情况下,我们会得到一个除了狐狸类中的 1 之外全部为 0 的张量。
但神经网络很难做到这一点!总是会存在不确定性,而我们的激活函数(如softmax )很难让张量达到 1 或 0。mixup 利用了这一点,提出了一个问题:图 9-2 的类是什么?
图 9-2. 猫和狐狸的混合体
在我们看来,这可能有点乱,但其中 60% 是猫,40% 是狐狸。如果我们不试图让我们的模型做出明确的猜测,而是让它针对两个类别呢?这将意味着我们的输出张量在训练中不会遇到接近但永远不会达到 1 的问题,而且我们可以改变每张混合图像的不同比例,从而提高模型的泛化能力。
但是,我们如何计算这种混合图像的损失函数呢?好吧,如果p是第一幅图像在混合图像中所占的百分比,那么我们就有了以下简单的线性组合:
p * loss(image1) + (1-p) * loss(image2)
它必须预测这些图像,对吗?而我们需要根据这些图像在最终混合图像中的比例进行缩放,因此这个新的损失函数似乎是合理的。要选择p,我们可以使用从正态分布或均匀分布中抽取的随机数,就像我们在许多其他情况下所做的那样。不过,混合论文的作者认为,从贝塔分布中抽取的样本在实践中效果更好。1不知道贝塔分布是什么样的吗?在看到这篇论文之前,我也不知道!图 9-3给出了论文中描述的特征。