在pytorch中进行L2正则化,最直接的方式可以直接用优化器自带的weight_decay选项指定权值衰减率,相当于L2正则化中的λ \lambdaλ,也就是:
中的λ \lambdaλ。但是有一个问题就是,这个指定的权值衰减是会对网络中的所有参数,包括权值w ww和偏置b bb同时进行的,很多时候如果对b bb进行L2正则化将会导致严重的欠拟合1,因此这个时候一般只需要对权值进行正则即可,当然,你可以获取模型中的所有权值,然后按照定义的方法显式地进行处理,得到一个正则损失之后在交给优化器优化,这是一个通用的方法。但是其实还有更为简单的方法,同样在优化器中提供了。
torch.optim中包含了很多现成的优化器,包括SGD,Adadelta,Adam,Adagrad,RMSprop等,使用它很简单,你需要传入一个可迭代的参数列表(里面必须都是Variable类型的)进行优化,然后你可以指定一些优化器的参数,如学习率,动量,权值衰减等。例子如:
optimiz