基于最速下降梯度法的 MLP 在线训练系统
项目介绍
本项目在 MATLAB 环境中完整实现了一个多层感知器 (Multilayer Perceptron, MLP) 神经网络,并专门设计了基于 最速下降梯度法 (Steepest Descent Gradient Method) 的 在线训练 (On-line Training) 算法。
与常见的批量 (Batch) 训练不同,本系统的核心特性在于其逐样本更新机制:网络在每接收到一个训练样本后,立即计算前向传播误差,并通过链式法则反向推导梯度,随即更新网络权重。这种机制模拟了实时信号处理或动态环境下的自适应学习过程,能够快速捕捉新的数据模式。
项目代码不依赖 MATLAB 神经网络工具箱的高级封装,而是从底层实现了数据预处理、网络构建、前向传播、反向传播推导及梯度更新的完整逻辑,适合用于理解神经网络底层原理及非线性函数拟合任务的教学与研究。
主要功能特性
- 在线学习机制:实现逐样本(Sample-by-Sample)迭代,每个样本输入即触发权重更新,动态调整网络参数。
- 非线性函数拟合:针对复杂的多频率正弦叠加函数进行建模,验证网络的非线性映射能力。
- 底层算法实现:手动实现 Sigmoid 和 Linear 激活函数及其导数、反向传播 (BP) 算法以及权重初始化,不依赖封装好的黑盒函数。
- 实时监控与可视化:训练过程中实时绘制均方误差 (MSE) 收敛曲线,并提供包含拟合效果对比、误差分布直方图在内的多维评估图表。
- 数据归一化处理:内置自定义的最大最小归一化 (MapMinMax) 与反归一化逻辑,确保数值稳定性。
系统要求
- MATLAB: R2016a 或更高版本(代码使用基础矩阵运算,无特定工具箱强依赖,但需支持基本的绘图和统计函数)。
使用方法
- 将代码保存至 MATLAB 工作路径中。
- 直接运行主脚本。
- 程序将自动清理环境,生成模拟数据,并开始通过控制台输出每一轮(Epoch)的训练误差。
- 训练过程中会弹出一个图形窗口,动态刷新误差收敛曲线。
- 训练结束后,控制台将显示总耗时及测试集评估指标(MSE, RMSE, R2 Score),并生成最终的 2x2 评估图表。
算法实现与核心逻辑
本项目的主程序逻辑严密遵循 MLP 的经典数学推导,具体实现细节如下:
1. 数据集生成与预处理
- 数据源:生成一个包含低频和高频成分的非线性函数信号 (0.6*sin(pi*x) + 0.3*sin(3*pi*x)),并叠加高斯白噪声以模拟真实环境。
- 数据集划分:将 300 个样本随机打乱,按 80% 训练集、20% 测试集的比例进行划分,确保模型评估的泛化性。
- 归一化:实现自定义函数将输入数据 (X) 和目标数据 (T) 映射至 [-1, 1] 区间。关键在于测试集严格使用训练集的统计参数 (Min/Max) 进行处理,避免信息泄露。
2. 网络架构配置
- 拓扑结构:采用三层架构。输入层 (1节点) -> 隐藏层 (8节点) -> 输出层 (1节点)。
- 激活函数:
* 隐藏层:采用
Sigmoid 函数,引入非线性能力。
* 输出层:采用
Linear (Purelin) 函数,适用于回归拟合任务。
- 参数初始化:权重矩阵 (W1, W2) 和偏置向量 (b1, b2) 采用 [-0.5, 0.5] 范围内的均匀分布随机初始化,打破对称性。
3. 在线训练流程 (核心算法)
训练循环采用双层嵌套结构(Epoch 循环 -> 样本循环),具体步骤如下:
- 前向传播 (Forward Propagation):
* 计算隐藏层净输入与输出,应用 Sigmoid 激活。
* 计算输出层净输入与输出,直接线性输出。
* 计算当前单样本的预测误差 $e_k = d_k - y_2$。
*
输出层梯度 ($delta_2$):由于输出层为线性,其局部梯度直接为负误差 ($-epsilon_k$)。
*
隐藏层梯度 ($delta_1$):根据链式法则,$delta_1 = (W_2^T times delta_2) odot f'(v_1)$。其中 $f'(v_1)$ 为 Sigmoid 函数的导数 $y_1 times (1 - y_1)$。
* 应用规则 $W_{new} = W_{old} - eta times Gradient$。
* 利用学习率 (0.05) 控制步长,在处理完
每一个样本后立即更新权重矩阵和偏置,而非等待整个批次结束。
- 早停机制 (Early Stopping):每轮结束后检查 MSE 是否低于目标值 ($1e-4$),若达标则提前终止训练。
4. 模型评估与测试
- 前向推理:使用训练好的权重对测试集进行预测。
- 反归一化:将网络输出的 [-1, 1] 范围数值还原至原始物理量纲。
- 评价指标:计算均方误差 (MSE)、均方根误差 (RMSE) 以及决定系数 (R2 Score) 来量化模型性能。
5. 可视化模块
程序最终会生成一个包含四个子图的综合窗口:
- 左上:训练过程 MSE 收敛曲线 (对数坐标),展示在线学习的下降趋势。
- 右上:函数拟合效果图。在全定义域内密集采样,绘制平滑的预测曲线,并与含噪原始数据、真实无噪函数曲线进行对比。
- 左下:测试集真实值 vs 预测值散点图,辅助判断模型的线性相关性。
- 右下:测试集预测误差的直方图分布,用于分析误差是否服从正态分布或存在偏差。