神经网络基础:感知机、激活函数与反向传播
神经网络基础:感知机、激活函数与反向传播
1. 什么是神经网络
神经网络是一种模拟人脑神经元连接方式的计算模型,它由大量的节点(神经元)相互连接构成,能够从数据中自动学习复杂的模式和关系。神经网络是深度学习的基础,广泛应用于图像识别、自然语言处理、推荐系统等领域。
本教程将带你从最基本的单元——感知机开始,理解激活函数的作用,并掌握神经网络如何通过反向传播算法进行学习。
2. 感知机:神经网络的起点
2.1 感知机的结构
感知机是最简单的人工神经元模型,它接收多个输入信号,产生一个输出。每个输入对应一个权重,表示该输入的重要程度,神经元将所有加权输入求和,加上一个偏置,然后通过一个阶跃函数来决定是否激活。
- 输入(x₁, x₂, ..., xₙ):特征向量
- 权重(w₁, w₂, ..., wₙ):对应每个输入的强度
- 偏置(b):调节神经元被激活的难易度
- 加权和(z):
z = w₁x₁ + w₂x₂ + ... + wₙxₙ + b - 输出(y):
y = 1若z ≥ 0;y = 0若z < 0(阶跃函数)
2.2 感知机的几何意义
在二维平面上,感知机的决策边界是一条直线:w₁x₁ + w₂x₂ + b = 0。它能解决线性可分的分类问题(如逻辑与、或),但无法处理异或(XOR)这种非线性问题,这直接推动了多层神经网络的发展。
2.3 从感知机到多层神经网络
将多个感知机分层堆叠,并使前一层的输出成为后一层的输入,就构成了多层感知机(MLP)。当网络包含一个或多个隐藏层时,它可以逼近任意复杂的非线性函数,前提是激活函数不能是线性的。
3. 激活函数:引入非线性
如果没有激活函数,无论多少层神经网络都只能做线性变换。激活函数为神经元引入了非线性,使网络能够学习复杂的模式。以下是常见的激活函数:
3.1 Sigmoid 函数
公式:σ(z) = 1 / (1 + e⁻ᶻ)
- 输出范围:(0, 1),常用于二分类的输出层。
- 优点:平滑、可微,输出可以解释为概率。
- 缺点:容易出现梯度消失(当输入绝对值很大时,梯度趋近于0),且输出不以0为中心,可能影响优化效率。
3.2 Tanh 函数
公式:tanh(z) = (eᶻ - e⁻ᶻ) / (eᶻ + e⁻ᶻ)
- 输出范围:(-1, 1),以0为中心,通常优于 Sigmoid。
- 缺点:同样存在梯度消失问题。
3.3 ReLU(Rectified Linear Unit)
公式:ReLU(z) = max(0, z)
- 输出范围:[0, +∞)
- 优点:计算简单,收敛速度快;在正区间不存在梯度消失,目前最为常用。
- 缺点:当输入为负时梯度为0,可能导致神经元“死亡”(永远无法激活)。变体如 Leaky ReLU(
max(0.01z, z))可缓解此问题。
3.4 Softmax
公式:softmax(zᵢ) = eᶻⁱ / Σⱼ eᶻʲ
- 用于多分类的输出层,将一组实数转换为概率分布(每个值在0到1之间,且总和为1)。
如何选择激活函数
- 隐藏层:优先使用 ReLU(或其变体)作为默认选择。
- 二分类输出层:Sigmoid。
- 多分类输出层:Softmax。
- 回归输出层:恒等函数(即无激活)。
4. 反向传播:神经网络的学习算法
反向传播是训练多层神经网络的核心算法。它利用链式法则高效地计算损失函数对每个权重的梯度,然后通过梯度下降更新权重,使网络输出逐渐逼近真实标签。
4.1 前向传播
输入数据从输入层逐层向前计算,经过加权求和与激活函数,最终得到预测值。例如一个简单三层网络(输入层,一个隐藏层,输出层):
- 隐藏层加权和:
Z¹ = W¹ X + b¹ - 隐藏层激活:
A¹ = f¹(Z¹) - 输出层加权和:
Z² = W² A¹ + b² - 输出层激活:
ŷ = A² = f²(Z²)
4.2 损失函数
衡量预测值与真实值之间的差距。常见的有:
- 均方误差(MSE):用于回归,
L = (1/n) Σ (y - ŷ)² - 交叉熵损失:用于分类,
L = - Σ yᵢ log(ŷᵢ)(其中 y 是真实概率分布)
4.3 反向传播过程
目标:计算 ∂L/∂w 和 ∂L/∂b 以便更新参数。以交叉熵损失 + Softmax + Sigmoid 隐藏层的分类网络为例:
- 输出层误差:
δ² = ∂L/∂Z² = ŷ - y(当使用 softmax 和交叉熵时,这个简化是成立的) - 隐藏层误差:
δ¹ = (W²ᵀ δ²) ⊙ f¹'(Z¹),其中 ⊙ 表示逐元素相乘,f¹'是激活函数的导数。这一步将输出层的误差逐层反向传递。 - 计算梯度:
- 输出层权重梯度:
∂L/∂W² = δ² (A¹)ᵀ - 输出层偏置梯度:
∂L/∂b² = δ² - 隐藏层权重梯度:
∂L/∂W¹ = δ¹ Xᵀ - 隐藏层偏置梯度:
∂L/∂b¹ = δ¹
- 输出层权重梯度:
4.4 理解反向传播的关键
- 链式法则:复合函数的导数可以分解为每一层局部导数的乘积。反向传播就是沿着网络反向计算这种乘积。
- 误差分配:每个神经元对最终误差的“贡献”由它接收到的误差信号(δ)和其激活的梯度决定。
- 矩阵形式:实际实现时全程使用矩阵运算,利用向量化加速计算。
4.5 参数更新(梯度下降)
得到梯度后,沿着梯度的反方向更新参数,使损失减小:
W := W - α * ∂L/∂Wb := b - α * ∂L/∂b
其中 α 是学习率,控制更新步长。
5. 训练神经网络的完整步骤
- 准备数据:预处理(归一化、标准化),划分训练集/验证集。
- 定义网络结构:输入维度、隐藏层数量及大小、输出维度。
- 选择激活函数和损失函数。
- 初始化参数:常用小随机数初始化,破坏对称性。
- 循环多个 epoch:
- 前向传播:计算预测值。
- 计算损失。
- 反向传播:计算所有参数的梯度。
- 更新参数(使用优化器,如 SGD、Adam)。
- 评估模型:在验证集上监控性能,防止过拟合。
6. 总结
- 感知机 是基础的计算单元,线性分类器,多层堆叠构成神经网络。
- 激活函数 赋予网络非线性表达能力,ReLU 是隐藏层的首选。
- 反向传播 是高效计算梯度的算法,它基于链式法则,使网络能够通过梯度下降自动学习权重。
理解这三者,你就握住了打开深度学习大门的钥匙。在接下来的实践中,你将从零实现一个简单的神经网络分类器,巩固这些核心概念。