之前回答过一个类似的问题。多任务训练时,先对loss求和再使用一个Adam做梯度下降,不等价于对多个任务使用不同的Adam做梯度下降,然后求和。
具体的区别是第二种方法能对不同的任务学到不同的适配学习率。
而第一种方法只能依赖于训练初始时刻不同任务被分配的权重。
考虑 loss = ,其中 是两个任务共有的参数,
是第一个任务独有的参数, 是第二个任务独有的参数。
对第一个任务做梯度下降,损失函数定为 ,
假设此时并未使用更新后的神经网络参数重新计算一个batch的loss,
对第二个任务做梯度下降,损失函数定为 ,则
因为整体的 loss 等于 , 所以两者并无区别。
假设此时使用更新后的神经网络参数重新计算了一个batch的loss,
对第二个任务做梯度下降,损失函数定为 ,则
原则上, , 在这种假设下,对第二个任务使用 SGD 时,神经网络表示的泛函已经发生了改变。
假设神经网络的优化目标有如下泛函形式,
其中 x 是神经网络输入, 分别是共有神经元与独立神经元经过训练后学会的函数,加 ‘ 表示这些函数的一阶导数。完全训练后,对这些函数的任意改变都会导致 的增大。
如果第一次更新后,函数 y 更新为 , 其中 。
对第二个任务做梯度下降时,就要考虑函数形式发生变化后 loss 对 与 的梯度。
函数形式发生变化后,损失函数的变分大概为,
里面会多出来由于 与 改变引起的 , , , 等项。
暂时还没想明白这个影响有多大,以后想的更清楚了再来更新。