Deep learning 为什么LSTM自动编码器使用';relu';作为它的激活功能?

Deep learning 为什么LSTM自动编码器使用';relu';作为它的激活功能?,deep-learning,lstm,autoencoder,Deep Learning,Lstm,Autoencoder,我在看博客,作者用了“relu”而不是“tanh”,为什么? 首先,ReLU功能不是万灵丹激活功能。具体来说,它仍然受到爆炸梯度问题的困扰,因为它在正域中是无界的。这意味着,这个问题在更深层次的LSTM网络中仍然存在。大多数LSTM网络变得非常深,因此它们有相当大的机会遇到爆炸性梯度问题。在每个时间步使用相同的权重矩阵时,RNN也具有爆炸梯度。有一些方法,例如梯度剪裁,可以帮助减少RNN中的此问题。然而,ReLU函数本身并不能解决爆炸梯度问题 ReLU函数确实有助于减少消失梯度问题,但它不能完

我在看博客,作者用了“relu”而不是“tanh”,为什么?


首先,ReLU功能不是万灵丹激活功能。具体来说,它仍然受到爆炸梯度问题的困扰,因为它在正域中是无界的。这意味着,这个问题在更深层次的LSTM网络中仍然存在。大多数LSTM网络变得非常深,因此它们有相当大的机会遇到爆炸性梯度问题。在每个时间步使用相同的权重矩阵时,RNN也具有爆炸梯度。有一些方法,例如梯度剪裁,可以帮助减少RNN中的此问题。然而,ReLU函数本身并不能解决爆炸梯度问题

ReLU函数确实有助于减少消失梯度问题,但它不能完全解决消失梯度问题。方法,例如,可以帮助进一步减少消失梯度问题


现在,回答您关于使用ReLU函数代替tanh函数的问题。据我所知,对于这个特殊的门,ReLU和tanh激活函数本身应该没有太大的区别。它们都不能完全解决LSTM网络中的消失/爆炸梯度问题。有关LSTM如何减少消失和爆炸梯度问题的更多信息,请参阅此部分。

首先,ReLU功能不是万灵丹激活功能。具体来说,它仍然受到爆炸梯度问题的困扰,因为它在正域中是无界的。这意味着,这个问题在更深层次的LSTM网络中仍然存在。大多数LSTM网络变得非常深,因此它们有相当大的机会遇到爆炸性梯度问题。在每个时间步使用相同的权重矩阵时,RNN也具有爆炸梯度。有一些方法,例如梯度剪裁,可以帮助减少RNN中的此问题。然而,ReLU函数本身并不能解决爆炸梯度问题

ReLU函数确实有助于减少消失梯度问题,但它不能完全解决消失梯度问题。方法,例如,可以帮助进一步减少消失梯度问题


现在,回答您关于使用ReLU函数代替tanh函数的问题。据我所知,对于这个特殊的门,ReLU和tanh激活函数本身应该没有太大的区别。它们都不能完全解决LSTM网络中的消失/爆炸梯度问题。有关LSTM如何减少消失和爆炸梯度问题的更多信息,请参阅此。

谢谢,非常详细谢谢,非常详细
lstm_autoencoder = Sequential()

# Encoder
lstm_autoencoder.add(LSTM(timesteps, activation='relu', input_shape=(timesteps, n_features), 
return_sequences=True))
lstm_autoencoder.add(LSTM(16, activation='relu', return_sequences=True))
lstm_autoencoder.add(LSTM(1, activation='relu'))
lstm_autoencoder.add(RepeatVector(timesteps))

# Decoder
lstm_autoencoder.add(LSTM(timesteps, activation='relu', return_sequences=True))
lstm_autoencoder.add(LSTM(16, activation='relu', return_sequences=True))
lstm_autoencoder.add(TimeDistributed(Dense(n_features)))