神经网络框架


文档摘要

神经网络框架 我们已经了解到,为了高效地训练神经网络,我们需要做两件事: 对张量进行操作,例如乘法、加法以及计算一些函数(如Sigmoid或Softmax) 计算所有表达式的梯度,以便执行梯度下降优化 课前测验 虽然 库可以完成第一部分的工作,但我们还需要某种机制来计算梯度。在我们在上一节中开发的我们自己的框架里,我们不得不手动编写所有导数函数,这些函数在执行反向传播的 方法内部。理想情况下,一个框架应该能够让我们计算任何我们定义的表达式的梯度。 另一个重要的方面是能够在GPU或其他专用计算单元(如TPU)上执行计算。深度神经网络训练需要大量的计算,能够在GPU上并行化这些计算非常重要。 ✅ "并行化"是指将计算分布在多个设备上。

神经网络框架

我们已经了解到,为了高效地训练神经网络,我们需要做两件事:

  • 对张量进行操作,例如乘法、加法以及计算一些函数(如Sigmoid或Softmax)
  • 计算所有表达式的梯度,以便执行梯度下降优化

课前测验

虽然 numpy 库可以完成第一部分的工作,但我们还需要某种机制来计算梯度。在我们在上一节中开发的我们自己的框架里,我们不得不手动编写所有导数函数,这些函数在执行反向传播的 backward 方法内部。理想情况下,一个框架应该能够让我们计算任何我们定义的表达式的梯度。

另一个重要的方面是能够在GPU或其他专用计算单元(如TPU)上执行计算。深度神经网络训练需要大量的计算,能够在GPU上并行化这些计算非常重要。

✅ "并行化"是指将计算分布在多个设备上。

目前,最流行的两种神经网络框架是:TensorFlowPyTorch。两者都提供了可以在CPU和GPU上操作张量的低级API。在低级API之上,还有高级API,分别称为KerasPyTorch Lightning

低级API TensorFlow PyTorch
高级API Keras PyTorch Lightning

低级API 在两个框架中都允许你构建所谓的计算图。这个图定义了给定输入参数时如何计算输出(通常是损失函数),并且可以在有GPU的情况下推送到GPU进行计算。有函数可以对这个计算图进行微分并计算梯度,然后这些梯度可以用于优化模型参数。

高级API 将神经网络视为一系列层,这使得构建大多数神经网络变得非常简单。训练模型通常需要准备数据,然后调用一个 fit 函数来完成任务。

高级API允许你快速构建典型的神经网络,而无需担心很多细节。同时,低级API提供了对训练过程的更多控制,因此它们在研究中被大量使用,当你处理新的神经网络架构时尤其如此。

重要的是要理解,你可以同时使用这两种API。例如,你可以使用低级API开发自己的网络层架构,然后将其嵌入到用高级API构建和训练的大网络中。或者,你可以使用高级API以层序列的形式定义网络,然后使用你自己的低级训练循环来进行优化。两种API都基于相同的底层概念,并且设计为能很好地协同工作。

学习

在这门课程中,我们将提供大部分内容,既适用于PyTorch也适用于TensorFlow。你可以选择你偏好的框架,并只阅读相应的笔记本。如果你不确定选择哪个框架,请阅读一些关于PyTorch与TensorFlow的讨论。你也可以尝试使用两种框架,以便更好地理解它们。

在可能的情况下,我们将使用高级API来简化学习过程。然而,我们认为从头了解神经网络的工作原理非常重要,因此在开始时我们会先从低级API和张量入手。但是,如果你希望快速上手而不花太多时间在这些细节上,你可以跳过这些内容,直接进入高级API笔记本。

✍️ 练习:框架

继续在以下笔记本中学习:

低级API TensorFlow+Keras 笔记本 PyTorch
高级API Keras PyTorch Lightning

掌握了框架后,让我们回顾一下过拟合的概念。

过拟合

过拟合是机器学习中的一个重要概念,非常重要!

考虑以下问题:用5个点(由x表示)进行逼近:

线性 过拟合
线性模型,2个参数 非线性模型,7个参数
训练误差 = 5.3 训练误差 = 0
验证误差 = 5.1 验证误差 = 20
  • 在左边,我们看到一个好的直线近似。由于参数数量适中,模型正确捕捉到了点分布的规律。
  • 在右边,模型过于强大。因为我们只有5个点,而模型有7个参数,它可以调整以通过所有点,使训练误差变为0。然而,这阻止了模型理解数据背后的正确模式,因此验证误差非常高。

在模型的丰富性(参数数量)和训练样本数量之间找到正确的平衡非常重要。

为什么会出现过拟合

  • 训练数据不足
  • 模型过于强大
  • 输入数据中有太多噪声

如何检测过拟合

从上面的图表可以看出,可以通过非常低的训练误差和较高的验证误差来检测过拟合。通常,在训练过程中,我们将会看到训练误差和验证误差开始下降,然后在某个时刻验证误差可能会停止下降并开始上升。这是过拟合的迹象,表明我们应该在此时停止训练(或至少保存模型的快照)。

过拟合

如何防止过拟合

如果你发现出现了过拟合,你可以采取以下措施之一:

  • 增加训练数据的数量
  • 减少模型的复杂性
  • 使用一些正则化技术,例如Dropout,我们稍后会介绍。

过拟合与偏差-方差权衡

过拟合实际上是一个更通用的统计问题,称为偏差-方差权衡。如果我们考虑模型中的潜在误差来源,我们可以看到两种类型的误差:

  • 偏差误差 是由于我们的算法无法正确捕捉训练数据之间的关系导致的。这可能是由于模型不够强大(欠拟合)的结果。
  • 方差误差 是由于模型试图逼近输入数据中的噪声而不是有意义的关系导致的(过拟合)。

在训练过程中,偏差误差会减小(因为模型学会了近似数据),而方差误差会增加。重要的是在手动(当我们检测到过拟合时)或自动(通过引入正则化)停止训练,以防止过拟合。

结论

在这节课中,你了解了两种最流行的AI框架TensorFlow和PyTorch的不同API。此外,你还学习了一个非常重要的主题——过拟合。

挑战

在配套的笔记本中,你会发现底部有一些“任务”;请完成这些任务。

课后测验

复习与自学

研究以下主题:

  • TensorFlow
  • PyTorch
  • 过拟合

问自己以下问题:

  • TensorFlow和PyTorch有什么区别?
  • 过拟合和欠拟合有什么区别?

声明:
本文件灏天文库团队进行了翻译。尽管我们力求准确,但请注意,翻译可能包含错误或不准确之处。原文档以其原始语言为准。我们不对因使用此翻译而产生的任何误解或误译负责。


作者与出处
原作者: microsoft
来源:microsoft
许可证:MIT
整理: 灏天文库整理
由灏天文库结构化整理,提供目录导航、全文检索与在线阅读,便于系统化学习
发布者: 作者: microsoft 转发
评论区 (0)
U