上次在卷积神经网络中提到的梯度下降算法,很多人一脸懵逼,今天咱们详细的聊一聊梯度下降算法,首先提提这个算法在机器学习领域的应用,用来递归性的逼近最小偏差模型,什么是最小偏差模型了,就是预测值和真实值之前的差。在训练模型阶段,我们想训练出假定模型的参数,这些参数如何得来的,就可以利用这个下降算法,把参数当成未知量,当最小偏差模型最小的时候的参数就是我们想要的,因为此时预测值和真实值最接近。下面我给出损失函数,也就是目标函数,也就是最小化的那个函数:
i代表数据个数,y代表样本的结果值(就是实际问题中类别等),x表示数据的属性特征,h表示根据特征预测出来的结果值。当他们的差值越接近,那就是预测的越好。这里我们先不考虑过拟合的问题,后面我会讲。cita想求的模型参数。如何来求得我们想要的参数,当J最小的时候。下面给出一张经典的图,cita和J的分布图:
我们想找的就是这个图形最下面的那个点时的cita我们要如何做呢?
我们随机的初始化cita。相当于选一个开始点。
然后,我们沿着负梯度的方向迭代运算,更新后的cita可以让J变小。图上的每一个叉就是一个迭代过程,每次都会比上次的小。公式如下:
每次迭代的运算这里应该有人会问两个问题,第一个阿尔法怎么确定,第二个迭代后的cita算得J可能不是那个平面上。第一个问题,这个阿尔法是步长,也是学习率。这个可以用来控制你下降的速度,但这个数值并不是越大越好,也不是越小越好,太大,可能下降的过程中错过的最小点,太小,下降的速度太慢,导致运算量过大,这个阿尔法是根据具体情况人为设定的。第二个问题,下降过程中迭代算得的J数值可能不在平面上,迭代的结果可能出现在真实J的上面或者下面,这个是会的,但是就在这个真实J附近,每次的计算都是根据此时的cita的梯度计算的,这个点并不一定很准确的出现在J上,但也就在他附近。
对于梯度方向,下面给出梯度方向的推导:
梯度也就是这个未知的求导在梯度下降算法中,如果样本不多,那可以很方便的计算所有样本的提取,如果太多,计算就很费时间,下降算法总的有批量下降算法(BGD),随机下降算法(SGD),折中的(MBGD)。下面一一说明:
批量梯度下降算法:
缺点是很明显的,我刚刚说的,如果样本很多,那么训练过程就会很慢。随机梯度下降算法:
为了解决样本多的情况,这里只用样本中的一部分来计算,比如用1/10的样本计算,但是这种方法准确度会下降折中的方法,mini-batch梯度下降算法:
若干个样本的平均梯度作为更新的方向不是把每个梯度都作为更新方向,去他们的平均值作为更新方向。
网友评论