别说什么“没数据就去标注啊,没钱标注就别做大模型啊”这种风凉话,有些人数据不足也能做大模型,是因为有野心,就能想出来稀缺数据场景下的大模型解决方案,或者整理出本文将要介绍的 “Practical Guide to Fine-tuning with Limited Data” 这样的综述。

而有些人,像我,是因为老板想做大模型。

但是训练数据显然是不够的,我们行业主要是因为标注专业性太强,原始数据也本来就少,巧妇难为无米之炊,变不出很多的数据来。但是大模型是一定要做的,每个大点的公司都有老板想要一个大模型,君要臣做大模型,臣不得不做大模型。

所以我就去读了这篇文章,主要就是解决微调大模型时训练数据不足问题。

论文标题:
A Practical Guide to Fine-tuning with Limited Data
论文链接:
https://arxiv.org/pdf/2411.09539

作者来自德国和英国,作者全是典型德裔,一作和二作是慕尼黑工业大学医学人工智能方向的,所以可能他们做这篇工作本来是关注小语种 + 医学 +AI 方向的解决思路。

我不是做医学的,不过我们行业的专业性也很强,所以完全可供参考。

除了专业性导致训练数据匮乏之外,小语种也可能导致数据匮乏。我目前倒是不需要解决语言方面的问题,只管中文就行,但是以后万一我们的大模型需要对接小语种客户怎么办呢?所以对于小语种方面我也可以关注关注。

现在大模型应用的范式一般是“预训练-微调-推理(提示学习)”,大模型在海量数据上进行预训练学习到通用知识,通过微调、few-shot 学习等方式将大模型的能力迁移到特定任务领域,这就是迁移学习

预训练阶段需要海量数据,微调阶段一般也需要足量的数据,否则可能会出现过拟合、泛化能力差和性能不佳等问题。

本文按照预训练、微调、few-shot 学习三个阶段,总结的全部方法如图所示:

以下我会对文中提及的方法做简单介绍,感兴趣的读者可以去详细阅读论文,或者评论私聊与我讨论。

预训练阶段

包括最初的预训练和继续预训练阶段,主要是拿来看的,毕竟这种方案适合有条件的大户人家,从预训练开始做大模型那种。也可以拿来作为选大模型基底的标准,就是说如果没做这些事的大模型就不行,不用选了……

这块方法主要缺点就是计算量大,毕竟要把方法融进复杂的预训练之中:

  1. Cross-lingual alignment(跨语言对齐):用多语种数据集进行预训练,不需要平行语料。高资源语言能够帮助低资源语言提升表现效果。

  2. Domain adaptation(领域适应):将特定领域的语料加入预训练阶段,将通用模型调整到特定领域。可以通过多种方式实现,包括使用术语表、引入对抗性域判别器(adversarial domain discriminator)以及结合少量有标签数据进行持续预训练等。

微调阶段

  1. Parameter-efficient fine-tuning(PEFT,参数高效训练):在微调时仅更新部分参数(部分微调),而不是更新所有参数(全量微调)。

    在数据稀缺时,少更新参数能减少灾难性遗忘的风险,而且这种方案也比全量微调更节省计算资源。包括三种方式:

  2. Masking-based methods(基于掩码的方法):仅更新神经网络的部分层

  3. Adapters(适配器):在 Transformer 里插一层小前馈神经网络(adapter),然后仅更新这个小网络

  4. Prefix-tuning(前缀微调):在输入前面加一串可训练的向量作为 soft token,然后仅更新这个“前缀”

  5. Reparametrization methods(重参数化):如 Lora 和 KronA 方法等,将大规模的网络权重投影到低维流形上来减少需要训练的参数量

  6. Hybrid methods(混合方法):结合了多种方法的优点

  7. Embedding learning(嵌入学习):包括确定分词的粒度(词、subword、字符、字节级别),固定词表,还有一些固定模型参数、仅训练词嵌入的方法。

针对所有自学遇到困难的同学们,我帮大家系统梳理大模型学习脉络,将这份 LLM大模型资料 分享出来:包括LLM大模型书籍、640套大模型行业报告、LLM大模型学习视频、LLM大模型学习路线、开源大模型学习教程等, 😝有需要的小伙伴,可以 扫描下方二维码领取🆓↓↓↓

👉[CSDN大礼包🎁:全网最全《LLM大模型入门+进阶学习资源包》免费分享(安全链接,放心点击)]()👈

对比学习与对抗学习

对比学习和对抗学习就是不需要手工标注很复杂的标签,但是需要设计好适当且合理的学习目标。感觉还是要看具体的数据情况,要讲个有道理的故事。

  1. Contrastive learning(CL,对比学习):需要平行数据,通过提高相似文本的表征向量相似性、减少不同文本的表征向量相似性来训练模型。

  2. Adversarial learning(对抗学习):训练两个目标相矛盾的模型,互相促进模型效果。可以与 PEFT 方法结合使用。

受限的有监督学习

  1. Semi-supervised learning(SSL,半监督学习): 同时利用有标签和无标签的数据。常见的方法包括自训练(self-training)和协同训练(co-training)。自训练就是在有标签数据上训练模型,然后将置信度高的无标签数据预测结果作为伪标签用于进一步的训练。协同训练是将数据特征拆成两个视角,分别训练模型,用置信度高的无标签数据预测结果加进另一个模型的训练集来重新训练。

  2. Unsupervised methods(无监督学习): 用无标签数据进行训练,比如大模型预训练学习目标就是自监督(self-supervised)的,语料没有标注标签,计算目标函数使用的标签是语料中本来就有的文本信息。

  3. Active learning(AL,主动学习): 是一个迭代过程,每次采样最重要的训练数据进行标注。这个“最重要”一般是指模型预测不确定性最高的样本。

Few-shot 阶段

Few-shot 学习就是仅给出特定领域的少量样本,就让模型学到该领域的知识,做出正确的回答。

  1. In-context learning(ICL,上下文学习): 在推理时,先给大模型几个例子,然后再让大模型针对问题参考例子做出回答。

  2. Pattern-exploiting training(PET,模式利用训练), 或 prompt-based fine-tuning(基于提示的微调):将分类任务格式化为填空格式,使模型能够使用 MLM 目标进行预测。其实我的理解就是做了个更精细、与预训练目标函数更相似的提示模版。

  3. Multi-task learning(多任务学习):在多种任务上进行指令微调。我感觉这个对数据集的要求也高,如果做特定领域模型的话,可能就适合那种有不同任务问答对数据的场景,但是我们公司目前只希望大模型能解决特别具体的任务……就是那种专业小模型效果可能比通大模型还好的场景。但是大模型本来的优势就很大一部分在于其通用、泛化能力。那怎么办呢?算了这事以后再说。

  4. Meta-learning(元学习):学习新任务和原样本在隐空间中的相似性,借以更新模型参数,更好地适应少量新样本代表的新领域。

面对不同的任务和不同的数据量,我们该怎么选

这块是总结了各种论文的解决方案,以供参考。不过感觉这块其实是纯纯经验之谈,还是得具体问题具体分析:

图中的缩写是:

  • ER (Experience Replay):将智能体与环境交互过程中获得的经验(即状态、动作、奖励和下一个状态的四元组)缓存,然后从中随机抽取样本用于训练。

  • LLRD (Layer-wise Learning Rate Decay):学习率逐层衰减策略

  • LR (Learning Rate):学习率

  • NLI (Natural Language Inference):自然语言推理,就是给出“前提”问模型“假设”成不成立

  • RAG (Retrieval-Augmented Generation):检索增强

最重要的似乎还是选择合适的预训练模型,对于低资源语言或专业领域建议使用较大规模、预训练策略丰富(使用了 cross-lingual alignment 和 domain adaptation)的模型

(感觉这属于正确的废话,大家都知道大模型只要够好,什么提示模版都不用硬上,只要随便问问,大模型自己就能输出很不错的回答。)

在极低资源场景下,建议先考虑上下文学习,又快又不用训练,表现也可以。如果需要微调,优先考虑 PEFT 方法中的 adapter 和 prefix-tuning 方法。

其他方法也可以用于增强模型表现能力。

结论

如果能弄到更多数据就去弄,能从根本上解决数据不足的问题。

实在是没数据,首先找最厉害的模型基底,先用提示学习(包括 ICL 和 PET)的方式测试模型效果,然后尝试部分微调(如 adapter 和 prefix-tuning),其它方法也可以增强模型效果。具体的方法可以在本文中找参考文献。

以后可能会分享一下我在数据永远不够条件下做大模型的实践思路和工作成效,以本文作为初步调研结果。
读者福利:如果大家对大模型感兴趣,这套大模型学习资料一定对你有用

对于0基础小白入门:

如果你是零基础小白,想快速入门大模型是可以考虑的。

一方面是学习时间相对较短,学习内容更全面更集中。
二方面是可以根据这些资料规划好学习计划和方向。

包括:大模型学习线路汇总、学习阶段,大模型实战案例,大模型学习视频,人工智能、机器学习、大模型书籍PDF。带你从零基础系统性的学好大模型!

😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费】🆓
在这里插入图片描述

👉AI大模型学习路线汇总👈

大模型学习路线图,整体分为7个大的阶段:(全套教程文末领取哈)

第一阶段: 从大模型系统设计入手,讲解大模型的主要方法;

第二阶段: 在通过大模型提示词工程从Prompts角度入手更好发挥模型的作用;

第三阶段: 大模型平台应用开发借助阿里云PAI平台构建电商领域虚拟试衣系统;

第四阶段: 大模型知识库应用开发以LangChain框架为例,构建物流行业咨询智能问答系统;

第五阶段: 大模型微调开发借助以大健康、新零售、新媒体领域构建适合当前领域大模型;

第六阶段: 以SD多模态大模型为主,搭建了文生图小程序案例;

第七阶段: 以大模型平台应用与开发为主,通过星火大模型,文心大模型等成熟大模型构建大模型行业应用。

👉大模型实战案例👈

光学理论是没用的,要学会跟着一起做,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

在这里插入图片描述

👉大模型视频和PDF合集👈

观看零基础学习书籍和视频,看书籍和视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
在这里插入图片描述
在这里插入图片描述

👉学会后的收获:👈

• 基于大模型全栈工程实现(前端、后端、产品经理、设计、数据分析等),通过这门课可获得不同能力;

• 能够利用大模型解决相关实际项目需求: 大数据时代,越来越多的企业和机构需要处理海量数据,利用大模型技术可以更好地处理这些数据,提高数据分析和决策的准确性。因此,掌握大模型应用开发技能,可以让程序员更好地应对实际项目需求;

• 基于大模型和企业数据AI应用开发,实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能, 学会Fine-tuning垂直训练大模型(数据准备、数据蒸馏、大模型部署)一站式掌握;

• 能够完成时下热门大模型垂直领域模型训练能力,提高程序员的编码能力: 大模型应用开发需要掌握机器学习算法、深度学习框架等技术,这些技术的掌握可以提高程序员的编码能力和分析能力,让程序员更加熟练地编写高质量的代码。

👉获取方式:

😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费】🆓
在这里插入图片描述

Logo

更多推荐