深度学习优化器

Optimizer

Backpropagation

反向传播算法的主要思想：它通过计算损失函数对模型参数的梯度，然后使用梯度下降法来更新参数，以使损失函数最小化，模型逐渐逼近最优解

实现过程包括两个关键步骤：前向传播和反向传播。前向传播计算网络输入经过各层的输出，而反向传播通过链式法则将损失函数对每个参数的梯度传递回网络，以更新参数。这种迭代的过程使得神经网络能够逐渐学习到输入与输出之间的映射关系，从而提高网络的预测性能。

反向传播算法的基本思想是将损失函数在网络中进行反向传播，从输出层向输入层逐层计算并累积梯度。具体而言，算法从网络的最后一层开始，计算输出层的误差梯度，然后将该梯度传递给前一层，依次迭代，直到传播到输入层。在每一层，根据链式法则，将当前层的梯度乘以该层的权重，然后传递给前一层。

反向传播算法的步骤如下：

正向传播：将输入数据通过网络前向传播，计算输出结果。

计算损失：将输出结果与真实标签进行比较，计算损失函数值。

反向传播：从输出层开始，根据损失函数计算输出层的梯度，然后向前传播计算每一层的梯度。

参数更新：使用梯度下降法或其他优化算法，根据计算得到的梯度更新网络参数。

重复步骤 1-4，直到达到停止条件（如达到最大迭代次数或损失函数收敛）。

Batch gradient descent (GD)

Copy θt=θ t−1−α∇θ 1 N∑i=1 N J(θ;x(i))\boldsymbol{\theta}_{\boldsymbol{t}}=\boldsymbol{\theta}_{\boldsymbol{t}-\mathbf{1}}-\alpha \nabla_{\boldsymbol{\theta}} \frac{1}{N} \sum_{i=1}^{N} J\left(\boldsymbol{\theta} ; x^{(i)}\right)θt​=θt−1​−α∇θ​N1​i=1∑N​J(θ;x(i))

N NN : all samples

Stochastic gradient descent (SGD)

Copy θt=θ t−1−α∇θ 1 BS∑i=1 BS J(θ;x(i))\boldsymbol{\theta}_{\boldsymbol{t}}=\boldsymbol{\theta}_{\boldsymbol{t}-\mathbf{1}}-\alpha \nabla_{\boldsymbol{\theta}} \frac{1}{\text{BS}} \sum_{i=1}^{\text{BS}} J\left(\boldsymbol{\theta} ; x^{(i)}\right)θt​=θt−1​−α∇θ​BS1​i=1∑BS​J(θ;x(i))

BS\text{BS}BS : mini-batch

Adagrad

Copy vt=v t−1+gt 2 θt=θ t−1−α gt vt+ϵ v_t=v_{t-1}+g_t^2\quad \theta_t=\theta_{t-1}-\alpha\frac{g_t}{\sqrt{v_t+\epsilon}}vt​=vt−1​+gt2​θt​=θt−1​−αvt​+ϵ ​gt​​

RMSProp

Copy vt=γ v t−1+(1−γ)gt 2 θt=θ t−1−α gt vt+ϵ v_t=\gamma v_{t-1}+(1-\gamma)g_t^2 \quad \theta_t=\theta_{t-1}-\alpha\frac{g_t}{\sqrt{v_t+\epsilon}}vt​=γvt−1​+(1−γ)gt2​θt​=θt−1​−αvt​+ϵ ​gt​​

Adam

Copy mt=β 1m t−1+(1−β 1)gt vt=β 2v t−1+(1−β 2)gt 2 θt=θ t−1−α mt vt+ϵ m_t=\beta_1 m_{t-1} + (1-\beta_1)g_t\qquad v_t=\beta_2 v_{t-1}+(1-\beta_2)g_t^2\qquad \theta_t=\theta_{t-1}-\alpha\frac{m_t}{\sqrt{v_t+\epsilon}}mt​=β1​mt−1​+(1−β1​)gt​vt​=β2​vt−1​+(1−β2​)gt2​θt​=θt−1​−αvt​+ϵ ​mt​​

ϵ=1 0−9,β 1=0.9,β 2=0.999\epsilon=10^{-9},\beta_1=0.9, \beta_2=0.999ϵ=10−9,β1​=0.9,β2​=0.999

Warm up:

Copy m^t=mt/(1−β 1 t)v^t=vt/(1−β 2 t)\hat{m}_t=m_t/(1-\beta_1^t)\qquad \hat{v}_t=v_t/(1-\beta_2^t)m^t​=mt​/(1−β1t​)v^t​=vt​/(1−β2t​)