反向传播算法
反向传播算法本质上是一个链式求导法则的应用。
链式法则
反向传播算法
首先对公示拆分为几个基本函数;
线上为函数的值,线下为原函数对其求导后的值。
Sigmoid函数举例
各种优化算法的变式
梯度下降法的变式
SGD
每次使用一批数据进行梯度计算,但不是计算全部数据的梯度。
易于跳出局部极小点。
在运行代码时,input与out都是含多个样本的一个Tensor。那么Loss函数对这个Tensor如何操作呢?
我认为是对out和target的每一个样本点进行求和或连乘操作,得到一个实数。
那么SGD又是如何操作的呢?
SGD只选取了这些样本中的一个样本进行更新,并不是每个都取一遍求平均之类的操作。
Momentum
在梯度下降的同时,增加动量。
高处滑落的势能转化为了平地的动能,用惯性帮助其跳出局部极小点。
在之前的学习当中也讲过。
Adagrad
自适应学习率的方法。
学习率在不断变小,且受到每次计算出来的梯度影响。根号十分重要,去掉的话,影响十分大。epsilon是一个平滑参数,通常设置为十的负四次方到十的负八次方,这是为了避免分母为0.
缺点:在某些情况下一直递减的学习率并不好,会造成学习过早停止。
RMSprop
自适应学习率的改进方法。
公式为:
alpha是一个衰减率,不会将前面所有的梯度平方求和,而是通过衰减率将其变小。越靠前面的梯度对自适应的学习率影响越小,有效避免了学习率递减太多的问题。
Adam
在RMSprop中加上Momentum。
常用Adam+Momentum或者SGD+Momentum
问题:Adagrad和RMSprop的数学公式需再进一步推导一下。