简单容易理解的迁移学习(TrAdaBoost),附带迁移学习的原论文

什么是迁移学习?

迁移学习是指将一个场景下学习到的知识迁移到另一个场景应用(这个场景是自己模型需要的场景)。

简单举例说明一下:

        比如说你学会走了在去跑是不是就更容易了。

        会英语就更容易学习语法了

这就是人类与生俱来的能力,利用已有的知识经验来解决相似的任务,当然我们也希望机器也具备这样的能力。

在举例子说明:假如你现在能区分一张猫和狗的图片,那么现在能不能区分苹果和梨的区别,这样就可以让机器有了前者的经验来实现后者,我们都知道,这个任务可以使用CNN网络去实现的,cnn就是提取特征,只有在最后的全连接层进行了分类,cnn是不是可以将猫狗数据训练出来,直接使用,然后苹果和梨肯定也可以的。

其实这样就是迁移学习,利用模型之间的数据,任务,以及相似性,将训练好的模型应用到新的任务上,被称为迁移学习,由于这两个任务发生在两个领域之间,已有的知识和数据,也就是被迁移的对象被称为源领域,被赋予的对象被称为目标领域。

特别注意:迁移学习不是具体的模型,我们使用迁移学习有很多原因,有时是目标领域逇数据太少,需要更多带有标注的源域的帮助,优势是为了节约训练时间。

像我们NLP中bert,transformer等等的模型他们在经过微调后可以应用到各种各样的领域上,这就是迁移学习应用到NLP领域上。

为什么要进行迁移学习?

1.深度学习中最基础的就需要大量的数据支持,而往往我们得不到大量的数据。

2.使用大量数据训练出来的模型,可以通过迁移学习很好的运用到,同领域不同的问题。

迁移学习中两个最要的概念:

域:比如说:电视剧的评论,和书本的评论就是两个域

任务:要做的下游任务不一样,比如情感分析和实体识别

负迁移:

我们在处理的两个领域之间差距特别大,就会导致严重的负迁移现象,也就是说我们的旧知识对新知识的学习产生了严重的阻碍,这就是负迁移,应该避免负迁移。

迁移学习的分类:分为三类

基于实例的迁移:从源领域中挑选出来有用的数据,让源领域的实例分布很接近目标领域,这样就可以学到一个比较可靠的模型。可以使用TrAdaBoost算法实现迁移。

TrAdaBoost算法:

 基于特征的迁移:关键就在于找到源领域和目标领域之间的共同特征,然后利用这些特征去做知识迁移。

基于共享参数的迁移:也就是说源领域和目标领域中有一些相同的层和相同的参数,这个时候就可以使用源领域的层数以及参数。

论文:

1801.06146v5.pdf (arxiv.org)

### TrAdaBoost算法概述 TrAdaBoost是一种专门用于迁移学习的增强型集成学习方法[^3]。此算法旨在通过利用源域(T_s)中的大量标记数据以及目标域(T_d)中少量标记数据来改进模型性能。 #### 错误率计算 仅针对从源域\( T_s \)抽取的新数据(new data),而非旧有数据(old data),来进行错误率评估,并在此过程中需对新数据的权重做归一化处理。 #### 权重调整速率计算 对于每一轮迭代,会单独计算来自源域\( T_s \)和目标域\( T_d \)样本权重的变化速度。值得注意的是,在每次循环里,源域内各实例的重要性改变比例不尽相同;然而,对于目标域内的元素而言,这一比率保持恒定不变。参数\(\beta_t\)代表了单个弱分类器影响力大小——其数值越高意味着相应预测者所占份额越低。 #### 数据权重更新机制 当遇到被错判的情况时,源自\( T_s \)的数据点将会获得更高的重视程度(即增大它们各自的权重),这一步骤遵循经典AdaBoost的做法。与此同时,一旦发现属于\( T_d \)部分里的条目未能得到恰当划分,则应削减那些项对应的比重,因为这类失误暗示着有资料可能并不适用于当前环境下的模式识别任务。 最终决策由后一半数量级上的弱分类结果共同决定(N/2至N之间)。 ```python def tr_adaboost(source_data, target_data, num_iterations): # Initialize weights for source (T_s) and target (T_d) datasets. Ts_weights = np.ones(len(source_data)) / len(source_data) Td_weights = np.ones(len(target_data)) / len(target_data) classifiers = [] for t in range(num_iterations): beta_t = calculate_beta(t) weak_classifier_ts = train_weak_classifier(source_data, Ts_weights) error_rate_ts = compute_error_rate(weak_classifier_ts, source_data, Ts_weights) weak_classifier_td = train_weak_classifier(target_data, Td_weights) error_rate_td = compute_error_rate(weak_classifier_td, target_data, Td_weights) update_weights(error_rate_ts, Ts_weights, increase=True) update_weights(error_rate_td, Td_weights, increase=False) classifiers.append((weak_classifier_ts, weak_classifier_td)) final_predictions = combine_classifiers(classifiers[-num_iterations//2:]) return final_predictions ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值