梯度下降小结

本文总结了梯度下降法在机器学习中的应用,包括批量梯度下降和随机梯度下降。批量梯度下降使用所有数据更新参数,适合数据量小的情况;随机梯度下降则随机选取样本,计算速度快但可能找到局部最优解。两者在计算量、步长和避免局部极小值方面存在区别。

梯度与最优化

数学上的梯度是描述一个曲线或曲面沿着某一方向的变化的情况。计算方法就是求导数。
在机器学习领域为什么要使用梯度呢?
首先这个问题要追溯到最优化的问题上面,我们在求解一个拟合函数或者求解一个类别判别函数的过程中,会面临损失函数,以及如何让这个损失函数的问题。所以梯度下降就是让损失函数最小的过程最短。可以把损失函数看成是一个超平面,沿着各个方面的梯度下降就是考察的各个特征的变化。还有一点需要说明的是:整个过程是为了求解参数的最优解。

批量梯度下降

批量梯度下降也叫作标准梯度下降,我们在求拟合函数的过程中会用到梯度下降,下面我们以求解最有拟合函数为例来讲批量梯度下降。
假设拟合函数为:
这里写图片描述

公式中theta为参数,j代表参数的个数。这个式子表示拟合函数是一个线性的,比如说f(x)=x1+x2+x3.在我们的训练数据中应该有很多的X和很多的y,其中X是一个多维度的矩阵,X={x1,x2,x3} x1即特征。这里不懂的同学可以提前学习机器学习的基本知识。我们按照一定的准则求解拟合函数,一般情况下可以采用最小二乘法损失函数来衡量函数的好坏。简单来说就是误差的一种表现形式。如下所示:

这里写图片描述

上面的式子中,m代表数据的记录数。

批量梯度下降需要运用所有的数据对每个参数求梯度。

这里写图片描述
然后我们可以定义一个学习率,来更新参数,学习率的作用就是可以加快收敛速度。

这里写图片描述

这里我们可以感受下批量梯度下降的性能,每个参数的更新都如上面的式子,当然开始时候需要给定一个初始值。直观的看可以得出,更新每个参数的过程中都需要用到所有的数据这里写图片描述代表第j个参数所对应的特征的第i个记录的值,而这里写图片描述代表第i个记录的所有的特征的值,也就是一条训练数据,表现形式是一个矩阵(也可以说向量),这里写图片描述的意义很明确,就是第i条记录对应的值。
也就是说,用到了所有的记录的所有的特征值,更新一次尚且如此,要是多更新几次,训练数据几亿条。速度可想而知了。

批量梯度下降什么时候停止呢?
这个可以设定变化阈值,比如说我们设定每个参数的变化都小于某个阈值的时候就不再更新了。

随机梯度下降

随机梯度下降就是对批量梯度下降进行数据的随机选取操作,具体来说就是在更新参数的时候,不需要所有记录的所有特征值,只需要随机的选择一个记录即可。这样就大大减少了计算量。

更新函数如下所示:
这里写图片描述

但是因为是随机选择的,致使求得的最优解可能不是全局最优解。不过即使不是全局最优解也会离全局最优解很接近。此外如果损失函数是一个凸函数的话,那么局部最优就是全局最优啦~~

批量梯度和随机梯度下降的区别

1、随机梯度计算量小,批量梯度计算大。
2、由于使用真正的梯度,批量梯度下降对于每一次权值更新经常使用比随机梯度下降大的步长。
3、如果标准误差曲面有多个局部极小值,随机梯度下降有时可能避免陷入这些局部极小值中
4、标批量梯度下降是在权值更新前对所有样例汇总误差,而随机梯度下降的权值是通过考查某个训练样例来更新的。
5、可以通过一些方法改进随机梯度下降,使得其尽可能接近全局最优解。
6、可以通过并行批量梯度下降,加快计算速度。

### 梯度下降算法概述 梯度下降法是一种常用的迭代优化技术,广泛应用于求解最小化问题,在机器学习领域主要用于寻找最优模型参数。该方法通过不断更新权重向量的方向来减少目标函数(通常是损失函数),直到达到局部或全局最优点[^2]。 ### 工作机制解析 对于给定的数据集及其对应的标签值\(y\),假设存在一个预测模型\(\hat{y}=f(x;\theta)\),其中\(\theta\)表示待估计的参数向量,则可通过定义适当形式的成本函数\(J(\theta)=L(y,\hat{y})\)衡量实际输出与预期之间的差异程度。为了使这个差距尽可能小,需要找到一组能使成本最低化的参数组合\[ \arg\min_\theta J(\theta). \] 具体来说,梯度下降过程如下: - 初始化参数θ; - 计算当前状态下整个数据集中所有样本点处的目标函数相对于各个参数分量的一阶偏导数构成的梯度向量∇J(θ); - 更新规则为:\[ θ := θ - α ∇_θ J(θ), \] 这里α被称为步长或者说是学习速率,决定了每次调整幅度大小[^4]。 当满足一定条件时停止循环操作并返回最终获得的最佳参数配置方案。 ### Python实现案例 下面给出一段简单的Python代码片段展示如何利用批处理方式执行标准版梯度下降流程: ```python import numpy as np def compute_cost(X, y, theta): m = len(y) predictions = X.dot(theta) square_err = (predictions - y)**2 return 1/(2*m)*np.sum(square_err) def batch_gradient_descent(X, y, theta, alpha, num_iters): m = len(y) j_history = [] for i in range(num_iters): gradients = 1/m * X.T.dot((X.dot(theta)-y)) theta -= alpha*gradients if i % math.ceil(num_iters / 10) == 0: j_history.append(compute_cost(X,y,theta)) return theta,j_history ``` 上述程序实现了批量梯度下降的功能,并记录下了每一次迭代后的代价变化情况以便后续分析评估收敛特性。 ### 学习率的影响及改进措施 值得注意的是,合适的学习率选择至关重要。过高的学习率可能导致震荡甚至发散现象的发生;而偏低则意味着较慢的速度以及更高的时间开销。因此实践中往往采取动态调节策略比如逐步降低初始设定值或是引入动量项等方式加以改善[^3]。 ### 小结 综上所述,梯度下降作为一种基础却高效的数值优化手段,在解决各类监督式学习任务方面发挥着不可替代的作用。除了传统意义上的BGD之外还有SGD、MBGD等多种变体可供选用以适应不同应用场景下的需求特点。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值