自从去年我们发表论文“ 学习优化 ”以来,优化器学习领域受到越来越多的关注。在这篇文章中,我们介绍这一行的工作,分享我们对这个领域的机遇和挑战的看法。
机器学习已经取得了巨大的成功,并正在AI和其他领域广泛应用。这种成功可以归因于支撑机器学习的数据驱动的理念,这有利于自动发现数据模式,而不是使用专业知识进行系统的手工设计。
然而,在目前的范例中存在一个矛盾:学习能力强的机器学习算法仍然是手动设计的。这就产生了一个预料中的问题:我们可以学习这些算法吗?这可能会带来令人兴奋的可能性:我们可以找到比手动设计的算法更好的新算法,从而可以提高学习能力。
但是,这样做需要克服一个基本的障碍:我们如何参数化算法空间,使其既具有表现力,又具有高效的搜索能力?表示算法的各种方法均取决于这两个目标。例如,如果它是由一小组已知算法表示的,那么它很可能不包含最好的算法,但通过简单枚举算法就可以进行高效的搜索。另一方面,如果它由所有可能的程序集合表示,则它包含最好的算法,但不允许有效的搜索,因为枚举将采取指数时间。
机器学习中最常用的算法之一是连续优化算法。存在几种流行的算法,包括梯度下降,动量,AdaGrad和ADAM。我们考虑了自动设计这种算法的问题。我们为什么要这样做?有两个原因:第一,在凸性假设下设计了许多优化算法,并应用于非凸性目标函数; 通过在实际应用中学习该算法的优化算法,学习的优化算法有望实现更好的性能。其次,手动设计新的最优化算法是很费力的,可能需要几个月或几年时间; 学习优化算法可以减少人工的劳动量。
在去年的论文(Li&Malik,2016)中,我们介绍了学习优化算法的框架,称为“学习优化”。我们注意到,在我们的论文出现后不久,(Andrychowicz et al。,2016)也独立提出了一个类似的想法。
考虑如何实现现有的连续优化算法。它们以迭代的方式运行并保持一些迭代,这是目标函数领域中的一个点。最初,迭代是域中的一个随机点; 在每次迭代中,使用一些固定的更新公式计算一个步骤矢量,然后用它来修改迭代。更新公式通常是在当前迭代和过去迭代中评估的目标函数的梯度历史的一些函数。例如,在梯度下降中,更新公式是一些缩放的负梯度; 在动量中,更新公式是梯度的一些缩放的指数移动平均值。
从算法到算法的变化是这个更新公式。所以,如果我们可以学习更新公式,我们可以学习一个优化算法。我们将更新公式建模为神经网络。因此,通过学习神经网络的权重,我们可以学习一个优化算法。参数化这个更新公式作为一个神经网络,有两个吸引人的属性,前面提到:首先,它是表达性的,因为神经网络是通用函数逼近器,并且原则上可以模拟任何具有足够能力的更新公式; 第二,它允许有效的搜索,因为神经网络可以容易地通过反向传播训练。
为了学习优化算法,我们需要定义一个性能指标,我们将其称为“元丢失”,奖励优秀的优化器,惩罚不好的优化器。由于一个好的优化器会很快收敛,所以自然的元丢失就是所有迭代中的目标值的总和(假设目标是最小化目标函数),或者等价于累积的遗憾。直观地说,这对应于曲线下方的区域,当优化器收敛缓慢时较大,否则较小。
考虑特殊情况,目标函数是训练其他模型的损失函数。在此设置下,优化器学习可用于“学习学习”。为了清楚起见,我们将把使用优化器训练的模型称为“基本模型”,并将“base-”和“meta-”的通用术语前缀分别用来区分与基本模型和优化器相关的概念。
“学习”到底是什么意思?虽然这个词在文献中不时的出现,但是不同的作者用它来指称不同的事物,关于它的确切定义还没有达成共识。通常,它也与“元学习”这个术语交替使用。
这个词源于元认知的思想(亚里士多德,公元前350年),它描述了人类不仅是推理的现象,而且也有他们自己推理过程的原因。“学会学习”的工作从这个想法中汲取灵感,并将其转化为具体的算法。粗略地说,“学习学习”就是学习一些关于学习的东西。在元层面上学到的东西在不同的方法上是不同的。我们可以根据他们想要学习的元知识的类型将各种方法分为三大类:
这些方法旨在学习一些特定的基础模型参数值,这些参数在一系列相关任务中很有用(Thrun&Pratt,2012)。元知识捕捉了家庭中的共同点,从而可以更快地完成家族中新任务的基础学习,比如包括迁移学习,多任务学习和few-shot学习的方法。早期的方法通过将基础模型的参数分成两组来进行操作:那些特定任务和在交叉任务中常见的任务。例如,神经网络基础模型的流行方法是在所有任务中共享低层的权重,以便捕获跨任务的共同点。看到这个文章 由Chelsea Finn 概述了这个领域最新的方法。
这些方法旨在了解哪种基础模型最适合于某项任务(Brazdil et al。,2008)。元知识捕获不同基础模型之间的相关性以及它们在不同任务上的表现。面临的挑战在于以一种表达性和高效搜索的方式参数化基础模型的空间,并且在参数化任务的空间中,允许对不可见的任务进行泛化。不同的方法在表达性和可搜索性之间做出不同的权衡:(Brazdil et al。,2003)使用预定义的基本模型和示例性任务的数据库,并输出在最近的示例性任务上表现最好的基本模型。虽然基础模型的这个空间是可搜索的,但是它不包含好的但是还未被发现的基础模型。(Schmidhuber,2004)将每个基本模型表示为一个通用程序。虽然这个空间非常有表现力,但是这个空间搜索需要在目标程序的长度上花费指数时间。(Hochreiter等,2001))认为一个算法将一个基本模型训练成一个黑盒函数,它将一系列的训练样本映射到一系列的预测模型中,并将其建模为一个递归神经网络。然后进行元训练简单地减少训练循环网络。由于基础模型被编码在循环网络的内存状态中,因此其容量受内存大小的限制。一个相关的区域是超参数优化,其目标是实现较弱的目标,并搜索通过预定义的一组超参数参数化的基础模型。它需要跨超参数设置(以及扩展,基础模型)进行概括,但不能跨任务,因为允许在同一任务上使用不同的超参数设置进行多项试验。
虽然以前类别的方法旨在了解学习的结果,但这一类的方法旨在了解学习过程。元知识捕捉了学习算法行为的共同点。在此设置下有三个组件:基础模型,训练基础模型的基础算法和学习基础算法的元算法。学到的不是基础模型本身,而是基础算法,它训练基于任务的基础模型。因为基础模型和任务都是由用户给出的,所以学习的基础算法必须在一系列不同的基础模型和任务上工作。由于大多数学习算法都优化了一些目标函数,所以在许多情况下学习基础算法会降低学习优化算法的效率。学习优化算法的这个问题在(Li&Malik,2016)中有所探讨(Andrychowicz et al。,2016)和一些随后的论文。(Bengio等人,1991)与这一工作密切相关,它学习了一种类似于Hebb的突触学习规则。学习规则取决于当前迭代编码邻近神经元活动的维度的一个子集,但不依赖于目标函数,因此不能够推广到不同的目标函数。
任何形式的学习都需要对有限数量的例子进行训练,并将其推广到更广泛的类中。因此,在我们的训练基本模型的学习优化器的背景下考虑这些例子和类所对应的内容是有意义的。每个示例都是一个目标函数,它对应于在任务上训练基础模型的损失函数。该任务的特点是一组示例和目标预测,或者换句话说,一个数据集,用于训练基础模型。元训练集由多个目标函数组成,元测试集由同一类的不同目标函数组成。目标函数可以在两个方面有所不同:它们可以对应不同的基础模型或不同的任务。因此,在此上下文中泛化意味着学习的优化器在不同的基础模型和/或不同的任务上工作。
假设我们暂时不在乎泛化。在这种情况下,我们将评估优化器与用于训练优化器的相同目标函数。如果我们只使用一个目标函数,那么最佳优化器就是一个简单地记住最优:无论初始化如何,该优化器总是在一个步骤中收敛到最优。在我们的上下文中,目标函数对应于在特定任务上训练特定基本模型的损失,所以这个优化器本质上记住了基础模型的最优权重。即使我们使用了许多目标函数,学习优化器仍然可以尝试识别它正在操作的目标函数,并在它完成后立即跳到记忆的最佳状态。
为什么这是有问题的?记住最佳值需要首先找到它们,因此学习优化器比运行像梯度下降这样的传统优化器花费的时间更长。所以,为了找到目标函数的最佳值,运行传统的优化器会更快。因此,如果我们不关心泛化,那么学习优化器就毫无意义。
因此,学习优化器要有实用性,必须在与训练不同的新目标函数上表现良好。
如果我们只针对类似任务中的相似基础模型进行泛化,那么学习优化器可以记忆在基础模型和任务中共同的最优权重的部分,例如神经网络中低层的权重。这基本上就像学习学习什么的学习公式一样。
与学习学习什么不同,学习如何学习的目标不是学习最优化,而是学会如何去学习。因此,我们必须以更强的泛化观念为目标,即对类似的不同任务的基础模型进行泛化。一个可以泛化到不同任务的优化器不能只是部分地记住最优权重,因为不同任务的最优权重可能完全不同。例如,在MNIST(由手写体数字的黑白图像组成的数据集)和CIFAR-10(由自然场景中的普通对象的彩色图像组成的数据集)上训练的神经网络中的低层权重甚至不可能具有任何共同点。
我们是否应该寻求一种更加强化的泛化形式,即将不同基础模型推广到不同的任务上?由于这些相应目标函数与用于训练优化器的目标函数没有相似之处,所以本质上是询问优化器是否应该推广到可能是任意不同的目标函数。
事实证明,这是不可能的。给定任何优化器,我们考虑了优化器对特定目标函数的跟踪。因为优化器只依赖于以前迭代的信息,所以我们可以在最后一次迭代中修改目标函数,使其在任何以前的迭代中保持目标函数的几何结构的随意坏。然后,在这个修改后的目标函数中,优化器将遵循与之前完全相同的轨迹,并在具有不良目标值的点上结束。因此,任何优化器都有目标函数,它执行得很糟糕,没有优化器能够概括所有可能的目标函数.
如果优化器不是普遍的好,我们还能期望学习有用的优化器吗?答案是肯定的:因为我们通常对实践中某些特殊类的函数感兴趣,所以可以学习在这些类中感兴趣的优化器。一个类中的目标函数可以共享其几何中的规律性,例如:它们可能具有某些几何性质,如凸性,分段线性,Lipschitz连续性或其他未命名的属性。在学习的背景下,如何每个类都可以对应一种基础模型。例如,具有ReLU激活单元的神经网络可以是一个类,因为它们都是分段线性的。请注意,在学习优化器时,不需要明确表征几何规则的形式,因为优化器可以学习在从类中训练目标函数时自动利用它。
我们尝试的第一种方法是将学习优化器的问题作为一个标准的监督学习问题:我们简单地将元损失与更新公式的参数区分开来,并使用标准的基于梯度的优化来学习这些参数。(我们并不是唯一想到这一点的人(Andrychowicz et al。,2016)也采用了类似的方法)。
这似乎是一种自然的方法,但是它并不奏效:尽管我们尽了最大的努力,但是我们无法让任何优化者以这种方式进行训练,以泛化到看不见的目标函数,尽管它们来自相同的分布,生成了用于训练优化器的目标函数。在几乎所有看不见的目标函数上,已学习的优化器开始是合理的,但一段时间之后迅速地出现了分歧。另一方面,在训练目标函数上,没有表现出这样的问题,做得相当好。为什么会是这样?
事实证明,优化器的学习并不像看起来那么简单。标准监督学习假设所有的训练样例都是独立的,分布相同的(i.i.d.); 在我们的设置中,优化器在任何迭代中所采用的矢量步都会影响其在所有后续迭代中看到的梯度。此外,在后续迭代中,矢量步如何影响梯度,是未知的,因为这取决于目标函数,因为这取决于目标函数的局部几何,在元测试时未知。监督式学习不能在这种情况下运行,并且必须假定一个看不见的目标函数的局部几何与所有迭代中训练目标函数的局部几何相同。
考虑一下,当使用监督学习训练的优化器被用于一个看不见的目标函数时,会发生什么情况。它需要一个步骤,并在下一次迭代中发现梯度与预期不同。然后再回想一下,当它遇到这样的梯度时,它在训练目标函数上做了什么,梯度可能发生在一个完全不同的空间区域,并相应地迈出了一步。令人沮丧的是,它发现下一次迭代的梯度与预期的梯度更为不同。这个循环重复,优化器随着时间的推移而变得越来越大,导致快速的分歧。
这种现象在文献中被称为复合误差的问题。众所周知,监督学习者的总误差在迭代次数中是按照二次方进行比例的,而不是像在i.i.d.设置中那样线性地进行比较(Ross and Bagnell,2010)。实质上,使用监督学习训练的优化器必然过度训练目标函数的几何。解决这个问题的一种方法是使用强化学习。
考虑一个保持一种状态的环境,这个状态是以一种未知的方式进行的,这取决于所采取的行动。我们有一个与这个环境交互的代理,在每个行动被采取之后,这个环境会依次选择行动并接受反馈,看看新状态的好坏。强化学习的目标是找到一个方法让代理人根据当前状态选择行动,从而使平均状态达到良好状态。
更确切地说,强化学习问题的特征在于以下几个部分:
虽然学习算法知道前五个组件是什么,但它不知道最后一个组件,即:状态如何根据所选择的动作进化。在训练时间,学习算法被允许与环境交互。具体来说,在每个时间步,它可以根据当前状态选择一个动作。然后,根据所选择的动作和当前状态,环境采样一个新的状态,这是在随后的时间步由学习算法观察到的。采样状态和动作的顺序被称为轨迹。这个抽样过程导致轨迹上的分布,这取决于初始状态和转移概率分布,以及基于当前状态选择行动的方式,后者被称为政策。这个政策通常被模拟成一个以当前状态作为输入并输出行动的神经网络。学习算法的目标是找到一个策略,使得在所有时间步骤中的状态的预期累积成本被最小化,这是关于轨迹上的分布的期望。
回想一下我们上面介绍的学习框架,其目标是找到最小化元损失的更新公式。直观地说,我们认为代理人是一种优化算法,而环境就是我们希望学习优化器的目标函数族的特征。状态由当前迭代和沿着优化轨迹的一些特征组成,这可以是对梯度历史,迭代和客观值的一些统计。该操作是用于更新迭代的矢量步。
在这个公式下,这个策略本质上是一个从状态计算作为矢量步的行为的过程,它依赖于当前的迭代以及梯度,迭代和目标值的历史。换句话说,一个特定的策略代表一个特定的更新公式。因此,学习策略相当于学习更新公式,也就是优化算法。初始状态概率分布是初始迭代,梯度和目标值的联合分布。状态转移概率分布表征下一个状态可能给出的当前状态和行为。由于状态包含梯度和客观值,状态转换概率分布捕捉梯度和目标值对于任何给定的步矢量可能如何改变。换句话说,它编码感兴趣的目标函数的可能的局部几何。至关重要的是,强化学习算法没有直接访问这种状态转移概率分布,因此它学习的策略避免了过度拟合训练目标函数的几何。
我们选择一个状态的代价函数作为在当前迭代中评估的目标函数的值。由于强化学习将所有时间步的累积成本降到最低,因此它基本上将所有迭代中的目标值的总和最小化,这与元损失相同。
针对MNIST训练神经网络的问题,对训练好的多面体数据集(TFD),CIFAR-10和CIFAR-100上不同神经网络的训练问题进行了训练。这些数据集几乎没有相似之处:MNIST由手写体数字的黑白图像组成,TFD由人脸的灰度图像组成,CIFAR-10/100由自然场景中的普通物体的彩色图像组成。因此,学习优化算法不太可能在MNIST上记住低层权重,并且在TFD和CIFAR-10/100上仍然表现良好。
如图所示,使用我们在MNIST上的方法训练的优化算法(以浅红色显示)推广到TFD,CIFAR-10和CIFAR-100,并且优于其他优化算法。
为了理解使用我们的方法学习到的优化算法的行为,我们训练了一个二维逻辑回归问题的优化算法,并在参数空间中对其轨迹进行可视化。值得注意的是,低维和高维优化算法的行为可能不同,因此下面的可视化可能不能指示高维优化算法的行为。但是,他们提供了有关可以学习的行为的一些有用的直觉知识。
上面的图显示了在两种不同的不可见逻辑回归问题上的优化轨迹。每个箭头表示一个优化算法的迭代。如图所示,使用我们的方法学习的算法(以浅红色显示)与其他算法相比要打得多。在第一个例子中,因为学习算法需要很大的步长,所以经过两次迭代后会超调,但是不振荡,而是采取较小的步长来恢复。在第二个例子中,由于梯度消失,传统的优化算法需要较小的步长,因此收敛缓慢。另一方面,学习的算法需要较大的步长并更快地收敛。
更多细节可以在我们的论文中找到:
学习优化 Ke Li,Jitendra Malik arXiv:1606.01885,2016和国际学习代表会议(ICLR),2017
优化神经学网 Ke Li,Jitendra Malik arXiv:1703.00441,2017年
我想要感谢Jitendra Malik的宝贵意见。