博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
梯度算法之初见
阅读量:2166 次
发布时间:2019-05-01

本文共 1782 字,大约阅读时间需要 5 分钟。

本文涉及内容

  • 什么是梯度
  • 为什么需要梯度下降算法
  • 如何理解梯度算法
  • 数学推导
  • 梯度算法的缺点

什么是梯度

  • 简单来说,多元函数的导数(derivative)就是梯度(gradient),因为导数标识函数的变化趋势(递增或递减,震荡),分别对每个变量进行微分,然后用逗号隔开,梯度是用括号包括起来,说明梯度实质是一个向量,我们说的损失函数Loss Function的梯度为:

    梯度

  • 导数就是函数变化趋势-变化率。梯度是向量,和参数维度一样,将设有一个二元函数f(x1,x2) = x1^2 + x1* x2 - 3*x2,那么f的梯度为,即同时对x1,x2求偏导

    f梯度

  • 则有在点(1,2)出,f梯度取值为(直接带入x1,x2)的,实际就是多元导数的导数值(对应即变化率):

    1,2的梯度

  • 梯度作用: 在单变量(因变量(函数f)只有一个未知数x),梯度实质就是函数的微分(求导后的结果),代表着函数在某个给定点的切线斜率;在多变量函数中,梯度是一个向量(可以认为在多个自变量的各自斜率),向量有方向,梯度的方向就指出了函数在给定点的上升最快的方向

  • 梯度指向误差值增加最快的方向,导数为0(梯度为0的向量,即导数为,为极值点,一定范围内可为最值点,也存在局部梯度问题),就是优化问题的解。在上面的二元函数中,点(1,2)向着(4,2)的方向就是梯度方向,为了找到该解,我们沿着梯度的方向进行线性探索,从而减少误差值。每次探索不错为某个特定数值,直到梯度与0向量非常接近位置。

    更新点

为什么需要梯度下降算法

  • 抛开具体场景,仅从数学抽象的角度来看:每个模型都有自己的损失函数,不管是监督式学习还是非监督式学习。损失函数包含了若干个位置的模型参数,比如在多元线性回归中,损失函数如下图 ,我们就是要找到使损失函数尽可能小的参数未知模型参数。
    损失函数
  • 在用最小二乘法求损失函数的最小值时(计算所有样本实际值与预测值的差值的平方,不断调整,得到最小值,即为最小二乘法的最优解),其为一个特例;大多数情况, 损失函数很复杂(如逻辑回归),根本无法得到参数估计值的表达式,因此需要一种对大多数函数都适用的方,即梯度算法

如何理解梯度算法

  • 首先梯度下降(Gradient Descent, GD),不是一个机器学习算法,而是一种基于搜索的最优化方法。梯度下降(Gradient Descent, GD)优化算法,其作用是用来对原始模型的损失函数进行优化,以便寻找到最优的参数,使得损失函数的值最小。
  • 要找到使损失函数最小化的参数,如果纯粹靠试错搜索,比如随机选择1000个值,依次作为某个参数的值,得到1000个损失值,选择其中那个让损失值最小的值,作为最优的参数值,那这样太笨了。我们需要更聪明的算法,从损失值出发,去更新参数,且要大幅降低计算次数。
  • 梯度下降算法作为一个聪明很多的算法,抓住了参数与损失值之间的导数,也就是能够计算梯度(gradient),通过导数告诉我们此时此刻某参数应该朝什么方向,以怎样的速度运动,能安全高效降低损失值,朝最小损失值靠拢。

梯度算法数学推导

  • 从数学角度出发,针对损失函数L,假设选取的初始点(a0,b0);现在将这个点稍微一动一点点,得到(a1,b1),那么根据带有皮亚诺余项的泰勒展开有:

    皮亚诺余项的泰勒展开式

  • 设我们移动一点点为 L,则我们可以得到 L = L(a1,b1) - L(a0,b0),泰勒展开是带入其中则有

    在这里插入图片描述

  • 令我们移动距离分别为 a, b,则有

    在这里插入图片描述

  • 这说明,我们若按规定的移动距离公式去移动参数,那么损失函数的函数值是始终下降的,这就达到我们要求的”损失变小”的要求。若一直重复移动,则可证明损失函数最终能够达到一个最小值,即可以得到损失函数值(下一步落脚点)的迭代公式

    在这里插入图片描述

梯度算法的缺点

  • 从理论上,它只能保证达到局部最低点,而非全局最低点。在很多复杂函数中有很多极小值点,我们使用梯度下降法只能得到局部最优解,而不能得到全局最优解
  • 那么对应的解决方案如下:首先随机产生多个初始参数集,即多组a0,b0;然后分别对每个初始参数集使用梯度下降法,直到函数值收敛于某个值;最后从这些值中找出最小值,这个找到的最小值被当作函数的最小值。当然这种方式不一定能找到全局最优解,但是起码能找到较好的。
  • 会存在梯度爆炸和梯度消失的情况,无法真正找到损失函数的最小值
  • 对于梯度下降来说,初始点位置,也是一个超参数
    在这里插入图片描述

转载地址:http://thjzb.baihongyu.com/

你可能感兴趣的文章
了解 Sklearn 的数据集
查看>>
用ARIMA模型做需求预测
查看>>
推荐系统
查看>>
TensorFlow-11-策略网络
查看>>
浅谈 GBDT
查看>>
如何选择优化器 optimizer
查看>>
一文了解强化学习
查看>>
CART 分类与回归树
查看>>
seq2seq 的 keras 实现
查看>>
seq2seq 入门
查看>>
什么是 Dropout
查看>>
用 LSTM 做时间序列预测的一个小例子
查看>>
用 LSTM 来做一个分类小问题
查看>>
详解 LSTM
查看>>
按时间轴简述九大卷积神经网络
查看>>
详解循环神经网络(Recurrent Neural Network)
查看>>
为什么要用交叉验证
查看>>
用学习曲线 learning curve 来判别过拟合问题
查看>>
用验证曲线 validation curve 选择超参数
查看>>
用 Grid Search 对 SVM 进行调参
查看>>