级联前向反向传播神经网络(Feedforward and Cascade Backpropagation Propagation Neural Network, FCBP)是一种针对传统BP神经网络缺陷改进的深度学习模型。其核心通过级联连接结构和动态传播机制,显著提升了非线性建模能力与训练效率。
一、FCBP网络结构设计:级联连接的动态拓扑
1.1 传统BP网络的局限性
- 信息单向流动:隐藏层仅接收前一层输出,无法融合跨层特征。
- 梯度消失/爆炸:深层网络中梯度逐层衰减或放大。
- 模型容量受限:固定结构难以适应复杂非线性关系。
1.2 FCBP的级联拓扑架构
(1)级联连接的定义
- 跨层直接连接:隐藏层神经元可接收前序多个层的输出。
- 动态路径叠加:第 l l l层神经元的输入由前一层 ( l − 1 ) (l−1) (l−1)和跨层(如 l − 2 l−2 l−2、 l − 3 l−3 l−3 等)的输出共同组成。
(2)级联深度的控制
- 级联跨度:限制最大跨层连接数,避免网络过度复杂化。。
- 稀疏连接:随机丢弃部分级联路径(类似Dropout),降低过拟合风险。
二、前向传播:多路径信息融合
2.1 激活信号传播过程
- 输入层:接收特征向量 x x x
- 隐藏层计算:
h j ( l ) = f ( ∑ w j i ( l ) h i ( l − 1 ) + ∑ v j i ( l , k ) h i ( l − k ) ) h_j^{(l)} = f\left( \sum w_{ji}^{(l)} h_i^{(l-1)} + \sum v_{ji}^{(l,k)} h_i^{(l-k)} \right) hj(l)=f(∑wji(l)hi(l−1)+∑vji(l,k)hi(l−k))
其中 f ( ⋅ ) f(\cdot) f(⋅) 为激活函数(如ReLU)。 - 输出层:生成预测值 y \mathbf{y} y。
2.2 级联连接的数学意义
- 高阶非线性组合:构造复合函数 f ( w 1 x + w 2 f ( w 3 x ) ) f(w_1 x + w_2 f(w_3 x)) f(w1x+w2f(w3x))。
- 残差学习特性:跨层连接提供梯度“短路路径”。
三、反向传播:梯度动态分配与优化
3.1 损失函数与梯度计算
- 均方误差(MSE):
L = 1 2 N ∑ n = 1 N ∥ y n − y ^ n ∥ 2 \mathcal{L} = \frac{1}{2N} \sum_{n=1}^N \| \mathbf{y}_n - \hat{\mathbf{y}}_n \|^2 L=2N1n=1∑N∥yn−y^n∥2
3.2 梯度反向传播机制
(1)输出层梯度
δ j ( L ) = ( y j − y ^ j ) ⋅ f ′ ( z j ( L ) ) \delta_j^{(L)} = (y_j - \hat{y}_j) \cdot f'(z_j^{(L)}) δj(L)=(yj−y^j)⋅f′(zj(L))
(2)隐藏层梯度
δ j ( l ) = f ′ ( z j ( l ) ) [ ∑ k δ k ( l + 1 ) w k j ( l + 1 ) + ∑ m ∑ k δ k ( l + m ) v k j ( l + m , m ) ] \delta_j^{(l)} = f'(z_j^{(l)}) \left[ \sum_{k} \delta_k^{(l+1)} w_{kj}^{(l+1)} + \sum_{m} \sum_{k} \delta_k^{(l+m)} v_{kj}^{(l+m,m)} \right] δj(l)=f′(zj(l))[k∑δk(l+1)wkj(l+1)+m∑k∑δk(l+m)vkj(l+m,m)]
(3)权重更新规则
- 前向权重:
w j i ( l ) ← w j i ( l ) − η ⋅ δ j ( l ) ⋅ h i ( l − 1 ) w_{ji}^{(l)} \leftarrow w_{ji}^{(l)} - \eta \cdot \delta_j^{(l)} \cdot h_i^{(l-1)} wji(l)←wji(l)−η⋅δj(l)⋅hi(l−1) - 级联权重:
v j i ( l , k ) ← v j i ( l , k ) − η ⋅ δ j ( l ) ⋅ h i ( l − k ) v_{ji}^{(l,k)} \leftarrow v_{ji}^{(l,k)} - \eta \cdot \delta_j^{(l)} \cdot h_i^{(l-k)} vji(l,k)←vji(l,k)−η⋅δj(l)⋅hi(l−k)
四、FCBP部分代码
%% 清空环境变量
warning off % 关闭报警信息
close all % 关闭开启的图窗
clear % 清空变量
clc % 清空命令行
%% 导入数据
res = xlsread('数据集.xlsx');
%% 数据分析
num_size = 0.7; % 训练集占数据集比例
outdim = 1; % 最后一列为输出
num_samples = size(res, 1); % 样本个数
res = res(randperm(num_samples), :); % 打乱数据集(不希望打乱时,注释该行)
num_train_s = round(num_size * num_samples); % 训练集样本个数
f_ = size(res, 2) - outdim; % 输入特征维度
%% 划分训练集和测试集
P_train = res(1: num_train_s, 1: f_)';
T_train = res(1: num_train_s, f_ + 1: end)';
M = size(P_train, 2);
P_test = res(num_train_s + 1: end, 1: f_)';
T_test = res(num_train_s + 1: end, f_ + 1: end)';
N = size(P_test, 2);
%% 数据归一化
[p_train, ps_input] = mapminmax(P_train, 0, 1);
p_test = mapminmax('apply', P_test, ps_input);
[t_train, ps_output] = mapminmax(T_train, 0, 1);
t_test = mapminmax('apply', T_test, ps_output);
五、运行结果