【深度学习笔记】2 浅层神经网络
浅层神经网络是指 隐藏层较少(通常为0-2层) 的神经网络,是深度学习发展早期的经典结构。与之相对的是“深层神经网络”(Deep Neural Network,DNN),后者通常包含多个隐藏层(如10层、100层甚至更多)。
1. 典型结构
浅层神经网络主要包括以下两种形式:
-
无隐藏层:仅输入层直接连接输出层(本质是线性模型或广义线性模型)。
- 例如:逻辑回归(Logistic Regression)、感知机(Perceptron)。
- 数学形式:
输出 = f(W·X + b)
,其中f
是激活函数(如Sigmoid)。
-
单隐藏层:输入层 → 1个隐藏层 → 输出层。
- 例如:单隐层前馈网络(Single Hidden Layer Feedforward Network)。
- 数学形式:
隐藏层输出 H = f1(W1·X + b1) 最终输出 Y = f2(W2·H + b2)
f1
、f2
为激活函数(如ReLU、Sigmoid)。
2. 核心特点
- 表达能力有限:
浅层网络可以逼近任意连续函数(根据通用近似定理,Universal Approximation Theorem),但需要大量隐藏层神经元,且难以高效学习复杂特征。 - 训练简单:
参数较少,计算量小,不易过拟合,适合小规模数据集。 - 可解释性较强:
权重和特征的关系相对直接(深层网络的抽象特征难以解释)。
3. 与深层神经网络的对比
特性 | 浅层神经网络 | 深层神经网络 |
---|---|---|
隐藏层数 | 0-2层 | ≥3层(通常远多于3层) |
特征抽象能力 | 只能学习简单特征 | 通过多层堆叠学习层次化特征 |
数据需求 | 小规模数据即可训练 | 需要大规模数据避免过拟合 |
计算复杂度 | 低 | 高(依赖GPU等硬件加速) |
典型应用 | 线性可分问题、简单分类/回归 | 图像识别、自然语言处理等复杂任务 |
4. 经典浅层神经网络示例
(1) 感知机(Perceptron)
- 结构:输入层 → 输出层(无隐藏层)。
- 激活函数:阶跃函数(Step Function)。
- 局限:只能解决线性可分问题(如AND、OR运算),无法处理XOR等非线性问题。
(2) 单隐层前馈网络
- 结构:输入层 → 1个隐藏层(含多个神经元)→ 输出层。
- 激活函数:Sigmoid、Tanh、ReLU等。
- 能力:可拟合任意连续函数(但需要足够多的隐藏神经元)。
5. 为什么需要深层网络?
尽管浅层网络理论上是“万能近似器”,但在实践中存在以下问题:
- 效率低下:
学习复杂函数需要指数级增长的神经元数量(例如用浅层网络拟合图像特征会极其低效)。 - 特征泛化差:
深层网络通过分层抽象(如边缘→纹理→物体部件→整体物体),能更高效地捕捉数据的层次化结构。
✅ 关键结论:
浅层网络适合简单任务或计算资源受限的场景,而深层网络在复杂任务(如计算机视觉、自然语言处理)中表现更优。
6. 代码示例(单隐层网络)
以下是一个用PyTorch实现的单隐藏层神经网络(二分类任务):
import torch
import torch.nn as nnclass ShallowNN(nn.Module):def __init__(self, input_size, hidden_size):super().__init__()self.layer1 = nn.Linear(input_size, hidden_size) # 隐藏层self.output = nn.Linear(hidden_size, 1) # 输出层self.activation = nn.ReLU() # 激活函数def forward(self, x):x = self.activation(self.layer1(x)) # 隐藏层计算x = torch.sigmoid(self.output(x)) # 输出层Sigmoidreturn x# 示例:输入特征维度=10,隐藏层神经元=50
model = ShallowNN(input_size=10, hidden_size=50)
总结
- 浅层神经网络:结构简单,隐藏层≤2层,适合解决线性或简单非线性问题。
- 深层神经网络:通过多层非线性变换学习高级特征,适合复杂任务。
- 选择依据:根据任务复杂度、数据量和计算资源权衡。