GradNorm
- 不同任务的的梯度幅度大致相同
- 平衡不同任务的训练速率
梯度幅度和训练速率的定义
梯度幅度
首先是选模型的哪块参数来做梯度统计,这里选取的是所有任务共享层的最后一层。然后,通过计算每个任务loss相对于最后共享层的梯度的2范数,作为每个任务的梯度幅度表示,此外还计算了每个任务的梯度幅度,算一个均值,得到某次训练的梯度平均幅值。
训练速率
怎么去定义任务收敛的快慢,也即训练速率,论文这里用的是loss比,通常来说,网络最开始随机预测,此时loss最大,记为L(0),然后以任务i在t时刻的L(t)/L(0)作为任务i的逆训练速率(每个任务的时间都是一样了,所以这里只表现出loss之比)。然后还可以计算得到一个相对逆训练速率。可推出正训练速率:[ Li(0) - Li(t) ] / Li(0)。
通过公式1,可以让GW往GW的均值去靠。
公式1虽然指明了梯度2范数的更新方向,但是没有直接在梯度上体现,也没有告诉用户在loss_weigt上应该做什么调整。下面讲讲这块。
这里其实是增加了一个L1 loss来让GWi向target靠近,这里称为Lgrad。为了不让Lgrad在收敛过程中,wi逐渐学习得到0值,将第二项当作一个常数来对待了(代码上要怎么操作?)。加了Lgrad之外,最后对wi还做了一个归一化处理()。
上图是grad norm的一个展示图。这里提到,Grad norm相当于强行让每个任务的学习速率相等,但是在一些场景中,会要求一些任务具有相对较高或较低的梯度幅度。
下图展示了算法的流程图