返回首页

Roadmap
更新于 2026年10月29日 全文 1288 字未阅读

神经网络:节点和隐藏层#

在上一节内容中我们说到了非线性问题,如果要搭出一个能学到非线性的神经网络,我们先从一个你已经很熟悉的模型结构说起——一个线性模型:

$$ y' = b + w_1x_1 + w_2x_2 + w_3x_3 $$

这个方程可以这样看:$x_1$、$x_2$ 和 $x_3$ 是我们的三个输入节点(蓝色),$y'$ 是输出节点(绿色)。整张网络就这么简单——一层输入,一层输出,中间没有别的。

练习 1:先熟练使用线性模型#

在上面的模型里,权重(weight)和偏置(bias)的值都是随机初始化的。接下来的三个任务,一边帮我们熟悉这个界面,一边摸清线性模型的门道。

界面上的 Activation Function(激活函数)下拉框,这会儿可以先放着不管——我们会在本模块后面再专门讲它。

  1. 点一下网络上方的播放按钮(▶️),让它算出在输入 $x_1 = 1.00$、$x_2 = 2.00$、$x_3 = 3.00$ 时,输出节点的取值。

  2. 点一下输入层里的第二个节点,把它的值从 2.00 改成 2.50。注意输出节点的取值也跟着变了。选中输出节点(绿色),再看看 Calculations 面板,就知道这个输出值究竟是怎么算出来的。

    关于计算的几点说明:

    • 界面上显示的数值,都四舍五入到了小数点后两位。

    • Linear() 函数只是把传进去的值原样返回。

  3. 点一下输出节点(绿色),就能看到它的权重($w_1$、$w_2$、$w_3$)和偏置($b$)参数值。把 $w_3$ 的权重调小一点(同样注意,输出节点的取值和下方的计算过程也都跟着变了),然后再把偏置调大一点。看看这些改动最后是怎么影响模型输出的。

给网络加一层#

这里先停一下,做个小结:刚才在练习 1 里调整权重和偏置,并没有改变输入与输出之间整体的数学关系——我们的模型仍然是一个线性模型。

那么,如果在输入层和输出层之间再加一层呢?

在神经网络的术语里,输入层与输出层之间额外加上的这些层,叫做隐藏层(hidden layers);而这些层里的节点,叫做神经元(neurons)。

隐藏层中每个神经元的值,计算方式和线性模型的输出完全一样:把它的各个输入(也就是上一层的神经元)分别乘上各自的权重参数,再把乘积加起来,最后加上偏置。而下一层(这里就是输出层)的神经元,则是拿隐藏层算出来的神经元值当作输入,按同样的方式计算。

这个新加的隐藏层,让模型可以用另一组参数重新组合输入数据。那么,它能帮模型学到非线性关系吗?

练习 2:数参数并检验非线性#

我们已经给模型加了一个包含 4 个神经元的隐藏层。

先点网络上方播放按钮(▶️),让它算出在输入 $x_1 = 1.00$、$x_2 = 2.00$、$x_3 = 3.00$ 时,4 个隐藏层节点和输出节点各自的取值。

然后就着这个模型来回调整一下,并用它来回答下面两个问题。

问题 1:这个神经网络模型有多少个参数(权重和偏置)?#

  • A. 21 个

  • B. 4 个

  • C. 12 个

  • D. 16 个

想动手验证的话,可以改一改模型的参数,观察隐藏层节点的值和输出值的变化——下方的 Calculations 面板里能看到这些值是怎么算出来的。

问题 2:这个模型能学到非线性吗?#

  • A. 能

  • B. 不能

总结一下这一节的内容:隐藏层让模型多了一组可以自由组合输入的参数,可只要每一层内部做的还全是线性运算,堆出来的仍然是一个线性模型。那非线性到底从哪来?答案就留在下一节的激活函数里。

MLWM: 关于「神经元、全连接层、隐藏层」这几个概念的更完整梳理,可以参见内容「深度学习线性回归入门:多项式回归与神经网络建模基础」;激活函数如何把线性网络掰成非线性模型,参见「激活函数原理:Sigmoid、Tanh、ReLU 与 LeakyReLU」。

关键术语:

  • 偏置(Bias)
  • 隐藏层(Hidden layer)
  • 输入层(Input layer)
  • 线性模型(Linear model)
  • 模型(Model)
  • 神经网络(Neural network)
  • 神经元(Neuron)
  • 非线性(Nonlinear)
  • 参数(Parameter)
  • 权重(Weight)
阅读 --