《机器学习》 梯度下降

本文介绍了机器学习中如何使用梯度下降法寻找线性函数的最优参数。通过误差函数衡量拟合效果,梯度下降策略用于找到使得误差最小的权重向量。讨论了梯度下降的计算过程,包括标准梯度下降和随机梯度下降的差异,并提供了一个代码实例链接。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

参照《机器学习》这本书的第4.4.3节。

一.解决目标及情景假设:

当给定一些数据,输入x向量已知,输出y也已知,设计一个线性函数y=h(x)去拟合这些数据。

既然是线性函数,在此不妨设为h(x)=w0*x0+w1*x1。

此时我们遇到的问题就是如何确定w0和w1这两个参数,即w=(w0,w1)这个向量。

既然是拟合,则拟合效果可以用误差函数:E(w)=∑ [ h(x)- y ] ^2 / 2 来衡量。

其中w是权重二维向量,x是输入二维向量,x和y都是训练集的数据,即已知。

至于后面除于2只是为了之后的推导过程中对E求导时候可以消除系数,暂时可以不管。


因为我们解决的目标是找出一个向量w=(w0,w1)使得E(w)值最小,即误差最小。

其实这个问题本质上也是搜索最优解的问题,如果用暴力搜索的话,随机取每个可能的值去让机器每天每夜地跑,显然这是不可能的。
所以此时有一种搜索策略:梯度下降。


二. 梯度下降方法:

梯度其实就是高数求导方法,对E这个公式针对每个维数(w0,w1)求偏导后的向量▽E(w)=(∂E/∂w0,∂E/∂w1

梯度为最陡峭上升的方向,对应的梯度下降的训练法则为:

w=w-η▽E(w)

这里的η代表学习速率,决定梯度下降搜索中的步长 。

上式的w是向量,即可用将该式写成分量形式为:wi=wi-η*∂E/

### 梯度下降法的核心概念 梯度下降法是一种经典的优化方法,广泛应用于机器学习中的参数优化过程。其目标是通过不断调整模型参数,使损失函数达到局部最优甚至全局最优状态[^1]。 在实际应用中,梯度下降法分为三种主要形式:批量梯度下降(Batch Gradient Descent, BGD)、随机梯度下降(Stochastic Gradient Descent, SGD)以及它们的改进版本——如动量法(Momentum)和自适应矩估计(Adam Optimizer)。这些方法的主要区别在于如何利用数据集更新权重参数[^2]。 #### 批量梯度下降 批量梯度下降使用整个训练数据集来计算每次迭代的梯度方向。这种方法的优点是可以精确找到最佳路径;然而,当样本数量较大时,每一步都需要大量计算资源,效率较低[^3]。 ```python def batch_gradient_descent(X, y, theta, alpha, num_iters): m = len(y) for i in range(num_iters): predictions = X.dot(theta) errors = np.subtract(predictions, y) sum_delta = (X.T).dot(errors); theta = theta - (alpha / m) * sum_delta; return theta ``` #### 随机梯度下降 为了提高收敛速度并减少内存消耗,随机梯度下降仅选取单一样本或者一小批样本来估算梯度。尽管如此做会引入更多噪声到更新过程中,但它通常能够更快地接近极小值区域。 ```python import numpy as np def stochastic_gradient_descent(X, y, theta, learning_rate=0.01, iterations=100): m = len(y) for it in range(iterations): cost = 0 for i in range(m): rand_ind = np.random.randint(0,m) X_i = X[rand_ind,:].reshape(1,X.shape[1]) y_i = y[rand_ind].reshape(1,1) prediction = np.dot(X_i,theta) theta = theta -(1/m)*learning_rate*( X_i.T.dot((prediction-y_i))) cost += calculate_cost(X_i,y_i,theta) rmse = np.sqrt(cost/m) return theta,rmse ``` #### 动量法与 Adam 优化器简介 动量法通过累积历史梯度信息加速收敛进程,并帮助逃离浅层凹陷区。而 Adam 结合了 Momentum 和 RMSprop 的优点,在实践中表现出优异性能。 --- ###
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值