web-dev-qa-db-ja.com

PyTorchでL1 / L2正則化を追加しますか?

方法はありますか、PyTorchで簡単なL1/L2正規化を追加できますか?おそらくdata_lossreg_lossを追加するだけで正規化された損失を計算できますが、PyTorchライブラリのサポートを手動で行うことなくより簡単に行うための明示的な方法はありますか?

20
Wasi Ahmad

これはPyTorchのドキュメントに記載されています。 http://pytorch.org/docs/optim.html#torch.optim.Adagrad をご覧ください。最適化関数に重み減衰パラメーターを使用してL2損失を追加できます。

16
Kashyap

以下は、L2の正則化に役立つはずです。

optimizer = torch.optim.Adam(model.parameters(), lr=1e-4, weight_decay=1e-5)
17

L2正則化の場合、

lambda = torch.tensor(1.)
l2_reg = torch.tensor(0.)
for param in model.parameters():
    l2_reg += torch.norm(param)
loss += lambda * l2_reg

参照:

10
Sherif Ahmad

明らかに、torch.normを使用する@Sherif Ahmadは、直接的なアプローチよりも低速です。

import torch
x = torch.randn(1024,100)
y = torch.randn(1024,100)

%timeit torch.sqrt((x - y).pow(2).sum(1))
%timeit torch.norm(x - y, 2, 1)

出力されます:

124 µs ± 2.22 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)
284 µs ± 5.18 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

12GigのRAMを搭載した単一のGPU駆動ユニット。

1
prosti