机器学习与深度学习2:梯度下降算法和BP反向传播算法

梯度下降算法:

算法原理

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

如图,当我们需要求解拟合曲线时,如何找到拟合曲线?步骤就是首先随机一个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主:风中摇曳的小萝卜,梗直哥丶

相关推荐
IT猿手1 小时前
2025最新群智能优化算法:山羊优化算法(Goat Optimization Algorithm, GOA)求解23个经典函数测试集,MATLAB
人工智能·python·算法·数学建模·matlab·智能优化算法
Wis4e4 小时前
基于PyTorch的深度学习3——基于autograd的反向传播
人工智能·pytorch·深度学习
Dream it possible!4 小时前
LeetCode 热题 100_字符串解码(71_394_中等_C++)(栈)
c++·算法·leetcode
西猫雷婶5 小时前
神经网络|(十四)|霍普菲尔德神经网络-Hebbian训练
人工智能·深度学习·神经网络
修己xj6 小时前
算法系列之深度优先搜索寻找妖怪和尚过河问题的所有方式
算法
开心比对错重要6 小时前
leetcode69.x 的平方根
数据结构·算法·leetcode
美狐美颜sdk6 小时前
什么是美颜SDK?从几何变换到深度学习驱动的美颜算法详解
人工智能·深度学习·算法·美颜sdk·第三方美颜sdk·视频美颜sdk·美颜api
m0_461502696 小时前
【贪心算法1】
算法·贪心算法
Doopny@7 小时前
数字组合(信息学奥赛一本通-1291)
数据结构·算法·动态规划
平凡而伟大(心之所向)7 小时前
机器学习的发展史
机器学习