Federated Meta-Learning for Fraudulent Credit Card Detection
Introduction
Life-long 💛不断的用同一个模型做学习,我们期待同一个模型可以同时学会很多技能
Meta :仍然是不同的任务有不同的模型,期待的是机器可以从过去的经验在训练一个新模型的时候更快更好
Machine Learning:我们可以看做有一个learning algorithm(它是人设计的),这个learning algorithm把训练资料当作输入,然后吐出一个function,例如CNN的参数。
Metal learning:在metal learning里面,将learning algorithm也想成是一个function,这个function吃进去的是训练资料,吐出来的是另一个function
机器学习的learning algorithm的整个步骤中有很多都是我们人为手动设计的,例如network长什么样子,初始的参数怎么来,如何update参数
这些红色的方块都是我们人设计,当我们选择不同的设计我们就相当于得到了不同的learning algorithm,metal learning就是希望红色的部分不要人来设计让机器自己来学习
元学习通过三个步骤来找learning algorithm
STEP 1
在learning algorithm 中有什么是需要被学习出来的? ---------Learnable components
实际上不同metal learning的方法就是去学不同的components
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0edocSsl-1636680137443)(C:\Users\yanghaha\AppData\Roaming\Typora\typora-user-images\image-20211013103721993.png)]
STEP 2
定义一个learning algorithm F Φ F_{\Phi} FΦ的损失函数来决定learning algorithm 有多好
- 如何决定L?
在metal learning里面L来自于Training Tasks(训练的任务) ,每一个任务里面都有训练资料和测试资料
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yQhH8507-1636680137445)(C:\Users\yanghaha\AppData\Roaming\Typora\typora-user-images\image-20211013104635803.png)]
我们怎么知道一个algorithm好不好呢,就把一个任务的训练资料拿出来,给algorithm学习
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-v0GnzaY8-1636680137447)(C:\Users\yanghaha\AppData\Roaming\Typora\typora-user-images\image-20211013104948246.png)]
表示这是任务1的classifier他的工作是分辨苹果和橘子,那么我们怎么知道这个classifier是好还是坏呢?我们就将这个classifier套在testing set上
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gsXpRJI0-1636680137448)(C:\Users\yanghaha\AppData\Roaming\Typora\typora-user-images\image-20211013105504837.png)]
将测试的资料丢到 得到输出,计算输出与正确结果的差异得到 l 1 l^{1} l1,在metal learning里面不会只考虑一个任务,比如我们可以将脚踏车和汽车的任务丢给这个learning algorithm 来学习一个classifier。
是分类苹果和橘子
是分类脚踏车和汽车
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dGalvu2O-1636680137448)(C:\Users\yanghaha\AppData\Roaming\Typora\typora-user-images\image-20211013110615869.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-geNLbe8s-1636680137449)(C:\Users\yanghaha\AppData\Roaming\Typora\typora-user-images\image-20211013110645147.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-O46vWyY5-1636680137449)(C:\Users\yanghaha\AppData\Roaming\Typora\typora-user-images\image-20211013110743260.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2vsOx9J8-1636680137450)(C:\Users\yanghaha\AppData\Roaming\Typora\typora-user-images\image-20211013105803248.png)]
在一般的ML中,Loss是用训练资料进行计算的,但是在metal learning中,Loss是用测试资料来进行计算的?
STEP3
找一个 Φ {\Phi} Φ来让Loss 越小越好
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PjCrwjNi-1636680137451)(C:\Users\yanghaha\AppData\Roaming\Typora\typora-user-images\image-20211013111535873.png)]
FRAMEWORK
收集一大堆训练资料,通过以上三个步骤,学习出来一个learning algorithm,有一个测试的任务,把测试任务的训练资料丢到learning algorithm里学习出一个classifier,再将这个classfier用在测试任务的测试资料上。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Wkz6ry3v-1636680137452)(C:\Users\yanghaha\AppData\Roaming\Typora\typora-user-images\image-20211013112222689.png)]
ML V.S Metal
ML: 找到一个function f,例如一个Dog-Cat分类器,输入一张猫的图片输出猫的分类
Metal Learning :find a function F that finds a function f
ML:在ML中是拿某一个任务的训练资料拿来训练
Metal Learning:在metal learning中,是拿训练的任务来进行训练,每个训练的任务里面都有训练资料和测试资料,在文献中常常将训练资料成为support set,将测试资料称为test set
ML:在ML中完整的framework就是有训练资料,训练出一个classifier,将test data 丢到classifier得到一个结果
Metal Learning:在metal learning中,有一堆训练的任务,要用这些训练的任务找出learning algorithm,因为metal learning里面有一大堆任务,所以我们把metal learning叫做across-task training(跨任务的学习)
ML:ML完整的训练过程是我们有训练资料,将这些训练资料产生一个classifier,然后将test的data丢到classifier里面得到对应的结果
Metal Learning:在metal learning中,有一堆训练的任务,把这些训练的任务拿来产生一个学出来的learning algorithm,然后有一个test task,将test task的训练资料丢到learning algorithm,然后得到一个 f θ f_{\theta} fθ,将test task 的测试资料丢到 f θ f_{\theta} fθ,得到相应的结果
ML:损失函数来自于一个任务的所有训练样本
Metal Learning: l n l^{n} ln来自于一个任务的测试样本,损失函数来自于所有训练任务
What is learnable in a learning algorithm?
-
learning to initialize
Model-Agnostic Metal-Learning(MAML)
Reptile
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jluYYLXw-1636680137454)(C:\Users\yanghaha\AppData\Roaming\Typora\typora-user-images\image-20211013153200704.png)]
MAML
在MAML里面有一堆训练的任务,每个任务都有训练资料和测试资料,根据这些训练的任务找到一个好的init,然后用在测试的任务上
pre-training)
在self-supervised learning中,我们先拿一大堆没有标记的资料去做pretraining,来找到好的initial,一样可以用到测试数据上,在self-supervised learning不红的时候pretraining有另外一种想法(more typical ways),比较常见的做法是把好几个任务的资料统统放在一起当作一个任务,一样可以找到好的initial用在测试任务上,一般会将这种more typical ways当中MAML的baseline
在上述的内容中我们可以发现训练的任务和测试的任务差距并没有很大,例如每一个训练的任务都是要分类猫跟狗,只是每个任务的图片类型是不一样的,例如任务一里是真实的图片,任务2里面是油画图片,测试任务里面是卡通图片。(这不是领域适应/迁移学习吗?)
假设我们今天在做metal-learning,我们不同的任务实际上就是不同的domain而已,你也可以说metal-learning就是一种不同的domain的方法,在matal-learning里面其实任务和domain区分并不清楚,我们可以说他们是不同的任务也可以说他们是不同的domain
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TNZMfP7j-1636680137456)(C:\Users\yanghaha\AppData\Roaming\Typora\typora-user-images\image-20211013155850932.png)]
Optimizer
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7t0MdXLg-1636680137457)(C:\Users\yanghaha\AppData\Roaming\Typora\typora-user-images\image-20211013160659230.png)]
Network Architecture Search(NAS)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4Xa5BSLH-1636680137458)(C:\Users\yanghaha\AppData\Roaming\Typora\typora-user-images\image-20211013161143514.png)]
小样本学习和元学习
few-shot learning
support set:一个很小的数据集,不足以训练一个神经网络,只能提供一些参考信息,带标签的图片称为support set,其与训练集的区别在于训练集规模很大,每一类下面都有很多图片因此可以用来训练一个深度神经网络,而support set很小不足以训练一个深度神经网络,只能在做预测时提供一些额外信息
few-shot learning 与传统机器学习不同,目标不是识别训练集里的图片并泛化到测试集,其目标是让机器自己学会学习
可以理解为我们拿一个很大的训练集来训练神经网络,学习的目的不是为了识别什么是大象什么是老虎,并不是让模型识别没见过的大象和老虎,学习的目的是让模型理解事物的异同区分不同的事物,训练完模型之后可以提出这样一个问题,两张图片是否是一样的动物(训练集里没有松鼠但是可以识别异同 )
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rQUhkCpQ-1636680137458)(C:\Users\yanghaha\AppData\Roaming\Typora\typora-user-images\image-20211008221952243.png)]
metal learning
小样本学习就是一种元学习
元学习:学习如何学习learn to learn
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FBbzO2GP-1636680137459)(C:\Users\yanghaha\AppData\Roaming\Typora\typora-user-images\image-20211008222819447.png)]
传统监督学习和小样本学习的区别
- 传统的监督学习:(1) 测试图片之前没有见过
(2)测试样本来源于已知的类别
-
小样本学习: (1) Query之前没有见过
(2)Query samples 来自于未知的类别
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jHJSn9vl-1636680137459)(C:\Users\yanghaha\AppData\Roaming\Typora\typora-user-images\image-20211011193800846.png)]
Learn a Similarity Function
-
首先,可以从大规模的测试数据集中学习一个相似度函数
-
然后应用这个相似度函数作为预测
(1)将query和每一个support set 的样本作比较
(2)找到相似度最高的样本
Siamese Network(孪生网络)
孪生网络是一种简单的few-shot learning的方法
两种训练Simaese 的方法 (1) Learning Pairwise Similarity Scores (每次取两个样本比较他们的相似度)
训练这个神经网络需要一个大的数据集,数据有标注,每一类下面都有很多个样本
我们需要用数据集来构造正样本和负样本
Positive Samples: 告诉神经网络什么是同一类
Negative Samples:告诉事物之间的区别
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fjLr6cwy-1636680137460)(C:\Users\yanghaha\AppData\Roaming\Typora\typora-user-images\image-20211011195557714.png)]
(3)Triplet Loss
每次要从Training Set中选择三张图片做一轮训练,首先从训练集里随机选择一张图片把它作为anchor(锚点),然后从同一类别中随机取出一张图片作为正样本,从其它类别抽取一张图片得到一个负样本
把三个样本输入一个卷积神经网络来提取特征得到三个特征向量,计算正(负)样本与锚点在特征空间上的距离
我们希望学出来的神经网络有这样的性质:相同类别的特征向量都聚在一起,不同类别的特征向量都能被分开,所以d+应该很小d-应该很大
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cGsSSQTC-1636680137460)(C:\Users\yanghaha\AppData\Roaming\Typora\typora-user-images\image-20211011201325738.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-53RIUWya-1636680137461)(C:\Users\yanghaha\AppData\Roaming\Typora\typora-user-images\image-20211011201703207.png)]
Pretraining and Fine Tunning
基本思想是在大规模数据上预训练模型,然后在小规模的support set上做fine tuning
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pGatUz0Y-1636680137461)(C:\Users\yanghaha\AppData\Roaming\Typora\typora-user-images\image-20211011202541871.png)]
Softmax Function
输入是任意的k维向量,将向量的每一个元素做指数变换,得到k个大于零的数,然后将结果做归一化,令得到的k个数相加等于1
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5eA5i7xj-1636680137462)(C:\Users\yanghaha\AppData\Roaming\Typora\typora-user-images\image-20211011202928200.png)]
ResNet深度残差网络
输入是任意的k维向量,将向量的每一个元素做指数变换,得到k个大于零的数,然后将结果做归一化,令得到的k个数相加等于1
[外链图片转存中…(img-5eA5i7xj-1636680137462)]