常见优化函数

1 梯度下降法

以线性回归为例:

h0=j=0nθjxj

损失函数为:

J(θ)=12mi=1m(y(i)hθ(x(i)))xji

1.1 批量梯度下降法(原始的梯度下降法)

θj=θjαJ(θ)θj

对于所有数据点,上述损失函数的偏导数为:

J(θ)θj=1mi=1m(y(i)hθ(x(i)))xji

缺点:每一次参数更新都用到了所有的训练数据,如果训练数据非常多,则很耗时。
每次更新的伪代码:
repeat:
  θj=θj+α1mi=1m(y(i)hθ(x(i)))xji  (j=0,1,2,..n)

1.2 随机梯度下降法(SGD)

利用每个样本的损失函数对θ求偏导得到对应的梯度来更新theta

θj=θj+(y(i)αhθ(x(i))xji

更新过程如下:

  1. random shuffle dataset
  2. repeat:
        for i = 1...m
            θj=θj+ alpha(y(i)hθ(x(i))xji  (j=0,1,...n)  这里的j代表的是θ
    缺点:SGD伴随的一个问题是噪音多,是的SGD并不是每一次迭代都是朝着整体最优方向。

1.3 小批量梯度下降法

假设每次更新参数的样本数为10个,更新的伪代码为:
repeat:
    for i = 1,11,21,31,...
        θj=θj+α110k=ii+9(y(k)hθ(x(k)))xjk  (j=0,1,...n)

2 动量优化

2.1 Momentum

mt+1=umt+αJ(θ)θ

θt+1=θtmt+1

u表示动量因子,通常取值为0.9或近似值,在梯度方向改变时,momentum可以加速更新,从而加速收敛。即,momentum能够加速SGD收敛,抑制振荡

2.2 NAG

momentum保留了上一时刻的梯度,对其没有任何改变,NAG是momentum的改进,在梯度更新时做一个矫正,具体的做法是在当前梯度上添加上一时刻的动量umt,梯度改变为J(θumt)θ

mt+1=umt+αJ(θumt)θ

θt+1=θtmt+1

3 自适应学习率优化算法

3.1 Adagrad

gt=J(θ)θ

rt=rt1+gt2

Δθ=αrt+ϵgt

θt=θt1Δθ

对于每一个θj在计算的过程中gt,j不同,即每个变量在更新的时候学习率是不同的。
训练前期,梯度较小,使得Regularizer(上式中的r_t)项很大,放大梯度。[激励阶段]
训练后期,梯度较大,使得Regularizer项很小,缩小梯度。[惩罚阶段]
缺点:
仍需要手工设置一个全局学习率α,如果设置过大,会使regularizer过于敏感,对梯度调节太大,中后期,分母梯度累加的平方和越来越大,使更新量趋于零,使训练提前结束,无法学习。

3.2 RMSProp

修改了AdaGrad的梯度平方和累加为指数加权的移动平均

gt=J(θ)θ

rt=ρrt1+(1ρ)gt2

Δθ=αrt+ϵgt

θt=θt1Δθ

自变量每个元素的学习率在迭代过程中就不再一直降低(或不变)。

3.3 Adadelta

AdaDelta算法也像RMSProp算法一样,使用了指数加权移动平均变量。在时间步0,它的所有元素被初始化为0。与RMSProp算法不同的是,AdaDelta算法还维护一个额外的状态变量 Δxt ,其元素同样在时间步0时被初始化为0。我们使用 Δxt−1 来计算自变量的变化量:

gt=J(θ)θ

rt=ρrt1+(1ρ)gt2

gt=ΔXt1+ϵrt+ϵgt

θt=θt1gt

Δxt=ρΔxt1+(1ρ)gt2

3.4 Adam

Adam算法在RMSProp算法的基础上对小批量随机梯度也做了指数加权移动平均。
Adam算法使用了偏差修正。也有人说Adam算法是RMSProp法和动量法的结合

gt=J(θ)θ

mt=β1mt1+(1β1)gt

vt=β2vt1+(1β2)gt2

mt^=mt1β1t

vt^=vt1β2t

θt=θt1αvt^+ϵmt^

posted @   爱吃西瓜的菜鸟  阅读(367)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· DeepSeek在M芯片Mac上本地化部署
点击右上角即可分享
微信分享提示