首页 > 其他分享 >Adam-mini Use Fewer Learning Rates To Gain More

Adam-mini Use Fewer Learning Rates To Gain More

时间:2024-08-28 15:53:03浏览次数:11  
标签:mathbb mini Use cdot Fewer beta Adam block

目录

Zhang Y., Chen C., Li Z., Ding T., Wu C., Ye Y., Luo Z. and Sun R. Adam-mini: Use fewer learning rates to gain more. arXiv preprint, 2024.

作者提出一种简化的 optimizer, 在取得和 Adam 相媲美的性能的同时, 只需要一半的内存开销.

Adam-mini

  • 我们知道, Adam 有两个动量:

    \[m \leftarrow (1 - \beta_1) \cdot g + \beta_1 \cdot m \in \mathbb{R}^d, \\ v \leftarrow (1 - \beta_2) \cdot g^2 + \beta_2 \cdot v \in \mathbb{R}^d. \]

    其中 \(m\) 指定了下降的方向, 而 \(1 / \sqrt{v}\) 则为每个元素的下降制定了特别的学习率.

  • 虽然这么做使得训练更加平稳和快速, 但是为了训练我们需要缓存 2x 模型大小的量, 这个在当下特别是大模型盛行的现在可能不是那么好使的. 因此, 本文希望设计一个更加轻量化的优化器.

  • 和之前的一些策略类似, 本文的出发点是能不能让一些元素共享一个学习率, 而不是单独设置, 假设我们有 block 从 \(b=1, \ldots, B\), 则 Adam-mini 给每个 block 设置

    \[v_b \leftarrow (1 - \beta)_2 \cdot \text{mean}(g_b^2) + \beta_2 \cdot v \in \mathbb{R}. \]

  • 这个思路其实一些之前的方法也尝试过, 但是效果并不好, 会有比较大的性能的损耗. 本文的方案启发自 here, 这里面发现, 像 Transformer 这类模型, 每个 block (Query/Key/Value/Embedding) 的 Hessian 矩阵的谱很不相同, 这意味着, 为如果我们在圈定 block 的时候把这些打包在一起, 就会产生一个较差的结果.

  • 所以, 作者认为, 理想情况是 (作者做了很多实验来验证这一点), 神经网络中模块一直分解到所对应的 hessian 矩阵不再出现如上图所示的分块的时候为止.

  • 当然了这么搞是比较麻烦的. 粗略一点的, 作者有如下的建议:

    1. transformer 中的 query/key 的每个 head 单独成一个 block;
    2. transformer 中的 value 单独成一个 block, 因为作者发现 value 对应的 hessian 矩阵以及不能分解了 (即使是多头的);
    3. embedding 依旧按照原本 adam 进行训练 (因为 embedding 层不是每个都在训练中得到训练的);
    4. 其它的 block 可以按照 PyTorch 的默认划分

代码

[official]

标签:mathbb,mini,Use,cdot,Fewer,beta,Adam,block
From: https://www.cnblogs.com/MTandHJ/p/18384956

相关文章

  • [Paper Reading] Transfusion: Predict the Next Token and Diffuse Images with One
    Transfusion:PredicttheNextTokenandDiffuseImageswithOneMulti-ModalModellink时间:24.08机构:Waymo&UniversityofSouthernCaliforniaTL;DR提出一种使用混合模态token来训练transformer,名为transfusion,是一种生成式AI模型。主要工作使用了2T的tokens结合语言......
  • mini-lsm通关笔记Week1Day5
    项目地址:https://github.com/skyzh/mini-lsm个人实现地址:https://gitee.com/cnyuyang/mini-lsmTask1-TwoMergeIterator在此任务中,您需要修改:src/iterators/two_merge_iterator.rs你已经在Week1Day2中实现了一个合并迭代器,它合并相同类型的迭代器(如:memtable迭代器)。既然......
  • 【Kubernetes安装】WSL2+ubuntu22.04+K8s+minikube最新安装教程
    系列综述:......
  • WPF Button MouseEnter and MouseLeave together play as MouseOver
    usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Threading.Tasks;usingSystem.Windows;usingSystem.Windows.Controls;usingSystem.Windows.Data;usingSystem.Windows.Documents;usingSystem.Windows.Input;......
  • [Vue] useVModel
    Onewaydatabinding,theparentcomponentpasingdatathrough v-modeltochildcomponent,ifchildmodifythedata, v-modelwilltakecareemitthechangedbacktoparentcomponent.Thisparttenworksfine.Buttheremightbesomeproblem,forexample,wha......
  • Minimum Steiner Tree 题解
    原题,详见P10723。几乎相同,我们只需要以一个需要选择的点为根,遍历子树看看有没有出现需要选择的点,然后直接去删除即可,可以看我的博客。但是我们也可以换一种做法,用类似拓扑排序的算法。先找到所有只连一条边且没有被选择的点,然后放进队列,接着依次取出队头遍历与它相连的点,同时记......
  • C++暂停黑窗口 system( “pause “);
    在编写的c++程序中,如果是窗口,有时会一闪就消失了,如果不想让其消失,在程序结尾处添加:system("pause");注意:不要再return的语句之后加,那样就执行不到了。分析:system()是调用系统命令;pause暂停命令;这样在运行到此处时,会显示“Pressanykeytocontinue...”也就是“按任意键......
  • vue3的天气组件vue3-mini-weather为何安装会报错?
    参考于:https://gitee.com/maocaoying_admin/vue3-mini-weather安装上述地址的组件报错:实现的效果图:实现步骤:1将vue3-mini-weather的lib直接拿到自己的项目中来:2将lib中的组件引入到自己项目中使用点击查看代码<template><divclass="section-income"><div......
  • ABC 368D Minimum Steiner Tree
    题意给你一颗由N个点组成的树,指定K个节点,求包含这K个节点的最小子树的大小思路考虑正难则反,我们从开始的树当中剪掉那些没有任何指定点的子树,剩下来的子树就是最小的、能包含所有指定节点的子树。关于剪去这个操作,就是dfs一旦遇到以当前节点为根的子树没有任何指定点时,就停止df......
  • 【kubernetes】The LocalStreamEnvironment cannot be used when submitting
    1.概述新手上路,首先参考文章:【Flink】Mac下使用flink-kubernetes-operator本地运行flink程序在这个文章中,我们知道了如何使用demo提交flink任务。但是如果我们的机器没有kubectl命令,我们改怎么提交任务到flink呢?这里我们可以使用代码提交,此处文章参考:【kubernetes】使......