隐藏层是深度学习、神经网络和人工智能中非常基础的一个术语。它用来描述神经网络中位于输入层和输出层之间的计算层。换句话说,隐藏层是在回答:模型怎样把原始输入一步步加工成更有用的中间表示,再交给输出层完成预测。

如果说输入层负责接收数据,输出层负责给出结果,那么隐藏层就是神经网络真正进行特征变换和表示学习的主要部分。它通过权重、偏置和激活函数,把上一层的信息转换成新的表示。因此,隐藏层常用于多层感知器、卷积神经网络、循环神经网络、Transformer、表示学习和深度学习模型训练,是理解神经网络表达能力的重要基础。

一、基本概念:什么是隐藏层

隐藏层(Hidden Layer)是神经网络中位于输入层和输出层之间的层。

一个简单神经网络可以表示为:

输入层 → 隐藏层 → 输出层

如果有多个隐藏层,则可以表示为:

输入层 → 隐藏层 1 → 隐藏层 2 → … → 输出层

隐藏层之所以叫“隐藏”,不是因为它真的无法查看,而是因为它既不是原始输入,也不是最终输出,而是模型内部产生的中间表示。

设输入为:

一个隐藏层通常可以写为:

其中:

• x 表示输入向量

• W 表示权重矩阵

• b 表示偏置向量

• f 表示激活函数

• h 表示隐藏层输出,也叫隐藏表示

从通俗角度看,隐藏层可以理解为:模型内部的加工层,它把原始输入转换成更适合完成任务的中间特征。

打开网易新闻 查看精彩图片

图 1:隐藏层在神经网络中的位置与作用

例如,在图像识别中,输入层接收像素值,输出层给出类别,而隐藏层可能逐步提取边缘、纹理、局部形状和物体部件。

因此,隐藏层是神经网络从“原始数据”走向“任务结果”的中间桥梁。

二、为什么需要隐藏层

隐藏层之所以重要,是因为原始输入通常不能直接支持复杂判断。

例如,一张图片输入给模型时,本质上是一组像素值。单个像素很难直接说明图片中是否有猫、狗或汽车。模型需要把这些像素逐步组合成更有意义的视觉特征:

像素 → 边缘 → 纹理 → 局部形状 → 物体部件 → 类别

同样,在文本处理中,原始 token 本身也需要被加工成上下文相关的语义表示:

token → 词义表示 → 短语关系 → 句子语义 → 任务输出

隐藏层的作用正是完成这种中间变换。

如果没有隐藏层,模型往往退化为简单线性模型。例如:

这类模型只能直接从输入到输出建立较简单的关系。

加入隐藏层后,模型可以变成:

其中,h 是模型学到的中间表示。

从通俗角度看:隐藏层让模型不必直接从原始输入跳到最终答案,而是可以先学会一系列中间特征。

这正是神经网络能够处理复杂非线性问题的重要原因。

三、隐藏层的核心计算过程

隐藏层的基本计算通常包括两步:

线性变换 → 非线性激活

1、线性变换

隐藏层首先对上一层输入进行加权组合:

其中:

• W 表示权重矩阵

• x 表示上一层输入

• b 表示偏置向量

• z 表示线性输入

如果展开看,第 j 个隐藏神经元可以写为:

其中:

• zⱼ 表示第 j 个隐藏神经元的线性输入

• wⱼᵢ 表示第 i 个输入到第 j 个神经元的权重

• bⱼ 表示第 j 个神经元的偏置

从通俗角度看:线性变换负责把上一层的信息按不同权重重新组合。

2、非线性激活

线性变换之后,隐藏层通常会使用激活函数:

常见激活函数包括:

• ReLU

• Tanh

• Sigmoid

• GELU

例如,ReLU 定义为:

如果没有激活函数,多层线性变换叠加后仍然等价于一个线性变换:

因此,激活函数的作用是:让隐藏层具有非线性表达能力。

从通俗角度看:

• 权重和偏置负责“重新组合信息”

• 激活函数负责“引入非线性判断”

二者共同构成隐藏层的基本计算。

四、隐藏层如何学习特征表示

隐藏层最重要的作用之一,是学习表示。

(Representation Learning)是指模型自动把原始数据转换成更有用的内部表示。

一个神经网络中的多层隐藏层可以写为:

其中:

• h₁ 表示第一层隐藏表示

• h₂ 表示第二层隐藏表示

• h₃ 表示第三层隐藏表示

每一层都在上一层表示基础上继续变换。

从通俗角度看:隐藏层会把原始输入逐步翻译成模型更容易理解的数学表示。

打开网易新闻 查看精彩图片

图 2:隐藏层如何逐层学习特征表示

以图像识别为例:

• 第一层隐藏层可能学习边缘、角点、颜色变化

• 中间隐藏层可能学习纹理、局部结构

• 更深隐藏层可能学习眼睛、车轮、动物脸部等高级特征

以文本模型为例:

• 较低层可能学习词形、词义、局部搭配

• 中间层可能学习句法关系和上下文依赖

• 较高层可能学习任务相关语义表示

因此,隐藏层不是简单的中间计算,而是神经网络自动构建特征体系的地方。

五、隐藏层数量与神经网络深度

隐藏层的数量决定了神经网络的深度。

如果网络只有一个隐藏层,通常称为浅层神经网络或简单多层感知器

如果网络有多个隐藏层,就形成更深的神经网络:

输入层 → 隐藏层 1 → 隐藏层 2 → 隐藏层 3 → 输出层

深度学习中的“深”,主要就是指模型包含多层隐藏层或多级特征变换。

从通俗角度看:隐藏层越多,模型可以进行越多级的信息加工。

例如:

• 低层:简单特征

• 中层:组合特征

• 高层:语义特征

不过,隐藏层并不是越多越好。

隐藏层增加会带来:

• 更强表达能力

• 更多参数

• 更高计算成本

• 更大过拟合风险

• 更复杂的训练问题

例如,深层网络可能遇到梯度消失、梯度爆炸或训练不稳定等问题。

因此,选择隐藏层数量时,需要结合:

• 数据规模

• 任务复杂度

• 模型类型

• 计算资源

• 验证集表现

从实践角度看,隐藏层数量是一个重要结构超参数,需要通过实验和验证集评估来确定。

六、隐藏层宽度与神经元数量

除了隐藏层数量,每个隐藏层中神经元的数量也很重要。

隐藏层神经元数量通常称为隐藏层宽度。

例如:

输入层 → 64 个神经元 → 32 个神经元 → 输出层

可以表示为:

hidden_layer_sizes=(64, 32)

其中:

• 第一隐藏层有 64 个神经元

• 第二隐藏层有 32 个神经元

隐藏层宽度影响模型容量。

如果神经元太少,模型可能表达能力不足,容易欠拟合

如果神经元太多,模型参数量增加,可能更容易过拟合,也会增加计算成本。

从通俗角度看:

• 隐藏层数量:决定模型加工多少轮

• 隐藏层宽度:决定每一轮能提取多少种特征

例如,在图像任务中,一个隐藏层神经元可能关注某种局部模式;更多神经元意味着模型可以同时关注更多模式。

不过,宽度增加并不总是带来更好效果。

如果数据量不足或正则化不足,较宽网络可能只是在记忆训练集。

因此,隐藏层宽度同样需要结合验证集表现、任务复杂度和计算资源进行选择。

七、隐藏层在不同网络中的形式

隐藏层并不只存在于普通多层感知器中。不同类型的神经网络中,隐藏层有不同表现形式。

1、多层感知器中的隐藏层

在多层感知器中,隐藏层通常是全连接层加激活函数:

它主要用于对向量特征进行非线性变换。

常用于:

• 表格数据分类

• 表格数据回归

• 简单向量建模

• 基础神经网络教学

2、卷积神经网络中的隐藏层

在卷积神经网络中,隐藏层常由卷积层、激活函数、池化层等组成:

卷积层 → ReLU → 池化层

它主要用于提取图像局部特征。

例如:

像素 → 边缘 → 纹理 → 局部形状 → 物体部件

3、循环神经网络中的隐藏状态

在循环神经网络中,隐藏层常与隐藏状态(Hidden State)相关。

隐藏状态会在时间步之间传递,用于保存序列中的历史信息:

当前输入 + 上一步隐藏状态 → 当前隐藏状态

它适合处理时间序列、文本序列和语音序列。

4、Transformer 中的隐藏表示

在 Transformer 中,每一层都会产生 token 的隐藏表示。

这些隐藏表示经过注意力机制和前馈网络不断更新:

token 表示 → 注意力层 → 前馈网络 → 新的隐藏表示

大语言模型中的每个 token 在每一层都有自己的隐藏表示。

从通俗角度看:不同神经网络中的隐藏层形式不同,但共同作用都是学习输入的中间表示。

八、隐藏层的优势、局限与使用注意事项

1、隐藏层的主要优势

隐藏层最大的优势是增强模型表达能力。

它让神经网络不再只是从输入到输出的一次线性映射,而可以通过多层变换学习复杂非线性关系。

其次,隐藏层支持表示学习。

模型可以自动学习中间特征,减少对人工特征工程的依赖。

再次,多层隐藏层可以形成层次化特征。

低层学习简单模式,高层学习复杂语义。

从通俗角度看,隐藏层的优势在于:它让模型能够把复杂问题拆成多级加工过程。

2、隐藏层的主要局限

隐藏层也有局限。

首先,隐藏层越多、越宽,参数通常越多,计算成本越高。

其次,模型可能更难解释。

隐藏层中每个神经元或每个维度的含义不一定能直接用人类语言说明。

再次,隐藏层过多或过宽可能导致过拟合。

模型可能记住训练数据细节,而不是学到一般规律。

此外,深层网络训练可能遇到梯度消失、梯度爆炸等问题,需要合适的初始化、归一化、残差连接和优化器。

3、使用隐藏层时需要注意的问题

使用隐藏层时,需要注意:

• 隐藏层不是越多越好

• 神经元数量不是越多越好

• 隐藏层后通常需要激活函数

• 输入特征常需要标准化

• 复杂模型需要关注过拟合

• 深层模型训练要关注梯度传播

• 模型效果应以验证集和测试集表现为准

从实践角度看,隐藏层是神经网络能力的来源之一,但它必须和数据规模、任务复杂度、训练方法相匹配。

九、Python 示例

下面给出几个简单示例,用来帮助理解隐藏层的基本使用。

示例 1:使用 Scikit-learn 指定隐藏层结构

这个例子中:

• hidden_layer_sizes=(16, 8) 表示两个隐藏层

• 第一隐藏层有 16 个神经元

• 第二隐藏层有 8 个神经元

• activation="relu" 表示隐藏层使用 ReLU 激活函数

示例 2:使用 PyTorch 定义包含隐藏层的网络

这个网络结构为:

4 维输入 → 16 维隐藏层 → 8 维隐藏层 → 3 类输出

其中:

• nn.Linear(4, 16) 是第一隐藏层的线性变换

• nn.ReLU() 是隐藏层激活函数

• nn.Linear(16, 8) 是第二隐藏层的线性变换

• 最后一层输出 logits

示例 3:提取隐藏层输出

有时,我们希望查看某一隐藏层学到的中间表示。

这个例子中:

• h1 是第一隐藏层表示

• h2 是第二隐藏层表示

• logits 是输出层结果

从表示学习角度看,h1 和 h2 都是模型对输入数据学习到的中间表示。

示例 4:比较不同隐藏层规模

    

这个例子展示:

• 不同隐藏层规模会影响模型表现

• 更大的隐藏层不一定总是更好

• 最终应以验证集或测试集表现判断结构是否合适

小结

隐藏层是神经网络中位于输入层和输出层之间的计算层。它通过权重、偏置和激活函数,把输入逐步转换成更有用的中间表示。隐藏层是神经网络表达能力和表示学习能力的重要来源:低层可以学习简单特征,高层可以学习复杂语义。对初学者而言,可以把隐藏层理解为:模型内部负责加工和重组信息的层,它让神经网络能够从原始数据逐步走向最终判断。

点赞有美意,赞赏是鼓励