You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

多任务学习中任务相互影响测算及任务亲和度计算方法咨询

多任务学习网络任务亲和度相关咨询

网络实现背景

我设计了一个多任务学习网络,包含若干共享层和适配5个不同任务的专属层,相关代码如下:

input_dim_train=X_train.shape[1]
n_input_dim = int(input_dim_train)
shared_model = Dense(input_dim_train)(inputs)
shared_model = Dense(n_input_dim, activation='relu')(shared_model)
shared_model = BatchNormalization(input_dim=n_input_dim)(shared_model)
shared_model = Dropout(0.1)(shared_model)

shared_model = Dense(int(n_input_dim//4), activation='relu')(shared_model)
shared_model = BatchNormalization(input_dim=n_input_dim)(shared_model)
shared_model = Dropout(0.1)(shared_model)

shared_model = Dense(int(n_input_dim//12), activation='relu')(shared_model)
shared_model = BatchNormalization(input_dim=n_input_dim)(shared_model)
shared_model = Dropout(0.1)(shared_model)

shared_model = Dense(int(n_input_dim//20), activation='relu')(shared_model)
shared_model = BatchNormalization()(shared_model)
shared_model = Dropout(0.1)(shared_model)

output1 = Dense(3, activation='softmax',name='target_1',)(shared_model)
output2 = Dense(2, activation='softmax',name='target_2')(shared_model)
output3 = Dense(4, activation='softmax',name='target_3')(shared_model)
output4 = Dense(2, activation='softmax',name='target_4')(shared_model)
output5 = Dense(3, activation='softmax',name='target_5')(shared_model)

model = Model(inputs=inputs, outputs=[output1, output2,output3,output4,output5])

model.compile(optimizer='adam', loss='categorical_crossentropy',metrics=['accuracy',f1_metric])

history=model.fit(X_train, [y_train_task1, y_train_task2,y_train_task3,y_train_task4,y_train_task5],
             validation_data=(X_test,[y_test_task1,y_test_task2,y_test_task3,y_test_task4,y_test_task5]),verbose='auto',epochs=n_epoch,batch_size=n_batch_size)

task1_pred,task2_pred,task3_pred,task4_pred,task5_pred  = model.predict(X_test)

运行效果

该网络运行效果良好,输出结果如下:
结果示意图

咨询问题

  • 如何衡量当前多任务学习场景中例如任务1对任务2的相互影响?
  • 我需要计算任务间的亲和度得分,是否有方法可以在训练过程中跨不同epoch计算任务间亲和度得分?

问题解答

任务间相互影响的衡量方式

你可以通过两种直观的方式判断任务间的相互作用:

  • 性能对比法:分别训练任务1、任务2的单任务基准模型,记录各自的精度、F1等核心指标,再和多任务训练模式下两个任务的指标做对比。如果多任务场景下任务2的指标优于单任务基准,说明任务1对任务2存在正向增益,反之则存在负向冲突。
  • 梯度对齐检测:计算两个任务的损失函数在共享层参数上的梯度余弦相似度,相似度为正且数值越高,说明两个任务的优化方向一致,能够互相促进;相似度为负则说明优化方向存在冲突,会互相拖累性能。

跨epoch任务亲和度的实现方法

有两种低成本的方法可以直接适配你现有的Keras框架,实现跨epoch的亲和度计算:

1. 梯度余弦亲和度(业界通用方案)

这个方案的得分可以直接反应任务间的优化适配度,取值范围[-1,1],数值越高亲和度越高。
实现逻辑:

  1. 模型编译完成后,额外定义两个梯度获取函数,分别输出任务1、任务2的损失对共享层最后一层输出的梯度值
  2. 在每个epoch训练结束后,取验证集或者训练集的一个batch数据输入梯度获取函数,得到两个梯度向量
  3. 计算两个向量的余弦相似度,就是当前epoch的亲和度得分,逐epoch存储即可得到变化趋势。

2. 预测相关性亲和度(实现成本最低)

如果不想修改梯度相关的代码,可以直接在每个epoch结束后,取两个任务在验证集上的预测结果,计算皮尔逊相关系数作为亲和度得分,数值越高说明两个任务的预测趋势一致性越强,亲和度越高。这个方法不需要改动你现有模型的任何结构,直接复用每个epoch的输出结果即可实现。


内容的提问来源于stack exchange,提问作者jeny ericsoon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 00:36:02