此训练曲线适用于处理 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)
首先,我将为您留下一篇博客文章来源,它很好地解释了如何进行深度神经网络的训练过程。我相信无论如何,这都会对阅读有所帮助。
其次,不攀爬训练损失不能解释为非过拟合。相反,缺失的验证损失攀升可能表明您的模型没有过度拟合。
最终优化是全部与容量相关。如果您的模型无法过拟合,您可以尝试增加模型的参数数量,或者首先尝试减少数据,看看是否能够在整个数据集的一小部分上过拟合。
接下来要考虑的事情: