深度学习与物体检测每日笔记特别篇(梯度下降、学习率与反向传播)

梯度下降算法GD(gradient descent):

  • 损失函数:如下所示,找到一条最拟合所有点的直线,只需找到所有点距离直线距离平方和最小时直线位置即可,这个平方和即损失。找到该最拟合直线的过程也就是求该损失值最小的过程。假设w已知,只需求修正b平移直线修正拟合。损失函数,初始图像如下:

\large L=\frac{1}{2}\sum [y_{i}-(wx_{i}+b)]^{2}

深度学习与物体检测每日笔记特别篇(梯度下降、学习率与反向传播)_第1张图片

  • 以上损失函数可以写成\large L=\frac{1}{2}\sum b^{2} +2(wx_{i}-y_{i})b+(wx_{i}-y_{i})^{2},由于b是未知变量,以上损失函数就成了b关于L的二次函数,如下:

深度学习与物体检测每日笔记特别篇(梯度下降、学习率与反向传播)_第2张图片

  • 故求最拟合线转换成求损失函数L最小即现在求该曲线最低点。以下便引出梯度下降算法:

深度学习与物体检测每日笔记特别篇(梯度下降、学习率与反向传播)_第3张图片

  • 红色点处是当前初始位置,要使得当前点靠近最优值点处,那只需沿着切线方向前进即可。该切线方向即当点的斜率dL/db,通常为了让该点每次前进合理的长度,让斜率乘以常数Lr,这样当前点便靠近了最优值点数。这就是梯度下降算法GD(gradient descent)。

随机梯度下降算法SGD(stochastic gradient descent):

深度学习与物体检测每日笔记特别篇(梯度下降、学习率与反向传播)_第4张图片

  •  如上所示,以一个更加一般的形式表述y=fxθ,损失函数写成L(fxθ),y\large _{i})
  • 类比上一梯度计算,一般损失函数梯度即\frac{dL}{d\Theta },损失更新应对所有N个点的损失值的总和再求平均,故该值表示为g,g= {\frac{1}{N}}\sum_{1}^{N}\frac{dL}{d\Theta }。更新θ = θ - Lr*g,Lr为设定常数。
  • 以上为常规求梯度算法,观察发现,需要求N个样本梯度,每次更新占用内存大、速度慢。故我们只取少部分样本进行计算更新即可,这就是随机梯度下降SGD(stochastic gradient descent)
  • 动量随机梯度下降:即每次更新时,保留部分上一次更新的梯度方向,避免下降过程中在最优值左右剧烈震荡,达不到最优点。

学习率:

  • 以上梯度下降每次更新时,引入了一个常数Lr,即学习率。适当的学习率可以保证当前点沿着梯度方向前进合适的距离。显然该学习率应该随着梯度下降自适应调整自己。
  • 2011年提出调整学习率AdaGrad算法:

\Theta \leftarrow \Theta -g\frac{\varepsilon }{\sqrt{r }+\delta}r \leftarrow r+g^{2}

其中\delta是一个小值,稳定数值计算。r是随梯度时间累计的量。可以看到梯度波动较大时,学习率变大,前进速度加速。梯度波动较小则前进速度减速。但这样可能会导致学习率过早变小,收敛变慢。

  • 2014提出Adam算法。该算法综合了动量和调整学习率:
  • \Theta \leftarrow \Theta -g\frac{\varepsilon\hat{s} }{\sqrt{\hat{r} }+\delta}, 其中shat是修正后动量和rhat为修正的r。

反向传播算法(Backpropagation):

是目前用来训练人工神经网络(Artificial Neural Network,ANN)的最常用且最有效的算法,也叫BP神经网络。

网上许多教程公式太繁杂,本文以最简单模式解释反向传播过程。过程即以输出值和真实值的损失值反向求导,并在过程中更新权重(主要)或偏置。

在深度学习图像全连接的目的就是更新权重,以达到输出值和真实值的损失最小。使用最小二乘法做损失函数优化举例说明:

y = wx +b , L =\frac{1}{2}(y-y_{real})^{2}

假设参数初始化x=1.5,w=0.8,b=0.2,y_{real}=0.8,计算可得y=1.4,L=0.18,接下来只需多次更新w,b即可。

求梯度即求导,即求\frac{\partial L}{\partial w},\frac{\partial L}{\partial b}

根据链式求导法则计算可得:

\frac{\partial L}{\partial w} =\frac{\partial L}{\partial y}\frac{\partial y}{\partial w} =0.9, \frac{\partial L}{\partial b} =\frac{\partial L}{\partial y}\frac{\partial y}{\partial b}=0.6

假设学习率Lr=0.1,则w = 0.8 - 0.1*0.9 = 0.71 , b = 0.2 - 0.1*0.6 = 0.14

此时y = wx +b = 0.71*1.5 +0.14 = 1.205 ,更接近真实值y_{real}=0.8;

同时L= 0.5*(1.205-0.8)**2 = 0.082,相比未更新前L=0.18,损失更小了。

以上就是反向传播过程。

 

你可能感兴趣的:(深度学习,人工智能,算法)