TF Transformer 模型永远不会过拟合,只会停滞不前:这条训练曲线的解读和改进建议

问题描述 投票:0回答:1

此训练曲线适用于处理 2D(不包括批次)顺序信号并使用 Adam 优化器、32 批次大小和学习率的 Transformer 模型:一个自定义 LR 调度程序,它复制“Attention is All You”中使用的预热调度程序需要纸。训练曲线如下所示,最终训练损失略低于验证损失,但训练损失永远不会开始回升,我将其解释为模型永远不会开始过度拟合,只是在 90 纪元后停止重新调整权重。

更好的解释和解决方案来改进这个模型?

下面是我的简短的可重现代码:

x_train = np.random.normal(size=(32, 512, 512))
batch_size = 32
H, W = x_train.shape
rows, cols = np.indices((H, W), sparse=True)
padding_mask_init = np.zeros((H, W, W), dtype=np.bool_)
padding_mask_init[rows, 1:, cols] = 1
padding_mask = padding_mask_init[:batch_size]
embed_dim = 512
dense_dim = 2048
num_heads = 2
shape = (batch_size, embed_dim, 512) #(32, 512, 512)
decoder_inputs = layers.Input(batch_input_shape=shape, dtype=tensorflow.float16)
mha_1 = layers.MultiHeadAttention(num_heads=num_heads, key_dim=embed_dim)
mha_2 = layers.MultiHeadAttention(num_heads=num_heads, key_dim=embed_dim)
layernorm_1 = layers.LayerNormalization()

Z = decoder_inputs
Z = mha_1(query=Z, value=Z, key=Z, use_causal_mask=True, attention_mask=padding_mask)
Z = layernorm_1(Z + decoder_inputs)
Z = mha_2(query=Z, value=decoder_inputs, key=decoder_inputs, attention_mask=padding_mask)
outputs = layers.TimeDistributed(keras.layers.Dense(embed_dim, activation="softmax"))(Z)

model = keras.Model(decoder_inputs, outputs)
model.compile(loss="mean_squared_error", optimizer=tf.keras.optimizers.Adam(learning_rate=lr_schedule(embed_dim, 3000),beta_1=0.9,beta_2=0.98,epsilon=1.0e-9), metrics=["accuracy"])

history = model.fit(dataset, epochs=200, validation_data=val_dataset)
python machine-learning keras deep-learning transformer-model
1个回答
0
投票

首先,我将为您留下一篇博客文章来源,它很好地解释了如何进行深度神经网络的训练过程。我相信无论如何,这都会对阅读有所帮助。

其次,不攀爬训练损失不能解释为非过拟合。相反,缺失的验证损失攀升可能表明您的模型没有过度拟合。

最终优化是全部与容量相关。如果您的模型无法过拟合,您可以尝试增加模型的参数数量,或者首先尝试减少数据,看看是否能够在整个数据集的一小部分上过拟合。

接下来要考虑的事情:

  • 你的学习率可能太高(由急剧下降和“早期”收敛表明)
  • 你的批量大小可能有点太高了(由损失曲线的小带宽表明,但这很难说)
  • 添加图层并返回报告。
© www.soinside.com 2019 - 2024. All rights reserved.