🐠优化和凸性
2021-11-5
| 2023-8-6
0  |  阅读时长 0 分钟
type
status
date
slug
summary
tags
category
icon
password
Property

深度学习的优化目标

尽管优化提供了一种最大限度地减少损失函数的方法,但实质上,优化和深度学习的目标是根本不同的。前者主要关注的是最小化目标,后者则关注在给定有限数据量的情况下寻找合适的模型。
例如,训练误差和泛化误差通常不同,由于优化算法的目标函数通常是基于训练数据集的损失函数,因此优化的目标是减少训练误差。但是,深度学习的目标是减少泛化误差,除了使用优化算法来减少训练误差之外,还需要注意过拟合。
如下图所示所述,经验风险是训练数据集的平均损失,而风险则是整个数据群的预期损失。假设只有有限量的训练数据,经验风险函数不如风险函数平滑。
notion image
 
经验风险、期望风险、结构风险
经验风险:基于样本学习的经验进行决策的错误风险。将经验风险最小化,将会使模型对训练样本的学习能力增强,表现为拟合能力增强。显然,一味的经验风险最小化,会使得模型对训练样本过拟合。
期望风险:所谓期望,是对所有可能输入的分布的预测,假定输入的分布服从。则在此分布基础上进行样本训练时,每个样本在总体中的概率是已知的,故对每个训练样本进行决策时,其原来的经验风险可以重新描述为期望风险。由于考虑到了样本在总体中的分布(先验),此时的损失函数更为准确。然而,这种先验知识往往不会事先得到(虽然可以凭借经验进行预测,但始终不是总体的真是分布),因此期望风险是乌托邦。
结构风险:经验风险最小化带来过拟合,期望风险可望而不可即。重新考虑过拟合,一个模型过拟合是由于训练过程使得该模型的参数结构更倾向于让模型识别训练样本。为了减轻模型对训练样本的过拟合,只需要约束参数的结构向识别训练样本的方向发展,在经验风险的基础上加上一个正则化项(惩罚项)即可。此时的风险就是结构风险了。
 
 

深度学习中的优化挑战

局部最小值

对于目标函数,如果处对应的值小于在附近任何其他点的值,那么可能是局部最小值。如果处的值是整个域上目标函数的最小值,那么 是全局最小值。
例如:给定函数
notion image
 
 
当优化问题的数值解接近局部最优值时,随着目标函数解的梯度接近或变为零,通过最终迭代获得的数值解可能仅使目标函数局部最优,而不是全局最优
只有一定程度的噪声可能会使参数超出局部最小值。在这种情况下,小批量上梯度的自然变化能够将参数从局部极小值中移出,这是小批量随机梯度下降的有利特性之一
 

鞍点

除了局部最小值,鞍点也是梯度消失的一个原因。鞍点(saddle point)是指函数的所有梯度都消失但既不是全局最小值也不是局部最小值的任何位置。考虑函数,它的一阶和二阶导数在 时消失,这时优化可能会停止。
notion image
较高维度的鞍点甚至更加隐蔽,函数的鞍点为 ,这是关于的最大值,也是关于的最小值。此外,它看起来像马鞍,这就是这个数学属性的名字由来
notion image

图的代码

 
假设函数的输入是维向量,输出是标量,因此其Hessian矩阵将有特征值。函数的解决方案可以是局部最小值、局部最大值或函数梯度为零的位置处的鞍点:
  • 当函数在零梯度位置处的Hessian矩阵的特征值全部为正值时,有该函数的局部最小值
  • 当函数在零梯度位置处的Hessian矩阵的特征值全部为负值时,有该函数的局部最大值
  • 当函数在零梯度位置处的Hessian矩阵的特征值为负值和正值时,对函数有一个鞍点
对于高维度问题,至少部分特征值为负的可能性相当高。这使得鞍点比局部最小值更有可能。凸函数是Hessian函数的特征值永远不是负值的函数。不幸的是,大多数深度学习问题并不属于这个类别。尽管如此,它还是研究优化算法的一个很好的工具。
 

梯度消失

可能遇到的最隐蔽的问题是梯度消失。假设想最小化函数 ,然后恰好从 开始。 ,因此是。因此,在取得进展之前,优化将会停滞很长一段时间。事实证明,这是在引入ReLU激活函数之前训练深度学习模型相当棘手的原因之一。
 
 

凸性

凸性(convexity)在优化算法的设计中起到至关重要的作用, 主要是由于在这种情况下对算法进行分析和测试要容易得多。 如果该算法甚至在凸性条件设定下的效果很差, 通常很难在其他条件下看到好的结果。 此外,即使深度学习中的优化问题通常是非凸的, 它们也经常在局部极小值附近表现出一些凸性。 这可能会产生一些比较有意思的新的优化变体。

凸集

凸集(convex set)是凸性的基础。 如果对于任何 ,连接的线段也位于中,则向量空间中的一个集合的。 在数学术语上意味着对于所有得到:
下图中:第一组存在不包含在集合内部的线段,所以该集合是非凸的,而另外两组则没有这样的问题。
                                          第一组是非凸的,另外两组是凸的
第一组是非凸的,另外两组是凸的
 
有了定义做什么呢?
假设是凸集,那么 也是凸集的。 现在考虑任意, 因为是凸集, 所以连接 的线段包含在中。 鉴于此,它们也需要包含在中,从而证明了定理:
                                                                  两个凸集的交集是凸的
两个凸集的交集是凸的
可以毫不费力地进一步得到这样的结果: 给定凸集 它们的交集 是凸的。 但是反向是不正确的,考虑两个不相交的集合 , 取 。 因为假设 , 在下图中连接的线段需要包含一部分既不在 也不在中。 因此线段也不在 中,因此证明了凸集的并集不一定是凸的,即非凸的。
                                               两个凸集的并集不一定是凸的
两个凸集的并集不一定是凸的
通常,深度学习中的问题是在凸集上定义的。 例如,即实数的 -维向量的集合是凸集(毕竟 中任意两点之间的线存在 )中。 在某些情况下,使用有界长度的变量,例如球的半径定义为
 

凸函数

给定一个凸集 ,如果对于所有 和所有 ,一个函数 是凸的,可以得到:
下面定义一些函数,包括凸函数和非凸函数:
notion image
余弦函数为非凸的,而抛物线函数和指数函数为凸的。 注意,为使该条件有意义, 是凸集的要求是必要的。 否则可能无法很好地界定 的结果。
 

詹森不等式

给定一个凸函数 ,最有用的数学工具之一就是詹森不等式(Jensen's inequality)。 它是凸性定义的一种推广:
其中是满足 的非负实数, 是随机变量。 换句话说,凸函数的期望不小于期望的凸函数,其中后者通常是一个更简单的表达式。 为了证明第一个不等式,多次将凸性的定义应用于一次求和中的一项。
詹森不等式的一个常见应用:用一个较简单的表达式约束一个较复杂的表达式。 例如,它可以应用于部分观察到的随机变量的对数似然。 具体地说,由于 ,所以
是典型的未观察到的随机变量, 是它可能如何分布的最佳猜测, 是将 积分后的分布。 例如,在聚类中 可能是簇标签,而在应用簇标签时, 是生成模型。
 
 

凸函数性质

局部极小值是全局极小值

凸函数的局部极小值也是全局极小值,反证法证明:
假设是一个局部最小值,则存在一个很小的正值 ,使得当满足 时,有
假设 不是的全局极小值:存在 使得 。 则存在 ,比如,使得
然而,根据凸性的性质,有
这与 是局部最小值相矛盾, 因此不存在 满足 ,所以局部最小值也是全局最小值。
 
凸函数的局部极小值同时也是全局极小值意味着如果最小化函数,就不会“卡住”。 但是这并不意味着不能有多个全局最小值,或者可能不存在一个全局最小值, 例如:
区间上都是最小值
上没有取得最小值。对于 ,它趋近于 ,但没有
 

凸函数的下水平集是凸的

给定一个定义在凸集 上的凸函数 ,其任意一个下水平集
是凸的。
快速证明一下:对于任何 ,需要证明:当 时,
因为 ,所以
 

凸性和二阶导数

当一个函数的二阶导数 存在时,很容易检查这个函数的凸性。 需要做的就是检查 , 即对于所有 。例如,函数是凸的,因为 ,即其导数是单位矩阵。
更正式地讲, 为凸函数,当且仅当任意二次可微一维函数 是凸的。 对于任意二次可微多维函数, 它是凸的当且仅当它的Hessian
首先证明一下一维情况。 为了证明凸函数的 ,使用:
因为二阶导数是由有限差分的极限给出的,所以遵循
为了证明 可以推导是凸的, 使用这样一个事实: 意味着 是一个单调的非递减函数。 假设中的三个点, 其中, . 根据中值定理,存在 ,使得
通过单调性 ,因此
由于 ,所以
从而证明了凸性。
 
第二,需要一个引理证明多维情况: 是凸的当且仅当对于所有
是凸的。
为了证明的凸性意味着是凸的, 可以证明,对所有的(这样有 ),
为了证明这一点,可以证明对中所有的
最后,利用上面的引理和一维情况的结果,可以证明多维情况: 多维函数 是凸函数,当且仅当 是凸的,这里 。 根据一维情况, 此条成立的条件为,当且仅当对于所有 )。 这相当于根据半正定矩阵的定义,
 

约束优化

凸优化的一个很好的特性是能有效地处理约束优化(constrained optimization)问题:
是目标函数, 是约束函数。 例如第一个约束 ,则参数 被限制为单位球。 如果第二个约束 ,那么这对应于半空间上所有的 。 同时满足这两个约束等于选择一个球的切片作为约束集。

拉格朗日函数

通常求解一个有约束的优化问题是困难的,解决这个问题的一种方法来自物理中相当简单的直觉:一个球在一个盒子里,球会滚到最低的地方,重力将与盒子两侧对球施加的力平衡。 简而言之,目标函数(重力)的梯度将被约束函数的梯度所抵消(由于墙壁的“推回”作用,需要保持在盒子内)。 请注意,任何不起作用的约束(即球不接触壁)都将无法对球施加任何力。
上述推理可以通过以下鞍点优化问题来表示:
这里的变量 )是所谓的拉格朗日乘数(Lagrange multipliers),它确保约束被正确地执行。 选择它们的大小足以确保所有 。 例如,对于 中任意 ,我们最终会选择 。 此外,这是一个鞍点优化问题。 在这个问题中,我们想要使 相对于 最大化,同时使它相对于 最小化。 有大量的文献解释如何得出函数 。这里只需要知道 的鞍点是原始约束优化问题的最优解就足够了。
 

惩罚

一种至少近似地满足约束优化问题的方法是采用拉格朗日函数 。除了满足 之外,只需将 添加到目标函数 。 这样可以确保不会严重违反约束。
比如权重衰减 ,在目标函数中加入 ,以确保 不会增长太大。 使用约束优化的观点,可以看到,对于若干半径 ,这将确保 。 通过调整的值,可以改变 的大小。
通常,添加惩罚是确保近似满足约束的一种好方法。 在实践中,这被证明比精确的满意度更可靠。 此外,对于非凸问题,许多使精确方法在凸情况下的性质(例如,可求最优解)不再成立。
 

投影

满足约束条件的另一种策略是投影(projections)。 同样,例如处理梯度截断时,通过
确保梯度的长度以 为界限。
这就是 在半径为 的球上的投影。 更泛化地说,在凸集 上的投影被定义为
它是 中离 最近的点。
notion image
图中有两个凸集,一个圆和一个菱形。 两个集合内的点(黄色)在投影期间保持不变。 两个集合(黑色)之外的点投影到集合中接近原始点(黑色)的点(红色)。 虽然对于的球面来说,方向保持不变,但一般情况下不需要这样。
凸投影的一个用途是计算稀疏权重向量。 在本例中,将权重向量投影到一个的球上, 这是钻石例子的一个广义版本。
  • PyTorch
  • Pytorch内置损失函数梯度下降
    目录