大模型中常见的微调方法有哪些?
我整理了1000道算法面试题:
获取
这里说的微调主要是指参数微调,参数微调的方法主要有以下几种:
- Adapter
在预训练模型每一层(或某些层)中添加Adapter模块(如上图左侧结构所示),微调时冻结预训练模型主体,由Adapter模块学习特定下游任务的知识。每个Adapter模块由两个前馈子层组成。具体使用了Adapter的模型结构如下所示:
<img src="https://pic2.zhimg.com/v2-653ed26ec39836bfaaae12ea00c619ed_1440w.jpg" align="center" width="60%"/>
给每个任务定义了自己的Prompt,拼接到输入数据一起作为输入,同时freeze预训练模型进行训练
- Prefix-tunning
前缀微调将一个连续的特定于任务的向量序列添加到输入,称之为前缀,如下图中的红色块所示。与提示(prompt)不同的是,前缀完全由自由参数组成,与真正的token不对应。相比于传统的微调,前缀微调只优化了前缀。因此,我们只需要存储一个大型Transformer和已知任务特定前缀的副本,对每个额外任务产生非常小的开销。
<img src="https://pic2.zhimg.com/v2-b59ea75db687e0cb63c8d8c4aab2889d_1440w.jpg" align="center" width="60%"/>
- P-tuning/P-tuning V2
P-tuning V1直接对embedding层进行优化存在两个挑战:embedding层已经经过预训练,如果直接对输入的prompt embedding进行随机初始化训练,容易陷入局部最优;没法捕捉到prompt embedding之间的相关性。
P-Tuning V2是升级版本,主要解决P-Tuning V1在小参数量模型上表现差的问题。V2在每一层上都加了一个残差连接,每一层都加上prompts,使特征更充分。
P-tuning模型加入embedding位置不固定,可以加在整个输入的前面或者后面,用法比较灵活,且其通过MLP+LSTM的方式对加入的embedding进行了学习,以提高收敛性。整体框架如下图所示:
![image](https://picx.zhimg.com/v2-186237ec6160a0e6502db788018ff03b_1440w.jpg)
- LORA
采用低秩矩阵近似的思想,冻结一个预训练模型的矩阵参数,并选择用A和B矩阵来替代,在下游任务时只更新A和B。流程如下:
<img src="https://pica.zhimg.com/v2-27acf53fcfe3c3c594a4e5cbf4f8959c_1440w.jpg" align="center" width="40%"/>
参考:
[1] https://zhuanlan.zhihu.com/p/636481171
[2] https://zhuanlan.zhihu.com/p/709376189
原文地址:https://blog.csdn.net/hguo11/article/details/144070850
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!