Y-Tuning: 通过对标签表征进行微调的深度学习新范式【ACL 2022】
-
ACL2022有一篇名为《Y\mathcal{Y}Y-Tuning: An Efficient Tuning Paradigm for Large-Scale Pre-Trained Models via Label Representation Learning》的投稿,从标题上就吸引了我的注意,不同于Fine-Tuning、Adapter-Tuning、Prompt-Tuning,这篇文章的创新之处在于,不调整输入文本特征与大规模预训练模型的参数,仅通过学习标签的特征,以往很少见到论文去学习标签的特征。虽然最终效果可能仍无法与微调相比,但它在节省计算成本方面有很大的优势,并有可能通过后续研究进一步提高性能
Preliminaries of Tuning PTMs
对于NLP任务来说,通常都含有输入文本x∈Xx\in \mathcal{X}x∈X以及标签y∈Yy\in \mathcal{Y}y∈Y,其中X\mathcal{X}X的特征空间是离散的(例如One-hot)。以情感分析(Sentiment Analysis, SA)任务为例,输入句子
标签集Y=postive,negative\mathcal{Y}={\text{postive}, \text{negative}}Y=postive,negative中的标签y=postivey=\text{postive}y=postive为真实标签
定义ϕ:X→Z\phi : \mathcal{X}\to \mathcal{Z}ϕ:X→Z为输入句子到高维稠密向量空间的映射,f:Z→Yf: \mathcal{Z}\to \mathcal{Y}f:Z→Y为改向量空间到标签空间的映射。给定训练集D\mathcal{D}D,我们可以定义损失函数为ℓ:Y×Y→R+\ell: \mathcal{Y}\times \mathcal{Y}\to \mathbb{R}^+ℓ:Y×Y→R+,并且可以通过以下方法找到最佳的fff和ϕ\phiϕ:
通常来说,即便分类器fff很简单,但只要有一个好的特征提取器ϕ(x)\phi(x)ϕ(x),下游任务中的表现就不会差上面的内容删减自原论文,论文中的描述有些抽象,说白了实际上ϕ\phiϕ可以看作是BERT,fff就是为了满足不同的下游任务,而接在BERT后面的一些层,例如文本分类后面接的就是一个Linear层
Y\mathcal{Y}Y-Tuning
我们定义(x,y)(x,y)(x,y)是一个有标签的训练样本,ϕ⋆\phi^{\star}ϕ⋆是在大规模语料上训练好的预训练模型,并且在接下来始终固定ϕ⋆\phi^{\star}ϕ⋆的参数不更新。传统做法是微调特征提取器ϕ⋆\phi^{\star}ϕ⋆的参数,使其接近真实标签。Y\mathcal{Y}Y-Tuning的做法是固定ϕ⋆\phi^{\star}ϕ⋆的参数,转而微调标签提取器ψ\psiψ的参数,并且我们使用Cross Attention将ϕ⋆(x)\phi^{\star}(x)ϕ⋆(x)与ψ(Y)\psi(\mathcal{Y})ψ(Y)的特征进行融合,如下图所示
损失函数为Triplet Loss,形式如下:
其中,[x]+=max(x,0)[x]_+=\max (x, 0)[x]+=max(x,0),α\alphaα是一个边界超参数,用于控制正负样本间的距离。在训练过程中,给定训练集D\mathcal{D}D,我们可以通过如下方式找到最佳的模型参数
在推理阶段,我们可以使用如下方式获得预测值:
An Implementation of Y\mathcal{Y}Y-Tuning
论文图中的模型架构主要由三个部分组成:
- 用于提取文本特征的ϕ\phiϕ,这个部分一般是Encoder类模型,例如BERT等
- 用于提取标签特征的ψ\psiψ,这个部分一般采用Transformer的Decoder结构,因为需要有Cross-Attention的部分对标签特征和文本特征进行交互
- 用于预测类别的标签指针(Label Pointer),这个部分比较简单,用一个平均或者最大池化将高维向量转为低维向量即可
Label Embedding
给定一个标签集Y\mathcal{Y}Y,我们首先将标签y∈Yy\in \mathcal{Y}y∈Y映射为一个或多个连续的向量。当然,除了标签外,我们还需要将任务相关的信息映射为向量,例如情感分析任务,我们会在最前面添加一个
SA
标志这其实有点像mBART,在做机器翻译的时候将该语言对应的标志(例如ZH、JP、EN等)添加到句子前面
因此,初始的标签特征为
其中,eTe_TeT表示任务相关的embedding,ece^{c}ec表示第ccc个类别的embedding,NNN和DDD分别表示样本数量以及标签的表征的维度。实际上每个标签都可以用多个向量来表示,作者也做了一个对比实验,研究每个标签用多个向量来表示会对结果产生什么影响有很多方法将标签yyy映射为一个向量,例如从Vocabulary、均匀分布、token embedding中采样等
Self-Attention and Cross-Attention
我们首先使用self-attenion加强不同标签间的信息交互
其中,Q∈RN×Dk,K∈RM×Dk,V∈RM×Dv\mathbf{Q}\in \mathbb{R}^{N\times D_k}, \mathbf{K}\in \mathbb{R}^{M\times D_k}, \mathbf{V}\in \mathbb{R}^{M\times D_v}Q∈RN×Dk,K∈RM×Dk,V∈RM×Dv,如果在self-attention中,N=MN=MN=M;如果在cross-attention中,NNN代表输入句子的长度,MMM代表标签输入的长度在cross-attention中
其中,X\mathbf{X}X是输入句子通过PTMs后的高维向量Label Pointer
所有计算完成之后,我们会得到输出向量
其中,hT\mathbf{h}_ThT是任务相关的描述特征,hc\mathbf{h}_chc是类别为ccc的标签特征。Triplet Loss的定义如下:
其中,c⋆c^{\star}c⋆代表正确标签对应的索引Model Analysis
假设我们有一个LLL层的预训练模型,它的复杂度为O(LM2)\mathcal{O}(LM^2)O(LM2),其中MMM是输入句子长度;一个有着长度为PPP的连续型Prompt,它的复杂度为O(L(M+P)2)\mathcal{O}(L(M+P)^2)O(L(M+P)2);对于Y\mathcal{Y}Y-tuning来说,self-attention与cross-attention的复杂度分别为O(N2)\mathcal{O}(N^2)O(N2)以及O(MN)\mathcal{O}(MN)O(MN),其中NNN为标签集的大小。因为在Y\mathcal{Y}Y-tuning中我们是固定预训练模型参数不训练的,因此预训练模型的部分不会占用计算资源(尤其是反向传播过程)
Result
从实验结果上来看,效果算是「很有竞争力」,我们当然不能拿它与传统的FineTune相比,毕竟可训练的参数少了那么多,训练所需的算力也不是一个数量级的
个人总结
本文提出的Y\mathcal{Y}Y-Tuning思路非常有意思,传统思路是对输入句子进行学习,使其输出向量靠近标签的分布;而这篇文章正好相反,对标签进行学习。让我有些意外的点是,损失函数并不是传统的CrossEntropyLoss,因为在我看来就直接将输出向量转换维度之后与真实标签进行对比就好了。但是论文使用的损失函数是Triplet Loss,不知道为什么作者为什么要这样做
-
作为Mathor大佬后援会小粉丝一枚,为了方便大家学习和回看,特整理了近期Mathor发布的帖子,可以戳以下链接直达哈~
热门文章
1、未闻Prompt名【2021总结】
2、CAN: 借助数据分布提升分类性能【EMNLP 2021】
3、Child Tuning: 反向传播版的Dropout【EMNLP 2021】最新文章
— LLD: 内部数据指导的标签去噪方法【ACL 2022】
— Flooding-X: 超参数无关的 Flooding 方法【ICML 2020】
— 跨语言对比学习【EMNLP 2021】
— 基于去噪Transformer的无监督句子编码【EMNLP 2021】
— 训练一个专门捣乱的模型【EMNLP 2021】
— 长尾分布的多标签文本分类平衡方法【EMNLP 2021】
— 基于梯度的NLP对抗攻击方法【EMNLP 2021】
— Virtual Data Augmentation: 虚拟数据扩增技术【EMNLP 2021】
— 简单到令人沮丧的替代MLM的预训练任务?【EMNLP 2021】