Redian新闻
>
大模型微调样本构造的trick

大模型微调样本构造的trick

公众号新闻
来自:包包算法笔记

进NLP群—>加入NLP交流群

开局一道面试题。



面试官:大模型微调如何组织训练样本?

你:大模型训练一问一答,一指令一输出,问题和指令可以作为prompt输入,答案作为输出,计算loss的部分要屏蔽掉pad token。

面试官:多轮对话如何组织训练样本呢?

你:假设多轮为Q1A1/Q2A2/Q3A3,那么可以转化成 Q1—>A1, Q1A1Q2->A2, Q1A1Q2A2Q3->A3三条训练样本。

面试官:这样的话一个session变成了三条数据,并且上文有依次重复的情况,这样会不会有啥问题?

你:数据中大部分都是pad token,训练数据利用效率低下。另外会有数据重复膨胀的问题,训练数据重复膨胀为 session数量*平均轮次数,且上文有重复部分,训练效率也会低下。

面试官:你也意识到了,有什么改进的方法吗?

你:有没有办法能一次性构造一个session作为训练样本呢?(思索)

面试官:提示你下,限制在decoder-only系列的模型上,利用模型特性,改进样本组织形式。

对于这个问题,我们思考下decoder-only模型有啥特点,第一点很关键的是其attention形式是casual的,casual简单理解就是三角阵,单个token只能看到其上文的信息。

如图所示:

其二是postion_id是只有token次序含义而无需特定指代信息,(区别于GLM模型需要postion_id来标识生成span的位置等特殊的要求)。

有了这两点我们就可以设想,如果构造多轮对话样本的input为  Q1 A1 <eos> Q2 A2 <eos> Q3 A3 <eos>,在计算loss的时候,只需要计算 A1 <eos> A2 <eos> 和 A3 <eos>部分,岂不是就可以进行session级别的训练了?

嗯为什么原来的chatglm不能用这种形式呢,虽然prefix attention可以推广为适应多轮训练的prefix attention形式,如图:

但是由于其postition id 无法简单按次序推广,故不能高效训练,这也是chatglm初代的很大的一个问题,导致后续微调的效果都比较一般。


现在chatglm2的代码针对这两个问题已经进行了改善,可以认为他就是典型的decoder-only模型了,具体表现为推断时候attention 是casual attention的形式,position id也退化为token次序增长。

那么好了,万事具备,只欠东风。我们据此实现了chatglm2-6b的代码微调。其核心代码逻辑为处理样本组织的逻辑,其他的就是大模型微调,大同小异了。

conversation = ''input_ids = []labels = []eos_id = tokenizer.eos_token_idturn_idx = 0for sentence in examples[prompt_column][i]:    sentence_from = sentence["from"].lower()    sentence_value = '[Round {}]\n\n问:'.format(turn_idx) + sentence["value"] + '\n\n答:' if sentence_from == 'human' else sentence["value"]+'\n\n'    conversation += sentence_value    sentence_ids = tokenizer.encode(sentence_value, add_special_tokens=False)      label = copy.deepcopy(sentence_ids) if sentence_from != 'human' else [-100] * len(sentence_ids)                   input_ids += sentence_ids     labels += label    if sentence_from != 'human':        input_ids += [eos_id]        labels += [eos_id]        turn_idx += 1input_ids = tokenizer.encode('') + input_ids #add gmask bos labels =  [-100] * 2 + labels# #add paddingpad_len = max_seq_length - len(input_ids)input_ids = input_ids + [eos_id] * pad_len labels = labels + [-100] * pad_len

其中有几个关键的地方,就是在开头要加上 bos和gmask,遵循模型原来的逻辑。问答提示词和轮次prompt,还有两个\n保持和原模型保持一致,最后屏蔽掉pad部分的loss计算。

实测训练效果如下:

同样的数据在chatglm1上 train loss只能降到2.x左右,同时评估测试集结果,在同样的数据上rouge等指标都有不小的提升。

我们再仔细回顾下,对话session级别训练和拆开训练从原理上有啥区别?

1. session级别训练,效果之一为等价batchsize变大(1个batch可以塞下更多样本),且同一通对话产生的样本在一个bs内。

2. session级别的不同轮次产生的梯度是求平均的,拆开轮次构造训练是求和的,这样除了等价于lr会变大,还会影响不同轮次token权重的分配,另外还会影响norm的计算。

我们用一个简化地例子定量分析下,我们假设两条训练样本分为 
1.问:A 答:xx
2.问: A 答:xx 问: B 答:xx  问: C 答:xx
则session级别训练影响梯度为 (Ga+(Ga + Gb + Gc)/3 )/2。对 A,B,C影响的权重分别为,2/3 1/6 1/6。
拆开训练为 (Ga+Ga+ (Ga + Gb)/2 +(Ga + Gb + Gc)/3)/4对 A,B,C影响的权重分别为,17/24 5/24 1/12。
从上面的权重分布来看,session级别靠后的轮次影响权重要比拆开更大。这也是更合理的,因为大部分场景下,开场白都是趋同和重复的。
一点小福利,以上面试题对应的ChatGLM2-6B 微调完整的代码地址为:
https://github.com/SpongebBob/Finetune-ChatGLM2-6B

实现了对于 ChatGLM2-6B 模型的全参数微调,主要改进点在多轮对话的交互组织方面,使用了更高效的session级别高效训练,训练效果相比原版ChatGLM-6B有较大提升。

这可能是目前全网效果最好的ChatGLM2-6B全参数微调代码。



进NLP群—>加入NLP交流群

微信扫码关注该文公众号作者

戳这里提交新闻线索和高质量文章给我们。
相关阅读
650亿参数,8块GPU就能全参数微调!邱锡鹏团队把大模型门槛打下来了!《如意东方》&《西楼别序》传OpenA正测试DALL·E 3模型;华为语音助手支持AI大模型;亚马逊组建AI大模型新团队丨AIGC大事日报第一百二十四章 乡村剧团波士顿大学「鸭嘴兽-70B」登顶Hugging Face大模型排行榜!高效数据集+独特LoRA微调是关键华为将推盘古数字人大模型;搜狗原CMO加盟王小川公司;首个线性注意力Transformer大模型推出丨AIGC大事日报阿里达摩院大模型公开课上新!主讲中文个性化对话大模型ChatPLUG和模块化多模态大模型mPLUG-Owl0代码微调大模型火了,只需5步,成本低至150块中文医学大模型“本草”(原名华驼):医学知识增强在中文大型语言模型指令微调上的初步探索第一百二十三章 老师百度华为阿里等入选大模型“国家队”;盘古大模型3.0发布;阿里云推AI绘画大模型丨AIGC大事日报「知识型图像问答」微调也没用?谷歌发布搜索系统AVIS:少样本超越有监督PALI,准确率提升三倍极少数据就能微调大模型,一文详解LoRA等方法的运作原理中国团队自动驾驶大模型斩获CVPR最佳论文;Stability AI推出新文生图模型;京东大模型即将发布丨AIGC大事日报2023 中国研究型医院学会临床数据与样本资源库专业委员会学术大会暨第五届临床生物样本库创新发展论坛会议通知(第一轮)土共国的骗子们都疯了?抓狂了?谷歌证实大模型能顿悟,特殊方法能让模型快速泛化,或将打破大模型黑箱复旦新作:单机微调650亿参数大模型;蚂蚁、百度参投AI大模型创企;杭州检方对AI换脸案提起公诉丨AIGC大事日报哈啰 Quarkc 正式开源,低成本构建跨技术栈前端组件OpenAI开放大模型微调功能!上传自己数据就可定制GPT-3.5Turbo,开发者狂喜单样本微调给ChatGLM2注入知识~大模型变“小”:黑马天启开创AI模型“重度垂直”新思路,入选北京大模型行业应用典型案例LaVIN-lite:单张消费级显卡微调多模态大模型只给大模型LeetCode编号,也能解题!大模型表现好是源于对训练数据的记忆吗?请不要迷信大模型650亿参数,8块GPU就能全参数微调:邱锡鹏团队把大模型门槛打下来了数学能力超ChatGPT,70B开源大模型火了:用AI微调AI,微软全华班出品调教LLaMA类模型没那么难,LoRA将模型微调缩减到几小时浙江大学发布开源大模型知识编辑工具EasyEdit,效果超越传统微调方法单GPU实现99%ChatGPT性能,「原驼」火了:手机也能微调大模型坚持做行业大模型,竹间智能给大模型造了一座「模型工厂」5069 血壮山河之武汉会战 黄广战役 1大模型RLHF的trick跑分达ChatGPT的99%,人类难以分辨!开源「原驼」爆火,iPhone都能微调大模型了十亿参数,一键瘦身!「模型减重」神器让大模型狂掉3/4 | 最“in”大模型这组数据震惊海外博主,中国打造的成功样本,能否被全球复制?
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。