如何训练大模型

在这里插入图片描述

目标:梳理完整的LLM训练流程

关键术语:预训练、微调、SFT(supervised fine-tuning)、

1 模型预训练(Pretrain)

大部分工作可以选择在一个较强的基座模型进行微调,例如alpacavicuna

为什么需要预训练?

开源backbone+微调的前提:预训练模型和下游任务差距不大,预训练模型已包含微调任务重所需要的知识。

实际情况:通常会遇到一些问题,无法直接使用开源模型。 1 语言不匹配:大多数优秀开源基座对中文支持不友好。例如 [Llama]、[mpt]、[falcon]等 2 专业知识不足:预训练模型大都在通用预料训练学习,缺乏特殊领域数据(对特定领域概念、名词理解能力)

如何做预训练任务?

1.1 Tokenizer Training

预训练之前,选择一个预训练模型基座。

普遍问题:大部分优秀语言模型没有进行充分的中文预训练。因此许多工作尝试在英文上表现优秀的模型,使用中文预料二次预训练,期望能把英文上优秀能力迁移到中文任务。例如:Chinese-LLaMA-Alpaca

正式训练之前,需要做:词表扩充

tokenizer的功能:对一句话切词,并把切好词的列表喂给模型训练。

输入>>> 你好世界 切词>>> [‘你’, ‘好’, ‘世’, ‘界’]

Tokenizer有2种常用形式:WordPiece和BBPE。

WordPiece是将所有[常用字]和[常用词]存在词表,需要的时候从词表查找。例如Bert使用这种切词。 BBPE 不是按照中文字词为最小单位,而是按照[unicode 编码]最小粒度。 当字词数目过于庞大时,WordPiece方式不适用。 LLaMa的Tokenizer对中文encode(BBPE方式) 输入>>> 待编码 encode>>> [‘’, ‘_’, ‘<0xE5>’, ‘<0xBE>’, ‘<0x85>’,‘编’, ‘码’]

什么是词表扩充? 为了降低模型的训练难度,会把一些常见的汉字token手动添加到tokenizer,即词表扩充。

1.2 Language Model PreTraining

输入一堆文本,模型做 Next Token Prediction任务。

理解几种预训练过程中用到的方法:数据源采样、数据预处理、模型结构

数据源采样:通过[数据源采样],缓解模型在训练时受到[数据集规模大小]的影响(避免模型偏向于规模较大的数据集,失去对规模小但作用大的数据集上的学习信息)。

数据预处理:如何将[文档]向量化 在Finetune任务,会直接截断超过阈值(2048)的文本,但在预训练任务,这种方式非常浪费,一本书内容远远超过2048个token,一般会按照seq_length(2048)作分割,分割后的向量喂给模型训练。

模型结构:为了加快模型训练速度,通常会在decoder模型中加入加速tricks。 Attention计算:MQA 和 Flash Attention [falcon],参考Muti Query Attention 和 Attention with Linear Bias 不同长度样本具备较好推理:Position Embedding选用ALiBi或 RoPE

Warmup & Learning Ratio设置 1 训练资源充足时,尽可能选择较大学习率 2 资源不足是,选择更小的学习率和更长的预热步数

1.3 数据集清理

开源数据集可以用于实验,如果想突破性能,则需要我们自己进行数据集构建。
仅使用「清洗后的互联网数据」就能够让模型比在「精心构建的数据集」上有更好的效果。

1.4 模型效果评测

模型精度量化指标,较为普遍的有 PPLBPC 简单理解为在生成结果和目标文本之间的 Cross Entropy Loss 上做一些处理。评估模型对[语言模板]的拟合程度。即给定一段话,预测后面可能出现哪些合法、通顺的字词。

但仅仅[生成通顺句子]还不够,大部分LLM已具备这个能力,怎么比较呢? 应该是评估[知识蕴含能力]–C-Eval

2 指令微调(Instruction Tuning)

为什么需要指令微调? 由于预训练任务的本质是[续写],大部分情况[续写]方式不能很好回答问题。例如

用户问题:《无间道》的主演有哪些? 期望回答:刘德华、梁朝伟 模型续写结果:《无间道》的主演有哪些?不少观众期待看到阵容公告xxx

采用一些技巧引导答案:

用户问题:《无间道》的主演有 期望回答:刘德华、梁朝伟 模型续写结果:《无间道》的主演有刘德华、梁朝伟,xxx

模型知道这些知识,需要用户精心设计去[套答案]方式不友好。指令微调(Instruction Tuning)就是教模型[如何对话]。

2.1 Self Instruction

思路:通过 ChatGPT 的输入输出来蒸馏自己的模型。从ChatGPT[套]数据:[输入](问题)和[输出](答案) 参考:让ChatGPT生成训练ChatGPT的训练数据

开源Instruction Tuning数据集
  • Alpaca
  • BELLE
  • 22
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值