为了便于理解,本文以线性回归为例进行说明。
因此,有一个通用的线性回归函数:
其中,j指的是对应的权重。假设损失函数为均方误差损失函数,则损失函数为:
其中,h(x(i))为预测值,y(i)为真实值;除以2是为了方便求导计算。
1. 梯度下降法
定义梯度下降(GD),也称为批量梯度下降(BGD) 或最速下降,是一种常用的最小化目标函数的一阶方法。最优化方法。
原理:目标函数在其梯度的反方向下降最快。因此,要找到目标函数的局部最小值,需要沿着当前点对应的梯度(或近似梯度)的反方向迭代搜索,指定步长。
其中,梯度是目标函数J()对于权重的偏导数。目标函数的缩减是通过首先随机初始化权重然后迭代更新来实现的。
对于单个数据点:单个数据点的梯度计算。其中,为学习率,即指定的步长。对于所有数据点:
如果训练集的梯度计算为=1,那么每次参数更新的伪代码为: 训练集的权重更新缺点:从每次参数更新的伪代码可以看出,每个参数都使用了所有参数参数更新训练样本,即m。
因此,计算成本过高且耗时较长。
2. 随机梯度下降法
起点鉴于梯度下降法,每次参数更新都使用所有训练样本,耗时较长。因此,随机梯度下降法(Stochastic Gradient Descent,简称SGD)被提出。
原理与梯度下降法相比,每次参数更新仅使用一个训练样本。
即每次参数更新的伪代码为:
训练集权值更新的优缺点每次参数更新只使用一个训练样本。优点:与梯度下降法相比节省时间。缺点:每次迭代并不一定是模型整体优化的方向。如果样本噪声较多,则很容易陷入局部最优解,收敛到不理想状态。
3. 小批量梯度下降法
出发点:梯度下降法耗时较长,随机梯度下降法容易陷入局部最优解。因此,小批量梯度下降法(Mini-batch Gradient Descent,简称MBGD)被提出。也就是说,在训练速度和训练精度之间取得折衷。
原理:如果指定每次参数更新的训练样本数量batch_size=10,则每次更新参数时会随机选取10个训练样本进行计算。
即每次参数更新的伪代码为:
训练集的权重更新具有节省计算时间的优点,并且比选择单个样本更稳定。它是在大规模数据上训练大型线性模型的主要方法。
相关知识补充
a. 临界点 与 全局最小点
临界点是斜率为零的点。在一维上,大致可以分为三种:局部极小点(Localminimum),其值比相邻点的值低;局部最大值,其值高于相邻点的值;鞍点,有较高和较低的相邻点。
如下图:
在一维情况下,存在三种类型的临界点:局部最小点、局部极大点和鞍点。
全局最小值是目标函数达到其绝对最小值(相对于所有其他值)的点。
在机器学习中,我们要优化的目标函数可能包含很多不是最优的局部极小点,或者在一个非常平坦的区域可能存在很多鞍点。因此,我们通常寻找目标函数很小但不一定最小的点。
也就是说,当存在多个局部最小值或平坦区域时,优化算法可能无法找到全局最小值。因此,即使找到的解不是真正最小的,我们通常也可以接受这样的解,只要它们对应于目标函数的明显较低的值。
近似最小化
b. 梯度下降的收敛 与 方向
当梯度的每个元素都为零(或实际上非常接近零)时,梯度下降收敛。即寻找全局极小点或局部极小点,使目标函数达到一个显着低的值。
如下图:
梯度下降过程中梯度下降的方向垂直于轮廓的切线方向,如下图所示:
梯度下降的收敛图(等高线)。其中,红色箭头指向梯度下降的方向。推导假设目标函数为三维曲面z=f(x,y),则平面z=c截取的曲面的曲线方程为:
那么,该曲线在xoy平面上的投影就是曲面z的轮廓。
因此,等高线的曲线方程为:
轮廓上任意点p 的切线斜率是dy/dx。由于p点的切线斜率与法线斜率的乘积为-1,因此可以得到p点对应的法线斜率为:
在,
梯度的表达式为: 梯度的方向为:
因此,梯度下降的方向与轮廓的切法向量方向相同。即梯度下降的方向垂直于轮廓的切线方向。
关于深入解析:梯度下降、随机梯度下降及小批量梯度下降法,的介绍到此结束,希望对大家有所帮助。
【深入解析:梯度下降、随机梯度下降及小批量梯度下降法】相关文章:
2.米颠拜石
3.王羲之临池学书
8.郑板桥轶事十则
用户评论
深度学习真的离不开这些优化算法,都是干货啊!
有13位网友表示赞同!
感觉小批量梯度下降法的训练效率更高一点,更符合实际应用。
有15位网友表示赞同!
随机梯度下降法太粗暴了,容易波动啊,还是批量梯度下降法稳定一些吧。
有13位网友表示赞同!
其实这些算法的原理都差不多,只不过处理样本的方式不同呀。
有5位网友表示赞同!
学习完这几个算法,就能更好地理解模型训练的过程了哦!
有13位网友表示赞同!
在实际应用中,哪个算法更好用还得看具体情况分析啊!
有12位网友表示赞同!
梯度下降法虽然简单,但真的很强大,奠定了深度学习的基础。
有8位网友表示赞同!
看了好多博客和资料,还是觉得理解这些算法需要多实战呀!
有13位网友表示赞同!
这三个算法之间的区别很微妙,需要细细品味才行啊。
有7位网友表示赞同!
感觉随机梯度下降法的噪声可以带来正则化效果,有点意思哦!
有11位网友表示赞同!
小批量梯度下降法其实是一种折中方案,兼顾了速度和稳定性吧?
有6位网友表示赞同!
这些算法之间的转换关系是不是比较清晰呢?
有10位网友表示赞同!
学习完这三个算法之后,感觉对机器学习的整体思路有了一定的提升。
有20位网友表示赞同!
不知道有没有更高级的优化算法呢? 期待学习更多新的知识!
有9位网友表示赞同!
这几个算法之间都有哪些应用场景区别呢?
有20位网友表示赞同!
实际训练中,如何在选择合适的算法之间做出平衡?
有5位网友表示赞同!
如果需要深入理解这些算法,应该参考哪些经典论文?请推荐一下。
有7位网友表示赞同!
感觉用代码实践一遍这些算法,才能真正理解它们之间的差别。
有7位网友表示赞同!
学习这几个算法之后,对深度学习的优化策略有了更深刻的认识。
有11位网友表示赞同!