最近在学习提高MMD算法,其中算法中有一些细节的知识,是关于mini-batch中基于四元组实现MMD损失的计算,于是就仔细地学习了下,批量梯度下降,随机梯度下降,小批量随机梯度下降的区别和比较,参考网上一些大神的博客,自己总结了一下。
BGD是最开始采取的方法,是指每一次反向传播中都将全部的样本进行处理计算梯度,更新权重。缺点是这样的方法造成处理数据量大,收敛慢;另外在数据量很大的时候,内存的要求很高。
SGD是指采用随机采用的方法,每次使用一个样本数据进行计算梯度。优点是,开始收敛速度快;缺点是一个样本往往不会一直向着整体样本的梯度方向,这样算法后期会有变慢。
MSGD是采取折中的方法,将随机采样一个批量样本进行计算梯度,保证算法收敛的同时,收敛速度也可以很快。
—————————————————————————————————————————————————————————————————————————————
下文是转载博客的文章,与大家分享:
假设我们提供了这样的数据样本(样本值取自于y=3*x1+4*x2):
x1 x2 y 1 4 19 2 5 26 5 1 19 4 2 29
x1和x2是样本值,y是预测目标,我们需要以一条直线来拟合上面的数据,待拟合的函数如下:
——1式
我们的目的就是要求出θ1和θ2的值,让h(θ)尽量逼近目标值y。
这是一个线性回归问题,若对线性回归有所了解的同学就知道:利用最小二乘法则和梯度下降法可以求出两个参数,而深度学习也同样可以利用这两种方法求得所有的网络参数,因此,在这里用这个数学模型来解释BGD、SGD、MSGD这几个概念。
我们首先确定损失函数:
——2式
其中,J(θ)是损失函数,m代表每次取多少样本进行训练,如果采用SGD进行训练,那每次随机取一组样本,m=1;如果是批处理,则m等于每次抽取作为训练样本的数量J(θ)是参数,对应(1式)的θ1和θ2。求出了θ1和θ2,h(x)的表达式就出来了:
——3式
我们的目标是让损失函数J(θ)的值最小,根据梯度下降法,首先要用J(θ)对θ求偏导:
——4式
由于是要最小化损失函数(2式),所以参数θ按其负梯度方向来更新:
——5式
BGD(Batch gradient descent)批量梯度下降法:每次迭代使用所有的样本
每次迭代都需要把所有样本都送入,这样的好处是每次迭代都顾及了全部的样本,做的是全局最优化