Batch梯度下降、随机梯度下降和mini-batch梯度下降
🐱👓梯度下降
梯度下降又名批量梯度下降(Batch Gradient Descent),采用的方法是计算一个epoch(每个epoch都包含所有样本量)中所有样本的Loss和,对损失求平均就是当前epoch的损失值,进而计算梯度进行反向传播、参数更新。
🐱💻随机梯度下降
随机梯度下降(SGD,现在SGD含义发生了变化,不是指随机梯度下降),采用的方法是对一个epoch每一个样本都进行Loss求解,进而计算梯度进行反向传播、参数更新
🐱🚀mini-batch梯度下降
mini-batch梯度下降,又名SGD,现在看到的代码中出现SGD一般都是指mini-batch梯度下降,不是指随机梯度下降。采用的方法是把一个epoch内所有样本按batch_size进行划分,如果batch_size=128,那么计算损失就是按batch_size=128的大小计算损失并进行平均,进而计算梯度进行反向传播、参数更新。
🐱👤总结
样本总量=m,batch_size=128
随机梯度下降 | mini-batch梯度下降 | 梯度下降 | |
---|---|---|---|
Loss计算单位 | 1<= | batch_size<= | m |
优点 | 参数更新速度大大加快,因为计算完每个样本的Loss都会进行一次参数更新 | 每个epoch通过所有样本来计算Loss,这样计算出的Loss更能表示当前分类器在于整个训练集的表现,得到的梯度的方向也更能代表全局极小值点的方向。如果损失函数为凸函数,那么这种方式一定可以找到全局最优解。 | |
缺点 | 1.计算量大且无法并行。批量梯度下降能够利用矩阵运算和并行计算来计算Loss,但是SGD每遍历到一个样本就进行梯度计算和参数下降,无法进行有效的并行计算。2.容易陷入局部最优导致模型准确率下降。因为单个样本的Loss无法代替全局Loss,这样计算出来的梯度方向也会和全局最优的方向存在偏离。但是由于样本数量多,总体的Loss会保持降低,只不过Loss的变化曲线会存在较大的波动。 | 每次都需要用所有样本来计算Loss,在样本数量非常大的时候即使也只能有限的并行计算,并且在每个epoch计算所有样本Loss后只更新一次参数,即只进行一次梯度下降操作,效率非常低。 | |
结合随机梯度下降和梯度下降优点,避免缺点 |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix