优化方法:

以下的$x$带到神经网络中就是bp中的$w$

1.梯度下降法

SGD(随机梯度下降):

在每个给定的n个训练集中,选择第i个数据集的$\triangledown f_i(x) $来更新$x$(也就是样本中随机均匀采样一个样本来求梯度),因为

$$ E_i\triangledown f_i(x)=\frac{1}{n}\sum^n_{i=1}\triangledown f_i(x)=\triangledown f(x) $$

BGD小批量随机梯度下降:

SGD的进化,在每轮迭代中随机均匀采样多个样本来组成一个小批量,然后使用这个小批量来计算梯度。

Nesterov动量法:

利用小批量随机梯度下降选出$g_t$,动量超参数$\gamma$满足$0\le\gamma<1$,且当$\gamma = 0$时,动量法等价于小批量随机梯度下降

$$ \begin{gathered} v_0=0 \\ v_t=\gamma v_{t-1}+\eta_tg_t \\ x_t=x_{t-1}-v_t \end{gathered} $$

$\gamma$是为了指数加权平均,上式中$v_t$可以改写成

$$ v_t=\gamma v_{t-1}+(1-\gamma)(\frac{\eta_t}{1-\gamma}g_t) $$

$v_{t-1}$可以不断扩展,然后可以认为t-?时刻以后的高项次可以舍弃;

其中$\gamma$可由Epoch确定:

$$ Epoch=\frac{1}{1-\gamma} $$

这里的Epoch可以作为上面的$t$时刻来看,可看出,距t时刻越久之前对$v_t$的影响就越小,在这之后的epoch则对梯度基本没有影响了,$\gamma$越大,有影响的epoch就越

(一般pyroch中的SGD都是指这个)

梯度下降法缺点:因为各维度的学习率一致,会导致自变量在梯度值较小的维度上迭代过慢

2.自适应梯度下降:

牛顿法:

设$x+ϵ$为向到达最小极值点的位置,使$f(x_{t-1}+\epsilon)$在$f(x_{t-1})$处泰勒展开有

$$ f(x_{t-1}+\epsilon)=f(x_{t-1})+ϵ^T\triangledown f(x_{t-1})+\frac12\epsilon^T\triangledown^2f(x_{t-1})\epsilon+O(||\epsilon||^3) $$

对上式求最小值,

于是对$ \epsilon $求导并且取$f'(x_{t-1}+\epsilon)=0$,忽略不重要的高阶项可得

$$ 0=\triangledown f(x_{t-1})+\epsilon \triangledown^2f(x_{t-1}) $$

设dxd的矩阵Hessian为$ H=\triangledown^2f(x)$

$$ \epsilon=-H^{-1}\triangledown f(x_{t-1}) $$

将$x=x_{t-1} $带入后,算出$H^{-1}$和$\triangledown f(x_{t-1})$的值后,更新$x_t$的值

$$ x_t=x_{t-1}+\epsilon $$

因此只要给出$\triangledown f(x_{t-1})$和$H$,就可以不断迭代算法寻找合适的$ \epsilon$.

但是缺点是如果二阶导数是负数,则会导致$H$为负数,一般解决的方法是对Hessian矩阵求绝对值。

还有不是正定不可逆的情况,以及每次迭代都要计算dxd的H矩阵等的问题

AdaGrad

利用BGD或者SGD算出的$g_t $:

$$ \begin{gathered} s_t=s_{t-1}+g_t\odot g_t \\ x_t=x_{t-1}-\frac{\eta}{\sqrt{s_t+\epsilon}} \odot g_t \end{gathered} $$

$\odot $是点乘,$ \epsilon$是超参,可以使得不同维度的参数有自己的学习率,偏值越大下降越快。

缺点是后期下降率会过慢

RMSprop:

解决AdaGrad后期下降过慢的问题

动量法中的指数加权移动平均和AdaGrad结合

$$ \begin{gathered} s_t=\gamma s_{t-1}+(1-\gamma) g_t\odot g_t \\ x_t=x_{t-1}-\frac{\eta}{\sqrt{s_t+\epsilon}} \odot g_t \end{gathered} $$

AdaDelta:

也是AdaGrad的一种改进,但是他不用学习率$\eta$

$$ \begin{gathered} s_t=\rho s_{t-1}+(1-\rho) g_t\odot g_t \\ g'_t=\sqrt{\frac{\triangle x_{t-1}+\epsilon}{s_t+\epsilon}}\odot g_t \\ x_t=x_{t-1}-g'_t \end{gathered} $$

其中,$\triangle x$初始为0,后续的也使用指数加权来维护:

$$ \triangle x_t=\rho\triangle x_{t-1}+(1-\rho)g'_t\odot g'_t $$

可见该算法的学习率实际使用了$\sqrt{\triangle x_{t-1}}$来取代学习率

Adam

是RMSprop+动量法的结合

首先是动量法里的$v_t$,这里$0 \leq \beta_1<1$调节范围一般是0.9,0.99...

$$ v_t=\beta_1 v_{t-1}+(1-\beta_1)g_t $$

然后是RMSprop中的$ s_t$

$$ s_t=\beta_2 s_{t-1}+ (1-\beta_2)g_t\odot g_t \\ $$

可见都加上了加权指数

然后由于设$v_t$和$s_t$初始为0,当t较小时,有可能会使得这两个数值特别小,于是使用偏差修正使得:

$$ \begin{gathered} \hat{v}_t=\frac{v_t}{1-\beta^t_1} \\ \hat{s}_t=\frac{s_t}{1-\beta^t_2} \end{gathered} $$

接下来使用学习率计算偏差:

$$ g'_t=\frac{\eta\hat{v}_t}{\sqrt{\hat{s}_t}+\epsilon} $$

$\epsilon$一般取10e-3—10e-15,$\eta$是学习率,这样每个维度的元素就有了自己的学习率

$$ x_t=x_{t-1}-g'_t $$

如果对你有帮助就太好了)))