递归神经网络中的ReLU函数。权重变为无穷大或Z

2024-06-25 22:33:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我不熟悉机器学习。我读过,对于递归神经网络,ReLU函数比sigmoid函数要好,因为它存在消失梯度问题。在

我试图实现一个非常基本的递归神经网络,有3个输入节点,10个隐藏节点和3个输出节点。在

输入和隐藏节点都有ReLU函数,输出节点有softmax函数。在

然而,当我使用ReLU函数的几个时代(少于10)后,要么误差为0,要么误差无穷大,这取决于权重变化是从原始权重中加上还是减去的。在

weight = weight + gradient_decent #weights hits infinity
weight = weight - gradient decent #weights become 0

也因为它到达无穷大,所以产生了以下误差

^{pr2}$

然而,当我实现sigmoid函数时,错误就很好地解决了。但因为这是一个简单的例子,很好,但是如果我把它用在更大的问题上,我恐怕会碰到消失梯度问题。在

这是由于隐藏节点数量少造成的,如何解决这个问题?如果你需要代码样本,请评论,不要张贴代码,因为它太长。在

谢谢。在


Tags: 函数代码机器节点神经网络误差decent权重
2条回答

为了跟踪@lemm-ras的answerthis paper由Talathi和Vartak提出,递归权重矩阵的初始值将强烈影响具有reLU激活的递归神经网络的性能。特别地,作者证明了当递归权值矩阵被初始化为正定时,具有ReLU激活的递归单元网络的性能最好,最大特征值等于1,其他所有特征值小于1。他们的解释是,网络权重随时间变化的方式取决于网络的初始条件(如Talathi和Vartak的图2所示),并可能导致一些不同的情况:

案例1:如果所有的特征值都是一个,那么网络从一个稳定的条件开始,并且不会随着时间的推移而演变(图2a)

情况2:如果所有特征值都小于1,则网络被吸引到原点,网络将始终朝着零的递归权重矩阵演化(图2b)。在

情况3:如果任何eignevalues大于1,则网络没有稳定的吸引子,并且将“爆炸”(图2d)。在

情况4:如果递归权值矩阵有一个特征值为1,其余的特征值小于1,那么网络将向一个稳定的流形演化,并且它可以达到一个稳定的非零解(图2c)。我不知道这是否能保证对所有问题都是正确的,所以我认为最好把它看作是一个必要条件,但不能被证明是充分条件。在

从最初的问题看来,@rksh的问题是第二种情况,网络被吸引到零。尝试按照塔拉西和瓦塔克的建议初始化权重矩阵,看看这是否能解决问题。在

我不认为隐藏节点的数量是问题所在。在

在第一种情况下,由于梯度下降更新错误,权重接近无穷大。相对于权重的损失的梯度表示应该更新权重以增加损失的方向。由于人们(通常)希望最小化它,如果权重朝正方向更新,它们将增加损失,并且很可能导致发散。在

尽管如此,即使假设更新是正确的,我也会认为它更像是错误的初始化/超参数设置,而不是一个严格依赖于ReLU的问题(很明显,ReLU在其正部分爆炸,给出无穷大,而sigmoid饱和,给出1)。在

在第二种情况下,正在发生的是死区ReLU问题,饱和ReLU总是给出相同(零)的输出,并且它不能自我恢复。它的发生有很多原因(例如,错误的初始化,错误的偏差学习),但最有可能的是更新步骤太高。试着降低你的学习率,看看会发生什么。在

如果这不能解决问题,请考虑使用Leaky ReLU版本,也只是为了简单的调试目的。在

关于泄漏ReLU死ReLU的更多(和更好的解释)细节可以在这里找到:https://datascience.stackexchange.com/questions/5706/what-is-the-dying-relu-problem-in-neural-networks

相关问题 更多 >