【问题标题】:How to calculate the regularization parameter in linear regression如何计算线性回归中的正则化参数
【发布时间】:2012-08-24 07:22:09
【问题描述】:

当我们有一个高阶线性多项式用于拟合线性回归设置中的一组点时,为了防止过度拟合,我们使用正则化,并在成本函数中包含一个 lambda 参数。这个 lambda 然后用于更新梯度下降算法中的 theta 参数。

我的问题是我们如何计算这个 lambda 正则化参数?

【问题讨论】:

    标签: machine-learning data-mining regression


    【解决方案1】:

    封闭形式 (TIKHONOV) 与梯度下降

    嗨!对那里的直观和一流的数学方法进行了很好的解释。我只是想添加一些不“解决问题”的特殊性,它们肯定有助于加快并为寻找良好正则化超参数的过程提供一些一致性。

    我假设您正在讨论 L2(也称为“权重衰减”)正则化,由 lambda 项线性加权,并且您正在优化您的模型可以使用封闭形式的Tikhonov 方程(强烈推荐用于低维线性回归模型),或者使用带有反向传播的梯度下降的一些变体。在这种情况下,您希望为 lambda 选择提供最佳泛化能力的值。


    封闭式 (TIKHONOV)

    如果您的模型能够采用 Tikhonov 方式(Andrew Ng 表示尺寸小于 10k,但此建议至少有 5 年的历史)Wikipedia - determination of the Tikhonov factor 提供了一个有趣的 封闭形式解决方案,它具有已被证明可提供最佳价值。但是这个解决方案可能会引发一些我不知道的实现问题(时间复杂度/数值稳定性),因为没有主流算法来执行它。不过,这个2016 paper 看起来很有前途,如果您真的必须将线性模型优化到最佳状态,可能值得一试。

    • 为了更快地实现原型,这个2015 Python 包似乎迭代地处理它,您可以让它优化然后提取 lambda 的最终值:

    在这种新的创新方法中,我们推导出了一种迭代方法来解决一般的 Tikhonov 正则化问题,该方法收敛到无噪声解,不强烈依赖于 lambda 的选择,但仍然避免了反演问题。

    并且来自项目的GitHub READMEInverseProblem.invert(A, be, k, l) #this will invert your A matrix, where be is noisy be, k is the no. of iterations, and lambda is your dampening effect (best set to 1)


    梯度下降

    本部分所有链接均来自 Michael Nielsen 的优秀在线书籍《神经网络与深度学习》,推荐阅读!

    对于这种方法,似乎更不用说:成本函数通常是非凸的,优化是通过数值执行的,模型的性能是通过某种形式的交叉验证来衡量的(参见 Overfitting and Regularizationwhy does regularization help reduce overfitting 如果你还没有受够)。但即使在交叉验证时,尼尔森也提出了一些建议:你可能想看看this detailed explanation,了解 L2 正则化如何提供权重衰减效果,但总结是它与的数量成反比样本n,所以在计算带有L2项的梯度下降方程时,

    照常使用反向传播,然后将(λ/n)*w 添加到所有权重项的偏导数中。

    他的结论是,当想要对不同数量的样本产生类似的正则化效果时,必须按比例改变 lambda:

    我们需要修改正则化参数。原因是因为训练集的大小nn=1000变成了n=50000,这改变了权重衰减因子1−learning_rate*(λ/n)。如果我们继续使用λ=0.1,这将意味着更少的权重衰减,从而更少的正则化效果。我们通过更改为λ=5.0 来补偿。

    这仅在将相同模型应用于不同数量的相同数据时有用,但我认为它打开了一些关于它应该如何工作的直觉的大门,更重要的是,通过允许您加快超参数化过程在较小的子集中微调 lambda,然后按比例放大。

    为了选择准确的值,他在关于how to choose a neural network's hyperparameters 的结论中建议采用纯经验方法:从 1 开始,然后逐步乘除以 10,直到找到合适的数量级,然后在该区域内进行局部搜索.在this SE related question 的cmets 中,用户Brian Borchers 还提出了一种可能对本地搜索有用的众所周知的方法:

    1. 获取训练和验证集的一小部分(以便能够在合理的时间内完成其中的许多)
    2. λ=0 开始并在某些区域内少量增加,对模型执行快速训练和验证并绘制两个损失函数
    3. 您将观察到三件事:
    4. CV 损失函数将始终高于训练损失函数,因为您的模型专门针对训练数据进行了优化(编辑:一段时间后,我看到了一个 MNIST 案例,其中添加 L2 有助于减少 CV 损失在收敛之前比训练更快。可能是由于数据的荒谬一致性和次优的超参数化)。
    5. 训练损失函数将在λ=0 处具有最小值,然后随着正则化而增加,因为正则化正是阻止模型对训练数据进行最佳拟合。
    6. CV 损失函数将从 λ=0 开始高,然后减小,然后在某个点再次开始增加(编辑:假设设置能够过度拟合 λ=0,即模型具有足够的功率并且没有大量应用其他正则化方法)。
    7. λ 的最佳值可能在 CV 损失函数的最小值附近,它也可能在一定程度上取决于训练损失函数的样子。请参阅图片以了解此情况的可能(但不是唯一)表示:您应该将 x 轴解释为 λ 在右侧为零并向左增加,而不是“模型复杂性” .

    希望这会有所帮助!干杯,
    安德烈斯

    【讨论】:

      【解决方案2】:

      上述交叉验证是机器学习中经常使用的一种方法。然而,选择一个可靠和安全的正则化参数仍然是数学研究的一个非常热门的话题。 如果你需要一些想法(并且可以访问一个体面的大学图书馆),你可以看看这篇论文: http://www.sciencedirect.com/science/article/pii/S0378475411000607

      【讨论】:

      • 如果您无法访问像样的大学图书馆,似乎可以使用here
      • @Gschneider 感谢您解放知识和教育。哈,帖子的网址……应该叫ScienceIndirect。
      【解决方案3】:

      正则化参数 (lambda) 是模型的输入,因此您可能想知道的是如何选择 lambda 的值。正则化参数减少了过度拟合,从而减少了估计回归参数的方差;但是,这样做的代价是增加了您的估计的偏差。增加 lambda 会减少过度拟合,但也会产生更大的偏差。所以真正的问题是“你愿意在你的估计中容忍多少偏差?”

      您可以采取的一种方法是对您的数据进行多次随机二次抽样,然后查看您的估计值的变化。然后重复该过程以获得稍大的 lambda 值,以查看它如何影响估计的可变性。请记住,无论您决定适合您的子采样数据的 lambda 值,您都可以使用较小的值来实现对整个数据集的可比正则化。

      【讨论】:

      • 添加正则化参数是否会降低参数的方差?这是否意味着它们的大小几乎相等?你指的是他们价值观的差异吗?
      • 是的,它减少了参数的方差。假设您的线性模型中有 K 个参数 (a_1,a_2,...,a_K),并且您的样本量为 N。给定一个大小为 N 的特定样本,您将计算 a_1 到 a_k 的值。如果您要抽取另一个大小为 N 的随机样本,则会产生一组不同的系数 (a)。如果您的样本量很小,那么样本之间的特定系数(例如 a_1)可能会有很大差异(高方差)。正则化减少了这种差异。这并不意味着所有系数 (a_1 ... a_k) 几乎相等。
      猜你喜欢
      • 2015-02-13
      • 2016-12-15
      • 1970-01-01
      • 2016-06-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-16
      相关资源
      最近更新 更多