Hongyu Zhao, University of Chicago, EMNLP2022, Cited:3, Code:None, Paper
Adapter-tuning是一种范式,通过添加和调整少量新参数,将预训练语言模型转移到下游任务。先前提出的Adapter架构都是前馈神经网络。在本文中,我们研究了使用微小注意力——即具有极小每头维度的注意力作为适配器的效果。我们的微小注意力Adapter学会直接修改每个位置的隐藏状态,其条件是所有其他位置的隐藏状态,这是先前提出的Adapter所未考虑的。此外,我们将其多个注意力头视为专家的混合,并提议在部署期间平均它们的权重,从而进一步减少推断计算成本。在GLUE基准测试中,我们的微小注意力适配器优于其他参数高效的迁移学习方法,以及完全微调,同时仅更新0.05%的参数。在FewGLUE基准测试中,其性能与GPT-3和PET相当
将大型预训练语言模型(PLM)转移是自然语言处理(NLP)中执行下游任务的实际范例。一种常见方法是Adapter调整,这意味着将Adapter(即带有少量参数的神经网络)插入到每个预训练层中,仅更新Adapter参数。Adapter调整具有参数高效性,并且由于保持了PLM的冻结状态,享有较低的计算成本。但是它表现不如全面微调,后者会更新PLM的所有参数。
在本文提出了一种新的Adapter架构,它在性能上优于全面微调,同时使用的参数甚至比先前提出的Adapter以及其他参数高效的迁移学习方法还要少,如图1。我们的适配器是一个多头注意力模块,每个头的维度非常小,因此我们称之为微小注意力。这种架构设计受以下直觉的启发:
因此,我们建议使用注意结构,允许每个token的嵌入修改通过直接查看所有token的嵌入来捕捉更多的上下文信息。每个注意力头的维度不需要很大。在自然语言处理任务中,上下文信息通常比模型大小更重要:例如,在语言建模中,一个具有更大上下文窗口的较小模型通常优于一个具有较小上下文窗口的较大模型。此外,我们将微小注意力Adapter的多个注意力头视为专家的混合,然后建议在推断过程中对它们的权重进行平均。这一技术进一步降低了推断成本。
图2a说明了语言模型如何执行下游任务。该语言模型有 L L L层。给定一个输入序列 x = x 0 x 1 . . . x T x = x_0x_1 ... x_T x=x0x1...xT,其中 x 0 x_0 x0是特殊的分类(CLS)标记,每个层 l l l是上一层 l − 1 l - 1 l−1给出的嵌入,并产生层的嵌入 h 0 ( l ) h 1 ( l ) . . . h T ( l ) h_0^{(l)}h_1^{(l)}...h_T^{(l)} h0(l)h1(l)...hT(l)。然后,一个特定于任务的解码器读取CLS标记的顶层嵌入 h 0 ( L ) h_0^{(L)} h0(L)并预测具体任务对应的输出序列 y ^ \hat y y^。
迁移语言模型涉及更新其可训练参数,以最小化任务特定的损失 ( y ^ , y ) (\hat y,y) (y^,y),其中 y y y是给定 x x x的基本真实标签。对于适配器调整,可训练参数仅包括任务特定解码器和适配器的参数。图2b显示了一个带有我们的微小注意力适配器的语言模型层,该适配器位于其注意力模块和前馈网络之间:在训练过程中,仅更新解码器和适配器参数(蓝色),而预训练参数(绿色)都保持冻结状态。
Tiny-Attention Adapter: 我们的Adapter具有一种注意力结构:如图2b所示,在每个位置 t t t,它不仅从当前位置(由蓝色箭头表示的信息流)接收中间嵌入 z t ( l ) z_t^{(l)} zt(l),还从所有其他位置(由红色箭头表示的信息流)接收中间嵌入。对于每个标记 t t t,它产生一个任务特定的修正 z ~ t ( l ) \tilde z_t^{(l)} z~t(l)。然后,修改后的嵌入 z t ( l ) + z ~ t ( l ) z_t^{(l)}+\tilde z_t^{(l)} zt(l)+z~t(l)被输入到层的前馈网络中,以产生 h t ( l ) h_t^{(l)} ht(l)。如图2c所示,我们微小注意力适配器的内部结构类似于普通的多头注意力机制。假设它有M个注意力头。每个注意力头m产生一个头特定的注意力向量 z ~ t ( l , m ) \tilde z_t^{(l,m)} z~t(l,m),最终的注意力向量 z ~ t ( l ) \tilde z_t^{(l)} z~t(l)通过将所有 z ~ t ( l , m ) \tilde z_t^{(l,m)} z~t(l,m)的连接进行投影来获得:
z ~ t ( l ) = O ( l ) [ z ~ t ( l , 1 ) ; . . . ; z ~ t ( l , M ) ] z ~ t ( l , m ) = A t t n t ( m ) ( z 0 ( l ) , z 1 ( l ) , . . . . , z T ( l ) ) \tilde z_t^{(l)} = O^{(l)}[\tilde z_t^{(l,1)};...;\tilde z_t^{(l,M)}] \\ \tilde z_t^{(l,m)} = Attn_{t}^{(m)}(z_0^{(l)},z_1^{(l)},....,z_T^{(l)}) z~t(l)=O(l)[z~t(l,1);...;z~t(l,M)]z~t(l,m)=Attnt(m)(z0(l),z1(l),....,zT(l))
A t t n t ( m ) Attn_{t}^{(m)} Attnt(m)的数学解释: 将上式打开得到
A t t n t ( m ) ( z 0 ( l ) , z 1 ( l ) , . . . . , z T ( l ) ) = ∑ s = 0 T e x p ( q t ( l , m ) T k s ( l , m ) D ) v s ( l , m ) ∑ s = 0 T e x p ( q t ( l , m ) T k s ( l , m ) D ) Attn_{t}^{(m)}(z_0^{(l)},z_1^{(l)},....,z_T^{(l)}) = \frac{\sum^T_{s=0}exp\left(\frac{q_t^{(l,m)T} k_s^{(l,m)}}{\sqrt D} \right) v_s^{(l,m)}}{\sum^T_{s=0}exp\left(\frac{q_t^{(l,m)T} k_s^{(l,m)}}{\sqrt D} \right)} Attnt(m)(z0(l),z1(l),....,zT(l))=∑s=0Texp(Dqt(l,m)Tks(l,m))∑s=0Texp(Dqt(l,m)Tks(l,m))vs(l,m)
其中:
q t ( l , m ) = W Q ( l , m ) z t ( l ) k s ( l , m ) = W K ( l , m ) z s ( l ) v s ( l , m ) = W V ( l , m ) z s ( l ) q_t^{(l,m)} = W_Q^{(l,m)} z_t^{(l)} \\ k_s^{(l,m)} = W_K^{(l,m)} z_s^{(l)} \\ v_s^{(l,m)} = W_V^{(l,m)} z_s^{(l)} \\ qt(l,m)=WQ(l,m)zt(l)ks(l,m)=WK(l,m)zs(l)vs(l,m)=WV(l,m)zs(l)
为什么选择注意力作为适配器? 注意力允许针对每个标记 t t t的任务特定修正 z ~ t ( l ) \tilde z_t^{(l)} z~t(l)以在 t = 0 , 1 , . . . , T t = 0, 1, . . . , T t=0,1,...,T的全文本环境中汇总有用的信息。这类似于预训练语言模型中的注意力模块如何学习构建上下文表示,从而帮助在预训练期间优化语言建模目标。因此,当预训练的注意力模块被冻结时,采用新的可训练注意力模块以获得所需行为似乎是自然而然的。我们的微小注意力(tiny-attention)与普通注意力之间的关键区别在于,我们的每个头的维度很小:即 z ~ t ( l , m ) ∈ R D \tilde z_t^{(l,m)} ∈ R^D z~t(l,m)∈RD,而D非常小。在我们的实验中,我们将D设置为1。
我们微小注意力中的多个注意力头可以被视为专家混合,其中每个头都是一个专家,专门用于捕获特定类型的上下文信息(例如,句法、语义)。方程(1a)中的输出投影学习将专家产生的信息 z ~ t ( l , m ) \tilde z_t^{(l,m)} z~t(l,m)进行聚合。重新排列该方程得到:
z ~ t ( l ) = ∑ m = 1 M O ( l , m ) z ~ t ( l , m ) \tilde z_t^{(l)} = \sum_{m=1}^M O^{(l,m)}\tilde z_t^{(l,m)} z~t(l)=m=1∑MO(l,m)z~t(l,m)
这激发了我们提出了一个参数平均的技巧,能够进一步减少我们方法的存储和计算成本。具体来说,在训练之后,我们将输出投影矩阵 O ( l , m ) O^{(l,m)} O(l,m)以及 A t t n ( m ) Attn^{(m)} Attn(m)内的注意力参数在注意力头之间进行平均。然后,我们只存储平均参数。在推断过程中,我们只使用一个单独的注意力头,其中已经加载了存储的参数。这样,尽管我们可能训练了M > 1个注意力头,但我们的存储和推断成本将与仅训练一个单独的头时一样低,如下表示:
O ˉ ( l ) = 1 M ∑ m = 1 M O ( l , m ) z t ( l ) = M O ˉ ( l ) z ~ t ( l , m ) \bar O^{(l)} = \frac{1}{M}\sum_{m=1}^M O^{(l,m)}\\ z_t^{(l)} = M \bar O^{(l)}\tilde z_t^{(l,m)} Oˉ(l)=M1m=1∑MO(l,m)zt(l)=MOˉ(l)z~t(l,m)