#Paper Reading# ELLA: An Efficient Lifelong Learning Algorithm

11 篇文章 1 订阅
3 篇文章 0 订阅

论文题目:ELLA: An Efficient Lifelong Learning Algorithm
论文地址:http://www.jmlr.org/proceedings/papers/v28/ruvolo13.pdf
论文发表于:International Conference on Machine Learning(ICML) 2013(A类会议)

论文大体内容:
本文提出一种高效的Lifelong Learning算法,主要包括Knowledge Base(sparsely shared basis),使用Knowledge Base进行transfer learning,更新Knowledge Base等操作。最终的效果跟 batch multi-task learning(GO-MTL[1])基本一样,但是速度上快了3个数量级(1000多倍)。本文主要的motivation在于速度的提升。

1、transfer,multitask和lifelong的区别[3]:
这里写图片描述

2、Lifelong learning的framework:
这里写图片描述

3、本文使用参数方法(如线性回归,逻辑回归等)进行训练模型,对于每个task t,参数为θ(t),输入的样本X是d维的,优化方程如下:
这里写图片描述
其中L∈R^(d, k),S(t)∈R^(k, 1),θ(t)∈R^(d, 1),θ(t)=L*S(t);
优化方程就是要使预测的loss function最小化,同时为了减少每个task对于隐藏层的使用,所以加入S的稀疏性控制;

4、解优化方程常用的做法是使用类EM迭代的方式,分别迭代S与L(GO-MTL使用的方法),但是并不高效,主要有2方面:
①解法需要使用全部样本,计算量增大;
②每次L改变后,到更新S(t)的时候,需要把T个S都更新,带来特别大的计算量;

5、本文对这2方面的改进是:
①将模型改为增量式的,对优化方程作二阶泰勒展开;
这里写图片描述
②对于一个task t的数据,只更新S(t),其它task t’的S(t’)不更新;

6、算法ELLA伪代码
这里写图片描述
这里写图片描述
这里写图片描述
①A∈R^(k*d, k*d),b∈R^(k*d, 1),L∈R^(d, k),S(t)∈R^(k, 1),θ(t)∈R^(d, 1),其中d是X的feature数量,k是隐藏层维数,它们的关系是θ(t)=L*S(t),L=mat(A^(-1)*b);
②来一个数据,判断是否为新task,然后相应的更新X,Y(创建新的或者合并到以前的数据中),若为旧task,将A,b减去已经累加过的旧task的值,保证A,b均是对每个task累加的值;
③利用常用的简单分类或者回归方法(如线性回归、逻辑回归等),训练出θ(t),D(t);
④将L的某一列或某几列置0(感觉没什么用);
⑤使用Lm(上一次的L)更新S(t);
⑥对(5)的方程求导为0,然后更新A,b,再通过L=mat(A^(-1)*b)更新L;

7、对于线性回归来说,θ(t)与D(t)分别是:
这里写图片描述

8、对于逻辑回归来说,θ(t)与D(t)分别是:
这里写图片描述

实验
9、Baseline:
①GO-MTL[1]:a batch MTL algorithm;
②OMTL[2]:a perceptron-based approach to online multi-task learning;
③STL:independent single-task learning;

10、Dataset:
①synthetic regression tasks:自定义的tasks,Tmax = 100 random tasks with d = 13 features and nt = 100 instances per task;
②land mine detection: 通过雷达图片找地雷;
③facial expression recognition:identification of three different facial movements from photographs of a subject;
④predicting student exam scores:from 15,362 students in 139 schools in London;
这里写图片描述

11、评测标准
①分类实验:AUC曲线;
②回归实验:rMSE;

12、实验步骤
①将每个task划分50%的作为training set,50%的作为testset;
②参数k∈[1, min(10,T/4)],λ取{e−5; e−2; e1; e4}等值;
③一次进来task t下的一个样本,然后根据已有的所有该task下的样本,然后训练θ(t),得到task下的参数;
④对于testset的样本,先看是哪个task的数据,再使用该task下的参数θ(t)进行预测;

13、实验结果:
①与batch MTL结果差不多100%一样(效果几乎没变化);
这里写图片描述
②时间提高了3到5个数量级(1000-100000);
这里写图片描述
③随着task数目增加,准确率是不断的变大,并慢慢收敛的;
这里写图片描述

参考资料:
[1]、https://arxiv.org/ftp/arxiv/papers/1206/1206.6417.pdf
[2]、http://www.jmlr.org/proceedings/papers/v15/saha11b/saha11b.pdf
[3]、https://www.cs.uic.edu/~liub/Lifelong-Machine-Learning-Tutorial-KDD-2016.pdf
[4]、http://www.seas.upenn.edu/~eeaton/papers/slides-Ruvolo2013ELLA.pdf

以上均为个人见解,因本人水平有限,如发现有所错漏,敬请指出,谢谢!

Lifelong Embedding Learning(终身嵌入学习)是一种机器学习技术,它允许模型在面对新任务或数据分布变化时持续学习和适应,同时保持之前知识的稳定性。这种学习方法通常涉及到以下几个步骤: 1. **知识表示**:模型会在每个任务开始时学习到一个新的嵌入空间,用于捕获任务相关的特征。这通常是通过神经网络完成,比如预训练的词向量(如Word2Vec、BERT等)。 2. **迁移更新**:当面临新任务时,模型会利用先前任务学到的知识初始化新的嵌入层,而不是从头开始。这意味着旧的任务特征可以在新任务中有一定的基础。 3. **动态更新**:模型会对新任务的数据进行增量式训练,仅更新与新任务相关的部分,同时使用正则化或其他机制来防止过度拟合并维护已有知识的稳定。 4. **记忆管理**:为了存储历史任务的相关信息,可能会引入在线学习策略或者定期回顾已学过的任务,以便在需要时可以访问。 以下是使用PyTorch实现简单版本的Lifelong Embedding Learning的一个示例代码片段: ```python import torch.nn as nn from torch.optim import Adam class TaskEmbedding(nn.Module): def __init__(self, shared_embedding_size, task_specific_size): super(TaskEmbedding, self).__init__() self.shared = nn.Embedding(num_embeddings=num_tasks, embedding_dim=shared_embedding_size) self.task Specific = nn.Linear(shared_embedding_size, task_specific_size) class LifelongModel(nn.Module): def __init__(self, num_tasks, embedding_size, hidden_size): super(LifelongModel, self).__init__() self.embeddings = nn.ModuleList([TaskEmbedding(embedding_size, hidden_size) for _ in range(num_tasks)]) def forward(self, inputs, task_id): shared_embedding = self.embeddings[task_id].shared(inputs) task_specific_output = self.embeddings[task_id].task_specific(shared_embedding) return task_specific_output # 示例用法 optimizer = Adam(model.parameters(), lr=0.001) for t in range(num_tasks): model.train() optimizer.zero_grad() output = model(inputs, t) loss = F.cross_entropy(output, labels) # 假设labels是对应任务的真实标签 loss.backward() optimizer.step() # 当有新任务时,只需添加新的TaskEmbedding实例,并在适当位置集成进来即可 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值