BP神经网络(相关知识)

这里简单介绍一下神经网络在数学建模中的一些简单的应用(BP神经网络算法)

BP神经网络算法在数学建模中的应用是相当广泛的。包括但不限于

1.预测和回归问题,神经网络模型可以用于预测未来趋势、模拟实验结果、进行回归分析等。例如,预测股票价格、房价、销售量等。

2.分类和识别问题:神经网络模型可以进行分类和识别,帮助将对象归类为不同的类别。例如,文本分类、图像分类、手写数字识别等。

3.优化问题:神经网络模型可以应用于求解最优化问题,如最小化成本、最大化收益等。例如,在资源分配、生产计划等方面进行优化。

4.聚类分析:神经网络模型可以帮助发现数据中的隐藏模式和相似性,进行聚类分析。例如,在市场细分、用户行为研究等方面应用聚类分析。

BP神经网络算法模型主要构成:输入层,隐藏层,输出层。

输入层输入再通过权值与隐藏层连接。用激活函数将之激活,在通过训练函数,进行训练输出。

下面通过一些代码来详细介绍一下:

k = 1;
p = [0:0.05:40];
t = cos(k*pi*p) + 3*sin(k*pi*p);         %通过拟合此函数来观察BP神经算法训练的效果。(对比)

net = feedforwardnet([20 20]);           %中间隐藏层(2个隐藏层,每一个隐藏层10个神经元)
net.layers{1}.transferFcn = 'tansig';    %这是每一层对应的激活函数
net.layers{2}.transferFcn = 'tansig';    %这里采用了双曲正切函数(方便于更好地捕捉函数t(三角 
                                         %函数类型))
net.layers{3}.transferFcn = 'purelin';   %类似于y=x;


net.trainParam.lr = 0.05;                %学习率(可以认为是步长)
net.trainParam.epochs = 10000;           %最长迭代次数
net.trainParam.goal = 1e-5;              %目标误差不得超过此值
                                         %训练时,迭代次数和目标误差二者有一个达到目的时便停止
net = train(net, p, t);                  %开始训练
y2 =net(p);                              %构建预测函数y2(利用net来构造)

plot(p, t, '-', p, y2, '+');             %绘制图像,t函数和拟合函数y2

此程序适用于拟合函数t,生成拟合函数y2,和t函数对比。下面给出一些结果。

从这里可以看出,拟合结果和本身函数t是非常接近的,这和最终的误差设置(net.trainParam.goal)是有很大关系的。

但是这里需要强调一点,由于系统的随机性(即系统会根据当前的时间来随机生成随机数。)从而导致一些问题(最终结果并不是预期,或者每一次运行结果可能并不相同)  这主要是由于神经网络的初始参数和权重的随机初始化,以及某些步骤中的随机性操作(如随机梯度下降法中的随机采样)等因素引起的。

因此,采用合适的算法训练(如此程序中,采用了默认的算法训练(具体地说,train函数使用的是短时记忆BPTT (Backpropagation Through Time) 即逆传播算法。该算法是一种常见的BP算法变种,特别适用于循环神经网络(如长短时记忆网络)等拓扑结构。)),这里我也解释不太清楚。这个过程无法预知采用哪一种合适的训练算法会使得结果更好,只能不断试错。

这里给出一些常见的训练算法:

1. `traingd`:该函数使用梯度下降算法(Gradient Descent)进行训练。它使用学习率来调整权重的更新步长,可以灵活地控制训练速度和稳定性。此方法也称为最速下降法,但是这种方法可能会循环在局部最小值处,无法得到预期的结果(因此,对于像此题中的正弦型函数,并不适用)

2. `traingdm`:该函数使用梯度下降算法的改进版本,即动量优化(Momentum)算法。动量优化引入了一个额外的动量项,用于加速梯度更新,从而提高网络的收敛速度。

3.trainlm:使用Levenberg-Marquardt(LM)算法进行训练,它是一种快速收敛的二次优化算法。LM算法通过结合牛顿法和梯度下降法的思想来更新网络的权重。它在训练过程中逐步调整步长和方向,以更好地逼近最优解。相比于传统的基于梯度的算法,如梯度下降法,LM算法通常能够提供更快的收敛速度和更好的收敛性能。此程序适用此训练函数,一样有较好的效果。

当然,除了训练函数之外,还有影响的因素比如:神经元数量,隐藏层数量,激活函数等等,但是需要强调,运行速度会随着神经元数量的增加而减缓(还是要谨慎处理)。

BP算法一般用于处理大量数据问题。如果数据比较少,推荐其他算法,如回归算法等,否则可能导致一些问题(如过拟合)。

如下面的例子。


speed = [20 30 40 50 60]; % 速度(输入)
mpg = [28 25 22 20 18]; % 油耗(输出)


net = feedforwardnet([20]); % 创建一个具有一个隐藏层的前馈神经网络
net.trainFcn = 'trainlm'; % 使用Levenberg-Marquardt算法作为训练函数
net.trainParam.epochs = 1000; % 设置训练的最大迭代次数
net.trainParam.lr = 0.002;
net.trainParam.goal = 1e-5;
net = train(net, speed, mpg);
predicted_mpg = net(speed);
plot(speed, mpg, 'ro', speed, predicted_mpg, 'b-');
legend('实际值', '预测值');
xlabel('速度 (mph)');
ylabel('油耗 (mpg)');

给出运行结果:

发现运行两次,两次结果并不相同。(原因见上面解释)

所以,对于少量的数据,并不推荐使用        BP神经网络算法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值