关于神经网络的训练与优化的一些想法。Thoughts about optimization & training in Neural Networks--back propagation & SGD

一个神经网络是一个遵循连接原则级联构成的函数逼近器(function approximation)。这个function将输入x转化成输出y。以image classification为例,x是图片,y是labels。

对于一个神经网络的训练,是指通过trail-and-error来获得网络中所有参数w的最优值。当网络中所有参数都取得最优值时,该网络针对某个损失函数可以在给定样本集上得到最低loss。

这个训练,也即参数估计,的过程,就是一个目标函数为minimize loss function的优化过程。解优化的工具有很多,针对凸优化和非凸优化又可进行分类。由于神经网络的参数较多以及其强非线性,导致其所构成的优化问题往往非凸(non-convex optmization)。解这种非凸优化的工具就是gradient descent(GD).注意,我们之所以要“估计”参数,即approximate the optimal set of weights,而不是直接求解出这组参数(analytical solution:令loss funciton的导数函数(if convex)=0,求出所有wi),是因为 it is too complex to find the perfect analytical solution of all w with all the samples. Thus we find approximated solutions by an (numerical solution) iterative process-----GD optmization.

GD是一个迭代循环,trail-and-error,试错的过程。对参数的估计和优化也是不积跬步无以至千里,每次update都是微调,积少成多。GD每次循环的操作有两步:1. 计算网络中每个参数对应的梯度2. 按照该参数负梯度的方向更新每个参数

  1. 其中第一步,即参数梯度的计算,用到的计数就是back propagation(BP)。BP就是以loss function为起点,one operation at a time地依据复合函数求导的chian rule,将在起点处计算的gradient慢慢地反推流淌,流入网络的每一个参数处。假设网络中含有10K个参数w,那么在BP时,每一个wi处计算得到的流入的梯度gi只是一个可正可负的实数;而这10K个gi组成的大vector G则是一个10K维的向量。这个向量定义在一个10K维的w(参数)空间。在这个空间中,损失函数L(w)作为BP的梯度起点,会构成一个优化曲面(convex loss function会构成一个只有一个全局最优的碗形曲面,non-convex则会额外含有很多local optimal)。
  2. 在得到每个参数上的梯度gi后,即得到了梯度矩阵G,我们就进行第二步,参数更新。GD顾名思义,是沿着梯度下降的方向(即负梯度方向)进行每一次参数更新。梯度下降的几何解释就是在Loss function定义在w空间的曲面上,在某一点沿着该点梯度下降的方向微调一次。这个“点”从何而来呢?由于是10K维参数空间中的点。那么一个点就对应一个10K vector,这个vector就是在此次update开始时我们网络所有参数wi的现状,也就此刻我们在空间中所处的位置。因此,10K的梯度vector G就指引了在10K空间中的这个点下降的方向。10K对10K,乐哉。

好,综上,我们了解了BP与GD的关系:GD是一个优化算法,BP是一种梯度计算流程。在神经网络的训练中,BP是GD中的一个步骤。

那么为什么BP适用于在神经网络ANN中计算gradient呢?这是因为ANN的连接属性所构成的acyclic graph很适合与chain rule的实施。

接下来,介绍一下GD的两大热门问题:

1. GD的分类;    2. GD第二步,即参数update的不同策略(即不同优化器)。

1. GD的分类:依据每次BP时,BP起点处(即loss function)计算梯度所依据的样本数量的不同而分类。

GD分为Batch GD(BGD),Stochastic GD(SGD),还有Mini-batch GD(MBGD)。在神经网络通过GD进行训练时还会牵扯到的概念包括:

  • epoch(把训练集中所有的样本都遍历一遍算是完成一个epoch,可以理解为训练集上的一轮);
  • batch size(一个mini-batch中随机采样多少个样本);
  • iteration,itrs(完成一个mini-batch的训练即完成了一个iteration。一个epoch包含多个iteration)。
  1. Batch GD:用整个训练集中的所有样本各自计算所得的loss求平均,并依据此平均值计算BP gradient的起点来进行一次反传update;一个epoch只是一次update,更新太慢,参数update不够频繁,不符合少量多次的原则。而且计算所得的gradient estiamte的值太过保守,那些少量但是难的sample所产生的大的畸变的gradient,被无情地average掉了,所以hard sample的特殊贡献被抹杀了。然而,这些hard sample才是最应该被着力update的东西(关于此,有专门的focal loss等hard smaple mining技术)。另外,由于所得梯度很平庸无奇,所以在local optiam的脱困能力不佳。
  2. Stochastic GD:随机选择训练集中的一个样本计算loss,并依据此平均值计算BP的graident起点进行一次反传update;一个epoch会进行N次update,N是训练集大小。把每个sample的个性无限放大。让每个sample可以独立地按照自己的loss结果取更新参数,让网络学会善待自己,但某些时候这也就产生了noisy gradient,因为有些bad sample并不有助于网络训练。这时所得梯度有很强的fluctuation,增强了local optima的脱困能力,但是有可能出现在optima的oscillation。
  3. Mini-batch GD:随机选择batch size个样本,分别计算loss后取平均,并依据此平均值计算BP的gradient的起点来进行一次反传update;一个epoch进行N/batch size次update。取上述两家之长。

                                                     

上图中蓝线是BGD优化迭代的过程,红线是SGD。可见BGD更稳健而SGD更躁动。

注意,无论是何种GD,即无论是用整个training set的全部samples,还是用一个batch的sample,还是只用一个sample,GD都是用BP的手段在每次update时获得了一个网络中梯度的estimates(gradient estimates)。这就反映了神经网络训练的概率性。也即,BP,可以理解为一个unbiased/biased gradeint estimator。

2. GD参数更新的不同策略:与GD分类无关,只关于learning rate\Deltaθ的计算有关。

GD的参数更新其实就是一条简单的公式:\varepsilon是learning rate,g_{wi}^{t+1}是参数wi在第t+1次BP之后得到的它的gradient

                                                                              {\color{Red} }\theta_{wi}^{t+1}=\theta_{wi}^{t}+\Delta \theta{\color{Red} }_{wi}^{t+1}

                                                                               \Delta \theta_{wi}^{t+1}=-\varepsilon \cdot g_{wi}^{t+1}

有如下两个思路来对上公式中的\Delta \theta_{wi}^{t+1}进行进化与改进:注意,两个思路的底层核心都是accumulating gradient

(1). accumulating gradient directly for update--->Momentum, Nesterov; 

(2). accumulating gradient for adaptive learing rate--->AdaGrad, RMSProp, Adam(adam优化器是1和2的融合)

(1)Accumulating gradient directly for update:所有wi公用同样的learnig rate\varepsilon

重点讲Momentum,Nesterov略。

原始的GD update有几个缺点导致converge比较慢:1。 在优化曲面的谷底时梯度较小,所以每次update幅度(step size)较小导致overall所需的update次数增多;2. 在SGD时,当gradient出现fluctuation时,多次update之间左右摇摆,互相损伤,友军火力。

综上,提出不是每次update仅仅依靠此次BP计算所得的gradient,而是用一个整合了的历史积累gradient进行update:

                                                                         \Delta \theta_{wi}^{t+1}=v \leftarrow \alpha v-\varepsilon\cdot g_{wi}^{t+1}

公式中v(“velocity”)是对自身的一次exponentially decaying moving average of negative gradeints的计算。然后用v值直接update参数。α参数控制accumulating的力度,越大说明积累地越充分。往往α设定为0.9。

                                                      

如上图,每次momentum的update相当于是积累的gradient的update和本次计算所得gradient的update一次组合,可见绿线所示的组合update比其余两个的模长(step size)都要大,可以理解为加快了参数更新

具体地,模长的变化为:

                                                                         \varepsilon \left \| g \right \| \rightarrow \varepsilon \frac{\left \| g \right \|}{1-\alpha }

当α=0.9时,Momentum的每次update的step size是普通GD的10倍

(2)Accumulating gradient for adaptive learing rate.

weight即feature:针对不同的feature(即weight)采用不同的(缩小的)learning rate。在CNN中,一个conv filter就是一个学到的feature template,所以一组weight就对应一个feature。DNN中,一个weight就对应一个neuron,即一个feature。当某个weight在某次BP时gradient较大,说明其对应的这个feature在这个或这组sample上产生了较大作用(loss),所以应当有针对性地对这个feature(weight)进行精细优化调整。

               

weight = feature的理论直观理解如上图。左图中曲面上梯度分布均匀,表明各个weight(即空间的各个基上的分量)相等的重要性,因此在某个等梯度线上任何位置到到optima的距离相等,所以用相等的step size可以同时到达optima;右图,某些weight分量上梯度较大,其他则较小,导致优化曲面不对称。从同一个椭球面的长轴处(该方向weight分量的梯度较小)比短轴处(该处weight分量的梯度较大)到达optima的距离较远,所以需要较大的step size;而短轴处则需要较小的learning rate,因为此处自身的g就大,如果\varepsilon也很大易导致fluctuation

综上,我们希望g大的weight分量的learning rate \varepsilon 相应减小。这就是adaptive learning rate的实质。具体地,learning rate按照g的平方减小。

AdaGrad:如下公式,r时accumulating factor over g的平方。

                                                                                         {\color{Red} r }= {\color{Red} r} + (g_{wi}^{t+1})^{{\color{Red} 2}}

                                                                           \Delta \theta _{wi}^{t+1}=-(\frac{1}{\delta + \sqrt {\color{Red} r}})\cdot \epsilon \cdot g_{t+1}^{wi}

AdaGrad比较适合与convex optimization。在non-convex的情况下,AdaGrad对learning的削减过于激烈。

所以,在non-convex的情况下更适合与用RMSProp。

RMSProp:与AdaGrad直接accumulate g平方不同,RMSProp更温和地accumulate an exponentially decaying avergae of g square

                                                                           {\color{Red} r }= {\color{Blue} \rho}\cdot {\color{Red} r} +(1-{\color{Blue} \rho})\cdot (g_{wi}^{t+1})^{{\color{Red} 2}}

                                                                         \Delta \theta _{wi}^{t+1}=-(\frac{1}{\delta + \sqrt {\color{Red} r}})\cdot \epsilon \cdot g_{t+1}^{wi}与AdaGrad一样。

 

Adam = Adaptive + momentum

adam优化器实际上时RMSProp + Momentum with bias correction terms for the first and second moments。

总结所有优化器,其实就是在\Delta \theta上做文章。

                                                                                       

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章