关于BP神经网络正则化(人工控制参数干扰训练)

您所在的位置:网站首页 bp算法的初始参数根据什么确定 关于BP神经网络正则化(人工控制参数干扰训练)

关于BP神经网络正则化(人工控制参数干扰训练)

2024-02-21 00:24| 来源: 网络整理| 查看: 265

根据长时间的学习

定期总结下心得

分享给大家

之前,发布过遗传算法优化BP神经网络

后面还学习了模拟退火算法优化BP神经网络

准备分享的,但感觉没啥新颖就没有写

后来还和小伙伴讨论过智能优化算法优化BP神经网络

我的感想是

只要各种智能优化算法都能够优化BP神经网络

即优化神经网络结构初始权值和偏重

那么,改进该智能优化算法真的是徒劳的

智能优化算法都有各自的优势和缺点

只要能够达到优化BP神经网络的效果

那么用哪一种智能算法都是可以的

为什么呢???

↓↓↓

那就讨论下BP神经网络吧

巴科斯-普拉特(BP)神经网络的技术

它基于深度学习

并且具有很强的随机性

意思就是,虽然通过智能算法优化过

但是主导权还在于ta神经网络本身

ta仍然会根据数据特征不断学习

随机更新网络结构中的参数

然后BP神经网络也是一种算法

简单点的拟合数据

复杂点的就是预测能力、自然语言处理、图像处理、信号处理等

神经网络具有学习的能力

ta对数据非常敏感

(可以说成对数学问题非常敏感,而生活中的大多问题都可以转化成数学问题)

能够从数据中找出前因后果

所以智能算法优化BP神经网络

侧重点还是在于BP神经网络

智能算法的优化只是帮网络缩小了一定的范围

让BP神经网络学习和训练的效率得以提高

而BP神经网络还得靠改进自身能力——“正则化”网络

作用是降低网络复杂度、防止网络过拟合

才能达到更好的效果

↓↓↓↓

修改BP神经网络训练参数

最直接简单的操作就是修改BP神经网络的训练参数:

net.trainParam.lr=0.006; %学习率 net.trainParam.goal=0.000001; %目标误差 net.trainParam.epochs=1000; %最大训练次数 net.divideParam.trainRatio=0.7; %用于训练的数据比例 net.divideParam.valRatio=0.3; %用于验证过拟合的数据比例 net.divideParam.testRatio=0; %注意要关掉测试数据占比 net.performParam.regularization=0.01; %L2正则化

通过设置这些参数指导网络进行训练,当然这种方法很呆板,只能靠个人能力经验去不断修改参数数值调试网络,直到神经网络模型达到尽可能好为止。

学习率:一般设置在0.005~1之间的一个数值,设置太大会导致模型过拟合,而设置太小则会导致模型收敛速度减慢。因此,需要确定一个合适的学习率来确保模型能够正确地拟合数据。

目标误差:该误差是均方误差mse的设置,建议设置的尽可能的小,设置的不够小的话一旦达到目标误差便会终止训练,设置足够的小的话即使达不到设置的值,网络还会参考其他参数进行训练。

最大训练次数:很多人以为该值的设置是让ta训练设置的那个值,其实不是的。该值只是神经网络在还有发挥空间的前提下到此为止,若没有发挥空间,神经网络训练几次就会停止的。

数据划分比例:在数据不足够多的情况(几千个样本)下,建议将测试集比例关掉设置为0。其次,在数据缺失严重的情况下(即还有很多明显的能够作为输入特征的数据,但是没有考虑),建议将训练集占比设置的更大、测试集占比设置的更小。

L2正则化:神经网络的正则化参数,它可以防止模型过拟合,从而提高模型的泛化能力。

人工干扰训练

不管怎么看、怎么设置

都感觉上面的操作非常呆

效率低,而且不一定有用

所以还是在网络训练过程中进行干扰来达到正则化

因此要将最大训练次数设置为1

net.trainParam.epochs=1; %最大训练次数

即每训练一次干扰(指导)一次

每训练完一次,网络结构的初始权值和偏重会跟新

于是,可以调取权值W和偏重B

用让其衰减的方法指导网络训练

即若权重没有减小,则网络继上一次重新开始训练

% 输入 a=[] % 输出 b=[] % 初始化权重下降值和正则化系数 weight=inf; λ=0.01; % 最大训练次数 num=50; for i=1:num % 训练神经网络 net=train(net,a,b); % 调取BP神经网络权重 w1=net.iw{1,1}; w2=net.lw{2,1}; % 添加惩罚 weights=λ*(sum(sum(abs(w1))+sum(abs(w2)))); % 判断权重是否下降 if weightsbest_error count=count+1; else count=1; end % 更新最优网络模型 if mse_error_test=max_count break; end end %% 观察训练样本和测试样本的输出均方误差曲线(性能) for ss=1 o=figure(2); set(o,'Position',[1180 510 560 420]) plot(mse_list_train,'r',linewidth=1.5); hold on plot(mse_list_test,'b',linewidth=1.5); hold off xlabel('训练次数') ylabel('均方误差') legend('训练样本','测试样本') titlestr=['BP神经网络训练性能图 终止次数:',num2str(ii),'次']; title(titlestr); drawnow update; end

cd777e53dbab46f89ed3de155e57475c.png

还有很多方法

总之,就是设置神经网络本身的训练次数为1

然后人为控制循环训练

循环中训练的要求自行设置

或者设计一些函数模型限制模型的更新

让神经网络训练更“听话”

找出最优模型

从而达到更好的仿真预测效果



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3