【DL-CV】更高级的参数更新/优化(二)

【DL-CV】更高级的参数更新(一)算法

【DL-CV】正则化,Dropout<前篇---后篇>【DL-CV】浅谈GoogLeNet(咕咕net)segmentfault

Adagrad

全名 Adaptive gradient algorithm ,翻译过来就是“适应梯度算法”,该算法能根据梯度中偏导数的大小给不一样的偏导数以不一样的学习率,偏导数大(小)的给个小(大)的学习率,以此来减小参数更新时的摆动。学习

其核心是引入一个参数对历次的梯度的平方进行累加,在更新阶段,基础学习率将除以这个参数的开方。这样大梯度会由于积累大而分得小的学习率,小梯度由于积累小而分得较大的学习率
$$s_{t+1} = s_{t}+\nabla_x L(x_t)^2$$
$$x_{t+1}=x_t-{\alpha\over \sqrt {s_{t+1}}+\epsilon}\nabla_x L(x_t)$$
其中$\epsilon$是一个很小的数,为了防止除法时分母出现零,通常设为1e-4到1e-8之间。下面是代码实现
clipboard.pngspa


缺点:梯度平方的累计值在训练过程当中不断增大,做为分母被除了之后学习率衰减过快,更新变慢翻译

RMSprop

RMSprop 是 Geoff Hinton 提出的一种自适应学习率方法,目的是为了解决 Adagrad 学习率急剧降低的问题。其在对梯度平方进行累加时会进行衰减处理(实际上是指数加权平均),解决学习率急降的问题的同时又保留了 Adagrad 调节学习率的优势
$$s_{t+1} = \beta s_t +(1-\beta)\nabla_x L(x_t)^2$$
$$x_{t+1}= x_t-{\alpha\over \sqrt {s_{y+1}+}\epsilon}$$
$\gamma$ 一般为0.9/0.99
clipboard.png3d


以上两种方法解决了SGD的问题2️⃣blog

Adam

两种动量方法经过引入“速度”解决了问题1️⃣;Adagrad 和 RMSprop 经过引入“梯度平方”解决了问题2️⃣,各有千秋。为什么不把二者结合起来而后一次知足两个愿望呢?这么一想,Adam就出来了。ip

Adam 至关于 RMSprop + Momentum,他除了像 RMSprop 同样存储了过去梯度平方的指数衰减平均值 ,也像 momentum 同样保持了过去梯度的指数衰减平均值:
$$v_{t+1} = \beta_1v_t + (1-\beta_1)\nabla_x L(x_t)$$
$$s_{t+1} = \beta_2s_t + (1-\beta_2)\nabla_x L(x_t)^2$$
若是 v 和 s 被初始化为 0 向量,那它们就会向 0 偏置,因此还须要误差校订来抵消这些误差:
$$\hat v_{t+1} = {v_{t+1}\over 1-\beta_1^{t+1}}$$
$$\hat s_{t+1} = {s_{t+1}\over 1-\beta_2^{t+1}}$$
最后的更新就是:
$$x_{t+1}=x_t-{\alpha \hat v_{t+1}\over\sqrt{\hat s_{t+1}}+\epsilon}$$
推荐值$\beta_1=0.9$,$\beta_2=0.99$,$\alpha=10^{-3}/5·10^{-4}$代码实现:
clipboard.pngget


Adam真的是一个很是棒的算法,实践代表,Adam 比其余适应性学习方法效果要好,几乎成为标配默认的算法啦。因此长篇大论了这么久以后的结论是——推荐首选Adamit

相关文章
相关标签/搜索