当前位置: 首页 > news >正文

机器学习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 ij 的权重
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)=21jC[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=1NE(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)=iwji(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=0pwji(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)=21jCej2(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)[21jc(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)=kvk(n)E(n)yj(n)vk(n)=kvk(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+ev1,φ(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)[1yj(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(n1)+ηδ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(n1)上一次的权重改变量(记忆);
  • α \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=0nαntδ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=0nαntwji(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} ϵ=103),说明:
    • 当前处于极小值附近;
    • 权重再怎么动,误差也不会下降太多。
基于误差变化(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)=φ(xc)

也就是说: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,,xNRm0
  • 目标输出 d 1 , d 2 , … , d N ∈ R d_1, d_2, \ldots, d_N \in \mathbb{R} d1,d2,,dNR

我们的目标是找到一个函数 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)=dii=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=1Nwiφ(xxi)
其中:

  • 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 网络是一个三层前馈神经网络:

  1. 输入层
    • m 0 m_0 m0 个节点(对应输入特征维度)
  2. 隐藏层
    • 每个节点都是一个径向基函数中心
    • 一般个数等于训练样本数 N N N 或通过聚类算法选定
  3. 输出层
    • 每个输出节点为隐藏层输出的线性组合

网络输出:
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=1Nwiφ(xci)

中心点的选择(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=1KC(i)=jxiuj2

    • 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\|) φ(xci)
  • 用最小二乘法解线性方程 Φ 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=φ(xicj)
    • 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} miRm,随机初始化或用样本初始化。
第二步:采样
  • 从训练集中选取一个输入向量 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)=argjminxwj

第四步:协作过程(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的学习总结流程
  1. 初始化:对所有权重 m i m_i mi 随机赋值或使用样本初始化;

  2. 输入样本:随机选取一个输入向量 x x x

  3. 最佳匹配单元(BMU)
    i ( x ) = arg ⁡ min ⁡ j ∥ x − w j ∥ i(x) = \arg \min_j \|x - w_j\| i(x)=argjminxwj

  4. 邻域计算:根据当前的 i ( x ) i(x) i(x) σ ( n ) \sigma(n) σ(n) 计算邻域函数 h j i h_{ji} hji

  5. 权重更新
    Δ 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)(xwj(n))

  6. 重复:进行若干轮迭代直到收敛或达到最大迭代次数。

相关文章:

  • X-Search:Spring AI实现的AI智能搜索
  • 协作机器人优化自动化工作流程,提升工作效率
  • HTTP中常见的Content-Type
  • RabbitMQ 高可用集群设计与消息幂等性实战指南
  • C#写破解rar文件密码例程
  • [C语言]typedef关键字详解
  • documents4j导出pdf
  • 垃圾收集相关算法Test
  • PowerBi 巧用UNICHAR(8203)实现自定义排序
  • flask使用-链接mongoDB
  • Docker镜像制作案例
  • stm32 USART串口协议与外设(程序)——江协教程踩坑经验分享
  • 万兴喵影Filmora AI Video v14.7.03国际高级版,AI视频剪辑全能工具,一键专业级创作​
  • 【数据挖掘】聚类算法学习—K-Means
  • Stable Diffusion 项目实战落地:从0到1 掌握ControlNet:打造光影文字 第二篇 - 野外光影字
  • MATLAB GUI界面设计 第六章——常用库中的其它组件
  • 2.安装Docker
  • 算法竞赛中超过 1000×1000 的整型二维数组如何处理?
  • 深入拆解消息队列的存储
  • openwrt使用quilt工具制作补丁