第 1 章 数学准备

第 1 章 数学准备

要想理解神经网络的算法,我们必须具备一定程度的数学知识。具体来说包括两种数学知识:一种是偏微分,另一种是线性代数。不过大家完全不用紧张,因为不管哪一种,都不需要掌握特别难的知识,只要记住基本公式就可以了。而且,只要掌握了这两种知识,

不管遇到多么复杂的算法,都可以逐一击破、深刻理解。所以在这一章,我们为学习神经网络做个准备,先来学习偏微分和线性代数的基础知识。已经掌握了这部分数学知识的读者可以跳过这一章,直接进入第 2 章。

1.1 偏微分

1.1.1 导函数和偏导函数

一般来说,提到“微分”,大家脑海中就会浮现 y'f'(x)。这当然并没有错,不过要想更加严谨地描述,比如对函数 y=f(x) 进行微分时,我们就可以用下面这样的式子来进行计算。

f'(x)=\lim_{\Delta x\to0}{f(x+\Delta x)-f(x)\over\Delta x}\quad\quad\quad\quad\quad\quad\quad(1.1)

这里的 f'(x) 就称为 y=f(x)导函数或者微分 1。除了 f'(x) 之外,它还可以用下面这样的写法表示。

1求导函数或者微分的操作也称作“微分”。为了避免混乱,本书只使用“导函数”这个说法,提到“微分”时指的是其第二种含义,也就是求导函数的操作。

{{\rm d}y\over{\rm d}x},{{\rm d}\over{\rm d}x}f(x)\quad\quad\quad\quad\quad\quad\quad(1.2)

进行这种微分时,很重要的一点就是函数 y=f(x) 只有 x 这一个变量。

而偏微分指的是对多元函数,也就是对有两个以上变量的函数中的某一个变量进行微分 2。我们先来看一个简单的例子。有由两个变量 xy 组成的函数 z=f(x,y)=x^2+3y+1,分别对 xy 计算偏微分的式子如下所示。

2与偏微分相对应,对于只有一个变量的函数,用 {{\rm d}\over{\rm d}x}f(x) 表示的微分也称为常微分

\begin{aligned}{\partial z\over\partial x}&=2x\quad\quad\quad\quad\quad\quad\quad(1.3)\{\partial z\over\partial y}&=3\quad\quad\quad\quad\quad\quad\quad~~(1.4)\end{aligned}

从这两个式子中可以看出,偏微分使用的符号不是 d,而是 \partial。此外,偏微分还有 f_xf_y 等写法。

当然,偏微分也有定义式。对比式 (1.1),在二元函数 z=f(x,y) 的情况下,各变量的偏微分可用以下式子表示。

\begin{aligned}{\partial z\over\partial x}&=\lim_{\Delta x\to0}{f(x+\Delta x,y)-f(x,y)\over\Delta x}\quad\quad\quad\quad\quad\quad\quad(1.5)\{\partial z\over\partial y}&=\lim_{\Delta y\to0}{f(x,y+\Delta y)-f(x,y)\over\Delta y}\quad\quad\quad\quad\quad\quad\quad(1.6)\end{aligned}

把刚才举的例子套进这两个定义式里,就可以得出以下结果。

\begin{aligned}{\partial z\over\partial x}&=\lim_{\Delta x\to0}{(x+\Delta x)^2+3y+1-(x^2+3y+1)\over\Delta x}\\&=\lim_{\Delta x\to0}{2x\Delta x+\Delta x^2\over\Delta y}\\&=2x\end{aligned}\quad\quad\quad\quad\quad\quad\quad(1.7)

\begin{aligned}{\partial z\over\partial y}&=\lim_{\Delta y\to0}{x^2+3(y+\Delta y)+1-(x^2+3y+1)\over\Delta y}\\&=\lim_{\Delta y\to0}{3\Delta y\over\Delta y}\\&=3\end{aligned}\quad\quad\quad\quad\quad\quad\quad(1.8)

可以看出,它们和式 (1.3)、式 (1.4) 一致。

变量不只两个而是更多又会如何呢?我们把偏微分的定义式扩展到一般情况。对于拥有 n 个变量 x_i(i=1,\cdots,n) 的多元函数 u=f(x_1,\cdots,x_i,\cdots,x_n),变量 x_1 的偏微分如下所示。

{\partial u\over\partial x_i}=\lim_{\Delta x_i\to0}{f(x_1,\cdots,x_i+\Delta x_i,\cdots,x_n)-f(x_1,\cdots,x_i,\cdots,x_n)\over\Delta x_i}\quad\quad\quad\quad\quad\quad\quad(1.9)

与导函数相对应,它被称为偏导函数。扩展到一般情况后,式子看起来复杂了一些,但实际操作与两个变量时没有区别,都是仅对其中一个变量进行微分而已。

1.1.2 微分系数与偏微分系数

前面已经讲了微分和偏微分的定义式,不过提到微分,或许也有很多人会联想到“切线的斜率”。确实如此,例如函数 y=f(x)x=a 时的切线的斜率,就与 f'(a) 一致。那么,为什么 f'(a) 是切线的斜率呢?为了便于理解,我们结合式 (1.1) 来思考一下。将 x=a 代入式 (1.1) 后,结果如下所示 3

3也可用下面这种写法,意思是一样的。
f'(a)=\lim_{x\to a}{f(x)-f(a)\over x-a}

f'(a)=\lim_{\Delta x\to0}{f(a+\Delta x)-f(a)\over\Delta x}\quad\quad\quad\quad\quad\quad\quad(1.10)

不过,如图 1.1 所示,当 \Delta x 比 0 大到一定程度时, f'(a) 并不是切线的斜率,而只是 (a,f(a))(a+\Delta x,f(a+\Delta x)) 两点间变化的比例。

图 1.1 当 \Delta x 大于 0 时

如图 1.2 所示,让 \Delta x 无限趋近于 0,那么 (a+\Delta x,f(a+\Delta x)) 就会无限趋近于 (a,f(a)),最终 f'(a) 与切线的斜率就一致了。这样求得的 f'(a) 被称为函数 y=f(x)x=a 时的微分系数。微分系数既可以像式 (1.10) 那样通过 \Delta x\to0 的方式求得,也可以通过先求出导函数 f'(x),然后再将 a 代入 x 的方式求得。无论哪种方式,都可以看出微分系数表示的是函数 y=f(x)x 等于某个常数时的倾斜度。

图 1.2 \Delta x\to0

那么,偏微分又是怎样的情况呢?偏微分指的是对多个变量中的某一个变量进行微分。乍一看,这似乎就是要对各个变量求“切线的斜率”。其实,这种想法也不能说完全是错的。我们先来看一个简单的例子,思考一下二维曲面(抛物面)z=f(x,y)=x^2+y^2 的情况,如图 1.3 所示。

图 1.3 抛物面 z=x^2+y^2

x 进行偏微分时,我们可以把 y 固定为任意的值,那么 z 就会变成 z=g(x):=x^2+b^2,即降维成为抛物线。这样一来,微分系数就可以这样计算。

\begin{aligned}g'(a)&=\lim_{\Delta x\to0}{g(a+\Delta x)-g(a)\over\Delta x}\\&=\lim_{\Delta x\to0}{f(a+\Delta x,b)-f(a,b)\over\Delta x}\\&=2a\end{aligned}\quad\quad\quad\quad\quad\quad\quad(1.11)

因此,我们就求得了 z=f(x,y) 在点 (a,b) 处的 x偏微分系数

{\partial z\over\partial x}(a,b)=2a\quad\quad\quad\quad\quad\quad\quad(1.12)

这个偏微分系数是用 y=b 的平面切开抛物面 z 时,在 x=a 处的微分系数,所以表示的是 z=f(x,y)x 方向的倾斜度。计算 y 的偏微分也是同理。

1.1.3 偏微分的基本公式

与普通(一元函数)微分一样,偏微分也可以推导出用基本算术运算符来表示的公式。我们来试着考虑一下二元函数的情况。假定有由变量 xy 构成的函数 f(x,y)g(x,y),那么下面的公式成立。

  • 和、差

    {\partial\over\partial x}(f(x,y)\pm g(x,y))={\partial\over\partial x}f(x,y)\pm{\partial\over\partial x}g(x,y)\quad\quad\quad\quad\quad\quad\quad(1.13)

  • 乘积

    {\partial\over\partial x}(f(x,y)g(x,y))=\left({\partial\over\partial x}f(x,y)\right)g(x,y)+f(x,y)\left({\partial\over\partial x}g(x,y)\right)\quad\quad\quad\quad\quad\quad\quad(1.14)

  • {\partial\over\partial x}\left({f(x,y)\over g(x,y)}\right)={\Bigl({\partial\over\partial x}f(x,y)\Bigr)g(x,y)-f(x,y)\Bigl({\partial\over\partial x}g(x,y)\Bigr)\over(g(x,y))^2}\quad\quad\quad\quad\quad\quad\quad(1.15)

  • 常数倍c 是常数)

    {\partial\over\partial x}cf(x,y)=c{\partial\over\partial x}f(x,y)\quad\quad\quad\quad\quad\quad\quad(1.16)

这里就不推导所有的公式了,只试着推导式 (1.13),即和、差的公式吧。遵循式 (1.5),也就是偏微分的定义式就可以简单地推导出来。

和、差的公式的推导过程

\begin{aligned}{\partial\over\partial x}(f(x,y)\pm g(x,y))&=\lim_{\Delta x\to0}{(f(x+\Delta x,y)\pm g(x+\Delta x,y))-(f(x,y)\pm g(x,y))\over\Delta x}\\&=\lim_{\Delta x\to0}{(f(x+\Delta x,y)-f(x,y))\pm(g(x+\Delta x)-g(x,y))\over\Delta x}\\&=\lim_{\Delta x\to0}{(f(x+\Delta x,y)-f(x,y))\over\Delta x}\pm\lim_{\Delta x\to0}{g(x+\Delta x,y))-g(x,y)\over\Delta x}\\&={\partial\over\partial x}f(x,y)\pm{\partial\over\partial x}g(x,y)\end{aligned}\quad\quad\quad\quad\quad\quad\quad(1.17)

其余的公式也可以用相同方法推导出来。

1.1.4 复合函数的偏微分

除了上一小节介绍的公式以外,大家还需要掌握的就是复合函数的(偏)微分了。有函数 y=f(u)u=g(x),那么二者组合而成的函数 y=f(g(x)) 就是复合函数。此时,它的导函数如下所示。

{{\rm d}y\over{\rm d}x}={{\rm d}y\over{\rm d}u}\cdot{{\rm d}u\over{\rm d}x}=f'(g(x))\cdot g'(x)\quad\quad\quad\quad\quad\quad\quad(1.18)

具体的推导过程后面再讲,这里先看一个简单的例子。下面这个函数该如何进行微分呢?

y=\log{1\over x}\quad\quad\quad\quad\quad\quad\quad(1.19)

可以把它分解为以下两个函数。

\begin{aligned}y&=\log u\quad\quad\quad\quad\quad\quad\quad(1.20)\\u&={1\over x}\quad\quad\quad\quad\quad\quad\quad\quad~(1.21)\end{aligned}

根据这两个函数的导函数,

\begin{aligned}{{\rm d}y\over{\rm d}u}&={1\over u}\quad\quad\quad\quad\quad\quad\quad\quad(1.22)\{{\rm d}u\over{\rm d}x}&=-{1\over x^2}\quad\quad\quad\quad\quad\quad\quad(1.23)\end{aligned}

可以得到下式。

\begin{aligned}{{\rm d}y\over{\rm d}x}&={1\over u}\cdot\left(-{1\over x^2}\right)\\&=-{\1\over x}\end{aligned}\quad\quad\quad\quad\quad\quad\quad(1.24)

这种根据各个函数导函数的乘积,来计算复合函数导函数的方法称为链式法则(chain rule)。

链式法则在多元函数中也成立。假设有多元函数 zn_i(i=1,\cdots,n)

\begin{aligned}z&=f(u_1,\cdots,u_i,\cdots,u_n)\quad\quad\quad\quad\quad\quad\quad~(1.25)\\u_i&=g_i(x_1,\cdots,x_k,\cdots,x_m)\quad\quad\quad\quad\quad\quad\quad(1.26)\end{aligned}

这时,复合函数的偏微分如下所示。

\begin{aligned}{\partial z\over\partial x_k}&={\partial f\over\partial u_1}{\partial u_1\over\partial x_k}+\cdots+{\partial f\over\partial u_n}{\partial u_n\over\partial x_k}\\&=\sum^n_{i=1}{\partial f\over\partial u_i}{\partial u_i\over\partial x_k}\end{aligned}\quad\quad\quad\quad\quad\quad\quad(1.27)

我们先来考虑 z=f(g(x,y)) 的情况。这就是式 (1.27) 在 n=1 时的情况,所以可以得到下式。

\begin{aligned}{{\partial z}\over{\partial x}}&={{\partial z}\over{\partial g}}{{\partial g}\over{\partial x}}\quad\quad\quad\quad\quad\quad\quad(1.28)\{{\partial z}\over{\partial y}}&={{\partial z}\over{\partial g}}{{\partial g}\over{\partial y}}\quad\quad\quad\quad\quad\quad\quad(1.29)\end{aligned}

那么 z=f(g(x,y),h(x,y)) 的情况又当如何呢?相信大家都能明白,这次 n=2,所以可以得到下式。

\begin{aligned}{{\partial z}\over{\partial x}}&={{\partial z}\over{\partial h}}{{\partial h}\over{\partial x}}+{{\partial z}\over{\partial h}}{{\partial h}\over{\partial x}}\quad\quad\quad\quad\quad\quad\quad(1.30)\{{\partial z}\over{\partial y}}&={{\partial z}\over{\partial g}}{{\partial g}\over{\partial y}}+{{\partial z}\over{\partial h}}{{\partial h}\over{\partial y}}\quad\quad\quad\quad\quad\quad\quad(1.31)\end{aligned}

上面这些就是我们需要记住的公式。链式法则在神经网络的理论中会频繁出现,所以大家一定要把它牢记在脑海里。另外,式 (1.18) 这样的一元复合函数导函数的推导过程请见式 (1.33)。在求式 (1.30) 和式 (1.31) 中二元函数的偏导函数时,需要用到全微分的知识,因此下一节会将全微分作为拓展内容进行介绍,有兴趣的读者可以读一读。

链式法则的推导(一元函数的情况)

y=f(g(x))u=g(x) 时,

\begin{aligned}{{\rm d}y\over{\rm d}x}&=\lim_{\Delta x\to0}{f(g(x+\Delta x))-f(g(x))\over\Delta x}\\&=\lim_{\Delta x\to0}\left({f(g(x+\Delta x))-f(g(x))\over g(x+\Delta x)-g(x)}\cdot{g(x+\Delta x)-g(x)\over\Delta x}\right)\end{aligned}\quad\quad\quad\quad\quad\quad\quad(1.32)

这里令 \Delta u:=g(x+\Delta x)-g(x),那么当 \Delta x\to0\Delta u\to0,式 (1.32) 最终会变为下式。

\begin{aligned}{{\rm d}y\over{\rm d}x}&=\lim_{\Delta x\to0}\left({f(u+\Delta u)-f(u)\over\Delta u}\cdot{g(x+\Delta x)-g(x)\over\Delta x}\right)\\&=\lim_{\Delta u\to0}{f(u+\Delta u)-f(u)\over\Delta u}\cdot\lim_{\Delta x\to0}{g(x+\Delta x)-g(x)\over\Delta x}\\&={{\rm d}y\over{\rm du}}\cdot{{\rm d}u\over{\rm d}x}\end{aligned}\quad\quad\quad\quad\quad\quad\quad(1.33)

这样就推导出了链式法则。

1.1.5 拓展 全微分

我们来思考一下二元函数 z=f(x,y) 的情况。假定 z=f(x,y) 在点 (a,b)可全微分,那么我们可以用下面的式子来进行描述。

f(x,y)=f(a,b)+(x-a)A+(y-b)B+\sqrt{(x-a)^2+(y-b)^2}\alpha(x,y)\quad\quad\quad\quad\quad\quad\quad(1.34)

上式中的 AB 为常数,函数 \alpha(x,y) 在点 (a,b) 处连续且 \alpha(a,b)=0。根据该定义可以看出常数 AB 分别等于 f_x(a,b)f_y(a,b)

假设 (x,y) 从点 (a,b)(微小地)移动到点 (a+\Delta x,b+\Delta y) 时函数值的变化量为 \Delta z,因为

\Delta z=f(a+\Delta x,b+\Delta y)-f(a,b)\quad\quad\quad\quad\quad\quad\quad(1.35)

所以根据式 (1.34),可以推导出 \Delta z 约等于(即第 1 次近似

{{\partial z}\over{\partial x}}\Delta x+{{\partial z}\over{\partial y}}\Delta y\quad\quad\quad\quad\quad\quad\quad(1.36)

那么,在 \Delta x\Delta y 都非常小的情况下,就可以像下面这样描述。

{\rm d}z={{\partial z}\over{\partial x}}{\rm d}x+{{\partial z}\over{\partial y}}{\rm d}y\quad\quad\quad\quad\quad\quad\quad(1.37)

这里的 {\rm d}z 就称为 z=f(x,y)全微分

另外,(常)微分的充分必要条件实际上也可以写成和式 (1.34) 相同的形式。我们可以用下式来表示函数 y=f(x)x=a 处可微。

f(x)=f(a)+(x-a)A+(x-a)\alpha(x)\quad\quad\quad\quad\quad\quad\quad(1.38)

其中 A 为常数、函数 \alpha(x)x=a 处连续且 \alpha(a)=0。这时常数 Af'(a) 相等。

综上,就可以得出由 x=g(t)y=h(t) 组成的复合函数 z=f(x,y) 的微分。

{{\rm d}z\over{\rm d}t}={{\partial z}\over{\partial x}}{{\rm d}x\over{\rm d}t}+{{\partial z}\over{\partial y}}{{\rm d}y\over{\rm d}t}\quad\quad\quad\quad\quad\quad\quad(1.39)

接下来,我们来试着推导一下这条链式法则。

链式法则的推导(二元函数的情况)

t=c 时,令 x=g(c)=ay=h(c)=b,根据式 (1.38) 可以得出下列式子。

\begin{aligned}g(t)-a&=g'(c)(t-c)+(t-c)\alpha(t)\quad\quad\quad\quad\quad\quad\quad(1.40)\\h(t)-b&=h'(c)(t-c)+(t-c)\beta(t)\quad\quad\quad\quad\quad\quad\quad(1.41)\end{aligned}

但需要\alpha(t)、\beta(t) 均在 t=c 处连续,且 \alpha(c)=0\beta(c)=0

此外,根据式 (1.34),我们也可以写成下面这种形式。

f(x,y)=f(a,b)+{{\partial f}\over{\partial x}}(a,b)(x-a)+{{\partial f}\over{\partial y}}(a,b)(y-b)+\sqrt{(x-a)^2+(y-b)^2}\gamma(x,y)\quad\quad\quad\quad\quad\quad\quad(1.42)

其中,\gamma(x,y) 在点 (a,b) 处连续且 \gamma(a,b)=0。把式 (1.40)、式 (1.41) 代入式 (1.42),则下式成立。

\begin{aligned}f(g(t),h(t))&=f(a,b)+(t-c)\left({{\partial f}\over{\partial x}}(a,b)g'(c)+{{\partial f}\over{\partial y}}(a,b)h'(c)\right)\\&~~~+(t-c)\left({{\partial f}\over{\partial x}}(a-b)\alpha(t)+{{\partial f}\over{\partial y}}(a,b)\beta(t)+\gamma(g(t),h(t))\right)\end{aligned}\quad\quad\quad\quad\quad\quad\quad(1.43)

将其和式 (1.38) 进行比较后,可知

{{\rm d}z\over{\rm d}t}(c)={{\partial f}\over{\partial x}}(a,b)g'(c)+{{\partial f}\over{\partial y}}(a,b)h'(c)\quad\quad\quad\quad\quad\quad\quad(1.44)

这说明式 (1.39) 成立。

只要将 x 或者 y 其中一方固定,式 (1.30) 和式 (1.31) 中的链式法则就也可以通过上面的步骤推导出来。

1.2 线性代数

线性代数是一门处理向量和矩阵的学科。不过在神经网络理论中,向量和矩阵只是用来简洁地描述式子和处理式子的变形,并不会用到向量空间特征向量等领域的知识,因此本书的讲解也只会覆盖我们需要掌握的内容。

1.2.1 向量

1.2.1.1 向量的基础知识

首先从向量的基础知识开始讲解。若有实数 a_1,\cdots,a_n 4,那么向量可以这样表示。

4向量本身也可以用于处理复数,但神经网络不处理复数,所以这里把范围限定为实数。所有元素都是实数的向量是实向量,包含复数的向量是复向量。

\boldsymbol{a}=\begin{pmatrix}a_1\\a_2\\\vdots\\a_n\end{pmatrix}\quad\quad\quad\quad\quad\quad\quad(1.45)

或者也可以像下面这样表示。

{\vec a}=(a_1~a_2~\cdots~a_n)\quad\quad\quad\quad\quad\quad\quad(1.46)

不过,严格来说,\boldsymbol{a}n列向量{\vec a}n行向量。在没有特别说明的情况下,本书提到向量时指的都是前者的列向量,表示为 \boldsymbol{a}\in{\rm R}^{\boldsymbol{n}} (R 是全体实数)。与向量相对,像 a_i\in{\rm R} 这样的数则称为标量。此外,向量 \boldsymbol{a} 的第 i 个数 a_i 称为 \boldsymbol{a}\boldsymbol{i} 个元素。所有元素都是 0 的向量称为零向量,用 0 表示。

1.2.1.2 向量的和与标量倍数

向量之间该如何运算呢?假定有以下两个向量

\boldsymbol{a}=\begin{pmatrix}a_1\\a_2\\\vdots\\a_n\end{pmatrix},~\boldsymbol{b}=\begin{pmatrix}b_1\\b_2\\\vdots\\b_n\end{pmatrix}

此时,向量的和与标量倍数的定义如下。

  • \boldsymbol{a}+\boldsymbol{b}=\begin{pmatrix}a_1+b_1\\a_2+b_2\\\vdots\\a_n+b_n\end{pmatrix}\quad\quad\quad\quad\quad\quad\quad(1.47)

  • 标量倍数

    c\in{\rm R},则下式成立。

    c\boldsymbol{a}=\begin{pmatrix}ca_1\\ca_2\\\vdots\\ca_n\end{pmatrix}\quad\quad\quad\quad\quad\quad\quad(1.48)

另外,(-1)\boldsymbol{a} 记为 -\boldsymbol{a}\boldsymbol{a}+(-)\boldsymbol{b} 记为 \boldsymbol{a}-\boldsymbol{b}。以上是较为严谨的定义,实际计算时我们可以把这些理解为“向量之间的加法和减法”。

根据以上定义,下述等式成立。

  1. (\boldsymbol{a}+\boldsymbol{b})+\boldsymbol{c}=\boldsymbol{a}+(\boldsymbol{b}+\boldsymbol{c}) (结合律)
  2. \boldsymbol{a}+\boldsymbol{b}=\boldsymbol{b}+\boldsymbol{a} (交换律)
  3. \boldsymbol{a}+\boldsymbol{0}=\boldsymbol{0}+\boldsymbol{a}=\boldsymbol{a}
  4. \boldsymbol{a}+(-\boldsymbol{a})=(-\boldsymbol{a})+\boldsymbol{a}=\boldsymbol{0}
  5. c(\boldsymbol{a}+\boldsymbol{b})=c\boldsymbol{a}+c\boldsymbol{b}
  6. (c+d)\boldsymbol{a}=c\boldsymbol{a}+d\boldsymbol{a}
  7. (cd)\boldsymbol{a}=c(d\boldsymbol{a})
  8. 1\boldsymbol{a}=\boldsymbol{a}

其中,\boldsymbol{a}\boldsymbol{b}\boldsymbol{c}\in{\rm R}^{\boldsymbol{n}}\boldsymbol{c}\boldsymbol{d}\in{\rm R}

1.2.1.3 向量的内积

存在两个向量 \boldsymbol{a}\in{\rm R}^{\boldsymbol{n}}\boldsymbol{b}\in{\rm R}^{\boldsymbol{n}},其中每个元素的乘积之和就称为向量的内积,用 \boldsymbol{a}\cdot\boldsymbol{b} 来表示,式子如下所示。

\boldsymbol{a}\cdot\boldsymbol{b}=\sum^n_{i=1}a_ib_i\quad\quad\quad\quad\quad\quad\quad(1.49)

需要注意内积不是向量,而是标量。比如在 n=2,也就是

\boldsymbol{a}=\begin{pmatrix}a_1\\a_2\end{pmatrix},~\boldsymbol{b}=\begin{pmatrix}b_1\\b_2\end{pmatrix}

时,内积 \boldsymbol{a}\cdot\boldsymbol{b}=a_1b_1+a_2b_2

此外,相对于内积,只是把向量 \boldsymbol{a}\boldsymbol{b} 的各个元素相乘得到的是元素积,可以写作 \boldsymbol{a}\odot\boldsymbol{b} 等形式,即

\boldsymbol{a}\odot\boldsymbol{b}=\begin{pmatrix}a_1b_1\\a_2b_2\\\vdots\\a_nb_n\end{pmatrix}\quad\quad\quad\quad\quad\quad\quad(1.50)

1.2.2 矩阵

1.2.2.1 矩阵的基础知识

我们首先看一下矩阵的相关术语。mn 表示自然数时,矩阵指的就是下面这样由 m\times na_{ij}\in{\rm R} 的数排列成的长方形阵列 5

5与向量相同,矩阵也可以用于处理复数,但在神经网络中只考虑实数即可,所以这里把范围限定于实数。\boldsymbol{a_{ij}} 都为实数的矩阵是实矩阵、包含复数的矩阵是复矩阵

\boldsymbol{A}=\begin{pmatrix}a_{11}&a_{12}&\cdots&a_{1n}\\a_{21}&a_{22}&\cdots&a_{2n}\\\vdots&\vdots&\ddots&\cdots\\a_{m1}&a_{m2}&\cdots&a_{mn}\end{pmatrix}\quad\quad\quad\quad\quad\quad\quad(1.51)

另外它还可以简写为 \boldsymbol{A}=(a_{ij}) 的形式。这里的 a_{ij} 称为 \boldsymbol{A}(\boldsymbol{i},\boldsymbol{j}) 元素。元素全部为 0 的矩阵是零矩阵,用 \boldsymbol{O} 来表示。

m=n 时,n\times n 矩阵 \boldsymbol{A} 称为正方矩阵\boldsymbol{n} 阶矩阵。这时 a_{ii}(i=1,\cdots,n) 称为 \boldsymbol{A}对角元素。另外,对角元素以外的元素都为 0 的矩阵叫作对角矩阵。更特别的是,所有对角元素全部为 1 的 n\times n 矩阵称为 n单位矩阵。单位矩阵用 \boldsymbol{E_n}\boldsymbol{I_n} 来表示。

我们也可以把矩阵看作向量的排列。对于矩阵 \boldsymbol{A},下面是它的第 i 行向量

{\vec a}_i=(a_{i1}a_{i2}\cdots a_{in})\quad(i=1,\cdots,m)\quad\quad\quad\quad\quad\quad\quad(1.52)

下面是它的第 j 列向量

\boldsymbol{a}_j=\begin{pmatrix}a_{1j}\\a_{2j}\\\vdots\\a_{mj}\quad(j=1,\vdots,n)\end{pmatrix}\quad\quad\quad\quad\quad\quad\quad(1.53)

1.2.2.2 矩阵的和与标量倍数

接下来看一下矩阵的运算。假定矩阵 \boldsymbol{A}=(a_{ij})\boldsymbol{b}=(b_{ij}) 是同样的 m\times n 矩阵,那么矩阵的和与标量倍数的定义如下。

  • \boldsymbol{A}+\boldsymbol{B}=(a_{ij}+b_{ij})\quad\quad\quad\quad\quad\quad\quad(1.54)

  • 标量倍数

    c\in{\rm R},则下式成立。

    c\boldsymbol{A}=(ca_{ij})\quad\quad\quad\quad\quad\quad\quad(1.55)

另外,相对于矩阵 \boldsymbol{A},矩阵 -\boldsymbol{A} 记为 -\boldsymbol{A}=(-a_{ij})\boldsymbol{A}+(-\boldsymbol{B}) 记为 \boldsymbol{A}-\boldsymbol{B}。也就是说,与向量的情况一样,我们可以把这些运算理解为“矩阵的加法和减法”。

根据以上定义,下述等式成立。

  1. \boldsymbol{A}+\boldsymbol{B}=\boldsymbol{B}+\boldsymbol{A} (交换律)
  2. (\boldsymbol{A}+\boldsymbol{B})+\boldsymbol{C}=\boldsymbol{A}+(\boldsymbol{B}+\boldsymbol{C}) (结合律)
  3. \boldsymbol{A}+\boldsymbol{O}=\boldsymbol{O}+\boldsymbol{A}=\boldsymbol{A}
  4. \boldsymbol{A}+(-\boldsymbol{A})=(-\boldsymbol{A})+\boldsymbol{A}=\boldsymbol{O}
  5. c(\boldsymbol{A}+\boldsymbol{B})=c\boldsymbol{A}+c\boldsymbol{B}
  6. (c+d)\boldsymbol{A}=c\boldsymbol{A}+d\boldsymbol{A}
  7. c(d\boldsymbol{A})=(cd)\boldsymbol{A}
  8. 1\boldsymbol{A}=\boldsymbol{A}

其中,\boldsymbol{A}\boldsymbol{B}\boldsymbol{C}\in{\rm R}^{\boldsymbol{m}\times\boldsymbol{n}}cd\in{\rm R}

1.2.2.3 矩阵的乘积

不同于矩阵的和或标量倍数,矩阵的乘积需要我们稍加留意。首先来看一下矩阵乘积的定义。若有 m\times n 矩阵 \boldsymbol{A}=(a_{ij})n\times l 矩阵 \boldsymbol{B}=(b_{jk}),那么其乘积 \boldsymbol{AB} 如下定义。

\boldsymbol{AB}=(c_{ik})\quad\quad\quad\quad\quad\quad\quad(1.56)

其中

\begin{aligned}c_{ik}&=a_{i1}b_{1k}+a_{i2}b_{2k}+\cdots+a_{in}b_{nk}\\&=\sum^n_{j=1}a_{ij}b_{jk}(i=1,\cdots,m,k=1,\cdots,l)\end{aligned}\quad\quad\quad\quad\quad\quad\quad(1.57)

如果用矩阵的各个元素来表示,可以写成下面这样(相当于式 (1.57) 的部分用粗体显示)。

\begin{pmatrix}a_{11}&a_{12}&\cdots&a_{1n}\\\vdots&\vdots&&\vdots\\\boldsymbol{a_{i1}}&\boldsymbol{a_{i2}}&\boldsymbol{\cdots}&\boldsymbol{a_{in}}\\\vdots&\vdots&&\vdots\\a_{m1}&a_{m2}&\cdots&a_{mn}\end{pmatrix}\begin{pmatrix}b_{11}&\cdots&\boldsymbol{b_{1k}}&\cdots&b_{1l}\\b_{21}&\cdots&\boldsymbol{b_{2k}}&\cdots&b_{2l}\\\vdots&&\boldsymbol{\vdots}&&\vdots\\b_{n1}&\cdots&\boldsymbol{b_{nk}}&\cdots&b_{nl}\end{pmatrix}=\begin{pmatrix}c_{11}&\cdots&c_{1k}&\cdots&c_{1l}\\\vdots&&\vdots&&\vdots\\c_{i1}&\cdots&\boldsymbol{c_{ik}}&\cdots&c_{il}\\\vdots&&\vdots&&\vdots\\c_{m1}&\cdots&c_{mk}&\cdots&c_{ml}\end{pmatrix}\quad\quad\quad\quad\quad\quad\quad(1.58)

请注意 \boldsymbol{AB}m\times l 矩阵。乍一看矩阵的乘积很复杂,但是如果把矩阵 \boldsymbol{A}\boldsymbol{B} 像下面这样看成 n 阶行向量 {\vec a}_i(i=1,\cdots,m)n 阶列向量 \boldsymbol{b}_k(k=1,\cdots,l) 的排列

\boldsymbol{A}=\begin{pmatrix}\vec a_1\\\vdots\\\vec a_i\\\vdots\\\vec a_m\end{pmatrix},~\boldsymbol{B}=(\boldsymbol{b}_1\cdots \boldsymbol{b}_k\cdots \boldsymbol{b}_l)\quad\quad\quad\quad\quad\quad\quad(1.59)

那么 \boldsymbol{AB} 就可以表示为如下形式。

\boldsymbol{AB}=(\vec a_i\cdot\boldsymbol{b}_k)(i=1,\cdots,m,k=1,\cdots,l)\quad\quad\quad\quad\quad\quad\quad(1.60)

由此就可以看出,\boldsymbol{AB} 是由各行向量和各列向量的内积所组成的矩阵 6

6与内积相对,通过计算(大小相同的)矩阵的每个元素的乘积而得到的矩阵乘积称为哈达玛积(Hadamard product)。如果将向量看作是行或者列的大小为 1 的矩阵,那么也可以把向量的元素积视为哈达玛积。

因此,只有在 n=k 的情况下才能求得 m\times n 矩阵 \boldsymbol{A}k\times l 矩阵 \boldsymbol{B} 的乘积 \boldsymbol{AB},而这时 \boldsymbol{AB} 是一个 m\times l 矩阵。这就意味着即便 \boldsymbol{AB} 可以计算,\boldsymbol{BA} 也不一定就能够计算,而且即使都可以计算,\boldsymbol{AB}=\boldsymbol{BA} 也不一定成立。甚至,\boldsymbol{AB}\neq\boldsymbol{BA} 的情况更多。

我们来看一个例子,假设矩阵 \boldsymbol{A} 和矩阵 \boldsymbol{B} 如式 (1.61) 所示。

\boldsymbol{A}=\begin{pmatrix}1&2&3\\4&5&6\end{pmatrix},\boldsymbol{B}=\begin{pmatrix}1\\2\\3\end{pmatrix}\quad\quad\quad\quad\quad\quad\quad(1.61)

\boldsymbol{A} 是 2 × 3 矩阵,\boldsymbol{B} 是 3 × 1 矩阵,因此乘积 \boldsymbol{AB} 是如下所示的 2 × 1 矩阵。

\boldsymbol{AB}=\begin{pmatrix}14\\32\end{pmatrix}\quad\quad\quad\quad\quad\quad\quad(1.62)

而这时 \boldsymbol{BA} 是无法计算的。另外,对于下面这样的矩阵 \boldsymbol{C} 和矩阵 \boldsymbol{D}

\boldsymbol{C}=\begin{pmatrix}1&2\\3&4\end{pmatrix},~\boldsymbol{D}=\begin{pmatrix}4&3\\2&1\end{pmatrix}\quad\quad\quad\quad\quad\quad\quad(1.63)

进行计算之后发现 \boldsymbol{CD}\neq\boldsymbol{DC}

\boldsymbol{CD}=\begin{pmatrix}8&5\\20&13\end{pmatrix},~\boldsymbol{DC}=\begin{pmatrix}13&20\\5&8\end{pmatrix}\quad\quad\quad\quad\quad\quad\quad(1.64)

不过,矩阵乘积的结合律是成立的。也就是说,对于 m\times n 矩阵 \boldsymbol{A}n\times l 矩阵 \boldsymbol{B}l\times r 矩阵 \boldsymbol{C},下述式子成立。

(\boldsymbol{AB})\boldsymbol{C}=\boldsymbol{A}(\boldsymbol{BC})\quad\quad\quad\quad\quad\quad\quad(1.65)

通过比较各个矩阵的元素就能验证这个结论。

另外,分配律也是成立的。对于 m\times n 矩阵 \boldsymbol{A}n\times l 矩阵 \boldsymbol{B}\boldsymbol{C}l\times r 矩阵 \boldsymbol{D},下述式子成立。

\begin{aligned}\boldsymbol{A}(\boldsymbol{B}+\boldsymbol{C})&=\boldsymbol{AB}+\boldsymbol{AC}\quad\quad\quad\quad\quad\quad\quad(1.66)\\(\boldsymbol{B}+\boldsymbol{C})\boldsymbol{D}&=\boldsymbol{BD}+\boldsymbol{CD}\quad\quad\quad\quad\quad\quad\quad(1.67)\end{aligned}

1.2.2.4 正则矩阵与逆矩阵

前面已经讲过,一般来说,对于 n 阶正方矩阵 \boldsymbol{A}\boldsymbol{B}\boldsymbol{AB}\neq\boldsymbol{BA}。但是我们也可以立刻判断出,对于 n 阶单位矩阵 \boldsymbol{I}\boldsymbol{AI}=\boldsymbol{IA}=\boldsymbol{A} 成立。也就是说,\boldsymbol{I} 起到了与数字 1 相同的作用。

接下来请思考一下:等于 \boldsymbol{{I\over A}} 的矩阵 \boldsymbol{B},也就是满足 \boldsymbol{AB}=\boldsymbol{BA}=\boldsymbol{I} 的矩阵 \boldsymbol{B} 是否存在?例如,矩阵 \boldsymbol{A} 和矩阵 \boldsymbol{B} 如下所示。

\boldsymbol{A}=\begin{pmatrix}3&-2\\-2&1\end{pmatrix},~\boldsymbol{B}=\begin{pmatrix}-1&-2\\-2&-3\end{pmatrix}\quad\quad\quad\quad\quad\quad\quad(1.68)

此时,我们可以得出

\boldsymbol{AB}=\boldsymbol{BA}=\begin{pmatrix}1&0\\0&1\end{pmatrix}=\boldsymbol{I}\quad\quad\quad\quad\quad\quad\quad(1.69)

像这样,如果存在矩阵 \boldsymbol{B} 使得 \boldsymbol{AB}=\boldsymbol{BA}=\boldsymbol{I} 成立,那么此时矩阵 \boldsymbol{A} 就称为正则矩阵,矩阵 \boldsymbol{B} 则称为 \boldsymbol{A}逆矩阵,用 \boldsymbol{A}^{-1} 来表示。如果有矩阵 \boldsymbol{B}\boldsymbol{B}' 分别满足 \boldsymbol{BA}=\boldsymbol{I}\boldsymbol{AB}'=\boldsymbol{I},那么可以推导出下式。

\boldsymbol{B}=\boldsymbol{BI}=\boldsymbol{B}(\boldsymbol{AB}')=(\boldsymbol{BA})\boldsymbol{B}'=\boldsymbol{IB}'=\boldsymbol{B}'\quad\quad\quad\quad\quad\quad\quad(1.70)

因此,\boldsymbol{A} 的逆矩阵 \boldsymbol{A}^{-1} 是唯一的。

接下来看一下矩阵乘积的逆矩阵吧。对于 n 阶正方矩阵 \boldsymbol{A}\boldsymbol{B}(\boldsymbol{AB})^{-1} 等于什么呢?如果 \boldsymbol{A}\boldsymbol{B} 都是正则矩阵,那么下式成立。

(\boldsymbol{AB})(\boldsymbol{B}^{-1}\boldsymbol{A}^{-1})=\boldsymbol{A}(\boldsymbol{BB}^{-1})\boldsymbol{A}^{-1}=\boldsymbol{AA}^{-1}=\boldsymbol{I}\quad\quad\quad\quad\quad\quad\quad(1.71)

所以乘积 \boldsymbol{AB} 也是正则式,由此可以推导出 (\boldsymbol{AB})^{-1}=\boldsymbol{B}^{-1}\boldsymbol{A}^{-1} 。另外,根据 \boldsymbol{AA}^{-1}=\boldsymbol{A}^{-1}\boldsymbol{A}=\boldsymbol{I} 可以得出 \boldsymbol{A}^{-1} 是正则矩阵,其逆矩阵 (\boldsymbol{A}^{-1})^{-1}=\boldsymbol{A}

1.2.2.5 转置矩阵

关于矩阵还有一个重要的概念,那就是转置矩阵。这是通过交换 m\times n 矩阵 \boldsymbol{A}=(a_{ij}) 的行和列所得到的 n\times m 矩阵,记作 \boldsymbol{A}^{{\rm T}}^{{\rm t}}\boldsymbol{A}。我们通过式子来看一下。

\boldsymbol{A}=\begin{pmatrix}a_{11}&a_{12}&\cdots&a_{1n}\\a_{21}&a_{22}&\cdots&a_{2n}\\\vdots&\vdots&\ddots&\vdots\\a_{m1}&a_{m2}&\cdots&a_{mn}\end{pmatrix}\quad\quad\quad\quad\quad\quad\quad(1.72)

对于矩阵 \boldsymbol{A},其转置矩阵可表示为下式。

\boldsymbol{A}^{{\rm T}}=\begin{pmatrix}a_{11}&a_{21}&\cdots&a_{m1}\\a_{12}&a_{22}&\cdots&a_{m2}\\\vdots&\vdots&\ddots&\vdots\\a_{1n}&a_{2n}&\cdots&a_{mn}\end{pmatrix}\quad\quad\quad\quad\quad\quad\quad(1.73)

假设有如下的矩阵 \boldsymbol{A}

\boldsymbol{A}=\begin{pmatrix}1&2&3\\4&5&6\end{pmatrix}\quad\quad\quad\quad\quad\quad\quad(1.74)

那么,其转置矩阵如下所示。

\boldsymbol{A}^{{\rm T}}=\begin{pmatrix}1&4\\2&5\\3&6\end{pmatrix}\quad\quad\quad\quad\quad\quad\quad(1.75)

另外,\boldsymbol{A}^{{\rm T}}=\boldsymbol{A} 的矩阵称为对称矩阵

根据转置矩阵的定义,以下描述成立。

  1. \boldsymbol{A}\boldsymbol{B} 均为 m\times n 矩阵时,(\boldsymbol{A}+\boldsymbol{B})^{{\rm T}}=\boldsymbol{A}^{{\rm T}}+\boldsymbol{B}^{{\rm T}}
  2. (c\boldsymbol{A})^{{\rm T}}=c\boldsymbol{A}^{{\rm T}}
  3. (\boldsymbol{A}^{{\rm T}})^{{\rm T}}=\boldsymbol{A}
  4. n 阶正方矩阵 \boldsymbol{A} 为正则矩阵,则有 (\boldsymbol{A}^{{\rm T}})^{-1}=(\boldsymbol{A}^{-1})^{{\rm T}}
  5. \boldsymbol{A}m\times n 矩阵、\boldsymbol{B}n\times l 矩阵时,(\boldsymbol{AB})^{{\rm T}}=\boldsymbol{B}^{{\rm T}}\boldsymbol{A}^{{\rm T}}

1.3 小结

本章作为学习深度学习、神经网络理论之前的准备,介绍了偏微分和线性代数的基本定义和公式。二者都是在理解模型时不可欠缺的知识。

在本章的前半部分,我们了解了偏微分是只对多元函数的某一个函数进行的微分,学习了偏导函数和偏微分系数的定义,以及它们四则运算的基本公式,还有在学习偏微分时不得不提的复合函数的微分——链式法则。我们分别推导了一元函数和多元函数情况下的链式法则的公式。

在线性代数部分,我们学习了向量和矩阵的定义及公式,还有矩阵的和与标量倍数的公式、向量内积和矩阵乘积的表达式。矩阵的乘积由各矩阵的行向量和列向量的内积组成。另外,我们还了解了线性代数中不可或缺的逆矩阵和转置矩阵的知识。

关于这里涉及的数学理论,本书既有加以省略的部分,也有严谨对待的部分。想要了解更多细节、更扎实地学习数学理论的读者,请阅读参考文献 [1][2][3] 等资料。

本章做的是理论基础方面的准备,接下来的第 2 章将要做的是代码实现方面的准备。我们将会了解 Python 环境的搭建和如何使用库进行计算等内容。

参考文献

[1] 杉浦光夫 . 解析入门 I [M]. 东京:东京大学出版会, 1980.(尚无中文版)

[2] 杉浦光夫 . 解析入门 II [M]. 东京:东京大学出版会, 1985.(尚无中文版)

[3] 齐藤正彦 . 线性代数入门 [M]. 东京:东京大学出版会, 1966.(尚无中文版)

目录