第 2 章:基本组成部分:神经元与层
在第一章中,我们从宏观上了解了神经网络是什么以及它的强大之处。现在,是时候深入其内部,一探究竟了。本章我们将聚焦于构成神经网络的最基本单元——神经元(节点),以及它们是如何组织成"层"的。我们将从历史上第一个,也是最简单的神经元模型开始。
第 2 章:基本组成部分:神经元与层
在第一章中,我们从宏观上了解了神经网络是什么以及它的强大之处。现在,是时候深入其内部,一探究竟了。本章我们将聚焦于构成神经网络的最基本单元——神经元(节点),以及它们是如何组织成"层"的。
我们将从历史上第一个,也是最简单的神经元模型开始。
2.1 感知器:最简单的神经元
感知器(Perceptron) 由科学家弗兰克·罗森布拉特(Frank Rosenblatt)在1957年提出,可以被看作是现代神经网络的"鼻祖"。它是一个极其简单的模型,但却完美地诠释了神经网络中一些最核心的思想。
从本质上讲,一个感知器就是一个 二元分类器(Binary Classifier)。它的作用就像一个决策者,对于给定的多种输入证据,它只能做出"是"(输出1)或"否"(输出0)的判断。
感知器的结构
想象一下你要决定"今天是否要去户外烧烤?"。你可能会考虑以下几个因素(输入):
- 天气好吗? (是=1, 否=0)
- 朋友们都去吗? (是=1, 否=0)
- 烧烤设备齐全吗? (是=1, 否=0)
你心里会对这些因素有不同的看重程度(权重)。比如,"天气"可能是最重要的(权重为6),"朋友"次之(权重为3),而"设备"可能没那么重要(权重为2)。
此外,你可能本身就有一个想去烧烤的"倾向性"(偏置)。比如你特别喜欢烧烤,那么这个倾向性就是一个正值;如果你有点懒,倾向于不去,那它就是一个负值。
感知器的工作方式与此完全相同。
图 2.1: 一个更通用的感知器模型,展示了输入、权重、求和与激活函数 (来源: Wikimedia Commons)
一个感知器包含三个主要部分:
- 输入 (Inputs): 一组二元输入值(
x1,x2, …)。在我们的例子里,就是天气、朋友和设备的情况。 - 权重 (Weights): 每个输入都对应一个权重(
w1,w2, …),代表该输入的重要性。 - 偏置 (Bias): 一个独立的数值
b,它不依赖于任何输入,代表了神经元被激活的固有倾向。
感知器如何做决策?
感知器的决策过程分为两步:
-
计算加权和:将所有的输入与其对应的权重相乘,然后把它们全部加起来,最后再加上偏置。这个结果我们称之为
z。
z=(x1⋅w1)+(x2⋅w2)+⋯+(xn⋅wn)+b z = (x_1 \cdot w_1) + (x_2 \cdot w_2) + \dots + (x_n \cdot w_n) + b z=(x1⋅w1)+(x2⋅w2)+⋯+(xn⋅wn)+b
或者用更简洁的向量形式表示:
z=∑i=1n(xi⋅wi)+b z = \sum_{i=1}^{n} (x_i \cdot w_i) + b z=i=1∑n(xi⋅wi)+b -
应用激活函数:感知器使用一个非常简单的激活函数——阶跃函数(Step Function)。它规定:
- 如果加权和
z大于 0,则感知器输出 1(“激活"或"是”)。 - 如果加权和
z小于或等于 0,则感知器输出 0(“不激活"或"否”)。
output={1if z>00if z≤0 \text{output} = \begin{cases} 1 & \text{if } z > 0 \\ 0 & \text{if } z \le 0 \end{cases} output={10if z>0if z≤0
- 如果加权和
通过调整权重和偏置的值,我们就可以让感知器学习如何对不同的输入组合做出正确的决策。例如,我们可以训练一个感知器来实现逻辑"与"门:只有当输入 x1 和 x2 均为 1 时,才输出 1。
尽管感知器很简单,甚至无法解决一些线性不可分的问题(如"异或"问题),但它为后来更复杂的神经网络模型奠定了至关重要的基础。我们将在下一节看到,现代神经元是如何在感知器的基础上进行演进的。
2.2 现代神经元与激活函数 (Sigmoid, Tanh, ReLU)
感知器中使用的阶跃函数(Step Function)有一个明显的缺点:它太过"刚硬"。输出要么是0,要么是1,不存在中间状态。这意味着,当权重或偏置发生微小的改变时,输出可能会发生剧烈的跳变。这种特性使得基于微积分的优化方法(我们将在下一章学习的"梯度下降")难以有效工作。
为了让神经网络能够平滑地学习,我们需要一个"可微"的激活函数。这意味着函数的输出会随着输入的微小变化而平滑地变化。此外,激活函数还有一个至关重要的作用:为网络引入非线性。如果一个多层网络只使用线性激活函数(即 f(x) = x),那么整个网络本质上就等同于一个单层网络,无法学习复杂的数据模式。
下面介绍三种在现代神经网络中被广泛使用的激活函数。
Sigmoid 函数
Sigmoid 函数是最早被广泛使用的非线性激活函数之一。它会将任何实数值压缩到 (0, 1) 的区间内。这使得它的输出可以被解释为一种"概率",例如一个神经元被激活的概率。
图 2.2: 多种S型(Sigmoid-like)函数对比,Tanh 函数(绿色)是其中一种。(来源: Wikimedia Commons)
数学公式:
σ(z)=11+e−z \sigma(z) = \frac{1}{1 + e^{-z}} σ(z)=1+e−z1
优点:
- 平滑可导:方便使用梯度下降等算法进行优化。
- 输出范围有限:输出被限制在 (0, 1) 之间,可以用作概率解释,且有助于保持数据稳定。
缺点:
- 梯度消失 (Vanishing Gradient):当输入
z的绝对值非常大时,Sigmoid 函数的曲线变得非常平坦,其导数(梯度)趋近于0。在深度网络中,这会导致梯度信号在反向传播时逐层衰减,使得网络深层的权重很难被有效更新,训练变得异常缓慢。 - 输出非零中心:函数的输出恒大于0。这会导致后续层的输入都是正数,在梯度下降的动态过程中可能引起不理想的"之"字形更新。
Tanh (双曲正切) 函数
Tanh 函数可以看作是 Sigmoid 函数的"升级版"。它同样是一个S形的曲线,但将输出值压缩到了 (-1, 1) 的区间内。
数学公式:
tanh(z)=ez−e−zez+e−z \tanh(z) = \frac{e^z - e^{-z}}{e^z + e^{-z}} tanh(z)=ez+e−zez−e−z
优点:
- 输出以0为中心:相比 Sigmoid,Tanh 的输出是零中心的,这通常能让网络在训练时收敛得更快。
- 梯度更大:在
z接近0的区域,Tanh 的梯度比 Sigmoid 更大,这也有助于加速训练。
缺点:
- 梯度消失:Tanh 函数同样存在梯度消失的问题。当输入饱和(即绝对值很大)时,梯度同样会变得非常小。
ReLU (Rectified Linear Unit, 修正线性单元)
ReLU 是目前深度学习领域,尤其是计算机视觉中最受欢迎的激活函数。它的规则极其简单,但效果却非常好。
图 2.3: ReLU (蓝色) 和其平滑变体 Softplus (绿色) 的函数图像。(来源: Wikimedia Commons)
数学公式:
ReLU(z)=max(0,z) \text{ReLU}(z) = \max(0, z) ReLU(z)=max(0,z)
优点:
- 计算高效:它只涉及一个简单的比较操作,计算成本远低于需要指数运算的 Sigmoid 和 Tanh。
- 缓解梯度消失:当输入
z > 0时,ReLU 的导数恒为1。这使得梯度能够很好地在网络中传播,从而可以训练更深的网络,极大地缓解了梯度消失问题。 - 引入稀疏性:它会使一部分神经元的输出为0,这造成了网络的"稀疏性"。稀疏的网络可能更容易训练,并且在一定程度上能防止过拟合。
缺点:
- Dying ReLU (神经元死亡) 问题:如果一个神经元的权重在训练中更新不当,导致其接收到的所有输入的加权和
z总是负数,那么这个神经元的输出将永远是0,其梯度也永远是0。这个神经元在后续训练中将无法再被激活或更新,就像"死掉"了一样。 - 非零中心输出:和 Sigmoid 一样,它的输出也不是零中心的。
选择哪种激活函数取决于具体的应用场景,但目前在大多数深度学习任务中,ReLU 及其变种(如 Leaky ReLU, PReLU 等)是隐藏层的首选。
2.3 神经网络的层级结构
单个的神经元虽然功能强大,但它们的力量来自于被组织成一个结构化的整体。一个典型的神经网络是由多个"层"(Layer)堆叠而成的。信息从第一层开始,单向地流向最后一层。

图 2.4: 一个标准的前馈神经网络,清晰地展示了输入层、隐藏层和输出层。
一个最基础的前馈神经网络(Feedforward Neural Network)通常包含三种类型的层:
-
输入层 (Input Layer)
- 作用:这是网络的"入口"。它不执行任何计算(没有激活函数),其唯一的任务是接收原始的输入数据,并将其传递给下一层。
- 结构:输入层中神经元的数量由你的数据特征决定。例如,如果你要处理一张 28x28 像素的灰度图片,那么输入层就需要 28 * 28 = 784 个神经元,每个神经元对应一个像素点。
-
隐藏层 (Hidden Layers)
- 作用:这些是夹在输入层和输出层之间的所有层。它们是网络真正的"大脑",负责绝大部分的计算和特征提取。信息从前一层传来,经过加权求和、偏置及激活函数的处理后,再传递给后一层。
- 结构:一个神经网络可以没有隐藏层(那就退化成了感知器),也可以有一个或多个隐藏层。拥有多个隐藏层的网络通常被称为"深度神经网络"(Deep Neural Network),这也是"深度学习"一词的由来。
- 为什么叫"隐藏"? 因为这些层的输出值并不是我们直接关心的最终结果,它们只是在网络内部传递的中间状态,像一个"黑盒子"里的工作过程。正是这些隐藏层,赋予了神经网络学习从简单到复杂特征的能力。例如,在图像识别中,第一层隐藏层可能学习识别边缘,第二层学习组合边缘构成形状,第三层再组合形状构成物体的部件。
-
输出层 (Output Layer)
- 作用:这是网络的"出口",负责产生最终的预测结果。
- 结构:输出层的神经元数量和激活函数由你的任务目标决定。
- 二元分类问题(如判断邮件是否为垃圾邮件):输出层通常只有一个神经元,使用 Sigmoid 激活函数,输出一个介于0和1之间的概率值。
- 多元分类问题(如识别图片中的数字0-9):输出层通常有 N 个神经元(N为类别数,这里是10),常使用 Softmax 激活函数,它可以输出 N 个类别各自的概率。
- 回归问题(如预测房价):输出层通常也只有一个神经元,并且可能不使用任何激活函数(或使用线性激活函数),以便输出任意的数值。
2.4 再谈权重 (Weights) 与偏置 (Biases)
现在我们已经了解了神经元和层的概念,让我们再次聚焦于驱动这一切运转的核心参数:权重和偏置。
- 权重 (Weights):可以被理解为神经元之间连接的 强度。一个连接上的权重越大(无论正负),代表前一个神经元的输出对后一个神经元的影响就越强。一个正权重表示"促进"或"激发",一个负权重则表示"抑制"。
- 偏置 (Biases):是每个神经元(除输入层外)自带的一个可调节参数。你可以把它理解为神经元的 固有激活阈值。一个较大的偏置会让神经元更容易被激活,反之则更难。它确保了即使所有输入都为零,神经元仍有机会被激活。
权重和偏置是神经网络中真正需要"学习"的东西。 整个网络的训练过程,本质上就是一个通过特定算法(如梯度下降和反向传播),不断微调网络中所有权重和偏置值的过程,最终目标是找到一组最优的参数,使得网络对于给定的输入,能够产生最接近真实情况的输出。
都为零,神经元仍有机会被激活。
权重和偏置是神经网络中真正需要"学习"的东西。 整个网络的训练过程,本质上就是一个通过特定算法(如梯度下降和反向传播),不断微调网络中所有权重和偏置值的过程,最终目标是找到一组最优的参数,使得网络对于给定的输入,能够产生最接近真实情况的输出。
至此,我们已经全面了解了神经网络的静态组成部分。下一章,我们将进入最激动人心的部分:神经网络是如何学习的? 我们将探索前向传播、损失函数、梯度下降和反向传播这些核心动态过程。
更多推荐



所有评论(0)