深度学习理论——随机梯度下降法(SGD) & 反向传播

大家好,一直在用深度学习,但是感觉理论并不扎实,打算开始补点理论基础,在CSDN上记录下来。

今天介绍随机梯度下降法和反向传播,首先介绍梯度下降法。

1.梯度下降法

梯度下降法是从初始值开始,向函数上当前点对应梯度的反方向的规定步长的距离点进行迭代搜索,最终得到最小值的过程。公式简易推导如下:

深度学习理论——随机梯度下降法(SGD) & 反向传播_第1张图片

更直观的图像表示如图所示:

深度学习理论——随机梯度下降法(SGD) & 反向传播_第2张图片

这是学习率为0.001,迭代两百次的示意图,当学习率设的更大,可能会迭代收敛更快,但也可能会直接越过这个最小值导致发散。

2.随机梯度下降法

梯度下降法虽然有效,但是每次迭代都要对所有样本进行计算,当样本量很大的时候,收敛速度很慢。在此基础上提出的随机梯度下降法每次只考虑一个样本,这使得他每次迭代方向不一定都是模型整体最优化的方向,因此,在深度学习中,仍然需要遍历所有样本,每遍历一遍我们称为一轮(epoch)。在此基础上我们又做了改进,改为每次选取一批样本进行计算,利用这批样本的梯度信息完成一次模型更新。这一批数据我们称为一个batch。这样有效的提高了收敛效率也避免了模型陷入局部最优。

这里补充一点,除了随机梯度下降法,还有一种牛顿法可以拟合寻找最优路径的过程

牛顿法的迭代公式为Xn+1 = Xn -f'(Xn)/f"(Xn)

可以看到牛顿法不仅需要计算一阶导还需要计算二阶导,计算比较麻烦但它不仅关注哪个方向梯度下降最快还关注走了一步之后梯度是否会变得更大,因此拟合效果更好,收敛速度也更快。

3.反向传播

我之前一直不太了解反向传播的具体步骤,现在来简单说一下,在前向传播至最后一层得到损失函数z以后,用这个损失函数z对本层的w和x求偏导。上一层的w等于上一层的w-学习率*z对本层w的偏导,以此来更新模型,直到更新到最后一层完成一轮。而z对x的偏导是用来向前传递误差的,后面的层再根据这个误差来更新w。具体公式就不贴了,在很多地方可以找到。

针对反向传播再补充一点,由于其学习性能很好,因此很容易陷入过拟合的问题中,我们可以使用1.早停(训练集分为训练集和验证集,一边训练一边验证误差,如果误差增加就停止训练并输出最低误差时的网络)和2.正则化(控制网络复杂度)的方法来抑制过拟合,这几种方法在后面的博客中均有介绍。

好了,我们下期见!

你可能感兴趣的:(深度学习)