我想在正在构建的 tensorflow 模型中为我的简单RNN使用relu激活。它位于深层卷积网络之上。我正在尝试对图像序列进行分类。我注意到对于简单的RNN,keras和tensorflow源代码中的默认激活都是tanh。是否有一个原因?使用relu有什么问题吗?似乎relu会更好地帮助消失的梯度。
nn = tf.nn.rnn_cell.BasicRNNCell(1024, activation = tf.nn.relu)

最佳答案

RNN可能同时遇到梯度爆炸和梯度消失的问题。当学习的顺序很长时,这可能是一个非常微妙的平衡,可以很容易地推向另一个。这两个问题都是由取幂引起的-每层乘以权重矩阵和激活的导数,因此,如果矩阵大小或激活导数与1.0不同,则将有爆炸或消失的趋势。

ReLU并没有解决爆炸性梯度问题。实际上,它们可能比激活功能差,激活功能在重量较大时自然会受到限制,例如S型或tanh。

ReLU确实有助于消除梯度问题。但是,LSTM和GRU单元的设计也旨在解决相同的问题(处理距离很远的潜在微弱信号的学习),并且非常有效。

对于具有短时间序列的简单RNN,使用ReLU激活应该没有问题。为了解决训练时梯度爆炸的可能性,您可以查看梯度裁剪(将超出允许范围的梯度作为该范围的最小值或最大值进行处理)。

10-07 18:55
查看更多