机器学习8——神经网络下
反向传播算法
反向传播学习概述(Back Propagation Learning)
基本思想
反向传播算法是训练多层前馈神经网络(如多层感知机 MLP)的一种监督学习算法,其基本思路为:
通过误差反向传播来更新各层权重,从而逐步减少预测误差。
它包括两个阶段:
- 前向传播(Forward Pass):
- 输入信号流过网络,产生输出
- 输出与期望结果对比,计算误差
- 反向传播(Backward Pass):
- 将误差从输出层反向传播至隐藏层
- 基于误差更新权重,减少误差
符号说明(Symbols)
符号 | 含义 |
---|---|
x i ( n ) x_i(n) xi(n) | 第 n n n 次迭代的第 i i i 个输入 |
y j ( n ) y_j(n) yj(n) | 第 n n n 次迭代中第 j j j 个神经元输出 |
d j ( n ) d_j(n) dj(n) | 期望输出 |
e j ( n ) = d j ( n ) − y j ( n ) e_j(n) = d_j(n) - y_j(n) ej(n)=dj(n)−yj(n) | 输出层误差 |
w j i ( n ) w_{ji}(n) wji(n) | 第 n n n 次迭代时连接 i → j i \rightarrow j i→j 的权重 |
v j ( n ) v_j(n) vj(n) | 神经元 j j j 的加权输入(净输入) |
φ j ( ⋅ ) \varphi_j(\cdot) φj(⋅) | 激活函数 |
θ j \theta_j θj | 神经元的阈值 |
η \eta η | 学习率 |
δ j ( n ) \delta_j(n) δj(n) | 局部梯度(误差信号) |
误差函数与梯度定义
- 单次样本误差函数(instantaneous error):
E ( n ) = 1 2 ∑ j ∈ C [ d j ( n ) − y j ( 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 模式):
E a v = 1 N ∑ n = 1 N E ( n ) E_{av} = \frac{1}{N} \sum_{n=1}^{N} E(n) Eav=N1n=1∑NE(n)
批量(Batch)模式:
- 使用整个训练集计算误差后统一更新权重。
- 优点:梯度估计稳定。
- 缺点:需要较多内存。
在线(增量)模式:
- 每看到一个样本立即更新权重。
- 学习快但震荡大。
前向传播(Forward Pass)
对于神经元 j j j:
- 净输入:
v j ( n ) = ∑ i w j i ( n ) ⋅ y i ( n ) v_j(n) = \sum_{i} w_{ji}(n) \cdot y_i(n) vj(n)=i∑wji(n)⋅yi(n)
- 输出:
y j ( n ) = φ j ( v j ( n ) ) y_j(n) = \varphi_j(v_j(n)) yj(n)=φj(vj(n))
反向传播过程(Backward Pass)
梯度计算公式(链式法则):
∂ E ( n ) ∂ w j i ( n ) = ∂ E ( n ) ∂ v j ( n ) ⋅ ∂ v j ( n ) ∂ w j i ( 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)
根据前向传播中的公式,我们有:
∂ v j ( n ) ∂ w j i ( n ) = ∂ ∂ w j i ( n ) [ ∑ i = 0 p w j i ( n ) y i ( n ) ] = y i ( 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 ) ∂ v j ( n ) \delta_j(n) = -\frac{\partial E(n)}{\partial v_j(n)} δj(n)=−∂vj(n)∂E(n)
那么梯度的公式可以写成:
∂ E ( n ) ∂ w j i ( n ) = − δ j ( n ) ⋅ y i ( n ) \frac{\partial E(n)}{\partial w_{ji}(n)} = -\delta_j(n) \cdot y_i(n) ∂wji(n)∂E(n)=−δj(n)⋅yi(n)
并且这么定义我们也可以按下面的形式定义权重更新公式。
权重更新公式
权重改变量:
Δ w j i ( n ) = η ⋅ δ j ( n ) ⋅ y i ( n ) \Delta w_{ji}(n) = \eta \cdot \delta_j(n) \cdot y_i(n) Δwji(n)=η⋅δj(n)⋅yi(n)
权重更新:
w j i ( n + 1 ) = w j i ( n ) + Δ w j i ( n ) = w j i ( n ) + η δ j ( n ) y i ( 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 ) = 1 2 ∑ j ∈ C e j 2 ( n ) e j ( n ) = d j ( n ) − y j ( 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 ) ∂ v j ( n ) = − ∂ E ( n ) ∂ y j ( n ) ∂ y j ( n ) ∂ v j ( n ) = − ∂ ∂ y j ( n ) [ 1 2 ∑ j ∈ c ( d j ( n ) − y j ( n ) ) 2 ] ⋅ ∂ ( φ ( v j ( n ) ) ) ∂ v j ( n ) = ( d j ( n ) − y j ( n ) ) φ j ′ ( v j ( 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 ) ∂ y j ( n ) ∂ y j ( n ) ∂ v j ( n ) = − ∂ E ( n ) ∂ y j ( n ) φ ′ ( v j ( 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 由 w k j w_{kj} wkj连接,也就是说 v k ( n ) = ∑ j w k j ( n ) ⋅ y j ( 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 ) ∂ y j ( n ) = ∑ k ∂ E ( n ) ∂ v k ( n ) ⋅ ∂ v k ( n ) ∂ y j ( n ) = ∑ k ∂ E ( n ) ∂ v k ( n ) ⋅ w k j ( 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 ) ∂ v k ( n ) = − δ k ( n ) = − ( d k ( n ) − y k ( n ) ) φ ′ ( v k ( 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 ′ ( v j ( n ) ) ∑ k δ k ( n ) w k j ( n ) = φ j ′ ( v j ( n ) ) ∑ k ( d k ( n ) − y k ( n ) ) φ ′ ( v k ( n ) ) w k j ( 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 ) = 1 1 + 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))
y j ( n ) = φ ( v j ( n ) ) = 1 1 + exp ( − v j ( n ) ) , − ∞ < v j ( n ) < ∞ ∂ j ( n ) ∂ j ( n ) = φ ′ ( v j ( n ) ) = exp ( − v j ( n ) ) [ 1 + exp ( − v j ( n ) ) ] 2 φ ′ ( v j ( n ) ) = y j ( n ) [ 1 − y j ( 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)项:
公式如下:
Δ w j i ( n ) = α Δ w j i ( n − 1 ) + η δ j ( n ) y i ( 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)
解释各项含义:
- Δ w j i ( n ) \Delta w_{ji}(n) Δwji(n):当前的权重改变量;
- Δ w j i ( n − 1 ) \Delta w_{ji}(n-1) Δwji(n−1):上一次的权重改变量(记忆);
- α \alpha α:动量系数,控制“惯性”大小,一般设在 0.5~0.9;
- η \eta η:学习率;
- δ j ( n ) \delta_j(n) δj(n):误差信号;
- y i ( n ) y_i(n) yi(n):输入。
直观理解:
当前的权重更新 = 上一次的更新趋势 + 当前梯度方向
→ 使得更新路径“更顺滑”,避免来回震荡。
展开为时间序列的形式
将上面的式子展开成累加形式:
Δ w j i ( n ) = η ∑ t = 0 n α n − t δ j ( t ) y i ( 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 ) y i ( t ) \delta_j(t) y_i(t) δj(t)yi(t) 就是梯度的一部分,因此我们可以改写为:
Δ w j i ( n ) = − η ∑ t = 0 n α n − t ∂ E ( t ) ∂ w j i ( 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 ≤ ∣ α ∣ < 1 0 \leq |\alpha| < 1 0≤∣α∣<1?
- 这是为了收敛性:
- 若 ∣ α ∣ ≥ 1 |\alpha| \geq 1 ∣α∣≥1,旧信息的影响不会衰减,可能导致不收敛;
- 当 α = 0 \alpha = 0 α=0,就是普通梯度下降;
- 当 α \alpha α 越大,历史更新影响越大,但不能过头。
Stopping Criteria(停止准则)
为什么需要“停止准则”?
反向传播算法是一个迭代优化算法,如果没有停止条件,它会一直训练下去。
但实际上我们希望在:
- 误差足够小的时候停止;
- 或者在效果不再明显提升时停止;
- 否则可能会导致过拟合、浪费计算资源等问题。
常用的两类停止准则:
基于梯度大小
∥ ∇ E ∥ < ϵ \|\nabla E\| < \epsilon ∥∇E∥<ϵ
- 当梯度的欧几里得范数足够小(如 ϵ = 1 0 − 3 \epsilon = 10^{-3} ϵ=10−3),说明:
- 当前处于极小值附近;
- 权重再怎么动,误差也不会下降太多。
基于误差变化(per epoch)
- 当每个 epoch 的平均误差 E a v E_{av} Eav 下降到一定阈值,比如:
- E a v < 0.01 E_{av} < 0.01 Eav<0.01(误差占总范围的1%以内);
- 或者连续多轮误差没有明显下降,也可以提前终止。
其他问题
Stochastic vs. Batch Update(随机 vs 批量更新)
- Stochastic(随机/逐样本)模式:
- 每次只用一个样本计算梯度并更新权重。
- 优点:内存占用低,更新更频繁,有利于跳出局部最优。
- 尤其适合大规模数据集或冗余样本多的情况。
- Batch(批量)模式:
- 每个 epoch 用全部训练样本计算一次总梯度后再更新。
- 优点:梯度估计更精确,收敛路径更稳定。
- 缺点:内存开销大,更新慢。
Maximizing Information Content(最大化信息含量)
每个训练样本的选取应使其对网络训练的信息增益最大化。
如何实现?
- 选择当前误差最大的样本(错误最多 → 信息量大)。
- 选择与已有训练样本差异最大的样本(多样性高 → 信息增量大)。
类似于主动学习(active learning)的思想。
Activation Function(激活函数的选择)
推荐使用的激活函数为:
φ ( v ) = α ⋅ tanh ( b v ) 其中 α = 1.7159 , b = 2 3 \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(目标值)
- 目标输出 d j d_j dj 应该被限制在激活函数的输出范围内。
- 若超出范围,会导致:
- 网络尝试将权重推向无穷大以逼近目标;
- 导致隐藏层神经元饱和(梯度消失);
- 训练速度减慢甚至停滞。
建议:
- 对于 Sigmoid,目标值设为 0.1 0.1 0.1 和 0.9 0.9 0.9 而不是 0 0 0 和 1 1 1;
- 对于 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 ) = η 0 1 + λ 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∥) -
更一般的情况,是以一个任意点 c c c 为中心(称为中心 center):
φ ( x ) = φ ( ∥ x − c ∥ ) \varphi(x) = \varphi(\|x - c\|) φ(x)=φ(∥x−c∥)
也就是说:RBF 具有径向对称性,对输入的旋转/变换不敏感,仅关注“离中心点多远”。
Interpolation Problem(插值问题)
问题描述
给定:
- N N N 个样本点 x 1 , x 2 , … , x N ∈ R m 0 x_1, x_2, \ldots, x_N \in \mathbb{R}^{m_0} x1,x2,…,xN∈Rm0
- 目标输出 d 1 , d 2 , … , d N ∈ R d_1, d_2, \ldots, d_N \in \mathbb{R} d1,d2,…,dN∈R
我们的目标是找到一个函数 F ( x ) F(x) F(x),满足:
F ( x i ) = d i ∀ i = 1 , … , N F(x_i) = d_i \quad \forall i = 1, \ldots, N F(xi)=di∀i=1,…,N
解法:使用 RBF 插值
构造形式:
F ( x ) = ∑ i = 1 N w i ⋅ φ ( ∥ x − x i ∥ ) F(x) = \sum_{i=1}^N w_i \cdot \varphi(\|x - x_i\|) F(x)=i=1∑Nwi⋅φ(∥x−xi∥)
其中:
- w i w_i wi 是每个样本对应的权重
- φ ( ⋅ ) \varphi(\cdot) φ(⋅) 是选择的 RBF,例如高斯函数等
- x i x_i xi 是训练样本点,也是 RBF 的中心点
线性系统求解(矩阵形式)
我们将插值问题变成一个线性系统:
即:
Φ ⋅ w = d \Phi \cdot \mathbf{w} = \mathbf{d} Φ⋅w=d
Micchelli 定理(1986)
如果 φ \varphi φ 是某些条件下的 RBF(如 Gaussian),那么该矩阵 Φ \Phi Φ 一定是非奇异的(可逆),从而可以求解 w \mathbf{w} w。
常见的 RBF 类型
类型 | 表达式 | 特点 |
---|---|---|
Multiquadrics | φ ( r ) = r 2 + c 2 \varphi(r) = \sqrt{r^2 + c^2} φ(r)=r2+c2 | 光滑、非局部响应 |
Inverse Multiquadrics | φ ( r ) = 1 / r 2 + c 2 \varphi(r) = 1 / \sqrt{r^2 + c^2} φ(r)=1/r2+c2 | 随距离衰减 |
Gaussian | φ ( r ) = exp ( − r 2 / 2 σ 2 ) \varphi(r) = \exp(-r^2 / 2\sigma^2) φ(r)=exp(−r2/2σ2) | 局部性强,常用 |
RBF 网络结构(RBF Network)
三层结构
RBF 网络是一个三层前馈神经网络:
- 输入层:
- m 0 m_0 m0 个节点(对应输入特征维度)
- 隐藏层:
- 每个节点都是一个径向基函数中心
- 一般个数等于训练样本数 N N N 或通过聚类算法选定
- 输出层:
- 每个输出节点为隐藏层输出的线性组合
网络输出:
F ( x ) = ∑ i = 1 N w i ⋅ φ ( ∥ x − c i ∥ ) F(x) = \sum_{i=1}^N w_i \cdot \varphi(\|x - c_i\|) F(x)=i=1∑Nwi⋅φ(∥x−ci∥)
中心点的选择(How to get the k k k centers)
方法:无监督聚类,如:
-
K-Means:
-
最小化:
min ∑ j = 1 K ∑ C ( i ) = j ∥ x i − u j ∥ 2 \min \sum_{j=1}^K \sum_{C(i)=j} \|x_i - u_j\|^2 minj=1∑KC(i)=j∑∥xi−uj∥2 -
u j u_j uj 为第 j j j 个聚类中心
-
-
SOM(Self Organizing Maps)
-
高斯混合模型(GMM)
这些方法帮助我们从原始样本中挑选典型代表点作为 RBF 的中心。
RBF 网络的训练步骤(两阶段)
Step 1: 训练 RBF 的中心和宽度
- 用 K-means 得到中心点 c 1 , … , c K c_1, \ldots, c_K c1,…,cK
- 设置宽度 σ \sigma σ(手动设置或计算类内方差)
Step 2: 训练输出层权重
- 得到每个样本经过隐藏层的 RBF 输出 φ ( ∥ x − c i ∥ ) \varphi(\|x - c_i\|) φ(∥x−ci∥)
- 用最小二乘法解线性方程 Φ w = d \Phi w = d Φw=d 得到输出层权重
RBF 网络中的参数分为两类:
一类是:隐藏层的参数(中心和宽度)
- 中心(Centers): c 1 , c 2 , … , c K c_1, c_2, \dots, c_K c1,c2,…,cK
- 通常是通过无监督学习(如 K-Means 聚类)来选择;
- 也可以是直接用训练样本点(每个样本都是一个中心);
- 宽度(Spread):通常为每个 RBF 节点设定一个宽度参数 σ \sigma σ(也可以所有节点共用一个)。
- 有时人为设定,有时也可以基于数据点之间的平均距离估计。
这部分通常不是通过梯度下降训练的,而是通过启发式或统计方法直接估计。
另一类是:输出层的权重 w 1 , w 2 , … , w K w_1, w_2, \dots, w_K w1,w2,…,wK
-
这部分是通过线性系统求解出来的:
Φ ⋅ w = d \Phi \cdot \mathbf{w} = \mathbf{d} Φ⋅w=d- 其中 Φ i j = φ ( ∥ x i − c j ∥ ) \Phi_{ij} = \varphi(\|x_i - c_j\|) Φij=φ(∥xi−cj∥)
- w \mathbf{w} w 是你要求解的权重
- d \mathbf{d} d 是样本的目标值
-
这通常用最小二乘法(或正规方程)一次性直接求解:
w = ( Φ T Φ ) − 1 Φ T d \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 的网络结构
基本组成
- 输入层:有 m 0 m_0 m0 个源节点;
- 隐藏层(输出层):是一个 k × k k \times k k×k 的二维格子网络,每个节点都有一个与输入同维的权重向量 m i m_i mi;
- 每个节点代表了输入空间中的一个“代表位置”或“原型向量”。
SOM 的学习过程(核心五步)
第一步:初始化
- 每个神经元 i i i 的权重向量 m i ∈ R m m_i \in \mathbb{R}^{m} mi∈Rm,随机初始化或用样本初始化。
第二步:采样
- 从训练集中选取一个输入向量 x ( t ) x(t) x(t)。
第三步:竞争过程(competition)
- 找到最佳匹配神经元 i ( x ) i(x) i(x),其权重与输入最接近:
i ( x ) = arg min j ∥ x − w j ∥ i(x) = \arg \min_j \|x - w_j\| i(x)=argjmin∥x−wj∥
第四步:协作过程(cooperation)
- 找到以 i ( x ) i(x) i(x) 为中心的邻域;
- 邻域函数为:
h j i ( n ) = exp ( − d j i 2 2 σ 2 ( n ) ) h_{j i}(n) = \exp\left(-\frac{d_{ji}^2}{2\sigma^2(n)}\right) hji(n)=exp(−2σ2(n)dji2)
- d j i d_{ji} dji:第 j j j 个节点与 i i i 的欧氏距离;
- σ ( n ) \sigma(n) σ(n):邻域宽度,随时间逐渐衰减:
σ ( n ) = σ 0 exp ( − n τ 1 ) \sigma(n) = \sigma_0 \exp\left(-\frac{n}{\tau_1}\right) σ(n)=σ0exp(−τ1n)
第五步:自适应过程(adaptation)
- 对邻域内所有神经元 j j j 更新权重:
w j ( n + 1 ) = w j ( n ) + η ( n ) ⋅ h j i ( n ) ⋅ ( x ( n ) − w j ( 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 ) = η 0 exp ( − n τ 2 ) \eta(n) = \eta_0 \exp\left(-\frac{n}{\tau_2}\right) η(n)=η0exp(−τ2n)
SOM的学习总结流程
-
初始化:对所有权重 m i m_i mi 随机赋值或使用样本初始化;
-
输入样本:随机选取一个输入向量 x x x;
-
最佳匹配单元(BMU):
i ( x ) = arg min j ∥ x − w j ∥ i(x) = \arg \min_j \|x - w_j\| i(x)=argjmin∥x−wj∥ -
邻域计算:根据当前的 i ( x ) i(x) i(x) 和 σ ( n ) \sigma(n) σ(n) 计算邻域函数 h j i h_{ji} hji;
-
权重更新:
Δ w j = η ( n ) h j i ( n ) ( x − w j ( n ) ) \Delta w_j = \eta(n) h_{ji}(n) (x - w_j(n)) Δwj=η(n)hji(n)(x−wj(n)) -
重复:进行若干轮迭代直到收敛或达到最大迭代次数。