浅浅写一篇文章来了解一下分子及分母布局:-(对矩阵求偏导的看法)

浅浅写一篇文章来了解一下分子及分母布局:-(对矩阵求偏导的看法)

在网上看了很多很多对矩阵求偏导的各种各样眼花缭乱的例子,但觉得还是不够深刻,本文尝试通过一个最简单的例子来说明清楚对矩阵求偏导的真正原理,以及需要了解的基础知识和更多的拓展知识:

最简单的例子引入

\[小康在学习神经网络时遇到一个求偏导数的问题,已经知道第二层中有\\ \mathop{z^{[2]}}\limits_{(4,1)} = \mathop{W^{[2]}}\limits_{(4,3)} \mathop{a^{[1]}}\limits_{(3,1)} + \mathop{b^{[2]}}\limits_{(4,1)}\\ 请你帮忙求出\frac{\partial z^{[2]}}{\partial W^{[2]}},\frac{\partial z^{[2]}}{\partial a^{[1]}}分别应该等于什么;\\ (假设W^{[2]},a^{[2]}都是自变量,b^{[2]}姑且当作常量,z^{[2]}是因变量) \]

如果是刚刚学完高等数学中的偏导,很自然我们会有这样的想法:

  • 当这些都是标量时:

\[z=Wa+b\quad(尝试把他们都当作标量来求偏导再类比)\\ dz=adW+Wda\quad(微分形式)\\ dz= \frac{\partial z}{\partial W}dW+ \frac{\partial z}{\partial a}da\quad(偏导形式)\\ \]

  • 当向量化之后堆叠在一起成为矩阵或向量后(我们不妨先不管那些烦人的上标);
  • 基于我们对微分的认识,我们认为应该是逐元素进行微分,则有dz, dW, da的维度应该和z, W, a的维度是一致的:
  • 注意区别这里的算子d是微分的意思,而不是神经网络那边定义的导数;

\[\mathop{dz}_{(4,1)}= \mathop{\frac{\partial z}{\partial W}}_{(?,?)} \mathop{dW}_{(4,3)}+ \mathop{\frac{\partial z}{\partial a}}_{(?,?)} \mathop{da}_{(3,1)} \]

这里我们观察到一个明显不太对的地方,就是左边是一个列向量,而右边在第一个矩阵相乘后应该是一个奇怪的矩阵(dW下方表示的是4行3列的矩阵,最后和别人相加相加时的结果也只能是个4行3列的矩阵凑不出4行1列来),这不符合我们的认知;

再者我们又观察到其实问号所代表的真实意思应该可以确定了,所以我们临时想到了这样去解决这个问题:

为了符合左边的维度,我们通过交换第一个矩阵相乘的位置来限制住行数是4,通过左边列数及矩阵相乘的内容猜测偏导数的维度,对第二个矩阵同样进行这样的猜测,于是我们写出了这样的“全微分方程”

\[\mathop{dz}_{(4,1)}= \mathop{dW}_{(4,3)} \mathop{\frac{\partial z}{\partial W}}_{(3,1)} + \mathop{\frac{\partial z}{\partial a}}_{(4,3)} \mathop{da}_{(3,1)} \]

为了符合一阶时的全微分,我们这样写:

\[dz=dW\cdot a+W\cdot da \]

这样我们自己通过猜测定义了处理偏导的方式(但我们其实仍未知道偏导的“布局”对我们结果的影响),下面我们来学习更多的内容再回过头来看正确的结果应该是什么:

\[稍稍做一下铺垫(在分母布局下我们有)\\ \frac{\mathop{\partial z}\limits_{(4,1)}} {\mathop{\partial W}\limits_{(4,3)}} =\mathop{a^T}\limits_{(1,3)}\\ \frac{\mathop{\partial z}\limits_{(4,1)}} {\mathop{\partial a}\limits_{(3,1)}} =\mathop{W^T}\limits_{(3,4)} \]

基础知识

1.求偏导的自变量的符号区别

使用标量、向量和矩阵总共有九种可能性。请注意,当我们考虑每个自变量和因变量中更多数量的分量时,我们可能会留下非常多的可能性。下表收集了最能以矩阵形式最整齐地组织的六种导数。

在这里,我们使用了最一般意义上的术语“矩阵”,认识到向量和标量只是分别具有一列和一行的矩阵。此外,我们使用粗体字母表示向量,使用粗体大写字母表示矩阵。此表示法自始至终使用。

请注意,我们还可以讨论向量相对于矩阵的导数,或者我们表中的任何其他未填充单元格。然而,这些导数最自然地组织在秩高于2的张量中,因此它们不能整齐地拟合到矩阵中。在以下三节中,我们将定义这些导数中的每一个,并将它们与数学的其他分支联系起来。有关更详细的表格,请参阅布局约定部分。(摘自维基百科)

所以说向量对矩阵,矩阵对向量,矩阵对矩阵的导数尚无统一的看法,不过我们可以根据我们的需要对他们进行定义;

image-20220423155400667

2.分子布局与分母布局

引用蒲公英书背后的数学基础里矩阵微积分章节所说的一段话开始我们的话题:

矩阵微积分的表示通常有两种符号约定:分子布局( Numerator Layout )和分母布局( Denominator Layout ).两者的区别是一个标量关于一个向量的导数是写成列向量还是行向量。(除特别说明外,本书默认采用分母布局.)

按照笔者的理解时是这样的,一般情况下:

  • 分子布局:偏导后得出的矩阵是和分子的维度是一致的;
  • 分母布局:偏导后得出的矩阵是和分母的维度是一致的;

而我们很多资料好像都是默认利用分母布局来进行算的,因为这样更多的使我们的结果也会成为列向量的形式(我们的自变量往往定义成列向量的形式),同时这样也更有利于我们去理解实值函数相对于实向量的求偏导:逐次对实向量每个元素求偏导,这样得到的结果自然和实向量的维度是一致的;

但是我们仍需注意到两个问题(摘自维基)

  1. 尽管使用了术语“分子布局”和“分母布局”,但实际上涉及两个以上的可能的符号选择。原因是分子与分母(或在某些情况下,分子与混合)的选择可以独立地用于标量按向量,逐标量,向量逐向量和标量矩阵导数,并且许多作者以各种方式混合和匹配其布局选择。
  2. 在下面的介绍部分中选择分子布局并不意味着这是“正确”或“优越”的选择。各种布局类型有优点和缺点。严重错误可能是由于不小心组合在不同布局中编写的公式,并且从一个布局转换为另一个布局需要小心避免错误。因此,在使用现有公式时,最佳策略可能是确定所使用的布局并保持其一致性,而不是尝试在所有情况下都使用相同的布局。

就是指我们更应该注意作者的真实意图或者使“混合布局”,而我们使用时也非常建议保持一致性;

3.grad&Jacobian&Hessian

实值标量函数对于向量的求导:grad(梯度向量)

首先我们得知道这种表达,

\[grad\;f=\nabla f \]

其中这个倒三角形是一个微分算子,叫nabla;

\[若f(\mathbf{x} )=f([x_1,x_2,x_3,\ldots ,x_n]^T)\\ 则\nabla f=\begin{bmatrix} \frac{\partial f}{\partial x_1} &\frac{\partial f}{\partial x_2} &\frac{\partial f}{\partial x_3} & \cdots &\frac{\partial f}{\partial x_n} \end{bmatrix}^T \]

另外稍稍拓展一下方向导数的记法:

\[\nabla_{\mathbf{u}}f(\mathbf{x})=\nabla f(\mathbf{x})\cdot \mathbf{u}=\frac{\partial f}{\partial\mathbf{x}}\cdot \mathbf{u} \]

(这个点是向量点乘的意思)

\[这里也可以这样写, \mathop{\frac{\partial }{\partial\mathbf{x}}}_{(n,1)} \cdot \mathop{f}_{(1,1)} \]

向量对向量求导:Jacobian(雅可比矩阵)

\[对于输入和输出向量:\\ \begin{align} \mathbf{x} & = \begin{bmatrix} x_1 & x_2 &x_3 &\cdots&x_n \end{bmatrix}^T\\ \mathbf{y} & = \begin{bmatrix} y_1 & y_2 &y_3 &\cdots&y_m \end{bmatrix}^T\\ \end{align} \]

我们有(分母布局下)

\[\frac{\partial \mathbf{y} }{\partial \mathbf{x}} =\begin{bmatrix} \frac{\partial y_1 }{\partial x_1}&\frac{\partial y_2 }{\partial x_1} & \frac{\partial y_3 }{\partial x_1} & \cdots &\frac{\partial y_m }{\partial x_1} \\ \frac{\partial y_1 }{\partial x_2}&\frac{\partial y_2 }{\partial x_2} & \frac{\partial y_3 }{\partial x_2} & \cdots & \frac{\partial y_m }{\partial x_2}\\ \frac{\partial y_1 }{\partial x_3}&\frac{\partial y_2 }{\partial x_3} & \frac{\partial y_3 }{\partial x_3} & \cdots & \frac{\partial y_m }{\partial x_3}\\ \vdots & \vdots &\vdots &\ddots & \vdots\\ \frac{\partial y_1 }{\partial x_n}&\frac{\partial y_2 }{\partial x_n} & \frac{\partial y_3 }{\partial x_n} & \cdots &\frac{\partial y_m }{\partial x_n} \end{bmatrix}_{n\times m} \]

\[其实这里也可以写成是 \mathop{\frac{\partial}{\partial\mathbf{x}}}_{(n,1)} \cdot \mathop{\mathbf{y}^T}_{(1,m)} \]

但为了不容易混淆,不建议将带有转置符号的y也写到分子上去;

梯度向量对自变量向量求导:Hessian(海森矩阵)

\[\frac{\partial\nabla f}{\partial x}= \begin{bmatrix} \frac{\partial^2f }{\partial x_1\partial x_1} &\frac{\partial^2f }{\partial x_1\partial x_2} &\cdots &\frac{\partial^2f }{\partial x_1\partial x_n} \\ \frac{\partial^2f }{\partial x_2\partial x_1}& \frac{\partial^2f }{\partial x_2\partial x_2} &\cdots &\frac{\partial^2f }{\partial x_2\partial x_n} \\ \vdots & \vdots &\ddots &\vdots \\ \frac{\partial^2f }{\partial x_n\partial x_1}& \frac{\partial^2f }{\partial x_n\partial x_2} &\cdots &\frac{\partial^2f }{\partial x_n\partial x_n} \end{bmatrix} \]

在Hessian矩阵上我们根本不用去关心布局的事情,而且它又是多么的对称,成为了高斯-牛顿迭代法中类似于导数的东西;

\[其实这里也可以写成这样(这样子更美丽)\\ \begin{align} \mathop{\frac{\partial}{\partial\mathbf{x}}}_{(n,1)} \cdot \mathop{\mathbf{y}^T}_{(1,m)} & = \mathop{\frac{\partial}{\partial\mathbf{x}}}_{(n,1)} \cdot \mathop{(\nabla f)^T}\limits_{(1,n)} \\& = \mathop{\frac{\partial}{\partial\mathbf{x}}}_{(n,1)} \cdot \mathop{(\mathop{\frac{\partial }{\partial\mathbf{x}}}_{(n,1)} \cdot \mathop{f}_{(1,1)})^T} \\& = \mathop{\frac{\partial}{\partial\mathbf{x}}}_{(n,1)} \cdot \mathop{f}_{(1,1)} \cdot \mathop{(\mathop{\frac{\partial }{\partial\mathbf{x}}}_{(1,n)} )^T} \end{align} \]

小小拓展

如果想了解更本质如(矩阵对矩阵求偏导等等),更详细的矩阵微积分的话可以维基百科一下,这里比很多博客写的都详细,其实只要看下这个对矩阵微积分就可以很明白了(虽然说也没有给出多全面的矩阵对矩阵求偏导的定理,我们还是要根据自己推测去拓展一下):

矩阵微积分 - 维基百科,自由的百科全书 (wikipedia.org)

一个很好的矩阵计算网站,可以生成python代码和latex公式,也非常nice:

矩阵微积分 (matrixcalculus.org)

posted @ 2022-04-23 18:58  Link_kingdom  阅读(1260)  评论(0编辑  收藏  举报