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

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

浙公网安备 33010602011771号