迁移学习与元学习
-- TCA, Finetune, Triplet Network
主要想讲的内容有:
TCA, Finetune, Triplet Network
迁移学习与元学习有哪几类方法
想讲的目标(但这一次不一定完全能写完, 下一次笔记补充): 分别属于什么方法, 处于什么位置, 它们之间的关联与区别 用到的场合 常用于解决的问题 例子 工业场景数据集, 解决什么问题, 结果 做了一件什么事, 可以处理什么问题 还是要具体一些,泛泛的说听完还是不知道是什么意思 元学习在使用时的整个流程, 配合什么过程完成目标 举具体的例子, 典型的模型/方法 |
Motivation
数据分布不同
目标任务不同
数据和任务两方面的动机
1. 需要利用一切可利用的数据, 故迁移不同分布的数据十分重要. 准确测量的数据容易过时, 随动态因素变化, 也需要从前一个时期的状态迁移过来.
2. 更大数据集上训练好的模型,针对于我们的任务进行微调/自适应更新
TCA, Finetune, Triplet Network
TCA, Finetune, Triplet Network所属领域(处于的位置)
TCA
属于迁移学习Transfer Learning-基于特征的迁移学习方法 (Feature based)
Finetune
属于迁移学习Transfer Learning-基于模型的迁移学习方法 (Model based)
Triplet Network
属于元学习Meta Learning-基于度量的方法Metric Based
Few-Shot Learning
Finetune和Triplet Network是小样本学习Few-Shot Learning (目标)的一种方法(手段) (目前应用的学习目标数据大多为图片)
TCA, Finetune, Triplet Network网络图
TCA
回顾一下TCA的思想
TCA(Transfer Component Analysis)是迁移学习中, 一种基于特征(Feature based)的数据边缘分布自适应方法(Marginal Distribution Adaptation)
边缘分布自适应
目标: 减小两个域(源域和目标域数据)的边缘概率分布的距离,从而完成迁移学习
TCA目标
找特征映射φ, 源域与目标域共同做这个映射
1.得到的分布接近. minimizing the distance between P (ϕ(XS)) and P (ϕ(XT ))
$$ P(\mathbf{x}_s) \neq P(\mathbf{x}_t) \\ \mathop{\rightarrow}\limits^{\phi} P(\phi(\mathbf{x}_s)) \approx P(\phi(\mathbf{x}_t)) $$
度量距离: 最大均值差异(MMD,maximum mean discrepancy)
2. 最大化方差(保留数据特征信息)maximizing the data variance.
Finetune
基于模型的迁移学习方法 (Model based Transfer Learning)
这是一种模型参数迁移的方法, 构建参数共享的模型.
训练一个Model,就是去更新它的权值,将权值认为是知识,把这些知识应用到新任务中去。
步骤
1.一般来说,一个神经网络模型可以分为Features Extractor(提取特征)和Classifer(分类)两部分.
2.通常我们习惯对Features Extractor的结构和参数进行保留,而仅修改Classifer来适应新任务。
3.这是因为新任务的数据量太小,预训练参数已经具有共性,不再需要改变,如果再用这些小数据训练,可能反而过拟合
Triplet Network
用到的场合
常用于解决的问题
例子 工业场景数据集, 解决什么问题, 结果
1.要解决什么问题?
实质上,Triplet Network是Siamese Network的一种延伸,要解决的问题与Siamese Network的基本一致。
与Siamese Network一样,适用于解决样本类别很多(或不确定),然而训练数据集的样本数又很少的情况
(如人脸识别、人脸验证)。
2.用了什么办法解决?
思路:将图像映射到特征空间中,其中两幅图像输入CNN得到的特征向量之间的欧式距离即为相似度。
与Siamese Network不同的是,Triplet Network采用三个样本为一组:一个参考样本,一个同类样本,一个异类样本。
属于Metric Based Meta Learning基于度量的元学习方法, 这里的度量, 就是输入样本的相似度
输入是一个三元组triplet=(a,p,n):
- an anchor(基准正例)
- a positive of the same class as the anchor (正例)
- a negative of a different class (负例)
Siamese network就是“连体的神经网络”,神经网络的“连体”是通过共享权值来实现
共享权值的意思:
左右两个神经网络的权重一模一样. 在代码实现的时候,甚至可以是同一个网络,不用实现另外一个,因为权值都一样。
孪生神经网络有两个输入(Input1 and Input2),将两个输入feed进入两个神经网络(Network1 and Network2),这两个神经网络分别将输入映射到新的空间,形成输入在新的空间中的表示。通过Loss的计算,评价两个输入的相似度。
这种loss函数(contrastive loss)的目标是比较两组特征的距离
triplet loss的目标是:
两个具有同样标签的样本,他们在新的编码空间里距离很近。
两个具有不同标签的样本,他们在新的编码空间里距离很远。
要获得这样一个特征表示, 使同类距离小(d(a,p)), 异类距离大(-d(a,n))
在contrastive loss的基础之上构建了一个新的loss函数,就是保持类内和类间距离有一个距离限制(margin)。
其triplet loss就可以写作:
$$ \mathcal{L} = max(d(a, p) - d(a, n) + margin, 0) $$
最小化上述损失函数,a与p之间的距离d(a,p)=0,
a与n之间的距离d(a,n)大于d(a,p)+margin。
当negative example很好识别时,上述损失函数为0: 只需要可以区分开负例, 不需要负例无限远, 过远了没有那么大意义, 也影响整体loss
方法对比总结
迁移学习
基于特征的迁移学习方法 (Feature based)
特征进行变换. 假设源域和目标域的特征原来不在一个空间,或者在原来那个空间上不相似,把它们变换到一个空间里面
TCA基于特征的迁移:
通过将数据特征变换到统一特征空间中, 再用机器学习方法进行分类识别
基于模型的迁移学习方法 (Model based)
构建参数共享的模型.
固定前面若干层的参数,只针对我们的任务,微调后面若干层
Finetune基于模型的迁移:
源域中的数据与目标域中的数据可以共享一些模型的参数
元学习(multi-task)
元学习(Meta Learning)与迁移学习(Transfer Learning)的区别联系
迁移重点在于data distribution发生变化时, 强调从已有任务中学习特定一个新任务
元学习也是across-task的一种方法.
元学习更偏重于任务和数据的双重采样(task distribution), 任务和数据一样是需要采样的,而学习到的F(x)可以帮助在未见过的任务f(x)里迅速建立mapping
学习的不是直接完成任务的函数, 而是着重于上层, leaning Algorithm中可学习的部分
元学习特点
元学习侧重于学习在传统方法中人为设定的可变的部分: 网络结构/初始参数等等
例如与传统方法对比, 传统方法手动设定学习架构和参数, 学习目标: 什么是猫, 什么是狗
在Metric Based Meta Learning的Triplet Network中学习的目标是学习如何去比较(compare)两个图片是相同的还是不同的类
Meta中的一个within-task training+一个within-task testing合起来=episode
元学习种类
元学习主要有三类常见的方法:基于度量的方法(metric-based),基于模型的方法(model-based),基于优化的方法(optimization-based)
kθ is a kernel function measuring the similarity between xi and x.
基于度量的方法(metric-based)
目标就是学到一个不同样本之间的metric或者说是距离函数
显式的学习了输入数据的嵌入向量(embedding vectors),得到合适的距离函数kernel function
基于模型的方法
主要指快速学习的模型生成方法,快速学习指的是这个模型可以根据少量的训练快速更新参数。有两种方式可以实现快速学习,
1.设计好模型的内部架构使其能够快速学习,2.用另外一个模型来生成快速学习模型的参数。
如Meta Networks: 专门针对多任务间快速泛化设计的元学习模型
一般神经网络的权重是根据目标函数进行随机梯度下降更新的,但这个过程很慢。一种更快的学习方法是利用另外一个神经网络,预测当前神经网络的参数,预测出来的参数被称为快参数。而普通SGD生成的权重则被称为慢参数。
基于优化的方法
深度学习模型通过反向传播梯度进行学习。然后基于梯度的优化方法并不适用于仅有少量训练样本的情况,也很难在短短几步之内达到收敛。
调整现有的优化算法使得模型能够在仅有少量样本的情况下学好->这就是基于优化的元学习算法的目标。
如MAML
Model-Agnostic Meta-Learning
寻找一个在给定任意任务后微调过程最高效的模型参数
参考资料
Multitask->transfer & meta
区别联系参考:
https://www.zhihu.com/question/299020462
https://zhuanlan.zhihu.com/p/146877957
Triplet Network
参考腾讯云简介
https://cloud.tencent.com/developer/article/1716613
吴恩达视频课
https://www.bilibili.com/video/BV1XE411Z752
小样本学习: 孪生网络(连体网络):
Few-Shot Learning: Siamese Network
https://www.bilibili.com/video/BV1vQ4y1R7dr
meta learning
综述博客:
https://www.zhihu.com/question/362627625/answer/954283719
meta-learning的三种思路:Metric-based, Model-based, Optimization-based
https://lilianweng.github.io/posts/2018-11-30-meta-learning/
https://wei-tianhao.github.io/blog/2019/09/17/meta-learning.html
李宏毅课程:
https://www.bilibili.com/video/BV1KF41167VZ/?spm_id_from=333.788.recommend_more_video.3
few-shot
wangshusen的B站小课
https://www.bilibili.com/video/BV1V44y1r7cx/
meta和few-shot关系:
https://www.zhihu.com/question/291656490/answer/1478111669
Chelsea Finn和Sergey Levine在ICML19的tutorial中详细解释了与k-shot/transfer/multi-task learning的关系/异同:
https://youtube.videoken.com/embed/DijI4XrhqNo?tocitem=14
ICML 2019 Tutorial: Meta-Learning: from Few-Shot Learning to Rapid Reinforcement Learning
few-shot的3个研究方向:
https://zhuanlan.zhihu.com/p/66552960
https://zhuanlan.zhihu.com/p/156830039
Siamese Network
网络结构介绍参考:
https://zhuanlan.zhihu.com/p/55254100
https://zhuanlan.zhihu.com/p/35040994
Triplet network,论文是《Deep metric learning using Triplet network》:
https://arxiv.org/pdf/1412.6622.pdf
论文翻译:
https://blog.csdn.net/qq_32642107/article/details/102654790
Triplet loss
Triplet Network, Triplet Loss及其tensorflow实现参考:
https://zhuanlan.zhihu.com/p/35560666
代码:
https://github.com/omoindrot/tensorflow-triplet-loss