梯度下降算法GD(gradient descent):
- 损失函数:如下所示,找到一条最拟合所有点的直线,只需找到所有点距离直线距离平方和最小时直线位置即可,这个平方和即损失。找到该最拟合直线的过程也就是求该损失值最小的过程。假设w已知,只需求修正b平移直线修正拟合。损失函数,初始图像如下:
- 以上损失函数可以写成
,由于b是未知变量,以上损失函数就成了b关于L的二次函数,如下:
- 故求最拟合线转换成求损失函数L最小即现在求该曲线最低点。以下便引出梯度下降算法:
- 红色点处是当前初始位置,要使得当前点靠近最优值点处,那只需沿着切线方向前进即可。该切线方向即当点的斜率dL/db,通常为了让该点每次前进合理的长度,让斜率乘以常数Lr,这样当前点便靠近了最优值点数。这就是梯度下降算法GD(gradient descent)。
随机梯度下降算法SGD(stochastic gradient descent):
- 如上所示,以一个更加一般的形式表述y=f(x,θ),损失函数写成L(f(x,θ),y
)
- 类比上一梯度计算,一般损失函数梯度即
,损失更新应对所有N个点的损失值的总和再求平均,故该值表示为g,
。更新θ = θ - Lr*g,Lr为设定常数。
- 以上为常规求梯度算法,观察发现,需要求N个样本梯度,每次更新占用内存大、速度慢。故我们只取少部分样本进行计算更新即可,这就是随机梯度下降SGD(stochastic gradient descent)。
- 动量随机梯度下降:即每次更新时,保留部分上一次更新的梯度方向,避免下降过程中在最优值左右剧烈震荡,达不到最优点。
学习率:
- 以上梯度下降每次更新时,引入了一个常数Lr,即学习率。适当的学习率可以保证当前点沿着梯度方向前进合适的距离。显然该学习率应该随着梯度下降自适应调整自己。
- 2011年提出调整学习率AdaGrad算法:
,
其中是一个小值,稳定数值计算。r是随梯度时间累计的量。可以看到梯度波动较大时,学习率变大,前进速度加速。梯度波动较小则前进速度减速。但这样可能会导致学习率过早变小,收敛变慢。
- 2014提出Adam算法。该算法综合了动量和调整学习率:
, 其中shat是修正后动量和rhat为修正的r。
反向传播算法(Backpropagation):
是目前用来训练人工神经网络(Artificial Neural Network,ANN)的最常用且最有效的算法,也叫BP神经网络。
网上许多教程公式太繁杂,本文以最简单模式解释反向传播过程。过程即以输出值和真实值的损失值反向求导,并在过程中更新权重(主要)或偏置。
在深度学习图像全连接的目的就是更新权重,以达到输出值和真实值的损失最小。使用最小二乘法做损失函数优化举例说明:
假设参数初始化x=1.5,w=0.8,b=0.2,y=0.8,计算可得y=1.4,L=0.18,接下来只需多次更新w,b即可。
求梯度即求导,即求。
根据链式求导法则计算可得:
假设学习率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=0.8;
同时L= 0.5*(1.205-0.8)**2 = 0.082,相比未更新前L=0.18,损失更小了。
以上就是反向传播过程。