最近我在研究深度学习中的多任务学习(也称为多目标学习,Multi-Task Learning等),发现了一篇不错的综述,觉得非常值得分享。希望这篇文章也能给你带来启发。
单一模型可能会忽略一些相关任务中的潜在信息,通过在不同任务之间共享参数,可以提升模型的泛化能力。从机器学习的角度来看,多任务学习可以被视为一种归纳转移(Inductive Transfer),通过提供归纳偏差(Inductive Bias)来改进模型效果。例如,使用L1正则化可以假设模型倾向于稀疏解(参数较少)。在多任务学习中,这种先验是通过辅助任务提供的,更具灵活性,引导模型关注其他任务,从而提高整体泛化性能。
所有任务共享部分参数(通常是底层参数),而在特定任务层使用各自独立的参数。这种方法可以降低过拟合的概率,过拟合的概率与任务数成正比。
每个任务有自己的参数,通过约束不同任务参数间的差异来体现相似性,例如使用L2范数或迹范数。
目标是强制模型只关注部分特征,前提是不同任务之间必须相关。假设K个任务有相同的特征和模型参数,构成一个矩阵A(D×K),其中D为参数维度,K为任务数,目标是使这些任务只使用部分特征,即矩阵A的一些行变为0。最简单的想法是使其成为一个低秩矩阵,或者使用L1正则,因为L1可以将某些特征约束为0。通常,使用lq范数对每个特征进行约束,然后使用L1范数进行进一步约束。
当任务之间相关性较弱时,使用上述方法可能导致负向效果。此时,希望添加的先验知识是某些任务之间是相关的,但某些任务之间相关性较差。可以通过引入任务聚类来约束模型,例如惩罚不同任务的参数向量及其方差,限制不同模型趋向于不同的聚类中心。
在计算机视觉中,通常共享卷积层,然后是特定任务的深度神经网络层,通过设置任务层的先验,使模型学习任务间的关系。
从一个简单结构开始,贪婪地动态拓宽模型,使相似的模型聚类。虽然贪婪方法可能无法学到全局最优结构,但它可以简化模型。
软参数共享,通过线性组合学习前一层的输入,允许模型决定不同任务之间的共享程度。
寻找更好的多任务结构,复杂的任务底层应由较低级别的任务目标监督。
对多个自然语言处理任务预先设定层次结构,然后联合学习。
不考虑学习共享结构,而是考虑每个任务的不确定性。通过优化损失函数(高斯似然函数带任务依赖的不确定性),调节不同任务之间的相似性。
对每层参数进行分解,分为共享和特定任务的参数。
硬参数共享、交叉缝合网络、块稀疏正则化和任务层次结构的结合,使模型自己学习哪些层和子空间共享,在哪里找到输入的最佳表示。
我们主要关注主任务,但希望从有效的辅助任务中受益。目前选择辅助任务的方法包括:
任务是否相似不是非黑即白的,越相似的任务收益越大。相关性的衡量方法包括:
硬参数共享已经存在了20多年,仍然是流行的方法。而学习什么要共享也非常有价值。我们对任务的理解(相似性、关系、层次结构、对多任务学习的好处)仍然有限,希望未来能有更多的进展。
希望这些内容对你有所帮助。