LLM 预训练|SFT监督微调|推理

LLM 预训练|SFT监督微调|推理

交叉熵损失

熵(Entropy)是信息论中的一个核心概念,它量化了一个随机变量的不确定性或信息内容。交叉熵(Cross Entropy)进一步发展了这个概念,用于衡量两个概率分布之间的差异。
L = − 1 N ∑ i = 1 N y i , c log ⁡ P ( y ^ i , c ) L = -\frac{1}{N} \sum_{i=1}^{N} y_{i,c} \log P(\hat{y}_{i,c}) L=N1i=1Nyi,clogP(y^i,c)
在LLM中交叉熵损失实际上也是衡量两个概率分布的之间的差异:

  • X:预测的下一个token在词表中的概率分布
  • Y:真实的下一个token的One-Hot编码

预训练阶段

img

现在的大模型在进行预训练时大部分都采用了GPT的预训练任务,即 Next token prediction。预训练的目的是:在训练过程中,模型通过大量的文本数据来学习文本之间的模式和结构。

LLM所学习的数据只有输入给模型的文本,根据这个文本构建模型预训练的输入和目标:

  1. 首先token化,将文本序列转换成离散的token
  2. 根据当前token和前文的token,一起预测下一个token
  3. 将预测得到token与目标token做交叉熵损失

这里通过一个完整的例子来介绍一下这个过程,假设现在有一个用来预训练的数据集

你知道什么是预训练吗?

假设经过分词后

你: 9
知道: 3
什么: 6
是: 4
预训练: 2
吗: 1
?: 5

原来的数据变为如下序列,后面补了三个0(假设我们希望最大序列长度是10)

9 3 6 4 2 1 5 0 0 0

预测下一个token就类似于9预测3,9+3预测6,9+3+6预测4,以此类推,因此损失函数计算的次数大概就是:batch_size x sequnce_len
但是如果这样拆成很多个数据段其实比较低效,因此就可以考虑移位来构造数据,即

  • 模型输入X为 9 3 6 4 2 1 5 0 0 0
  • 模型目标Y为 3 6 4 2 1 5 0 0 0 0

每条预训练样本只完整前向计算1次,为了保证看不到后面的token,需要在网络结果中采用masked self-attention

SFT微调阶段

其实本质上和预训练阶段一样,对模型的输出和targets做交叉熵损失,不同点在于:

预训练阶段是直接丢给模型一堆文字,通过token化+shift操作就能构建出输入和targets,即对全文做交叉熵损失,学习并记忆文本中的内容和结构;

SFT微调阶段,输入给模型的是<Prompts>+<Response>

我们只需要输入Prompts得到模型的预测结果与Response做交叉熵损失。

在具体实现部分,会使用mask将Prompts部分掩盖,从而只对Response做Cross Entropy。

推理阶段

以自回归的方式进行预测

  • 每次预测下一个token
  • 将预测的token拼接到当前已经生成的句子上
  • 再基于拼接后的句子进行预测下一个token
  • 不断重复直到结束

其中,在预测下一个token时,每次我们都有一个概率分布用于采样,根据不同场景选择采样策略会略有不同,不然有贪婪策略、核采样、Top-k采样等,另外经常会看到Temperature这个概念,它是用来控制生成的随机性的,温度系数越小越稳定。

参考文献:

LLM 大模型基础|预训练|有监督微调SFT | 推理-CSDN博客

LLM中损失函数解析_llm损失函数-CSDN博客

大模型基础|预训练|有监督微调SFT - 知乎 (zhihu.com)

从原理到代码理解语言模型训练和推理 - 知乎 (zhihu.com)

  • 12
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
LLM(Language Learning Model)是一个基于预训练模型的自然语言处理框架,可以用于各种NLP任务,如文本分类、命名实体识别、情感分析等。下面是LLM模型的本地部署及微调流程: 1. 下载预训练模型 LLM模型基于预训练模型,可以通过Hugging Face官网下载预训练模型。选择相应的模型并下载到本地。 2. 安装LLM 可以使用pip命令安装LLM,命令如下: ``` pip install llm ``` 3. 加载预训练模型 使用LLM的load方法加载预训练模型,代码示例如下: ```python from llm.modeling import LLMForSequenceClassification model = LLMForSequenceClassification.from_pretrained('path/to/pretrained_model') ``` 4. 微调模型 使用LLM的train方法微调模型,代码示例如下: ```python import torch from llm.data import TextDataset, TextDataLoader from llm.training import LLMTrainer train_dataset = TextDataset('path/to/train_data', model.tokenizer) train_loader = TextDataLoader(train_dataset, batch_size=32, shuffle=True) optimizer = torch.optim.Adam(model.parameters(), lr=5e-5) trainer = LLMTrainer(model, optimizer) trainer.train(train_loader, epochs=3) ``` 5. 保存微调后的模型 使用LLM的save_pretrained方法保存微调后的模型,代码示例如下: ```python model.save_pretrained('path/to/fine_tuned_model') ``` 以上就是LLM模型的本地部署及微调流程。需要注意的是,在微调模型时,需要准备好训练数据,并且调整好超参数,以达到最佳的微调效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值