AI 文摘

浅谈训练LLM的一些小技巧





作者: AINLP 来源: AINLP

作者 | uuuuu

https://zhuanlan.zhihu.com/p/655006628

最近国产大模型一群神仙打架,各个榜刷的分越来越高了,聊一下基于1.3b的模型的一些实验结论,抛个砖希望对开源社区有帮助

一、LLama

llama训练了1T的token(更大的尺寸模型训练了1.4T),除此之外还需要模型结构和超参数配合才能继续训练这么长时间。

模型结构

llama的self-attention和mlp中没有bias,这可能能让weight decay效果更好。自定义了反向传播函数,不使用pytorch的autograd,主要针对激活函数的输出进行缓存,减少了反向传播里面的一些计算。llama还使用 rmsnorm而不是layernorm,少计算了均值,能省一些时间可能起到的作用不大。

超参数

最有意思的是他的batch size是4M tokens。在一开始训练的时候,大部分的token对模型来说都是未知的,所以参数能快速的更新,但是训练的时间越久,每个batch都需要包含对模型来说陌生的多样化数据,所以batch size很大。

二、AliBi position encoding

最早的Transformer使用绝对位置编码,这意味着2048个位置都有自己的可训练向量。从直接来看,这样可能很奇怪,因为相同的token往左边或者往右边挪动一下都会得到不同的结果。但是还是有一些模型在用它,例如starcoder。

对于这个位置编码,常见的有3种方式

  1. Relative Attention , 最早的时候在Transformer XL的工作中有介绍

  2. Rotary Embeddings,苏神的博客提出来的,llama用的这个方式

  3. ALiBi,bloom用的这个

相对注意力有一个很大的缺点:它增加了可训练的参数。这意味着初始化必须正确,梯度必须正确。之前尝试过使用别的方式代替可训练参数,效果也很好,说明这里可能确实不需要可训练参数。

Rotary Embedding和ALiBi 都很好,但是ALiBi可能有个额外的优势 — 不需要外推就可以扩展上下文大小,

但与预训练中使用的内容相比,ALiBi 还有一个额外的优势 — 可扩展的上下文大小。RoTary Embedding现在也有很多可以外推的方式。但是用少数据微调对比,发现ALiBi似乎优势更明显一些。

用了15e9的token微调一个小模型损失下降曲线见下图

三、Early Dropout

Meta的一个工作(Dropout Reduces Underfitting)建议在一开始训练中使用dropout来改善欠拟合(不是过拟合)。

它的工作原理是这样的:在transformers的许多地方加dropout层,在训练步数前20%里面逐渐将dropout率从 10..15% 降低到零。

根据该论文,它可以在测试集上获得更好的效果。那同样实际测测看

红色是加了Early Dropout,可以看到随着训练,优势越来越明显

四、Multi-Query Attention

在Palm模型中,使用multi-query attention在使用更大的长度的时候能获得一个比较小的内存消耗。

一个简单的解释是:在multi-head attention中,attention层需要给每个头生成 K、V 和 Q。但在multi-query attention,K、V仅生成一次(不是针对每个头),只有每个注意力头的Q不同。详细解释参见。

五、LiON

LiON也是最近提出的一个优化,它是一个优化器,声称是可以替代adam。adam从2014年提出出来,已经统治了深度学习快10年了。。

开源代码现成的,可以参考 https://github.com/lucidrains/lion-pytorch

对于一个新的优化器,那问题又是超参数,对于Adam而言,超参数基本很固定了,但是LiON还需要测试,一个有3个,beta、权重衰减、学习率。随便试试β1=0.95,β2=0.98,测试LR和WD:

LR:灰色是 lr=20e-5 的 Adam,其他是从 2e-5 到 5e-5(效果最好)的 LiON。

WD: 一个高的weight decay(绿色wd=0.8)在中间截断效果稍差(可能是在合理的bias里面),但是相比于wd=0.6和wd=0.4在最后的效果差不多

最后取lr=5e-5(比Adam学习率低四倍)和wd=0.8(比Adam高八倍)。

顺便说一句,wd对最终结果的低影响与 LiON 论文一致:他们将 WD 从 0.5 更改为 2.0,对最终效果影响很小,尤其是在学习率较高的情况下。

最后汇总一下我们训练使用的超参数:

OptimizerLiON β1=0.95, β2=0.98Batch size2M tokens

LR 5e-5 Context size 4096

LR schedule linear to zero with warmup Dropout p=0.1

Weight Decay 0.8 Dropout schedule to zero at 20% of training

进技术交流群请添加AINLP小助手微信(id: ainlp2)

请备注具体方向+所用到的相关技术点

![](https://api.allorigins.win/raw?url=https://mmbiz.qpic.cn/mmbiz_jpg/nW2ZPfuYqSJADkmZ2IX6Z23znAibuEevotDMq9iaMxiapK7jfMibiauGFkycicAJEs6x5U9SGyDJZ0S1tRed9TPNUUDQ/640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1&wx_co=1)

关于AINLP

AINLP 是一个有趣有AI的自然语言处理社区,专注于 AI、NLP、机器学习、深度学习、推荐算法等相关技术的分享,主题包括LLM、预训练模型、自动生成、文本摘要、智能问答、聊天机器人、机器翻译、知识图谱、推荐系统、计算广告、招聘信息、求职经验分享等,欢迎关注!加技术交流群请添加AINLP小助手微信(id:ainlp2),备注工作/研究方向+加群目的。

  


![](https://api.allorigins.win/raw?url=https://mmbiz.qpic.cn/mmbiz_jpg/nW2ZPfuYqSKABHCqVVQkVYPrM4XY1vsd0iaeuXzyJnoFc8cibd5mYb4wdA3WMQtiaPVmr0XLZHMuVibqWncibpnTSnQ/640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1&wx_co=1)

阅读至此了,分享、点赞、在看三选一吧🙏

更多AI工具,参考Github-AiBard123国内AiBard123

可关注我们的公众号:每天AI新工具