在深度学习和机器学习中,优化器
和损失函数
是模型训练的核心要素。
- 优化器决定了模型的参数如何更新,以最小化损失函数
- 损失函数度量了模型预测值和真实值之间的差异
下面将详细介绍常用的优化器和损失函数。
优化器(Optimizers)
梯度下降(Gradient Descent,GD)
原理:
梯度下降是最基本的优化算法。其核心思想是在参数空间中沿着损失函数梯度的反方向移动,以找到损失函数的最小值。
公式:
θ=θ−α⋅∇θJ(θ)
- θ:模型参数
- α:学习率(步长)
- ∇θJ(θ):损失函数关于参数的梯度
特点:
- 需要遍历整个训练集,计算量大,收敛速度慢。
- 适用于小规模数据集。
随机梯度下降(Stochastic Gradient Descent,SGD)
原理:
为了加速计算,每次随机抽取一个样本计算梯度,更新参数。
公式:
θ=θ−α⋅∇θJ(θ;x(i);y(i))
- x(i),y(i):第 i 个样本的数据和标签
特点:
- 更新频率高,计算速度快。
- 更新方向噪声大,可能导致收敛不稳定。
小批量梯度下降(Mini-batch Gradient Descent)
原理:
在每次更新时,使用一个小批量(batch)的样本计算梯度,折中批量和随机的优点。
特点:
- 平衡了计算效率和收敛稳定性。
- 通常是深度学习中最常用的优化方式。
动量(Momentum)
原理:
引入动量的概念,结合过去梯度的指数加权平均,更新时不仅考虑当前梯度,还考虑过去梯度的累积。
公式:
v=βv+(1−β)∇θJ(θ)
θ=θ−αv
- v:速度(动量项)
- β:动量系数,通常取值接近1(如0.9)
特点:
- 能够加速收敛,减少震荡。
- 对于鞍点和局部极小值有更好的越过能力。
Nesterov加速梯度(Nesterov Accelerated Gradient,NAG)
原理:
在动量的基础上,先对参数进行一个预估,然后计算梯度,提供更精确的更新方向。
公式:
v=βv+α∇θJ(θ−βv)
θ=θ−v
特点:
- 比标准动量方法有更快的收敛速度。
- 能够更加准确地调整方向,避免过冲。
Adagrad(Adaptive Gradient)
原理:
根据参数的历史梯度平方和自适应地调整学习率,参数的更新步长与过去的梯度相关。
公式:
rt=rt−1+∇θJ(θ)t2
θ=θ−rt+ϵα∇θJ(θ)
- rt:历史梯度的累计平方和
- ϵ:防止除零的小常数
特点:
- 对于稀疏数据有优势,能自动适应学习率。
- 学习率单调递减,可能在训练后期过小无法更新。
Adadelta
原理:
对Adagrad的改进,使用窗口内的梯度平方和,避免累积量无限增长。
公式:
E[g2]t=ρE[g2]t−1+(1−ρ)∇θJ(θ)t2
Δθ=−E[g2]t+ϵE[Δθ2]t−1+ϵ∇θJ(θ)
E[Δθ2]t=ρE[Δθ2]t−1+(1−ρ)(Δθt)2
特点:
- 不需要手动设置全局学习率。
- 能够适应学习率,但计算复杂度增加。
RMSProp
原理:
与Adadelta类似,采用指数加权移动平均的方法来调整学习率。
公式:
E[g2]t=βE[g2]t−1+(1−β)∇θJ(θ)t2
θ=θ−E[g2]t+ϵα∇θJ(θ)
特点:
- 适用于非平稳目标,能处理学习率的调整。
- 是深度学习中常用的优化器之一。
Adam(Adaptive Moment Estimation)
原理:
结合了动量和RMSProp的思想,既考虑梯度的一阶矩(动量),也考虑二阶矩(梯度平方)。
公式:
-
梯度的一阶矩估计:
mt=β1mt−1+(1−β1)∇θJ(θ)t
-
梯度的二阶矩估计:
vt=β2vt−1+(1−β2)(∇θJ(θ)t)2
-
偏差修正:
m^t=1−β1tmt
v^t=1−β2tvt
-
参数更新:
θ=θ−αv^t+ϵm^t
特点:
- 适用于大规模数据和参数的优化。
- 效果稳定,收敛速度快,是目前最常用的优化器之一。
Adamax
原理:
Adam的变体,使用无偏估计的无穷范数来替代二阶矩。
公式:
ut=max(β2ut−1,∣∇θJ(θ)t∣)
θ=θ−ut+ϵαmt
特点:
- 对于某些问题,Adamax比Adam表现更好。
- 能够处理稀疏梯度。
Nadam(Nesterov-accelerated Adam)
原理:
结合了NAG和Adam的思想,在Adam的基础上加入Nesterov动量。
公式:
更新方式类似于Adam,但在计算动量时采用了Nesterov加速。
特点:
- 比Adam有更好的收敛性能。
- 能够更快地达到最优解。
AMSGrad
原理:
针对Adam可能不收敛的问题,提出了AMSGrad,通过在更新中引入了历史最大二阶矩。
公式:
vt′=max(vt−1′,vt)
θ=θ−αvt′+ϵmt
特点:
- 改进了Adam的收敛性。
- 在某些情况下有更好的性能。
参考链接
如果要详细了解这些优化器的原理,代码实现等,可参考:
梯度下降优化器
梯度下降(`Gradient Descent`)是一种最常用的优化算法,广泛应用于机器学习和深度学习模型的训练中。它的主要目的是在参数空间中找到使损失函数最小化的参数集合。下面将详细介绍梯度下降的原理、公式以及Python中的代码实现。
# 梯度下降的原理
梯度下降是一种基于一阶导数的信息,沿着`负梯度方向`搜索最小值的迭代优化算法。直观上,可以将其想象成一个人在山坡上(损失函数表面)下山,
动量优化器
在深度学习和机器学习的优化过程中,梯度下降算法是最基本也是最常用的优化算法之一。然而,标准的梯度下降算法在某些情况下收敛速度较慢,或者在接近最优点时产生振荡。为了加速收敛和减少振荡,引入了动量(`Momentum`)优化器。
下面,我们将详细介绍动量优化器的原理、数学公式,以及Python代码实现。
---
# 背景与动机
在标准的梯度下降(`Gradient Descent`,GD)算
自适应学习率优化器
在深度学习和机器学习的模型训练过程中,优化算法起着至关重要的作用。除了标准的梯度下降和动量优化器之外,还有许多`自适应学习率`的优化算法,如 `Adagrad`、`Adadelta` 和 `RMSProp`。它们通过自适应地调整学习率,以提升收敛速度和稳定性。
以下将详细介绍这三个优化算法,包括公式、原理,以及 Python 代码实现。
---
# Adagrad 算法
## 背景与动机
Adam优化器
在深度学习和机器学习的模型训练过程中,优化算法起着关键作用。
**Adam**(Adaptive Moment Estimation)优化器是目前最受欢迎和广泛使用的优化算法之一。它结合了`动量优化器`和 `RMSProp` 的优势,能够在训练过程中`自适应地调整学习率`,实现`高效`和`稳健`的梯度更新。
下面,我们将详细介绍 Adam 优化器的原理、数学公式,以及 Python 代码实现
损失函数(Loss Functions)
均方误差(Mean Squared Error,MSE)
定义:
计算预测值和真实值之差的平方和的平均值。
公式:
MSE=n1i=1∑n(yi−y^i)2
特点:
- 对异常值敏感,误差平方会放大偏差大的样本的影响。
- 常用于回归问题。
平均绝对误差(Mean Absolute Error,MAE)
定义:
计算预测值和真实值之差的绝对值的平均值。
公式:
MAE=n1i=1∑n∣yi−y^i∣
特点:
交叉熵损失(Cross-Entropy Loss)
定义:
衡量两个概率分布之间的差异,常用于分类问题。
二分类交叉熵:
Loss=−n1i=1∑n[yilogy^i+(1−yi)log(1−y^i)]
多分类交叉熵:
Loss=−i=1∑nj=1∑kyijlogy^ij
特点:
- 当预测概率接近真实标签时,损失较小。
- 对于分类问题,能够更好地衡量模型性能。
Hinge损失
定义:
主要用于支持向量机(SVM),用于最大化分类间隔。
公式:
Loss=i=1∑nmax(0,1−yiy^i)
- yi:真实标签,取值为−1或1
- y^i:预测值
特点:
- 强调正确分类的同时有足够的间隔。
- 对于硬分类(hard margin)问题效果较好。
Huber损失
定义:
结合MSE和MAE的优点,对异常值有一定的鲁棒性。
公式:
对于误差δ:
-
当∣y−y^∣≤δ时:
Loss=21(y−y^)2
-
当∣y−y^∣>δ时:
Loss=δ(∣y−y^∣−21δ)
特点:
- 对小误差采用MSE,对大误差采用MAE。
- 平衡了对异常值的敏感性和收敛速度。
Log-Cosh损失
定义:
计算预测误差的双曲余弦的对数,总是平滑且对异常值不太敏感。
公式:
Loss=i=1∑nlog(cosh(y^i−yi))
特点:
- 类似于MSE,但对异常值更鲁棒。
- 导数行为良好,方便优化。
Poisson损失
定义:
用于计数数据的模型,如泊松回归。
公式:
Loss=i=1∑n(y^i−yilogy^i)
特点:
Kullback-Leibler散度(KL散度)损失
定义:
衡量两个概率分布之间的差异。
公式:
Loss=i=1∑nyi(logyi−logy^i)
特点:
- 在概率分布估计中常用。
- 非对称,DKL(P∣∣Q)=DKL(Q∣∣P)。
Sigmoid交叉熵损失
定义:
结合Sigmoid函数和交叉熵,用于多标签分类问题。
公式:
Loss=−i=1∑n[yilogσ(y^i)+(1−yi)log(1−σ(y^i))]
- σ(y^i):Sigmoid函数
特点:
- 适用于每个样本可能属于多个类别的情况。
- 将每个类别的预测视为独立的二分类问题。
Softmax交叉熵损失
定义:
结合Softmax函数和交叉熵,用于多分类问题。
公式:
Loss=−i=1∑nj=1∑kyijlog(∑l=1key^iley^ij)
特点:
- 能够处理多类别互斥的情况。
- 模型输出经过Softmax后表示为概率分布。
总结
优化器和损失函数的选择对于模型的训练效果至关重要。优化器决定了参数更新的方式,影响模型的收敛速度和收敛效果;损失函数则定义了模型的优化目标,影响模型对误差的敏感性和预测精度。在实际应用中,需要根据具体的问题特性、数据规模和模型结构,选择合适的优化器和损失函数,以达到最佳的训练效果。