神经网络简介。多层感知器 在上一节中,你学习了最简单的神经网络模型——单层感知器,这是一个线性的二分类模型。 在这一节中,我们将扩展这个模型到一个更灵活的框架,使我们能够: 除了二分类外,还能进行多分类 除了分类外,还能解决回归问题 分离非线性可分的类别 我们还将开发自己的模块化框架,使用Python构建不同的神经网络架构。 课前小测验 机器学习形式化 让我们从形式化机器学习问题开始。假设我们有一个带有标签的数据集 X 和 Y,我们需要建立一个模型 f 来做出最准确的预测。预测的质量由损失函数 ℒ 衡量。
在上一节中,你学习了最简单的神经网络模型——单层感知器,这是一个线性的二分类模型。
在这一节中,我们将扩展这个模型到一个更灵活的框架,使我们能够:
我们还将开发自己的模块化框架,使用Python构建不同的神经网络架构。
让我们从形式化机器学习问题开始。假设我们有一个带有标签的数据集 X 和 Y,我们需要建立一个模型 f 来做出最准确的预测。预测的质量由损失函数 ℒ 衡量。常用的损失函数有:
对于单层感知器,函数 f 被定义为一个线性函数 f(x)=wx+b(这里 w 是权重矩阵,x 是输入特征向量,b 是偏置向量)。对于不同的神经网络架构,这个函数可以具有更复杂的形式。
在分类的情况下,通常希望得到对应类别的概率作为网络输出。为了将任意数字转换为概率(例如归一化输出),我们经常使用softmax函数 σ,函数 f 变成 f(x)=σ(wx+b)
在上面的 f 定义中,w 和 b 称为参数 θ=⟨w,b⟩。给定数据集 ⟨X,Y⟩,我们可以计算整个数据集上的总误差,作为参数 θ 的函数。
✅ 神经网络训练的目标是通过调整参数 θ 来最小化误差
有一种著名的函数优化方法叫做梯度下降。其思想是计算损失函数相对于参数的导数(在多维情况下称为梯度),然后以这种方式调整参数,使误差减小。这可以形式化如下:
在训练过程中,优化步骤应该基于整个数据集来计算(记住损失是通过所有训练样本的和来计算的)。然而,在实际应用中,我们取数据集的小部分称为小批量(minibatches),并根据数据子集计算梯度。因为每次都是随机抽取子集,所以这种方法被称为随机梯度下降(SGD)。
正如我们上面看到的,单层网络能够对线性可分的类别进行分类。为了构建更丰富的模型,我们可以组合多个网络层。数学上,这意味着函数 f 将具有更复杂的结构,并且将在多个步骤中计算:
这里,α 是非线性激活函数,σ 是 softmax 函数,参数 θ=<w1,b1,w2,b2。
梯度下降算法保持不变,但计算梯度会变得更加困难。根据链式法则,我们可以计算导数如下:
✅ 链式法则用于计算损失函数相对于参数的导数。
注意,所有这些表达式的最左边部分是相同的,因此我们可以有效地从损失函数开始,通过计算图“逆向”计算导数。因此,训练多层感知器的方法称为反向传播或'backprop'。
TODO: 图片引用
✅ 我们将在我们的笔记本示例中更详细地介绍反向传播。
在这节课中,我们自己构建了一个神经网络库,并用它完成了一个简单的二维分类任务。
在配套的笔记本中,你将实现自己的框架来构建和训练多层感知器。你可以详细了解现代神经网络的工作原理。
请继续到 OwnFramework 笔记本并完成它。
反向传播是AI和ML中常用的一个算法,值得更深入地研究详情
在这个实验中,你需要使用在本节课中构建的框架来解决MNIST手写数字分类问题。
声明:
本文件灏天文库团队进行了翻译。尽管我们力求准确,但请注意,翻译可能包含错误或不准确之处。原文档以其原始语言为准。我们不对因使用此翻译而产生的任何误解或误译负责。