多任务学习 NN 只训练几个任务

数据挖掘 机器学习 张量流 喀拉斯 多任务学习
2022-03-02 09:35:20

我对机器学习领域相当陌生,但我正在为我正在从事的项目构建一个多任务网络。不幸的是,尽管我尽了最大的努力搜索和挖掘文档、博客和研究论文,但到目前为止,我无法一次完成多个任务的网络培训。

就上下文而言,该问题需要一组金属测试样本的图像,所有这些图像都是在标准照明和标准距离下拍摄的。出于保密原因,我不能共享数据集本身。该网络的目标是能够对 3 个不同区域中的 3 个不同的表面缺陷进行评分,共 9 个输出,每个输出具有从 0 到 5 的整数评分(每个输出有 6 个可能的结果)。

我一直在使用 Keras 在 Python 中编写 NN,并使用 TensorBoard 可视化指标和图形。

问题是,当我尝试训练网络时,它似乎只(最多)学习了 9 个任务中的 4 个,即使每个图像对每个任务都有一个评分。为了说明我的观点,这里有两个 TensorBoard 指标的屏幕截图,其中一个比较成功的训练运行,以及显示网络结构的图表:

TensorBoard 第 1 页 TensorBoard 第 2 页 张量板图

正如你所看到的,WCP_3T 和 WCP_5T 任务训练得很好,但实际上没有其他的(WCP_F 任务的高精度是由于权重过大的数据,我担心其他的不多)。在我看来,其他每项任务的准确度平台似乎是网络快速找到该任务最常见的评分,并保持在那里。因此,每个任务的不同精度是该类别数据的产物。

我尝试过加深(和浅化)其他两个主要分支(BS 和 BD),我尝试过改变学习率、批量大小、优化器函数(当前使用 Adam)和激活函数(当前对 WCP 分支和 LeakyReLU 使用 relu对于另外两个,但我也为他们尝试了普通的 relu,但没有任何好处)。我已经改变了各个卷积层中的过滤器数量,并且还增加和减少了各个层的 dropout。尽管如此,我似乎没有尝试让网络训练所有任务。

数据集的大小可能是个问题,但我只有少量可用的图像,我认为不可能获得更多。我目前正在使用 506 张图像的训练集和 32 的批量大小,每次测试和验证只留下大约 170 张图像。提供更多图像的数据增强也可能是不可能的,因为这可能会改变不同缺陷的分数,我不知道如何(他们由专家评分,然后数据被传递给我完成这项任务)。

如果有人以前遇到过类似的问题并且可以建议我可以尝试的其他方法,或者至少可以将我指向可能有助于解决我的问题的地方,我将非常感激!

1个回答

所以,事实证明,我的问题与网络结构有关,而不是其他任何事情。我试图分享太多较低的级别,然后仍然没有为后来的分支留出足够的空间来学习各个特征/位置。最后,我重新构建了我的网络,使得只有 1-2 个共享卷积层,然后每个主分支共享 1 个进一步的卷积层,然后每个分支再次分成 3 个子分支(每个输出一个),每个子分支都有它们的自己的卷积层、密集层、展平层和 softmax 层。我也可能在每个卷积层上有太多过滤器。

这启用了 9 个输出中的每一个输出的“训练”,但由于网络的深度和小数据集,我不得不尝试克服一些严重的过度拟合。我目前正在尝试纠正此问题的方法。