Keras:为什么LSTM在训练过程中比SimpleRNN快很多

v8wbuo2f  于 2023-01-17  发布在  其他
关注(0)|答案(1)|浏览(195)

当我尝试使用SimpleRNN与LSTM时,我发现SimpleRNN训练的ETA为30分钟,而LSTM的ETA为20秒。但是SimpleRNN的运算应该比LSTM少。是什么导致了如此巨大的差异?我使用SimpleRNN是错误的吗?

import tensorflow as tf

SEQUENCE_LENGTH = 80

(x_train, y_train), (x_test, y_test) = tf.keras.datasets.imdb.load_data(num_words = 2000)
x_train = tf.keras.preprocessing.sequence.pad_sequences(x_train, maxlen=SEQUENCE_LENGTH)
x_test = tf.keras.preprocessing.sequence.pad_sequences(x_test, maxlen=SEQUENCE_LENGTH)

model = tf.keras.models.Sequential([
    tf.keras.layers.Embedding(2000, 128),
    tf.keras.layers.SimpleRNN(8),
    # tf.keras.layers.LSTM(8),
    tf.keras.layers.Dense(1, activation="sigmoid"),
])

model.compile(
    loss="binary_crossentropy",
    optimizer="adam",
    metrics=["accuracy"],
)

model.fit(x_train, y_train, batch_size=32, epochs=1)
ppcbkaq5

ppcbkaq51#

简单RNN:-输入(xt)和前一个输出(ht-1)的简单乘法,通过Tanh激活函数传递。不存在门。递归神经网络(RNN)具有递归连接,其中输出被传输回RNN神经元,而不是仅将其传递到下一个节点。

RNN模型中的每个节点都充当一个记忆单元,持续进行计算和操作。RNN会记住整个时间段内的每一条信息。RNN在循环层中有反馈回路。这使它们能够在“记忆”中保持信息。但是,可能难以训练标准RNN来解决需要学习长期时间依赖性的问题。这是因为损失函数的梯度随时间呈指数衰减(称为消失梯度问题)。

**LSTM:-**LSTM通过引入新的门(例如输入(i)和遗忘(f)门)来处理消失和爆炸梯度问题,这些门允许对更新和调节LSTM网络中的单元状态的梯度流进行更好的控制,并且使得能够更好地保持“长范围依赖性”。

LSTM通过忽略网络中无用的数据/信息来处理梯度消失。如果其他输入(句子前面的单词)没有有价值的数据,LSTM将忘记该数据,并产生结果“削减预算。
它包含4个由sigmoid函数(σ)或tanh函数激活的网络,每个网络都有自己不同的参数集。

    • 忘记栅极层(f):*-决定从单元状态中忘记哪些信息
    • 输入门层(i):*-这也可以是记忆门。它决定哪些新候选与该时间步长相关
    • 新候选门控层(n):*-创建要存储在单元状态中的新候选集
    • 输出栅极层(o):*-确定输出单元状态的哪些部分。

请检查此link以更好地理解此内容。

相关问题