浅谈

  • 电脑网络维修
  • 2024-11-14

当天给大家带来知乎朋友@ybq一篇对于如何启动畛域模型训练的文章,关键内容是对 post-pretrain 阶段启动剖析,后续的 Alignment 阶段就先不提了,留意好老生常谈的“数据品质”和“数据多样性”即可。

原文::::

便捷来说,畛域模型 / 专家模型 就是在某一个专业畛域性能特意好的模型,或许包含法律、医学、教育、role-play 等等。普通来说,畛域模型比拟关键的环节是 RAG,我们须要有一个特意高精的检索库,来辅佐模型做一些专业的回答。这也就是说,做好sft和 ppo 仿佛就可以了?

其实,这么想也基本正确,由于大局部畛域模型所解决的义务场景,80% 都是模型的通用才干能 cover 的。以法律大模型为例,“判别能否是法律疑问、总结律师发言重点、提取法官裁决结果等等?” 相似的疑问基本任何一个开源模型 + 几百条 sft 语料都能做的不错。

但是,畛域模型的要求的准确率是远远大于 80% 的,而剩下的那 20% case 恰好又是 sft 无论如何也做不好的。

“张三犯抢劫罪,张三买了苹果,张三杀了团体,张三睡觉,张三挪用公款,……,张三寻衅滋事李四。” 请概括张三冒犯的法条?

以下面这个 case 为例,我们的通用模型大略率是会把“寻衅滋事”当做一个举措来看待,而不会把它视为一个违法行为,进而造成概括失误。可假设连这种便捷 case 都调用 RAG 的话,那么显然本钱高的有些过火了,何况这种状况还很难检索准确。

因此,post-pretrain 的目的便是让模型尽或许的去意识这个畛域的专有名词,知道某些词汇就是这个畛域的专有名词,进而让 attention 给到这些 token 一些更大的权重。法律模型须要见过一切的法律法规、医学模型须要见过一切的症状和药品名词,以此类推。

但是,少量的 paper 曾经证实:续训模型的环节,大略率是“学了新的,忘了旧的”的环节。这也就是说,你提高模型在畛域常识上的认知才干的同时,往往它也在失落通用才干。前面也说了,我们有 80% 的场景时须要通用才干来笼罩的。因此,我们愈加靠谱的指标是:在 post-train 阶段学习畛域常识的同时,尽最大或许去防止模型的通用才干损失。(贪不了一点,大模型有太多的上班须要 trade-off)

Post-Train

假设你的 base_model 是自己训的,那前面不用看了。经常使用退火前的 checkpoint,沿用 pretrain 阶段的训练数据,经常使用相似于“91开”的数据配比去混合畛域数据续训,训完再退火,而后这个上班就成功了!

pretrain 常识回忆

emm,还往下读,应该都是没有自己 model 的同窗了,我们继续讨论!

pretrain 最关键的几个物品:数据,学习率,优化器!

目前,大家基本都自动经常使用如下三个步骤启动 pretrain:

(Llama3.1和面壁的MiniCPM都明白提出了退火阶段带来的才干优化)

Llama3.1退火论断

MiniCPM退火论断

post-pretrain 数据储藏

基础常识我们回忆完了,如今开局预备数据。说句丑话,假设你没有畛域模型的高精数据,也没计划去爬数据和洗数据,那神仙难救,团体倡导换个方向去钻研 。

好,我们曾经有了畛域高精数据。那 common 数据和数据配比怎样搞呢?

先说数据品质,post-pretrain 不用那么精细,我们的指标是通用才干不降低,而不是通用才干大幅度优化。Qwen2 的技术报告明白指出,训了 12T 数据的模型与训了 7T 数据的模型,基本没有优化。也就说,额外的 5T 数据仅仅是由于品质稍有降低(论文里说卡的阈值更小),就没有带来任何收益。

我们大略率拿不到比 Qwen2、Llama3 的 pretrain 阶段品质更好的数据,因此我团体觉着不要太执着于做一份特意洁净的 pretrain 数据了,你怎样洗数据都很难带来清楚收益。

再说数据配比,Llama3 和面壁自动明白给出了他们的数据配比,基本就是一个论断:代码很关键,英文很关键(即使是中文模型也应该保障英文语料的比例,有些 paper 以为模型的 general knowledge 基原本自于英文语料,中文更多的是对齐作用)。

这里给出不威望的团体倡导:中英五五开,代码不能少,畛域占比看算力。(依据团体需求和团体喜好,可以提高英文比例,假设有品质较好的 math 数据或逻辑数据,也减少一些)

面壁自动数据配比

Llama3数据配比

试验细节

Channel loss

就一句话:做 domain post-pretrain 不看 channel loss,你不如别开 tensorboard。

你就算随机拉一个数据集上来训,大略率也是 loss 缓慢降低的现象,你能失掉啥消息呢?你难道要等训了一周,才去做试验验证数据配比和学习率性能吗?

channel loss:不同数据 channel 各自的 loss。也就是说假定 1 个 batch 有 100 条数据:40条 en,30 条 cn, 20条 code, 10 条 domain,那么就绘制四条不同 channel 的 loss 曲线和一条总的 total loss 曲线。

(题外话,我原本以为 channel_loss 须要在>

channel_loss = {}for step, batch in enumerate(train_dataloader):batch = to_device(batch, device)channel = batch['channel'][0]del batch['channel']outputs = model(**batch)loss = outputs.loss# Update channel lossif channel in channel_loss:channel_loss[channel][0] += loss.item()channel_loss[channel][1] += 1else:channel_loss[channel] = [loss.item(), 1]all_channel_loss = [None for _ in range(world_size)]torch.distributed.all_gather_object(all_channel_loss, channel_loss)merged_channel_loss = {}for lst in all_channel_loss:for k, v in lst.items():if k in merged_channel_loss:merged_channel_loss[k][0] += v[0]merged_channel_loss[k][1] += v[1]else:merged_channel_loss[k] = [v[0], v[1]]for k,v in merged_channel_loss.items():avg_loss = v[0] / v[1] if v[1] != 0 else 0.0print_rank_0("The Channel {} loss is {}".format(k, avg_loss), args.global_rank)# Log channel loss to TensorBoardif dist.get_rank() == 0:writer.add_scalar(f'Loss/channel_{k}', avg_loss, epoch * num_batches + step)channel_loss = {}

Loss 剖析

前面提到过,pretrain 阶段有 warmup,那么 post-pretrain 当然也要有了,要素也很便捷啊。我们用的开源模型并没有提供应我们 checkpoint 对应的“优化器参数”,我们无法取得以前积聚的动量啊。

continue pretrain:

这篇论文讨论了“post-pretrain 模型时,warmup 应该经常使用的数据比例”。同时它也指出,warmup 在训练充沛的时刻是不太关键的。但由于我们无法判别模型是不是训练充沛了,所以还是老诚恳实的做个 warmup 吧。

warmup 比例

敲定 warmup 的数据比例后,选择一个悦目的学习率和数据配比,就去开局训练和观察 channel loss 吧,在最现实状况下,我们等候失掉一个这样的曲线:

联合 loss 曲线,我们再回过头来谈谈数据配比:post-pretrain 阶段最好的数据配比,就是沿用 pretrain 阶段的数据配比,很惋惜,我们无法能失掉到 Qwen、Llama 的 pretrain数据。因此,我们也别纠结数据去重了,大略率我们经常使用的 common 数据是人家曾经训过的,我们尽或许去找品质最高的 common 数据喂给模型就可以了。

不过从 channel loss 上,我们大略率能观察和反推一些物品:

综上,经过观察 loss,多做几组试验,基天性试探出哪个数据配比和哪个开源数据最适宜拿来 post-pretrain。

Scaling law

真的壮士,就应该去钻研 sacling law,这也就是除了Llama、Qwen,我还特意推崇“面壁MiniCPM”的要素,它仿佛是国际惟逐一家不执着于size,而是执着于“sacaling law”的公司。

这篇 domain scaling law 的论文化确指出“domain才干“和”general 才干“是相互抵触的,也就回归到了我一开局说的:我们的指标不是提高通用才干,而是去损失尽量少的通用才干。

D-CPT:

这篇论文的论断都是比拟 make sense 的:

文章再多的内容我就不谈了,感兴味的读者自己拜读一下即可,scaling law 的文章都相对艰涩一些,我还没有齐全读懂,不敢班门弄斧。我援用这篇 sacaling law 论文的关键要素是,一是讴歌一下做 scaling law 的大佬们,二是想表白“学习率真的很关键”这一观念,不要由于大家都在强调数据品质的关键性,就疏忽了炼丹的本钱行。

这里援用我的大佬共事跟我说过的一句话:“你把学习率设成 0 ,那是不是模型怎样训成果都不降低。那依据夹逼准绳,你只需找到一个好学习率,你数据再烂也能训出一个通用才干只降低一丢丢的模型。”

退火

退火自身怎样做,我就不多说了,小学习率 + 高精数据。基本每一个开源模型的技术报告,都会具体指出自己的退火数据配比。

我在这里提到退火,是想强调几个观念:

本文转载自​​,作者:

  • 关注微信

本网站的文章部分内容可能来源于网络和网友发布,仅供大家学习与参考,如有侵权,请联系站长进行删除处理,不代表本网站立场,转载联系作者并注明出处:https://duobeib.com/diannaowangluoweixiu/5453.html

猜你喜欢

热门标签

洗手盆如何疏浚梗塞 洗手盆为何梗塞 iPhone提价霸占4G市场等于原价8折 明码箱怎样设置明码锁 苏泊尔电饭锅保修多久 长城画龙G8253YN彩电输入指令画面变暗疑问检修 彩星彩电解除童锁方法大全 三星笔记本培修点上海 液晶显示器花屏培修视频 燃气热水器不热水要素 热水器不上班经常出现3种处置方法 无氟空调跟有氟空调有什么区别 norltz燃气热水器售后电话 大连站和大连北站哪个离周水子机场近 热水器显示屏亮显示温度不加热 铁猫牌保险箱高效开锁技巧 科技助力安保无忧 创维8R80 汽修 a1265和c3182是什么管 为什么电热水器不能即热 标致空调为什么不冷 神舟培修笔记本培修 dell1420内存更新 青岛自来水公司培修热线电话 包头美的洗衣机全国各市售后服务预定热线号码2024年修缮点降级 创维42k08rd更新 空调为什么运转异响 热水器为何会漏水 该如何处置 什么是可以自己处置的 重庆华帝售后电话 波轮洗衣机荡涤价格 鼎新热水器 留意了!不是水平疑问! 马桶产生了这5个现象 方便 极速 邢台空调移机电话上门服务 扬子空调缺点代码e4是什么疑问 宏基4736zG可以装置W11吗 奥克斯空调培修官方 为什么突然空调滴水很多 乐视s40air刷机包 未联络视的提高方向 官网培修 格力空调售后电话 皇明太阳能电话 看尚X55液晶电视进入工厂形式和软件更新方法 燃气热水器缺点代码

热门资讯

关注我们

微信公众号