一个故事
我要讲一个故事:一个你几乎肯定听过的故事,但它的侧重点与你习以为常关注的不同。
所有现代深度学习模型都使用梯度下降进行训练。 在梯度下降的每个步骤中,您的参数值从某个起始点开始,然后将它们移动到最大损失减少的方向。 你可以通过从你的整个参数向量中获取损失的导数来实现这一点,否则称为雅可比行列式。 然而,这只是损失的一阶导数,它没有告诉你曲率的任何信息,或者说,一阶导数变化的有多快。 由于您所处的区域中,您对一阶导数的局部近似可能不会从该估计值点(例如,在大山前的向下曲线)的区域中,您通常需要谨慎,并且不要太过大踏步。 因此,为了谨慎起见,我们用下面的等式中的步长α控制我们的前进速度。
这个步长做了一些有趣的事情:它限制了你要在梯度方向上更新每个参数的距离,并且这样做是固定的数量。在这个算法的最简单的版本中,我们取一个标量,假设是0.1,然后乘以关于损失的梯度。我们的梯度,记住,实际上是一个矢量-损失的梯度相对于模型中的每个参数向量-损失的梯度模型中,当我们将它乘以一个标量时,我们用欧几里得的方法,将沿每个参数轴的更新乘以相同的固定量。在梯度下降的最基本版本中,我们在学习过程中使用相同的步长。
但是,这真的有意义吗?有一个小学习率的前提是,我们知道一个单一的局部梯度估计只能在该估计周围的一个小的局部区域有效。但是,参数可以存在于不同的尺度上,并且可以对您所学的条件分布产生不同程度的影响。而且,这种程度的影响会在培训过程中波动。从这个角度来看,在欧几里得参数空间中,用一个固定的全局半径来定义一个安全波动似乎不是一件特别明智或有意义的事情。
自然梯度的支持者含蓄地提出了一个相反的建议,即我们不应该用参数空间中的距离来定义安全窗口,而是应该用分布空间中的距离来定义它。所以,与其说"我将遵循电流梯度,服从保持参数向量保持在电流向量的极小值的距离内",不如说"我将遵循我的电流梯度,服从保持分配我的模型是预测在之前预测的分布的极小值的距离内"。
这里的概念是分布之间的距离对于任何缩放、移动或一般的重新参数化都是不变的。例如,例如,相同的高斯可以使用方差参数或尺度参数(1/方差)进行参数化;两种分布之间的距离是不同的,这取决于它们是用方差还是尺度来进行参数化。但如果在原始概率空间中定义一个距离,它将是一致的。
本文的其余部分将尝试建立一种更强大,更直观的理解方法,称为自然梯度学习,这是一种概念上优雅的想法,旨在纠正参数空间中缩放的任意性。本文将深入探讨它是如何工作的,如何在构成它的不同数学思想之间建立桥梁,并最终讨论它是否以及在什么地方真正有用。但是,首先:计算分布之间的距离意味着什么?
获得KL
KL分歧,或者更确切地说是Kullback-Leibler分歧,在技术上并不是分布之间的距离度量(数学家对于所谓的度量或适当的距离是挑剔的),但它非常接近这个概念。
从数学上讲,它是通过计算从一个分布或另一个分布采样的x的值取得的对数概率(即,概率值的原始差异)的比率的预期值来获得的。这个事实是,期望取自其中一个分布或另一个分布使得它成为非对称度量,其中KL(P || Q)!= KL(Q || P)。但是,在许多其他方面,KL分歧映射到我们关于概率距离应该是什么样的概念:它直接根据概率密度函数的定义来衡量,也就是说,分配在一堆点上的密度值的差异来定义的。这有一个非常实用的方面,当分布对于广泛的X系列的"X的概率是多少"的问题有更远的答案时,分布被视为更加不同。
在自然梯度条件下,KL分歧被用作衡量我们的模型预测的输出分布变化的一种方式。如果我们正在解决多向分类问题,那么我们的模型的输出将是一个softmax,它可以被看作是一个多项式分布,每个类具有不同的概率。当我们谈论由当前参数值定义的条件概率函数时,这就是我们所讨论的概率分布。如果我们使用KL散度作为缩放梯度步长的方法,这意味着我们看到两个参数配置为"更远的距离",对于给定的输入特征集,如果它们会导致预测的类别分布在KL分歧方面非常不同。
Fisher的介绍
到目前为止,我们已经讨论过为什么在参数空间中缩放更新步骤的距离是令人不满意的,并建议一个不那么随意的替代方案:缩放我们的步骤,使得最多只能在KL分歧方面与我们的模型以前一直在预测的类分布。理解自然梯度最困难的部分是下一部分:KL Divergence和Fisher信息矩阵之间的联系。
从故事的结尾开始,Natural Gradient就像这样实现:
等号上的def表示右边的是左边符号的定义。右手项由两部分组成。首先,这是你的损失函数相对于参数的梯度(这是在更正常的梯度下降步骤中使用的相同梯度)。"自然"位来自第二个分量:取对数概率函数梯度的平方梯度的期望值(取自z)。我们将整个对象称为Fisher信息矩阵,用损失梯度乘以它的倒数。
p-theta(z)项是由我们的模型定义的条件概率分布,也就是说:神经网络末端的softmax。我们正在研究所有p-theta项的梯度,因为我们关心的是我们预测的类概率因参数变化而变化的量。预测概率的变化越大,我们的更新前和更新后的预测分布之间的KL差异越大。
使自然梯度优化混淆的部分原因在于,当您正在阅读或思考它时,您必须理解和争论两个不同的梯度对象,这意味着不同的事物。顺便说一句,这对于杂草来说是不可避免的,特别是在讨论可能性时,并没有必要掌握整体直觉; 如果您不喜欢浏览所有血淋淋的细节,请随时跳到下一部分。
关于损失的梯度
通常,您的分类损失是一个交叉熵函数,但更广泛地说,它是某种函数,它将模型的预测概率分布和真实目标值作为输入,并且当您的分布远离目标时具有更高的值。这个对象的梯度是梯度下降学习的核心面包和黄油; 它表示如果将每个参数移动一个单位,您的损失将会发生变化。
对数似然的梯度
这是我学习自然梯度中最令人困惑的部分。因此,如果您阅读有关Fisher信息矩阵的内容,您将获得许多链接,说明它与模型的对数似然的梯度有关。我之前对似然函数的理解是,它代表了你的模型对某些数据集的可能性有多大; 特别是,您需要目标值来计算它,因为您的目标是计算模型分配给真实目标的概率,当您对输入要素进行调节时。在讨论可能性的大多数情况下,例如非常常见的最大似然技术,您关心对数似然的梯度,因为您的可能性越高,您的模型分配从真实分布中采样的值的概率越高,我们都快乐。实际上,这看起来像计算p(class | x)渐变的期望值,其中概率在数据中的实际类分布中得出。
但是,您也可以用另一种方式评估可能性,而不是根据真实目标值计算您的可能性(您可能希望具有非零梯度,因为它可能会推动您的参数增加概率对于真正的目标,您可以使用从条件分布本身中提取的概率来计算您的期望。也就是说,如果您的网络导致softmax,而不是基于给定观察的数据中的真实等级,以0/1概率取得logp(z)的期望,请使用该模型的估计概率作为在它期望中的权重。这将导致整体预期梯度为0,因为我们将模型当前的信念作为基本事实,但我们仍然可以得到梯度的方差(即梯度平方),这是我们的Fisher矩阵中(隐含地)计算预测类空间中的KL分歧所需要的。
用武之地
这篇文章花了很多时间讨论力学:这个东西究竟是什么叫做自然梯度估计,以及关于它如何起作用以及为什么起作用具有更好的直觉。但是,如果我不回答这个问题,我觉得自己会失职:这东西真的有价值吗?
简短的回答是:实际上,它并没有为大多数深度学习应用程序提供足够引人注目的价值。有证据表明自然梯度导致收敛发生的步骤较少,但正如我稍后将讨论的那样,这是一个复杂的比较。对于因参数空间中的缩放更新步骤的随意性而受挫的人来说,自然渐变的想法是优雅的并且令人满意。但是,除了优雅之外,我不清楚它是否提供了无法通过更多启发手段提供的价值。