反向传播算法
反向传播学习概述(Back Propagation Learning)
基本思想
反向传播算法是训练多层前馈神经网络(如多层感知机 MLP)的一种监督学习算法,其基本思路为:
通过误差反向传播来更新各层权重,从而逐步减少预测误差。
它包括两个阶段:
- 前向传播(Forward Pass):
- 输入信号流过网络,产生输出
- 输出与期望结果对比,计算误差
- 反向传播(Backward Pass):
- 将误差从输出层反向传播至隐藏层
- 基于误差更新权重,减少误差
符号说明(Symbols)
符号 | 含义 |
---|---|
xi(n)x_i(n)xi(n) | 第 nnn 次迭代的第 iii 个输入 |
yj(n)y_j(n)yj(n) | 第 nnn 次迭代中第 jjj 个神经元输出 |
dj(n)d_j(n)dj(n) | 期望输出 |
ej(n)=dj(n)−yj(n)e_j(n) = d_j(n) - y_j(n)ej(n)=dj(n)−yj(n) | 输出层误差 |
wji(n)w_{ji}(n)wji(n) | 第 nnn 次迭代时连接 i→ji \rightarrow ji→j 的权重 |
vj(n)v_j(n)vj(n) | 神经元 jjj 的加权输入(净输入) |
φj(⋅)\varphi_j(\cdot)φj(⋅) | 激活函数 |
θj\theta_jθj | 神经元的阈值 |
η\etaη | 学习率 |
δj(n)\delta_j(n)δj(n) | 局部梯度(误差信号) |
误差函数与梯度定义
- 单次样本误差函数(instantaneous error):
E(n)=12∑j∈C[dj(n)−yj(n)]2 E(n) = \frac{1}{2} \sum_{j \in C} \left[d_j(n) - y_j(n)\right]^2 E(n)=21j∈C∑[dj(n)−yj(n)]2
- 平均误差(用于 batch 模式):
Eav=1N∑n=1NE(n) E_{av} = \frac{1}{N} \sum_{n=1}^{N} E(n) Eav=N1n=1∑NE(n)
批量(Batch)模式:
- 使用整个训练集计算误差后统一更新权重。
- 优点:梯度估计稳定。
- 缺点:需要较多内存。
在线(增量)模式:
- 每看到一个样本立即更新权重。
- 学习快但震荡大。
前向传播(Forward Pass)
对于神经元 jjj:
- 净输入:
vj(n)=∑iwji(n)⋅yi(n) v_j(n) = \sum_{i} w_{ji}(n) \cdot y_i(n) vj(n)=i∑wji(n)⋅yi(n)
- 输出:
yj(n)=φj(vj(n)) y_j(n) = \varphi_j(v_j(n)) yj(n)=φj(vj(n))
反向传播过程(Backward Pass)
梯度计算公式(链式法则):
∂E(n)∂wji(n)=∂E(n)∂vj(n)⋅∂vj(n)∂wji(n) \frac{\partial E(n)}{\partial w_{ji}(n)} = \frac{\partial E(n)}{\partial v_j(n)} \cdot \frac{\partial v_j(n)}{\partial w_{ji}(n)} ∂wji(n)∂E(n)=∂vj(n)∂E(n)⋅∂wji(n)∂vj(n)
根据前向传播中的公式,我们有:
∂vj(n)∂wji(n)=∂∂wji(n)[∑i=0pwji(n)yi(n)]=yi(n)
\frac{\partial v_j(n)}{\partial w_{j i}(n)}=\frac{\partial}{\partial w_{j i}(n)}\left[\sum_{i=0}^p w_{j i}(n) y_i(n)\right]=y_i(n)
∂wji(n)∂vj(n)=∂wji(n)∂[i=0∑pwji(n)yi(n)]=yi(n)
接着我们定义:
δj(n)=−∂E(n)∂vj(n)
\delta_j(n) = -\frac{\partial E(n)}{\partial v_j(n)}
δj(n)=−∂vj(n)∂E(n)
那么梯度的公式可以写成:
∂E(n)∂wji(n)=−δj(n)⋅yi(n)
\frac{\partial E(n)}{\partial w_{ji}(n)} = -\delta_j(n) \cdot y_i(n)
∂wji(n)∂E(n)=−δj(n)⋅yi(n)
并且这么定义我们也可以按下面的形式定义权重更新公式。
权重更新公式
权重改变量:
Δwji(n)=η⋅δj(n)⋅yi(n)
\Delta w_{ji}(n) = \eta \cdot \delta_j(n) \cdot y_i(n)
Δwji(n)=η⋅δj(n)⋅yi(n)
权重更新:
wji(n+1)=wji(n)+Δwji(n)=wji(n)+ηδj(n)yi(n)
w_{j i}(n+1)=w_{j i}(n)+\Delta w_{j i}(n)=w_{j i}(n)+\eta \delta_j(n) y_i(n)
wji(n+1)=wji(n)+Δwji(n)=wji(n)+ηδj(n)yi(n)
那么如何计算 δj(n)\delta_j(n)δj(n)
-
如果j是输出层神经元
-
根据:E(n)=12∑j∈Cej2(n)ej(n)=dj(n)−yj(n)E(n)=\frac{1}{2} \sum_{j \in C} e_j^2(n) \quad e_j(n)=d_j(n)-y_j(n)E(n)=21∑j∈Cej2(n)ej(n)=dj(n)−yj(n)
那么我们有:
δj(n)=−∂E(n)∂vj(n)=−∂E(n)∂yj(n)∂yj(n)∂vj(n)=−∂∂yj(n)[12∑j∈c(dj(n)−yj(n))2]⋅∂(φ(vj(n)))∂vj(n)=(dj(n)−yj(n))φj′(vj(n)) \begin{aligned} \delta_j(n) & =-\frac{\partial E(n)}{\partial v_j(n)}=-\frac{\partial E(n)}{\partial y_j(n)} \frac{\partial y_j(n)}{\partial v_j(n)} \\ & =-\frac{\partial}{\partial y_j(n)}\left[\frac{1}{2} \sum_{j \in c}\left(d_j(n)-y_j(n)\right)^2\right] \cdot \frac{\partial\left(\varphi\left(v_j(n)\right)\right)}{\partial v_j(n)} \\ & =\left(d_j(n)-y_j(n)\right) \varphi_j^{\prime}\left(v_j(n)\right) \end{aligned} δj(n)=−∂vj(n)∂E(n)=−∂yj(n)∂E(n)∂vj(n)∂yj(n)=−∂yj(n)∂[21j∈c∑(dj(n)−yj(n))2]⋅∂vj(n)∂(φ(vj(n)))=(dj(n)−yj(n))φj′(vj(n))
-
-
如果j是隐藏层神经元
-
我们没有预期值可以使用。因此,我们使用与之相连的神经元传播的误差:
-
我们借助与它相连的神经元k来求解。我们可以直接认为k是输出层神经元,因为如果k不是,我们就重复以上过程直到借助的神经元是输出层神经元。
-
我们的目的是求解: δj(n)\delta_j(n)δj(n)
-
根据链式法则,我们有:
δj(n)=−∂E(n)∂yj(n)∂yj(n)∂vj(n)=−∂E(n)∂yj(n)φ′(vj(n)) \delta_j(n)=-\frac{\partial E(n)}{\partial y_j(n)} \frac{\partial y_j(n)}{\partial v_j(n)}=-\frac{\partial E(n)}{\partial y_j(n)} \varphi^{\prime}\left(v_j(n)\right) δj(n)=−∂yj(n)∂E(n)∂vj(n)∂yj(n)=−∂yj(n)∂E(n)φ′(vj(n)) -
j 和 k 由wkjw_{kj}wkj连接,也就是说vk(n)=∑jwkj(n)⋅yj(n)v_k(n) = \sum_{j} w_{kj}(n) \cdot y_j(n)vk(n)=∑jwkj(n)⋅yj(n)。对于上式的$\frac{\partial E(n)}{\partial y_j(n)} $使用链式法则:
∂E(n)∂yj(n)=∑k∂E(n)∂vk(n)⋅∂vk(n)∂yj(n)=∑k∂E(n)∂vk(n)⋅wkj(n) \frac{\partial E(n)}{\partial y_j(n)} = \sum_k \frac{\partial E(n)}{\partial v_k(n)} \cdot \frac{\partial v_k(n)}{\partial y_j(n)} = \sum_k \frac{\partial E(n)}{\partial v_k(n)} \cdot w_{kj}(n) ∂yj(n)∂E(n)=k∑∂vk(n)∂E(n)⋅∂yj(n)∂vk(n)=k∑∂vk(n)∂E(n)⋅wkj(n) -
由于k 是输出层神经元,我们有:
∂E(n)∂vk(n)=−δk(n)=−(dk(n)−yk(n))φ′(vk(n)) \frac{\partial E(n)}{\partial v_k(n)}=-\delta_k(n)=-\left(d_k(n)-y_k(n)\right) \varphi^{\prime}\left(v_k(n)\right) ∂vk(n)∂E(n)=−δk(n)=−(dk(n)−yk(n))φ′(vk(n)) -
综上我们得到了:
δj(n)=φj′(vj(n))∑kδk(n)wkj(n)=φj′(vj(n))∑k(dk(n)−yk(n))φ′(vk(n))wkj(n) \begin{aligned} \delta_j(n) & =\varphi_j^{\prime}\left(v_j(n)\right) \sum_k \delta_k(n) w_{k j}(n) \\ & =\varphi_j^{\prime}\left(v_j(n)\right) \sum_k\left(d_k(n)-y_k(n)\right) \varphi^{\prime}\left(v_k(n)\right) w_{k j}(n) \end{aligned} δj(n)=φj′(vj(n))k∑δk(n)wkj(n)=φj′(vj(n))k∑(dk(n)−yk(n))φ′(vk(n))wkj(n)
-
-
激活函数要求
为了支持反向传播,激活函数必须是可微的。
- 常用的 sigmoid 函数:
φ(v)=11+e−v,φ′(v)=φ(v)(1−φ(v)) \varphi(v) = \frac{1}{1 + e^{-v}}, \quad \varphi'(v) = \varphi(v)(1 - \varphi(v)) φ(v)=1+e−v1,φ′(v)=φ(v)(1−φ(v))
yj(n)=φ(vj(n))=11+exp(−vj(n)),−∞<vj(n)<∞∂j(n)∂j(n)=φ′(vj(n))=exp(−vj(n))[1+exp(−vj(n))]2φ′(vj(n))=yj(n)[1−yj(n)] \begin{aligned} & y_j(n)=\varphi\left(v_j(n)\right)=\frac{1}{1+\exp \left(-v_j(n)\right)},-\infty<v_j(n)<\infty \\ & \frac{\partial_j(n)}{\partial_j(n)}=\varphi^{\prime}\left(v_j(n)\right)=\frac{\exp \left(-v_j(n)\right)}{\left[1+\exp \left(-v_j(n)\right)\right]^2} \\ & \varphi^{\prime}\left(v_j(n)\right)=y_j(n)\left[1-y_j(n)\right] \end{aligned} yj(n)=φ(vj(n))=1+exp(−vj(n))1,−∞<vj(n)<∞∂j(n)∂j(n)=φ′(vj(n))=[1+exp(−vj(n))]2exp(−vj(n))φ′(vj(n))=yj(n)[1−yj(n)]
Learning Rate(学习率)详解
学习率 η\etaη 是什么?
- 它控制着每次梯度下降过程中步长的大小。
- 太大 → 容易震荡或发散(overshoot)。
- 太小 → 收敛速度很慢,甚至陷入局部最小值。
加入动量项(Momentum Term)
为了解决收敛过程中的震荡问题,引入了动量(Momentum)项:
公式如下:
Δwji(n)=αΔwji(n−1)+ηδj(n)yi(n)
\Delta w_{ji}(n) = \alpha \Delta w_{ji}(n - 1) + \eta \delta_j(n) y_i(n)
Δwji(n)=αΔwji(n−1)+ηδj(n)yi(n)
解释各项含义:
- Δwji(n)\Delta w_{ji}(n)Δwji(n):当前的权重改变量;
- Δwji(n−1)\Delta w_{ji}(n-1)Δwji(n−1):上一次的权重改变量(记忆);
- α\alphaα:动量系数,控制“惯性”大小,一般设在 0.5~0.9;
- η\etaη:学习率;
- δj(n)\delta_j(n)δj(n):误差信号;
- yi(n)y_i(n)yi(n):输入。
直观理解:
当前的权重更新 = 上一次的更新趋势 + 当前梯度方向
→ 使得更新路径“更顺滑”,避免来回震荡。
展开为时间序列的形式
将上面的式子展开成累加形式:
Δwji(n)=η∑t=0nαn−tδj(t)yi(t)
\Delta w_{ji}(n) = \eta \sum_{t=0}^{n} \alpha^{n - t} \delta_j(t) y_i(t)
Δwji(n)=ηt=0∑nαn−tδj(t)yi(t)
这是因为动量项可以看作一种指数衰减的累计误差影响。它会保留历史更新的部分影响,衰减后加到当前更新中。
相当于对过去的所有梯度积累,但“越久远的记忆越淡”。
对应梯度下降公式的重写
注意,误差信号 δj(t)yi(t)\delta_j(t) y_i(t)δj(t)yi(t) 就是梯度的一部分,因此我们可以改写为:
Δwji(n)=−η∑t=0nαn−t∂E(t)∂wji(t)
\Delta w_{ji}(n) = -\eta \sum_{t=0}^{n} \alpha^{n - t} \frac{\partial E(t)}{\partial w_{ji}(t)}
Δwji(n)=−ηt=0∑nαn−t∂wji(t)∂E(t)
这表示我们实际上是在进行一个带有动量的加权梯度下降,每一项梯度都乘了一个衰减因子。
为什么要求 0≤∣α∣<10 \leq |\alpha| < 10≤∣α∣<1?
- 这是为了收敛性:
- 若 ∣α∣≥1|\alpha| \geq 1∣α∣≥1,旧信息的影响不会衰减,可能导致不收敛;
- 当 α=0\alpha = 0α=0,就是普通梯度下降;
- 当 α\alphaα 越大,历史更新影响越大,但不能过头。
Stopping Criteria(停止准则)
为什么需要“停止准则”?
反向传播算法是一个迭代优化算法,如果没有停止条件,它会一直训练下去。
但实际上我们希望在:
- 误差足够小的时候停止;
- 或者在效果不再明显提升时停止;
- 否则可能会导致过拟合、浪费计算资源等问题。
常用的两类停止准则:
基于梯度大小
∥∇E∥<ϵ \|\nabla E\| < \epsilon ∥∇E∥<ϵ
- 当梯度的欧几里得范数足够小(如 ϵ=10−3\epsilon = 10^{-3}ϵ=10−3),说明:
- 当前处于极小值附近;
- 权重再怎么动,误差也不会下降太多。
基于误差变化(per epoch)
- 当每个 epoch 的平均误差 EavE_{av}Eav 下降到一定阈值,比如:
- Eav<0.01E_{av} < 0.01Eav<0.01(误差占总范围的1%以内);
- 或者连续多轮误差没有明显下降,也可以提前终止。
其他问题
Stochastic vs. Batch Update(随机 vs 批量更新)
- Stochastic(随机/逐样本)模式:
- 每次只用一个样本计算梯度并更新权重。
- 优点:内存占用低,更新更频繁,有利于跳出局部最优。
- 尤其适合大规模数据集或冗余样本多的情况。
- Batch(批量)模式:
- 每个 epoch 用全部训练样本计算一次总梯度后再更新。
- 优点:梯度估计更精确,收敛路径更稳定。
- 缺点:内存开销大,更新慢。
Maximizing Information Content(最大化信息含量)
每个训练样本的选取应使其对网络训练的信息增益最大化。
如何实现?
- 选择当前误差最大的样本(错误最多 → 信息量大)。
- 选择与已有训练样本差异最大的样本(多样性高 → 信息增量大)。
类似于主动学习(active learning)的思想。
Activation Function(激活函数的选择)
推荐使用的激活函数为:
φ(v)=α⋅tanh(bv)其中 α=1.7159, b=23
\varphi(v) = \alpha \cdot \tanh(bv) \quad \text{其中 } \alpha = 1.7159, \; b = \frac{2}{3}
φ(v)=α⋅tanh(bv)其中 α=1.7159,b=32
这种缩放版的双曲正切函数:
- 输出范围:(−1.7159,1.7159)(-1.7159, 1.7159)(−1.7159,1.7159)
- 相比Sigmoid,收敛速度更快,梯度更稳定
图像呈S型,是典型的非线性、可微函数,满足BP的反向传播要求。
Target Values(目标值)
- 目标输出 djd_jdj 应该被限制在激活函数的输出范围内。
- 若超出范围,会导致:
- 网络尝试将权重推向无穷大以逼近目标;
- 导致隐藏层神经元饱和(梯度消失);
- 训练速度减慢甚至停滞。
建议:
- 对于 Sigmoid,目标值设为 0.10.10.1 和 0.90.90.9 而不是 000 和 111;
- 对于 Tanh,目标值设为 −1-1−1 和 +1+1+1。
Normalizing the Inputs(输入标准化)
训练前需对输入数据做预处理,以提升网络的学习效率和稳定性。
常见方法:
- 去均值(mean removal):减去每个特征的均值。
- 去相关(decorrelation):用PCA或ZCA方法去除特征间冗余。
- 协方差均衡(covariance equalization):使不同特征的协方差相似。
- 常用标准化方法:
- Min-Max标准化:将每个特征线性压缩到 [0,1][0, 1][0,1];
- Z-score标准化:使每个特征服从标准正态分布。
Initialization(权重初始化)
权重初始化直接影响训练效果:
- 初始权重大 → 神经元输出容易饱和 → 梯度消失;
- 初始权重小 → 网络学习变慢 → 陷入平坦区域。
最佳做法:使用如 Xavier(Glorot)或 He 初始化策略。
Learning from Hints(基于提示学习)
- 在网络学习初期,如果我们知道一些输入特征之间的关系或先验规律,可以设计网络结构或目标输出,加入“提示”信息(hints)。
例:
- 在图像识别中,我们可以添加一个辅助目标任务(例如中心点检测);
- 在自然语言处理中,可以用词性标注、语义标签作为提示。
Learning Rates(学习率细化策略)
除了学习率的大小,还应考虑:
-
层级位置差异:
- 输出层(靠后)应使用更小的学习率;
- 输入层(靠前)可以更大;
-
输入数量差异:
- 输入较多的神经元 → 梯度大 → 需小学习率;
- 输入较少的 → 可用大一些;
-
退火(Annealing)方法:
- 学习率随训练逐渐降低,例如:
η(t)=η01+λt \eta(t) = \frac{\eta_0}{1 + \lambda t} η(t)=1+λtη0
- 学习率随训练逐渐降低,例如:
径向基函数(Radial Basis Function, RBF)
Radial Basis Function(RBF)的定义
基本定义
径向基函数(Radial Basis Function, RBF) 是一种实值函数,其值只依赖于输入与某个中心点的距离:
-
若以原点为中心:
φ(x)=φ(∥x∥) \varphi(x) = \varphi(\|x\|) φ(x)=φ(∥x∥) -
更一般的情况,是以一个任意点 ccc 为中心(称为中心 center):
φ(x)=φ(∥x−c∥) \varphi(x) = \varphi(\|x - c\|) φ(x)=φ(∥x−c∥)
也就是说:RBF 具有径向对称性,对输入的旋转/变换不敏感,仅关注“离中心点多远”。
Interpolation Problem(插值问题)
问题描述
给定:
- NNN 个样本点 x1,x2,…,xN∈Rm0x_1, x_2, \ldots, x_N \in \mathbb{R}^{m_0}x1,x2,…,xN∈Rm0
- 目标输出 d1,d2,…,dN∈Rd_1, d_2, \ldots, d_N \in \mathbb{R}d1,d2,…,dN∈R
我们的目标是找到一个函数 F(x)F(x)F(x),满足:
F(xi)=di∀i=1,…,N
F(x_i) = d_i \quad \forall i = 1, \ldots, N
F(xi)=di∀i=1,…,N
解法:使用 RBF 插值
构造形式:
F(x)=∑i=1Nwi⋅φ(∥x−xi∥)
F(x) = \sum_{i=1}^N w_i \cdot \varphi(\|x - x_i\|)
F(x)=i=1∑Nwi⋅φ(∥x−xi∥)
其中:
- wiw_iwi 是每个样本对应的权重
- φ(⋅)\varphi(\cdot)φ(⋅) 是选择的 RBF,例如高斯函数等
- xix_ixi 是训练样本点,也是 RBF 的中心点
线性系统求解(矩阵形式)
我们将插值问题变成一个线性系统:
即:
Φ⋅w=d \Phi \cdot \mathbf{w} = \mathbf{d} Φ⋅w=d
Micchelli 定理(1986)
如果 φ\varphiφ 是某些条件下的 RBF(如 Gaussian),那么该矩阵 Φ\PhiΦ 一定是非奇异的(可逆),从而可以求解 w\mathbf{w}w。
常见的 RBF 类型
类型 | 表达式 | 特点 |
---|---|---|
Multiquadrics | φ(r)=r2+c2\varphi(r) = \sqrt{r^2 + c^2}φ(r)=r2+c2 | 光滑、非局部响应 |
Inverse Multiquadrics | φ(r)=1/r2+c2\varphi(r) = 1 / \sqrt{r^2 + c^2}φ(r)=1/r2+c2 | 随距离衰减 |
Gaussian | φ(r)=exp(−r2/2σ2)\varphi(r) = \exp(-r^2 / 2\sigma^2)φ(r)=exp(−r2/2σ2) | 局部性强,常用 |
RBF 网络结构(RBF Network)
三层结构
RBF 网络是一个三层前馈神经网络:
- 输入层:
- m0m_0m0 个节点(对应输入特征维度)
- 隐藏层:
- 每个节点都是一个径向基函数中心
- 一般个数等于训练样本数 NNN 或通过聚类算法选定
- 输出层:
- 每个输出节点为隐藏层输出的线性组合
网络输出:
F(x)=∑i=1Nwi⋅φ(∥x−ci∥)
F(x) = \sum_{i=1}^N w_i \cdot \varphi(\|x - c_i\|)
F(x)=i=1∑Nwi⋅φ(∥x−ci∥)
中心点的选择(How to get the kkk centers)
方法:无监督聚类,如:
-
K-Means:
-
最小化:
min∑j=1K∑C(i)=j∥xi−uj∥2 \min \sum_{j=1}^K \sum_{C(i)=j} \|x_i - u_j\|^2 minj=1∑KC(i)=j∑∥xi−uj∥2 -
uju_juj 为第 jjj 个聚类中心
-
-
SOM(Self Organizing Maps)
-
高斯混合模型(GMM)
这些方法帮助我们从原始样本中挑选典型代表点作为 RBF 的中心。
RBF 网络的训练步骤(两阶段)
Step 1: 训练 RBF 的中心和宽度
- 用 K-means 得到中心点 c1,…,cKc_1, \ldots, c_Kc1,…,cK
- 设置宽度 σ\sigmaσ(手动设置或计算类内方差)
Step 2: 训练输出层权重
- 得到每个样本经过隐藏层的 RBF 输出 φ(∥x−ci∥)\varphi(\|x - c_i\|)φ(∥x−ci∥)
- 用最小二乘法解线性方程 Φw=d\Phi w = dΦw=d 得到输出层权重
RBF 网络中的参数分为两类:
一类是:隐藏层的参数(中心和宽度)
- 中心(Centers):c1,c2,…,cKc_1, c_2, \dots, c_Kc1,c2,…,cK
- 通常是通过无监督学习(如 K-Means 聚类)来选择;
- 也可以是直接用训练样本点(每个样本都是一个中心);
- 宽度(Spread):通常为每个 RBF 节点设定一个宽度参数 σ\sigmaσ(也可以所有节点共用一个)。
- 有时人为设定,有时也可以基于数据点之间的平均距离估计。
这部分通常不是通过梯度下降训练的,而是通过启发式或统计方法直接估计。
另一类是:输出层的权重 w1,w2,…,wKw_1, w_2, \dots, w_Kw1,w2,…,wK
-
这部分是通过线性系统求解出来的:
Φ⋅w=d \Phi \cdot \mathbf{w} = \mathbf{d} Φ⋅w=d- 其中 Φij=φ(∥xi−cj∥)\Phi_{ij} = \varphi(\|x_i - c_j\|)Φij=φ(∥xi−cj∥)
- w\mathbf{w}w 是你要求解的权重
- d\mathbf{d}d 是样本的目标值
-
这通常用最小二乘法(或正规方程)一次性直接求解:
w=(ΦTΦ)−1ΦTd \mathbf{w} = (\Phi^T \Phi)^{-1} \Phi^T \mathbf{d} w=(ΦTΦ)−1ΦTd
也可以使用岭回归等正则化方法来增强鲁棒性。
Self-Organizing Maps (SOM,自组织映射)
SOM 的背景与动机
生物学动机(Kohonen, 1982/1984)
- 在大脑中,感觉信息常被以拓扑结构映射到皮层区域。
- 例如:对光线方向敏感的神经元会在皮层中聚集在一起;
- 通过对猫脑的微电极研究发现:功能相似的神经元在物理上靠得更近。
- Kohonen 受此启发,提出 SOM神经网络模型:将输入空间通过一种自组织竞争机制映射到二维拓扑空间。
SOM 的基本目标
核心思想
将高维数据通过无监督学习映射到低维空间(通常是二维):
- 类似数据会被映射到相邻的节点;
- 形成“拓扑保留”的特征图(topological feature map)。
SOM 的特点
- 无监督学习;
- 数据相似性通过距离衡量;
- 输出节点会自然地组织在一起;
- 但:输出层结构固定、层级信息难以体现。
SOM 的网络结构
基本组成
- 输入层:有 m0m_0m0 个源节点;
- 隐藏层(输出层):是一个 k×kk \times kk×k 的二维格子网络,每个节点都有一个与输入同维的权重向量 mim_imi;
- 每个节点代表了输入空间中的一个“代表位置”或“原型向量”。
SOM 的学习过程(核心五步)
第一步:初始化
- 每个神经元 iii 的权重向量 mi∈Rmm_i \in \mathbb{R}^{m}mi∈Rm,随机初始化或用样本初始化。
第二步:采样
- 从训练集中选取一个输入向量 x(t)x(t)x(t)。
第三步:竞争过程(competition)
- 找到最佳匹配神经元 i(x)i(x)i(x),其权重与输入最接近:
i(x)=argminj∥x−wj∥ i(x) = \arg \min_j \|x - w_j\| i(x)=argjmin∥x−wj∥
第四步:协作过程(cooperation)
- 找到以 i(x)i(x)i(x) 为中心的邻域;
- 邻域函数为:
hji(n)=exp(−dji22σ2(n)) h_{j i}(n) = \exp\left(-\frac{d_{ji}^2}{2\sigma^2(n)}\right) hji(n)=exp(−2σ2(n)dji2)
- djid_{ji}dji:第 jjj 个节点与 iii 的欧氏距离;
- σ(n)\sigma(n)σ(n):邻域宽度,随时间逐渐衰减:
σ(n)=σ0exp(−nτ1) \sigma(n) = \sigma_0 \exp\left(-\frac{n}{\tau_1}\right) σ(n)=σ0exp(−τ1n)
第五步:自适应过程(adaptation)
- 对邻域内所有神经元 jjj 更新权重:
wj(n+1)=wj(n)+η(n)⋅hji(n)⋅(x(n)−wj(n)) w_j(n+1) = w_j(n) + \eta(n) \cdot h_{j i}(n) \cdot (x(n) - w_j(n)) wj(n+1)=wj(n)+η(n)⋅hji(n)⋅(x(n)−wj(n))
- 学习率 η(n)\eta(n)η(n) 也随时间指数衰减:
η(n)=η0exp(−nτ2) \eta(n) = \eta_0 \exp\left(-\frac{n}{\tau_2}\right) η(n)=η0exp(−τ2n)
SOM的学习总结流程
-
初始化:对所有权重 mim_imi 随机赋值或使用样本初始化;
-
输入样本:随机选取一个输入向量 xxx;
-
最佳匹配单元(BMU):
i(x)=argminj∥x−wj∥ i(x) = \arg \min_j \|x - w_j\| i(x)=argjmin∥x−wj∥ -
邻域计算:根据当前的 i(x)i(x)i(x) 和 σ(n)\sigma(n)σ(n) 计算邻域函数 hjih_{ji}hji;
-
权重更新:
Δwj=η(n)hji(n)(x−wj(n)) \Delta w_j = \eta(n) h_{ji}(n) (x - w_j(n)) Δwj=η(n)hji(n)(x−wj(n)) -
重复:进行若干轮迭代直到收敛或达到最大迭代次数。