什么是反向传播(Backpropagation)?
反向传播是一种用于训练人工神经网络的监督学习算法。它通过计算损失函数对网络权重的梯度,并利用梯度下降法更新权重,从而最小化预测误差。
MATLAB中的基本实现
以下是一个使用MATLAB内置函数训练简单BP神经网络的示例:
% 准备数据
inputs = [0 1 0 1; 0 0 1 1]; % 输入 (2 features, 4 samples)
targets = [0 1 1 0]; % XOR 输出
% 创建前馈神经网络(1个隐藏层,含3个神经元)
net = feedforwardnet([3]);
% 配置训练参数
net.trainParam.epochs = 1000;
net.trainParam.goal = 1e-6;
% 训练网络
net = train(net, inputs, targets);
% 测试
outputs = net(inputs);
disp('预测输出:');
disp(outputs);
常见测试要点
- 检查输入/输出维度是否匹配
- 验证训练误差是否收敛
- 使用交叉验证避免过拟合
- 对比不同激活函数(如tansig, logsig)的效果
调试建议
若网络无法收敛,请尝试:
- 调整学习率(
net.trainParam.lr) - 增加隐藏层神经元数量
- 标准化输入数据(使用
mapminmax) - 更换训练函数(如
trainlm,trainscg)