避免爆炸/消失的梯度问题与NARX网?

19次意见(过去30天)
我正在使用5个输入和1个输出的神经网络执行系统识别。在训练过程中,当梯度稳定时,NARX网络似乎能给出很好的结果。然而,在闭环训练NARX网络时,我经常遇到梯度爆炸/消失的问题。我可以在nntraintool窗口中观察到这一点-梯度发散并变得不稳定,然后在触发器中达到最大mu性能标准,并过早地结束网络训练。请注意,我首先以1e-09的性能目标在开环中训练NARX网络。然后,我用开环权重和偏差作为初始值关闭循环并以闭环形式重新训练。
我想保留NARX网络架构,因为当训练不被爆炸梯度中断时,它在新数据上表现得相当好。你有什么策略或例子来避免NARX网络的爆炸/消失梯度问题吗?我似乎找不到任何讨论、文档或例子来讨论这个问题。
我研究过的一种解决方法是使用泄漏的ReLu激活函数。然而,对于NARX网络的隐藏层传递函数,我没有看到这样的选项。我能找到的最接近的是“poslin”,但我仍然遇到类似的不稳定渐变。我看到的另一个解决方法是使用LSTM或GRU网络。然而,我训练过的每一个LSTM/GRU网络都没有达到与NARX网络相同的性能水平。

接受的答案

Anshika Chaurasia
Anshika Chaurasia 2020年9月1日
嗨,克里斯,
正如您所提到的,一个可能的解决方案是使用泄漏的ReLU激活函数作为 NARX网络的隐层传递函数 .考虑以下步骤将tansig传递函数替换为泄漏的ReLU:
=====模块的功能========
% Leaky ReLU传递函数
函数A = leakyrelu_apply(n,scale,~)
如果n > = 0
A = n;
其他的
A = scale*n;
结束
结束
  • 在脚本中进行以下修改:
%时间循环
ts = 1: ts
%第一层
a1 = leakyrelu_apply(repmat(b1,1,Q) + IW1_1*tapdelay1 + IW1_2*tapdelay2,0.01);
结束
你也可以试试 格洛洛(或泽维尔)或贺初始化 初始化权重和偏差。指 链接 用于实现荣耀初始化。
3评论
克里斯·P
克里斯·P 2020年9月2日
哦,我不知道你可以这样重新训练一个网络。我一直在使用工作空间内的净变量,但相反,您建议您可以使用生成的脚本重新训练网络?有这样的例子吗?

登录评论。

更多答案(1)

格雷格·希斯
格雷格·希斯 2020年9月1日
使用更高的开环性能目标。然后在循环关闭后降低该值。
我已经很多年没有做过这个了,所以我不能给出确切的数字细节。
然而,我记得总是缩放我的非整数输入和目标,使其具有零均值和单位方差。
希望这能有所帮助。
格雷格
3评论

登录评论。

社区寻宝

在MATLAB Central中找到宝藏,并发现社区如何帮助您!

开始狩猎!