Life sucks, but you're gonna love it.

0%

Machine Learning-2019| 5 Meta Learning

Chapter 5. Meta Learning

这部分讨论的是如何让机器学习如何学习。一般来说,在我们做机器学习的时候,我们通常会定义某种学习模型,给予这些模型的的初始化参数,定义模型的学习机制/优化算法等等。但是我们在教机器如何学习的时候,我们是想让机器在学习一系列Task之后,在遇到新的模型时,自己去选择模型,选择参数,选择优化算法,然后运用在其他的Task上面。

然后简单介绍Meta Learning的学习步骤,之后会举例说明MAML 和 Reptile两种算法.

Meta Learning 和 Life Long Learning

上一篇我们说到了Life Long Learning,主要是在说,我们希望训练一个模型,可以不停的学习新的内容的同时不忘记之前学过的东西,并且最好是可以把之前学习任务的时候习得的能力可以用在之后的任务学习上。

这里我们提到的Meta Learning,主要说的也是在学习一系列解决各种各样任务模型之后,我们能否学习到这个构建模型和设计模型运用在新的任务的能力。这里并没有强调说,解决所有任务的模型都只能是一个,这里对于之前学习过的任务对于我们来说,只是我们训练机器习得对不同任务构建模型的训练集。

Machine Learning 和 Meta Learning

我们比较熟悉的是Machine Learning。在学习Machine Learning的时候,通常对某个确定的问题,我们会假定或者人工构造一个模型,然后通过适当得初始化模型参数,以及尝试一系列优化方法和参数更新,使得该模型得到的损失最小。在这种情况下,模型中的各个控制量包括模型本身都是由 Developer自己决定或者在一系列实践中得出的最好参数。即我们希望 通过定义 模型 $f^$ 使这个任务下的 $loss(f^)$ 最小。

如果我们将模型以及其中一系列参数和优化方法叫做一个解决某个任务(Task)的算法(Algorithm),记做 $f$,那么现在这个能让Task的误差最小的 $f^*$ 是需要人工构造的。

而在Meta Learning中,我们不必参与 $f^$ 的构造过程。Meta Learning要做的是,学会如何选取合适的 $f^$ ,即,将训练数据 $D{training}$ 放入一个模型 $F$ 中,让可以帮我们找到 $f^*$, 即$F(D{training}) = f^$, 使得 $loss(f^)$ 最小。

总的来说:

$\left{\begin{array}{h} Machine\ Learning:根据训练资料找一个函数的能力\ Mata\ Learning: 根据训练资料找一个找函数的模型的能力\end{array}\right.$

Meta Learning 的步骤

和 Machine Learning 的步骤一样,我们也从三个方面来分析:

Define a set of Algorithms - 定义一组模型

就像刚才提到的,现在我们用来完成摸个任务的Algorithm其实是人来决定的,包括模型的具体结构,模型中参数的初始值,训练模型的优化方法等等。但是在定义一组Algorithm的时候,我们可以考虑不同的模型作为我们的备选。在神经网络结构中,有 NAS(神经结构搜索),可以帮助搜索比较合适的神经网络模块搭建的结构。

goodness of Algorithms - 定义任务的损失函数

这部分,主要是来定义如何找到合适的衡量Algorithm好坏的方法。

在Machine Learning中,我们用到的衡量模型好坏的方法是构建训练集和测试集,使得模型在测试集上的loss最小。在Meta Learning中也是类似的道理,我们也要有衡量Algorithm的训练集和测试集,只不过这里的训练集和测试集不是一个图片库,而是Task库。即我们有一个训练集,这个训练集中是各种各样的task,task中又同时包含有训练数据和测试数据。训练集中多种多样的task是帮我们来训练一个生产解决Task的Algorithm的模型。而测试集中多种多样的task是帮我们去测试,通过这个模型生成的Algorithm在运用在测试集中的任务上时,这些Algorithm表现如何。

我们同样定义一个 loss function : $L(F) = \sum\limits^{N}_{n = 1}l^n$

这里的 $l^n$ 用来表示第 $n$ 个任务的 loss, 测试集中一共有 $N$ 个Tasks.

pick the best Algorithms - 选择最佳模型

这步就是找到最佳的 $F^* = arg \min\limits_{F} L(F)$

MAML 和 Reptile 算法

Meta Learning常常会和 Few-shot Learning一起出现。因为在Meta Learning的时候,如果我们的数据都足够多,那我们跑一次数据将会耗费很长的时间。但是对于Few-shot Learning这种各种数据都很缺乏的情况下,Meta Learning 就很容易运行,所以Meta Learning 会常用在Few-shot Learning的情况下。

MAML ()