是否可以在chainer或pytorch中对不同的权重集使用不同的L1 / L2正则化参数?

时间:2018-04-22 12:07:09

标签: neural-network pytorch

(作为示例)在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

1 个答案:

答案 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是您想要选择的权重索引的张量。最后,您不需要像在代码中那样进行全局正则化。