梯度下降算法:

算法原理

        上一章我们已知神经网络算法就是求解拟合函数,通过线性变换和非线性变换来得出损失函数最小的模型。那么是如何进行求解的呢,其中之一就是梯度下降算法。

        如图,当我们需要求解拟合曲线时,如何找到拟合曲线?步骤就是首先随机一个w值,画出过原点的y = wx的图像,再根据误差调整这个曲线,最终得到拟合函数。

        因此我们根据这个步骤开始分析,首先随机出的这个曲线称为预测函数,然后根据误差,求出代价函数,再根据代价函数调整曲线,最终得到拟合最好的预测函数。下面我们根据下图进行算法流程讲解:

 算法流程

预测函数:y = wx

第一个点的误差为:e_{1} = (w*x_1 - y_1)^{2} ,所有样本点的均方差就是代价函数

代价函数::e = \frac{1}{n}((x_1^2+...+x_n^2)w^2+(-2x_1y_1-...-2x_1y_1)w + (y_1^2+...+y_n^2))

         可以看出误差函数图像为一个开口向向上的二次函数,具有极小值点,因此我们找到这个最低点的w值,就得到了最终的拟合曲线。

        实际情况中,我们要求解的不一定是一元二次的函数,是多元甚至更高次的函数的最小值,因此我们就要使用算法来寻找这个最低点,寻找最低点的算法之一就是梯度下降算法。

        因此,我们定义(e,w)函数图像中某一个位置的陡峭程度为梯度,对应就是斜率k,我们根据梯度往下搜索就会找到最低点。那么该如何搜索,每次的步长改迈多大?这时候就要引入学习率的概念:

       学习率:首先梯度下降的过程是使用斜率k作为基准步长,越陡峭下降越快,越平滑下降越慢,这样就能最快达到最低点,由于斜率与x的关系不确定,因此我们就要乘上一个参数控制步长大小,这个参数就是学习率,这样函数在适当的学习率下,可以快速准确地收敛到最小值的位置。

算法优化

在下降方法上,存在如下优化方法:

BGD:批量梯度下降算法,采用所有样本进行运算 ,速度慢,精确度高

SGD:随机梯度下降算法,采用随机样本进行计算,速度快,精准度低

MBGD:小批量梯度下降算法,采用随机小批量样本点进行运算,也叫最速下降法,这个方法最常用

在学习率上,存在如下优化方法:

AdGrad:动态学习率,经常更新的参数学习率就小一点,不常更新的参数学习率就大一点

RMSProp算法:优化动态学习率

AdaDelta算法:无需设置学习率

Adam算法:融合AdaGrad和RMSProp

Momentum算法:模拟动量,螺旋搜索前进,

BP反向传播算法 

        BP反向传播算法就是利用结果来反向更新参数的算法。

一次变化

        例如一个线性拟合,x经过w,b的线性拟合后变为y = wx + b

x ->(w,b)->\hat{y} = wx + b

损失函数:L = \frac{1}{2}(\hat{y} - y)^2

        其中\hat{y}是预测值,y为真实值,假设有一个真实样本为(x,y) = (1.5,0.8),随机出一个(w,b) = (0.8,2),得出\hat{y} = 1.4,根据损失函数求出损失L = 0.18,根据梯度下降算法,我们的目标是求出L对w和b的梯度值,也就是偏导数,然后再沿着梯度的反方向更新这两个参数

通过计算L对y的偏导求出L对w和b的偏导:

\frac{\partial L}{\partial y} = \hat{y} - y

\frac{\partial L}{\partial w} =\frac{\partial L}{\partial y}\frac{\partial y}{\partial w}=( \hat{y} - y)x

\frac{\partial L}{\partial b} =\frac{\partial L}{\partial y}\frac{\partial y}{\partial b}=\hat{y} - y

带入

 (x,y) = (1.5,0.8)

得:

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

假设学习率

\varepsilon = 0.1

更新下一次的w和b:

w_{k} = w -\varepsilon\frac{\partial L}{\partial w} = 0.71 

b_{k} = b -\varepsilon\frac{\partial L}{\partial b} = 0.1 4

 二次变换

         例如一个线性拟合,x经过w1,b1的线性拟合后变为y = wx + b,经过w2,b2的线性变换后为y 

x(w_1,b_1)y_1 = w_1x + b_1 →(w_2,b_2)y_2 = w_2x + b_2

 损失函数:L = \frac{1}{2}({y_2} - y)^2

求导过程如下:

在计算机中求导过程如下

代码如下:

 注:本文部分图片与文字来自哔站up主:风中摇曳的小萝卜,梗直哥丶

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐