一、元学习基本概念
1、概念:元学习——学习如何学习
2、该理论所解决的问题
深度学习、现代复杂算法最直观的难题:如何确定最好的超参数
怎么办呐?
1、力大砖飞,上硬件枚举
2、随缘(bushi)
3、元学习
3、机器学习抽象化步骤
- 定义一个fuction描述未知的过程
- 定义一个损失函数,通过训练资料和fuction的交互来指导其迭代
- 通过迭代找到哪个最好的超参
4、什么是元学习
数据集—》f(x)----》f‘(x)----》结果
f’的知识是从数据集得来的,f是手调的,f直接影响f’的效果
那么怎么更科学的确定f?
- 1、 f中什么部分是要被学习的?
网络架构、初始化参数、学习率-----》统称位learnable components: ϕ \phi ϕ - 2、定义一个loss fuc L(
ϕ
\phi
ϕ),描述learning algorithmF‘(
ϕ
\phi
ϕ)的优劣
要准备训练素材:
多个训练任务,每个任务,有各自的train和各自的task- 用task1中的train,根据F( ϕ \phi ϕ)生成 f’
- 用task1中的test,测试f’的效果和真值比较(例如用交叉熵损失),得到 l1
- l1大F差,繁殖同理
- 用task2、3、4重复类似测试,得到l2、l3、l4
- L(
ϕ
\phi
ϕ) =
∑
i
=
0
n
l
i
\sum_{i=0}^nl_i
∑i=0nli,n是准备任务的数量
注意这里用的训练任务里面的测试资料去做loss的计算,因为元学习的训练单位是任务,而不是任务中的某一个资料
- 3、找到一个
ϕ
\phi
ϕ让L最小
让L( ϕ \phi ϕ)对 ϕ \phi ϕ求偏导,梯度下降反向传播
这样我们就得到了一个学出来的F‘,而不是手动设置出来的超参
- 4、用多个【测试任务(注意刚刚的多个任务都是训练任务)的训练数据】集丢到F‘中得到f’,然后用【测试任务的测试数据集去测试】f‘,来评价泛化能力
【通常情况下,训练任务和测试任务里的各自的train和test在元学习中被成为support set和query set,以避免混淆】
元学习的优点:可以达成小样本的学习的这个目标
5、机器学习和元学习的联系和异同
ML:
find a f,这个f可以是分类器,也可以是其他功能的fuc,例如可以做猫狗分类。
train—》hand-crafted F–>f
Meta Learning:
find a F,F可以找到比较优质的f,以供多种不同的场景应用,作为一个好的参数起始点
multitasks train(across task training)—》learned F
测试(accross-task testing): testing task中的support set输入F—>f,query set输入f,f执行功能,得到结果(最终评价的是F的好坏,重点不是f)
accross-task testing:包括了with-test taring和within-test testing,算一个任务循环
也就是说,求一次L,要经历一次一个其中一个训练任务的support set训练,然后其相应的query set 训练后,才得到 lx,之后要得到多个 l,加在一起才可以得到L
ML和Meta Learning中共同存在的问题
1、overfitting
2、任务(训练集)越多,效果相对好
3、还是有超参(苦笑)
二、到底什么可以被学习
1、最初初始化的参数
θ
\theta
θ
MAML: model agnostic Meta-Learning
不同任务分开,进行元学习训练
相似概念:pre-training:
多个任务数据集放一起,然后训练
2、Optimizer
与ADAM,RMSprop,SGD,NAG不同,元学习是学习出来的Optimizer
3、如果
ϕ
\phi
ϕ是网络架构,那实际上就是NAS
NAS:Network Architecture Search
显然这个
ϕ
\phi
ϕ无法做梯度下降,所以用RL去做,
ϕ
\phi
ϕ位agent的参数,起输出就是架构参数,训练agent的输出得到minL(
ϕ
\phi
ϕ)
根据架构得到网络,然后训练网络,将测试资料的精确度当作RL的reward,来训练agent,以此迭代
三、应用场景
1、小样本学习
2、语音与自然语言处理等参数的确定
3、NAS