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

Is it possible to use different L1 / L2 regularization parameters for different sets of weights in chainer or 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

因为我们在 pytorch 中工作,所以可以自己添加其他 标量 到损失函数。所以假设你的分类器的损失是 L(假设它是交叉熵损失)并且你有一个线性层定义为:

l1 = nn.Linear(in,out)

现在,如果您想对每组权重进行不同的正则化,那么您所要做的就是使用(即 select 使用索引)收集权重并添加到最终损失中:

loss = L (crossentropy loss) + sum ( alpha * norm(l1.weight[k]))

alpha 超参数和范数主要是 L2 范数,在 pytorch 中它只是 torch.norm(l1.weight),其中索引 k 是您想要 select 的权重索引的张量。最后,您不需要像在代码中那样进行全局正则化。