【问题标题】:Is it possible to use different L1 / L2 regularization parameters for different sets of weights in chainer or pytorch?是否可以在chainer或pytorch中为不同的权重集使用不同的L1/L2正则化参数?
【发布时间】:2018-04-22 12:07:09
【问题描述】:

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

【问题讨论】:

    标签: neural-network pytorch


    【解决方案1】:

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

    【讨论】:

    • OP 没有要求不同层的不同正则化。该问题要求为单个层中的每个输出权重使用不同的正则化器。
    • 哦,好吧..我想我读错了这个问题。我编辑了我的答案。感谢您指出@layog
    • 谢谢!事实上,人们可以自己实现权重正则化并将其作为损失函数的一个组成部分。干净整洁的解决方案。
    猜你喜欢
    • 2021-05-05
    • 1970-01-01
    • 2017-07-30
    • 1970-01-01
    • 1970-01-01
    • 2015-12-21
    • 2019-10-26
    • 2018-03-29
    • 1970-01-01
    相关资源
    最近更新 更多