使用LLM的问题
当前大模型的低成本实现方案:
语言模型 + 指令微调数据 + 微调加速
llama + alpaca_data(Fine-tuning) + lora
语言模型:
...
指令微调数据:
在一组通过指示描述的数据集上对语言模型微调,大大提高了在未见过任务上的 Zero-Shot 能力。
通过对多种任务的糅合学习 Zero-Shot 能力。
当前开源大模型的Fine-tuning(Instruction Tuning,prompt Tuning)都是针对此处进行训练。
微调加速:
解决低资源下的训练问题
在完整微调过程中,模型使用预训练好的权重来初始化模型,然后通过最大化条件语言模型来更新参数。缺点是:对于每个下游任务都需要学习不同的参数更新,如果预训练模型很大,则参数更新的成本很高。
lora:
对于预训练权重矩阵:
\(W_{0}\)∈\(R^{d × k}\),
低秩分解为:
\(W_{0}+\Delta W=W_{0}+BA ,B∈R^{d×r},A∈R^{r×k}\),并且秩\(r\ll min(d,k)\)
在训练过程中,\(W_{0}\)被冻结不接受梯度更新,A和B是可训练的参数。当需要转换至另一个下游任务时,可以通过减去BA来恢复\(W_{0}\),然后添加不同的\(B^{'}A^{'}\)
问题
当前开源大模型的Fine-tuning都是针对指令微调数据进行训练,训练成本(使用lora技术能在单卡训练,7B的模型3090需要10小时左右)。
此训练只是把含有{instruction,input,output}的数据丢入训练,没有模型或技术上改变。
大模型没有之前(pre-train + fine-tuning)中fine-tuning的说法,所以如果需要技术上的改变,则需要修改语言模型,但这样需要的显存是不可计量的