欢迎访问 生活随笔!

ag凯发k8国际

当前位置: ag凯发k8国际 > 编程资源 > 编程问答 >内容正文

编程问答

模型优化算法 -ag凯发k8国际

发布时间:2025/1/21 编程问答 21 豆豆
ag凯发k8国际 收集整理的这篇文章主要介绍了 模型优化算法 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

1.1 基于梯度下降的方法

1.1.1样本量

  • 批量梯度下降bgd(batch gradient dencent)
  • 随机梯度下降sgd(stochastic gradient descent)
  • mini-batch gd

1.1.2. 学习率的更新方法

  • 动量法momentum(引入了动量项)
  • nesterov accelerated gradient(nag,预测下一时刻的位置)

二阶方法,调整学习率

  • adagrad(每个参数单独调节)
  • adelta(防止adagrad中的学习率一直减小)
  • rmsprop(adelta实例化)
  • adam(梯度、梯度方的历史加权平均值)
  • adamax(adam的二范数变为无穷范数,更稳定)



1.2. 牛顿法系列

1.2.1. 牛顿法
1.2.2. 拟牛顿法

  • dfp
  • bgfs
  • l-bgfs(待完成)
  • broyden

2.1.1批量梯度下降

根据所有样本的损失,更新模型参数。

以逻辑斯蒂回归模型为例,训练集有m个样本x(x1,x2,...,xm)x({x_{1}},{x_{2}},...,{x_{m}})x(x1​,x2​,...,xm​),误差函数是交叉熵误差函数,批量梯度下降法的计算过程如下:

  • 对于每个输入xxx,计算模型输出y^\hat{y}y^​. y^=σ(wtx b)\hat{y} = \sigma (w^{t}x b)y^​=σ(wtxb) .其中σ(z)=11 e−z\sigma (z) = \frac{1}{1 e^{-z}}σ(z)=1e−z1​.(注:初始化w,bw,bw,b)
  • 计算mmm个样本的交叉熵损失,取平均值,得到关于w,bw,bw,b的损失值
    j(w,b)=1m∑i=1m(l(y^i),yi)=−1m∑i=1m(yilogy^i (1−yi)log(1−y^i))j(w,b) = \frac{1}{m} \sum_{i=1}^{m}(l(\hat{y}_{i}),y_{i}) = -\frac{1}{m}\sum_{i=1}^{m}(y_{i}log\hat{y}_{i} (1-y_{i})log(1-\hat{y}_{i}))j(w,b)=m1​i=1∑m​(l(y^​i​),yi​)=−m1​i=1∑m​(yi​logy^​i​(1−yi​)log(1−y^​i​))
  • 计算j(w,b)j(w,b)j(w,b)关于w,bw,bw,b的偏导dw=∂j(w,b)∂wdw = \frac{\partial j(w,b)}{\partial w}dw=∂w∂j(w,b)​,db=∂j(w,b)∂bdb = \frac{\partial j(w,b)}{\partial b}db=∂b∂j(w,b)​
  • 更新w,bw,bw,b w=w−lr∗dw,b=b−lr∗dbw = w - lr * dw, b = b - lr*dbw=w−lr∗dw,b=b−lr∗db,lrlrlr是学习率.
  • 重复步骤1~4,达到终止条件结束算法。
  • 2.1.2 随机梯度下降

    单个样本输入后,计算得到损失后,更新模型参数。

    以逻辑斯蒂回归模型为例,训练集有m个样本x(x1,x2,...,xm)x({x_{1}},{x_{2}},...,{x_{m}})x(x1​,x2​,...,xm​),误差函数是交叉熵误差函数,随机梯度下降法的计算过程如下:

  • 对于任意一个输入xix_{i}xi​,计算模型输出yi^\hat{y_{i}}yi​^​. yi^=σ(wtxi b)\hat{y_{i}} = \sigma (w^{t}x_{i} b)yi​^​=σ(wtxi​b) .其中σ(z)=11 e−z\sigma (z) = \frac{1}{1 e^{-z}}σ(z)=1e−z1​.(注:初始化w,bw,bw,b)
  • 计算输入xix_{i}xi​的交叉熵损失ji(w,b)=l(y^i,yi)=yilogy^i (1−yi)log(1−y^i)j_{i}(w,b) = l(\hat{y}_{i},y_{i})= y_{i}log\hat{y}_{i} (1-y_{i})log(1-\hat{y}_{i})ji​(w,b)=l(y^​i​,yi​)=yi​logy^​i​(1−yi​)log(1−y^​i​)
  • 计算ji(w,b)j_{i}(w,b)ji​(w,b)关于w,bw,bw,b的偏导dw=∂ji(w,b)∂wdw = \frac{\partial j_{i}(w,b)}{\partial w}dw=∂w∂ji​(w,b)​,db=∂ji(w,b)∂bdb = \frac{\partial j_{i}(w,b)}{\partial b}db=∂b∂ji​(w,b)​
  • 更新w,bw,bw,b w=w−lr∗dw,b=b−lr∗dbw = w - lr * dw, b = b - lr*dbw=w−lr∗dw,b=b−lr∗db,lrlrlr是学习率.
  • 重复步骤1~4,达到终止条件结束算法。
  • 2.1.3 mini-batch梯度下降

    根据小批量n个样本的损失,更新模型参数。

    以逻辑斯蒂回归模型为例,训练集有m个样本x(x1,x2,...,xm)x({x_{1}},{x_{2}},...,{x_{m}})x(x1​,x2​,...,xm​),误差函数是交叉熵误差函数,批量梯度下降法的计算过程如下:

  • 对于小批量的n个样本中的每个输入xxx,计算模型输出y^\hat{y}y^​. y^=σ(wtx b)\hat{y} = \sigma (w^{t}x b)y^​=σ(wtxb) .其中σ(z)=11 e−z\sigma (z) = \frac{1}{1 e^{-z}}σ(z)=1e−z1​.(注:初始化w,bw,bw,b)
  • 计算nnn个样本的交叉熵损失,取平均值,得到关于w,bw,bw,b的损失值
    j(w,b)=1n∑i=1n(l(y^i),yi)=−1n∑i=1nyilogy^i (1−yi)log(1−y^i)j(w,b) = \frac{1}{n} \sum_{i=1}^{n}(l(\hat{y}_{i}),y_{i})\\ = -\frac{1}{n}\sum_{i=1}^{n}y_{i}log\hat{y}_{i} (1-y_{i})log(1-\hat{y}_{i})j(w,b)=n1​i=1∑n​(l(y^​i​),yi​)=−n1​i=1∑n​yi​logy^​i​(1−yi​)log(1−y^​i​)
  • 计算j(w,b)j(w,b)j(w,b)关于w,bw,bw,b的偏导dw=∂j(w,b)∂wdw = \frac{\partial j(w,b)}{\partial w}dw=∂w∂j(w,b)​,db=∂j(w,b)∂bdb = \frac{\partial j(w,b)}{\partial b}db=∂b∂j(w,b)​
  • 更新w,bw,bw,b w=w−lr∗dw,b=b−lr∗dbw = w - lr * dw, b = b - lr*dbw=w−lr∗dw,b=b−lr∗db,lrlrlr是学习率.
  • 重复步骤1~4,达到终止条件结束算法。
  • 2.2 梯度更新算法1

    2.2.1 动量法

    问题背景

    下图所示,红点是最小值点。为了到达红点,如果使用较大的学习率,则会出现紫线画出的发散现象,如果使用较小的学习率,如蓝线所示,收敛的速度比较慢。因此,希望有种学习方法,能在纵轴上减小摆动,在横轴上,希望加快学习。这里就需要每次横轴和纵轴的更新量不同,如果使用w=w−lr∗dww = w - lr * dww=w−lr∗dw,则达不到这种效果。

    方法引入

    动量法在原始权值梯度dwdwdw的基础上,增加了上一时刻的更新量υt−1\upsilon _{t-1}υt−1​。
    υt=γυt−1 η▽θj(θ)\upsilon _{t} = \gamma \upsilon _{t-1} \eta \bigtriangledown _{\theta }j(\theta )υt​=γυt−1​η▽θ​j(θ)
    θ=θ−υt\theta =\theta - \upsilon _{t}θ=θ−υt​

    2.2.2 nesterov 梯度加速法(nesterov accelerated gradient)

    问题背景

    寻找最小值的过程,就像小球下山,小球在下山的过程中,速度会一直增加,这样会冲过最低点,然后又冲下来。我们希望小球到山底附近时,会自动减速,停在最小值处。

    方法引入

    θ−υt\theta - \upsilon _{t}θ−υt​是下一时刻小球所在位置的近似估计。通过计算函数关于下一时刻的梯度表示参数的梯度方向。
    υt=γυt−1 η▽θj(θ−υt)\upsilon _{t} = \gamma \upsilon _{t-1} \eta \bigtriangledown _{\theta }j(\theta -\upsilon _{t} )υt​=γυt−1​η▽θ​j(θ−υt​)
    θ=θ−υt\theta =\theta - \upsilon _{t}θ=θ−υt​


    短的蓝色 当前梯度 棕色和长的蓝色 更新的累积梯度 绿色 最终的更新值

    这种更新方法可以阻止更新过快而越过最小值点而使响应速度提高。

    2.2.3 adagrad

    问题背景

    我们能够根据误差函数的斜率调整更新量并加速sgd,我们还希望根据每个参数的重要性来调整每个参数的更新量

    adagrad 是一种基于梯度的优化算法。它调整参数的学习率的规则: larger updates for infrequent and smaller updates for frequent parameters(怎么翻呢?)
    sgd的更新规则如下:

    gt,i=▽θtj(θt,i)g_{t,i} = \bigtriangledown _{\theta _{t}}j(\theta _{t,i})gt,i​=▽θt​​j(θt,i​)
    θt 1,i=θt,i−η⋅gt,i\theta_{t 1,i} = \theta _{t,i} - \eta \cdot g_{t,i}θt1,i​=θt,i​−η⋅gt,i​
    gt∈rd×dg_{t}\in r^{d\times d}gt​∈rd×d是对角阵,对角上的元素(i,i)(i,i)(i,i)是累积到ttt时刻的梯度的平方。
    其中gt,ig_{t,i}gt,i​表示参数θi\theta _{i}θi​在时间ttt时的梯度。
    adagrad算法每次单独更新每个参数:
    θt 1,i=θt,i−ηgt,ii ε⋅gt,i\theta_{t 1,i} = \theta _{t,i} - \frac{\eta}{\sqrt {g_{t,ii} \varepsilon} } \cdot g_{t,i}θt1,i​=θt,i​−gt,ii​ε​η​⋅gt,i​
    其中ε\varepsilonε是平滑项,防止除数为0.

    向量化后:

    adagrad的主要缺点是,训练过程中,分母中的梯度平方项一直在增加,这会使学习率越来越小,从而导致模型无法继续学习。

    2.2.4 adadelta

    当前时刻参数梯度平方的均值
    e[g2]t=γe[g2]t−1 (1−γ)gt2e[g^{2}]_{t} = \gamma e[g^{2}]_{t-1} (1-\gamma)g_{t}^{2}e[g2]t​=γe[g2]t−1​(1−γ)gt2​
    adagrad参数的更新量

    用e[g2]te[g^{2}]_{t}e[g2]t​代替gtg_{t}gt​,得
    δθt=−ηe[g2]t εgt\delta \theta_{t} = - \frac{\eta }{\sqrt{e[g^{2}]_{t} \varepsilon }} g_{t}δθt​=−e[g2]t​ε​η​gt​
    分母是梯度rmse的校正,用rmse代替后:
    δθt=−ηrmse([g]t)gt\delta \theta_{t} = - \frac{\eta }{rmse([g]_{t})} g_{t}δθt​=−rmse([g]t​)η​gt​
    完整的adadelta算法:
    e[g2]t=γe[g2]t−1 (1−γ)gt2(1)e[g^{2}]_{t} = \gamma e[g^{2}]_{t-1} (1-\gamma)g_{t}^{2} \text(1)e[g2]t​=γe[g2]t−1​(1−γ)gt2​(1)
    δθt=−ηrmse([g]t)gt(2)\delta \theta_{t} = - \frac{\eta }{rmse([g]_{t})} g_{t} \text(2)δθt​=−rmse([g]t​)η​gt​(2)

    • adadelta 与 adagrad相比,在分母上做了处理,避免学习率一直减小。

    2.2.5 rmsprop

    rmsprop是adadelta的实例化,γ=0.9\gamma =0.9γ=0.9.
    e[g2]t=0.9e[g2]t−1 0.1gt2(1)e[g^{2}]_{t} = 0.9 e[g^{2}]_{t-1} 0.1g_{t}^{2} \text(1)e[g2]t​=0.9e[g2]t−1​0.1gt2​(1)
    δθt=−ηe[g2]t εgt\delta \theta_{t} = - \frac{\eta }{\sqrt{e[g^{2}]_{t} \varepsilon }} g_{t}δθt​=−e[g2]t​ε​η​gt​

    2.2.6 adam( adaptive moment estimation)

    adam,adaptive moment estimation,自适应动量评估。adam除了像adadelta和rmsprop那样保存历史指数衰梯度方的均值,还保存了历史指数衰减动量的均值
    mt=β1mt−1 (1−β1)gtm_{t}=\beta _{1}m_{t-1} (1-\beta _{1})g_{t}mt​=β1​mt−1​(1−β1​)gt​
    νt=β1νt−1 (1−β2)gt2\nu _{t}=\beta _{1}\nu_{t-1} (1-\beta _{2})g^{2}_{t}νt​=β1​νt−1​(1−β2​)gt2​
    mt,νtm_{t},\nu _{t}mt​,νt​初始化为0,在初始阶段这二者趋于0,为了解决这个问题,引入了偏差修正:m^t=mt1−β1\hat m_{t} = \frac{m_{t}}{1-\beta _{1}}m^t​=1−β1​mt​​,νt=νt1−β2\nu _{t} = \frac{\nu_{t}}{1-\beta _{2}}νt​=1−β2​νt​​
    adam的参数更新规则:
    δθt=−ην^t εm^t\delta \theta_{t} = - \frac{\eta }{\sqrt{\hat \nu_{t} \varepsilon }} \hat m_{t}δθt​=−ν^t​ε​η​m^t​

    2.2.7 adamax

    adamax将adam中的分母的计算推广到了∞\infty∞范数

    adamax更新规则

    2.3.1 牛顿法

    为了便于理解用牛顿法优化目标函数,首先介绍单个变量牛顿法,用于数值分析中求近似解。具体参考,得到的近似解的推导公式为:
    xn 1=xn−f(xn)f′(xn)x_{n 1} = x_{n} - \frac{f(x^{n})} {f^{'}(x^{n})}xn1​=xn​−f′(xn)f(xn)​

    引入 :对于多元变量,在某点处的导数变成了海塞矩阵(hesse matrix).海塞矩阵是一个多元函数二阶偏导构成的矩阵。f(x)f(x)f(x)具有二阶连续偏导,f(x)f(x)f(x)的海塞矩阵h(x)h(x)h(x)为
    h(x)=[∂2f∂xi∂xj]n×nh(x) = [\frac{\partial ^{2}f}{\partial x_{i}\partial x_{j}}]_{n\times n}h(x)=[∂xi​∂xj​∂2f​]n×n​

    考虑无约束的最优化问题
    minx∈rnf(x)\underset{x\in r^{n}}{min}f(x)x∈rnmin​f(x)

    • 思考
      1. 写出f(x)f(x)f(x)在xkx_{k}xk​处的泰勒展式f(x)=f(xk) gkt(x−xk) 12(x−xk)h(xk)(x−xk)t ...f(x)=f(x_{k}) g_{k}^{t}(x-x_{k}) \frac{1}{2}(x-x_{k})h(x_{k})(x-x_{k})^{t} ...f(x)=f(xk​)gkt​(x−xk​)21​(x−xk​)h(xk​)(x−xk​)t...
      2. 求f(x)f(x)f(x)的极值的必要条件是f′(x)=0f'(x)=0f′(x)=0,gkt h(xk)(x−xk)=0g_{k}^{t} h(x_{k})(x-x_{k})=0gkt​h(xk​)(x−xk​)=0,
      3. 牛顿法求解g(x)=0

    以下源自2

    2.3.2 拟牛顿法

    计算hk−1h^{-1}_{k}hk−1​比较麻烦,
    (b.12)或(b.13)是拟牛顿的条件

    2.3.2.1 拟牛顿法-dfp(davidon-fletcher-powell)算法

    dfp算法用gkg_{k}gk​来近似hk−1h^{-1}_{k}hk−1​


    2.3.2.2 拟牛顿法-bfgs(broyden-fletcher-goldfarb-shanno)算法

    bfgs算法用bkb_{k}bk​来近似hkh_{k}hk​


    2.3.2.3∗*∗ 拟牛顿法-broyden类算法


    pytorch中的优化器有以下一些:

  • adadelta
  • adagrad
  • adam
  • sparseadam
  • adamax
  • asgd
  • lbfgs
  • rmsprop
  • rprop
  • sgd
  • 一些解释参考

    关于adagrad算法,连个新词:激励收敛和惩罚收敛

    安利编辑公式的链接:
    在线公式编辑
    数学公式输入方法


  • ruder s . an overview of gradient descent optimization algorithms[j]. 2016. ↩︎

  • 李航. 统计学习方法[m]. 清华大学出版社, 2012. ↩︎

  • 总结

    以上是ag凯发k8国际为你收集整理的模型优化算法的全部内容,希望文章能够帮你解决所遇到的问题。

    如果觉得ag凯发k8国际网站内容还不错,欢迎将ag凯发k8国际推荐给好友。

    • 上一篇:
    • 下一篇:
    网站地图