如何确定哪些层应添加适配器(Adapter)?(58)
“它如何确定哪些层应添加适配器(Adapter)?是否只有量化层符合条件?我能否也将适配器添加到常规(非量化)线性层上?”
这个问题提得很好,我会逐一为你解答。首先,先给出简洁结论:
• 主流模型架构会预配置目标层列表,适配器将应用于这些列表中的层。
• 无论目标层是否经过量化,都会添加适配器;不过量化层是天然的适配对象,因为它们本身无法直接更新。
• 可以的,任何线性层(甚至一维卷积层/Conv1D层)都可以为其添加专属适配器。
“你有一个适配器,你有一个适配器,每一层都有一个适配器!”
——奥普拉(注:此处引用奥普拉经典句式,用于形象说明“适配范围广”的特点)
“一维卷积层(Conv1D)?为什么能支持?”
其实,线性层与一维卷积层在功能上是等效的(此处不展开证明过程)。事实上,部分语言模型(如GPT-2)正是采用一维卷积层实现的,这是实际案例!
如果你选择的模型使用了一维卷积层,且希望为其添加适配器,需额外添加一项配置:fan_in_fan_out: True
。
“讲解结束了吗?”
还没有!
目标模块(target_modules)
由于每周都有新的模型及架构发布,你当前安装的PEFT(Parameter-Efficient Fine-Tuning,参数高效微调)库版本中,很可能没有针对该新模型的预配置目标层列表。这种情况下,你会遇到如下错误:
ValueError