【图解】梯度下降

转载:https://blog.youkuaiyun.com/guomutian911/article/details/78448171

 

如果读者对方向导数和梯度的定义不太了解,请先阅读上篇文章《方向导数与梯度》

 

前些时间接触了机器学习,发现梯度下降法是机器学习里比较基础又比较重要的一个求最小值的算法。梯度下降算法过程如下:

1)随机初始值

2)迭代,直至收敛。表示在处的负梯度方向,表示学习率。

 

在这里,简单谈一下自己对梯度下降法的理解。

首先,要明确梯度是一个向量,是一个n元函数f关于n个变量的偏导数,比如三元函数f的梯度为(fx,fy,fz),二元函数f的梯度为(fx,fy),一元函数f的梯度为fx。然后要明白梯度的方向是函数f增长最快的方向,梯度的反方向是f降低最快的方向。

我们以一元函数为例,介绍一下梯度下降法。

设f(x) = (x-1)2+1/2,

 

 

上图给出了函数f的图像和初始值x0,我们希望求得函数f的最小值,因为沿负梯度方向移动一小步后,f值降低,故只需x0沿着负梯度方向移动一小步即可。

 

而f在点x0的导数大于0,从而f在点x0的梯度方向为正,即梯度方向为f’(x0),故由梯度下降法可知,下一个迭代值,也就是说x0向左移动一小步到了x1,同理在x1点的导数同样大于零,下一次迭代x1向左移动一小步到达x2,一直进行下去,只要每次移动的步数不是很大,我们就可以得到收敛1的解x。

上述证实了我们对分析(蓝色倾斜字体)的验证。

 

同样,如果处置选在了最小值的左边,即如图所示:

 

由于f’(x0)<0,所以梯度方向为负,负梯度方向为正,故需将x0沿负梯度方向移动一小步,即向右移动一小步,这样使得f值更小一些。或用梯度下降法迭代公式,依次我们可以得到如图所示的x1,x2,...,xk,...,直到收敛至最小值。

 

对于二元函数,我们也可以通过实例验证梯度下降法的合理性:

 

 

在每次得到一个点(xk,yk)时,我们需要计算(fx(xk),fy(yk)),这个方向表示梯度f增长最快的方向,-(fx(xk),fy(yk))表示梯度下降最快的方向,故只需将(xk,yk)沿着-(fx(xk),fy(yk))这个方向移动一小步,就可以减少f的值,直至收敛到最小值,如上图所示。

 

谈几点梯度下降法需要注意的地方,也是自己对梯度下降法的理解:

1)梯度下降不一定可以收敛到最小值。

梯度下降法是收敛到局部最小值,不一定可以收敛到全局最小值。

比如:

 

我们初始值选择了如图的x0,由于f在点x0的导数大于0,梯度方向向右,负梯度方向向左,从而x0向左移动,逐渐收敛到了局部最小值,而不能收敛到全局最小值。

2)学习率的大小要适中。

学习率太小,每次移动步长太小,收敛太慢,这个比较容易理解。

学习率太大,每次移动步长大,可能导致不收敛,这里用一个图来表示一下:

 

由于距离最小值点越远,导数越大,从而导致步长越来越大,不会收敛。

3)不一定选择负梯度方向,只要是值下降的方向即可。

在每一次迭代选择方向时,我们只要选择与梯度方向夹角小于90度的向量的反方向就可,不一定要选择负梯度方向。但由于,满足这样条件的向量不太容易求出,我们就选择了与梯度方向0度的向量的反方向(负梯度方向),而且这个方向函数值减少的更快,更快的收敛,故是个不错的选择。

4)求最大值的梯度上升法。

f的梯度方向是f的值增长最快的方向。我们每次沿负梯度方向移动一小步可以逐步收敛到局部最大值,因此我们每次沿梯度方向也可以得到函数f的局部最大值。迭代公式为:

这里表示在处的梯度方向,与梯度下降法的含义不同。

<think>好的,我现在需要回答用户关于梯度下降算法流程图和图解的问题。首先,我得回忆一下梯度下降的基本原理,然后结合已有的引用内容来整理信息。用户提到了三个引用,其中引用[2]和[3]详细说明了梯度下降的应用和不同类型,比如批量梯度下降。我需要确保回答符合用户的要求,结构清晰,并且包含流程图或图解的元素。 首先,梯度下降的核心思想是通过迭代调整参数来最小化损失函数。根据引用[2],梯度下降是通用的优化算法,用于求解最优解。引用[3]提到了线性回归中的具体应用,以及批量梯度下降的特点。用户需要流程图,可能需要分步骤说明,并配合图示。 接下来,我应该分步骤解释梯度下降的过程,每一步对应流程图中的一个环节。例如初始化参数、计算梯度、更新参数、判断收敛等。同时,需要提到不同变种,如随机梯度下降和小批量梯度下降,如引用[1]和[2]所述。此外,引用[3]中提到的成本函数是否为凸函数会影响收敛情况,这点也需要在流程图中体现,比如判断是否达到全局或局部最优。 可能遇到的问题是如何在没有实际图片的情况下描述图解。需要用文字详细说明每个步骤的图示内容,比如三维曲面上的下降路径或等高线图上的轨迹。同时,需要引用正确的来源,如引用[3]中的成本函数形状,引用[1]中的不同梯度下降类型。 最后,生成相关问题时要围绕梯度下降的不同方面,比如学习率的影响、变体比较、收敛条件等,确保问题覆盖用户可能感兴趣的领域。需要检查回答是否符合系统级指令,特别是数学表达式的格式是否正确,比如使用$...$和$$...$$,并且引用标识正确添加。</think>### 梯度下降算法流程图与图解 梯度下降算法通过迭代调整模型参数以最小化损失函数$J(\theta)$,其核心步骤可总结如下: #### **流程图步骤解析** 1. **初始化参数** 随机选择初始参数值$\theta_0$(例如$w$和$b$),设置学习率$\alpha$(步长)和最大迭代次数。 2. **计算梯度** 计算当前参数下的梯度$\nabla J(\theta)$,即损失函数对参数的偏导数。 例如,线性回归的梯度为: $$\frac{\partial J}{\partial w} = \frac{1}{m} \sum_{i=1}^m (f_{w,b}(x^{(i)}) - y^{(i)})x^{(i)}$$ $$\frac{\partial J}{\partial b} = \frac{1}{m} \sum_{i=1}^m (f_{w,b}(x^{(i)}) - y^{(i)})$$ (引用[3]中线性回归的梯度公式) 3. **更新参数** 沿负梯度方向更新参数: $$w := w - \alpha \frac{\partial J}{\partial w}$$ $$b := b - \alpha \frac{\partial J}{\partial b}$$ 所有参数需同步更新[^3]。 4. **检查收敛条件** 判断是否满足终止条件(如梯度接近零、损失变化小于阈值或达到最大迭代次数)。若未满足,返回步骤2。 #### **图解说明** - **三维曲面图**:损失函数$J(\theta)$在参数空间中的形状决定了梯度下降路径。 - **凸函数**(如线性回归的平方误差):梯度下降会沿“碗形”曲面直接收敛到全局最小值。 - **非凸函数**(如神经网络损失函数):可能陷入局部最小值,路径呈现曲折波动。 - **等高线图**:参数更新轨迹在二维平面上表现为逐步向最低点(中心)逼近的折线,步长$\alpha$过大可能导致震荡,过小则收敛缓慢[^1][^2]。 #### **梯度下降的变种** 1. **批量梯度下降(BGD)** 每次更新使用全部训练数据计算梯度,计算成本高但稳定[^3]。 2. **随机梯度下降(SGD)** 每次随机选择一个样本计算梯度,更新频繁但路径波动大。 3. **小批量梯度下降(MBGD)** 折中方案,每次使用小批量数据(如32、64个样本)平衡效率和稳定性。 ```python # 梯度下降伪代码示例(以线性回归为例) def gradient_descent(X, y, alpha, max_iters): m = len(y) w, b = 0, 0 for _ in range(max_iters): grad_w = (1/m) * np.sum((X.dot(w) + b - y) * X) grad_b = (1/m) * np.sum(X.dot(w) + b - y) w -= alpha * grad_w b -= alpha * grad_b return w, b ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值