【李宏毅2020 ML/DL】P88-96 Meta Learning – MAML | Reptile

我已经有两年 ML 经历,这系列课主要用来查缺补漏,会记录一些细节的、自己不知道的东西。

本节内容综述

  1. 元学习就是 Learn to learn ,让机器变成 a better learnerMeta 讲的是:How to learn a new model 。
  2. 传统的机器学习训练模型 f ,而元学习有让机器根据数据找一个能找 f 的函数 F 的能力。
  3. 元学习第一步:Define a set of learning algorithm 。
  4. 第二步:Defining the goodness of a function F 。
  5. 接着以 Omniglot 为例讲了 Few-shot Classification 。可见 OpenAI 的例子:https://openai.com/blog/reptile/
  6. 接着将两个方法:MAML,Reptile 。

小细节

Meta Learning

Define a set of learning algorithm

【李宏毅2020 ML/DL】P88-96 Meta Learning – MAML | Reptile
如上,我们训练的是参数;给算法中的 Training Data 可能是不同任务的。

我们希望机器可以替代人类,进行红色框框中的工作,包括结构设计、参数初始化、迭代公式等等。

Defining the goodness of a function F

【李宏毅2020 ML/DL】P88-96 Meta Learning – MAML | Reptile
如上,我们在不同的任务中,进行训练与测试。并且定义了评价指标 L(F)L(F)
【李宏毅2020 ML/DL】P88-96 Meta Learning – MAML | Reptile
如上,对于元学习,我们要准备的不是“数据”,而需要准备“任务”

经常与 few-shot learning 一起使用。因为任务很多,数据量很大的话,训练的时间成本太高了。

为了区分 Training Task 与 Testing Task,我们定义训练数据与测试数据:Support SetQuery Set

【李宏毅2020 ML/DL】P88-96 Meta Learning – MAML | Reptile
如上,我们的最终优化目标为 L(F)L(F) ,最终为了找到 FF^*

Omniglot: Few-shot Classification

【李宏毅2020 ML/DL】P88-96 Meta Learning – MAML | Reptile
如上,在 Omniglot 数据集中,每个符号有 20 个不同的范例,数据量很小。
【李宏毅2020 ML/DL】P88-96 Meta Learning – MAML | Reptile
如上,20-ways 1-shot 即我们目前的分类任务有 20 个类别,每个类别有 1 个训练资料。

对于元学习,我们取一些“字母”,作为训练数据,机器学着为这些字母分类。在测试时,我们给机器一些全新的“字母”集合,机器也能完成对其的分类。
【李宏毅2020 ML/DL】P88-96 Meta Learning – MAML | Reptile
openAI 的例子:https://openai.com/blog/reptile/

MAML

【李宏毅2020 ML/DL】P88-96 Meta Learning – MAML | Reptile
如上,我们来学一个最好的参数初始化方法。最后学出的参数,显然是与初始化参数有关的,因此我们有函数关系 L(ϕ)=n=1Nln(θ^n)L(\phi)=\sum_{n=1}^N l^n(\hat{\theta}^n) ,并且将其作为我们的损失函数。

Gradient Descent

【李宏毅2020 ML/DL】P88-96 Meta Learning – MAML | Reptile
如上,使用梯度下降训练 ϕ\phi

此外,这个方法与 model 预训练的方法区别在于,在 MAML 中,我们在意的是训练后得到的参数。

与 Model Pre-training 区别

【李宏毅2020 ML/DL】P88-96 Meta Learning – MAML | Reptile
如上,在 MAML 中,我们在意的是训练后强不强。

【李宏毅2020 ML/DL】P88-96 Meta Learning – MAML | Reptile
而对于 Model 预训练,我们在意的是参数现在是否表现好。
【李宏毅2020 ML/DL】P88-96 Meta Learning – MAML | Reptile
总结如上。

one-step learning

【李宏毅2020 ML/DL】P88-96 Meta Learning – MAML | Reptile
如上,我们假设模型在某个任务训练时参数只会被训练 1 次。为什么只做 1 次更新?

  • 快;
  • 假设 MAML 可以训练出一个很强的初始化参数,因此更新只需要 1 次更新就可以了;
  • 而在真正使用时,我们可以训练很多次;
  • 在 few-shot learning 中,数据有限。

Toy Example

【李宏毅2020 ML/DL】P88-96 Meta Learning – MAML | Reptile
如上,实验用例。
【李宏毅2020 ML/DL】P88-96 Meta Learning – MAML | Reptile
注意到模型预训练得到的结果是“水平线”。因为在大量不同的 y=sin 函数影响下,其最优参数对应的平均值就是平的。而 MAML 考虑的是现在初始化,未来训练到最优,其初始化参数如下图绿色所示。

Omniglot & Mini-ImageNet

【李宏毅2020 ML/DL】P88-96 Meta Learning – MAML | Reptile
实验结果如上。

Math

【李宏毅2020 ML/DL】P88-96 Meta Learning – MAML | Reptile
其推到如上。初始化参数将影响过程中的各个参数的值,进而影响最终值。因此根据链式法则有公式如:l(θ^)ϕi=jl(θ^)θ^θ^ϕi\frac{\partial l(\hat{\theta})}{\partial \phi_i} = \sum_j \frac{\partial l(\hat{\theta})}{\partial \hat{\theta}} \frac{\partial\hat{\theta}}{\partial \phi_i}

下面对上式进行推导,只需要考虑 θ^ϕi\frac{\partial\hat{\theta}}{\partial \phi_i}

【李宏毅2020 ML/DL】P88-96 Meta Learning – MAML | Reptile
而在原始论文中,为了精简计算,没有算二次微分,用 0、1 替代微分值。

【李宏毅2020 ML/DL】P88-96 Meta Learning – MAML | Reptile
简化后如上。

Real Implementation

在 MAML 中,也可以对 task 做 batch 。

【李宏毅2020 ML/DL】P88-96 Meta Learning – MAML | Reptile
如上,我们拿 θ^\hat{\theta} 的更新方向,更新 ϕ\phi

Translation

【李宏毅2020 ML/DL】P88-96 Meta Learning – MAML | Reptile
如上,在翻译上进了元学习训练。如上,在数据量少时,其效果更加明显。

Reptlie

【李宏毅2020 ML/DL】P88-96 Meta Learning – MAML | Reptile
如上,我们训练好了θ^\hat{\theta} ,就想着该参数的方向前进。

但是这不就是模型预训练吗?为此,作者做出了解释。
【李宏毅2020 ML/DL】P88-96 Meta Learning – MAML | Reptile
如上,可以看出,reptile 其实是预训练与MAML二者结合。

More …

【李宏毅2020 ML/DL】P88-96 Meta Learning – MAML | Reptile
如上,还有些其他技术,如上。

Crazy Idea?

此外,能不能不使用梯度下降?
【李宏毅2020 ML/DL】P88-96 Meta Learning – MAML | Reptile
有没有可能做一个大黑箱?放入训练与测试资料,机器直接输出测试结果?

下节课讲解。