【Lifelong learning】Lifelong Language Knowledge Distillation

Lifelong Language Knowledge Distillation(L2KD)结合知识蒸馏技术,提出了一种在终身学习场景下,不增加模型容量也能有效学习新任务的方法。L2KD在LAMOL模型基础上,通过教师模型指导学生模型,减少遗忘,提高模型在新任务上的表现。教师模型在每个新任务上训练后丢弃,以节省内存。L2KD包括词级、序列级和软序列级的知识蒸馏策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

链接:http://arxiv.org/abs/2010.02123

简介

Lifelong Language Knowledge Distillation终身语言知识提炼,是一种利用知识蒸馏的终身学习方法。
其主要思想是:每次遇到新任务时,不直接让model去学习,而是先在任务上训练一个teacher model,然后运用知识蒸馏技术,将知识传递给model。

  • 知识蒸馏:有两个模型: student model(小)和teacher model(大)。student model需要通过训练,模仿teacher model的行为并使得两者性能相近。

本文将知识蒸馏的思想运用到了终身学习的语言领域。但不同之处在于: L2KD的student model和teacher model是一样大的。

如下图所示。这种方法只需要为每个新任务多花一点时间训练一个一次性teacher model,在学习下一个任务时可以丢弃该模型;因此,L2KD不需要额外的内存或模型容量,这使得提出的模型在实际使用中更有效。在这里插入图片描述

必须要指出的是:L2KD作为一种方法而非具体模型,可以加到大部分LLL模型上去。
因此,本文就将L2KD加到了LAMOL上去。
LAMOL介绍:https://blog.youkuaiyun.com/Baigker/article/details/121650749?spm=1001.2014.3001.5501

Proposed Approach

正如在简介中提到的,L2DK本质是一种知识蒸馏,并且在实际运用中要加到其他模型上去。因此本文也遵循这一顺序,即:先介绍LAMOL,再介绍知识蒸馏,最后才说明L2KD的原理。

LAMOL

在LAMOL的setting中,语言数据集中的所有样本都有三个部分:上下文、问题和答案。我们可以简单地将这三个部分连接成一个句子,并训练模型根据上下文和前面的问题生成答案。
在这里插入图片描述

除了生成给定问题的答案外,该模型还可以同时学习对整个训练样本建模。
通过这样做,在训练下一个任务时,模型可以生成前一个任务的样本(被称为伪数据),同时训练新任务的数据和前一个任务的伪数据。
因此,模型在适应新任务时忘记的更少。
在这里插入图片描述

知识蒸馏

语言模型

一般来说,语言模型的目标是使预测下一个词时的负对数似然(NLL)最小化:在这里插入图片描述
而在知识蒸馏中,我们将student model和teacher model之间的预测误差最小化。
被认为是误差的目标单元可能在单词级或序列级进行。

Word-Level (Word-KD)

在预测下一个词时,我们最小化student和teacher的输出分布之间的交叉熵:
在这里插入图片描述
其中输入 x < t x_{<t} x<t来自标准答案(ground truth)序列。 V V V表示词汇集, V k V_k Vk V V V中的第 k k k个单词。
θ S θ_S θS θ T θ_T θT分别为学生模型和教师模型的参数。

Sequence-Level (Seq-KD)

我们将teacher model中的贪心解码或beam search输出序列 x ^ \hat x x^

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、付费专栏及课程。

余额充值