理解元学习:MAML for Few-shot Supervised Learning

Tasks

1、meta-learning 学习的对象是 Tasks,而不是 Samples 样本点,因为 meta-learning 最终要解决的问题是在新的 task 上可以更好的学习,所以要先在 task 上的学习经验。那么在训练阶段,输入的就是不同的 tasks。(在信道估计中task就是指不同的信道)
2、如图所示Task分为Training Tasks(有标签)和Testing Tasks(无标签),其中Training Tasks是用于训练的可以分为support set和query set,support set也称之为一个Task的training set,用来更新内部模型参数θ’,query set称之为一个Task的testing set,用来改变网络模型参数θ。(下面介绍算法时将详细说明中这两部分)
3、“N-way K-shot”,他指的是在一个task中取N个类别,每个类别取K个样本进行训练。
在这里插入图片描述

MAML for Few-shot Supervised Learning

1、举例了解MAML思想

先举一个我看过最好理解的例子来了解MAML的思想:老师教授学生的如何学习的过程,假设一开始有一个对所有科目一无所知的学生,老师教授他学习数学、语文、英语、物理、化学等科目,每个科目学习5天,在这5天理,学生通过不断的做题来锻炼自己的学习能力和对该科目的掌握能力,然后5天后,老师出题对该学生进行考核,通过考核结果来调整教学方法,一个学生想要获得快速学习的能力,找了一名老师来教自己,然后该同学继续学习,这样往复下去,直至老师认为该同学应具备一定的学习能力后,让他学习5天从未见过的科目,然后出题考试,若该学生成绩很好,说明他已经具备很好的学习能力。

第一次迭代过程:
Training Tasks中包含数学task即学习数学的能力,语文task即学习语文的能力,英语task等。数学task中的support sets(task training)包含各种数学task的题目和答案,用于内循环的学习过程;query set(test training)仅包含各种数学task的题目没有答案,用于外循环的测试过程。

首先在一堆科目中随机选取一个batch,这个batch中包含多个tasks,各个task中的support sets(task training)训练即学习,然后计算梯度,更新参数。相当于学5天数学task,学习的过程使用了网络,通过学习及训练可以获得网络模型的新参数
θ i ′ = θ − α ∇ θ L ( f θ ) \theta_i' = \theta -\alpha\nabla_{\theta}L(f_{\theta}) θi=θαθL(fθ)其他task同理,每一个task后可以更新一个参数,如果这一batch种一共有7个tasks即7个科目,那么一共会生成7个新的网络模型参数构成7个新的网络模型即 θ 1 ′ \theta_1' θ1 θ 2 ′ \theta_2' θ2 θ 3 ′ \theta_3' θ3 θ 4 ′ \theta_4' θ4 θ 5 ′ \theta_5' θ5 θ 6 ′ \theta_6' θ6 θ 7 ′ \theta_7' θ7。第一次迭代过程的内循环结束。可理解为对于7个科目的初步学习完成。
将生成的7个参数模型即7个新网络分别在各个task的query set(test training)进行测试,得到5个损失,将其加起来,作为一个batch的的损失总和。这个过程就是各个科目学习5天后即相应的各个网络已经初步训练完成,然后老师对各个科目进行测试。
L o s s = ∑ ( L ( f θ i ′ ) ) Loss =\sum(L(f_{\theta_i'}) ) Loss=(L(fθi))然后对这个总的损失,计算梯度,得到新的网络模型参数 θ \theta θ。至此,第一次迭代过程的外循环也结束。根据各个科目的考试成绩,老师做出了总的调整,得到了新的教学方法,在下一次迭代的初始过程中,老师又将进行统一的教学方式。
往复迭代下去,直至老师认为该同学已经具备一定的学习能力,然后确定网络模型的参数,该参数作为网络的初始值,用于学习新的科目,新科目来自学生从未见过的Testing Tasks。

2、MAML for Few-shot Supervised Learning伪代码解读

Require1:同分布的task(同类型)
Require2: α \alpha α β \beta β,学习率,两次梯度下降的步长
1:随机初始化网络模型参数 θ \theta\quad θ
2:设置一个外层迭代结束条件,比如迭代1000次等
3:外层训练就是meta的训练过程,训练对象为task,所以每一次迭代都要从task分布中随机抽取一个batch的tast用于训练(T1、T2、T3、…、Tn
4:针对3中的每一个Ti执行如下过程
5:在Ti中选取包含K个样本点的数据集D,即每个科目下的练习题
6:利用数据集D和损失函数计算出损失函数对 θ \theta θ的梯度
7:根据 6中得到的梯度,在该任务上利用一次梯度下降更新模型参数 得到 θ i ′ \theta_i' θi
8:在Ti中选取数据集D’即在该科目下从未见过的练习题用于网络模型参数更新
9:每个Ti重复执行5、6、7、8步,直到执行到Tn即该batch的task全部执行完成
10:更新网络模型参数,与7步中的更新不同,第7步 θ i ′ \theta_i' θi是任务 Ti 中的 Support set (D)学习到的,适用于任务 Ti ,它只是它对应的任务 Ti 的最优解,而不是多个任务的最优解,那如何得到对所有task的最优参数呢?上文也已经讲过,利用SGD,在每个任务 Ti 中的Query set(D’)上计算出batch个梯度的平均值,更新步长为 β \beta β。至此,第一次迭代结束

MAML与NN


左边图为普通神经网络模型参数更新过程,每次梯度下降都会更新网络模型参数;右边为元学习神经网络模型参数更新过程,通过上文的描述其可以找到一组合适的初始参数,它们在参数空间中对不同任务的泛化能力最好。如下图所示,该图很好的描述了MAML的思想,即设置网络模型参数对所有task具有一个普遍的最优,而不是对某个task具有最优,这样的初始参数可以有效的使网络模型快速收敛,并且提高模型的泛化能力。
在这里插入图片描述

MAML与meta-SGD

二者都是通过元学习的方式得到网络模型的一组初始参数,meta-SGD与MAML相比就是增加了一个可以学习的学习率 α \alpha α,这个学习率矩阵在内循环中和原MAML的梯度按元素相乘来改变更新方向;在外循环中和Meta-Learner参数一起更新。

[1]https://blog.csdn.net/MR_kdcon/article/details/120844717
[2]https://blog.csdn.net/jesseyule/article/details/103808965
[3]https://blog.csdn.net/tiangcs/article/details/106749825
[4]https://blog.csdn.net/whscheetah/article/details/107993462
[5]https://zhuanlan.zhihu.com/p/146558856
[6]https://blog.csdn.net/MR_kdcon/article/details/119905885
[7]Model-Agnostic Meta-Learning for Fast Adaptation of Deep Networks

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值