一、introduction
-
工业界:大量GPU同时训练多组可能的超参数,找到结果较好的参数配置
-
学术界:“通灵”,定义一组好的参数
Meta-learning:learn to learn,希望自己学会超参数、网络架构……,帮助学术界解决问题
-
“学习算法”也可以看做一个函数F,它的输入是训练数据,输出是model
- 一般的ML中,F是人想出来的(hand-crafted)
- Meta Learning 自动学习“学习算法”F
二、Learning Algorithm
训练数据→训练任务(训练任务里的训练数据+测试数据)
测试数据→测试任务(包含训练数据+测试数据)
Step 1: What is learnable in a learning algorithm?
明确要被学的东西
让机器自己学习
⇒learnable components
ϕ
\phi
ϕ
- 网络架构
- 初始参数
- 学习率
- ……
根据学习内容不同,将元学习的具体方法进行分类
Step 2:Define loss function for learning algorithm F ϕ F_\phi Fϕ
定义损失函数
很多“任务”,每个任务中有训练集和测试集
使用学到的学习算法
F
ϕ
F_\phi
Fϕ,利用某个任务的训练数据进行训练,得到模型
f
θ
1
∗
f_{\theta^{1*}}
fθ1∗
模型
f
θ
1
∗
f_{\theta^{1*}}
fθ1∗性能越好时,说明学习算法
F
θ
F_\theta
Fθ越好,此时损失函数
L
(
θ
)
L(\theta)
L(θ)越小
-
评估训练得到的模型 f θ 1 ∗ f_{\theta^{1*}} fθ1∗的性能
- 使用对应任务的“测试数据”(带label)对训练得到的模型
f
θ
1
∗
f_{\theta^{1*}}
fθ1∗进行测试,计算“预测结果”与Ground Truth之间的Cross Entropy
在一般的机器学习中,loss是根据“训练数据”来计算的;而在元学习中,loss根据训练任务中的“测试数据”进行计算。 - 将各个测试数据得到的结果求和得到
l
1
l^1
l1即模型的损失,用来衡量模型
f
θ
1
∗
f_{\theta^{1*}}
fθ1∗的性能,借以衡量学习算法
F
θ
F_\theta
Fθ的优劣
- l 1 l^1 l1越小, f θ 1 ∗ f_{\theta^{1*}} fθ1∗性能越好,说明学习算法 F θ F_\theta Fθ越好
- 反之, l 1 l^1 l1越大, f θ 1 ∗ f_{\theta^{1*}} fθ1∗性能越差,说明学习算法 F θ F_\theta Fθ越差
- 使用对应任务的“测试数据”(带label)对训练得到的模型
f
θ
1
∗
f_{\theta^{1*}}
fθ1∗进行测试,计算“预测结果”与Ground Truth之间的Cross Entropy
-
继续使用“同类别”的“其他任务”对学习算法进行测试
- 对于任务二,继续训练出对应的分类器模型 f θ 2 ∗ f_{\theta^{2*}} fθ2∗,
- 计算 l 2 l^2 l2,说明Learning Algorithm 在任务二上的表现。
将该“学习算法”在所有的“学习任务”上的损失求和,得到total loss L ( ϕ ) L(\phi) L(ϕ)
Step 3:Optimazation
- 已经定义出学习算法
F
ϕ
F_\phi
Fϕ的损失函数
L
(
ϕ
)
L(\phi)
L(ϕ)
- 若 ∂ L ( ϕ ) ∂ ϕ \frac{\partial L(\phi)}{\partial \phi} ∂ϕ∂L(ϕ)可导,则可以使用梯度下降法
- 若不可导,则使用RL,进化算法硬train
- 最终可以得到**“学习而得的”学习算法**
Framework
最终我们真正关心的是,在“测试任务”上,学习算法
F
ϕ
∗
F_{\phi^*}
Fϕ∗的性能
在测试任务上,利用“测试任务”中的“训练数据”+使用训练得到的学习算法
F
ϕ
∗
F_{\phi^*}
Fϕ∗来训练,得到分类器
f
θ
∗
f_{\theta^*}
fθ∗
将
f
θ
∗
f_{\theta^*}
fθ∗用在在测试任务的测试数据上,可以得到想要的结果。
- few-shot learning:利用meta-learning的技术,可以达到“few-shot learning”的目的。
三、ML v.s. Meta
- goal:
- ML:找到一个能完成任务的函数f
- Meta:找到一个学习算法F,能够找到f
- 训练数据:
- ML:完成一个任务即可,使用这个任务中的“训练数据”进行训练
- Meta:使用若干个任务进行训练,每个“训练任务”中都有“训练数据+测试数据”
- Support set:任务里的训练数据
- Query set:任务里的测试数据
- framework
-
train
- ML:学习算法是人工设定的⇒Within-task Training
- Meta:学习算法是在多个任务上训练得到的⇒Across-task Training
-
test
- ML:直接使用训练得到的模型在任务中对测试数据进行测试⇒Within-task Testing
- Meta:需要测试的是“学习算法”
⇒Across-task Testing- 在“测试任务”中,将任务的训练数据丢给“学习算法”,训练得到该任务的模型⇒Within-task Training
- 再将该任务的测试数据丢进模型⇒Within-task Testing
Within-task Training+Within-task Testing⇒Episode
-
loss
- ML:对一个任务中所有的测试数据的损失之和
- Meta:
l
l
l是一个任务的损失,
L
L
L是对所有任务的损失之和
- 计算一个 l l l, 就需要一次Within-task Training + Within-task Testing 即 一个episode⇒Inner Loop
- 综合多个task进行 Across-task training⇒Outer Loop
-
- 相同点(相同的忧虑)
- Overfitting on training tasks
- 收集更多训练任务
- 数据增强⇒增加任务
- learn learning algorithm 也需要调超参数
- 愿望:希望能够一劳永逸,找到一组较好的超参数以后,不再需要调超参数
- Development task⇒类比于development set(验证集),用于调整学习算法训练超参数
四、What is learnable in a learning algorithm?
模型初始值Learning to Initialize(MAML
模型的初始值对模型的最终性能有着比较大的影响
-
MAML
-
find Good Init:MAML v.s. Pre-training
- MAML需要用到有label的数据,理所当然有较好的效果
- pre-training(self-training)使用的数据没有标注
之前的pre-training还有其他的方法,比如将来自不同任务的数据混在一起进行训练(multi-task training)
multi-task training常常作为meta-learning的baseline
-
Why MAML is good? Feature Reuse!
-
Meta v.s. Domain adaptation:Meta中不同的task看做是不同的Domain,那么可以将Meta看做是Domain adaptation的一种方法。
Optimizer(learning rate, momentum)
- ptimizer中的参数也可以学习得到
- 学习率
- 动量
- ……
Network Architecture Search (NAS)
学习得到网络架构,将网络结构作为
ϕ
\phi
ϕ。
但是,
∇
ϕ
L
(
ϕ
)
\nabla_{\phi}L(\phi)
∇ϕL(ϕ)计算不出来,因为
L
(
ϕ
)
L(\phi)
L(ϕ)对
ϕ
\phi
ϕ不可导,
ϕ
\phi
ϕ不是连续的
-
解决方法1:Reinforcement Learning
- ϕ \phi ϕ:the agent’s parameters
- agent的输出:network的宽度,深度……
- Reward to be maximized:
−
L
(
ϕ
)
-L(\phi)
−L(ϕ)
-
解决方法2:Evolution Algorithm(进化算法)
-
解决方法3:可微分
DARTS: Differentiable Architecture Search
Data Augmentation
让机器自动学会数据增强
Sample Reweightnig:Give different samples different weights
对于很接近边界的样本,
- 应该看做“噪声”,并给予较小的权重?
- 应该看做“边界”,给予较大的权重?
让机器根据data特性自动决定权重大小。
Beyond Gradient Descent
让机器输入数据,直接输出模型
⇒发明了新的学习算法(learning algorithm)
Learning to compare
- 目前,episode中不再分“训练”和“测试”两个阶段,先根据训练任务训练learning algorithm、再输出模型,利用模型得到最终结果
- learning to compare:不再有显式的分界,而是直接输入训练数据和测试数据,学出learning+classification,输出测试的结果
五、application
Few-shot Image Classification
- N-ways K-shot:N个类别、每个类别K个样本
- 在meta learning中,使用很多这样的人物作为训练/测试任务
- 常常使用Omniglot数据集制造