是否可以在 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 的权重索引的张量。最后,您不需要像在代码中那样进行全局正则化。
(作为示例)在 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 的权重索引的张量。最后,您不需要像在代码中那样进行全局正则化。