该方法的核心其实就是在适当的位置插入两个 Adapter 模块,这个模块的结构如下:
flowchart TB
in["x₁, x₂, ..., xₙ"]
FDProj["FeedForward down-project"]
Mid["u₁, u₂, ..., uₖ (k << n)"]
FUProj["FeedForward up-project"]
Add(("\+"))
Out["z₁, z₂, ..., zₙ"]
in --> FDProj
FDProj --> Mid
Mid --> FUProj
in -.-> Add
FUProj --> Add
Add --> Out
可以将该模块插入注意力模块和归一化模块中间,也可以插入其后的 MLP 后。
- 关于训练:
前向传播照常进行,反向传播计算所有路径的梯度,但优化器只更新 Adapter 的参数。
需要注意的是,LayerNorm 的层缩放和平移参数也应该视为可训练(需要适应新的分布)