梯度下降、随机梯度下降(SGD)与小批量梯度下降法介绍

本篇文章将会介绍梯度下降、随机梯度下降与小批量梯度下降的区别。在这里我假设我训练集的样本数量是N=1000。有关公式的知识会在另一个文章中讲出,这篇文章主要讲优化算法优缺点,因为公式还会牵扯到其他方面的知识。

1 梯度下降

首先是梯度下降,首先我先搬出它的计算公式,如下图所示。

首先先看第一个公式首先我的N=1000,也就是我的训练集一共有1000个,第一个公式是损失函数,第二个公式是计算下降梯度。我们先计算出我们1000个样本的总损失之后求平均,之后计算这个函数的导数,并按照梯度下降的方向前进,也就是使我的1000个样本的损失越来越小。

所以说它的缺点一下子就能看出来,也就是计算结果虽然很准确,我可以很准确的找出下降的方向,但是我需要计算1000个样本,函数才能下降一次,所以运行会很慢很慢,一般不会使用。

2 随机梯度下降

接下来是随机梯度下降,我还是把它的计算公式贴出来

 首先先看他俩公式不同的地方在于,随机梯度下降并没有N,其实并不是没有N,而是我一次只计算一个样本的误差,之后计算它的导数下降方向,并进行一次更新。

所以说它的优点也是很明显,与梯度下降相比同样是计算1000次样本,梯度下降只能更新一次,但是随机梯度下降却能更新1000次。但是它的缺点也出来了,也就是不准确。就是说假如我其中一个样本假如噪声太大,导致我的下降方向错误,朝着损失变大的方向更新,但是这只是个别现象,我们总的方向其实还是按着损失减少的方向进行更新。所以我认为随机梯度下降还是比梯度下降好一点。

3  小批量梯度下降

所以说我们有没有一个好的办法,既能保证准确率又能保证速度呢?这就是我们的小批量梯度下降了。先给出它的计算公式

 可以看出它的计算公式与我们的梯度下降计算公式,几乎长的一模一样了,那么它的物理意义是什么呢?我先假设M=100,其实也就是我们的batchsize,一般都是64或者128,在这里为了计算方便我取了100,它的意思就是说我一次计算100个样本的损失来进行更新,我只需要10次这样的计算就能把1000个样本全部更新完毕,也就是迭代了10次。

所以也就是结合了上面两种方法的优点,用了不太大的样本保证了速度,又能保证下降方向的准确性,我们在进行简单的训练时都是使用这种方法。

其实说了这么些,在Python中其实都已经封装好了,我们只需要进行调用即可,但是该懂得知识点还是要知道一点,忘记的时候我能查到就可以了,一定要把握好这个度。

猜你喜欢

转载自blog.csdn.net/qq_45710342/article/details/122479121