在使用 CTC 损失的种子实验中存在较大的变异性
大家好, 我目前正在使用 ESPnet 中的 MLSUPERB 设置进行实验(基于代码库的 202511 版本),我想询问一下,即使我使用相同的种子控制随机性,我在运行过程中观察到的变化程度如何。我的实现代码可以在以下链接中找到:https://GitHub.com/josecruzado21/espnet_ctc_dro/tree/ml-superb-experiments 我的设置非常接近默认流程,仅做了少量修改以限制训练范围在更小的语言和数据集中。配置如下: - 数据:MLSUPERB2 的子集 - 语言和数据集:英语(VoxForge)、德语(VoxForge)、希伯来语(FLEURS)、日语(FLEURS)、俄语(FLEURS)、西班牙语(FLEURS) - 每种语言的 1 小时训练数据 - 预训练模型:MMS 300M(facebook/mms-300m) - 全面微调所有预训练权重 - 在编码器嵌入上添加一个额外的注意力头用于 ASR - 仅使用 CTC 训练(ctc_weight = 1,使用 ESPnet 内置的 CTC) - 进行 40 个 epoch 的训练 - 批量大小 = 4,使用 16 个步骤的梯度累积 为了控制随机性,我在 ESPnet 中设置 seed=0。我还验证了批处理、排序和初始向前传播是确定的:在 5 个运行中,每个样本的 CTC 损失在第一个反向传播(即第 1 个 epoch 的第 17 个批次)之前是相同的。 然而,我观察到最终性能在不同运行中存在显著差异。对于日语的例子,最佳和最差 CER 的差异大约为 19% 。我附上了一个图表,显示了 5 个运行的 CER,以及总结结果的表格。 我了解到,在反向传播中,CTC 损失可能会表现出非确定性(取决于实现和硬件),但我想问: - 在这个设置中,这种程度的变化是否可以预期? - 存在已知的 ESPnet(或 PyTorch CTC)中的非确定性源,可以解释这种差异吗? - 有没有建议的做法来减少这种变化(例如,特定的标志、确定性设置或替代实现)? 任何指导都将非常有用
内容来源: espnet/espnet