要构建一个学习非线性的神经网络,首先从以下熟悉的模型结构开始:形如 $y' = b + w_1x_1 + w_2x_2 + w_3x_3$ 的线性模型。
我们可以将这个方程可视化如下图所示,其中 $x_1$、$x_2$ 和 $x_3$ 是我们的三个输入节点(蓝色),$y'$ 是我们的输出节点(绿色)。
练习 1
在上图中,权重和偏差值已随机初始化。请完成以下任务,熟悉界面并探索线性模型。您可以暂时忽略“激活函数”下拉菜单;我们将在本模块的后续部分讨论此主题。
点击网络上方的播放(▶️)按钮,计算输入值 $x_1 = 1.00$、$x_2 = 2.00$ 和 $x_3 = 3.00$ 时输出节点的值。
单击输入层中的第二个节点,并将值从 2.00 增加到 2.50。请注意,输出节点的值会发生变化。选择输出节点(绿色),然后查看“计算”面板,了解输出值的计算方式。
点击输出节点(绿色),查看权重($w_1$、$w_2$、$w_3$)和偏差($b$)参数值。降低权重 $w_3$ 的值(请注意,输出节点的值和下面的计算结果已发生变化)。然后,增加偏差值。观察这些更改对模型输出的影响。
为网络添加层
请注意,在练习 1中调整网络权重和偏置值时,输入和输出之间的整体数学关系并没有改变。我们的模型仍然是一个线性模型。
但是,如果我们在输入层和输出层之间再添加一层呢?在神经网络术语中,输入层和输出层之间的额外层称为隐藏层,这些层中的节点称为神经元。
隐藏层中每个神经元的值计算方式与线性模型的输出相同:将其所有输入(前一层网络神经元的值)与一个唯一的权重参数相乘,然后求和,再加上偏置项。类似地,下一层(此处为输出层)神经元的值也是以隐藏层神经元的值作为输入计算的。
这个新的隐藏层允许我们的模型使用另一组参数重新组合输入数据。这能帮助我们的模型学习非线性关系吗?
练习 2
我们在模型中添加了一个包含四个神经元的隐藏层。
点击网络上方的播放(▶️)按钮,计算输入值 $x_1 = 1.00$、$x_2 = 2.00$ 和 $x_3 = 3.00$ 时四个隐藏层节点和输出节点的值。
然后探索该模型,并用它来回答以下问题。
尝试修改模型参数,并观察对隐藏层节点值和输出值的影响(您可以查看下面的“计算”面板,了解这些值是如何计算的)。
这个模型能学习非线性吗?
如果您点击隐藏层中的每个节点并查看下面的计算,您会发现它们都是线性的(包括乘法和加法运算)。
如果您点击输出节点并查看下面的计算,您会发现该计算也是线性的。对线性计算的输出进行线性计算仍然是线性的,这意味着该模型无法学习非线性关系。