神经网络:互动练习

在下面的互动练习中,您将进一步探索神经网络的内部运作方式。首先,您将了解参数和超参数的变化如何影响网络的预测。然后,您将运用所学知识训练神经网络,以拟合非线性数据。

练习 1

以下 widget 会设置具有以下配置的神经网络:

  • 包含值 0.000.000.00 的 3 个神经元的输入层
  • 具有 4 个神经元的隐藏层
  • 具有 1 个神经元的输出层
  • 应用于所有隐藏层节点和输出节点的 ReLU 激活函数

查看网络的初始设置(注意:请勿点击 ▶️>| 按钮),然后完成微件下方的任务。

任务 1

神经网络模型的三项输入特征的值均为 0.00。点击网络中的每个节点,即可查看所有初始化的值。在点击“播放”(▶️) 按钮之前,请回答以下问题:

您认为会生成哪种输出值:正值、负值还是 0?
正输出值
负输出值
输出值为 0

现在,点击网络上方的“播放”(▶️) 按钮,并观看所有隐藏层和输出节点值的填充过程。您上面的回答是否正确?

点击此处查看说明

您获得的确切输出值会因权重和偏差形参的随机初始化方式而异。不过,由于输入层中的每个神经元的值均为 0,因此用于计算隐藏层节点值的权重将全部归零。例如,第一个隐藏层节点的计算如下:

y = ReLU(w11* 0.00 + w21* 0.00 + w31* 0.00 + b)

y = ReLU(b)

因此,每个隐藏层节点的值将等于偏置 (b) 的 ReLU 值,如果 b 为负,则该值为 0;如果 b 为 0 或正,则该值为 b 本身。

然后,输出节点的值将按如下方式计算:

y = ReLU(w11* x11 + w21* x21 + w31* x31 + w41* x41 + b)

任务 2

在修改神经网络之前,请回答以下问题:

如果您在第一个隐藏层之后向神经网络添加另一个隐藏层,并为这个新层提供 3 个节点,同时保持所有输入和权重/偏差参数不变,那么哪些其他节点的计算会受到影响?
网络中的所有节点(输入节点除外)
仅限第一个隐藏层中的节点
仅限输出节点

现在,修改神经网络以添加一个包含 3 个节点的新隐藏层,如下所示:

  1. 点击文本“1 个隐藏层”左侧的 + 按钮,在输出层之前添加一个新的隐藏层。
  2. 点击新隐藏层上方的 + 按钮两次,为该层再添加 2 个节点。

您上面的回答是否正确?

点击此处查看说明

只有输出节点会发生变化。由于此神经网络的推理是“前馈”(计算从开始到结束),因此向网络添加新层只会影响新层之后的节点,而不会影响之前的节点。

任务 3

点击网络图表中第一个隐藏层的第二个节点(从上往下数)。在对网络配置进行任何更改之前,请回答以下问题:

如果您更改权重 w12(显示在第一个输入节点 x1 下方)的值,那么对于某些输入值,哪些其他节点的计算可能会受到影响?
第一个隐藏层中的第二个节点、第二个隐藏层中的所有节点以及输出节点。
第一个隐藏层、第二个隐藏层和输出层中的所有节点。

现在,点击权重 w12(显示在第一个输入节点 x1 下方)的文本字段,将其值更改为 5.00,然后按 Enter 键。 观察图表的更新情况。

您的回答是否正确?验证答案时请务必谨慎:如果节点值没有变化,是否意味着底层计算没有变化?

点击此处查看说明

第一个隐藏层中受影响的唯一节点是第二个节点(您点击的节点)。第一个隐藏层中其他节点的值计算不包含 w12 作为参数,因此不受影响。第二个隐藏层中的所有节点都会受到影响,因为它们的计算依赖于第一个隐藏层中第二个节点的值。同样,输出节点值也会受到影响,因为其计算依赖于第二隐藏层中节点的值。

您是否认为答案是“无”,因为当您更改权重值时,网络中的任何节点值都没有发生变化?请注意,节点的基础计算可能会发生变化,但不会改变节点的值(例如,ReLU(0) 和 ReLU(-5) 都会生成 0 的输出)。 不要仅通过查看节点值来假设网络受到的影响;请务必同时查看计算结果。

练习 2

“类别型数据”模块特征交叉练习中,您手动构建了特征交叉,以拟合非线性数据。现在,您将了解是否可以构建一个神经网络,该网络可以在训练期间自动学习如何拟合非线性数据。

您的任务:配置一个神经网络,使其能够将下图中的橙点与蓝点分开,并在训练数据和测试数据上实现低于 0.2 的损失。

说明:

在下方的互动式 widget 中:

  1. 通过尝试以下部分配置设置来修改神经网络超参数:
    • 点击网络图中的隐藏层标题左侧的 +- 按钮,添加或移除隐藏层。
    • 点击隐藏层列上方的 +- 按钮,即可在隐藏层中添加或移除神经元。
    • 如需更改学习率,请从图表上方的学习率下拉菜单中选择一个新值。
    • 通过从图表上方的激活下拉菜单中选择新值来更改激活函数。
  2. 点击图表上方的“播放”(▶️) 按钮,使用指定的参数训练神经网络模型。
  3. 在训练过程中,观察模型拟合数据的可视化效果,以及输出部分中的测试损失训练损失值。
  4. 如果模型在测试数据和训练数据上的损失未达到 0.2 以下,请点击“重置”,然后使用另一组配置设置重复执行第 1-3 步。重复此过程,直到获得理想的结果。

点击此处查看我们的解决方案

我们通过以下方式将测试损失和训练损失都降到了 0.2 以下:

  • 添加 1 个包含 3 个神经元的隐藏层。
  • 选择 0.01 的学习速率。
  • 选择 ReLU 的激活函数。