目录
2. 随机梯度下降(Stochastic Gradient Descent,SGD)
各种优化器及其优缺点
1. 梯度下降(Gradient Descent)
梯度下降是最基础的优化器,它通过计算损失函数的梯度,并沿着梯度的反方向更新参数来最小化损失函数。
梯度下降的参数更新公式如下:
θ_t = θ_{t-1} - α * ∇f(θ_{t-1})
其中,θ_t是第t步的参数,α是学习率,∇f(θ_{t-1})是损失函数在第t-1步的梯度。
优点:实现简单,理解容易。
缺点:可能陷入局部最优解,对于非凸优化问题效果不佳;对于大数据集,计算全局梯度耗时较长。除了可能陷入局部最优解和对大数据集计算全局梯度耗时较长之外,梯度下降的另一个缺点是对所有的参数使用相同的学习率。这可能导致优化过程在某些方向上过快,而在其他方向上过慢。
2. 随机梯度下降(Stochastic Gradient Descent,SGD)
SGD是梯度下降的一个变种,它每次只使用一个样本来计算梯度,这样可以大大加快优化的速度。
SGD的参数更新公式如下:
θ_t = θ_{t-1} - α * ∇f_i(θ_{t-1})
其中,θ_t是第t步的参数,α是学习率,∇f_i(θ_{t-1})是第i个样本的损失函数在第t-1步的梯度。
优点:对于大数据集,可以更快地进行优化;可以有效地跳出局部最优解。
缺点:更新方向不稳定,可能导致优化过程震荡;可能需要较长时间才能收敛。SGD的另一个缺点是对所有的参数使用相同的学习率。这可能导致优化过程在某些方向上过快,而在其他方向上过慢。
3. 动量优化(Momentum)
动量优化在SGD的基础上引入了动量项,使得优化过程可以积累之前的梯度,从而更快地收敛。
v_t = γ * v_{t-1} + α * ∇f(θ_{t-1})
θ_t = θ_{t-1} - v_t
其中,θ_t是第t步的参数,α是学习率,∇f(θ_{t-1})是损失函数在第t-1步的梯度,v_t是第t步的速度,γ是动量参数。
优点:可以加速SGD在相关方向的收敛速度,抑制震荡。
缺点:需要人工设置动量参数,调参较为复杂。动量优化的另一个缺点是可能会导致优化过程在某些方向上过快,从而跳过最优解。
4. RMSProp
RMSProp是一种自适应学习率的优化器,它可以自动调整学习率,使得不同的参数有不同的更新速度。
RMSProp的参数更新公式如下:
r_t = β * r_{t-1} + (1 - β) * (∇f(θ_{t-1}))^2
θ_t = θ_{t-1} - α * ∇f(θ_{t-1}) / sqrt(r_t + ε)
其中,θ_t是第t步的参数,α是学习率,∇f(θ_{t-1})是损失函数在第t-1步的梯度,r_t是第t步的平方梯度的移动平均值,β是衰减系数,ε是防止除0错误的小常数。
优点:对于非凸优化问题和复杂的深度学习模型,优化效果较好。
缺点:需要人工设置初始学习率和衰减系数,调参较为复杂。另一个缺点是在某些情况下可能会导致学习率衰减得过快,从而导致优化过程提前停止。
5. Adam
Adam结合了Momentum和RMSProp的优点,既有动量项,又有自适应学习率。
Adam优化器的参数更新公式如下:
m_t = β1 * m_{t-1} + (1 - β1) * g_t
v_t = β2 * v_{t-1} + (1 - β2) * g_t^2
m_hat = m_t / (1 - β1^t)
v_hat = v_t / (1 - β2^t)
θ_t = θ_{t-1} - α * m_hat / (sqrt(v_hat) + ε)
其中,m_t和v_t分别是一阶矩(梯度的均值)和二阶矩(梯度的未中心化方差)的指数移动平均值,β1和β2是衰减系数,α是学习率,ε是防止除0错误的小常数。
优点:既可以加速优化,又可以自动调整学习率,对于深度学习模型的优化效果较好。
缺点:需要人工设置初始学习率和两个衰减系数,调参较为复杂。Adam优化器的收敛性并不是单调的,这可能会导致在训练过程中出现波动,从而影响模型的性能和稳定性。Adam优化器在训练初期阶段对梯度的估计存在偏差,但通过偏差纠正可以降低其影响。然而,这种偏差纠正可能会带来额外的计算负担。根据"No Free Lunch Theorem",不同的优化算法在不同的问题上表现优异,没有一种优化算法是在所有问题上都表现最好的。这意味着,尽管Adam优化器在很多问题上表现出色,但也可能存在一些问题不太适合使用Adam优化器。
6. AdaMax
AdaMax是Adam的一个变种,它使用无穷范数来代替Adam中的L2范数,这样可以更好地处理稀疏梯度。
AdaMax优化器的参数更新公式如下:
m_t = β1 * m_{t-1} + (1 - β1) * g_t
u_t = max(β2 * u_{t-1}, abs(g_t))
θ_t = θ_{t-1} - α * m_t / u_t
其中,m_t是一阶矩的指数移动平均值,u_t是梯度的无穷范数,β1和β2是衰减系数,α是学习率。
优点:对稀疏梯度的优化效果较好。
缺点:需要人工设置初始学习率和两个衰减系数,调参较为复杂。AdaMax优化器的一个主要缺点是其对于非稀疏参数的优化效果可能不如Adam。此外,由于AdaMax使用无穷范数,所以在某些情况下,其可能会导致学习率过大,从而使优化过程变得不稳定。
7. Nadam
Nadam结合了Adam和Nesterov动量的优点,既有自适应学习率,又有Nesterov动量,可以更快地收敛。
Nadam优化器的参数更新公式如下:
m_t = β1 * m_{t-1} + (1 - β1) * g_t
v_t = β2 * v_{t-1} + (1 - β2) * g_t^2
m_hat = (β1 * m_t + (1 - β1) * g_t) / (1 - β1^t)
v_hat = v_t / (1 - β2^t)
θ_t = θ_{t-1} - α * m_hat / (sqrt(v_hat) + ε)
其中,m_t和v_t分别是一阶矩和二阶矩的指数移动平均值,β1和β2是衰减系数,α是学习率,ε是防止除0错误的小常数。
优点:可以更快地收敛,对于深度学习模型的优化效果较好。
缺点:需要人工设置初始学习率和两个衰减系数,调参较为复杂。Nadam优化器的一个主要缺点是其可能会导致训练过程中的震荡,尤其是在学习率较高的情况下。此外,由于Nadam结合了Adam和Nesterov动量,所以其可能会导致优化过程过于复杂,从而增加了计算负担。
8. AdamW
AdamW在Adam的基础上引入了权重衰减,可以更好地控制模型的复杂度,防止过拟合。
AdamW优化器的参数更新公式如下:
m_t = β1 * m_{t-1} + (1 - β1) * g_t
v_t = β2 * v_{t-1} + (1 - β2) * g_t^2
m_hat = m_t / (1 - β1^t)
v_hat = v_t / (1 - β2^t)
θ_t = (1 - λ * α) * θ_{t-1} - α * m_hat / (sqrt(v_hat) + ε)
其中,m_t和v_t分别是一阶矩和二阶矩的指数移动平均值,β1和β2是衰减系数,α是学习率,λ是权重衰减系数,ε是防止除0错误的小常数。
优点:可以有效地防止过拟合,对于深度学习模型的优化效果较好。
缺点:需要人工设置初始学习率、两个衰减系数和权重衰减系数,调参较为复杂。AdamW优化器的一个主要缺点是其可能会导致权重衰减过快,从而导致模型性能下降。此外,由于AdamW引入了权重衰减,所以其可能会导致优化过程过于复杂,从而增加了计算负担。