一文彻底搞懂Fine-tuning - 预训练和微调(Pre-training vs Fine-tuning)

最近这一两周看到不少互联网公司都已经开始秋招提前批了。不同以往的是,当前职场环境已不再是那个双向奔赴时代了。求职者在变多,HC 在变少,岗位要求还更高了。

最近,我们又陆续整理了很多大厂的面试题,帮助一些球友解惑答疑,分享技术面试中的那些弯弯绕绕。

《AIGC 面试宝典》圈粉无数!
《大模型面试宝典》(2024版) 发布!

喜欢本文记得收藏、关注、点赞。更多实战和面试交流,欢迎交流


Pre-training vs Fine-tuning

预训练(Pre-training)是预先在大量数据上训练模型以学习通用特征,而微调(Fine-tuning)是在特定任务的小数据集上微调预训练模型以优化性能。

图片

Pre-training vs Fine-tuning

一、预训练(Pre-training)

为什么需要预训练?预训练是为了让模型在见到特定任务数据之前,先通过学习大量通用数据来捕获广泛有用的特征,从而提升模型在目标任务上的表现和泛化能力。

图片

Pre-training

预训练技术通过从大规模未标记数据中学习通用特征和先验知识,减少对标记数据的依赖,加速并优化在有限数据集上的模型训练。

图片

  1. 数据稀缺性:在现实世界的应用中,收集并标注大量数据往往是一项既耗时又昂贵的任务。特别是在某些专业领域,如医学图像识别或特定领域的文本分类,标记数据的获取更是困难重重。预训练技术使得模型能够从未标记的大规模数据中学习通用特征,从而减少对标记数据的依赖。这使得在有限的数据集上也能训练出性能良好的模型。

  2. 先验知识问题:在深度学习中,模型通常从随机初始化的参数开始学习。然而,对于许多任务来说,具备一些基本的先验知识或常识会更有帮助。预训练模型通过在大规模数据集上进行训练,已经学习到了许多有用的先验知识,如语言的语法规则、视觉的底层特征等。这些先验知识为模型在新任务上的学习提供了有力的支撑。

图片

预训练的技术原理是什么?预训练利用大量无标签或弱标签的数据,通过某种算法模型进行训练,得到一个初步具备通用知识或能力的模型。

图片

预训练是语言模型学习的初始阶段。在预训练期间,模型会接触大量未标记的文本数据,例如书籍、文章和网站。目标是捕获文本语料库中存在的底层模式、结构和语义知识。

  1. 无监督学习:预训练通常是一个无监督学习过程,模型在没有明确指导或标签的情况下从未标记的文本数据中学习。

  2. 屏蔽语言建模:模型经过训练可以预测句子中缺失或屏蔽的单词、学习上下文关系并捕获语言模式。

  3. Transformer 架构:预训练通常采用基于 Transformer 的架构,该架构擅长捕获远程依赖关系和上下文信息。

图片

二、微调(Fine-tuning)

为什么需要微调?尽管预训练模型已经在大规模数据集上学到了丰富的通用特征和先验知识,但这些特征和知识可能并不完全适用于特定的目标任务。微调通过在新任务的少量标注数据上进一步训练预训练模型,使模型能够学习到与目标任务相关的特定特征和规律,从而更好地适应新任务。
图片

模型微调可以更好地利用预训练模型的知识,加速和优化新任务的训练过程,同时减少对新数据的需求和降低训练成本。

  • 减少对新数据的需求:从头开始训练一个大型神经网络通常需要大量的数据和计算资源,而在实际应用中,我们可能只有有限的数据集。通过微调预训练模型,我们可以利用预训练模型已经学到的知识,减少对新数据的需求,从而在小数据集上获得更好的性能。

  • 降低训练成本:由于我们只需要调整预训练模型的部分参数,而不是从头开始训练整个模型,因此可以大大减少训练时间和所需的计算资源。这使得微调成为一种高效且经济的解决方案,尤其适用于资源有限的环境。

图片

微调的技术原理是什么?在预训练模型的基础上,针对特定任务或数据领域,通过在新任务的小规模标注数据集上进一步训练和调整模型的部分或全部参数,使模型能够更好地适应新任务,提高在新任务上的性能。
图片

微调如何分类?微调分为在新任务数据集上全面或基于人类反馈的监督训练(SFT与RLHF),以及调整模型全部或部分参数以高效适应新任务(Full Fine-tuning与PEFT)。

1. 在新任务的小规模标注数据集上进一步训练

这种方式通常使用预训练模型作为基础,并在新任务的小规模标注数据集上进行进一步的训练。这种训练过程可以根据具体的训练方法和目标细分为不同的策略,如监督微调(Supervised Fine-tuning, SFT)和基于人类反馈的强化学习微调(Reinforcement Learning with Human Feedback, RLHF)。

图片

  1. 监督微调(SFT)
  • 定义:在新任务的小规模标注数据集上,使用有监督学习的方法对预训练模型进行微调,以使其适应新任务。

  • 步骤:加载预训练模型 → 准备新任务的数据集 → 调整模型输出层 → 在新任务数据集上训练模型。

  • 应用:适用于那些有明确标注数据集的任务,如文本分类、命名实体识别等。

  1. 基于人类反馈的强化学习微调(RLHF)
  • 定义:在SFT的基础上,通过强化学习和人类反馈来进一步微调模型,使其输出更加符合人类的偏好或期望。
  • 步骤:首先进行SFT → 收集人类反馈数据 → 训练奖励模型 → 使用奖励模型指导强化学习过程来微调模型。
  • 应用:适用于那些需要高度人类判断或创造力的任务,如对话生成、文本摘要等。

图片

2. 调整模型的部分或全部参数

这种方式更加关注于模型参数层面的调整,根据是否调整全部参数,可以细分为全面微调(Full Fine-tuning)和部分/参数高效微调(Parameter-Efficient Fine-tuning, PEFT)。

图片

Full Fine-tuning or PEFT

  1. 全面微调(Full Fine-tuning)
  • 定义:在新任务上调整模型的全部参数,以使其完全适应新任务。

  • 步骤:加载预训练模型 → 在新任务数据集上训练模型,调整所有参数。

  • 应用:当新任务与预训练任务差异较大,或者想要充分利用新任务数据集时,可以选择全面微调。

  1. 部分/参数高效微调(PEFT)
  • 定义:仅调整模型的部分参数,如添加一些可训练的适配器(adapters)、前缀(prefixes)或微调少量的参数,以保持模型大部分参数不变的同时,实现对新任务的适应。

  • 步骤:加载预训练模型 → 在模型中添加可训练的组件或选择部分参数 → 在新任务数据集上训练这些组件或参数。

  • 应用:当计算资源有限,或者想要快速适应新任务而不影响模型在其他任务上的性能时,PEFT是一个很好的选择。

图片

BERT(Bidirectional Encoder Representations from Transformers)是一种预训练语言模型,可以用于各种自然语言处理任务的微调。下面是BERT预训练微调的简要介绍: BERT预训练: BERT的预训练是指在大规模文本上训练出一个通用的语言模型,然后将这个模型微调到各种具体的NLP任务上。预训练BERT包含两个阶段:Masked Language Model(MLM)和Next Sentence Prediction(NSP)。在MLM阶段,部分输入单词被随机替换成[Mask]标记,模型需要预测这些[Mask]标记对应的原始单词;在NSP阶段,模型需要判断两个句子是否是连续的。BERT的预训练代码可以使用谷歌官方实现的TensorFlow版本或者Hugging Face开发的PyTorch版本。 BERT微调: BERT微调是指在任务特定的数据集上微调预训练好的BERT模型微调步骤包括数据处理、模型配置、模型微调模型评估。在数据处理阶段,需要将任务特定数据集转换成适合BERT输入的格式;在模型配置阶段,需要根据任务需求选择合适的模型结构、超参数和优化器;在模型微调阶段,需要用微调数据集对模型进行训练;在模型评估阶段,需要使用测试集对微调后的模型进行评估。BERT微调代码可以使用各种框架实现,如PyTorch、TensorFlow等。 如果您想学习更多关于BERT预训练微调的内容,我建议您查看谷歌官方论文和Hugging Face官方文档。此外,您也可以在GitHub上找到各种不同的BERT实现和教程。如果您需要具体的代码示例,可以告诉我您所使用的框架和任务类型,我可以为您提供相关参考。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值