NLP大模型技术详解
更细节的NLP大模型训练经验。
解码器解码策略
解码器基于概率似然函数,T时刻的word概率是由0-T时刻下word生成后的条件概率决定的。
实际使用中,解码器基于贪婪搜索(greed)进行了变体,以生成更丰富的回答。
num_beams - 束搜索
在第一次贪婪搜索时多束进行,提高搜索域
no_repeat_ngram_size - 重复抑制
不允许前后word重复出现次数过多
do_sample - 随机采样
随机生成文本,增大搜索域,通过额外三个参数来限制
- temperature 0-1 控制随机程度
- top-k 取前k个概率最高的词
- top-p 取概率满足p的词
训练策略
一些社区的训练策略:
短文本token合并,通过attention mask实现,避免padding浪费
多轮对话,通过
round
等关键词拼接实现lora/ptuningv2 会不可避免的带来知识遗忘,需要全量finetune才能取得好的效果 (RLHF中有pretrain loss保证知识不被遗忘)
ChatGLM6B
推理流程
- prompts分词,转换为input_ids ( 添加特殊teken)
- 得到token的position mask(RoPE旋转编码 通过绝对位置学习相对位置关系)和attention mask
- 经过GLMBlock(SelfAttention)得到hidden states
Finetune
- lora finetune,由于chatglm6b不支持load_in_int8,4*A100可以batch=1(无deepspeed情况下),训练速度尚可,加载lora后测试效果不明显,一个trick的点是对chatglm6b做instruction finetune是否还需要加入instruction prompt,测试了加与不加效果也不明显,可能和数据量与训练次数有关;
- ptuningv2,官方repo,整体的可训练参数与lora一致,都是模型的0.1%,与lora一样会出现灾难性遗忘,特别的,ptuning由于训练一个连续的prompt prefix,在加载prefix后对于其他任务无法理解是正常的;
- 使用 chatglm-6b-slim ,裁剪了前2w个预留图片的token,可以节约显存;
ongoing
- 全量finetune,(deepspeed zero3 分割Optimizer States、Gradients与Parameters)
- lora merge实验,最近有个库在做llama7b的lora merge到chatglm6b模型上的工作(地址)
模型评价
eval最好分为内推和外推两个数据集。比如原来数据集中有三原色是什么指令,你可以设计一个问题,黑色是不是三原色这个问题。外推是SFT中根本没见过的问题,让它来推理。类似这种数据各准备50条。就可以初步评估了。
机器人相关大模型进展
PaLM-E 来自google,未开源,多模态模型,涉及机器人领域。22B视觉模型+540B语言模型,通过对视觉和语言的多模态融合,可以对机器人运动路径进行规划。
RT-1 基于transformer结构,对语言和图片进行token解码,并输出机器人运动姿态,包括xyz roll pitch yaw等等
Gato 来自deepmind,同样是多模态任务转化为token输入transformer模型,未开源。
NLP大模型技术详解
http://example.com/posts/2259/