为什么我们不直接学习超参数?

机器算法验证 机器学习 神经网络 超参数
2022-03-20 13:24:40

我正在实施一篇非常流行的论文“解释和利用对抗性示例”,在论文中,它训练了一个对抗性目标函数

J''(θ) = αJ(θ) + (1 - α)J'(θ)。

它将 α 视为超参数。α 可以是 0.1、0.2、0.3 等。

不管这篇具体的论文如何,我想知道,为什么我们不将 α 包含在我们的参数中并学习最好的 α 呢?

这样做有什么坏处?是不是因为过拟合?如果是这样,为什么再学习 1 个参数会导致如此多的过拟合?

4个回答

“我们为什么不直接学习超参数?”

这是一个很好的问题!我将尝试提供更一般的答案。TL;DR答案是,你绝对可以学习超参数,只是不能从相同的数据中学习。继续阅读以获得更详细的回复。


参数通常对应于学习算法的设置,而不是其参数之一。例如,在深度学习的背景下,这可以通过特定层中的神经元数量(超参数)和特定边缘的权重(常规的、可学习的参数)之间的差异来例证。

为什么首先会有差异?将参数设为超参数的典型情况是,从训练集中学习该参数是不合适的。例如,由于通过添加更多神经元来降低训练误差总是更容易,因此将层中的神经元数量作为常规参数总是会鼓励非常大的网络,这是我们知道的事实并不总是可取的(因为过拟合)。

对于您的问题,并不是我们根本不学习超参数。暂时不考虑计算挑战,学习超参数的良好值是很有可能的,甚至在某些情况下,这对于良好的性能是必不可少的;第一段中的所有讨论表明,根据定义,您不能将相同的数据用于此任务

使用数据的另一个拆分(从而创建三个不相交的部分:训练集、验证集和测试集,理论上您可以做的是以下嵌套优化过程:在外循环中,您尝试找到最小化验证损失的超参数的值;并且在内部循环中,您尝试找到最小化训练损失的常规参数的值

这在理论上是可能的,但在计算上非常昂贵:外循环的每一步都需要求解(直到完成,或接近完成)内循环,这通常是计算量很大的。更复杂的是,外部问题并不容易:一方面,搜索空间非常大。

有许多方法可以通过简化上述设置(网格搜索、随机搜索或基于模型的超参数优化)来克服这个问题,但解释这些远远超出了您的问题范围。正如您所引用的文章也表明,这是一个昂贵的过程这一事实通常意味着研究人员完全跳过它,或者手动尝试很少的设置,最终确定最好的一个(再次,根据验证集)。不过,对于您最初的问题,我认为 - 虽然非常简单和做作 - 这仍然是一种“学习”形式。

该论文中的超参数通常用于平衡损失函数中的多个项。如果您使它们可学习,则优化过程将简单地学习将所有权重分配给更容易优化的术语,而以更难优化的术语为代价,这会破坏平衡术语的意义。

另一种看待它的方式是,损失函数是难以定义或优化的实际目标的替代,例如“生成的输出图像应该看起来很逼真”或“应该抵抗对抗性示例”。在这种情况下,真正的目标不是“找到超参数以最小化代理损失”,而是“找到这样的超参数,以便当我们在其余参数上运行 SGD 以优化代理时,我们在真正的客观的”。

既然你问“不管论文如何”,我想举一个更简单的例子:惩罚线性回归(Ridge/Lasso)。

对于这些情况,我可以想到两个原因:但首先,请注意这里有两个函数:(F1)损失函数,它是超参数和数据的分析函数(在你链接的论文中,它是;和 (F2) 泛化误差的估计,这取决于 (F1) 的最佳解决方案和您在 (F1) 中选择的超参数。J~

警告:粗略浏览一下这篇论文,作者发现作者为 MNIST 数据集训练了一个神经网络分类器。它没有明确说明如何选择超参数,但我会选择一个来最小化最佳模型的验证误差。αα

  1. 优化超参数的目标函数是一个代表泛化误差的表达式。这个表达式很难写成一个可以微分的简单分析函数,但是通过简单地解决潜在的优化问题,它可以很容易地在某个时候进行评估。

  2. 评估函数 (F2) 需要您解决一个优化问题,这可能会很昂贵。因此,即使您可以近似 F2 的梯度来进行梯度下降,它也将是昂贵且缓慢的。在这种情况下,进行网格搜索通常“足够好”。

话虽如此,有一些技术可以通过假设一些平滑结构来优化黑盒目标函数(例如 F2),因为它们依赖于超参数。例如,您可以看到这篇文章,它显示了 Lasso 模型的性能如何随其超参数变化:λ

套索模型性能

(图片取自这篇文章:https ://stats.stackexchange.com/a/26607/54725 )

一些参考资料:

并尝试从数据 相同的方式学习它,一阶条件会是什么样子 因此, J(\theta) = J'(\theta)αθ

αJ(θ)=ααJ(θ)+α(1α)J(θ)=J(θ)J(θ)=0
J(θ)=J(θ)

当这个超参数被优化后,就会导致 J 和 J' 成为同一个函数,即相等的权重。你最终会得到一个微不足道的解决方案。

如果您想要更通用的哲学思想,请考虑这一点:超参数通常不会与数据纠缠在一起。我是什么意思?在神经网络甚至简单的回归中,您的模型参数将在某些方面直接与数据交互: 等等。您会看到是如何与您的数据纠缠在一起的。因此,当您对目标函数的任何进行导数时,您会得到数据点以矩阵、Hessians、叉积等不明显的方式输入结果。

yL=XLβL
aL=σ(yL)
XL+1=aL
βLβ

但是,如果您尝试估计超参数上的一阶条件,您将不会得到这种效果。超参数的导数通常会操作模型的整个块,而不会像导数那样将其部分改组。这就是为什么优化超参数通常会导致琐碎的解决方案,例如我为特定论文提供的解决方案。优化超参数不会让您的数据集感到不安,也不会让它不舒服,以至于产生一些有趣的东西。