zoukankan      html  css  js  c++  java
  • 矩阵微分基础(一)

    这篇文章将介绍向量和矩阵微分相关基础,他是它将是后面学习的基础。

    一、梯度

    假设函数(f:R^{m imes n} mapsto R),它的函数变量为一个大小为(m imes n)的矩阵,函数值为实数,则​(f(A))关于​(A)的梯度是一个由偏导数组成的矩阵

    [ abla_Af(A) in R^{m imes n} = left [ egin{matrix} frac{partial f}{partial A_{11}} & frac{partial f}{partial A_{12}} & ... &frac{partial f}{partial A_{1n}} \ frac{partial f}{partial A_{21}} & frac{partial f}{partial A_{22}} & ... & frac{partial f}{partial A_{2n}}\ vdots & vdots & vdots &vdots & \ frac{partial f}{partial A_{m1}} & frac{partial f}{partial A_{m2} } &... & frac{partial f}{partial A_{mn}} end{matrix} ight ] ]

    请注意,$ abla_Af(A) (和)A(的大小总是一样的。特别的,当)A(是一个向量)x in R^n$时,则

    [ abla_xf(x) in R^{n} = left [ egin{matrix} frac{partial f}{partial x_1} \ frac{partial f}{partial x_2} \ vdots \ frac{partial f}{partial x_n} end{matrix} ight ] ]

    特别需要注意的是:只有当函数(f)是实数值时,它的梯度才会被定义,也就是说(f)必须返回一个标量值。例如我们不能求(Ax)的梯度((A)(m imes n)矩阵,(x)(n imes 1)向量),因为(Ax)结果是一个向量。由偏导数性质很容易得到下面事实

    • ( abla_x(f(x)+g(x))= abla_xf(x)+ abla_xg(x))
    • 对任意的(t in R)( abla_xtf(x)=t abla_xf(x))

    原则上,梯度是向量函数偏微分的扩展,但是在现实使用中,由于符号的原因可能会变得很棘手。下面来看这样一个例子,设(f(z)=z^Tz,zin R^n),显然( abla_zf(z)=2z),现在我们考虑下面式子

    [ abla f(Ax) ]

    我们该如何解释这个表达式呢?在这里至少有2中解释。

    • 第一种解释。对比第一个式子( abla_zf(z)=2z)中,我们认为上面式子是求点(Ax)处的梯度,这样结果是( abla f(Ax)=2Ax).
    • 第二种解释。我们认为上面(f(Ax)=g(x))是关于向量(x)的函数,所以是求点(x)处的梯度,( abla f(Ax)= abla g(x))

    上面两个解释的结果完全不同。根本原因是没有明确我们到底对谁进行微分,第一种解释其实对应为

    [ abla_{Ax}f(Ax) ]

    第二种解释对应为

    [ abla_xf(Ax) ]

    所以在梯度表达中,符号一定要清楚,避免产生歧义。

    二、海森(Hessian)矩阵

    设函数(f:R^n mapsto R),它的函数变量是一个(n)维向量(x),则(Hessian)矩阵是(f)(x)二阶偏导数组成的矩阵

    [ abla_x^2f(A) in R^{n imes n} = left [ egin{matrix} frac{partial f}{partial^2 x_1} & frac{partial f}{partial x_1partial x_2} & ... &frac{partial f}{partial x_1partial x_n} \ frac{partial f}{partial x_2partial x_1} & frac{partial f}{partial^2 x_2} & ... & frac{partial f}{partial x_2partial x_n}\ vdots & vdots & vdots &vdots & \ frac{partial f}{partial x_npartial x_1} & frac{partial f}{partial x_npartial x_2} & ... &frac{partial f}{partial^2 x_n} \ end{matrix} ight ] ]

    ( abla^2_xf(x) in R^{n imes n}),注意(Hessian)矩阵是一个对称矩阵

    [ abla_x^2f(A) _{ij}= abla_x^2f(A)_{ji} ]

    和梯度一样,(Hessian)矩阵只在函数(f)函数值是实数时才被定义。梯度可以看作向量函数的一阶导数,(Hessian)矩阵看作是向量函数的二阶导数。虽然这样的直觉没有错,但是还是需要注意下面的问题。

    ​ 如果(f:R mapsto R),则(f)(x)的二阶导数可以认为是(f)(x)一阶导数的导数。但是在向量函数中,如果(f:R^n mapsto R),则( abla_xf(x))是一个(n)维向量,前面说过多值函数的梯度没有意义,所以说对(f)的梯度再求梯度得到(f)的Hessian矩阵是错误的。但是事实上我们可以对( abla_xf(x)_i)求梯度,它得到的是(Hessian)矩阵的第(i)列。因此不能表示为( abla_x abla_xf(x)),而应该表示为

    [ abla^2_xf(x)=[ abla_x( abla_xf(x))_1, abla_x( abla_xf(x))_2,…, abla_x( abla_xf(x))_n] ]

    三、线性和二次向量函数的梯度和Hessian矩阵

    令线性函数(f(x)=b^Tx),其中(bin R^n)

    [f(x)=b^Tx=sum_{i=1}^nb_ix_i ]

    (frac{partial f(x)}{partial x_i}=b_i),所以( abla_x f(x)=b).现在考虑二次向量函数

    [f(x)=x^TAx=sum_{i=1}^nsum_{j=1}^nA_{ij}x_ix_j ]

    从而

    [frac{partial}{partial x_k}f(x)=frac{partial}{partial x_k}(sum_{i=1, i ot = k}^nA_{ik}x_ix_k+sum_{j=1, j ot = k}^nA_{kj}x_kx_j+A_{kk}x_k^2) \ =sum_{i=1, i ot = k}^nA_{ik}x_i+sum_{j=1, j ot = k}^nA_{kj}x_j+2A_{kk}x_k \ = sum^{n}_{i=1}A_{ik}x_i+sum^n_{j=1}A_{kj}x_j=2sum^n_{j=1}A_{kj}x_j ]

    我们假设(A)为对称矩阵,所以最后一步能化简。注意到( abla_xf(x)_k)(A)的第(k)行与(x)内积的两倍。因此( abla_x x^TAx = 2Ax).

    接下来再看看(f(x)=x^TAx)(Hessian)矩阵

    [ abla_x^2f(x)=frac{partial}{partial x_k partial x_l}f(x)=frac{partial}{partial x_k}[frac{partial f(x)}{partial x_l}]=frac{partial}{partial x_k}[2sum^n_{j=1}A_{lj}x_j]=2A_{kl} ]

    总结一下:

    • ( abla_xb^Tx=b)
    • ( abla_xx^TAx=2Ax) 其中(A^T=A)
    • ( abla_x^2x^TAx=2A) 其中(A^T=A)

    四、最小二乘法矩阵推导

    假设我们有一个矩阵(A in R^{m imes n})和一个向量(b in R^m),这种情况下我们不能找到(x in R^n)满足(Ax=b),但是我们可以找找到(x)使得(Ax)尽可能的接近(b),于是我们需要最小化

    [J(x)=||Ax-b||^2 ]

    我们考虑求( abla_xJ(x))然后令梯度等于0即可解出(x),这时候得到的(x)使得(J( heta))达到最小。

    [ abla_xJ(x)= abla_x(Ax-b)^T(Ax-b)quad quad quad quadquad quad quad \ = abla_x(x^TA^TAx-2b^TAx+b^Tb) \ =2A^TAx-2A^Tb quad quad quad quad quadquad ]

    (J(x)=0)即可得最小二乘法的解为(x=(A^TA)^{-1}A^Tb).

    五、行列式的梯度

    这里我们来考虑行列式的梯度,回忆行列式计算方法

    [|A|=sum_{i=1}^n(-1)^{i+j}A_{ij}M_{ij} quad for ; any ; j =1,2,...,n ]

    其中(M_{ij})((i,j))处的代数余子式。

    [frac{partial}{partial A_{kl}}|A|=frac{partial}{partial A_{kl}}sum_{i=1}^n(-1)^{i+l}A_{il}M_{il}=(-1)^{k+l}A_{kl}M_{kl}=A^{*}_{lk} ]

    其中(A^*)(A)的伴随矩阵。从而

    [ abla_A|A|=(A^*)^T=|A|(A^{-1})^T ]

    以上均假设(A)是可逆矩阵。行列式的梯度等于它的伴随矩阵的转置。例如(f(A)=ln(|A|),|A|>0),求( abla_Af(A))

    [ abla_Aln(|A|)=frac{1}{|A|}frac{partial |A|}{partial A}=A^{-1} ]

    上面默认(A)是对称矩阵。

    六、用特征值来做最优化

    考虑下面的优化问题

    [max_{x in R^n}quad x^TAx quad where ;x^Tx=1 ]

    上式中(A)是一个对称矩阵。先将使用等式约束的目标函数写成拉格朗日形式,然后求解最优值

    [L(x,lambda)=x^TAx-lambda (x^Tx-1) ]

    其中(lambda)称为拉格朗日因子,设(x^*)是函数(L(x,lambda))取得最大值的点,则在(x^*)函数的梯度为0

    [ abla_xL(x,lambda)=2Ax-2lambda x = 0 ]

    再化简可以得到等式(Ax=lambda x),而且(x)是单位向量,于是解就是(A)的特征向量。

  • 相关阅读:
    Android 编程下 Eclipse 恢复被删除的文件
    Android 编程下背景图片适配工具类
    Android 编程下 Managing Your App's Memory
    Android 编程下代码之(QQ消息列表滑动删除)
    Android 编程下 Canvas and Drawables
    Android 编程下 AlarmManager
    Android 编程下去除 ListView 上下边界蓝色或黄色阴影
    Java 编程下字符串的 16 位、32位 MD5 加密
    C#枚举类型和int类型相互转换
    MVC和普通三层架构的区别
  • 原文地址:https://www.cnblogs.com/tandier/p/8549807.html
Copyright © 2011-2022 走看看