从代码角度思考meta-learning中MAML算法时,有以下几点疑问:
- meta-network也和Task的network架构一样吗?
- meta-network最初的参数是怎样的,是怎样利用Task已经学好的
的?
- K-example是采样的Task中的training dataset吗?
目前没有学习MAML的代码,下面根据MAML算法结合在机器翻译任务上的一篇论文《Meta-Learning for Low-Resource Neural Machine Translation》进行一下推测:
- 首先meta-network的架构和Task的network的架构是一样的。
- 理解few-shot learning是什么对理解MAML很重要。
这一点在李宏毅老师的视频里也有提到,在此不再赘述。 - K-example是在采样的Task中的training dataset中再次采样得到。
- 关于meta-network是怎样利用Task已经学好的
的。
之前对MAML的理解是错误的,一直以为MAML首先得将每个Task的保存下来,然后重新设计一个network,将所有Task的
作为输入,学习这个network的参数是通过gradient学习的,最终给入test Task的初始参数,通过这个network产生合理的test Task的初始化参数。
以上的理解是完全错误的。一开始并没有已经学好的Task的。
以机器翻译任务来说,meta-learning的具体情况如下:
首先准备meta network,其架构和Task的网络架构一样,随机初始化meta network的参数。
其次准备数据,每个Task代表一种翻译任务,如中—>英:
图1
根据图2中MAML算法,程序流程应为:在第一轮迭代中,采样N个Task,在每个Task的training dataset中采样分别组成support set(注意每个support set都非常小(K 个),体现出few-shot learning)和query set,在机器翻译这篇论文中分别对应的是和
。使用每一个采样的Task的support set train meta-network,每一个Task都对参数
调整一遍,调为
,在do完这N个Task后(此时参数为
),使用第8行的公式对这N个Task的query set再 train meta-network。完成之后再进入下一轮迭代,最终完成meta-learning得到具有普适性的task network的初始参数。
![](https://img.haomeiwen.com/i4858318/b53bf63c5b389756.png)
网友评论