补全llm知识体系的地基:优化器

  1. SGD:随机梯度下降
    1. 每次随机一个样本
    2. 计算梯度
    3. 新参数 = 旧参数 - 学习率 * 梯度
  2. 改进——动量(解决局部最优问题):
    1. SGD-M:加入一阶动量来替代梯度,其中一阶动量公式:新动量 = (1-beta)*旧动量 + beta * 梯度,beta经验为0.1
    2. SGD with Nesterov Acceleration:用“跟着一阶动量走一步后的梯度”替代梯度,动量公式不变
  3. 改进——自适应学习率:
    1. AdaGrad:用 学习率 / 历史所有梯度在每个维度的L2范数(二阶动量) 来替代原有的学习率,这样历史更新越多,学习率越低
    2. RMSProp:用 学习率 / 根号下(指数衰减的梯度平方和) 来替代原有的学习率,这样只关注较近时间内的更新情况
    3. AdaDelta:用 根号下(指数衰减的参数更新量平方和 / 指数衰减的梯度平方和) 来替代原有的学习率,
  4. Adam —— Adaptive + Momentum:
    1. 新参数 = 旧参数 - 自适应学习率 * 一阶动量
    2. 一阶新动量 = (1-beta1)*旧一阶动量 + beta1 * 梯度
    3. 二阶新动量 = (1-beta2)*旧二阶动量 + beta2 * 梯度的平方
    4. 自适应学习率 = 固定学习率 / 根号下二阶动量
  5. NAdam——Nesterov + Adam:
    1. Adam的本轮梯度:当前输入在本轮参数的梯度(由本轮参数和本轮输入计算得到)
    2. NAdam的本轮梯度:当前输入在“本轮参数用上一轮动量更新后”的梯度
  6. AdamW——Adam+Decoupled Weight Decay
    1. 权重衰减/正则化:在loss中加入参数的平方项(L2范数),能避免参数变的过大。但与此同时,这也影响了动量的积累(引入了与真实动量方向不同的惩罚项)
    2. Adam的策略:简单的L2正则化,导致权重衰减同时作用于一阶动量和学习率
    3. AdamW:放弃在loss的正则化项,转而在参数更新时单独进行权重衰减,这样自适应学习率就不会被影响

 

计算模型训练和推理过程中的显存占用:Visualize and understand GPU memory in PyTorch

posted @ 2025-05-17 22:56  Phile-matology  阅读(37)  评论(0)    收藏  举报