R中nnet函数的衰减参数的目的?

use*_*882 10 r

我在R中使用nnet函数来训练我的神经网络.我没有得到nnet中的衰减参数是什么?这个步长是用于梯度下降方法还是用于克服过度拟合的正则化参数?

bla*_*lah 7

这是正规化以避免过度拟合.

文档(pdf):

decay:重量衰减的参数.默认值为0.

有关更多信息,请参阅作者的书" 现代应用统计与S.第四版",第245页:

确保f平滑的一种方法是限制估计类别,例如,通过使用有限数量的样条结.另一种方式是正则化,其中拟合标准被改变为

E + ?C(f)

对f的'粗糙度'处以罚分C. 权重衰减,特定于神经网络,使用权重wij的平方和作为惩罚....使用重量衰减似乎既有助于优化过程,又可以避免过度补偿.(重点补充)

  • 如果这是真的,设置衰减 = 0 应该会导致过度拟合的模型(具有最佳训练集精度)。在我的例子中,我得到了一个非常糟糕的训练集准确率(大约 10%)。给予衰减 = 1e-4 -> .8294, 衰减 = 2e-4 -> .8832, 5e-3 -> .9924, 1e-2 -> .9954, 1e-1 -> .9966, 1 -> .9644 . 所以我的东西衰变必须是一个参数来降低优化函数的学习率 (2认同)

War*_*ren 5

通过查看源代码来补充blahdiblah的答案,我认为该参数weights对应于反向传播的学习率(通过阅读手册我无法理解它是什么)。查看文件nnet.c,第236,在函数fpass 中

TotalError += wx * E(Outputs[i], goal[i - FirstOutput]);
Run Code Online (Sandbox Code Playgroud)

在这里,在一个非常直观的命名法中,E对应于bp错误,wx是传递给函数的参数,最终对应于标识符Weights[i]

此外,您可以decay通过转到同一文件的第317~319行,在函数内部确定该参数确实是它声称的那样VR_dfunc 中那样

for (i = 0; i < Nweights; i++)
    sum1 += Decay[i] * p[i] * p[i];
*fp = TotalError + sum1;
Run Code Online (Sandbox Code Playgroud)

其中p对应于连接的权重,这是权重衰减正则化的确切定义。