梯度下降算法:
算法原理
上一章我们已知神经网络算法就是求解拟合函数,通过线性变换和非线性变换来得出损失函数最小的模型。那么是如何进行求解的呢,其中之一就是梯度下降算法。
如图,当我们需要求解拟合曲线时,如何找到拟合曲线?步骤就是首先随机一个w值,画出过原点的y = wx的图像,再根据误差调整这个曲线,最终得到拟合函数。
因此我们根据这个步骤开始分析,首先随机出的这个曲线称为预测函数 ,然后根据误差 ,求出**代价函数,**再根据代价函数调整曲线,最终得到拟合最好的预测函数。下面我们根据下图进行算法流程讲解:
算法流程
预测函数:y = wx
第一个点的误差为: ,所有样本点的均方差就是代价函数
代价函数 ::
可以看出误差函数图像为一个开口向向上的二次函数,具有极小值点,因此我们找到这个最低点的w值,就得到了最终的拟合曲线。
实际情况中,我们要求解的不一定是一元二次的函数,是多元甚至更高次的函数的最小值,因此我们就要使用算法来寻找这个最低点,寻找最低点的算法之一就是梯度下降算法。
因此,我们定义(e,w)函数图像中某一个位置的陡峭程度为梯度 ,对应就是斜率k ,我们根据梯度往下搜索就会找到最低点。那么该如何搜索,每次的步长改迈多大?这时候就要引入学习率的概念:
学习率: 首先梯度下降的过程是使用斜率k作为基准步长,越陡峭下降越快,越平滑下降越慢,这样就能最快达到最低点,由于斜率与x的关系不确定 ,因此我们就要乘上一个参数控制步长大小,这个参数就是学习率,这样函数在适当的学习率下,可以快速准确地收敛到最小值的位置。
算法优化
在下降方法上,存在如下优化方法:
BGD:批量梯度下降算法,采用所有样本进行运算 ,速度慢,精确度高
SGD:随机梯度下降算法,采用随机样本进行计算,速度快,精准度低
MBGD:小批量梯度下降算法,采用随机小批量样本点进行运算,也叫最速下降法,这个方法最常用
在学习率上,存在如下优化方法:
AdGrad:动态学习率,经常更新的参数学习率就小一点,不常更新的参数学习率就大一点
RMSProp算法:优化动态学习率
AdaDelta算法:无需设置学习率
Adam算法:融合AdaGrad和RMSProp
Momentum算法:模拟动量,螺旋搜索前进,
BP反向传播算法
BP反向传播算法就是利用结果来反向更新参数的算法。
一次变化
例如一个线性拟合,x经过w,b的线性拟合后变为y = wx + b
损失函数:
其中是预测值,为真实值,假设有一个真实样本为,随机出一个,得出,根据损失函数求出损失,根据梯度下降算法,我们的目标是求出L对w和b的梯度值,也就是偏导数,然后再沿着梯度的反方向更新这两个参数
通过计算L对y的偏导求出L对w和b的偏导:
带入
得:
假设学习率
更新下一次的w和b:
二次变换
例如一个线性拟合,x经过w1,b1的线性拟合后变为y = wx + b,经过w2,b2的线性变换后为y
→→ →→
损失函数:
求导过程如下:
在计算机中求导过程如下
代码如下:
注:本文部分图片与文字来自哔站up主:风中摇曳的小萝卜,梗直哥丶