目录
- 前言:深度学习的引擎,优化算法的基石
- 1. 梯度下降:优化算法的核心
- 1.1. 损失函数与梯度
- 1.2. 梯度下降的迭代更新规则
- 2. 随机梯度下降(SGD):一次只看一个样本
- 2.1. SGD 的更新规则
- 2.2. SGD 的优缺点
- 3. Mini-Batch SGD:平衡效率与稳定性的艺术
- 3.1. Mini-Batch SGD 的更新规则
- 3.2. Mini-Batch SGD 的优势
- 4. 从零实现 Mini-Batch SGD:代码实战
- 代码详解
- 5. Batch Size 的炼金术:调参的艺术
- 小 Batch Size 的特点
- 大 Batch Size 的特点
- 经验法则
- 6. 内存优化:在资源限制下起舞
- 6.1. 数据类型瘦身
- 6.2. 梯度累积:化零为整
- 6.3. 数据生成器:按需加载
- 6.4. 混合精度训练:精度与效率并存
- 6.5. 及时清理,保持清洁
- 7. 总结:优化之路,永无止境
前言:深度学习的引擎,优化算法的基石
在波澜壮阔的深度学习浪潮中,优化算法扮演着至关重要的角色。它们如同引擎一般,驱动着模型不断学习,从海量数据中汲取知识,最终完成各种复杂的任务。而在众多优化算法中,随机梯度下降(SGD)及其变体,特别是 Mini-Batch SGD,无疑是最核心、最常用的技术之一。
本文将带你深入 Mini-Batch SGD 的幕后,从梯度下降的原理讲起,一步步揭开 SGD 和 Mini-Batch SGD 的面纱。我们将手写 Python 代码从零实现 Mini-Batch SGD,并探讨 Batch Size 这个关键超参数对训练过程的深远影响。更重要的是,我们将分享一些实用的内存优化技巧,帮助你在资源有限的情况下,也能高效地训练大型模型。
准备好了吗?让我们一起踏上这场探索 Mini-Batch SGD 的旅程,理解其精髓,掌握其应用,最终在深度学习的世界里自由驰骋!
1. 梯度下降:优化算法的核心
要理解 Mini-Batch SGD,我们必须先回到梯度下降这个最基础的概念。梯度下降是所有现代优化算法的基石,它提供了一种迭代寻找函数局部最小值的方法。在机器学习中,我们的目标就是最小化模型的损失函数,梯度下降正是为此而生。
1.1. 损失函数与梯度
想象你站在连绵起伏的山峦上,目标是走到山谷的最低点。损失函数就像这座山峦,它描述了模型预测结果与真实值之间的差距。我们的模型参数 θ \theta θ 则代表你在山峦上的位置,损失函数 J ( θ ) J(\theta) J(θ) 的值就是你当前位置的海拔高度。
梯度, ∇ J ( θ ) \nabla J(\theta) ∇J(θ),则指向当前位置山势最陡峭的方向。更准确地说,梯度是一个向量,它由损失函数对每个参数的偏导数组成:
∇ J ( θ ) = [ ∂ J ∂ θ 1 , ∂ J ∂ θ 2 , . . . , ∂ J ∂ θ n ] \nabla J(\theta) = \left[ \frac{\partial J}{\partial \theta_1}, \frac{\partial J}{\partial \theta_2}, ..., \frac{\partial J}{\partial \theta_n} \right] ∇J(θ)=[∂θ1∂J,∂θ2∂J,...,∂θn∂J]
梯度的方向是函数值增长最快的方向,而梯度的反方向 − ∇ J ( θ ) -\nabla J(\theta) −∇J(θ<