我的循环神经网络(LSTM,resp. GRU)的行为方式我无法解释。当准确率突然下降(并且损失迅速增加)时,训练开始并且训练良好(结果看起来非常好) - 训练和测试指标。有时网络会变得疯狂并返回随机输出,有时(如三个给定示例中的最后一个)它开始向所有输入返回相同的输出。
你对这种行为有什么解释吗?欢迎任何意见。请参阅任务描述和下图。
任务:从一个单词预测它的 word2vec 向量
输入:我们有一个自己的 word2vec 模型(标准化),我们向网络输入一个单词(一个字母一个字母)。我们填充单词(参见下面的示例)。
示例:我们有一个单词football,我们想要预测其 100 维宽的 word2vec 向量。那么输入是$football$$$$$$$$$$
。
行为的三个示例:
单层 LSTM
model = Sequential([
LSTM(1024, input_shape=encoder.shape, return_sequences=False),
Dense(w2v_size, activation="linear")
])
model.compile(optimizer='adam', loss="mse", metrics=["accuracy"])
单层 GRU
model = Sequential([
GRU(1024, input_shape=encoder.shape, return_sequences=False),
Dense(w2v_size, activation="linear")
])
model.compile(optimizer='adam', loss="mse", metrics=["accuracy"])
双层 LSTM
model = Sequential([
LSTM(512, input_shape=encoder.shape, return_sequences=True),
TimeDistributed(Dense(512, activation="sigmoid")),
LSTM(512, return_sequences=False),
Dense(256, activation="tanh"),
Dense(w2v_size, activation="linear")
])
model.compile(optimizer='adam', loss="mse", metrics=["accuracy"])
我们在另一个项目中也经历过这种行为,之前使用了类似的架构,但其目标和数据不同。因此,原因不应隐藏在数据或特定目标中,而应隐藏在架构中。