[迁移学习]域自适应

一、定义

        1.源域和目标域

        源域(Source)和目标域(Target)之间不同但存在联系(different but related)。迁移学习的人物是从源域学习到知识并使其在目标域中取得较好的成绩。

        迁移学习可以分为正迁移(postive transfer)和负迁移(negtive transfer),划分依据是迁移学习的效果好坏。

        2.迁移学习的优势

        ①缺乏大量(已标注)数据或计算资源

        ②需要快速训练个性化模型

        ③冷启动服务(例如一个新用户的产品推荐,可以依赖用户关联来做)

二、相关符号

        域(Domain)D:{(x_i,y_i)}^N_{i=1}\sim P(x,y)

                源域(Source Domain):D_s,目标域(Target Domain):D_t

        任务(Task)y=f(x)

        条件:需要满足以下两个条件之一才是迁移学习:

                ①域不同:P(x,y)\neq Q(x,y)

                ②任务不同:T_S \neq T_t

三、迁移学习

        1.域不同

        P(x,y) \neq Q(x,y)进行贝叶斯展开后:P(x,y)=P(y|x)P(x)

        如果P(y|x)相同,其具有不同的边缘分布(marginal distribution):

                x_s \sim P_s(X),x_t\sim P_t(X)\rightarrow P_s(X) \neq P_t(X)

        如果P(x)相同,其具有不同的条件分布(conditional distribution):

                P_s(y|x) \neq P_t(y|x)

         2.损失函数

        经验风险最小化(ERM):f^*=argmin_f \frac{1}{m}\sum _{i=1}^m L(f(x_i),y_i);其中 L 为损失函数

        上述公式是一般机器学习使用的迭代公式,在迁移学习中,一般通过在后面加入一个迁移正则化表达式(Transfer regularization),可以表示如下:

                f^*=argmin_f \frac{1}{m}\sum _{i=1}^m L(f(x_i),y_i) + \lambda R(x_i,y_i);其中 R 即为需要学习的参数,一般分以下几种情况对 R 进行学习:

                ①D'_s\subseteq D_s(子集),可得P(x,y) \approx Q(x,y),这种情况下不需要R

                ②R可以写作Distance(D_s,D_t)Separability(D_s,D_t)

                ③当两个任务相似时(f_s \approx f_t),可以跳过R的优化

        上述三种学习方法分别对应:

                ①Instance-based TL:基于实例,需要选择一部分样本使其接近目标域,这种方法现在使用比较少,其具体可分为以下几种做法:

                        1.Instance selection:设计一个实例选择器,从源域中筛选出和目标域接近的数据,并改变其权重(增加分得好的样本的权重,减少分得不好的样本权重)。其由一个实例选择器(Instance Selector)f和一个性能评估器(Performance Evaluator)g组成,按照下图循环执行。总体思路接近强化学习

                         2.Instance reweighting:使用这种方法的前提是D'_s \subseteq D_s,且P_s(x) \neq P_t(x)P(y|x)相同。此时,代价函数将被改写为:

                                \theta^*_t=argmax_\theta \int _x P_t(x) \sum_{y \in Y}P_t(y|x)logP(y|x;\theta)dx,化简后可得

                                \theta^*_t \approx argmax_\theta \frac{1}{N_s}\sum^{N_s}_{i=1}\frac{P_t(x_i^S)}{P_s(x_i^S)}logP(y_i^S|x_i^S;\theta)

                ②Feature-based TL:基于特征,将迁移正则项R显式表示并使之最小化,一般为两个域之间的距离。可以根据源域和目标域的类型分为两类:同类特征空间(例如源域和目标域均为图片),异类特征空间(例如源域和目标域一种是文字,一种是图片)

                         这种方法的前提是源域和目标域之间存在一些通用特征(common features),我们需要做的是将源域和目标域变换到同一特征空间中并缩小其距离。可以分为两种做法:

                        1.显式距离(Explicit distance)R=Distance(D_s,D_t);空间距离,即使用一些数学工具来度量两个域之间的距离。常见的有以下几种:

                                ①基于Kernel:MMD、KL散度、Cosine相似度

                                ②基于几何:流式核(GFK)、协方差、漂移对齐、黎曼流形

                                其中使用最多的是MMD(最大矩阵差异),详见第四章

                        2.隐式距离(Implicit distance)R=Separability(D_s,D_t);可分性,在无法选择空间距离的情况下进行,一般使用对抗网络GAN来实现。

                        3.两者结合(explict+implicit dist):例如MMD-AAE网络、DAAN网络。

                ③Parameter-based TL:基于参数,复用源域上训练好的模型。代表方法为预训练。

四、MMD

        1.定义

        MMD,即最大矩阵差异。是一个用来度量域之间差异的值,其可以定义为将x和y分别映射到P和Q两个数据分布上(x \sim P,y \sim Q),f为一个可以将x映射到希尔伯特空间H的函数,MMD计算的是两个域映射后之间期望的最大差异,其数学公式可以写作:

        MMD(P,Q,F) = sup E_P [f(x)]-E_Q[f(y)]

        而实际计算时候往往进行有限的随机采样获取一些数据,再计算这些数据的均值差异,这些均值差异中最大的即为MMD,一般写作:

        MMD(P,Q,F)=sup E_P[\frac{1}{m}\sum_{i=1}^mf(x_i)-\frac{1}{n}\sum^n_{j=1}f(y_j)]

        基于统计学,当MMD的值非常接近0时,可以认为两个域之间的分布近似相等(即打成域对齐的目标)

        2.分类

                ①Marginal dist

                这种方法是用MMD衡量两个域之间分布的差异,原公式

                Distance(D_s,D_t)\approx MMD(P,Q,F) = sup E_P [f(x)]-E_Q[f(y)]经过一定的计算可以写作:tr(A^TXMX^TA),式中X=[X_s,X_t]\in R^{d\times(m+n)},A \in R^{(m+n)\times(n+m)},其核形式可以记作:tr(KM),其中

                 该方法通常被称为:TCA(Transfer Component Analysis)-迁移成分分析

                         min\, tr(KM)-\lambda\, tr(K)

                 从上图可以看到,两个域经过PCA(主成分分析)后分布并不相等,但是讲过TCA处理后分布趋于一致。

                ②conditional dist

                该方式的公式可以写作:Distance(D_s,D_t)\approx MMD(P_s(y|x),P_t(y|x),f)

                化简后可以得:Distance(D_s,D_t)=\sum_{c=1}^C tr(A^TXM_cX^TA),可以看出和上面的TCA公式结构相似,区别在于式中的M_c代表类别,相当于将TCA加入类别中。

                 通过变换,可以得到一种叫JDA(Joint Distribution Adaptation)的方法,写作:

                        min \sum^C_{c=0} tr(A^TXM_cX^TA)+\lambda ||A||^2

                JDA相较于TCA而言,拥有更好的性能和更短的分布距离。同时由于JDA能进行迭代,可以更好的学习分布间的差异。

                ③dynamic dist

                这种方法可以缩写为DDA,其相当于将TCA和JDA使用一个通用公式写出,可以写作:

                 当\mu=1时,式子可以写作:tr(A^TXMX^TA),即为TCA

                当\mu=0.5时,式子可以写作:tr(A^TXM_cX^TA),即为JDA

                 该方法的难点在于如何评价参数\mu,一般在用A-distance的估计方法。具体做法可以写作:

                        d_A(D_s,D_t)=2(1-2\epsilon (h));其中h为线性分类器,\epsilon (h)h的错误

                然后可以用上式来估计\hat{\mu}\approx 1-\frac{d_M}{d_M+\sum_{c=1}^Cdc};其中d_M=d_A(D_s,D_t)是边缘分布,d_c=d_A(D_s^{(c)},D_t^{(c)})是条件分布。

        3.MMD在深度学习中的应用

        上述的TCA、JDA、DDA均可采用Deep domain confusion(DDC)或Dynamic distribution adaptation network(DDAN)的方法加入神经网络,改进后的网络结构如下:

                

        网络的损失函数为:L=L_c(x_i,y_i)+\lambda \cdot Distance(D_s,D_t);式中的Distance可以是TCA、JDA、DDA。可以通过随机梯度下降进行学习。是一种端到端的学习方式。

五、迁移学习的热门方向

         1.Low-resource learing:在仅有少量标签数据的情况下进行训练。即自训练

         2.Safe transfer:防止继承公开模型的漏洞而被针对性攻击

         3.Domain adaptation:域自适应

         4.Domain generalization:域泛化

  • 2
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
源域和目标的特征可视化图可以通过使用降维技术进行实现。其中,常用的降维算法有PCA、t-SNE、UMAP等。这些算法可以将高维特征映射到二维或三维空间中,从而便于可视化。 具体实现过程如下: 1. 对源域和目标的数据进行特征提取,得到高维特征向量。 2. 使用降维算法对特征向量进行降维处理,得到二维或三维的特征向量。 3. 将源域和目标的特征向量在同一坐标系下进行可视化展示。可以使用散点图或者热度图等方式呈现。 下面是一个简单的实现示例: ```python import numpy as np from sklearn.decomposition import PCA from sklearn.manifold import TSNE import umap # 生成伪造的源域数据和目标数据 source_data = np.random.rand(50, 100) # 50个样本,每个样本100维特征 target_data = np.random.rand(50, 100) # PCA降维 pca = PCA(n_components=2) source_pca = pca.fit_transform(source_data) target_pca = pca.fit_transform(target_data) # t-SNE降维 tsne = TSNE(n_components=2) source_tsne = tsne.fit_transform(source_data) target_tsne = tsne.fit_transform(target_data) # UMAP降维 umap_embedder = umap.UMAP(n_components=2) source_umap = umap_embedder.fit_transform(source_data) target_umap = umap_embedder.fit_transform(target_data) # 可视化展示 import matplotlib.pyplot as plt plt.figure(figsize=(12, 6)) plt.subplot(2, 3, 1) plt.scatter(source_pca[:, 0], source_pca[:, 1], label='source') plt.scatter(target_pca[:, 0], target_pca[:, 1], label='target') plt.legend() plt.title('PCA') plt.subplot(2, 3, 2) plt.scatter(source_tsne[:, 0], source_tsne[:, 1], label='source') plt.scatter(target_tsne[:, 0], target_tsne[:, 1], label='target') plt.legend() plt.title('t-SNE') plt.subplot(2, 3, 3) plt.scatter(source_umap[:, 0], source_umap[:, 1], label='source') plt.scatter(target_umap[:, 0], target_umap[:, 1], label='target') plt.legend() plt.title('UMAP') plt.subplot(2, 3, 4) plt.hist2d(source_pca[:, 0], source_pca[:, 1], bins=20) plt.colorbar() plt.title('PCA') plt.subplot(2, 3, 5) plt.hist2d(source_tsne[:, 0], source_tsne[:, 1], bins=20) plt.colorbar() plt.title('t-SNE') plt.subplot(2, 3, 6) plt.hist2d(source_umap[:, 0], source_umap[:, 1], bins=20) plt.colorbar() plt.title('UMAP') plt.show() ``` 上述代码中,我们使用了PCA、t-SNE和UMAP三种降维算法,并对源域和目标的数据进行了可视化展示。其中,左列为散点图,右列为热度图。从图中可以看出,不同的降维算法得到的结果有所差异,但都能够有效地将高维特征映射到低维空间中,便于进行可视化展示。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值