【学术分享第6期】 如何利用有限资源做大模型

近年来,随着ChatGPT等大型语言模型的火爆,全世界对大模型的关注度不断提升。大型语言模型作为人工智能领域的前沿技术,具有强大的自然语言理解和生成能力,在人机交互、智能客服、对话系统等领域有着广泛的应用前景。谷歌、OpenAI、百度、阿里、知乎、腾讯等公司纷纷推出自己的大模型,这些大模型的出现,进一步推动了其技术的发展和应用,同时也为用户提供了更加智能、高效的人工智能服务。

大模型具有参数量大、数据量大、算力量大等突出特点,因此在训练时需要高昂的硬件成本。既能发挥出大模型当前已经取得的效果,又能更低成本部署模型是一个非常具有研究价值的问题。本文将从Efficient、Plug-and-play、Dataset三方面阐述如何利用有限资源构建大模型。

Efficient

前期,在做模型训练时,通常会加载预训练模型,然后在预训练模型的基础上做Full Fine Tune,Full Fine Tune需要将整个模型的参数在新数据集中做Fine Tune,这种方法对于大模型来说,计算代价太大。

CLIP模型在ZeroShot的情况下取得了很好的效果,因此在基础模型比较强大时,我们是否可以去掉模型Full Fine Tune的步骤,直接应用?PEFT 方法是目前比较火的大模型微调方法,一些论文中采用PEFT方法取得了优于Full Fine Tune的实验结果。PEFT 仅微调少量 (额外)模型参数,同时冻结模型的大部分参数,大大降低了计算和存储成本,同时克服了大模型灾难性遗忘的问题。PEFT中比较普遍的方法:Adapter、LoRA和Prompt Tuning。

Adapter由一个下采样的FC层,一个非线性的激活层,上采样的FC层加上残差连接组成。类似于一个即插即用的模块,如图所示,Adapter可以灵活的插入到Transformer Layer里的任何一个地方。Adapter之所以属于PEFT 方法,因为模型微调过程中原模型参数是锁住的,没有梯度更新,只有新添加的Adapter层在不停地学习。Adapter的参数量是非常之少的,只有几十B或者几百B,相比于几million的原模型参数量可以完全忽略不计。

LoRA通过低秩分解模拟权重更新,以极小的参数量实现大模型的微调。LoRA在RoBERTa、DeBERTa、GPT-2和GPT-3上应用的效果与微调不相上下或更好,但采用LoRA训练的模型参数量远远小于原模型的参数量。

Prompt Tuning在prompt的前面直接追加一定数量的virtual tokens,然后专门对这些新增加的虚拟tokens进行微调。这种方法利用预训练模型和自定义输入之间的信息差异来进行模型微调。采用修改输入样本来调整预训练语言模型的表现形式,以满足特定的需求。

从图中可以看出不同的Prompt对模型性能的影响非常之大,能否得到很好的结果很大程度上取决于有没有选择一个很好的Prompt。人为提供的提示词,不能修改也无法学习,称为hard Prompt。

hard Prompt设置还需要一定的先验知识,但是我们不知道先验知识是否有用。Prompt Tuning采用Soft Prompt方式,将提示词设置为一个可学习的向量。如图所示,将文本端(text encoder)的输入CLASS设置为 learnable context,通过模型不断优化context。这样既可以节省很多计算量 ,也可以避免在下游任务时手动设置提示词。

Visual-Prompt Turning (VPT)将Prompt Tuning应用于机器视觉中。给定一个预训练的Transformer网络,添加一些D维的特征向量,也即prompts,在微调的过程中,Transformer网络参数固定不变,只更新这些prompt的参数值。Visual-Prompt Turning的文章中提出了两种不同的方式,一个是VPT Deep,一个是VPT Shallow。VPT Shallow仅在inputs embedding中插入prompt向量,VPT Deep在inputs embedding和每个Transformer encoder都插入了prompt向量。

Plug-and-play

即插即用技术的核心思想是利用预训练的模型作为基础,通过在其上进行微调或扩展,快速构建适用于特定任务的模型。这种方法的优势在于,预训练模型已经通过大规模数据集进行了训练,具有强大的特征提取能力和泛化能力。因此,利用预训练模型可以显著减少从头开始训练模型所需的数据量和时间。

具体来说,即插即用技术的实施步骤通常包括以下内容:

  • 选择预训练模型:选择适合目标任务的预训练模型作为基础。预训练模型通常在大规模数据集上进行了训练,具备通用的特征提取能力。

  • 微调模型参数:根据具体任务,对预训练模型的参数进行微调。微调通常通过反向传播算法和优化器完成,以最小化特定任务的损失函数。

  • 扩展模型结构:如果预训练模型的结构不完全符合目标任务的需求,可以进行适当的扩展。例如,增加或删除层数、改变网络结构等。

  • 评估和调优:在特定数据集上评估模型的性能,根据评估结果进行必要的模型调优。

  • 这种方法的好处在于,预训练模型已经经过大规模数据的“预热”和优化,可以提供一个相对较好的起点。在此基础上进行微调和扩展,可以更快速地适应特定任务,而且通常需要的额外数据量较少。

综上,即插即用技术能够有效地利用有限资源快速构建适用于特定任务的模型,尤其在数据量有限的情况下具有明显的优势。这种方法在深度学习领域已经得到了广泛应用,如自然语言处理、计算机视觉等领域的许多任务都采用了基于预训练模型的策略。

Dataset

利用有限资源构建大模型时,Dataset的构建是关键的一环。以下是一些方法,可以从不同的角度说明如何通过有效的数据集构建策略来提升模型的性能:

  • 数据清洗和标注:数据清洗:去除或修正错误、不一致或冗余的数据。这可以确保模型训练过程中使用的数据是高质量的,从而提高模型的泛化能力。手动或自动标注:对于监督学习任务,标注的数据是必须的。使用自动标注工具或雇佣少量专家进行标注,然后使用这些标注数据进行模型训练。

  • 数据增强:利用技术如随机裁剪、旋转、平移等手段,对现有数据进行扩充,从而增加模型的泛化能力。

  • 数据集成:如果多个来源的数据源具有互补性,可以考虑将它们整合到一个数据集中。

  • 这不仅可以增加数据量,还可能提供更丰富的特征供模型学习。

  • 增量学习:当有大量数据流时,可以设计模型以逐步适应新数据,而不是重新训练。这需要设计适合增量学习的数据集结构。

  • 数据压缩与共享:压缩数据可以节省存储空间和传输成本。同时,如果一个数据集被多个研究人员或团队共享和重用,可以避免重复工作,提高资源利用率。

  • 利用无监督学习:对于某些任务,无监督学习是一个有效的选择。例如,使用自编码器等技术进行特征提取和降维,可以减少对大规模标注数据的依赖。

  • 虚拟环境与模拟器:在某些情况下,创建虚拟环境或模拟器来生成模拟数据,可以作为真实数据的补充。例如,在自动驾驶或机器人技术中,模拟器是非常有用的工具。

  • 模型评估与验证:始终确保在验证集上评估模型的性能,以防止过拟合。这有助于确保模型对未见过的数据的泛化能力。

  • 持续监控与更新:对于持续更新的数据集,如社交媒体内容或金融市场数据,需要定期重新训练模型以确保其准确性。

  • 开源与共享:通过开源共享数据集和模型,可以吸引更多的研究者和社区参与,促进集体智慧和进步。同时避免重复工作和资源浪费。

总的来说,这三种方法都是在预训练模型的基础上进行微调,可以根据不同的任务需求选择合适的方法。通过在这三个方面的优化,可以在有限资源下高效构建大模型,提高模型性能和适应特定任务的能力。

资源下载: