新生任务-3

一、为什么机器学习中需要矩阵求导

这是一个非常自然的过程. 算法中需要数据喂进去, 对于数据来说可以用向量或者是矩阵来表示.

机器学习就是对优化算法围绕讨论. 本质上就是一个方程, 使用向量或者矩阵能够使得运算速度更快. 例如在使用 numpy 库计算向量之间内积的时候能体现出和使用循环计算内积方式的速度差距.

求导是为了获取到损失函数的变换趋势, 以便于对算法优化过程进行迭代处理.

二、向量函数

1. 标量函数

f 1 ( x ) = x 2 R x ⟶ R x 2 f_1(x) = x^2 \quad \underset{x}{R} \longrightarrow \underset{x^2}{R} f1(x)=x2xRx2R

函数 f 1 ( x ) f_1(x) f1(x) 输入是 x x x, 输出是 x 2 x^2 x2, 输入输出都是一个数.

f 2 ( x ) = x 1 2 + x 2 2 R [ x 1 x 2 ] ⟶ R x 1 2 + x 2 2 f_2(x) = x_1^2 + x_2^2 \quad \underset{\begin{bmatrix}x_1\\x_2\end{bmatrix}}{R} \longrightarrow \underset{x_1^2 + x_2^2}{R} f2(x)=x12+x22[x1x2]Rx12+x22R

函数 f 2 ( x ) f_2(x) f2(x) 输入是 [ x 1 x 2 ] \begin{bmatrix}x_1\\x_2\end{bmatrix} [x1x2] 这样一个向量, 输出是 x 1 2 + x 2 2 x_1^2 + x_2^2 x12+x22 这样一个值.

所以把输出为标量的函数就叫做标量函数.

2. 向量函数

f ( x ) = [ f 1 ( x ) = x f 2 ( x ) = x 2 ] R x ⟶ R [ x x 2 ] f(x) = \begin{bmatrix}f_1(x)=x\\f_2(x)=x^2\end{bmatrix} \quad \underset{x}{R} \longrightarrow \underset{\begin{bmatrix}x\\x^2\end{bmatrix}}{R} f(x)=[f1(x)=xf2(x)=x2]xR[xx2]R

这样在函数中输入的是标量, 但是输出却为向量. 同样的还有这样的函数

f ( x ) = [ f 11 ( x ) = x 1 + x 2 f 12 ( x ) = x 1 2 + x 2 2 f 21 ( x ) = x 1 3 + x 2 3 f 22 ( x ) = x 1 4 + x 2 4 ] R [ x 1 x 2 ] ⟶ R [ x 1 + x 2 x 1 2 + x 2 2 x 1 3 + x 2 3 x 1 4 + x 2 4 ] f(x) = \begin{bmatrix}f_{11}(x)=x_1 + x_2& f_{12}(x) = x_1^2+x_2^2\\f_{21}(x)=x_1^3+x_2^3& f_{22}(x) = x_1^4+x_2^4\end{bmatrix} \quad \underset{\begin{bmatrix}x_1\\x_2\end{bmatrix}}{R} \longrightarrow \underset{\begin{bmatrix}x_1 + x_2& x_1^2+x_2^2\\x_1^3+x_2^3& x_1^4+x_2^4\end{bmatrix}}{R} f(x)=[f11(x)=x1+x2f21(x)=x13+x23f12(x)=x12+x22f22(x)=x14+x24][x1x2]R[x1+x2x13+x23x12+x22x14+x24]R

输入是一个 2 维向量, 输出是 2 × 2 2 \times 2 2×2 的矩阵.

那么我们现在就有这样的东西

I n p u t ⟶ 标 量 , 向 量 O u t p u t ⟶ 标 量 , 向 量 \begin{aligned} \mathrm{Input} \longrightarrow 标量,向量\\ \mathrm{Output} \longrightarrow 标量,向量 \end{aligned} Input,Output,

输入和输出的组合, 一共就有 4 种方式.

三、矩阵求导

1. 矩阵求导本质

现有矩阵 A A A 和矩阵 B B B, 那么矩阵求导式子 d A d B \frac{dA}{dB} dBdA 就是让矩阵 A A A 中的每一个元素对矩阵 B B B 中的每一个元素进行求导.

从求导后的个数就能有一个较为清晰的判断, 括号中为矩阵中元素个数

A ( 1 × 1 ) B ( 1 × 1 ) d A d B ( 1 × 1 ) A (1 \times 1) \quad B (1 \times 1) \quad \frac{dA}{dB}(1 \times 1) A(1×1)B(1×1)dBdA(1×1)

A ( 1 × p ) B ( 1 × n ) d A d B ( p × n ) A (1 \times p) \quad B (1 \times n) \quad \frac{dA}{dB}(p \times n) A(1×p)B(1×n)dBdA(p×n)

A ( 1 × p ) B ( m × n ) d A d B ( p × q × m × n ) A (1 \times p) \quad B (m \times n) \quad \frac{dA}{dB}(p \times q \times m \times n) A(1×p)B(m×n)dBdA(p×q×m×n)

2. 矩阵求导技巧

需要记住两点技巧, 一是标量不变, 向量拉伸; 二是前面横向拉, 后面纵向拉. 下面举几个例子来感受一下.

例 1 : f ( x ) f(x) f(x) 为标量函数, x = [ x 1 , x 2 , ⋯   , x n ] T x = [x_1,x_2,\cdots,x_n]^{\mathrm{T}} x=[x1,x2,,xn]T 为向量, 求 f ( x ) f(x) f(x) 关于 x x x 的导数.

f ( x ) = f ( x 1 , x 2 , ⋯   , x n ) f(x) = f(x_1,x_2,\cdots,x_n) f(x)=f(x1,x2,,xn)

那么就有

d f ( x ) d x = [ ∂ f ( x ) ∂ x 1 ∂ f ( x ) ∂ x 2 ⋮ ∂ f ( x ) ∂ x n ] \frac{df(x)}{dx} = \begin{bmatrix} \frac{\partial f(x)}{\partial x_1}\\ \frac{\partial f(x)}{\partial x_2}\\ \vdots\\ \frac{\partial f(x)}{\partial x_n}\\ \end{bmatrix} dxdf(x)=x1f(x)x2f(x)xnf(x)

因为 f ( x ) f(x) f(x) 是标量, 所以在求导中不变, 而 x x x 是向量, 所以求导中要变, 但是 x x x 是在后面, 所以就出现纵向拉伸, 换而言之拉伸的过程就是多元函数求导的过程.

例 2 : f ( x ) = [ f 1 ( x ) f 2 ( x ) ⋮ f n ( x ) ] f(x)= \begin{bmatrix}f_1(x)\\f_2(x)\\ \vdots\\f_n(x)\end{bmatrix} f(x)=f1(x)f2(x)fn(x) 为向量函数, x x x 为标量, 求 f ( x ) f(x) f(x) 关于 x x x 的导数.

d f ( x ) d x = [ ∂ f 1 ( x ) ∂ x , ∂ f 2 ( x ) ∂ x , ⋯   , ∂ f n ( x ) ∂ x ] \frac{df(x)}{dx} = \Bigg [ \frac{\partial f_1(x)}{\partial x}, \frac{\partial f_2(x)}{\partial x},\cdots, \frac{\partial f_n(x)}{\partial x} \Bigg ] dxdf(x)=[xf1(x),xf2(x),,xfn(x)]

因为 x x x 是标量, 所以在求导中不变, 而 f ( x ) f(x) f(x) 是向量, 所以求导中要变, 但是 f ( x ) f(x) f(x) 是在前面, 所以就出现横向拉伸, 换而言之拉伸的过程就是不同函数对同一变量求导的过程.

例 3 : f ( x ) = [ f 1 ( x ) f 2 ( x ) ⋮ f n ( x ) ] f(x)= \begin{bmatrix}f_1(x)\\f_2(x)\\ \vdots\\f_n(x)\end{bmatrix} f(x)=f1(x)f2(x)fn(x) 为向量函数, x = [ x 1 , x 2 , ⋯   , x n ] T x = [x_1,x_2,\cdots,x_n]^{\mathrm{T}} x=[x1,x2,,xn]T 为向量, 求 f ( x ) f(x) f(x) 关于 x x x 的导数.

这个就是前两个例子的结合, 出现了横向和纵向的拉伸.

d f ( x ) d x = [ ∂ f 1 ( x ) ∂ x 1 ∂ f 2 ( x ) ∂ x 1 ⋯ ∂ f n ( x ) ∂ x 1 ∂ f 1 ( x ) ∂ x 2 ∂ f 2 ( x ) ∂ x 2 ⋯ ∂ f n ( x ) ∂ x 2 ⋯ ⋯ ⋯ ⋯ ∂ f 1 ( x ) ∂ x n ∂ f 2 ( x ) ∂ x n ⋯ ∂ f n ( x ) ∂ x n ] \frac{df(x)}{dx} = \begin{bmatrix} \frac{\partial f_1(x)}{\partial x_1}& \frac{\partial f_2(x)}{\partial x_1}& \cdots& \frac{\partial f_n(x)}{\partial x_1}\\ \frac{\partial f_1(x)}{\partial x_2}& \frac{\partial f_2(x)}{\partial x_2}& \cdots& \frac{\partial f_n(x)}{\partial x_2}\\ \cdots& \cdots& \cdots & \cdots\\ \frac{\partial f_1(x)}{\partial x_n}& \frac{\partial f_2(x)}{\partial x_n}& \cdots&\frac{\partial f_n(x)}{\partial x_n} \end{bmatrix} dxdf(x)=x1f1(x)x2f1(x)xnf1(x)x1f2(x)x2f2(x)xnf2(x)x1fn(x)x2fn(x)xnfn(x)

3. 常见公式推导

例 1 : f ( x ) = A T X f(x) = A^{\mathrm{T}}X f(x)=ATX, 其中 A = [ a 1 a 2 ⋮ a n ] A=\begin{bmatrix}a_1\\a_2\\ \vdots\\a_n\end{bmatrix} A=a1a2an, X = [ x 1 x 2 ⋮ x n ] X=\begin{bmatrix}x_1\\x_2\\ \vdots\\x_n\end{bmatrix} X=x1x2xn, 求 f ( x ) f(x) f(x) 关于 x x x 的导数.

首先就是把 f ( x ) f(x) f(x) 求出来, 这一看都知道 f ( x ) f(x) f(x) 是个标量函数.

f ( x ) = A T X = ∑ i = 1 n a i x i f(x) = A^{\mathrm{T}}X = \sum_{i=1}^{n}a_ix_i f(x)=ATX=i=1naixi

那么就有

d f ( x ) d x = [ ∂ f ( x ) ∂ x 1 ∂ f ( x ) ∂ x 2 ⋮ ∂ f ( x ) ∂ x n ] \frac{df(x)}{dx} = \begin{bmatrix} \frac{\partial f(x)}{\partial x_1}\\ \frac{\partial f(x)}{\partial x_2}\\ \vdots \\ \frac{\partial f(x)}{\partial x_n} \end{bmatrix} dxdf(x)=x1f(x)x2f(x)xnf(x)

然后拿出 ∂ f ( x ) ∂ x 1 \frac{\partial f(x)}{\partial x_1} x1f(x) 来看有

∂ ( a 1 x 1 + a 2 x 2 + ⋯ + a n x n ) ∂ x 1 = a 1 \frac{\partial (a_1x_1 + a_2x_2 + \cdots + a_nx_n)}{\partial x_1} = a_1 x1(a1x1+a2x2++anxn)=a1

所以就有

d f ( x ) d x = [ a 1 a n ⋮ a n ] = A \frac{df(x)}{dx} = \begin{bmatrix} a_1\\ a_n\\ \vdots \\ a_n \end{bmatrix} = A dxdf(x)=a1anan=A

这里又不难得出 A T X = X T A A^{\mathrm{T}}X = X^{\mathrm{T}}A ATX=XTA, 故 f ( x ) = A T X = X T A f(x)=A^{\mathrm{T}}X=X^{\mathrm{T}}A f(x)=ATX=XTA, 所以就有

d A T X d x = d X T A d x = A \frac{dA^{\mathrm{T}}X}{dx} = \frac{dX^{\mathrm{T}}A}{dx} = A dxdATX=dxdXTA=A

例 2 : f ( x ) = X T A X f(x) = X^{\mathrm{T}}AX f(x)=XTAX, 其中 X = [ x 1 x 2 ⋮ x n ] X=\begin{bmatrix}x_1\\x_2\\ \vdots\\x_n\end{bmatrix} X=x1x2xn A = [ a 11 a 12 ⋯ a 1 n a 21 a 22 ⋯ a 2 n ⋮ ⋮ ⋯ ⋮ a n 1 a n 2 ⋯ a n n ] A=\begin{bmatrix}a_{11} & a_{12}& \cdots& a_{1n}\\a_{21} & a_{22}& \cdots& a_{2n}\\ \vdots & \vdots& \cdots& \vdots\\a_{n1} & a_{n2}& \cdots& a_{nn}\end{bmatrix} A=a11a21an1a12a22an2a1na2nann, 求 f ( x ) f(x) f(x) 关于 x x x 的导数.

首先可以看出结果是一个标量, 展开来看有

f ( 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 ] f(x) = [x_1,x_2,\cdots,x_n]\begin{bmatrix} a_{11} & a_{12}& \cdots& a_{1n}\\ a_{21} & a_{22}& \cdots& a_{2n}\\ \vdots & \vdots& \cdots& \vdots\\ a_{n1} & a_{n2}& \cdots& a_{nn} \end{bmatrix}\begin{bmatrix} x_1\\ x_2\\ \vdots\\ x_n \end{bmatrix} f(x)=[x1,x2,,xn]a11a21an1a12a22an2a1na2nannx1x2xn

用表达式表示

f ( x ) = ∑ i = 1 n ∑ j = 1 n a i j x i x j f(x) = \sum_{i=1}^{n} \sum_{j=1}^{n}a_{ij}x_ix_j f(x)=i=1nj=1naijxixj

那么就有

d f ( x ) d x = [ ∂ f ( x ) ∂ x 1 ∂ f ( x ) ∂ x 2 ⋮ ∂ f ( x ) ∂ x n ] = [ ∑ j = 1 n a 1 j x j + ∑ i = 1 n a i 1 x i ∑ j = 1 n a 2 j x j + ∑ i = 1 n a i 2 x i ⋮ ∑ j = 1 n a n j x j + ∑ i = 1 n a i n x i ] = [ ∑ j = 1 n a 1 j x j ∑ j = 1 n a 2 j x j ⋮ ∑ j = 1 n a n j x j ] + [ ∑ i = 1 n a i 1 x i ∑ i = 1 n a i 2 x i ⋮ ∑ i = 1 n a i n x i ] = [ 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 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 X + A T X \begin{aligned} \frac{df(x)}{dx} &= \begin{bmatrix} \frac{\partial f(x)}{\partial x_1}\\ \frac{\partial f(x)}{\partial x_2}\\ \vdots \\ \frac{\partial f(x)}{\partial x_n} \end{bmatrix} = \begin{bmatrix} \sum_{j=1}^{n}a_{1j}x_j + \sum_{i=1}^{n}a_{i1}x_i\\ \sum_{j=1}^{n}a_{2j}x_j + \sum_{i=1}^{n}a_{i2}x_i\\ \vdots \\ \sum_{j=1}^{n}a_{nj}x_j + \sum_{i=1}^{n}a_{in}x_i \end{bmatrix} \\ &= \begin{bmatrix} \sum_{j=1}^{n}a_{1j}x_j\\ \sum_{j=1}^{n}a_{2j}x_j\\ \vdots \\ \sum_{j=1}^{n}a_{nj}x_j \end{bmatrix} + \begin{bmatrix} \sum_{i=1}^{n}a_{i1}x_i\\ \sum_{i=1}^{n}a_{i2}x_i\\ \vdots \\ \sum_{i=1}^{n}a_{in}x_i \end{bmatrix} \\ &= \begin{bmatrix} a_{11} & a_{12} & \cdots & a_{1n}\\ a_{21} & a_{22} & \cdots & a_{2n}\\ \vdots & \vdots & \cdots & \vdots\\ a_{n1} & a_{n2} & \cdots & a_{nn} \end{bmatrix}\begin{bmatrix} x_1\\ x_2\\ \vdots \\ x_n \end{bmatrix} + \begin{bmatrix} a_{11} & a_{21} & \cdots & a_{n1}\\ a_{12} & a_{22} & \cdots & a_{n2}\\ \vdots & \vdots & \cdots & \vdots\\ a_{1n} & a_{2n} & \cdots & a_{nn} \end{bmatrix}\begin{bmatrix} x_1\\ x_2\\ \vdots \\ x_n \end{bmatrix} \\ &= AX + A^{\mathrm{T}}X \end{aligned} dxdf(x)=x1f(x)x2f(x)xnf(x)=j=1na1jxj+i=1nai1xij=1na2jxj+i=1nai2xij=1nanjxj+i=1nainxi=j=1na1jxjj=1na2jxjj=1nanjxj+i=1nai1xii=1nai2xii=1nainxi=a11a21an1a12a22an2a1na2nannx1x2xn+a11a12a1na21a22a2nan1an2annx1x2xn=AX+ATX

所以就有

d f ( x ) d x = d X T A X d x = ( A + A T ) X \frac{df(x)}{dx} = \frac{dX^{\mathrm{T}}AX}{dx} = (A+A^{\mathrm{T}})X dxdf(x)=dxdXTAX=(A+AT)X

其实复杂程度也就如此, 了解了本质就知道如何正确求导.

更多公式推导参见知乎 : 矩阵求导公式的数学推导(矩阵求导——基础篇)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值