精华内容
下载资源
问答
  • 梯度下降数学解释场景假设梯度下降法的基本思想可以类比为一个下山的过程。假设这样一个场景:一个人被困在山上,需要从山上下来(找到山的最低点)。但此时山上的浓雾很大,导致可视度很低;因此,下山的路径就无法...

    c3e7660d547037105791109c9bce1024.png
    • 梯度下降数学解释

    a323c81890aba51797fc8f7d307c1031.png

    场景假设

    梯度下降法的基本思想可以类比为一个下山的过程。

    假设这样一个场景:一个人被困在山上,需要从山上下来(找到山的最低点)。但此时山上的浓雾很大,导致可视度很低;因此,下山的路径就无法确定,必须利用自己周围的信息一步一步地找到下山的路。这个时候,便可利用梯度下降算法来帮助自己下山。怎么做呢,首先以他当前的所处的位置为基准,寻找这个位置最陡峭的地方,然后朝着下降方向走一步,然后又继续以当前位置为基准,再找最陡峭的地方,再走直到最后到达最低处;同理上山也是如此,只是这时候就变成梯度上升算法了

    • 泰勒展开式

    1307f6069a0ca67f0fb56acd9b543710.png

    泰勒展开式的目的是拟合,将上图的曲线拟合成直线,虽然存在误差,但只要不影响实际情况,我们就可以直接在这条直线下进行讨论(更高维度也是如此)

    于是我们有直线方程
    f(x)-f(x)(x-x)f'(x)

    PS:场景中说的是下山,但那是在空间坐标系下讨论,这里为了方便,只在平面坐标系下做讨论,但是不管维度是多少,原理是一样的。

    • 梯度下降

    梯度:函数在给定点上升最快的方向,其本质就是导数(斜率)

    首先,我们有一个可微分(可微<=>可导)的函数。这个函数就代表着一座山。我们的目标就是找到这个函数的最小值(此时导数为0),也就是山底。根据之前的场景假设,最快的下山的方式就是找到当前位置最陡峭的方向,然后沿着此方向向下走(梯度的反方向),就能让函数值下降的最快!因为梯度的方向就是函数之变化最快的方向

    所以,我们重复利用这个方法,反复求取梯度,最后就能到达局部的最小值,这就类似于我们下山的过程。而求取梯度就确定了最陡峭的方向,也就是场景中测量方向的手段。

    • 梯度下降公式推导

    θ=[x] θ₀=[x0]

    解释:因为这里讨论的是一维(直线需要在二维下进行讨论,不然没有意义),所以 [] 内只有一个变量;如果是三维那么 [] 里就应该有三个变量[a,b,c],以此类推,最终我们把这个集合赋值给θ,方便日后讨论。

    此时我们有
    f(θ)-f(θ₀)(θ-θ₀)•▽f(θ₀)
    

    因为这是一个可微分方程,所以(θ-θ₀)是一个微小向量,我们知道标量*单位向量=向量,所以

    (θ-θ₀)=ŋν(其中  ŋ是标量,ν是单位向量)
    注意:(θ-θ₀)不能太大,否则线性近似就不够准确

    重点,局部下降的目的是希望每次θ更新 ->f(θ)↓,重复这个过程,直到▽f(θ₀)=0。所以:

    f(θ)-f(θ₀) ≈ (θ-θ₀)•▽f(θ₀) = ŋν•▽f(θ₀) < 0
    因为ŋ是标量,且一般设定为正数,所以可以忽略,则不等式变成:
    ν•▽f(θ₀) < 0     其中ν是需要我们求解的
    那么,这个不等式在表达什么
    我们知道▽f(θ₀)是当前位置的梯度方向,
    也就是说当ν的方向是梯度的反方向时,
    不等式能最大程度的小,也就保证了ν的方向是局部下降最快的方向

    36d94470f4064cd8279f3a783d84af6b.png

    将这个公式跟开头的公式对比,事情到这里就结束了,我们终于获得了梯度下降的公式,有没有发现公式推导出来后,f(θ)-f(θ₀)不见了,因为只要满足梯度下降公式,f(θ)就会一直下降(前提:(θ-θ₀)不太大),而我们只需要在图像上观察f(θ)的值就好了

    a323c81890aba51797fc8f7d307c1031.png

    0ffe851d1ed09494c9b875235844610b.png
    • 神经网络

    梯度下降公式在神经网络中用于对(w,b)的更新,是的,你只需要将θ替换成 w 或 b ,▽J(θ) 替换成 损失函数对 w 或 b 的偏导数,其中 α 是 学习率(人为设置),最后你就可以获得局部最优模型了。

    展开全文
  • 梯度下降公式推导

    千次阅读 2019-07-28 15:52:22
    梯度下降梯度下降法是求解无约束最优化问题的一种最常用的方法,是一种迭代算法,每一步需要求解目标函数的梯度向量。 梯度的定义: 某一函数沿着某点处的方向导数可以以最快速度到达极大值,该方向导数我们...

    梯度下降法

    梯度下降法是求解无约束最优化问题的一种最常用的方法,是一种迭代算法,每一步需要求解目标函数的梯度向量。

    梯度的定义:

    某一函数沿着某点处的方向导数可以以最快速度到达极大值,该方向导数我们定义为该函数的梯度。
                                                                              
    其中θ是自变量,f(θ)是关于θ的函数,▽表示梯度。 所要研究的梯度下降式子可以写为: 
                                                                    
    其中η是步长,θ是由θ0按照上述式子更新后的值。

    梯度是微积分中一个很重要的概念。

    • 在单变量的函数中,梯度其实就是函数的微分,代表着函数在某个给定点的切线的斜率
    • 在多变量函数中,梯度是一个向量,向量有方向,梯度的方向就指出了函数在给定点的上升最快的方向

    梯度的方向是函数在给定点上升最快的方向,那么梯度的反方向就是函数在给定点下降最快的方向。

    其中:

    步长:梯度下降迭代过程中每一步沿负方向前进的长度。

    步长选择:

    •  步长太大,会导致迭代过快,错过最优解;
    • 步长太小,迭代速度太慢,耗时间太长。

    公式推导:

    一阶泰勒展开式

    一阶泰勒展开式利用的是函数的局部线性近似这个概念


    这里写图片描述

    其中,  是微小矢量,它的大小就是我们之前讲的步进长度 ,为标量,而的单位向量用表示,则可以表示为:

    在泰勒公式中,我们为了保证该式成立,最重要的一点是要保证θ和θ0的差距要足够小,只有这样才能够应用泰勒公式的基本思想“以直代曲”,即

     

    即推导得到了梯度下降算法中\Theta的更新表达式。

    原:https://zhuanlan.zhihu.com/p/36503663

    比较详细的介绍:https://blog.csdn.net/pxhdky/article/details/82430196

    展开全文
  • 梯度下降数学解释: 场景假设 梯度下降法的基本思想可以类比为一个下山的过程。 假设这样一个场景:一个人被困在山上,需要从山上下来(找到山的最低点)。但此时山上的浓雾很大,导致可视度很低;因此,下山的路径...

    梯度下降数学解释:在这里插入图片描述

    • 场景假设

    梯度下降法的基本思想可以类比为一个下山的过程。
    假设这样一个场景:一个人被困在山上,需要从山上下来(找到山的最低点)。但此时山上的浓雾很大,导致可视度很低;因此,下山的路径就无法确定,必须利用自己周围的信息一步一步地找到下山的路。这个时候,便可利用梯度下降算法来帮助自己下山。怎么做呢,首先以他当前的所处的位置为基准,寻找这个位置最陡峭的地方,然后朝着下降方向走一步,然后又继续以当前位置为基准,再找最陡峭的地方,再走直到最后到达最低处;同理上山也是如此,只是这时候就变成梯度上升算法了

    • 泰勒展开式
      在这里插入图片描述
      泰勒展开式的目的是拟合,将上图的曲线拟合成直线,虽然存在误差,但只要不影响实际情况,我们就可以直接在这条直线下进行讨论(更高维度也是如此)
      于是我们有直线方程
    f(x)-f(x₀)≈(x-x₀)•f'(x₀)
    

    PS:场景中说的是下山,但那是在空间坐标系下讨论,这里为了方便,只在平面坐标系下做讨论,但是不管维度是多少,原理是一样的。

    • 梯度下降
      梯度:函数在给定点上升最快的方向,其本质就是导数(斜率)

    首先,我们有一个可微分(可微<=>可导)的函数。这个函数就代表着一座山。我们的目标就是找到这个函数的最小值(此时导数为0),也就是山底。根据之前的场景假设,最快的下山的方式就是找到当前位置最陡峭的方向,然后沿着此方向向下走(梯度的反方向),就能让函数值下降的最快!因为梯度的方向就是函数之变化最快的方向
    所以,我们重复利用这个方法,反复求取梯度,最后就能到达局部的最小值,这就类似于我们下山的过程。而求取梯度就确定了最陡峭的方向,也就是场景中测量方向的手段。

    • 梯度下降公式推导
      θ=[x] θ₀=[x0]
      解释:因为这里讨论的是一维(直线需要在二维下进行讨论,不然没有意义),所以 [] 内只有一个变量;如果是三维那么 [] 里就应该有三个变量[a,b,c],以此类推,最终我们把这个集合赋值给θ,方便日后讨论。
      此时我们有
    f(θ)-f(θ₀)≈(θ-θ₀)•▽f(θ₀)
    

    因为这是一个可微分方程,所以(θ-θ₀)是一个微小向量,我们知道标量*单位向量=向量,所以令:

    (θ-θ₀)=ŋν(其中  ŋ是标量,ν是单位向量)
    注意:(θ-θ₀)不能太大,否则线性近似就不够准确
    

    重点,局部下降的目的是希望每次θ更新 -> f(θ)↓ ,重复这个过程,直到▽f(θ₀)=0。所以:

    f(θ)-f(θ₀) ≈ (θ-θ₀)•▽f(θ₀) = ŋν•▽f(θ₀) < 0
    因为ŋ是标量,且一般设定为正数,所以可以忽略,则不等式变成:
    ν•▽f(θ₀) < 0     其中ν是需要我们求解的
    那么,这个不等式在表达什么
    我们知道▽f(θ₀)是当前位置的梯度方向,
    也就是说当ν的方向是梯度的反方向时,
    不等式能最大程度的小,也就保证了ν的方向是局部下降最快的方向
    

    在这里插入图片描述
    将这个公式跟开头的公式对比,事情到这里就结束了,我们终于获得了梯度下降的公式,有没有发现公式推导出来后,f(θ)-f(θ₀)不见了,因为只要满足梯度下降公式,f(θ)就会一直下降(前提:(θ-θ₀)不太大),而我们只需要在图像上观察f(θ)的值就好了
    在这里插入图片描述

    • 单变量示例
      在这里插入图片描述
    • 神经网络
      梯度下降公式在神经网络中用于对(w,b)的更新,是的,你只需要将θ替换成 w 或 b ,▽J(θ) 替换成 损失函数对 w 或 b 的偏导数,其中 α 是 学习率(人为设置),最后你就可以获得局部最优模型了。

    PS:后向传播算法的目的在于快速计算神经网络中各层参数的梯度,它与梯度下降算法是包含关系。

    感谢启发:https://blog.csdn.net/weixin_42278173/article/details/81511646?utm_source=app

    https://blog.csdn.net/qq_41800366/article/details/86583789?utm_source=app

    展开全文
  • 随机梯度下降公式实现

    千次阅读 2017-06-27 11:26:50
    一、梯度下降算法理论知识 我们给出一组房子面积,卧室数目以及对应房价数据,如何从数据中找到房价y与面积x1和卧室数目x2的关系? 为了实现监督学习,我们选择采用自变量x1、x2的线性函数来评估因变量y值,...

    一、梯度下降算法理论知识

    我们给出一组房子面积,卧室数目以及对应房价数据,如何从数据中找到房价y与面积x1和卧室数目x2的关系?

    为了实现监督学习,我们选择采用自变量x1、x2的线性函数来评估因变量y值,得到:

    这里,sita1、sita2代表自变量x1、x2的权重(weights),sita0代表偏移量。为了方便,我们将评估值写作h(x),令x0=1,则h(x)可以写作:

    其中n为输入样本数的数量。为了得到weights的值,我们需要令我们目前的样本数据评估出的h(x)尽可能的接近真实y值。我们定义误差函数(cost function)来表示h(x)和y值相接近的程度:

    这里的系数1/2是为了后面求解偏导数时可以与系数相互抵消。我们的目的是要误差函数尽可能的小,即求解weights使误差函数尽可能小。首先,我们随机初始化weigths,然后不断反复的更新weights使得误差函数减小,直到满足要求时停止。这里更新算法我们选择梯度下降算法,利用初始化的weights并且反复更新weights:

    这里a代表学习率,表示每次向着J最陡峭的方向迈步的大小。为了更新weights,我们需要求出函数J的偏导数。首先计算只有一个数据样本(x,y)时,如何计算J的偏导数:

    对于只含有一组数据的训练样本,我们可以得到更新weights的规则为:

    扩展到多组数据样本,更新公式为:

    称为批处理梯度下降算法,这种更新算法所需要的运算成本很高,尤其是数据量较大时。考虑下面的更新算法:

    该算法又叫做随机梯度下降法,这种算法不停的更新weights,每次使用一个样本数据进行更新。当数据量较大时,一般使用后者算法进行更新。

    二、梯度下降Python实现

    自己创建了一组数据,存为csv格式,如下图所示:

    待训练数据A、B为自变量,C为因变量。

    在写程序之前,要先导入我们需要的模块。

    import numpy as np
    from numpy import genfromtxt

    首先将数据读入Python中,程序如下所示:

    dataPath = r"E:\learning\house.csv"
    dataSet = genfromtxt(dataPath, delimiter=',')

    接下来将读取的数据分别得到自变量矩阵和因变量矩阵:

    def getData(dataSet):
        m, n = np.shape(dataSet)
        trainData = np.ones((m, n))
        trainData[:,:-1] = dataSet[:,:-1]
        trainLabel = dataSet[:,-1]
        return trainData, trainLabel


    这里需要注意的是,在原有自变量的基础上,需要主观添加一个均为1的偏移量,即公式中的x0。原始数据的前n-1列再加上添加的偏移量组成自变量trainData,最后一列为因变量trainLabel。
    下面开始实现批处理梯度下降算法:

    def batchGradientDescent(x, y, theta, alpha, m, maxIterations):
        xTrains = x.transpose()
        for i in range(0, maxIterations):
            hypothesis = np.dot(x, theta)
            loss = hypothesis - y
            gradient = np.dot(xTrains, loss) / m
            theta = theta - alpha * gradient
        return theta

    x为自变量训练集,y为自变量对应的因变量训练集;theta为待求解的权重值,需要事先进行初始化;alpha是学习率;m为样本总数;maxIterations为最大迭代次数;
    求解权重过程,初始化batchGradientDescent函数需要的各个参数:

    trainData, trainLabel = getData(dataSet)
    m, n = np.shape(trainData)
    theta = np.ones(n)
    alpha = 0.05
    maxIteration = 1000


    alpha和maxIterations可以更改,之后带入到batchGradientDescent中可以求出最终权重值。

    theta = batchGradientDescent(trainData, trainLabel, theta, alpha, m, maxIteration)
    


    之后我们给出一组数据,需要进行预测,预测函数:

    def predict(x, theta):
        m, n = np.shape(x)
        xTest = np.ones((m, n+1))
        xTest[:, :-1] = x
        yPre = np.dot(xTest, theta)
        return yPre

    x为待预测值的自变量,thta为已经求解出的权重值,yPre为预测结果
    我们给出测试集



    对该组数据进行预测,程序如下:

    x = np.array([[3.1, 5.5], [3.3, 5.9], [3.5, 6.3], [3.7, 6.7], [3.9, 7.1]])
    print predict(x, theta)


    输出结果如下:

    [9.49608552  10.19523475  10.89438398  11.59353321  12.29268244]

    我们可以更改学习率和迭代次数进行预测结果的对比:
    更改学习率由0.05变为0.1时,结果为:

    [ 9.49997917  10.19997464  10.89997012  11.59996559  12.29996106]


    发现预测结果要由于学习率为0.05时,这说明学习率0.05选择的偏小,即每一次迈步偏小。
    固定学习率为0.05,更改迭代次数为5000时,结果为:

    [ 9.5  10.2  10.9  11.6  12.3]

    这正是我们想要的预测结果,这说明有限循环次数内,循环次数越多,越接近真实值。但是也不能无限循环下去,需要寻找一个度。

    一般达到以下的任意一种情况即可以停止循环:
    1.权重的更新低于某个阈值;
    2.预测的错误率低于某个阈值;
    3.达到预设的最大循环次数;
    其中达到任意一种,就停止算法的迭代循环,得出最终结果。
    完整的程序如下:

    #coding=utf-8
     
    import numpy as np
    import random
    from numpy import genfromtxt
     
    def getData(dataSet):
        m, n = np.shape(dataSet)
        trainData = np.ones((m, n))
        trainData[:,:-1] = dataSet[:,:-1]
        trainLabel = dataSet[:,-1]
        return trainData, trainLabel
     
    def batchGradientDescent(x, y, theta, alpha, m, maxIterations):
        xTrains = x.transpose()
        for i in range(0, maxIterations):
            hypothesis = np.dot(x, theta)
            loss = hypothesis - y
            # print loss
            gradient = np.dot(xTrains, loss) / m
            theta = theta - alpha * gradient
        return theta
     
    def predict(x, theta):
        m, n = np.shape(x)
        xTest = np.ones((m, n+1))
        xTest[:, :-1] = x
        yP = np.dot(xTest, theta)
        return yP
     
    dataPath = r"E:\learning\house.csv"
    dataSet = genfromtxt(dataPath, delimiter=',')
    trainData, trainLabel = getData(dataSet)
    m, n = np.shape(trainData)
    theta = np.ones(n)
    alpha = 0.1
    maxIteration = 5000
    theta = batchGradientDescent(trainData, trainLabel, theta, alpha, m, maxIteration)
    x = np.array([[3.1, 5.5], [3.3, 5.9], [3.5, 6.3], [3.7, 6.7], [3.9, 7.1]])
    print predict(x, theta)


    展开全文
  • 梯度下降公式 损失函数公式 梯度下降(Gradient Descent),一次更新θ,使用训练样本中所有样本 随机梯度下降(Stochastic Gradient Descent),一次更新θ,使用训练样本中一个数据 批量梯度下降(Batch ...
  • mllib之梯度下降公式推导

    千次阅读 2015-03-25 00:15:14
    梯度下降(GD)是最小化风险函数、损失函数的一种常用方法,随机梯度下降和批量梯度下降是两种迭代求解思路,下面从公式和实现的角度对两者进行分析,如有哪个方面写的不对,希望网友纠正。 下面的h(x)是要拟合的...
  • 这篇是西瓜书第五章的公式推导笔记,主要在于对公式推导过程说明的笔记,但是博客标注转载需要原文链接,我没有啊,所以写了原创,愧疚。
  • Logistic回归代价函数的梯度下降公式推导过程Logistic回归代价函数梯度下降公式数学推导过程数学推导过程如下 Logistic回归代价函数梯度下降公式数学推导过程 因为最近在学习吴恩达的机器学习,这只是个人顺手保存...
  • TensorFlow可视化梯度下降/公式调参

    千次阅读 2018-07-20 15:45:46
    本篇博客主要介绍TensorFlow中的可视化梯度下降和参数调参。 首先是可视化梯度下降,使用的是python中Axes3d模块。 示例代码: import tensorflow as tf import numpy as np import matplotlib.pyplot as plt ...
  • 文章目录前言公式推导总结 前言 什么是AI? The theory and development of ...其实不用泰勒展开式也是可以简单方便的得出梯度下降法的结论的,在高数书本(同济)的微分的定义里就有讲到(我看的是同济7版第113页和
  • 什么是梯度下降,举个栗子,(假设地面无障碍物)我们在山顶丢一个网球,啪,一下就越过这个坡了,然后在另一个沟里来回跳动,一直到达最低点。那么问题来了,这这里在跳跃的过程中,直接越过第一个坡度。这样的结果...
  • Logistic回归cost函数的推导过程。...对于一个函数,我们要找它的最小值,有多种算法,这里我们选择比较容易用代码实现和符合机器学习步骤的梯度下降算法。 先来看看梯度下降算法中,自变量的迭代过程...
  • 从泰勒公式到梯度下降梯度下降法(Gradient descent)在机器学习领域是非常常见的一种优化函数,尤其是在深度学习相关领域,就我们现在熟悉的Adam、Momentum、Adagrad等,均是以梯度下降法为基础发展而来,因此梯度...
  • 逻辑回归梯度下降公式详细推导

    千次阅读 2015-09-30 00:40:57
    标签(空格分隔): 机器学习 在一次面试中被问道了逻辑回归公式的推导,虽然知道原理,但是从来未从头到尾推导过,面试时估计有点困,又不完全熟悉,又略有紧张(借口找的齐全了…)。面试官还算仁慈,没有太严格...
  • 该课程在讲到梯度下降时。有一个公式。如下图 难点就是求导过程,求导结果如下: 但老师直接给出了求导的答案。没有讲解推导过程。我便学了两天微积分的导数。试图推导该公式。若有什么不正确的地方望指正。 ...
  • 在gradient descent 梯度下降公式中,一般的表达都是如下: ​ 论坛链接:为什么用这个公式
  • 用最简单的、通俗的语言教会小白学会“梯度下降”算法的原理,并进行详细的公式推导,一步一步计算,代码一步一步讲解和操作,力求使小白“听得懂、学的会”
  • cost函数形式: 简单回顾一下几个变量的含义: ... 这里的两条路线分别走向不同的山谷,这就说明:梯度下降算法只能求出一个局部最小值,不一定是全局最小值,但这不影响它是一个好的方法。  
  • http://www.julyedu.com/question/big/kp_id/23/ques_id/1017
  • 梯度下降法参数更新公式的推导 先来回顾一下梯度下降法的参数更新公式: (其中,α是学习速率,是梯度) 这个公式是怎么来的呢?下面进行推导: 首先,如果一个函数n 阶可导,那么我们可以用多项式仿造一...
  • 机器学习之多元线性回归模型梯度下降公式与代码实现(篇二)
  • 深度学习之反向传播与梯度下降   有了前馈神经网络,又有了损失函数,就可以使用反向传播算法来更新神经网络中的参数,使得网络的输出尽可能地接近真实值。反向传播算法就是通过链式法则,从最后面的损失函数开始...
  • 梯度下降 我们的目标是预测值与真实值的差距越小越好,由此可以设置目标函数为: 上式中,平方项内为真实值与预测值的差值,目标函数为差值的平方的均值。 思考:目标函数值越小越好,即求取目标函数的最小值点。...
  • 梯度下降及反向传递公式推导 之前发布在作业部落了,可以通过这个链接访问,其中的数学公式转过来比较麻烦,先看作业部落的链接吧:https://www.zybuluo.com/JackMeGo/note/1052246 ...
  • 根据《统计学习方法》第6章中6.1节介绍,下面对损失函数以及参数www的梯度下降公式的推导: SigmoidSigmoidSigmoid函数为: g(z)=11+e−zg(z)=\frac{1}{1+e^{-z}}g(z)=1+e−z1​ 给定一个样本xxx,可以使用一个线性...
  • 理解梯度首先要理解导数、偏导数、方向导数。 导数: 指的是一元函数y=f(x)y = f(x)y=f(x) 在某一点处沿x轴正方向的变化率。若导数大于0,说明函数值在该点处沿x轴正方向是递增的,若导数小于0,说明函数值在该...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,034
精华内容 813
关键字:

下降梯度公式