LLM 大语言模型实战 (五)-Loss 详解及 SFT 训练范式
Loss详解
- 模型在努力降低每个字的loss的过程中:
- 学会了预测下一个字
- 也就是说学会了人类说话的方式
预训练和SFT的区别
预训练
- 学习每一个字的下一个。(整句学习,没有masking)
- 模型从随机权重开始学习。需要灌入海量的文本来让模型学会基础的说话;
- 越大的模型,需要越多的文本(以token数来评估)
- 不同的文本有不同的效应(通常认为教科书是最有效的文本)
- Scaling Law
SFT:(Supervised Fine-Tuning)
- 通常指领域微调,让模型学会特定领域的知识或者回答范式。(预训练的模型通常是通用领域的)
- 绝大多数的应用场景是问答型的,所以把一句话拆成问句(指令)和回答;(预训练模型本身没有问答能力)
- 大多数 NLU 任务可以转换成指令回答格式;
- 通用的指令遵循数据集:ALPACA
二、SFT 训练范式
- 显存需求测试:
- 全量参数参与训练
- 1000个token单样本需要显存:62B
- 部分参数参与训练
- 选取特定的层参与训练,可以做到单卡训练
- Lora:极为节约显存的训练方式:
- 1000个token单样本需要显存:24B
RHLF
RLHF 介绍文档
● https://huggingface.co/docs/trl/index 已经成为Huggingface 全家桶的一个模块
● 开源代码:https://github.com/huggingface/trl/tree/main/trl
● 其它中文文档:海量,比如https://zhuanlan.zhihu.com/p/591474085
● 初衷:
● 为了让模型和人类的一些价值观对齐。
● 回答要有帮助
● 回答要无害
● 回答要真实
● 简单得让模型学习人类的语料并不能完全做到这一点
● 上面这几方面都会出大量的问题
强化
● 概念:
● 对于一个分步骤的任务来说,每个步骤都可以进行评估(奖励/惩罚),根据评估结果进行模型参数的调
节(训练),让模型获得总体的最大奖励。
● 也就是说需要有:
● 1. 某种方式对模型的生成结果进行评估(反馈)
● 2. 该反馈可以是正或者负
● 3. 为了获取整个序列的总体更高奖励,模型需要在每一步追求当前字的最大价值。
● 困难:对于模型来说,生成每个字(token)的时候,并不知道自己生成的整句话获取的反馈(整体奖励,
远期奖励)会有多大。
● 基本概念:
● Policy: 给定序列,每个字(token)的下一个token的概率,即所说条件概率(和前面所说的概率是一回事)
● 终极目标是优化模型预判的每个位置上的Policy,已让总体收益最大化。
● Value:给定序列,每个token的下一个位置所有token所代表的预期收益(在每个位置选择value最大的token即可达
到总体最优)
RL - Transformer Reinforcement Learning
TRL is a full stack library where we provide a set of tools to train transformer language models with Reinforcement Learning, from the Supervised Fine-tuning step (SFT), Reward Modeling step (RM) to the Proximal Policy Optimization (PPO) step. The library is integrated with 🤗 transformers.
TRL 是一个全栈库,我们提供了一组工具来通过强化学习训练 Transformer 语言模型,从监督微调步骤 (SFT)、奖励建模步骤 (RM) 到近端策略优化 (PPO) 步骤。该库与变压器集成。
为者常成,行者常至
自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)