1)学习参考链接:视频链接 (自己边学边手打笔记,个人觉得还是看完再打会吸收得更有效率)
2)markdown格式写作参考链接:MD格式链接
机器学习的矩阵求导基础
一、矩阵求导技术的应用价值
1.方程组改写为矩阵方程
在机器学习领域中,引入矩阵的核心目的是为了能够更好地进行数学推导,同时简化推导结论的数学表示,从而更好将数学逻辑转化为代码逻辑、并最终通过编程来执行相关运算。
例如,我们希望通过一条直线拟合二维平面坐标的(1,3) 和(2,5) 两个点,我们可以将直线表示为:
y
=
a
x
+
b
y = ax + b
y=ax+b
则带入上述两个点以后,可以构建方程组来进行a、b两个参数的求解:
w
=
{
3
=
1
∗
a
+
b
(
1
)
5
=
2
∗
a
+
b
(
2
)
w = \begin{cases} 3 = 1* a+b (1) \\ 5 = 2* a+b (2) \end{cases}
w={3=1∗a+b(1)5=2∗a+b(2)
此时我们可以通过(1)式*2 -(2)式来消除变量a、获得一个变量b单独的方程来进行b的求解,然后再带回任意方程来求解a,这也是最基本的方程组求解方法。
但除此之外,我们还可以将a、b放入一个向量中(数学过程默认向量为列向量),令
w
=
[
a
b
]
w = \begin{bmatrix} a \\ b \end{bmatrix}
w=[ab]
然后进一步将上述方程的形式改写成如下形式:
y
=
X
^
⋅
w
y = \hat X \cdot w
y=X^⋅w
其中:
y
=
[
3
5
]
,
X
^
=
[
1
,
1
2
,
1
]
y = \begin{bmatrix} 3 \\ 5 \end{bmatrix} , \hat X = \begin{bmatrix} 1 , 1 \\ 2,1 \end{bmatrix}
y=[35],X^=[1,12,1]
而上式也被称为方程组的矩阵表示形式,也被称为矩阵方程。当然我们也可以将其展开来进行观察:
y
=
[
3
5
]
=
X
^
⋅
w
=
[
1
,
1
2
,
1
]
⋅
[
a
b
]
y = \begin{bmatrix} 3 \\ 5 \end{bmatrix} = \hat X \cdot w= \begin{bmatrix} 1 , 1 \\ 2,1 \end{bmatrix} \cdot \begin{bmatrix} a \\ b \end{bmatrix}
y=[35]=X^⋅w=[1,12,1]⋅[ab]
至此,我们将一个方程组转化为一个矩阵方程。
2.矩阵方程求解
当然,将方程组转化为矩阵方程的一个最基本、同时也是最简单的操作就是–我们可以借助矩阵运算,来进行方程组的参数求解。一般来说,这个过程可以分为以下两步:
- step 1:验证矩阵方程的解的情况
值得注意的是,方程组的解的情况分为三种:不存在解,无数解,唯一解(往往是我们希望的那个)。一种简单的方法是,我们可以通过矩阵是否满秩来进行方程组是否有唯一解的验证。验证矩阵是否满秩也有两种常用方法。
其一是计算矩阵的秩,如果矩阵的秩和矩阵行数/列数相同,则矩阵满秩:在numpy中可以用np.linalg.matrix_rank(系数矩阵) 来求解秩,用shape来求出系数矩阵形状。
其二是直接计算系数矩阵的行列式,若不为0,就是满秩,也就存在唯一解。例如用np.linalg.det(矩阵)来得出行列式的值 - step 2: 采用矩阵运算对方程组进行求解
在验证方程组存在唯一解之后,我们接下来可用矩阵运算来进行方程组的求解,此时我们只要进行X的逆矩阵求解即可(方程组存在唯一解等价于方程组系数矩阵存在逆矩阵)。
回顾一下逆矩阵的概念:
A ⋅ B = E , 其中 E 为单位矩阵 A \cdot B = E,其中E为单位矩阵 A⋅B=E,其中E为单位矩阵
并且逆矩阵有如下表示:
A = B − 1 , B = A − 1 , 相当于 A ⋅ A − 1 = E = B ⋅ B − 1 A = B^{-1},B = A^{-1},相当于 A \cdot A^{-1} = E = B \cdot B^{-1} A=B−1,B=A−1,相当于A⋅A−1=E=B⋅B−1
回到我们实际求解问题过程里,我们先求解系数矩阵 X ^ \hat X X^的逆矩阵,然后在方程左右两端 X ^ \hat X X^的逆矩阵即可:
y = X ^ ⋅ w ⇒ X ^ − 1 ⋅ y = X ^ − 1 ⋅ X ^ ⋅ w ⇒ = w \begin{aligned} y &= \hat X \cdot w \\ \Rightarrow \hat X^{-1} \cdot y &= \hat X^{-1} \cdot \hat X \cdot w \\ \Rightarrow &=w \end{aligned} y⇒X^−1⋅y⇒=X^⋅w=X^−1⋅X^⋅w=w
同样我们可以借助numpy的np.linalg.inv(系数矩阵) 来求解逆矩阵,然后再点乘dot(y)就能得到w的具体取值。当然,更为一般的情况是通过广义逆矩阵来求解矩阵方程。
二、矩阵求导的核心概念
矩阵求导实际上是一个较大的范畴,包括向量变元的实值函数、向量变元的实向量函数、矩阵变元的实向量函数等等,为了区分这诸多情况,我们需要引入两个核心概念:变量变元 与 函数变元
这些概念,听得我快懵了
1.变量变元
所谓变量变元,指的是一个函数中变量的类型,一个函数中,变量类型可以是标量、向量或者是矩阵。例如我们上述的例子中,如果我们把等号右边看作是一个关于w的函数表达式就是:
f
(
w
)
=
X
^
⋅
w
f(w) = \hat X \cdot w
f(w)=X^⋅w
则我们称该函数为向量变元的函数。当然,除了向量变元,还有标量变元,这也是更为一般的函数类型,例如:
f
(
x
)
=
x
+
1
f(x) = x + 1
f(x)=x+1
此时x为一个标量,则我们称为该函数为标量变元的函数。当然,还有一种更复杂的情况,就是当函数的变量是一个矩阵时候,此时函数就被称为矩阵变元的函数:
f
(
w
)
=
A
⋅
w
f(w)=A \cdot w
f(w)=A⋅w
其中A 为一个2*2的系数矩阵,而w为一个包含四个变量的矩阵变元:
w
=
[
w
11
,
w
12
w
21
,
w
22
]
w = \begin{bmatrix} w_{11} , w_{12} \\ w_{21},w_{22}\end{bmatrix}
w=[w11,w12w21,w22]
2.函数变元
值得注意的是,除了一个函数内部的变量可以是向量或者矩阵以外,函数本身也有可能是向量或者矩阵,例如有一个包含三个函数的实向量函数如下:
f
3
∗
1
(
x
)
=
[
f
1
(
x
)
f
2
(
x
)
f
3
(
x
)
]
=
[
x
+
1
2
x
+
1
x
+
2
]
f_{3*1}(x) =\begin{bmatrix} f_1(x) \\ f_2(x) \\ f_3(x) \end{bmatrix} = \begin{bmatrix} x+1 \\ 2x+1 \\ x+2 \end{bmatrix}
f3∗1(x)=
f1(x)f2(x)f3(x)
=
x+12x+1x+2
此时由于每个函数都是一个标量变元的函数,因此上述函数我们可以成其为标量变元的实向量函数。因此其实前文中的例子,实际上是一个向量变元的实值标量函数。
当然,如果函数是一个矩阵的话,情况也是类似,我们就会称其为实矩阵函数。
不难发现,由于方程实由变量变元和函数变元这两个不同的变量构成,因此当这两个变量取得不同类型的时候,方程性质也会发生变化。尽管有时确实会存在矩阵变元的实矩阵函数这种复杂情况出现,但在机器学习初期,我们接触的更多还是函数变元中的实值标量函数。以下内容核心围绕实值标量函数展开讨论,并将其简称为向量变元的函数
三、矩阵求导的定义法
接下来介绍围绕向量变元的矩阵求导的具体技术。
矩阵求导的具体技术分为两类,分别实定义法和借助矩阵的迹进行求解两种。本次公开课将围绕相对基础的定义法来进行讲解。值得注意是,理论上所有矩阵求导其实都可以通过定义法来进行求解,而如果要是用更高阶的迹方法进行求解,则需要首先掌握更多的矩阵运算相关内容。
假设现在有一个二元函数如下:
f
(
x
1
,
x
2
)
=
2
x
1
+
x
2
f(x_1,x_2) = 2x_1 + x_2
f(x1,x2)=2x1+x2
并且,我们可以分别对该函数中的x1,x2依次求偏导,可得:
∂
f
∂
x
1
=
2
∂
f
∂
x
2
=
1
\begin{aligned} \frac{\partial f}{\partial x_1} &= 2 \\ \frac{\partial f}{\partial x_2} &= 1 \end{aligned}
∂x1∂f∂x2∂f=2=1
现在我们考虑将上述求偏导的函数改写成矩阵形式。则根据前述内容介绍,我们可以将函数中的两个变量一次排列,组成一个向量变元
,即一个由多个变量所组成的向量,即
x
=
[
x
1
,
x
2
]
T
x = [x_1,x_2]^T
x=[x1,x2]T
此时,如果我们按照向量变元内部的变量排列顺序,依次在每个变量位置填上该变量对应的偏导函数,则就构成了对于函数f进行向量变元x的向量求导的结果,即:
∂
f
(
x
)
∂
x
=
[
2
1
]
\frac{\partial f(x)}{\partial x} = \begin{bmatrix} 2 \\ 1 \end{bmatrix}
∂x∂f(x)=[21]
以上粗体是本次定义法的重点
至此,我们就完成了向量求导的基本过程。核心点在于,我们是依据向量变元中的变量排列顺序,依次填写了对应变量的偏导函数计算结果。不过,更进一步地来看,既然方程组需要改写成向量/矩阵形式,那么原始函数方程其实也同样需要改写成向量/矩阵形式。因此,原方程我们可以改写成:
f
(
x
)
=
A
T
⋅
x
f(x) = A^T \cdot x
f(x)=AT⋅x
其中,
A
=
[
2
,
1
]
T
x
=
[
x
1
,
x
2
]
A = [2,1]^T \\ x = [x_1,x_2]
A=[2,1]Tx=[x1,x2]
原方程为:
y
=
2
x
1
+
x
2
y = 2x_1 + x_2
y=2x1+x2
结合函数求导结果,我们不难发现,
∂
f
(
x
)
∂
x
\frac{\partial f(x)}{\partial x}
∂x∂f(x)最终计算结果就是A,即
∂
f
(
x
)
∂
x
=
∂
(
A
T
⋅
x
)
∂
x
=
A
\frac{\partial f(x)}{\partial x} = \frac{\partial (A^T \cdot x)}{\partial x} = A
∂x∂f(x)=∂x∂(AT⋅x)=A
其中
x
x
x是向量变元,A是列向量。当然,该结论也能推导至一般的情况,相关证明会再下一小节给出。
接下来给出定义法的详细说明:设f(x)是个关于x的函数,其中x是向量变元,并且:
x
=
[
x
1
,
x
2
,
⋯
,
x
n
]
T
x = [x_1,x_2,\cdots,x_n]^T
x=[x1,x2,⋯,xn]T
则
∂
f
∂
x
=
[
∂
f
∂
x
1
,
∂
f
∂
x
2
,
⋯
,
∂
f
∂
x
n
]
T
\frac{\partial f}{\partial x} = [\frac{\partial f}{\partial x_1},\frac{\partial f}{\partial x_2},\cdots,\frac{\partial f}{\partial x_n}]^T
∂x∂f=[∂x1∂f,∂x2∂f,⋯,∂xn∂f]T
而该表达式也被称为向量求导的梯度向量形式:
∇
x
f
(
x
)
=
∂
f
∂
x
=
[
∂
f
∂
x
1
,
∂
f
∂
x
2
,
⋯
,
∂
f
∂
x
n
]
T
\nabla_xf(x) = \frac{\partial f}{\partial x} = [\frac{\partial f}{\partial x_1},\frac{\partial f}{\partial x_2},\cdots,\frac{\partial f}{\partial x_n}]^T
∇xf(x)=∂x∂f=[∂x1∂f,∂x2∂f,⋯,∂xn∂f]T
通过求得函数的梯度向量求解向量导数的方法,也被称为定义法求解。
四、矩阵求导常用公式
在给出矩阵求导的定义法之后,我们尝试借助定义法来进行一些矩阵求导的常用公式的推导,此处我们假设x为包含n个变量的列向量, x = [ x 1 , x 2 , ⋯ , x n ] T x = [x_1,x_2,\cdots,x_n]^T x=[x1,x2,⋯,xn]T。
- 结论一:
∂ a ∂ x = 0 \frac{\partial a}{\partial x} = 0 ∂x∂a=0
证明:
∂ a ∂ x = [ ∂ a ∂ x 1 , ∂ a ∂ x 2 , ⋯ , ∂ a ∂ x n ] T = [ 0 , 0 , ⋯ , 0 ] T \begin{aligned} \frac{\partial a}{\partial x} &= [ \frac{\partial a}{\partial x_1} ,\frac{\partial a}{\partial x_2},\cdots ,\frac{\partial a}{\partial x_n}]^T \\ &= [0,0,\cdots,0] ^T \end{aligned} ∂x∂a=[∂x1∂a,∂x2∂a,⋯,∂xn∂a]T=[0,0,⋯,0]T
这里的a是常量
- 结论二:
∂ ( x T ⋅ A ) ∂ x = ∂ ( A T ⋅ x ) ∂ x = A \frac{\partial (x^T \cdot A)}{\partial x} = \frac{\partial (A^T \cdot x)}{\partial x} = A ∂x∂(xT⋅A)=∂x∂(AT⋅x)=A
证明:
此时A为拥有n个分量的常数向量,设
A
=
[
a
1
,
a
2
,
⋯
,
a
n
]
T
A=[a_1,a_2,\cdots,a_n]^T
A=[a1,a2,⋯,an]T,则有
∂
(
x
T
⋅
A
)
∂
x
=
∂
(
A
T
⋅
x
)
∂
x
=
∂
(
a
1
⋅
x
1
+
a
2
⋅
x
2
+
⋯
+
a
n
⋅
x
n
)
∂
x
=
[
∂
(
a
1
⋅
x
1
+
a
2
⋅
x
2
+
⋯
+
a
n
⋅
x
n
)
∂
x
1
∂
(
a
1
⋅
x
1
+
a
2
⋅
x
2
+
⋯
+
a
n
⋅
x
n
)
∂
x
2
⋮
∂
(
a
1
⋅
x
1
+
a
2
⋅
x
2
+
⋯
+
a
n
⋅
x
n
)
∂
x
n
]
=
[
a
1
a
2
⋮
a
n
]
=
A
\begin{aligned} \frac{\partial (x^T \cdot A)}{\partial x} &=\frac{\partial (A^T \cdot x)}{\partial x} \\ &= \frac{\partial (a_1 \cdot x_1 + a_2 \cdot x_2 + \cdots +a_n \cdot x_n)}{\partial x} \\ &= \begin{bmatrix} \frac{\partial (a_1 \cdot x_1 + a_2 \cdot x_2 + \cdots +a_n \cdot x_n)}{\partial x_1} \\ \frac{\partial (a_1 \cdot x_1 + a_2 \cdot x_2 + \cdots +a_n \cdot x_n)}{\partial x_2} \\ \vdots \\ \frac{\partial (a_1 \cdot x_1 + a_2 \cdot x_2 + \cdots +a_n \cdot x_n)}{\partial x_n} \end{bmatrix} \\ & = \begin{bmatrix} a_1\\ a_2 \\ \vdots \\ a_n \end{bmatrix} \\ &= A \end{aligned}
∂x∂(xT⋅A)=∂x∂(AT⋅x)=∂x∂(a1⋅x1+a2⋅x2+⋯+an⋅xn)=
∂x1∂(a1⋅x1+a2⋅x2+⋯+an⋅xn)∂x2∂(a1⋅x1+a2⋅x2+⋯+an⋅xn)⋮∂xn∂(a1⋅x1+a2⋅x2+⋯+an⋅xn)
=
a1a2⋮an
=A
-
结论三:
∂ ( x T ⋅ x ) ∂ x = 2 x \frac{\partial(x^T \cdot x)}{\partial x} = 2x ∂x∂(xT⋅x)=2x
证明:
∂ ( x T ⋅ x ) ∂ x = ∂ ( x 1 2 + x 2 2 + ⋯ x n 2 ) ∂ x = [ ∂ ( x 1 2 + x 2 2 + ⋯ x n 2 ) ∂ x 1 ∂ ( x 1 2 + x 2 2 + ⋯ x n 2 ) ∂ x 2 ⋮ ∂ ( x 1 2 + x 2 2 + ⋯ x n 2 ) ∂ x n ] = [ 2 x 1 2 x 2 ⋮ 2 x n ] = 2 x \begin{aligned} \frac{\partial(x^T \cdot x)}{\partial x} &= \frac{\partial(x^2_1+x^2_2+\cdots x^2_n)}{\partial x} \\ &= \begin{bmatrix} \frac{\partial(x^2_1+x^2_2+\cdots x^2_n)}{\partial x_1} \\ \frac{\partial(x^2_1+x^2_2+\cdots x^2_n)}{\partial x_2} \\ \vdots \\ \frac{\partial(x^2_1+x^2_2+\cdots x^2_n)}{\partial x_n} \end{bmatrix} \\ &= \begin{bmatrix} 2x_1\\ 2x_2 \\ \vdots \\ 2x_n \end{bmatrix} \\ &= 2x \end{aligned} ∂x∂(xT⋅x)=∂x∂(x12+x22+⋯xn2)= ∂x1∂(x12+x22+⋯xn2)∂x2∂(x12+x22+⋯xn2)⋮∂xn∂(x12+x22+⋯xn2) = 2x12x2⋮2xn =2x -
结论四:
∂ ( x T A x ) ∂ x = A x + A T x \frac{\partial(x^TA x)}{\partial x} = Ax+A^Tx ∂x∂(xTAx)=Ax+ATx
证明:
首先,
X T A X = [ x 1 , x 2 , ⋯ , x n ] ⋅ [ a 11 a 12 ⋯ a 1 n a 21 a 22 ⋯ a 2 n ⋯ ⋯ ⋯ ⋯ a n 1 a n 2 ⋯ a n n ] ⋅ [ x 1 , x 2 , ⋯ , x n ] T = [ x 1 a 11 + x 2 a 21 + ⋯ + x n a n 1 , x 1 a 12 + x 2 a 22 + ⋯ + x n a n 2 , ⋯ , x 1 a 1 n + x 2 a 2 n + ⋯ + x n a n n ] ⋅ [ x 1 x 2 ⋮ x n ] = x 1 ( x 1 a 11 + x 2 a 21 + ⋯ + x n a n 1 ) + x 2 ( x 1 a 12 + x 2 a 22 + ⋯ + x n a n 2 ) + ⋯ + x n ( x 1 a 1 n + x 2 a 2 n + ⋯ + x n a n n ) \begin{aligned} X^TAX &= [x_1,x_2,\cdots,x_n] \cdot \begin{bmatrix} a_{11} & a_{12} & \cdots & a_{1n} \\ a_{21} & a_{22} & \cdots & a_{2n} \\ \cdots & \cdots & \cdots & \cdots \\ a_{n1} & a_{n2} & \cdots & a_{nn} \\ \end{bmatrix} \cdot [x_1,x_2,\cdots,x_n] ^T \\ &= [ x_1a_{11} + x_2a_{21}+\cdots +x_na_{n1}, x_1a_{12} + x_2a_{22}+\cdots +x_na_{n2}, \cdots, x_1a_{1n} + x_2a_{2n}+\cdots +x_na_{nn} ] \cdot \begin{bmatrix} x_1 \\ x_2 \\ \vdots \\ x_n \end{bmatrix} \\ &= x_1(x_1a_{11} + x_2a_{21}+\cdots +x_na_{n1})+ x_2(x_1a_{12} + x_2a_{22}+\cdots +x_na_{n2})+ \cdots+ x_n(x_1a_{1n} + x_2a_{2n}+\cdots +x_na_{nn}) \end{aligned} XTAX=[x1,x2,⋯,xn]⋅ a11a21⋯an1a12a22⋯an2⋯⋯⋯⋯a1na2n⋯ann ⋅[x1,x2,⋯,xn]T=[x1a11+x2a21+⋯+xnan1,x1a12+x2a22+⋯+xnan2,⋯,x1a1n+x2a2n+⋯+xnann]⋅ x1x2⋮xn =x1(x1a11+x2a21+⋯+xnan1)+x2(x1a12+x2a22+⋯+xnan2)+⋯+xn(x1a1n+x2a2n+⋯+xnann)
令
k
(
x
)
=
x
1
(
x
1
a
11
+
x
2
a
21
+
⋯
+
x
n
a
n
1
)
+
x
2
(
x
1
a
12
+
x
2
a
22
+
⋯
+
x
n
a
n
2
)
+
⋯
+
x
n
(
x
1
a
1
n
+
x
2
a
2
n
+
⋯
+
x
n
a
n
n
)
k(x) = x_1(x_1a_{11} + x_2a_{21}+\cdots +x_na_{n1})+x_2(x_1a_{12} +x_2a_{22}+\cdots +x_na_{n2})+\cdots+ x_n(x_1a_{1n} + x_2a_{2n}+\cdots+x_na_{nn})
k(x)=x1(x1a11+x2a21+⋯+xnan1)+x2(x1a12+x2a22+⋯+xnan2)+⋯+xn(x1a1n+x2a2n+⋯+xnann)
则有
∂
k
(
x
)
∂
x
1
=
(
x
1
a
11
+
x
2
a
21
+
⋯
+
x
n
a
n
1
)
+
(
x
1
a
11
+
x
2
a
12
+
⋯
+
x
n
a
1
n
)
\frac{\partial k(x)}{\partial x_1} = (x_1a_{11} + x_2a_{21}+\cdots +x_na_{n1}) + (x_1a_{11} + x_2a_{12}+\cdots + x_na_{1n})
∂x1∂k(x)=(x1a11+x2a21+⋯+xnan1)+(x1a11+x2a12+⋯+xna1n)
类似可得:
∂ k ( x ) ∂ x = [ ∂ k ( x ) ∂ x 1 ∂ k ( x ) ∂ x 2 ⋮ ∂ k ( x ) ∂ x n ] = [ ( x 1 a 11 + x 2 a 21 + ⋯ + x n a n 1 ) + ( x 1 a 11 + x 2 a 12 + ⋯ + x n a 1 n ) ( x 1 a 12 + x 2 a 22 + ⋯ + x n a n 2 ) + ( x 1 a 21 + x 2 a 22 + ⋯ + x n a 2 n ) ⋮ ( x 1 a 1 n + x 2 a 2 n + ⋯ + x n a n n ) + ( x 1 a n 1 + x 2 a n 2 + ⋯ + x n a n n ) ] = [ ( x 1 a 11 + x 2 a 21 + ⋯ + x n a n 1 ) ( x 1 a 12 + x 2 a 22 + ⋯ + x n a n 2 ) ⋮ ( x 1 a 1 n + x 2 a 2 n + ⋯ + x n a n n ) ] + [ ( x 1 a 11 + x 2 a 12 + ⋯ + x n a 1 n ) ( x 1 a 21 + x 2 a 22 + ⋯ + x n a 2 n ) ⋮ ( x 1 a n 1 + x 2 a n 2 + ⋯ + x n a n n ) ] = [ a 11 a 21 ⋯ a n 1 a 12 a 22 ⋯ a n 2 ⋯ ⋯ ⋯ ⋯ a 1 n a 2 n ⋯ a n n ] [ x 1 x 2 ⋮ x n ] + [ a 11 a 12 ⋯ a 1 n a 21 a 22 ⋯ a 2 n ⋯ ⋯ ⋯ ⋯ a n 1 a n 2 ⋯ a n n ] [ x 1 x 2 ⋮ x n ] = A T x + A x \begin{aligned} \frac{\partial k(x)}{\partial x} &= \begin{bmatrix} \frac{\partial k(x)}{\partial x_1} \\ \frac{\partial k(x)}{\partial x_2} \\ \vdots \\ \frac{\partial k(x)}{\partial x_n} \end{bmatrix} \\ &= \begin{bmatrix} (x_1a_{11} + x_2a_{21}+\cdots +x_na_{n1}) + (x_1a_{11} + x_2a_{12}+\cdots + x_na_{1n}) \\ (x_1a_{12} + x_2a_{22}+\cdots +x_na_{n2}) + (x_1a_{21} + x_2a_{22}+\cdots + x_na_{2n}) \\ \vdots \\ (x_1a_{1n} + x_2a_{2n}+\cdots +x_na_{nn}) + (x_1a_{n1} + x_2a_{n2}+\cdots + x_na_{nn}) \end{bmatrix} \\ &= \begin{bmatrix} (x_1a_{11} + x_2a_{21}+\cdots +x_na_{n1}) \\ (x_1a_{12} + x_2a_{22}+\cdots +x_na_{n2}) \\ \vdots \\ (x_1a_{1n} + x_2a_{2n}+\cdots +x_na_{nn}) \end{bmatrix} + \begin{bmatrix} (x_1a_{11} + x_2a_{12}+\cdots + x_na_{1n}) \\ (x_1a_{21} + x_2a_{22}+\cdots + x_na_{2n}) \\ \vdots \\ (x_1a_{n1} + x_2a_{n2}+\cdots + x_na_{nn}) \end{bmatrix} \\ &= \begin{bmatrix} a_{11} & a_{21} & \cdots & a_{n1} \\ a_{12} & a_{22} & \cdots & a_{n2} \\ \cdots & \cdots & \cdots & \cdots \\ a_{1n} & a_{2n} & \cdots & a_{nn} \\ \end{bmatrix} \begin{bmatrix} x_1 \\ x_2 \\ \vdots \\ x_n \end{bmatrix} + \begin{bmatrix} a_{11} & a_{12} & \cdots & a_{1n} \\ a_{21} & a_{22} & \cdots & a_{2n} \\ \cdots & \cdots & \cdots & \cdots \\ a_{n1} & a_{n2} & \cdots & a_{nn} \\ \end{bmatrix} \begin{bmatrix} x_1 \\ x_2 \\ \vdots \\ x_n \end{bmatrix} \\ &= A^Tx+Ax \end{aligned} ∂x∂k(x)= ∂x1∂k(x)∂x2∂k(x)⋮∂xn∂k(x) = (x1a11+x2a21+⋯+xnan1)+(x1a11+x2a12+⋯+xna1n)(x1a12+x2a22+⋯+xnan2)+(x1a21+x2a22+⋯+xna2n)⋮(x1a1n+x2a2n+⋯+xnann)+(x1an1+x2an2+⋯+xnann) = (x1a11+x2a21+⋯+xnan1)(x1a12+x2a22+⋯+xnan2)⋮(x1a1n+x2a2n+⋯+xnann) + (x1a11+x2a12+⋯+xna1n)(x1a21+x2a22+⋯+xna2n)⋮(x1an1+x2an2+⋯+xnann) = a11a12⋯a1na21a22⋯a2n⋯⋯⋯⋯an1an2⋯ann x1x2⋮xn + a11a21⋯an1a12a22⋯an2⋯⋯⋯⋯a1na2n⋯ann x1x2⋮xn =ATx+Ax
证明完毕。
在掌握了矩阵求导的基本方法与常用结论之后,我们就可以进一步地进行很多算法的损失函数的梯度计算表达式计算了
例如进行最小二乘法的公式推导、逻辑回归的损失函数梯度计算表达式推导等等。