大众的网站建设,宿州专业网站建设,温州市手机网站制作多少钱,wordpress换头像不显示不出来深度学习中的优化算法采用的原理是梯度下降法#xff0c;选取适当的初值params#xff0c;不断迭代#xff0c;进行目标函数的极小化#xff0c;直到收敛。由于负梯度方向时使函数值下降最快的方向#xff0c;在迭代的每一步#xff0c;以负梯度方向更新params的值#…深度学习中的优化算法采用的原理是梯度下降法选取适当的初值params不断迭代进行目标函数的极小化直到收敛。由于负梯度方向时使函数值下降最快的方向在迭代的每一步以负梯度方向更新params的值从而达到减少函数值的目的。
Gradient descent in deep learning Optimizer
class Optimizer:优化器基类默认是L2正则化def __init__(self, lr, weight_decay):self.lr lrself.weight_decay weight_decaydef step(self, grads, params):# 计算当前时刻下降的步长decrement self.compute_step(grads)if self.weight_decay:decrement self.weight_decay * params# 更新参数params - decrementdef compute_step(self, grads):raise NotImplementedErrorSGD
随机梯度下降 θtθ−η⋅gt\theta_t \theta-\eta \cdot g_t θtθ−η⋅gt 每次随机抽取一个batch的样本进行梯度下降 对学习率敏感太小收敛速度很慢太大会在极小值附近震荡 对于非凸函数容易陷入局部最小值或鞍点
class SGD(Optimizer):stochastic gradient descentdef __init__(self, lr0.1, weight_decay0.0):super().__init__(lr, weight_decay)def compute_step(self, grads):return self.lr * gradsSGDm
在SGD中加入动量momentum模拟是物体运动时的惯性即更新的时候在一定程度上保留之前更新的方向同时利用当前batch的梯度微调最终的更新方向。这样一来可以在一定程度上增加稳定性从而学习地更快并且还有一定摆脱局部最优的能力。 υtγυt−1gtθtθt−1−ηυt\upsilon_t \gamma \upsilon_{t-1} g_t \qquad \theta_t\theta_{t-1} - \eta \upsilon_t υtγυt−1gtθtθt−1−ηυt
gt是当前时刻的梯度vt是当前时刻参数的下降距离带动量的小球滚下山坡可能会错过山谷
class SGDm(Optimizer):stochastic gradient descent with momentumdef __init__(self, lr0.1, momentum0.9, weight_decay0.0):super().__init__(lr, weight_decay)self.momentum momentumself.beta 0def compute_step(self, grads):self.beta self.momentum * self.beta (1 - self.momentum) * gradsreturn self.lr * self.betaAdagrad
θtθt−1−η∑i0t−1(gi)2gt−1\theta_t\theta_{t-1} - \frac{\eta}{\sqrt{\sum^{t-1}_{i0}{(g_i)^2}}}g_{t-1} θtθt−1−∑i0t−1(gi)2ηgt−1
自适应调节学习率对低频的参数做较大的更新对高频的做较小的更新也因此对于稀疏的数据它的表现很好很好地提高了 SGD 的鲁棒性缺点是分母梯度的累积最后梯度消失
class Adagrad(Optimizer):Divide the learning rate of each parameter by theroot-mean-square of its previous derivativesdef __init__(self, lr0.1, eps1e-8, weight_decay0.0):super().__init__(lr, weight_decay)self.eps epsself.state_sum 0def compute_step(self, grads):self.state_sum grads ** 2decrement grads / (self.state_sum ** 0.5 self.eps) * self.lrreturn decrementRMSProp
指数滑动平均更新梯度的平方为解决Adagrad 梯度急剧下降而提出 υ1g02υtαυt−1(1−α)(gt−1)2\upsilon_1 g_0^2 \qquad \upsilon_t \alpha\upsilon_{t-1} (1-\alpha)(g_{t-1})^2 υ1g02υtαυt−1(1−α)(gt−1)2
θtθt−1−ηυtgt−1\theta_t\theta_{t-1} - \frac{\eta}{\sqrt{\upsilon_t}} g_{t-1} θtθt−1−υtηgt−1
class RMSProp(Optimizer):Root Mean Square Prop optimizerdef __init__(self, lr0.1, alhpa0.99, eps1e-8, weight_decay0.0):super().__init__(lr, weight_decay)self.eps epsself.alpha alhpaself.state_sum 0def compute_step(self, grads):self.state_sum self.alpha * self.state_sum (1 - self.alpha) * grads ** 2decrement grads / (self.state_sum ** 0.5 self.eps) * self.lrreturn decrementAdam
SGDm和RMSProp的结合Adam 算法通过计算梯度的一阶矩估计和二阶矩估计而为不同的参数设计独立的自适应性学习率。
SGDm
θtθt−1−mtmtβ1mt−1(1−β1)gt−1\theta_t\theta_{t-1} - m_t \qquad m_t \beta_1 m_{t-1} (1-\beta_1)g_{t-1} θtθt−1−mtmtβ1mt−1(1−β1)gt−1
RMSProp
θtθt−1−ηυtgt−1\theta_t\theta_{t-1} - \frac{\eta}{\sqrt{\upsilon_t}} g_{t-1} θtθt−1−υtηgt−1
υ1g02υtβ2υt−1(1−β2)(gt−1)2\upsilon_1 g_0^2 \qquad \upsilon_t \beta_2\upsilon_{t-1} (1-\beta_2)(g_{t-1})^2 υ1g02υtβ2υt−1(1−β2)(gt−1)2
Adam
θtθt−1−ηυt′εmt′\theta_t \theta_{t-1} - \frac{\eta}{\sqrt{\upsilon_t\varepsilon}} m_t θtθt−1−υt′εηmt′
mt′mt1−β1tvt′vt1−β2tβ10.9β20.999m_t \frac{m_t}{1-\beta_1^t} \qquad v_t \frac{v_t}{1-\beta_2^t} \qquad \beta_10.9 \quad \beta_20.999 mt′1−β1tmtvt′1−β2tvtβ10.9β20.999
class Adam(Optimizer):combination of SGDm and RMSPropdef __init__(self, lr0.1, betas(0.9, 0.999), eps1e-8, weight_decay0.0):super().__init__(lr, weight_decay)self.eps epsself.beta1, self.beta2 betasself.mt self.vt 0self._t 0def compute_step(self, grads):self._t 1self.mt self.beta1 * self.mt (1 - self.beta1) * gradsself.vt self.beta2 * self.vt (1 - self.beta2) * (grads ** 2)mt self.mt / (1 - self.beta1 ** self._t)vt self.vt / (1 - self.beta2 ** self._t)decrement mt / (vt ** 0.5 self.eps) * self.lrreturn decrement我平时做视觉任务主要用SGDm和Adam两个优化器感觉带正则化的SGDm的效果非常好然后调一下学习率和衰减策略 参考资料
torch.optim — PyTorch documentation tinynn: A lightweight deep learning library