编程问答
模型优化算法 -凯发ag旗舰厅登录网址下载
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),误差函数是交叉熵误差函数,批量梯度下降法的计算过程如下:
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)=m1i=1∑m(l(y^i),yi)=−m1i=1∑m(yilogy^i(1−yi)log(1−y^i))
2.1.2 随机梯度下降
单个样本输入后,计算得到损失后,更新模型参数。
以逻辑斯蒂回归模型为例,训练集有m个样本x(x1,x2,...,xm)x({x_{1}},{x_{2}},...,{x_{m}})x(x1,x2,...,xm),误差函数是交叉熵误差函数,随机梯度下降法的计算过程如下:
2.1.3 mini-batch梯度下降
根据小批量n个样本的损失,更新模型参数。
以逻辑斯蒂回归模型为例,训练集有m个样本x(x1,x2,...,xm)x({x_{1}},{x_{2}},...,{x_{m}})x(x1,x2,...,xm),误差函数是交叉熵误差函数,批量梯度下降法的计算过程如下:
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)=n1i=1∑n(l(y^i),yi)=−n1i=1∑nyilogy^i(1−yi)log(1−y^i)
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=▽θtj(θ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−10.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=β1mt−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−β1mt,ν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∈rnminf(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})=0gkth(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中的优化器有以下一些:
一些解释参考
关于adagrad算法,连个新词:激励收敛和惩罚收敛
安利编辑公式的链接:
在线公式编辑
数学公式输入方法
ruder s . an overview of gradient descent optimization algorithms[j]. 2016. ↩︎
李航. 统计学习方法[m]. 清华大学出版社, 2012. ↩︎
总结
以上是凯发ag旗舰厅登录网址下载为你收集整理的模型优化算法的全部内容,希望文章能够帮你解决所遇到的问题。
如果觉得凯发ag旗舰厅登录网址下载网站内容还不错,欢迎将凯发ag旗舰厅登录网址下载推荐给好友。
- 上一篇:
- 下一篇: