关于BP神经网络正则化(人工控制参数干扰训练) |
您所在的位置:网站首页 › bp算法的初始参数根据什么确定 › 关于BP神经网络正则化(人工控制参数干扰训练) |
根据长时间的学习 定期总结下心得 分享给大家 之前,发布过遗传算法优化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还有很多方法 总之,就是设置神经网络本身的训练次数为1 然后人为控制循环训练 循环中训练的要求自行设置 或者设计一些函数模型限制模型的更新 让神经网络训练更“听话” 找出最优模型 从而达到更好的仿真预测效果 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |