为什么tensorflow和keras SimpleRNN图层默认激活tanh

cha*_*255 3 keras tensorflow

我想在我正在构建的张量流模型中使用relu激活我的简单RNN.它位于深度卷积网络之上.我试图对一系列图像进行分类.我注意到,对于简单的RNN,keras和tensorflow源代码中的默认激活都是tanh.是否有一个原因?使用relu有什么问题吗?似乎relu会更好地消除渐变渐变.

nn = tf.nn.rnn_cell.BasicRNNCell(1024, activation = tf.nn.relu)

Nei*_*ter 7

RNN可能受到爆炸梯度和消失梯度问题的影响.当要学习的序列很长时,这可能是一个非常微妙的平衡,非常容易地倾向于一个或另一个.这两个问题都是由取幂引起的 - 每一层都乘以权重矩阵和激活的导数,因此如果矩阵幅度或激活导数与1.0不同,则会出现爆炸或消失的趋势.

ReLU无助于解决梯度问题.事实上,它们可能比激活函数更糟糕,激活函数在权重较大时自然受限,例如S形或tanh.

ReLU 确实有助于消除梯度问题.然而,LSTM和GRU单元的设计也旨在解决相同的问题(处理从许多时间步之外的潜在微弱信号的学习),并且非常有效地这样做.

对于具有短时间序列的简单RNN,使用ReLU激活应该没有错.为了解决在训练时爆炸渐变的可能性,您可以查看渐变剪裁(将允许范围之外的渐变视为该范围的最小值或最大值).