矢量求导的微分法则: 链式法则

矢量求导的微分法则: 链式法则

介绍

这篇博文推导了矢量情形下, 标量函数对矢量进行求导的微分法则,从定义出发推导了链式法则的形式。

核心原理

核心原理:
标量情形下, 由中学的标量求导知识可知,忽略泰勒展开高次项,有: Δf(x)=f(x)Δx \Delta f(x) = {f^{'}}(x) \Delta x
即, 函数变化量 = 导数 * 变量变化量。

拓展到多变量情形下,显然有类似的:Δf(x,y)=f(x)Δx+f(y)Δy\Delta f(x,y) = {f^{'}}(x)\Delta x + {f^{'}}(y)\Delta y

矢量求导

而一个矢量,可以看做多个标量的组合,如有矢量 x=[x1x2]\mathbf{x}=\left[\begin{array}{l}{x_{1}} \\ {x_{2}}\end{array}\right]
f(x)f(\mathbf{x})是以矢量 x\mathbf{x}为变量的标量函数, 那么根据上面的知识,有:

Δf(x)=f(x1)Δx1+f(x2)Δx2\Delta f(\mathbf{x}) = {f^{'}}(x_1)\Delta x_1 + {f^{'}}(x_2)\Delta x_2

利用线性代数知识,可以将其写为矩阵形式:
Δf(x)=[f(x1)f(x2)]×[Δx1Δx2]\Delta f(\mathbf{x}) = \left[\begin{array}{ll}{{f^{'}}(x_1)} & {{f^{'}}(x_2)}\end{array}\right] \times \left[\begin{array}{l}{\Delta x_{1}} \\ {\Delta x_{2}}\end{array}\right]

其中,f(x1){f^{'}}(x_1)一个多变量函数对单变量求导的结果,也被称为偏微分, 可写为:
f(x1)=f(x)x1{{f^{'}}(x_1)}=\frac{{\partial f({\bf{x}})}}{{\partial {x_1}}}
同理, f(x2)=f(x)x2{{f^{'}}(x_2)}=\frac{{\partial f({\bf{x}})}}{{\partial {x_2}}}
变化量的Δ\Delta符号往往用d\mathbf{d}代替,利用这些表示,式子可以改写为:

df(x)=[f(x)x1f(x)x2]×[dx1dx2]\mathbf{d} f(\mathbf{x}) = \left[\begin{array}{ll}{\frac{{\partial f({\bf{x}})}}{{\partial {x_1}}}} & {\frac{{\partial f({\bf{x}})}}{{\partial {x_2}}}}\end{array}\right] \times \left[\begin{array}{l}{\mathbf{d}x_{1}} \\ {\mathbf{d} x_{2}}\end{array}\right].

注意到,根据矢量微分的定义,标量函数对一个矢量求导的结果可表示为:
xf(x)=[f(x)x1f(x)x2]\nabla_{\mathbf{x}}f(\mathbf{x})= \left[\begin{array}{l}{\frac{{\partial f({\bf{x}})}}{{\partial {x_1}}}} \\ {\frac{{\partial f({\bf{x}})}}{{\partial {x_2}}}}\end{array}\right]

上式也被称为函数f(x)f(\mathbf{x})对于x\mathbf{x}梯度
利用这一定义,可以进一步的:
df(x)=xf(x)Tdx\mathbf{d} f(\mathbf{x}) =\nabla_{\mathbf{x}}f(\mathbf{x})^T\mathbf{d} \mathbf{x}.
其中,dx=[dx1dx2]\mathbf{d} \mathbf{x}=\left[\begin{array}{l}{\mathbf{d}x_{1}} \\ {\mathbf{d} x_{2}}\end{array}\right], 上式也被称为对矢量x\mathbf{x}全微分

注意,为了便于理解,笔者以一个2×12\times1的矢量举例,但无疑,类似的过程可以推导出N维矢量的结论,从而统一为上式的表示。

矩阵求导

严格来说,矩阵也是矢量的一种。在许多时候,对于一个变量为x×yx\times y的矩阵的求导问题,我们常用的处理方式是可以将其列化为xy1xy*1的向量,再对其进行求导。为了便于理解,笔者同样以一个最简单的2×22\times2矩阵X\mathbf{X}举例了:
X=[x1x3x2x4]\mathbf{X}=\left[\begin{array}{ll}{x_1} & {x_3} \\ {x_2} & {x_4}\end{array}\right]
根据定义(可以搜索维基百科),矩阵的求导(梯度)可以表示为:
Xf(X)=[fx1fx3fx2fx4]\nabla_{\mathbf{X}}f(\mathbf{X})=\left[\begin{array}{ll}{\frac{\partial f}{\partial x_{1}}} & {\frac{\partial f}{\partial x_{3}}} \\ {\frac{\partial f}{\partial x_{2}}} & {\frac{\partial f}{\partial x_{4}}}\end{array}\right].
而如果对X\mathbf{X}进行列化的话,求得的向量梯度中包含的元素,刚好对应了矩阵梯度的元素。 也就是说,一种解决的思路是:

  • 将矩阵变量列化为向量
  • 利用向量求导的结论,求出梯度
  • 将向量梯度矩阵化,就是所求的矩阵梯度。

这个方法非常有效,但有些时候,矩阵变量不容易向量化,如目标函数是矩阵的逆的时候。那么,我们可以按照上节的写法,推广到矩阵的形式,有:

df(X)=tr(Xf(X)TdX)\mathbf{d} f(\mathbf{X}) =\mathrm{tr}(\nabla_{\mathbf{X}}f(\mathbf{X})^T\mathbf{d} \mathbf{X}).
这个读者可以自己推导一下,和上节的原理一致,由于线性代数的原因,在矩阵情况下会多一个tr(trace)。

链式法则

先讨论实数的情况:
标量情形下,我们知道,若f(x)=f(g(x))f(x) =f(g(x)), 那么f(x)=f(g)×g(x)f^{'}(x)=f^{'}(g)\times g^{'}(x).
多维情况下,根据之前的类似思想,也可以推导结果,但这里我们使用上面讲述的方法

假设标量函数f(x)f(x), 中间变量矢量g\mathbf{g}, 变量x\mathbf{x}.
根据上面推导:

df(g)=gf(g)Tdg\mathbf{d} f(\mathbf{g}) =\nabla_{\mathbf{g}}f(\mathbf{g})^T\mathbf{d} \mathbf{g}.
dg=xTg(x)dx\mathbf{d} \mathbf{g} = \nabla_{\mathbf{x^T}}\mathbf{g}(\mathbf{x})\mathbf{d} \mathbf{x}
(之前没有讨论矢量对矢量微分的情形,但显然很容易从标量函数情形推广)
因此有:
df(g)=gf(g)TxTg(x)dx\mathbf{d} f(\mathbf{g}) =\nabla_{\mathbf{g}}f(\mathbf{g})^T \nabla_{\mathbf{x^T}}\mathbf{g}(\mathbf{x})\mathbf{d} \mathbf{x}.

可得:

xf(x)=(gf(g)TxTg(x))T=xgT×gf(g)\nabla_{\mathbf{x}}f(\mathbf{x}) = (\nabla_{\mathbf{g}}f(\mathbf{g})^T \nabla_{\mathbf{x^T}}\mathbf{g}(\mathbf{x}))^T= \nabla_{\mathbf{x}}\mathbf{g}^T\times \nabla_{\mathbf{g}}f(\mathbf{g}).

最后,总结下多种情形链式法则的结论,推导过程均可由上面过程拓展:

  • 标量 ff, 矢量g\mathbf{g}, 标量xx
    xf(x)=fx=fgT×gx\nabla_{x}f(x) =\frac{{\partial f}}{{\partial x}}=\frac{{\partial f}}{{\partial {\mathbf{g}^T}}} \times \frac{{\partial \mathbf{g}}}{{\partial x}}
    *标量 ff, 矢量gg, 矢量xx
    fx=gTx×fg\frac{{\partial f}}{{\partial \mathbf{x}}}=\frac{{\partial \mathbf{g}^T}}{{\partial \mathbf{x}}}\times \frac{{\partial f}}{{\partial {\mathbf{g}}}}
    *矢量 ff, 矢量gg, 矢量xx
    fx=gTx×fg\frac{{\partial \mathbf{f}}}{{\partial \mathbf{x}}}=\frac{{\partial \mathbf{g}^T}}{{\partial \mathbf{x}}}\times \frac{{\partial \mathbf{f}}}{{\partial {\mathbf{g}}}}
    *标量 ff, 矩阵gg, 标量xx
    fx=tr(fgTgx)\frac{{\partial f}}{{\partial x}}= \mathrm{tr}(\frac{{\partial f}}{{\partial {\mathbf{g}^T}}} \frac{{\partial \mathbf{g}}}{{\partial x}})
发布了47 篇原创文章 · 获赞 116 · 访问量 73万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览