如何使用 mxnet 包为 R 中的前馈神经网络指定正则化参数(L1 或 L2)?

How to specify regularization parameter (L1 or L2) for a feed forward neural network in R using the mxnet package?

我正在使用 R mxnet 包。这是我当前使用的代码块。但我不确定如何指定正则化。

dpLnModel <- mx.model.FeedForward.create(symbol             = out,
                                         X                  = trainX,
                                         y                  = trainY,
                                         ctx                = mx.cpu(),
                                         num.round          = numIter,
                                         eval.metric        = mx.metric.rmse,
                                         array.batch.size   = 50,
                                         array.layout       = "rowmajor",
                                         verbose            = TRUE,
                                         optimizer          = "rmsprop",
                                         eval.data          = list(data  = testX,
                                                                   label = testY
                                         ),
                                         initializer        = mx.init.normal(initValVar),
                                         epoch.end.callback = mx.callback.log.train.metric(5, logger)
)

您可以设置优化器的 weight_decay 选项。 weight decay 相当于给参数加了一个全局的l2 regularizer

optimizer = mx.SGD(lr=0.1, momentum=0.9, weight_decay=0.00001)

我不太熟悉 R API,但从 Python API 来看,我希望您在 mx.fit(model, optimizer, train_provider, n_epoch=20, eval_data=eval_provider) 中指定优化器,其中第一个参数是 mx.FeedForward 模型而不是 mx.FeedForward.create.

请参阅文档以获取更多信息:https://media.readthedocs.org/pdf/mxnet-test/latest/mxnet-test.pdf

正如@leezu 的回答所说,您需要设置权重衰减以获得 L2 正则化。在 R API 中,您需要的参数是 wd 例如

dpLnModel <- mx.model.FeedForward.create(symbol             = out,
                                         X                  = trainX,
                                         y                  = trainY,
                                         ctx                = mx.cpu(),
                                         num.round          = numIter,
                                         eval.metric        = mx.metric.rmse,
                                         array.batch.size   = 50,
                                         array.layout       = "rowmajor",
                                         verbose            = TRUE,
                                         optimizer          = "rmsprop",
                                         wd                 = 0.00001)

我认为您可以包含来自 mx.opt.rmsprop 的任何参数。请注意,那里的文档说 wd 的默认值为零,即没有正则化。