当前位置: 代码迷 >> 综合 >> 2018-12 文献阅读:Boosting for Transfer Learning(2007)--迁移学习
  详细解决方案

2018-12 文献阅读:Boosting for Transfer Learning(2007)--迁移学习

热度:35   发布时间:2023-11-17 04:47:29.0

2018-12 文献阅读:Boosting for Transfer Learning(2007)


2018-12
文章的作者Wenyuan Dai&Qiang yang&Gui_Rong Xue
阅读原因:A Survey on Transfer Learning(2009)中引用,仔细看看
只选各部分有用的记录分析一下

文章目录

  • 2018-12 文献阅读:Boosting for Transfer Learning(2007)
  • 0.综述
  • 1.介绍
  • 2.相关研究
  • 3.通过TrAdaBoost进行迁移学习
    • 记号和说明
    • TrAdaBoost
  • 4.TrAdaBoost的理论分析(他没证明我也没看)
  • 5.计算机实验
    • 5.1 实验数据
    • 5.2 对比方法
    • 5.3 对比结果
  • 总结


0.综述

  • 传统机器学习的同分布假设常常不成立,如我们只有原有域的标签数据,但是需要对一个新的域进行分析,对新数据标签可能是昂贵的,并且舍弃原有数据的浪费的。
  • 本文是对(Freund 1997) boosting-based learing algorithms的AdaBoost算法的推广
  • TrAdaBoost使得我们能使用少量的新标签数据来构建对新数据的高质量分类模型,该迁移是有效的,我们通过理论和实验来表明这一点。

1.介绍

  • 同分布假设不成立的例子:Web mining。Web数据容易过时,人工标记昂贵,因此,如何使用旧数据十分重要。
  • 尽管数据过时(不同分布),但是认为有部分数据是有用的。
  • 如何找有用的数据?:使用少量新的标签数据,称之为同分布训练数据(same-distribution training data)来计算原本实例(instance)的有用性。称旧数据为不同分布训练数据(diff-distribution training data)
  • Probability Approximately Correct(PAC):概率近似正确。即对多数情况下,能达到近似正确

2.相关研究

  • 人类有迁移学习的能力,如有了拉丁语基础学习西班牙语更容易
  • 历史上对多任务学习的研究
  • DaumeIII & Marcu(2006)研究了统计自然语言过程中的域迁移问题,使用了特殊的高斯分布
  • 本文在PAC学习模型下发展了迁移分类框架
  • Wu & Dietterich(2004)提出了一个图片分类算法,使用少量的训练数据和大量低质量的额外数据,他们指出额外数据带来了一些提高,但并没有进行数量上的分析。
  • Liao et al(2005)应用激活学习(active learning),用额外数据提高了学习效果
  • Rosenstein(2005) 提出了一个对迁移学习的分层贝叶斯方法,讨论了何时迁移会有利何时会有弊

3.通过TrAdaBoost进行迁移学习

记号和说明

  • 同分布训练数据空间XsX_sXs?(same-distribution training data space)
  • 不同分布训练数据空间XdX_dXd?(diff-distribution training data space)
  • Y={0,1}Y=\{0,1\}Y={ 0,1}是分类标签,二分类问题
  • concept:从XXX映射到YYY的函数cccX=Xs∪XdX=X_s\cup X_dX=Xs?Xd?,映射数据的标签
  • 测试数据集 S={(xit)}S=\{(x_i^t)\}S={ (xit?)}xit∈Xs(i=1,…,k)x_i^t\in X_s\ (i=1,\dots,k)xit?Xs? (i=1,,k),大小为kkk
  • 训练数据集T?X×YT\subset{X\times Y}T?X×Y,被分为以下两部分:
  • Td={(xid,c(xid))}xid∈Xd(i=1,…,n)T_d=\{(x_i^d,c(x_i^d))\}\ \ x_i^d\in X_d\ (i=1,\dots,n)Td?={ (xid?,c(xid?))}  xid?Xd? (i=1,,n)
  • Ts={(xis,c(xis))}xis∈Xs(i=1,…,m)T_s=\{(x_i^s,c(x_i^s))\}\ \ x_i^s\in X_s\ (i=1,\dots,m)Ts?={ (xis?,c(xis?))}  xis?Xs? (i=1,,m)

我们并不知道TdT_dTd?的那一部分是有用的,在我们的问题中,TsT_sTs?量少,我们的目的是训练一个分类器c^:X→Y\hat{c}: X\to Yc^XY使它能够最小化在未标记的数据集DDD上的预测误差。

TrAdaBoost

算法框架:
注意最终分类器可以写成迭代分类器的加权组合形式,这里的∏t=?N/2?Nβt?ht(x)\prod_{t=\lceil {N/2} \rceil}^N\beta_t^{-h_t(x)}t=?N/2?N?βt?ht?(x)?取对数即可变为求和形式
在这里插入图片描述

#TrAdaBoost的伪代码
Input:T_d = labeled_diff_train_dataT_s = labeled_same_train_dataS   = unlabeled_test_dataN   = Max_iter_numbern,mdef Learner(){
    }  #一个基础的学习算法
Initialize:w_1=[w_1(1),...,w_1(n+m)]   #初始化权重参数,有n+m个训练数据,n+m个权重
iteration:for t in range(1,N+1):p_t = w_t/(sum(w_t))    #权重归一化h_t=Learner(T,p_t,S)        #以权重化的T作为训练数据,S作为测试数据应用learner#得到分类器h_te_t=error(h_t,T_s)            #计算h_t在T_s上的误差beta_t = e_t/(1-e_t)          #衰减系数beta  =1/(1+sqrt(2*ln(n)/N))if i in 1:n:                   #更新参数w_(t+1)[i] = w_(t)[i]*beta^(abs(h_t(x_i)-c(x_i)))if i in n+1:mw_(t+1)[i] = w_(t)[i]*beta_t^(-abs(h_t(x_i)-c(x_i)))
Output:                             #最终的分类器def h_finally(x):if condition:return 1else:return 0

我们将AdaBoost和TrAdaBoost的流程图画出了方便对比:
AdaBoost:给定了一些弱分类器,组合为一个效果好的分类器

Created with Rapha?l 2.2.0 【AdaBoost】初始化样本权重参数 【计算误差筛选模型】 使用样本权重参数计算分类器误差 选择在当前误差评价权重下 最优的弱分类器 【计算模型权重】 对该分类器计算 其在最终分类器中的权重 【数据权重更新】 计算下一次迭代使用的样本权重 对某样本误判则样本权重上升,否则下降 循环了n次? 最终分类器是各个弱分类器的加权和 yes no

TrAdaBoost:给定了某种训练方法,最终分类器仍然是各迭代中分类器的加权和

Created with Rapha?l 2.2.0 【TrAdaBoost】初始化样本权重参数 【训练模型】 用全体数据结合样本权重 训练得到模型 【误差计算】 应用样本权重参数计算 模型在同分布数据上的误差 误差大小用于下一步变化的幅度 【权重更新】 计算下一次迭代使用的样本权重 对某样本 同分布的:误判则样本权重上升,否则下降 不同分布:误判则样本权重下降,否则上升 循环了n次? 最终分类器是后半代迭代分类器的加权和 yes no

可以看到:

  • 同分布误判认为之后需要纠正,因此权重上升
  • 非同分布的误判,认为此数据是不好的,应当舍弃,权重下降,减弱它们的影响

4.TrAdaBoost的理论分析(他没证明我也没看)

  • 收敛性
  • TdT_dTd?中的平均训练损失(考虑这个干啥?)
  • TsT_sTs?中的预测损失
  • 某个同分布数据上的误差上界

5.计算机实验

5.1 实验数据

3组文本数据和一组非文本数据。如何构建数据TdT_dTd?TS∪ST_S\cup STS?S

  • 文本数据分类有分层结构。
    如<20 Newsgroups>可分为7类,此后又可以细分为20个子类。我们将问题定义为针对第一层分类的分类问题。
    通过摘取部分子类来实现构建非同分布数据
  • 非文本数据(mushroom data)由于没有没有分层结构,作者表示可以用数据中茎的形状来分割数据集,例如,非同分布数据包括了所有茎形状为“扩大”的数据。同分布数据则是“变细”的蘑菇数据。由于他们属于不同类型,因此不同分布。
  • TS∪ST_S\cup STS?S之后被分为TS和ST_S和 STS?S
  • 对于四组数据各自计算提取出的数据的KL散度,发现均大于0.3,而同分布应该接近0。
    在这里插入图片描述

5.2 对比方法

  • 选用支持向量机作为前面TrAdaBoost算法的basic learning algorithm
  • 共有如下算法:
    SVM
    TSVM(Transductive support vector machines)–一种半监督学习算法
    TrAdaBoost(SVM)
    TrAdaBoost(TSVM)
    在这里插入图片描述
    作者没有写AdaBoost,因为他发现这个在他的实验里没有什么用(-.-)

5.3 对比结果

  • 监督学习
    其中的AUX是Wu and Dietterich(2004)的使用额外数据增加模型效果的模型在这里插入图片描述
  • 半监督学习在这里插入图片描述
    可以看到我们的迁移学习效果严格优于其他方法,当然这也是因为这些SVM并不是针对迁移学习的算法。
    需要注意的是,比如Caruana(1997)指出,迁移学习可能带来负面影响,降低在test测试集上的正确率。尽管上面的实验没有涉及这一点,但是TrAdaBoost确实可能会有负迁移效果。
    在这里插入图片描述
    在上面这个图中,我们看出在Ts/TdT_s/T_dTs?/Td?很小时,也就是同分布数据不多时,迁移的效果很明显
    但是同分布变多后,迁移的学习效果略微低于直接学习的效果。
    因此:
    不同分布数据中的有用信息帮助我们训练数据
    不同分布数据中的噪声会影响我们训练的精度
    在这里插入图片描述
    Figure 2中迁移的效果并不明显,这是因为不同分布数据质量不好,也就是包含的有用信息较少。这一点可以从红色的SVMt看出:这个图的SVMt比Figure 1中的糟糕,而SVMt是把Ts,TdT_s,T_dTs?,Td?一起作为训练数据的SVM,因此TdT_dTd?TsT_sTs?差异较大可迁移的信息少。
    Figure 4中,我们看出本迁移算法收敛性良好,这在第四部分的理论分析中有说明。
  • 最后,文章讨论了分布之间的差别如何影响TrAdaBoost的表现:
    下图横坐标是KL散度,向右增加
    柱状是应用TrAdaBoost前后SVM或者SVMt的精度增加
    作者的结论是:SVM的增益没看出什么规律,但是SVMt的增益大体上随着KL散度增大而增大
    在这里插入图片描述

总结

  • TrAdaBoost是一个效果很好的boosting方法
  • 算法的improvement与KL散度有关,还需要在研究
  • 收敛速度太慢O(lnn/N)O(\sqrt{ln n/N})O(lnn/N ?),如何优化
  • 只能一次迁移到另一个分布
  相关解决方案