一、前言
本文章作为学习2023年《李宏毅机器学习课程》的笔记,感谢台湾大学李宏毅教授的课程,respect!!!
二、大纲
- 什么是Meta Learning?
- ML v.s. Meta
- What is learnable in a learning algorithm?
- Applications
三、Meta Learning?
引言
学了机器学习这门课程,你会发现实做过程中大部分工作就是在暴调一堆超参数,于是有人就研究可否让机器自己自动决定这些超参数或者模型啥的应该长什么样呢?
答案是可以的,于是乎"Meta Learning"应运而生。
何为Meta Learning?
我们都知道"元数据"的概念,就是关于数据的数据,或者称为描述数据的数据。
一模一样的概念套用在Meta Learning 上面,就是关于学习的学习(Learn to learn)。
Meta Learning具体是怎么做的呢?
先回顾ML三个步骤:
step1:Function with unknown(定义一个未知函数)
step2:Define loss function (定义一个损失函数)
step3:Optimization(最优化过程)
Meta Learning 和 ML 的3个步骤一模一样。
step1:Function with unknown(定义一个未知函数)
我们想定义的其实是一个吃训练集,吐出是教你如何设计模型的这么一个函数。
听着有点拗口,举个例子如下:
说明:
任务:设计一个猫狗识别分类器。
现状:针对该任务,大多数人直接用主流的ResNet50、VGG16等网络训练一发就完成了,但存不存在更好的或者说是更加适用的模型架构呢?
宇宙无穷无尽,我想必然是存在的,那怎么找一个能够告诉我们最优模型在哪的模型,元学习就是干这事的。
实做:假设存在一个F,它能够告诉我们猫狗识别分类器应该长什么样,具体而言可以告诉我们猫狗识别分类器的网络结构、初始参数、学习率等,这个带参数的F称之为 F ϕ F_{\phi} Fϕ。
以上,就是第一步定义一个 F ϕ F_{\phi} Fϕ。
step2:Define loss function (定义一个损失函数)
何为损失函数,通俗而言就是评估 F ϕ F_{\phi} Fϕ的好坏。
那如何评估 F ϕ F_{\phi} Fϕ呢?
且看下面这张图:
以猫狗识别分类器而言, F ϕ F_{\phi} Fϕ的输入是成对的类似二元分类任务。
Task1:苹果、橘子二元分类问题。
step1:训练集输入 F ϕ F_{\phi} Fϕ得到一组 ϕ {\phi} ϕ参数;
step2:根据这组ϕ参数构建 f θ 1 f_{\theta^1} fθ1,通过训练集再次训练得到 f θ 1 ∗ f_{\theta^1*} fθ1∗;
step3:把对应的测试集送入 f θ 1 ∗ f_{\theta^1*} fθ1∗,得到预测结果prediction,与ground truth计算cross entropy得到 l 1 l^1 l1
Task2:自行车、汽车二元分类问题。步骤与上述Task1一样。
Total loss = 多个任务的 l l l求和。
打个比方, F ϕ F_{\phi} Fϕ我个人认为它就像一个医生,专门给出药方的。
F ϕ F_{\phi} Fϕ:相当于一个医生,它的任务是给不同的病人(任务)开出合适的药方(模型初始化参数)。
f θ f_{\theta} fθ:相当于具体的治疗方案,针对不同病人(任务),医生会根据药方调整具体治疗(任务特定模型训练)。
目标:让 F ϕ F_{\phi} Fϕ 具备足够的经验,就相当医生看过了很多这种类型病,能快速给出好的药方,使得不同病人(任务)都能被有效治疗(模型快速适应新任务)。
step3:Optimization(最优化过程)
一句话就是能用Gradient Decent就用,不行的话就用RL硬train一发就对了。
四、ML v.s. Meta
-
目标:ML很直接,就是要直接找到一个猫狗分类器。而Meta Learning就是要找到一个"能找到合适猫狗分类器"的模型。
-
训练数据:ML直接把猫狗数据集倒进去训练。Meta Learning的训练数据则是多个类似Task的数据,如苹果、橙子分类数据集或者是自行车、汽车分类数据集。
-
训练方式:ML使用的方式称为Within-task Training(任务内训练),Meta Learning的这种训练方式叫做Across-task Training(跨任务训练)。
-
损失:ML是直接在training examples上求解loss,Meta Learning则是针对所有类似训练任务的test examples求loss的总和。
注意:Meta Learning 同样也是在训练,免不了面临过拟合、调超参数等问题。
五、What is learnable in a learning algorithm?
我们要找的 F 可以有什么能力呢,或者换句话说什么是可以从learning algorithm中学出来呢?
1、初始化参数
对于学出 f θ f_{\theta} fθ的初始化参数,我们有以下方法:
- Model-Agnostic Meta-Learning(MAML)
- Reptile(MAML的变形)
这两种方法课上没有细讲,先知道有这样的方法。
另外,MAML和Pre-train的对比链接:https://youtu.be/vUwOA3SNb E
那MAML方法为什么会好呢?有两个假设:
- Rapid Learning:MAML方法更容易找到各个Task的最佳初始参数,如下图左;
- Featrue Reuse:MAML方法已经和各个Task的最佳初始参数很接近了,如下图右(虚线很短表示很接近);
上面这篇paper结论是Featrue Reuse,同时提出了一种MAML的变形叫做ANIL(Almost No Inner Loop)。
更多这方面的学习和连接: - More mathematical details behind MAML
https://youtu.be/mxqzGwP_Qys - First order MAML (FOMAML)
https://youtu.be/3z997JhL9Oo - Reptile
https://youtu.be/9jJe2AD35P8
2、Optimizer
还可以把优化器的learning rate、momentum等参数学出来。
这篇paper告诉我们是可以实现的,有需要可以深入研究研究。
3、Network Architecture Search(NAS)
能不能把Network架构给训练出来呢?
答案是可以的。
同样可以用RL的方法硬train一发。
上图就是把stride、filter num 这些参数学出来,并根据这些参数生成模型,计算reward得分。
如果你不想用RL的方法去train的话,有个方法叫做DARTS,思想就是经过变形使得可以被微分。
4、Data Processing
怎么做数据处理这件事也是可以被train的。
- Data Augmentation(数据增强)
以下作为参考:
- Sample Reweighting
是一种在机器学习训练过程中调整样本权重的方法,以提高模型的泛化能力、减少数据偏差或改善特定类别的性能。
为什么需要样本重加权? - 类别不平衡:当某些类别的数据量远远大于其他类别时,模型可能会偏向于多数类别,忽略少数类别。
- 数据噪声:某些样本可能包含噪声(错误标注、测量误差等),重加权可以减少它们的影响。
- 域自适应:在迁移学习中,目标域数据分布可能与源域不同,重加权可以调整两者的匹配程度。
- 鲁棒性提升:对训练样本进行重加权可以增强模型的抗干扰能力,防止过拟合。
那如何决定什么样本给什么权重呢?也是可以被learn出来的,参考下面:
小结
总结起来,可以学习
1、初始化参数;
2、优化器;
3、网络结构;
4、数据处理方式;
六、Applications
