Andrychowicz, Marcin, et al. “Learning to learn by gradient descent by gradient descent.” Advances in neural information processing systems. 2016.
文章目录
1 简介
这篇文章主要讲用一个额外的LSTM学习出优化算法中以前需要手工设置的超参数。相比于MAML元学习的是模型的初始参数表示,这篇文章则着眼于元学习出一个优化算法。 现在很多方法是针对特定任务来设计优化算法,比如:RMSprop, Adagrad, ADAM等等。但是根据世上没有免费的午餐定律,没有一个特定的优化算法适用于所有的情形。而这篇文章则设计了一个optimizer (本文中使用LSTM)来学习出不同的优化方法。因此参数的更新方法如下:
其中,是模型自身的参数,是optimizee 的loss值。
上图展示了optimizer和optimee的关系。optimizer在本文中就是一个LSTM,它为optimizee学习出一个优化方法。而optimizee可以是任意一种使用梯度更新的模型。以下将使用来表示optimizee中的参数,使用来表示optimizer中的参数。
2 如何对optimizee进行参数更新?
简单来说就是,一开始,optimizee有一个初始的,然后我们会从一系列任务中取出一个任务作为一个batch,然后根据这个batch和初始参数,optimizee根据每一个输入的****计算出梯度,然后将梯度传递给optimizer。optimizer将会输出一个值,记作,这个值将被返回给optimizee用于更新梯度(如式(1)所示)。
所以optimizer其实就是一个梯度更新方法的“学习器”,通过训练,optimizer将会告诉optimizee如何进行梯度更新。所以optimizer自身的参数更新方法其实就很关键了。
3 如何对optimizer进行参数更新?
在这篇文章中optimizer其实是一个LSTM,一个典型的LSTM有两个输入一个是每个batch的数据,另一个是前一个单元的隐张量 。图4展示了经典的LSTM模型中的一个子单元。将其中的替换成为就构成了本文中optimizer的输入。
不妨问自己一个问题:什么样的optimizer算是“好”的optimizer呢?当然是让optimizee的loss值越最小的optimizer最好。所以optimizer的loss值应该是基于optimizee的loss值的。可以记为:
其中T是时间步数,一般情况下均取1。
本文中取的是optimizee的loss之和。optimizer自身也需要一个优化方法来优化自身的参数,在本文中作者采用的是ADAM。然后我们就可以利用和ADAM方法进行反向传播来更新自身的参数。
对于一个输入的参数张量,对于其中每一个维度的都会有一个对应的LSTM来学习出它的最佳梯度更新值。一般情况下一个模型可能有十万百万个参数,如果我们为每一个参数都配备一个独有的LSTM,那整个网络显然会变得非常庞大,以致于完全无法训练。所以optimizer中的LSTM是全部共享参数的。如图4所示,所有的LSTM均共享参数,但是它们各自的隐状态是不共享的。由于每个维度上的LSTM输入的和是不同的,所以即使它们的相同,但是它们的输出却是不一样的。实际上这也与常规的优化方法相似,比如ADAM,SGD等,它们也是为每个维度的参数施行同样的梯度更新规则。
我一直比较困惑的是:我到底应该如何更新optimizer的值?难道我需要利用所有维度的loss值来更新我optimizer的参数么?如果这样做的话显然行不通,因为每一轮训练,我可能需要对更新上万次。后来我终于弄清楚了,其实这篇文章每次训练只取optmizee中一个维度的loss值来更新optimizer的参数。
4 实验
4.1 二次函数
这个实验拟合一个10维的二次函数。其中有一句话是这样的:
Each function was optimized for 100 steps and the trained optimizers were unrolled for 20 steps.
这句话容易让人困惑,但是有人觉得这句话实际表达的是:optimizee会经过100次的优化,而optimizer每20步更新一次参数,也就是说optimizer每次接收20个loss值,构成自己(LSTM)20个时间步的输入。以下引用@Adrien Lucas Ecoffet对这句话的解释:
I assume this means that each epoch is made up of trying to optimize a new random function for 100 steps, but we are doing an update of the optimizer every 20 steps. The number of epochs is thus unspecified, but according to the graphs it seems to be 100 too.
4.2 Minist数据集
4.3-4.4 CIFAR-10数据集和Neural Art
略,见原文。
5 总结
这篇文章写得不怎么规范,文章结构不太清晰。这篇文章在引言部分对trasfer learning和generalization做了重点介绍,然后整篇文章的重点其实是meta-learning。本文的方法于2016年提出,比MAML要早一年。但它专注于优化方法的meta-learning,而MAML专注于初始权重的Meta-Learning,所以此方法完全可以跟MAML结合在一起使用。
Reference
1. From zero to research — An introduction to Meta-learning
2. Learning to learn by gradient descent by gradient descent