Lion,Evo L ved Sign Momentum ,Google Brain 发现的新优化器,据称比 Pytorch 中的 Adam(w) 更好。这几乎是这里的直接副本,只做了一些小的修改。
它是如此简单,如果它真的有效的话,我们不妨尽快让每个人都可以使用它来训练一些伟大的模型?
学习率和权重衰减:作者在第 5 节中写道 - Based on our experience, a suitable learning rate for Lion is typically 3-10x smaller than that for AdamW. Since the effective weight decay is lr * λ, the value of decoupled weight decay λ used for Lion is 3-10x larger than that for AdamW in order to maintain a similar strength.
研究人员证明,与 AdamW 相比,学习率表中的初始值、峰值和最终值应以相同的比率同时变化。
学习率计划:作者在论文中对 Lion 使用了与 AdamW 相同的学习率计划。尽管如此,与倒数平方根方案相比,他们在使用余弦衰减方案训练 ViT 时观察到了更大的增益。
β1 和 β2:作者在第 5 节中写道 - The default values for β1 and β2 in AdamW are set as 0.9 and 0.999, respectively, with an ε of 1e−8, while in Lion, the default values for β1 and β2 are discovered through the program search process and set as 0.9 and 0.99, respectively.
作者建议,与人们在 AdamW 中将 β2 减小到 0.99 或更小并将 ε 增加到 1e-6 以提高稳定性类似,在 Lion 中使用β1=0.95, β2=0.98
也有助于减轻训练期间的不稳定。这一点得到了一位研究人员的证实。
更新:似乎适用于我本地的 enwik8 自回归语言模型。
更新 2:实验,如果学习率保持不变,似乎比 Adam 更糟糕。
更新 3:将学习率除以 3,看到比 Adam 更好的早期结果。近十年后,也许亚当已经被废黜了。
更新 4:使用论文中 10 倍较小的学习率经验法则会导致最差的运行。所以我想它仍然需要一些调整。
之前更新的总结:如实验所示,Lion以小3倍的学习率击败了Adam。它仍然需要一些调整,因为 10 倍小的学习率会导致更糟糕的结果。
更新 5:到目前为止,如果做得正确的话,我们听到了语言建模的所有积极结果。还听到了重要的文本到图像训练的积极结果,尽管需要一些调整。负面结果似乎与论文中评估的问题和架构无关——RL、前馈网络、带有 LSTM + 卷积的奇怪混合架构等。负面的 anecdata 也证实了该技术对批量大小、数据量/增强很敏感。待定最佳学习率计划是什么,以及冷却时间是否会影响结果。有趣的是,在开放剪辑中也有一个积极的结果,随着模型尺寸的扩大,结果变成了消极的(但可能是可解析的)。
更新6:作者通过设置更高的初始温度解决了开夹问题。
更新 7:仅在高批量大小(64 或以上)设置中推荐此优化器
$ pip 安装 lion-pytorch
或者,使用 conda:
$ conda 安装 lion-pytorch
# 玩具模型导入 torchfrom torch import nnmodel = nn.Linear(10, 1)# 导入 Lion 并使用参数实例化 from lion_pytorch import Lionopt = Lion(model.parameters(), lr=1e-4, Weight_decay=1e-2)# 向前和backsloss = model(torch.randn(10))loss.backward()# 优化器 stepopt.step()opt.zero_grad()
要使用融合内核来更新参数,首先pip install triton -U --pre
,然后
opt = Lion(model.parameters(),lr=1e-4,weight_decay=1e-2,use_triton=True # 将其设置为 True 以使用带有 Triton lang 的 cuda 内核 (Tillet 等人))
Stability.ai 对工作和开源尖端人工智能研究的慷慨赞助
@misc{https://doi.org/10.48550/arxiv.2302.06675,url = {https://arxiv.org/abs/2302.06675},author = {陈,向宁和梁,陈和黄,达和Real, Esteban 和 Wang、Kaiyuan 和 Liu、Yao 和 Pham、Hieu 和 Dong、Xuanyi 和 Luong、Thang 和 Hsieh, Cho-Jui 和 Lu, Yifeng 和 Le, Quoc V.},title = {优化算法的符号发现},publisher = {arXiv},year = {2023}}
@article{Tillet2019TritonAI,title = {Triton: 用于平铺神经网络计算的中间语言和编译器},author = {Philippe Tillet and H. Kung and D. Cox},journal = {第三届 ACM SIGPLAN 国际机器研讨会论文集学习和编程语言},年份 = {2019}}
@misc{Schaipp2024,作者 = {Fabian Schaipp},url = {https://fabian-sp.github.io/posts/2024/02/decoupling/}}
@inproceedings{Liang2024CautiousOI,title = {谨慎的优化器:一行代码改进训练},author = {Kaizhao Liang 和 Lizhang Chen 和 Bo Liu 和 Qiang Liu},year = {2024},url = {https://api .semanticscholar.org/CorpusID:274234738}}