(作为示例)在pytorch中将noutput
目标值的简单线性模型实现为神经网络时:
l1=L.Linear(ninput, noutput)
(呼叫)
y = self.l1(x)
return y
添加此钩子将对所有权重进行L2正则化,在任何地方强加相同的 alpha = 0.01:
optimizer.add_hook(optimizer.WeightDecay(rate=0.01))
对于从所有ninput
输入单位到noutput
输出单位之一的每组权重,是否可以使用不同的 alpha ?
答案 0 :(得分:2)
由于我们在pytorch中工作,因此可以自己将其他标量添加到损失函数中。因此,假设您的类别损失为L(假设它是交叉熵损失)并且您将线性层定义为:
l1 = nn.Linear(in,out)
现在,如果你想对每组权重进行不同的正则化,那么你所要做的就是使用(即使用索引选择)收集权重并添加到最终的损失中:
loss = L (crossentropy loss) + sum ( alpha * norm(l1.weight[k]))
alpha超参数和范数主要是L2范数,在pytorch中它只是torch.norm(l1.weight)
,其中索引k是您想要选择的权重索引的张量。最后,您不需要像在代码中那样进行全局正则化。