AI和大模型——优化器

一、优化器

对AI大模型来说,所有的工作的目的,最终都是为了得到一个最好的反馈结果。但在大模型内部,要想得这到这个结果就必须使用前面分析的什么损失函数、梯度、反向传播等等中,最终将结果(一般是反向传播传递的梯度)更新到大模型参数。注意,优化器就是这个参数更新的规则。
优化器了融合动量(一阶矩)、自适应学习率(二阶矩)、权重衰减等机制。

  1. 融合动量
    所以整合动量的意思是为了减少震荡,动量机制会综合之前所有方向的梯度变化,然后采用一个累积平均的算法,保证梯度变化的平滑。所谓“矩”指数学上描述分布的形状。而一阶矩一般表示均值。这里表示的是对过去所有梯度的一个带权重的平均值。这样做可以加速收敛、减少震荡。
  2. 自适应学习率
    说直白一些就是每个参数都有自己相应的学习率也就是对更新参数的敏感度。这样就会最大适应实际的情况,它是一个历史梯度平方的移动平均值。也就是数学上方差,所以叫二阶矩。它会让整个训练过程更平滑、稳定。降低了对初始学习率的敏感度
  3. 权重衰减
    在实际参数优化过程中,由于某些原因可能对个别的参数依赖过大(前面提到的脸上有灰点),导致了大模型的泛化的能力很差,产生了过拟合的现象。这时就需要一个权重衰减的机制,用来让模型更新的参数更均匀。它可以提高大模型的泛化能力,让模型在测试集上表现更好

二、Adam和Adamw

在实际的大模型中,经常使用的多是经典的自适应的学习方法即Adam(Adaptive Moment Estimation,自适应矩估计), AdamW(Adam with Decoupled Weight Decay,解耦权重衰减)。Adam, AdamW优化器能够很好的解决大模型的收敛速度和收敛质量,即解决梯度方向的稳定和每个参数都拥有自己的学习率。
大家都知道大模型之所以称之为大模型,重点在于海量的参数。而这也意味着反向传播的参数更新也是海量的。但实际情况是,海量的参数往往带来了海量的内存占用和海量计算。这对于计算机来说往往是不现实的。那么解决这个问题很简单,抽样更新,或者说随机更新。但这会带来更新的震荡有不平滑。解决的方法很简单使用上面提到的动量机制,可以这样理解为参数NEW =OLD60%+NEW40%。当然这其中的权重需要实际进行匹配。
另外在,实际的参数更新过程中,有的时候对每个参数会设置不同学习率。举个例子,在一个游戏打怪的模型中,大Boss出现的机率很低,但它的影响非常大,所以其学习率就应该很高。这时候就必须使用二阶矩即方差。即移动窗口内的梯度的方差。方差的目的是去除负值和防止数值过大,移动窗口的目的是为了防止学习率走近于零。
而Adam则把这两种机制整合到了一起,所以成为了开源大模型的的默认的优化器。不过,在实际的应用过程中,由于泛化的原因,可能会导致局部性最优。这就引出了一个大模型训练在中后期引入的优化器即SGD进行更精确的微调。

三、SGD

Stochastic Gradient Descent,随机梯度下降。它是深度学习中最基础的经典优化算法。是现在大模型中使用的优化器的基础。SGD就设计就是沿着损失函数下降最快的方向进行模型参数的更新。
资料上有一个经典的例子,当一个人站在一个浓雾笼罩的山顶时,如何最快才能下山。就是沿着高度变化率(梯度)最大的方向下山。理论上讲如果是山崖的话一步就可以到达山脚(有可能摔没了)。但是一般山都会很大,方向也特别多,到底沿着哪个方向呢?这就是SGD的精髓,随机。这其实和排序中选择起点一样,好多都是随机选择,然后开始排序。这个也一样,随机找出一个梯度值更新参数,然后不断的在其中计算梯度。
它的优点和缺点都非常突出。优点是速度快、可动态学习以及跳出局部最小值。缺点是容易产生震荡或卡在鞍点、学习率选择困难等。这也是前面的自适应相关的优化器出现的原因。

四、其它优化器

对于大模型来说,除了上面比较经典的优化器外,其实还有少的优化器。常见的有:

  1. 二阶方法:
    Sophia, K-FAC等。通过对损失函数的相关处理,发现更精确的更新参数。理论上收敛会更快,可能达到更优解。但会导致计算量巨大,内存开销高,应用受限
  2. 符号与搜索发现优化器
    Lion, Signum等,计算量小,最近几年发展较快。计算高效,内存应用合理,训练速度快
  3. 内存高效优化器
    Adafactor, SM3等。看名字就知道主要是为了显著的降低优化器自身对显存的占用。由于其内存占用极低,因此适合训练和微调超大模型
  4. 基于矩阵的优化器
    Muon, Shampoo等。利用矩阵运算来处理参数间的关联,优化更新。前景很广阔,但计算复杂,目前处于研究阶段

五、总结

大模型的相关技术点有很多,希望能通过一些比较通俗简单的话把它们表述清晰。如果有什么问题,希望大家能够提出来一起讨论。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值