机器学习中的矩阵向量求导(二) 矩阵向量求导之定义法

    在机器学习中的矩阵向量求导(一) 求导定义与求导布局中,咱们讨论了向量矩阵求导的9种定义与求导布局的概念。今天咱们就讨论下其中的标量对向量求导,标量对矩阵求导, 以及向量对向量求导这三种场景的基本求解思路。html

    对于本文中的标量对向量或矩阵求导这两种状况,如前文所说,以分母布局为默认布局。向量对向量求导,以分子布局为默认布局。如遇到其余文章中的求导结果和本文不一样,请先确认使用的求导布局是否同样。另外,因为机器学习中向量或矩阵对标量求导的场景不多见,本系列不会单独讨论这两种求导过程。机器学习

1. 用定义法求解标量对向量求导

    标量对向量求导,严格来讲是实值函数对向量的求导。即定义实值函数$f: R^{n} \to R$,自变量$\mathbf{x}$是n维向量,而输出$y$是标量。对于一个给定的实值函数,如何求解$\frac{\partial y}{\partial \mathbf{x}}$呢?函数

    首先咱们想到的是基于矩阵求导的定义来作,因为所谓标量对向量的求导,其实就是标量对向量里的每一个份量分别求导,最后把求导的结果排列在一块儿,按一个向量表示而已。那么咱们能够将实值函数对向量的每个份量来求导,最后找到规律,获得求导的结果向量。布局

    首先咱们来看一个简单的例子:$y=\mathbf{a}^T\mathbf{x}$,求解$\frac{\partial \mathbf{a}^T\mathbf{x}}{\partial \mathbf{x}}$post

    根据定义,咱们先对$\mathbf{x}$的第i个份量进行求导,这是一个标量对标量的求导,以下:学习

$$\frac{\partial \mathbf{a}^T\mathbf{x}}{\partial x_i} = \frac{\partial \sum\limits_{j=1}^n a_jx_j}{\partial x_i} = \frac{\partial a_ix_i}{\partial x_i} =a_i$$测试

    可见,对向量的第i个份量的求导结果就等于向量$\mathbf{a}$的第i个份量。因为咱们是分母布局,最后全部求导结果的份量组成的是一个n维向量。那么其实就是向量$\mathbf{a}$。也就是说:$$\frac{\partial \mathbf{a}^T\mathbf{x}}{\partial \mathbf{x}} = \mathbf{a}$$htm

    一样的思路,咱们也能够直接获得:$$\frac{\partial \mathbf{x}^T\mathbf{a}}{\partial \mathbf{x}} = \mathbf{a}$$blog

    给一个简单的测试,你们看看本身能不能按定义法推导出:$$\frac{\partial \mathbf{x}^T\mathbf{x}}{\partial \mathbf{x}} =2\mathbf{x}$$get

    再来看一个复杂一点点的例子:$y=\mathbf{x}^T\mathbf{A}\mathbf{x}$,求解$\frac{\partial \mathbf{x}^T\mathbf{A}\mathbf{x}}{\partial \mathbf{x}}$

    咱们对$\mathbf{x}$的第k个份量进行求导以下:

$$\frac{\partial \mathbf{x}^T\mathbf{A}\mathbf{x}}{\partial x_k} = \frac{\partial \sum\limits_{i=1}^n\sum\limits_{j=1}^n x_iA_{ij}x_j}{\partial x_k} = \sum\limits_{i=1}^n A_{ik}x_i + \sum\limits_{j=1}^n A_{kj}x_j $$

    这个第k个份量的求导结果稍微复杂些了,仔细观察一下,第一部分是矩阵$\mathbf{A}$的第k列转置后和$x$相乘获得,第二部分是矩阵$\mathbf{A}$的第k行和$x$相乘获得,排列好就是: $$\frac{\partial \mathbf{x}^T\mathbf{A}\mathbf{x}}{\partial \mathbf{x}} = \mathbf{A}^T\mathbf{x} + \mathbf{A}\mathbf{x}$$

    从上面能够看出,定义法求导对于简单的实值函数是很容易的,可是复杂的实值函数就算求出了任意一个份量的导数,要排列出最终的求导结果还挺麻烦的,所以咱们须要找到其余的简便一些的方法来总体求导,而不是每次都先去针对任意一个份量,再进行排列。

2. 标量对向量求导的一些基本法则

    在咱们寻找一些简单的方法前,咱们简单看下标量对向量求导的一些基本法则,这些法则和标量对标量求导的过程相似。

    1) 常量对向量的求导结果为0。

    2)线性法则:若是$f,g$都是实值函数,$c_1,c_2$为常数,则:$$\frac{\partial (c_1f(\mathbf{x})+c_2g(\mathbf{x})}{\partial \mathbf{x}} = c_1\frac{\partial f(\mathbf{x})}{\partial \mathbf{x}} +c_2\frac{\partial g(\mathbf{x})}{\partial \mathbf{x}} $$

    3) 乘法法则:若是$f,g$都是实值函数,则:$$\frac{\partial f(\mathbf{x})g(\mathbf{x})}{\partial \mathbf{x}} = f(\mathbf{x})\frac{\partial g(\mathbf{x})}{\partial \mathbf{x}} +\frac{\partial f(\mathbf{x})}{\partial \mathbf{x}} g(\mathbf{x}) $$

    要注意的是若是不是实值函数,则不能这么使用乘法法则。

    4) 除法法则:若是$f,g$都是实值函数,且$g(\mathbf{x}) \neq 0$,则:$$\frac{\partial f(\mathbf{x})/g(\mathbf{x})}{\partial \mathbf{x}} = \frac{1}{g^2(\mathbf{x})}(g(\mathbf{x})\frac{\partial f(\mathbf{x})}{\partial \mathbf{x}} - f(\mathbf{x})\frac{\partial g(\mathbf{x})}{\partial \mathbf{x}})$$

3. 用定义法求解标量对矩阵求导

     如今咱们来看看定义法如何解决标量对矩阵的求导问题。其实思路和第一节的标量对向量的求导是相似的,只是最后的结果是一个和自变量同型的矩阵。

    咱们仍是以一个例子来讲明。$y=\mathbf{a}^T\mathbf{X}\mathbf{b}$,求解$\frac{\partial \mathbf{a}^T\mathbf{X}\mathbf{b}}{\partial \mathbf{X}}$

    其中, $\mathbf{a}$是m维向量,$\mathbf{b}$是n维向量,  $\mathbf{X}$是$m \times n$的矩阵。

    咱们对矩阵$\mathbf{X}$的任意一个位置的$X_{ij}$求导,以下:$$\frac{\partial \mathbf{a}^T\mathbf{X}\mathbf{b}}{\partial X_{ij}} =  \frac{\partial \sum\limits_{p=1}^m\sum\limits_{q=1}^n a_pA_{pq}b_q}{\partial X_{ij}} =  \frac{\partial  a_iA_{ij}b_j}{\partial X_{ij}} = a_ib_j$$

    即求导结果在$(i.j)$位置的求导结果是$\mathbf{a}$向量第i个份量和$\mathbf{b}$第j个份量的乘积,将全部的位置的求导结果排列成一个$m \times n$的矩阵,即为$ab^T$,这样最后的求导结果为:$$\frac{\partial \mathbf{a}^T\mathbf{X}\mathbf{b}}{\partial \mathbf{X}} = ab^T$$

    简单的求导的确不难,可是若是是比较复杂的标量对矩阵求导,好比$y=\mathbf{a}^Texp(\mathbf{X}\mathbf{b})$,对任意标量求导容易,排列起来仍是蛮麻烦的,也就是咱们遇到了和标量对向量求导同样的问题,定义法比较适合解决简单的问题,复杂的求导须要更简便的方法。这个方法咱们在下一篇来说。

    同时,标量对矩阵求导也有和第二节对向量求导相似的基本法则,这里就不累述了。

4.用定义法求解向量对向量求导

    这里咱们也一样给出向量对向量求导的定义法的具体例子。

    先来一个简单的例子: $\mathbf{y} = \mathbf{A} \mathbf{x} $,其中$ \mathbf{A}$为$n \times m$的矩阵。$\mathbf{x}, \mathbf{y}$分别为$m,n$维向量。须要求导$\frac{\partial \mathbf{A}\mathbf{x}}{\partial \mathbf{x}}$,根据定义,结果应该是一个$n \times m$的矩阵

    先求矩阵的第i行和向量的内积对向量的第j份量求导,用定义法求解过程以下:$$\frac{\partial \mathbf{A_i}\mathbf{x}}{\partial \mathbf{x_j}} = \frac{\partial A_{ij}x_j}{\partial \mathbf{x_j}}= A_{ij}$$

    可见矩阵 $\mathbf{A}$的第i行和向量的内积对向量的第j份量求导的结果就是矩阵 $\mathbf{A}$的$(i,j)$位置的值。排列起来就是一个矩阵了,因为咱们分子布局,因此排列出的结果是$ \mathbf{A}$,而不是 $\mathbf{A}^T$

5. 定义法矩阵向量求导的局限

    使用定义法虽然已经求出一些简单的向量矩阵求导的结果,可是对于复杂的求导式子,则中间运算会很复杂,同时求导出的结果排列也是很头痛的。下一篇咱们讨论使使用矩阵微分和迹函数的方法来求解矩阵向量求导。    

 

(欢迎转载,转载请注明出处。欢迎沟通交流: liujianping-ok@163.com) 

相关文章
相关标签/搜索