深度学习基础(二)梯度下降算法

作者: 049f641d526e | 来源:发表于2017-08-01 11:44 被阅读133次

    上次在卷积神经网络中提到的梯度下降算法,很多人一脸懵逼,今天咱们详细的聊一聊梯度下降算法,首先提提这个算法在机器学习领域的应用,用来递归性的逼近最小偏差模型,什么是最小偏差模型了,就是预测值和真实值之前的差。在训练模型阶段,我们想训练出假定模型的参数,这些参数如何得来的,就可以利用这个下降算法,把参数当成未知量,当最小偏差模型最小的时候的参数就是我们想要的,因为此时预测值和真实值最接近。下面我给出损失函数,也就是目标函数,也就是最小化的那个函数:

    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梯度下降算法:

    若干个样本的平均梯度作为更新的方向

    不是把每个梯度都作为更新方向,去他们的平均值作为更新方向。

    相关文章

      网友评论

        本文标题:深度学习基础(二)梯度下降算法

        本文链接:https://www.haomeiwen.com/subject/hbfjlxtx.html