精华内容
下载资源
问答
  • 模型优化涉及到反向传播过程,反向传播过程需要先推导出梯度计算公式然后利用机器进行代数运算。这篇博文的工作是详细推导了逻辑回归反向传播梯度计算公式(什么是梯度?简单来讲就是成本函数对未知参数向量的导数,...

    一、简介

      在深度学习领域,我们往往采用梯度下降(或上升)法来优化训练函数模型,梯度下降法尤其是在解决凸优化问题上表现极佳。模型优化涉及到反向传播过程,反向传播过程需要先推导出梯度计算公式然后利用机器进行代数运算。这篇博文的工作是详细推导了逻辑回归反向传播梯度计算公式(什么是梯度?简单来讲就是成本函数对所有未知参数所组成向量的导数,梯度是成本函数变化最快的方向),最后使用标准梯度下降算法来优化逻辑回归并附上逻辑回归优化实现代码。


    逻辑回归描述

      逻辑回归问题描述如Figure1所示,它是在多元线性回归的基础上对回归结果使用sigmoid函数进行激活计算得到条件概率p(y=0x)p(y=1x)p(y=0|x)或p(y=1|x),用来解决二分类问题。这里多说一点如果你想实现多分类可以使用softmax,soft就体现在每一类别都有非零置信度(条件概率),而不是像hard那样只有一个类别有1置信度其余置信度均为0。以一个样本作为输入的logistic regression forward propagation数学形式化表达为:


    单个输入样本下的逻辑回归前向传播数学形式化表达

    二、反向传播梯度计算公式推导

      接下来是logistic regression back propagation,反向传播梯度计算要求1.熟知前向传播代数计算过程,2.复合函数偏导数的链式法则[3],3.函数矩阵或函数向量微分理论[4]。在反向传播推导梯度时可以(1)先计算一个输入样本的梯度,然后根据变量与变量的偏导数有相同shape(形式)来推广计算多个输入样本的梯度也就是实现梯度的向量化或叫矩阵化[1][2],之所以要将梯度向量化是为了使用相关矩阵理论来简化代数运算。(2)直接对向量化后的多输入样本根据链式法则和向量求导理论推导梯度即可。接下来我将使用这两种方法来详细的推导梯度计算公式。
      首先,按方法(1)推导梯度。由于逻辑回归parameters就只有wwbb,故而反向传播过程只需计算Lwdw\frac {∂L} {∂w}\equiv dwLbdb\frac {∂L} {∂b}\equiv db,从而获得梯度grad(L)=(dw,db)grad(L)=(dw,db)。过程如下所示。

    一个输入样本下的链式法则
    求单样本输入梯度到求多样本输入梯度
      其次,按方法(2)计算得到梯度grad(J)=(dw,db)grad(J)=(dw,db),推导过程如下所示。
    直接求多输入样本的梯度

    三、逻辑回归标准梯度下降优化算法

    在这里插入图片描述
      逻辑回归优化实现,详见我的github仓库:https://github.com/yiguanxian/implement-logistic-regression 。关于优化算法除了标准梯度下降法还有很多据此法改进的深度学习优化算法,我后面会写一篇关于深度学习中的优化算法的文章,待续…
      由于博主水平有限,博文中难免有错误和不当之处,欢迎小伙伴们给与批评和指正,也欢迎小伙伴们补充其他更简单的方法,可以直接留言评论。希望我的这篇博文能对你有所帮助,祝好!

    参考:
    [1]https://mooc.study.163.com/learn/2001281002?tid=2001392029#/learn/content?type=detail&id=2001702011
    [2]https://mooc.study.163.com/learn/2001281002?tid=2001392029#/learn/content?type=detail&id=2001702012
    [3] 欧阳光中,朱学炎等.数学分析下册[M].北京:高等教育出版社,2007:168.
    [4]吴孟达,李兵等.高等工程数学[M].北京:科学出版社,2004:71-75.

    展开全文
  • 对于任意一个 nnn 维向量 X=(⋮xi⋮)X = \begin {pmatrix} \vdots \\ {x}_{i} \\ \vdots \end {pmatrix}X=⎝⎜⎜⎛​⋮xi​⋮​⎠⎟⎟⎞​ ,定义 softmax⁡(X)=(⋮exi∑jexj⋮)\operatorname {softm...

    1. softmax\operatorname {softmax} 函数的定义

    对于任意一个 nn 维向量 X=(xi)X = \begin {pmatrix} \vdots \\ {x}_{i} \\ \vdots \end {pmatrix} ,定义

    softmax(X)=(exikexk)\operatorname {softmax} (X) = \begin {pmatrix} \vdots \\ \dfrac {e ^ {x_i}} { \sum \limits _{k} {e ^ {x_k} } } \\ \vdots \end {pmatrix}

    2. softmax\operatorname {softmax} 的梯度

    nn 维向量 Y^=(y^i)=softmax(X)\widehat {Y} = \begin {pmatrix} \vdots \\ \hat {y}_{i} \\ \vdots \end {pmatrix} = \operatorname {softmax} (X) ,则

    xjy^i={exjkexkexjexj(kexk)2,i=jexiexj(kexk)2,ij={y^j(1y^j),i=jy^iy^j,ij\dfrac {\partial } {\partial {x_j}} {\hat {y}_{i} } = \begin {cases} \dfrac {e ^ {x_j} \sum \limits _{k} {e ^ {x_k} } - e ^ {x_j} e ^ {x_j} } { { \left ( \sum \limits _{k} {e ^ {x_k} } \right ) } ^2 }, & i = j \\ \\ - \dfrac { e ^ {x_i} e ^ {x_j} } { { \left ( \sum \limits _{k} {e ^ {x_k} } \right ) } ^2 }, & i \neq j \end {cases} = \begin {cases} \hat {y}_{j} \left ( 1 - \hat {y}_{j} \right ), & i = j \\ - \hat {y}_{i} \hat {y}_{j} , & i \neq j \end {cases}

    3. CrossEntropyLoss\text {CrossEntropyLoss} 的定义

    nn 维向量 Y=(yi)Y = \begin {pmatrix} \vdots \\ {y}_{i} \\ \vdots \end {pmatrix} 是一个样本的标签,nn 维向量 Y^=(y^i)\widehat {Y} = \begin {pmatrix} \vdots \\ \hat {y}_{i} \\ \vdots \end {pmatrix} 是该样本的预测值,

    iy^i=iyi=1\sum \limits _{i} { \widehat y_{i} } = \sum \limits _{i} {y_{i}} = 1
    则定义
    CrossEntropyLoss(Y,Y^)=iyilny^i\text {CrossEntropyLoss} \left (Y, \widehat {Y} \right ) = - \sum \limits _{i} {y_{i} \ln \widehat y_{i}}

    4. CrossEntropyLoss with softmax\text {CrossEntropyLoss with softmax} 的梯度

    在多分类任务的机器学习中,通常取 Y^=softmax(X)\widehat {Y} = \operatorname {softmax} \left ( X \right ) ,此时

    xj(yilny^i)=yi1y^ixjy^i\dfrac {\partial} {\partial x_{j}} {\left ( y_{i} \ln \widehat y_{i} \right )} = y_{i} \cdot \dfrac {1} {\widehat y_{i} }\cdot \dfrac {\partial} {\partial x_{j}} {\widehat y_{i}}
    ={yj1y^jy^j(1y^j),i=jyi1y^iy^iy^j,ij= \begin {cases} y_{j} \cdot \dfrac {1} {\widehat y_{j} }\cdot \widehat y_{j} \left ( 1 - \widehat y_{j} \right ), & i = j \\ - y_{i} \cdot \dfrac {1} {\widehat y_{i} }\cdot \widehat y_{i} \widehat y_{j}, & i \neq j \end {cases}
    ={yj(1y^j),i=jyiy^j,ij= \begin {cases} y_{j} \left ( 1 - \widehat y_{j} \right ), & i = j \\ - y_{i} \widehat y_{j} , & i \neq j \end {cases}

    因此
    xjCrossEntropyLoss(Y,Y^)\dfrac {\partial} {\partial x_{j}} {\text {CrossEntropyLoss} \left (Y, \widehat {Y} \right ) }
    =ixj(yilny^i)= - \sum \limits _{i} { \dfrac {\partial} {\partial x_{j}} {\left ( y_{i} \ln \widehat y_{i} \right )} }

    =[yj(1y^j)+iij(yiy^j)]= - \left [ y_{j} \left ( 1 - \widehat y_{j} \right ) + \sum \limits _{\underset {i \neq j} {i} } \left (- y_{i} \widehat y_{j} \right ) \right ]

    =[yj(1y^j)y^jiijyi]= - \left [ y_{j} \left ( 1 - \widehat y_{j} \right ) - \widehat y_{j} \sum \limits _{\underset {i \neq j} {i} } {y_{i}} \right ]

    =[yj(1y^j)y^j(1yj)]= - \left [ y_{j} \left ( 1 - \widehat y_{j} \right ) - \widehat y_{j} \left (1 - y_{j} \right ) \right ]
    =(yjy^j)= - \left ( y_{j} - \widehat y_{j} \right )
    =y^jyj= \widehat y_{j} - y_{j}

    因此
    XCrossEntropyLoss(Y,Y^)=Y^Y\dfrac {\partial} {\partial X} {\text {CrossEntropyLoss} \left (Y, \widehat {Y} \right ) } = \widehat {Y} - Y

    5. 论文 Distilling the Knowledge in a Neural Network 中公式 (2) 的推导

    在论文 Distilling the Knowledge in a Neural Network 中,相当于取
    X=1TZX = \dfrac {1} {T} \cdot Z
    qi=y^i=(softmax(X))iq_{i} =\widehat y_{i} = { \left ( \operatorname {softmax} (X) \right ) } _{i}
    pi=yip_{i} = y_{i}

    C=CrossEntropyLoss(Y,Y^)C = { \text {CrossEntropyLoss} \left (Y, \widehat {Y} \right ) }
    于是
    Czi=ziCrossEntropyLoss(Y,Y^)\dfrac {\partial C} {\partial z_{i}} = \dfrac {\partial} {\partial z_{i}} {\text {CrossEntropyLoss} \left (Y, \widehat {Y} \right ) }

    =xizixiCrossEntropyLoss(Y,Y^)= \dfrac {\partial x_{i}} {\partial z_{i}} \cdot \dfrac {\partial} {\partial x_{i}} {\text {CrossEntropyLoss} \left (Y, \widehat {Y} \right ) }

    =1T(y^iyi)= \dfrac {1} {T} \cdot \left ( \widehat y_{i} - y_{i} \right )

    =1T(qipi)= \dfrac {1} {T} \cdot \left ( q_{i} - p_{i} \right )

    参考文献

    Classification and Loss Evaluation - Softmax and Cross Entropy Loss

    展开全文
  • 上节中我们求得梯度下降的计算公式如下: 对上式子进行向量化处理。 (1)首先将第0项和其他项进行统一:(X0恒等于1) 进一步化成矩阵的乘法: (2)最后转置得梯度为: 二. 修改梯度的函数实现方式...

    一. 改为向量化公式

    上节中我们求得梯度下降的计算公式如下:

    对上式子进行向量化处理。

    (1)首先将第0项和其他项进行统一:(X0恒等于1)

    进一步化成矩阵的乘法:

    (2)最后转置得梯度为:

    二. 修改梯度的函数实现方式:

    (1)原本计算的代码:

    def dJ(theta, X_b, y):
        res = np.empty(len(theta))
        res[0] = np.sum(X_b.dot(theta) - y)
        for i in range(1, len(theta)):
            res[i] = (X_b.dot(theta) - y).dot(X_b[:, i])
        return res * 2 / len(X_b)

    (2)根据新的公式修改为:

    def dJ(theta, X_b, y):
        return X_b.T.dot(X_b.dot(theta) - y) * 2. / len(X_b)

    (3)修改完的完整的线性回归模型:

    import numpy as np
    from sklearn.metrics import r2_score
    
    
    class LinearRegression:
    
        # 初始化LinearRegression模型
        def __init__(self):
            self.coef_ = None
            self.interception_ = None
            # theta为私有变量
            self._theta = None
    
        # 使用正规化方程0
        def fit_normal(self, X_train, y_train):
            assert X_train.shape[0] == y_train.shape[0], \
                "X_train和y_train大小必须一致"
    
            X_b = np.hstack([np.ones((len(X_train), 1)), X_train])
            self._theta = np.linalg.inv(X_b.T.dot(X_b)).dot(X_b.T).dot(y_train)
    
            self.interception_ = self._theta[0]
            self.coef_ = self._theta[1:]
    
            return self
    
        def predict(self, X_predict):
            assert self.interception_ is not None and self.coef_ is not None, \
                "必须先拟合才能进行预测!"
            assert X_predict.shape[1] == len(self.coef_), \
                "预测值的特征数必须和训练集个数一致!"
            X_b = np.hstack([np.ones((len(X_predict), 1)), X_predict])
            return X_b.dot(self._theta)
    
        # 根据测试数据集X_test和y_test确定当前模型的准确度
        def score(self, X_test, y_test):
            y_predict = self.predict(X_test)
            return r2_score(y_test, y_predict)
    
        def fit_gd(self, X_train, y_train, eta=0.01, n_iters=1e4):
            """
            根据训练数据集X_train, y_train, 使用梯度下降法训练Linear Regression模型
            :param X_train:
            :param y_train:
            :param eta:
            :param n_iters:
            :return:
            """
            assert X_train.shape[0] == y_train.shape[0], "训练集X和y必须大小一致"
    
            def J(theta, X_b, y):
                """
                求代价函数
                :param theta: 参数值
                :param X_b:
                :param y:
                :return: 代价函数值
                """
                try:
                    return np.sum((y - X_b.dot(theta)) ** 2) / len(y)
                except:
                    return float('inf')
    
            def dJ(theta, X_b, y):
                # res = np.empty(len(theta))
                # res[0] = np.sum(X_b.dot(theta) - y)
                # for i in range(1, len(theta)):
                #     res[i] = (X_b.dot(theta) - y).dot(X_b[:, i])
                # return res * 2 / len(X_b)
                return X_b.T.dot(X_b.dot(theta) - y) * 2. / len(X_b)
    
            def gradient_descent(X_b, y, initial_theta, eta, n_iters=1e4, epsilon=1e-8):
                theta = initial_theta
                i_iter = 0
    
                while i_iter < n_iters:
                    gradient = dJ(theta, X_b, y)
                    last_theta = theta
                    theta = theta - eta * gradient
                    if (abs(J(theta, X_b, y) - J(last_theta, X_b, y)) < epsilon):
                        break
                    i_iter += 1
                return theta
    
            X_b = np.hstack([np.ones((len(X_train), 1)), X_train])  # 为原先的X添加一列,(())
            init_theta = np.zeros(X_b.shape[1])
    
            self._theta = gradient_descent(X_b, y_train, init_theta, eta, n_iters)
            self.interception_ = self._theta[0]
            self.coef_ = self._theta[1:]
    
            return self

     

    展开全文
  •   黎曼局部差分向量,SPD流形局部差分向量计算   前言 在欧氏空间中,对于任意两个向量...由于SPD流形的特殊性,我们不能通过直接相减来到差分向量,类似的我们通过黎曼空间距离公式平方的梯度计算黎曼局部

     

    黎曼局部差分向量,SPD流形局部差分向量计算

     

    前言

    \quad在欧氏空间中,对于任意两个向量 x,yRkx,y \in R^k,它们之间的差分向量为:xyx-y,该差分向量也可以等价为欧氏空间距离公式的平方在 xx 点的梯度 xδ2(x,y)\triangledown_{x}\delta^2(x,y)
    \quad相应的,SPD流形上的黎曼局部差分向量可以定义为:ζ(X,Y)=δ(X,Y)Xδ2(X,Y)Xδ2(X,Y)\mathop \zeta(X,Y) = {\delta}(X,Y)\frac{\triangledown_{X}\delta^2(X,Y)} {\parallel \triangledown_{X}\delta^2(X,Y)\parallel}, 其中,这里的 δ\delta 为SPD流形上的距离度量 [link]

     

    黎曼局部差分向量

    \quad由于SPD流形的特殊性,我们不能通过直接相减来得到差分向量,对应SPD流形上四种常用的距离度量 [link],相应的黎曼局部差分向量有如下的几种具体形式:
     

    1.使用AIRM度量,黎曼局部差分向量有如下的表达形式:

    ζ(X,Y)=2X1/2log(X1/2YX1/2)X1/2\mathop \zeta(X,Y) = 2X^{1/2} \log(X^{-1/2}YX^{-1/2})X^{1/2}

    2.使用Stein散度,黎曼局部差分向量有如下的表达形式:

    ζ(X,Y)=X(X+Y)1X12X\mathop \zeta(X,Y) = X(X+Y)^{-1}X-\frac{1}{2}X

    3.使用Jeffrey散度,黎曼局部差分向量有如下的表达形式:

    ζ(X,Y)=12X(Y1X1YX1)X\mathop \zeta(X,Y) = \frac{1}{2}X(Y^{-1}-X^{-1}YX^{-1})X

    4.使用LEM度量,黎曼局部差分向量有如下的表达形式:

    ζ(X,Y)=X(log(X)log(Y))+(log(X)log(Y))X\mathop \zeta(X,Y) = X(\log(X)-\log(Y))+(\log(X)-\log(Y))X

     
     
    示例代码https://github.com/Kai-Xuan/SPD-OPERATIONS/tree/master/SPD-LDV/ [link]

    如果这个内容对于您的研究工作有帮助,我们将非常感激您可以引用我们的文章:[1].

     
    参考:


    1. Chen K X, Ren J Y, Wu X J, et al. Covariance Descriptors on a Gaussian Manifold and their Application to Image Set Classification[J]. Pattern Recognition, 2020, 107: 107463. [link]

    展开全文
  • 在DNN的反向传播算法中,几乎所有教材都只使用单个样本(一个特征向量)进行相关公式的推导,而多个样本(也就是mini-batch,即多个特征向量组成的矩阵)反向传播的全矩阵方法对于理解“多样本”这一概念是非常重要的。...
  • 公式 hθ(x)=θ0x0+θ1x1+θ2x2+...+θnxn h_\theta(x) = \theta_0x_0 + \theta_1x_1 + \theta_2x_2 + ... + \theta_nx_n hθ​(x)=θ0​x0​+θ1​x1​+θ2​x2​+...+θn​xn​ 上式为基本形式。 hθ(x)=θTx h_\...
  • L2正则化计算更加方便,只需要计算向量内积,L1范数的计算效率特别是遇到非稀疏向量时非常低 实际使用时,L2正则化通常都比L1正则化要好,所以应优先选择L2正则化. PS:为方便书写,以下的向量w\boldsymbol ww省略....
  • 文章目录7.2 神经网络多分类原理与反向传播...7.2.4 交叉熵损失7.2.4.1 公式7.2.5 梯度下降算法7.2.6 反向传播算法导数7.2.6.1 导数7.2.6.2 导数计算图7.2.6.3 链式法则7.2.6.4 逻辑回归的梯度下降7.2.7 向量化编...
  • 找到多元函数jacobian向量(即目标函数对自变量的一阶偏导数向量)为0的那些点,即驻点; 将各驻点带入Hessian矩阵(即目标函数对各自变量的二阶偏导数组成的对称方阵,若有n个自变量,则Hessian矩阵为n×n),计算...
  • Tensorflow:向量范数

    千次阅读 2019-12-27 10:06:45
    对于矩阵、张量,同样可以利用向量范数的计算公式,等价于将矩阵、张量打平成向量后计算。 在 TensorFlow 中,可以通过tf.norm(x, ord)求解张量的L1, L2, ∞等范数,其中参数ord指定为1,2 时计算L1, L2 范数,指定为...
  • 矩阵分析与应用第五章——梯度分析与最有优化一、梯度1.实值函数对实向量梯度 一、梯度 1.实值函数对实向量梯度 梯度算子: 梯度: 矩阵求导计算公式
  • 梯度下降

    2020-09-27 21:03:12
    梯度下降法(gradient descent),又名最速下降法(steepest descent)是求解无约束最优化问题最常用的方法,它是一种迭代方法,每一步主要的操作是求解目标函数的梯度向量,将当前位置的负梯度方向作为搜索方向...
  • 当需要实现多组输出时,可以使用多组权值向量。 二分类问题使用的激活函数通常如下 多分类问题使用的激活函数如下 常见的两种损失计算公式如下,后者更适合多分类问题 ...
  • 梯度的概念是从方向导数推倒出来的,沿着梯度的方向,方向导数最大,方向导数的计算方法: ... 一次更新完所有参数后,参数改变量的向量相加,即为梯度的方向,参数按照梯度的方向移动,到达局部最优解下降
  • 通过sigma函数计算出最终结果,以0.5为分界线,最终结果大于0.5则属于正类(类别值为1),反之属于负类(类别值为0)。 如果将上面的函数扩展到多维空间,并且加上参数,则函数变成: 接下来问题来了,如何得到合适的...
  • 手动实现线性回归梯度计算公式 """ X:m×n矩阵 -- m行样本n个维度 error: 列向量 """ gradients = 1/m * tf.matmul(tf.transpose(X), error) 基于sklearn fetch_california_housing 数据集 import tensorflow...
  • 梯度向量和Jacobian的关系与计算公式
  • import matplotlib.pyplot as plt import numpy as np # gradient descent # 全部变量的偏导数汇总而成的向量称为梯度 def num_diff(f, x): # 求单变量数值微分(偏导数),差分... # 差分求导 == 求微分 计算公式
  • 让我们通过一个简单的例子来完成梯度计算 如下一个图 图中+表示加法运算,X表示乘法运算 如上图,H表示乘法节点,F,G分别表示加法节点 那么完整的公式如下所示 当改变了F或者G,和改变a, b, x, or y,都会改变...
  • 方向导数其实是梯度在这个方向上的投影的长度,根据定理,方向导数和梯度之间有如下计算公式: 方向导数 = 梯度*该方向向量的方向余弦 = 梯度的模*梯度的方向余弦*方向向量的方向余弦 梯度的模是常量,方向余弦是为...
  • LR如何进行并行计算

    2019-08-12 15:59:26
    因此逻辑回归的并行化最主要的就是对目标函数梯度计算的并行化。从梯度更新公式中可以看出,目标函数的梯度向量计算中只需要进行向量间的点乘和相加,可以很容易将每个迭代过程拆分成相互独立的计算步骤,由不同的...
  • 对于随机梯度法的调试,主要是对于损失函数的梯度计算准确度的判断,即函数中关于各个参数偏导数DJ的计算,主要有两种方式:数学公式计算:利用多元函数的偏导计算,确定出其DJ的向量;(2)导数定义逼近法:利用...
  • 梯度下降 线性规划 双重问题 拉格朗日对偶问题 整数线性规划 线性代数 向量 余弦相似度 基础 矩阵 行列式 特征值和特征向量 本征分解 奇异值分解 主成分分析 数字信号处理 卷积 三角函数 复数 欧拉公式 傅立叶级数 ...
  • 标量、向量、矩阵之间的求导关系

    千次阅读 2018-10-29 12:40:31
    一、矩阵求导  二、几种重要的矩阵  1、梯度(Gradient) 2、雅克比矩阵(Jacobian matrix) 3、海森矩阵(Hessian matrix) ...矩阵、向量微分计算 wiki:维基百科矩阵求导公式  ...
  • 梯度:是一个向量,导数+变化量快的方向(学习的前进方向)。在机器学习里,有一个机器学习模型f,为 f(z,w)=Y(不是完整公式,这里只做示意): 梯度下降:指的是更新上面的w的过程,即算出导数,作用是算出梯度,...
  • 梯度的意义:某一点的梯度向量指示了函数变化率最大的一个方向 梯度下降 梯度下降——迭代思想 在构建求解表达式的过程,从某个参量表达式出发出求偏导,找出当前位置梯度下降最大的方向,和结果进行拟合,计算...
  • 一. 梯度推导 本例中使用的激活函数为g(x)=sigmoid函数,损失函数使用的为逻辑回归的损失函数。...梯度计算用的是链式求导法则 1.隐藏层-->输出层权重参数求导 2.隐藏层-->隐藏层(l-1层...
  • 一、问题的引入——格林公式、高斯公式、斯托克斯公式 二、向量场的积分 1. 向量场沿曲线的积分...四、积分公式向量形式 1. 微积分基本公式(定积分、曲线积分) 2. 通量计算 3. 环流量的计算 ...

空空如也

空空如也

1 2 3 4 5 ... 10
收藏数 187
精华内容 74
关键字:

向量梯度计算公式