精华内容
下载资源
问答
  • 函数在某一点的梯度是,在该方向单位步长上升最快的向量。梯度下降法是利用待优化变量,沿着负梯度方向不断迭代寻找最优值。 直观理解: 梯度下降法算法流程: (PPT画个图可真难) 梯度下降法证明:通过...

    梯度下降法沿着负梯度方向逐步更新优化参数

    最优梯度法利用梯度计算步长,减小在谷底的来回振动

    共轭梯度法每次搜索方向与上次方向共轭,理论上K维变量经过k次迭代可找到最优解

    1 梯度下降法

    函数在某一点的梯度是,在该方向单位步长上升最快的向量。梯度下降法是利用待优化变量,沿着负梯度方向不断迭代寻找最优值。

    直观理解:

                                                          

    梯度下降法算法流程:

                       

    (PPT画个图可真难)

    梯度下降法证明:通过泰勒展开表达式证明沿着梯度下降最快。

    对函数f(x)在初值x_0处进行一阶泰勒展开可以得到:

                                                                        f(x) \approx f(x_0) + (x-x_0)f{}'(x_0)                           (1-1)

    由于是在x_0处泰勒展开,即在x_0附近近似程度才较高,因此x-x_0是微小向量,可以令:

                                                                                    x-x_0 = \alpha v

    \alpha是步长,v是单位向量,则有:((1-1)用约等于,后序采用等于号)

                                                                            f(x) = f(x_0) + \alpha vf{}'(x_0)

    目的是找到新的x,使f(x) < f(x_0),即f(x) - f(x_0) < 0,令:

                                                                        f(x) - f(x_0) = \alpha vf{}'(x_0) < 0

    得到目的转化为:

                                                                                    \alpha vf{}'(x_0) < 0

    \alpha是正标量忽略,得到:

                                                                                     vf{}'(x_0) < 0

    由于向量v为单位向量,设\beta为v与f{}'(x_0)之间的夹角,由:

                                                                        vf{}'(x_0)=|v|\cdot |f{}'(x_0)|cos(\beta )

    当且仅当v与f{}'(x_0)方向相反时,vf{}'(x_0)取得最小值,由f(x) - f(x_0) = \alpha vf{}'(x_0)可知,此时f(x)在此方向下降最快,即在梯度反方向下降最快。

    2 最优梯度法

    梯度法设置固定步长,可能出现的情况是在谷底左右来回波动难以收敛。最优梯度法根据梯度模长设置步长,在越接近最优点,步长越短。算法如下:

                         

    相比梯度下降法,最优梯度法的核心在于利用梯度计算步长,步长计算公式推导如下:

    最优化方程可以写成如下形式:

                                                          minf(x) = f(x_i + \alpha \theta _i) = f(x_{i+1})

    f(x)x_i处进行二阶泰勒展开得到:

                                                    f(x) = f(x_i) + \bigtriangledown ^Tf(x_i)\bigtriangleup x+\frac{1}{2}\bigtriangleup x^TA\bigtriangleup x

    其中,A是f(x)的二阶偏导矩阵。用\alpha \theta _i替换\bigtriangleup x可以得到:

                                                    f(x) = f(x_i) + \bigtriangledown ^Tf(x_i)(\alpha \theta _i)+\frac{1}{2}(\alpha \theta _i)^TA(\alpha \theta _i)

    在极小值处有:

                                                                 \frac{\partial f}{\partial \alpha} = \bigtriangledown^T f(x) \theta_i + \alpha _i \theta_i^TA\theta_i = 0

    即可得到:

                                                                          \alpha _i =- \frac{\bigtriangledown^T f(x_i) \theta_i}{\theta_i^TA\theta_i}

     3 共轭梯度法

    共轭梯度法对最优梯度法进行了修正,搜索方向为共轭方向,将负梯度方向旋转了一个角度,每次往最优方向需要在负梯度方向进行修正。算法如下:

                                                

    共轭梯度法证明:

    对于二次型优化问题:

                                                                       f(x) = \frac{1}{2}x^TQx + c^Tx + k                                 (3-1)

    下一次的搜索方向需要与上一次搜索方向共轭,即:

                                                                                P_{i+1}QP_i = 0                                               (3-2)

    计算梯度:

                                                          \bigtriangledown f(x_{i+1}) = Qx_{i+1} + k, \bigtriangledown f(x_{i}) = Qx_{i} + k                  (3-3)

    两梯度相减可得:

                                                                 \bigtriangledown f(x_{i+1}) - \bigtriangledown f(x_{i}) = Q(x_{i+1} - x_{i})                       (3-4)

    由参数更新公式:

                                                                                   x_{i+1} = x_i + \lambda_i P_i                                      (3-5)

    代入(3-4)可得:

                                                                    P_i = \frac{Q^{-1}(\bigtriangledown f(x_{i+1}) - \bigtriangledown f(x_{i}) )}{\lambda_i}                           (3-6)

    将方向更新公式:

                                                                       P_{i+1} = -\bigtriangledown f(x_{i+1}) + \alpha_i P_i                               (3-7)

    及(3-6)代入(3-2)可得:

                                      (-\bigtriangledown f(x_{i+1}) + \alpha_i P_i)\cdot Q\cdot \frac{Q^{-1}(\bigtriangledown f(x_{i+1}) - \bigtriangledown f(x_{i}) )}{\lambda_i}=0            (3-8)

    因为P_i\bigtriangledown f(x_{i+1})正交,乘积为0。化简(3-8)可得:

                                         -\left \| \bigtriangledown f(x_{i+1}) \right \| ^2+ \bigtriangledown f(x_i)\bigtriangledown f(x_{i+1}) - \alpha_i\bigtriangledown P_i f(x_i) =0            (3-9)

    P_{i} = -\bigtriangledown f(x_{i}) + \alpha_{i-1} P_{i-1}代入3-9得到:

                                                            \alpha _i =\frac{\left \| \bigtriangledown f(x_{i+1}) \right \| ^2-\bigtriangledown f(x_i)\bigtriangledown f(x_{i+1})}{\left \| \bigtriangledown f(x_{i}) \right \| ^2}                     (3-10)

    可以近似成:

                                                                             \alpha _i =\frac{\left \| \bigtriangledown f(x_{i+1}) \right \| ^2}{\left \| \bigtriangledown f(x_{i}) \right \| ^2}                                        (3-11)

    表格中步长计算采用了一维搜索法,当然也可以固定步长或者采用最优梯度法中的步长计算方法进行替换。

    梯度下降法在不同的迭代轮数中会选择非常近似的方向,说明沿着这个方向的误差没有一次更新完成,优化过程呈锯齿状。共轭梯度法的思想是,选择一个优化方向后,本次选择的步长能够将这个方向的误差更新完,在以后的优化更新过程中不再需要朝这个方向更新了。由于每次将一个方向优化到了极小,后面的优化过程将不再影响之前优化方向上的极小值,所以理论上对N维问题求极小只用对N个方向都求出极小就行了。

    共轭梯度法计算流程如下图:

                                   

     

    展开全文
  • 梯度下降

    2019-01-07 22:10:30
    在求解机器学习算法的模型参数,即无约束优化问题时,梯度下降(Gradient Descent)是最常采用的方法之一,另一种常用的方法是最小二乘法。这里就对梯度下降法做一个完整的总结... 函数在某一点的梯度是这样一个向...

    在求解机器学习算法的模型参数,即无约束优化问题时,梯度下降(Gradient Descent)是最常采用的方法之一,另一种常用的方法是最小二乘法。这里就对梯度下降法做一个完整的总结。

    1. 梯度

    定义 

    导数与梯度

     梯度的定义如下: 
     梯度定义 
     梯度的提出只为回答一个问题: 
     函数在变量空间的某一点处,沿着哪一个方向有最大的变化率? 
     梯度定义如下: 
     函数在某一点的梯度是这样一个向量,它的方向与取得最大方向导数的方向一致,而它的模为方向导数的最大值。 
     这里注意三点: 
     1)梯度是一个向量,即有方向有大小; 
     2)梯度的方向是最大方向导数的方向; 
     3)梯度的值是最大方向导数的值。 

     

    2. 梯度下降与梯度上升

        在机器学习算法中,在最小化损失函数时,可以通过梯度下降法来一步步的迭代求解,得到最小化的损失函数,和模型参数值。反过来,如果我们需要求解损失函数的最大值,这时就需要用梯度上升法来迭代了。

        梯度下降法和梯度上升法是可以互相转化的。比如我们需要求解损失函数f(θ)的最小值,这时我们需要用梯度下降法来迭代求解。但是实际上,我们可以反过来求解损失函数 -f(θ)的最大值,这时梯度上升法就派上用场了。

        下面来详细总结下梯度下降法。        

    3. 梯度下降法算法详解

    3.1 梯度下降的直观解释

        首先来看看梯度下降的一个直观的解释。比如我们在一座大山上的某处位置,由于我们不知道怎么下山,于是决定走一步算一步,也就是在每走到一个位置的时候,求解当前位置的梯度,沿着梯度的负方向,也就是当前最陡峭的位置向下走一步,然后继续求解当前位置梯度,向这一步所在位置沿着最陡峭最易下山的位置走一步。这样一步步的走下去,一直走到觉得我们已经到了山脚。当然这样走下去,有可能我们不能走到山脚,而是到了某一个局部的山峰低处。从上面的解释可以看出,梯度下降不一定能够找到全局的最优解,有可能是一个局部最优解。当然,如果损失函数是凸函数,梯度下降法得到的解就一定是全局最优解。

    3.2 梯度下降的相关概念

        在详细了解梯度下降的算法之前,我们先看看相关的一些概念。

        1. 步长(Learning rate):步长决定了在梯度下降迭代的过程中,每一步沿梯度负方向前进的长度。用上面下山的例子,步长就是在当前这一步所在位置沿着最陡峭最易下山的位置走的那一步的长度。

        2.特征(feature):指的是样本中输入部分,比如2个单特征的样本(x(0),y(0)),(x(1),y(1))(x(0),y(0)),(x(1),y(1)),则第一个样本特征为x(0)x(0),第一个样本输出为y(0)y(0)。

        3. 假设函数(hypothesis function):在监督学习中,为了拟合输入样本,而使用的假设函数,记为hθ(x)hθ(x)。比如对于单个特征的m个样本(x(i),y(i))(i=1,2,...m)(x(i),y(i))(i=1,2,...m),可以采用拟合函数如下: hθ(x)=θ0+θ1xhθ(x)=θ0+θ1x。

        4. 损失函数(loss function):为了评估模型拟合的好坏,通常用损失函数来度量拟合的程度。损失函数极小化,意味着拟合程度最好,对应的模型参数即为最优参数。在线性回归中,损失函数通常为样本输出和假设函数的差取平方。比如对于m个样本(xi,yi)(i=1,2,...m)(xi,yi)(i=1,2,...m),采用线性回归,损失函数为:

                 J(θ0,θ1)=∑i=1m(hθ(xi)−yi)2J(θ0,θ1)=∑i=1m(hθ(xi)−yi)2

         其中xixi表示第i个样本特征,yiyi表示第i个样本对应的输出,hθ(xi)hθ(xi)为假设函数。   

    3.3 梯度下降的详细算法

        梯度下降法的算法可以有代数法和矩阵法(也称向量法)两种表示,如果对矩阵分析不熟悉,则代数法更加容易理解。不过矩阵法更加的简洁,且由于使用了矩阵,实现逻辑更加的一目了然。这里先介绍代数法,后介绍矩阵法。

     

    3.3.1 梯度下降法的代数方式描述

        1. 先决条件: 确认优化模型的假设函数和损失函数。

        比如对于线性回归,假设函数表示为 hθ(x1,x2,...xn)=θ0+θ1x1+...+θnxnhθ(x1,x2,...xn)=θ0+θ1x1+...+θnxn, 其中θiθi (i = 0,1,2... n)为模型参数,xixi (i = 0,1,2... n)为每个样本的n个特征值。这个表示可以简化,我们增加一个特征x0=1x0=1 ,这样hθ(x0,x1,...xn)=∑i=0nθixihθ(x0,x1,...xn)=∑i=0nθixi。

        同样是线性回归,对应于上面的假设函数,损失函数为:

               J(θ0,θ1...,θn)=12m∑j=0m(hθ(x(j)0,x(j)1,...x(j)n)−yj)2J(θ0,θ1...,θn)=12m∑j=0m(hθ(x0(j),x1(j),...xn(j))−yj)2

     

        2. 算法相关参数初始化:主要是初始化θ0,θ1...,θnθ0,θ1...,θn,算法终止距离εε以及步长αα。在没有任何先验知识的时候,我喜欢将所有的θθ初始化为0, 将步长初始化为1。在调优的时候再 优化。

        3. 算法过程:

          1)确定当前位置的损失函数的梯度,对于θiθi,其梯度表达式如下:

            ∂∂θiJ(θ0,θ1...,θn)∂∂θiJ(θ0,θ1...,θn)

          2)用步长乘以损失函数的梯度,得到当前位置下降的距离,即α∂∂θiJ(θ0,θ1...,θn)α∂∂θiJ(θ0,θ1...,θn)对应于前面登山例子中的某一步。

          3)确定是否所有的θiθi,梯度下降的距离都小于εε,如果小于εε则算法终止,当前所有的θiθi(i=0,1,...n)即为最终结果。否则进入步骤4.

          4)更新所有的θθ,对于θiθi,其更新表达式如下。更新完毕后继续转入步骤1.

            θi=θi−α∂∂θiJ(θ0,θ1...,θn)θi=θi−α∂∂θiJ(θ0,θ1...,θn)

        下面用线性回归的例子来具体描述梯度下降。假设我们的样本是(x(0)1,x(0)2,...x(0)n,y0),(x(1)1,x(1)2,...x(1)n,y1),...(x(m)1,x(m)2,...x(m)n,ym)(x1(0),x2(0),...xn(0),y0),(x1(1),x2(1),...xn(1),y1),...(x1(m),x2(m),...xn(m),ym),损失函数如前面先决条件所述:

        J(θ0,θ1...,θn)=12m∑j=0m(hθ(x(j)0,x(j)1,...x(j)n)−yj)2J(θ0,θ1...,θn)=12m∑j=0m(hθ(x0(j),x1(j),...xn(j))−yj)2。

        则在算法过程步骤1中对于θiθi 的偏导数计算如下:   

         ∂∂θiJ(θ0,θ1...,θn)=1m∑j=0m(hθ(x(j)0,x(j)1,...x(j)n)−yj)x(j)i∂∂θiJ(θ0,θ1...,θn)=1m∑j=0m(hθ(x0(j),x1(j),...xn(j))−yj)xi(j)

        由于样本中没有x0x0上式中令所有的xj0x0j为1.

        步骤4中θiθi的更新表达式如下:

               θi=θi−α1m∑j=0m(hθ(x(j)0,x(j)1,...xjn)−yj)x(j)iθi=θi−α1m∑j=0m(hθ(x0(j),x1(j),...xnj)−yj)xi(j)

        从这个例子可以看出当前点的梯度方向是由所有的样本决定的,加1m1m 是为了好理解。由于步长也为常数,他们的乘机也为常数,所以这里α1mα1m可以用一个常数表示。

        在下面第4节会详细讲到的梯度下降法的变种,他们主要的区别就是对样本的采用方法不同。这里我们采用的是用所有样本。

    3.3.2 梯度下降法的矩阵方式描述

        这一部分主要讲解梯度下降法的矩阵方式表述,相对于3.3.1的代数法,要求有一定的矩阵分析的基础知识,尤其是矩阵求导的知识。

        1. 先决条件: 和3.3.1类似, 需要确认优化模型的假设函数和损失函数。对于线性回归,假设函数hθ(x1,x2,...xn)=θ0+θ1x1+...+θnxnhθ(x1,x2,...xn)=θ0+θ1x1+...+θnxn的矩阵表达方式为:

         hθ(X)=Xθhθ(X)=Xθ ,其中, 假设函数hθ(X)hθ(X)为mx1的向量,θθ为(n+1)x1的向量,里面有n+1个代数法的模型参数。XX为mx(n+1)维的矩阵。m代表样本的个数,n+1代表样本的特征数。

                 损失函数的表达式为:J(θ)=12(Xθ−Y)T(Xθ−Y)J(θ)=12(Xθ−Y)T(Xθ−Y), 其中YY是样本的输出向量,维度为mx1.

        2. 算法相关参数初始化: θθ向量可以初始化为默认值,或者调优后的值。算法终止距离εε,步长αα和3.3.1比没有变化。

        3. 算法过程:

          1)确定当前位置的损失函数的梯度,对于θθ向量,其梯度表达式如下:

            ∂∂θJ(θ)∂∂θJ(θ)

          2)用步长乘以损失函数的梯度,得到当前位置下降的距离,即α∂∂θJ(θ)α∂∂θJ(θ)对应于前面登山例子中的某一步。

          3)确定θθ向量里面的每个值,梯度下降的距离都小于εε,如果小于εε则算法终止,当前θθ向量即为最终结果。否则进入步骤4.

          4)更新θθ向量,其更新表达式如下。更新完毕后继续转入步骤1.

            θ=θ−α∂∂θJ(θ)θ=θ−α∂∂θJ(θ)

       

        还是用线性回归的例子来描述具体的算法过程。

        损失函数对于θθ向量的偏导数计算如下:

          ∂∂θJ(θ)=XT(Xθ−Y)∂∂θJ(θ)=XT(Xθ−Y)

        步骤4中θθ向量的更新表达式如下:θ=θ−αXT(Xθ−Y)θ=θ−αXT(Xθ−Y)

        对于3.3.1的代数法,可以看到矩阵法要简洁很多。这里面用到了矩阵求导链式法则,和两个矩阵求导的公式。

          公式1:∂∂x(xTx)=2x∂∂x(xTx)=2x, 其中xx为向量

          公式2:∂∂θ(Xθ)=XT∂∂θ(Xθ)=XT

        如果需要熟悉矩阵求导建议参考张贤达的《矩阵分析与应用》一书。

     

    3.4 梯度下降的算法调优

        在使用梯度下降时,需要进行调优。哪些地方需要调优呢?

        1. 算法的步长选择。在前面的算法描述中,我提到取步长为1,但是实际上取值取决于数据样本,可以多取一些值,从大到小,分别运行算法,看看迭代效果,如果损失函数在变小,说明取值有效,否则要增大步长。前面说了。步长太大,会导致迭代过快,甚至有可能错过最优解。步长太小,迭代速度太慢,很长时间算法都不能结束。所以算法的步长需要多次运行后才能得到一个较为优的值。

        2. 算法参数的初始值选择。 初始值不同,获得的最小值也有可能不同,因此梯度下降求得的只是局部最小值;当然如果损失函数是凸函数则一定是最优解。由于有局部最优解的风险,需要多次用不同初始值运行算法,关键损失函数的最小值,选择损失函数最小化的初值。

        3.归一化。由于样本不同特征的取值范围不一样,可能导致迭代很慢,为了减少特征取值的影响,可以对特征数据归一化,也就是对于每个特征x,求出它的期望x¯¯¯x¯和标准差std(x),然后转化为:

          x−x¯¯¯std(x)x−x¯std(x)

        这样特征的新期望为0,新方差为1,迭代次数可以大大加快。

    4. 梯度下降法大家族(BGD,SGD,MBGD)

    4.1 批量梯度下降法(Batch Gradient Descent)

        批量梯度下降法,是梯度下降法最常用的形式,具体做法也就是在更新参数时使用所有的样本来进行更新,这个方法对应于前面3.3.1的线性回归的梯度下降算法,也就是说3.3.1的梯度下降算法就是批量梯度下降法。  

        θi=θi−α∑j=0m(hθ(x(j)0,x(j)1,...x(j)n)−yj)x(j)iθi=θi−α∑j=0m(hθ(x0(j),x1(j),...xn(j))−yj)xi(j)

        由于我们有m个样本,这里求梯度的时候就用了所有m个样本的梯度数据。

    4.2 随机梯度下降法(Stochastic Gradient Descent)

        随机梯度下降法,其实和批量梯度下降法原理类似,区别在与求梯度时没有用所有的m个样本的数据,而是仅仅选取一个样本j来求梯度。对应的更新公式是:

        θi=θi−α(hθ(x(j)0,x(j)1,...x(j)n)−yj)x(j)iθi=θi−α(hθ(x0(j),x1(j),...xn(j))−yj)xi(j)

        随机梯度下降法,和4.1的批量梯度下降法是两个极端,一个采用所有数据来梯度下降,一个用一个样本来梯度下降。自然各自的优缺点都非常突出。对于训练速度来说,随机梯度下降法由于每次仅仅采用一个样本来迭代,训练速度很快,而批量梯度下降法在样本量很大的时候,训练速度不能让人满意。对于准确度来说,随机梯度下降法用于仅仅用一个样本决定梯度方向,导致解很有可能不是最优。对于收敛速度来说,由于随机梯度下降法一次迭代一个样本,导致迭代方向变化很大,不能很快的收敛到局部最优解。

        那么,有没有一个中庸的办法能够结合两种方法的优点呢?有!这就是4.3的小批量梯度下降法。

    4.3 小批量梯度下降法(Mini-batch Gradient Descent)

      小批量梯度下降法是批量梯度下降法和随机梯度下降法的折衷,也就是对于m个样本,我们采用x个样子来迭代,1<x<m。一般可以取x=10,当然根据样本的数据,可以调整这个x的值。对应的更新公式是:

        θi=θi−α∑j=tt+x−1(hθ(x(j)0,x(j)1,...x(j)n)−yj)x(j)iθi=θi−α∑j=tt+x−1(hθ(x0(j),x1(j),...xn(j))−yj)xi(j)

    5. 梯度下降法和其他无约束优化算法的比较

        在机器学习中的无约束优化算法,除了梯度下降以外,还有前面提到的最小二乘法,此外还有牛顿法和拟牛顿法。

        梯度下降法和最小二乘法相比,梯度下降法需要选择步长,而最小二乘法不需要。梯度下降法是迭代求解,最小二乘法是计算解析解。如果样本量不算很大,且存在解析解,最小二乘法比起梯度下降法要有优势,计算速度很快。但是如果样本量很大,用最小二乘法由于需要求一个超级大的逆矩阵,这时就很难或者很慢才能求解解析解了,使用迭代的梯度下降法比较有优势。

        梯度下降法和牛顿法/拟牛顿法相比,两者都是迭代求解,不过梯度下降法是梯度求解,而牛顿法/拟牛顿法是用二阶的海森矩阵的逆矩阵或伪逆矩阵求解。相对而言,使用牛顿法/拟牛顿法收敛更快。但是每次迭代的时间比梯度下降法长。

    展开全文
  • 梯度概念

    2020-09-12 11:03:28
    函数在某一点的梯度是这样一个向量,它的方向与取得最大方向导数的方向一致,而它的模为方向导数的最大值 例如:函数f(x,y)的梯度对应的公式为: 注意: 1、梯度是一个向量,既有大小又有方向 2、梯度的方向是...

    梯度定义为:

    函数在某一点的梯度是这样一个向量,它的方向与取得最大方向导数的方向一致,而它的模为方向导数的最大值

    例如:函数f(x,y)的梯度对应的公式为:

    gradf(x,y)=(\frac{\partial f}{\partial x},\frac{\partial f}{\partial y})

    注意:

    1、梯度是一个向量,既有大小又有方向

    2、梯度的方向是最大方向导数的方向

    3、梯度的模是最大方向导数的值

    梯度的几何意义是:函数变化率最大的方向,沿着梯度向量的方向,更容易找到函数的最大值,反过来说,沿着梯度向量相反的方向是梯度减少最快的方向,也就是说更容易找到函数的最小值。

    方向导数:

    方向导数是一个数,反应的是f(x,y)在点P沿方向v的变化率。

    展开全文
  •  函数在某一点的梯度是这样一个向量,它的方向与取得最大方向导数的方向一致(即:变化最快的那个方向就是梯度的方向),而它的模为方向导数的最大值。  这里注意三点:  1)梯度是一个向量,即有方向有大小;  2)...

    基本概念

    这几天在看深度学习这本书,正好看到梯度下降这里,想想好早之前看梯度下降一直不明白,这里就将其总结一下;
     函数在某一点的梯度是这样一个向量,它的方向与取得最大方向导数的方向一致(即:变化最快的那个方向就是梯度的方向),而它的模为方向导数的最大值。
     这里注意三点:
     1)梯度是一个向量,即有方向有大小;
     2)梯度的方向是最大方向导数的方向;
     3)梯度的值是最大方向导数的值。

    现有一函数f(x):
    f(x)=x02+x12f(x) = x_0^2+x_1^2
    也可以写成f(x0,x1)=x02+x12 f(x_0,x_1) = x_0^2+x_1^2
    那么
    fx0,fx1(\frac{\partial f}{\partial x_0} ,\frac{\partial f}{\partial x_1} )即为函数f(x)的梯度;

    梯度大小的计算

    fx0=f(x0+h,x1)f(x0h,x1)2h\frac{\partial f}{\partial x_0}=\frac{f(x_0+h,x_1)-f(x_0-h,x_1)}{2h}
    fx1=f(x0,x1+h)f(x0,x1h)2h\frac{\partial f}{\partial x_1}=\frac{f(x_0,x_1+h)-f(x_0,x_1-h)}{2h}

    代码

    import numpy as np
    import matplotlib.pylab as plt
    
    # def mean_squared_error(y,t):
    #     return 0.5*np.sum((y-t)**2)
    #
    # def cross_entropy_error(y,t):
    #     delta= 1e-7
    #     return -np.sum(t*np.log(y + delta))
    #
    # array1 = np.random.choice(6000,10)
    # # print(array1)
    #
    #
    # def f1(x):
    #     return 0.01*x**2 + 0.1*x
    #
    #
    # x = np.arange(0.0,20.0,0.1)
    # # print(x)
    # y = f1(x)
    # plt.xlabel("x")
    # plt.ylabel("f(x)")
    # plt.plot(x,y)
    # plt.show()
    
    
    
    # x = np.arange(-5.0,5.0,0.1)                           这里是构造一个等差数列,起始值为-5,终值为-5;等差为0.1
    # y = sigmoid(x)
    # plt.plot(x,y)                                          #折线图
    # plt.ylim(-0.1,1.1)                                     #设置y坐标轴范围
    # plt.show()                                             #画图,显示图像
    
    def f2(x):
        return x[0]**2 + x[1]**2
    
    
    def _numerical_gradient_no_batch(f, x):
        h = 1e-4  # 0.0001
        grad = np.zeros_like(x)             #[0,0],生成了和x形状相同的数组
    
        for idx in range(x.size):
            tmp_val = x[idx]
            x[idx] = float(tmp_val) + h
            print(x[idx])
            fxh1 = f(x)  # f(x+h)
            print(fxh1)
    
            x[idx] = tmp_val - h
            print(x[idx])
            fxh2 = f(x)  # f(x-h)
            print(fxh2)
            grad[idx] = (fxh1 - fxh2) / (2 * h)                 #这是在求斜率
            print(grad[idx])
    
    
            x[idx] = tmp_val  # 还原值
            print(x[idx])
        print(grad)
    
        return grad
    
    def gradient_descent(f,init_x,lr = 0.01,step_num = 100):
        x = init_x
    
        for i in range(step_num):
            grad = _numerical_gradient_no_batch(f,x)
            x -= lr * grad
    
        print(x)
        return x
    
    
    arr = np.array([3,4],dtype = np.float)              ##这里需要加上类型dtype = np.float,不然后面会遇到类型转换错误
    # print(arr)
    # _numerical_gradient_no_batch(f2,arr)
    gradient_descent(f2,arr)
    
    
    
    
    
    

    参考

    https://blog.csdn.net/wireless_com/article/details/70596155
    https://blog.csdn.net/walilk/article/details/50978864
    《深度学习入门》

    展开全文
  • 梯度,函数在某一点的梯度是这样一个向量,它的方向与取得最大方向导数的方向一致,而它的模为方向导数的最大值。 梯度的提出只为回答一个问题: 函数在变量空间的某一点处,沿着哪一个方向有最大的变化率? (eg.三...
  • 函数f(x)在某一点的梯度指向最大化f(x)的方向 目标: f(x)=E(x)^2=0; 牛顿法: X(i+1)=X(i)-f(x)/f`(x); 梯度下降法: X(i+1)=X(i)-r*f`(x); 随机梯度下降法: X(i+1)=X(i)-r*f`(xi);...
  • 梯度

    2016-10-26 20:15:55
    前面转了篇梯度下降算法的文章,...更严格的说,从欧几里得空间Rn到R的函数的梯度Rn某一点最佳的线性近似。这个意义上,梯度是雅可比矩阵的一个特殊情况。 单变量的实值函数的情况,梯度只是导数,或者,对
  • 梯度的意义及机器学习中应用

    千次阅读 2014-02-11 12:27:19
    今天一位考研的同学问及我梯度的概念,以及为什么二元函数z=f(x,y),明明表示一个三维空间曲面,为何其梯度是二维的。...也就是说我们按照某一点的梯度走,那么我们可以最快的速度得到其最值。 二
  • 导数在数学上定义就是一个数值,该数值表示是函数值在某一点随自变量变化大小。方向导数:顾名思义,一个多元函数函数值变化方向要比一元函数多,所以这时就需要确定方向,一元函数只有正反两个方向,多元...
  • 梯度的定义

    千次阅读 2011-12-07 09:48:46
    设体系中某处的物理参数(如温度、速度、浓度等)为w,与其垂直距离的dy处该参数为w+dw,则称为该物理参数的梯度,也即该物理参数的变化率。...更严格的说,从欧氏空间Rn到R的函数的梯度Rn某一点最佳的线
  • 梯度下降法和梯度的关系

    千次阅读 2016-09-27 16:36:04
    导数:定义就不讲了,含义:一元函数在某一点的导数描述了这个函数在这一点附近的变化率。几何意义:一元函数曲线在这一点的斜率。偏导数:针对多元函数而言,一个多元函数的偏导数,就是它关于其中一个变量的导数而...
  • 梯度是一个向量,表示函数在某一点处的方向导数,函数在这点沿着该方向变化最快。 1、在一元函数下,在某点的梯度的大小就是该点的导数,其方向就是X轴方向。 2、在二元函数下,某点的梯度的大小是该点方向导数矢量...
  • 通过梯度的定义我们发现,梯度的求解其实就是求函数偏导问题,而我们高中所学导数非严格意义上来说也就是一元“偏导”。通过这一点我们自然而然地想到梯度应该是导数向更高维数推广。换句话说,梯度是矢量...
  • 当讨论函数沿任意方向变化率时,也就引出了方向导数定义,即:某一点在某一趋近方向上导数值。 导数和偏导数定义中,均是沿坐标轴正方向讨论函数变化率。那么当讨论函数沿任意方向变化率时,也就引出...
  • 梯度的一些笔记

    2019-04-22 13:27:42
    梯度的一些笔记 导数、偏导数、方向导数、梯度的含义 ...如果是一元函数,表示的是函数在某一点的切线的斜率,斜率绝对值越大,表示越陡峭,即变化的幅度越大。 如果是时间 ttt 是自变量,位移 s(t)s(t)s(t...
  • 梯度梯度下降,随机梯度下降

    千次阅读 2016-03-27 12:26:34
    一、梯度gradient ... 标量场f中的一点处存在一个矢量G,该矢量方向为f该点处变化率最大的方向,其模也等于这个最大变化率的数值,则...标量场中某一点的梯度指向标量场增长最快的方向,梯度的长度是这个最大的变
  • 我们在李宏毅老师的课中可以看到求解loss ...泰勒展开是一个用函数在某点的信息描述取值的公式,在已知函数在某一点的各阶导数值的情况下,泰勒展开可以用这些导数值系数构建一个多项式来近似函数子啊这一点的领...
  • 数学优化入门:梯度下降法、牛顿法、共轭梯度

    万次阅读 多人点赞 2016-10-13 19:45:43
    1、基本概念 1.1 方向导数 1.2 梯度的概念 ...那么,某一点的梯度方向是该点坡度最陡的方向,而梯度的大小告诉我们坡度到底有多陡。 对于含有n个变量的标量函数,其梯度表示为 1.3 梯度与方...
  • 散度不为零时,则说明是有源场(有正源或负源)若你场是一个流速场,则该场散度是该流体在某一点单位时间流出单位体积净流量.如果在某点,某场散度不为零,表示该场在该点有源,例如若电场在某点散度不为零,表示该...
  • 梯度梯度下降详解

    2020-04-09 23:54:39
         假设对于函数F(x),其图象中有一点a,a点的梯度是F(x)增长最快的方向,梯度本身是一种上升的趋势。 梯度下降 概念:对于F(x),a点的梯度是F(x)增长最快的方向,那么它的相反方向则是该点下降最快的方向...
  • 梯度运算gradient

    2017-10-02 11:17:49
    向量微积分中,标量场的梯度是一个向量场。标量场中某一点的梯度指向标量场增长最快...更严格的说,从欧几里得空间Rn到R的函数的梯度Rn某一点最佳的线性近似。这个意义上,梯度是雅可比矩阵的一个特殊情况。
  • 一、梯度gradient 标量场f中的一点处存在一个矢量G,该矢量方向为f该点处变化率最大的方向,其模也等于这个最大变化率的数值,...更严格的说,从欧氏空间Rn到R的函数的梯度Rn某一点最佳的线性近似。这...
  • 散度不为零时,则说明是有源场(有正源或负源)若你场是一个流速场,则该场散度是该流体在某一点单位时间流出单位体积净流量. 如果在某点,某场散度不为零,表示该场在该点有源,例如若电场在某点散度不为零,表示...
  • 梯度与导数关系

    万次阅读 多人点赞 2017-09-09 21:17:23
    通过梯度的定义我们发现,梯度的求解其实就是求函数偏导问题,而我们高中所学导数非严格意义上来说也就是一元“偏导”。通过这一点我们自然而然地想到梯度应该是导数向更高维数推广。然而一我一直想不明白...
  • 图像梯度

    千次阅读 2018-11-14 16:04:00
    复习图像梯度,发现有很多需要进一步理解内容,重新整理一篇 目录 方向导数和梯度 python实现 图像梯度的使用 方向导数和梯度 ...第七节 方向导数与梯度 ...方向导数:函数在某一点沿某一方向变换率 设函...
  • 梯度下降(GD)如果想理解随机梯度下降,先简单复习下梯度下降吧:梯度下降如上图,梯度(Gradient)是指J(w)函数某一点的导数,然后沿着导数向下的方向小步移动w坐标,直到达到J(w)函数的底部,这就是梯度下降,...

空空如也

空空如也

1 2 3 4 5 ... 14
收藏数 272
精华内容 108
关键字:

在某一点的梯度