在下面的互动练习中,您将进一步探索神经网络的内部运作方式。首先,您将了解参数和超参数的变化如何影响网络的预测。然后,您将运用所学知识训练神经网络,以拟合非线性数据。
练习 1
以下 widget 会设置具有以下配置的神经网络:
- 包含值
0.00、0.00和0.00的 3 个神经元的输入层 - 具有 4 个神经元的隐藏层
- 具有 1 个神经元的输出层
- 应用于所有隐藏层节点和输出节点的 ReLU 激活函数
查看网络的初始设置(注意:请勿点击 ▶️ 或 >| 按钮),然后完成微件下方的任务。
任务 1
神经网络模型的三项输入特征的值均为 0.00。点击网络中的每个节点,即可查看所有初始化的值。在点击“播放”(▶️) 按钮之前,请回答以下问题:
现在,点击网络上方的“播放”(▶️) 按钮,并观看所有隐藏层和输出节点值的填充过程。您上面的回答是否正确?
点击此处查看说明
您获得的确切输出值会因权重和偏差形参的随机初始化方式而异。不过,由于输入层中的每个神经元的值均为 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 个节点的新隐藏层,如下所示:
- 点击文本“1 个隐藏层”左侧的 + 按钮,在输出层之前添加一个新的隐藏层。
- 点击新隐藏层上方的 + 按钮两次,为该层再添加 2 个节点。
您上面的回答是否正确?
点击此处查看说明
只有输出节点会发生变化。由于此神经网络的推理是“前馈”(计算从开始到结束),因此向网络添加新层只会影响新层之后的节点,而不会影响之前的节点。
任务 3
点击网络图表中第一个隐藏层的第二个节点(从上往下数)。在对网络配置进行任何更改之前,请回答以下问题:
现在,点击权重 w12(显示在第一个输入节点 x1 下方)的文本字段,将其值更改为 5.00,然后按 Enter 键。
观察图表的更新情况。
您的回答是否正确?验证答案时请务必谨慎:如果节点值没有变化,是否意味着底层计算没有变化?
点击此处查看说明
第一个隐藏层中受影响的唯一节点是第二个节点(您点击的节点)。第一个隐藏层中其他节点的值计算不包含 w12 作为参数,因此不受影响。第二个隐藏层中的所有节点都会受到影响,因为它们的计算依赖于第一个隐藏层中第二个节点的值。同样,输出节点值也会受到影响,因为其计算依赖于第二隐藏层中节点的值。
您是否认为答案是“无”,因为当您更改权重值时,网络中的任何节点值都没有发生变化?请注意,节点的基础计算可能会发生变化,但不会改变节点的值(例如,ReLU(0) 和 ReLU(-5) 都会生成 0 的输出)。 不要仅通过查看节点值来假设网络受到的影响;请务必同时查看计算结果。
练习 2
在“类别型数据”模块的特征交叉练习中,您手动构建了特征交叉,以拟合非线性数据。现在,您将了解是否可以构建一个神经网络,该网络可以在训练期间自动学习如何拟合非线性数据。
您的任务:配置一个神经网络,使其能够将下图中的橙点与蓝点分开,并在训练数据和测试数据上实现低于 0.2 的损失。
说明:
在下方的互动式 widget 中:
- 通过尝试以下部分配置设置来修改神经网络超参数:
- 点击网络图中的隐藏层标题左侧的 + 和 - 按钮,添加或移除隐藏层。
- 点击隐藏层列上方的 + 和 - 按钮,即可在隐藏层中添加或移除神经元。
- 如需更改学习率,请从图表上方的学习率下拉菜单中选择一个新值。
- 通过从图表上方的激活下拉菜单中选择新值来更改激活函数。
- 点击图表上方的“播放”(▶️) 按钮,使用指定的参数训练神经网络模型。
- 在训练过程中,观察模型拟合数据的可视化效果,以及输出部分中的测试损失和训练损失值。
- 如果模型在测试数据和训练数据上的损失未达到 0.2 以下,请点击“重置”,然后使用另一组配置设置重复执行第 1-3 步。重复此过程,直到获得理想的结果。
点击此处查看我们的解决方案
我们通过以下方式将测试损失和训练损失都降到了 0.2 以下:
- 添加 1 个包含 3 个神经元的隐藏层。
- 选择 0.01 的学习速率。
- 选择 ReLU 的激活函数。