神经网络:节点和隐藏层

要构建一个学习非线性的神经网络,首先从以下熟悉的模型结构开始:形如 $y' = b + w_1x_1 + w_2x_2 + w_3x_3$ 的线性模型

我们可以将这个方程可视化如下图所示,其中 $x_1$、$x_2$ 和 $x_3$ 是我们的三个输入节点(蓝色),$y'$ 是我们的输出节点(绿色)。

练习 1

在上图中,权重偏差值已随机初始化。请完成以下任务,熟悉界面并探索线性模型。您可以暂时忽略“激活函数”下拉菜单;我们将在本模块的后续部分讨论此主题。

  1. 点击网络上方的播放(▶️)按钮,计算输入值 $x_1 = 1.00$、$x_2 = 2.00$ 和 $x_3 = 3.00$ 时输出节点的值。

  2. 单击输入层中的第二个节点,并将值从 2.00 增加到 2.50。请注意,输出节点的值会发生变化。选择输出节点(绿色),然后查看“计算”面板,了解输出值的计算方式。

  3. 点击输出节点(绿色),查看权重($w_1$、$w_2$、$w_3$)和偏差($b$)参数值。降低权重 $w_3$ 的值(请注意,输出节点的值和下面的计算结果已发生变化)。然后,增加偏差值。观察这些更改对模型输出的影响。

为网络添加层

请注意,在练习 1中调整网络权重和偏置值时,输入和输出之间的整体数学关系并没有改变。我们的模型仍然是一个线性模型。

但是,如果我们在输入层和输出层之间再添加一层呢?在神经网络术语中,输入层和输出层之间的额外层称为隐藏层,这些层中的节点称为神经元

隐藏层中每个神经元的值计算方式与线性模型的输出相同:将其所有输入(前一层网络神经元的值)与一个唯一的权重参数相乘,然后求和,再加上偏置项。类似地,下一层(此处为输出层)神经元的值也是以隐藏层神经元的值作为输入计算的。

这个新的隐藏层允许我们的模型使用另一组参数重新组合输入数据。这能帮助我们的模型学习非线性关系吗?

练习 2

我们在模型中添加了一个包含四个神经元的隐藏层。

点击网络上方的播放(▶️)按钮,计算输入值 $x_1 = 1.00$、$x_2 = 2.00$ 和 $x_3 = 3.00$ 时四个隐藏层节点和输出节点的值。

然后探索该模型,并用它来回答以下问题。

这个神经网络模型有多少个参数(权重和偏差)?
4
我们在练习 1中的原始模型有四个参数: w11w21w31和 b。由于该模型包含一个隐藏层,因此参数更多。
12
请注意,参数总数包括用于根据输入值计算隐藏层节点值的参数,以及用于根据隐藏层节点值计算输出值的参数。
16
请注意,参数总数包括权重参数和偏差参数。
21
隐藏层中每个节点的值都需要用到 4 个参数来计算:3 个权重(每个输入值对应一个权重)和一个偏置项,总共 16 个参数。输出值则需要用到 5 个参数:4 个权重(隐藏层中每个节点对应一个权重)和一个偏置项。因此,该神经网络总共有 21 个参数。

尝试修改模型参数,并观察对隐藏层节点值和输出值的影响(您可以查看下面的“计算”面板,了解这些值是如何计算的)。

这个模型能学习非线性吗?

是的
点击隐藏层中的每个节点和输出节点,并查看下面的计算过程。你注意到这些计算过程有什么共同之处吗?

如果您点击隐藏层中的每个节点并查看下面的计算,您会发现它们都是线性的(包括乘法和加法运算)。

如果您点击输出节点并查看下面的计算,您会发现该计算也是线性的。对线性计算的输出进行线性计算仍然是线性的,这意味着该模型无法学习非线性关系。