做酒业网站的要求,网站建设实训计划书,邢台提供网站建设公司报价,专做国外采购的网站【作者主页】Francek Chen 【专栏介绍】 ⌈ ⌈ ⌈Python机器学习 ⌋ ⌋ ⌋ 机器学习是一门人工智能的分支学科#xff0c;通过算法和模型让计算机从数据中学习#xff0c;进行模型训练和优化#xff0c;做出预测、分类和决策支持。Python成为机器学习的首选语言#xff0c;… 【作者主页】Francek Chen 【专栏介绍】 ⌈ ⌈ ⌈Python机器学习 ⌋ ⌋ ⌋ 机器学习是一门人工智能的分支学科通过算法和模型让计算机从数据中学习进行模型训练和优化做出预测、分类和决策支持。Python成为机器学习的首选语言依赖于强大的开源库如Scikit-learn、TensorFlow和PyTorch。本专栏介绍机器学习的相关算法以及基于Python的算法实现。 文章目录 一、向量二、矩阵一矩阵的基本概念二矩阵运算三矩阵与线性方程组四矩阵范数 三、梯度四、凸函数 作为一门以数据及其模型为研究对象的学科优化模型、分析模型性能等都需要数学手段的帮助。和其他学科一样数学可以帮我们更清晰地描述和理解机器学习算法也可以从理论上证明算法的有效性是机器学习中必不可少的一环。本文将会介绍机器学习中常用的数学工具为后面的学习打下基础。
一、向量 向量vector在数学中指具有大小和方向的量。与向量相对只具有大小、不具有方向的量则称为标量scalar。简单来说我们可以将向量理解为由 n n n个数构成的 n n n元组其中 n n n称为向量的维数。向量通常有两种写法如下所示的竖排写法称为列向量 x ( x 1 x 2 ⋮ x n ) \boldsymbol{x} \begin{pmatrix} x_1 \\ x_2 \\ \vdots \\ x_n \end{pmatrix} x x1x2⋮xn 横排写法 x ( x 1 , x 2 , … , x n ) \boldsymbol{x}(x_1,x_2,\ldots,x_n) x(x1,x2,…,xn) 称为行向量。一个向量如果不加说明即默认为列向量但实际中为了节省空间我们通常将列向量写成 x ( x 1 , x 2 , … , x n ) T \boldsymbol{x}(x_1, x_2, \ldots, x_n)^\mathrm{T} x(x1,x2,…,xn)T 的形式。其中上标 T \mathrm{T} T表示转置transpose即将行和列翻转过来行向量转置后就变成了列向量。例如向量 x ( 1 , 2 ) \boldsymbol x (1,2) x(1,2) 的转置为 x T ( 1 2 ) \boldsymbol x^\mathrm{T} \begin{pmatrix}1 \\ 2\end{pmatrix} xT(12) 关于向量的含义我们既可以将其看成 n n n维空间中的一个点其中向量每一维的值代表坐标也可以将其看成从原点指向该坐标点的有向线段具有长度和方向。无论哪种理解每一个 n n n维向量都与一个 n n n维空间中的点相对应因此全体 n n n维向量构成的空间与 R n \mathbb{R}^n Rn是等价的。在没有额外说明的情况下对于向量 x ∈ R n \boldsymbol{x} \in \mathbb{R}^n x∈Rn我们用 x i ( 1 ≤ i ≤ n ) x_i (1\le i\le n) xi(1≤i≤n) 来表示其第 i i i维的分量。此外记所有分量全部为0的向量为零向量 0 ( 0 , 0 , … , 0 ) T \boldsymbol{0}(0,0,\ldots,0)^\mathrm{T} 0(0,0,…,0)T。 设向量 x , y ∈ R n \boldsymbol{x}, \boldsymbol{y} \in \mathbb{R}^n x,y∈Rn标量 a ∈ R a\in\mathbb{R} a∈R向量的常见运算有
向量相加 x y ( x 1 y 1 , x 2 y 2 , … , x n y n ) T \boldsymbol{x} \boldsymbol{y} (x_1y_1,x_2y_2,\ldots,x_ny_n)^\mathrm{T} xy(x1y1,x2y2,…,xnyn)T。向量与标量相乘 a x x a ( a x 1 , a x 2 , … , a x n ) T a\boldsymbol{x} \boldsymbol{x}a (ax_1,ax_2,\ldots,ax_n)^\mathrm{T} axxa(ax1,ax2,…,axn)T。当 a 0 a0 a0 或 x 0 \boldsymbol x \boldsymbol 0 x0 时结果即为 0 \boldsymbol 0 0。向量内积inner product也称向量点积dot product x ⋅ y ∑ i 1 n x i y i \boldsymbol{x}\cdot\boldsymbol{y} \sum_{i1}^n x_iy_i x⋅y∑i1nxiyi注意两个向量的内积结果是标量。从式中可以看出向量内积满足交换律即 x ⋅ y y ⋅ x \boldsymbol{x}\cdot\boldsymbol{y} \boldsymbol{y}\cdot\boldsymbol{x} x⋅yy⋅x。 为了衡量向量的“长度”我们定义范数norm函数 ∥ ⋅ ∥ : R n → R \| \cdot \| \colon \mathbb{R}^n \to \mathbb{R} ∥⋅∥:Rn→R。一个函数是范数当且仅当其满足下面3个条件 1正定性 ∥ x ∥ ≥ 0 \|\boldsymbol{x}\| \ge 0 ∥x∥≥0当且仅当 x 0 \boldsymbol{x}\boldsymbol{0} x0 时 ∥ x ∥ 0 \|\boldsymbol{x}\|0 ∥x∥0 2绝对齐次性 ∥ a x ∥ ∣ a ∣ ∥ x ∥ \| a\boldsymbol{x} \| |a|\|\boldsymbol{x}\| ∥ax∥∣a∣∥x∥ 3三角不等式 ∥ x y ∥ ≤ ∥ x ∥ ∥ y ∥ \| \boldsymbol{x} \boldsymbol{y} \| \le \|\boldsymbol{x}\| \|\boldsymbol{y}\| ∥xy∥≤∥x∥∥y∥。 在各种各样的向量范数中 L p L_p Lp范数又称 p p p范数是一类相对常用的范数其定义为 ∥ x ∥ p ( ∑ i 1 n ∣ x i ∣ p ) 1 / p , p ≥ 1 \|\boldsymbol{x}\|_p \left( \sum_{i1}^n |x_i|^p \right)^{1/p},\quad p \ge 1 ∥x∥p(i1∑n∣xi∣p)1/p,p≥1 其中又以下面几种 L p L_p Lp范数最为常见 L 2 L_2 L2范数又称欧几里得范数其结果是向量对应的点到原点的欧氏距离也称为向量的模长 ∥ x ∥ 2 ∑ i 1 n x i 2 \|\boldsymbol{x}\|_2 \sqrt{\sum_{i1}^n x_i^2} ∥x∥2i1∑nxi2 由于其应用最广我们有时会省略 L 2 L_2 L2范数的下标直接写为 ∥ x ∥ \|\boldsymbol{x}\| ∥x∥。 L 1 L_1 L1范数又称绝对值范数为向量各个分量的绝对值之和其结果是向量所表示的点到原点的曼哈顿距离 ∥ x ∥ 1 ∑ i 1 n ∣ x i ∣ \|\boldsymbol{x}\|_1 \sum_{i1}^n |x_i| ∥x∥1i1∑n∣xi∣ L ∞ L_\infty L∞范数又称无穷范数由对 L p L_p Lp范数的定义取极限 p → ∞ p\to\infty p→∞ 得到其结果是向量中绝对值最大的分量 ∥ x ∥ ∞ max i 1 , … , n ∣ x i ∣ \|\boldsymbol{x}\|_\infty \max_{i1,\ldots,n} |x_i| ∥x∥∞i1,…,nmax∣xi∣ 当 0 p 1 0 p 1 0p1 时按与上面相同的方式定义的函数并不满足范数的条件。但是为了方便我们常将下面的函数也称为“范数” L 0 L_0 L0范数由对 L p L_p Lp范数的定义取极限 p → 0 p \to 0^ p→0 得到其结果是向量中不为 0 0 0的元素的个数 ∥ x ∥ 0 ∑ i 1 n I ( x i ≠ 0 ) \|\boldsymbol{x}\|_0 \sum_{i1}^n \mathbb{I}(x_i \neq 0) ∥x∥0i1∑nI(xi0)
二、矩阵 向量是一些数在一维上构成的元组如果把它朝二维扩展我们就得到了矩阵matrix。与向量相比矩阵由于有了更多的维数具有更大的灵活性还可以定义新的运算。下面我们就来介绍矩阵的基本概念和本书中可能会用到的简单性质。
一矩阵的基本概念 矩阵是由一些数构成的矩形元组。一个 m m m行 n n n列的矩阵通常称为 m × n m \times n m×n 的矩阵记为 A ( a 11 a 12 ⋯ a 1 n a 21 a 22 ⋯ a 2 n ⋮ ⋮ ⋮ a m 1 a m 2 ⋯ a m n ) \boldsymbol{A} \begin{pmatrix} a_{11} a_{12} \cdots a_{1n} \\ a_{21} a_{22} \cdots a_{2n} \\ \vdots \vdots\ \vdots \\ a_{m1} a_{m2} \cdots a_{mn} \end{pmatrix} A a11a21⋮am1a12a22⋮ am2⋯⋯⋯a1na2n⋮amn 对具体的元素不关心时我们也将其记为 A m × n \boldsymbol{A}_{m\times n} Am×n或 A \boldsymbol A A。默认情况下我们用 a i j a_{ij} aij或者 A i j \boldsymbol{A}_{ij} Aij来表示矩阵 A \boldsymbol{A} A中位于第 i i i行第 j j j列的元素有时也反过来用 ( a i j ) m × n (a_{ij})_{m\times n} (aij)m×n 表示元素为 a i j a_{ij} aij的 m m m行 n n n列矩阵。与向量相似 m × n m\times n m×n 的实数矩阵构成的空间即与 m × n m\times n m×n 维的实数空间等价一般记为 R m × n \mathbb{R}^{m\times n} Rm×n。向量实际上是一种特殊的矩阵列向量的列数为1行向量的行数为1。同时矩阵也可以看作由一组向量构成。设 a i ( a 1 i , a 2 i , … , a m i ) T \boldsymbol{a}_i(a_{1i}, a_{2i},\ldots, a_{mi})^\mathrm{T} ai(a1i,a2i,…,ami)T那么 A ( a 1 , a 2 , … , a n ) \boldsymbol{A}(\boldsymbol{a}_1, \boldsymbol{a}_2, \ldots, \boldsymbol{a}_n) A(a1,a2,…,an)。与向量相似矩阵同样存在转置操作表示将矩阵的行和列交换。一个 m × n m\times n m×n 矩阵 ( a i j ) m × n (a_{ij})_{m\times n} (aij)m×n 转置后会得到 n × m n \times m n×m 矩阵 ( a j i ) n × m (a_{ji})_{n\times m} (aji)n×m。例如矩阵 A ( 1 2 3 4 5 6 ) \boldsymbol A \begin{pmatrix} 1 2 \\ 3 4 \\ 5 6 \end{pmatrix} A 135246 的转置为 A T ( 1 3 5 2 4 6 ) \boldsymbol A^\mathrm{T} \begin{pmatrix} 1 3 5 \\ 2 4 6 \end{pmatrix} AT(123456) 特别地行数和列数均为 n n n的矩阵称为 n n n阶方阵。如果 n n n阶方阵 D \boldsymbol D D只有左上到右下的对角线上的元素不为0则称该方阵为对角矩阵diagonal matrix记为 d i a g ( a 1 , a 2 , … , a n ) \mathrm{diag}(a_1,a_2,\ldots,a_n) diag(a1,a2,…,an)。例如 d i a g ( 1 , 2 , 3 ) \mathrm{diag}(1, 2, 3) diag(1,2,3) 代表的矩阵为 d i a g ( 1 , 2 , 3 ) ( 1 0 0 0 2 0 0 0 3 ) \mathrm{diag}(1,2,3) \begin{pmatrix} 1 0 0\\ 0 2 0 \\ 0 0 3 \end{pmatrix} diag(1,2,3) 100020003 进一步如果对角矩阵对角线上的元素全部为1则称该方阵为 n n n阶单位矩阵identity matrix或单位阵用 I n \boldsymbol{I}_n In表示。阶数明确时也可以省略下标的阶数记为 I \boldsymbol{I} I。例如三阶单位阵为 I 3 ( 1 0 0 0 1 0 0 0 1 ) \boldsymbol I_3 \begin{pmatrix} 1 0 0 \\ 0 1 0 \\ 0 0 1 \end{pmatrix} I3 100010001 所有元素为零的矩阵称为单位零矩阵记为 0 \boldsymbol 0 0。
二矩阵运算 设矩阵 A , B ∈ R m × n \boldsymbol{A},\boldsymbol{B} \in \mathbb{R}^{m\times n} A,B∈Rm×n C ∈ R n × l \boldsymbol{C} \in \mathbb{R}^{n\times l} C∈Rn×l D ∈ R l × k \boldsymbol{D} \in \mathbb{R}^{l\times k} D∈Rl×k P ∈ R m × l \boldsymbol{P} \in \mathbb{R}^{m\times l} P∈Rm×l。向量 x ∈ R n \boldsymbol{x} \in \mathbb{R}^n x∈Rn标量 λ ∈ R \lambda \in \mathbb{R} λ∈R。矩阵的常用运算有
矩阵相加 A B B A ( a i j b i j ) m × n \boldsymbol{A} \boldsymbol{B} \boldsymbol{B} \boldsymbol{A} (a_{ij} b_{ij})_{m\times n} ABBA(aijbij)m×n 要求两个矩阵行列数目都相同。矩阵与标量相乘 λ A A λ ( λ ⋅ a i j ) m × n \lambda\boldsymbol{A}\boldsymbol{A}\lambda(\lambda \cdot a_{ij})_{m\times n} λAAλ(λ⋅aij)m×n。矩阵与矩阵相乘要求第一个矩阵的列数与第二个矩阵的行数相同。设 P A C \boldsymbol{P}\boldsymbol{A}\boldsymbol{C} PAC则有 p i j ∑ t 1 n a i t c t j p_{ij} \sum_{t1}^n a_{it}c_{tj} pijt1∑naitctj
最终得到的 P \boldsymbol{P} P是 m × l m\times l m×l 维的矩阵。这一运算方式可以理解为 P \boldsymbol P P的第 i i i行 j j j列的元素 p i j p_{ij} pij是由 A \boldsymbol A A的第 i i i行和 B \boldsymbol B B的第 j j j列做向量内积得到的。这也说明了为什么矩阵乘法要求第一个矩阵的列数即行向量的维数与第二个矩阵的行数即列向量的维数相同因为只有维数相等的向量才能进行内积。例如 ( 1 0 2 0 2 1 ) × ( 2 0 1 3 3 2 ) ( 8 4 5 8 ) \begin{pmatrix} 1 0 2 \\ 0 2 1 \end{pmatrix} \times \begin{pmatrix} 2 0 \\ 1 3 \\ 3 2 \end{pmatrix} \begin{pmatrix} 8 4 \\ 5 8 \end{pmatrix} (100221)× 213032 (8548) 其中 P \boldsymbol P P第1行第1列的8的计算过程为 ( 1 , 0 , 2 ) ( 2 1 3 ) 1 × 2 0 × 1 2 × 3 8 (1,0,2) \begin{pmatrix} 2 \\ 1 \\ 3 \end{pmatrix} 1\times 2 0 \times 1 2 \times 3 8 (1,0,2) 213 1×20×12×38 其余元素以此类推。 应当注意由于矩阵乘法对行数和列数的要求将 A C \boldsymbol{A}\boldsymbol{C} AC交换成 C A \boldsymbol{C}\boldsymbol{A} CA并不一定还符合乘法的定义。即使 A \boldsymbol{A} A与 C \boldsymbol{C} C的维数形如 m × n m \times n m×n 和 n × m n \times m n×m交换后仍然满足乘法定义其交换前后相乘的结果也不一定相等即 A C ≠ C A \boldsymbol{A}\boldsymbol{C} \neq \boldsymbol{C}\boldsymbol{A} ACCA。例如 ( 1 1 0 1 ) × ( 0 1 1 1 ) ( 1 2 1 1 ) , ( 0 1 1 1 ) × ( 1 1 0 1 ) ( 0 1 1 2 ) \begin{pmatrix} 1 1 \\ 0 1 \end{pmatrix} \times \begin{pmatrix} 0 1 \\ 1 1 \end{pmatrix} \begin{pmatrix} 1 2 \\ 1 1 \end{pmatrix},\quad \begin{pmatrix} 0 1 \\ 1 1 \end{pmatrix} \times \begin{pmatrix} 1 1 \\ 0 1 \end{pmatrix} \begin{pmatrix} 0 1 \\ 1 2 \end{pmatrix} (1011)×(0111)(1121),(0111)×(1011)(0112) 不过虽然矩阵的乘法不满足交换律但依然满足结合律即 ( A C ) D A ( C D ) (\boldsymbol{A}\boldsymbol{C})\boldsymbol{D} \boldsymbol{A} (\boldsymbol{C}\boldsymbol{D}) (AC)DA(CD)。另外对于转置操作有 ( A C ) T C T A T (\boldsymbol{A}\boldsymbol{C})^\mathrm{T} \boldsymbol{C}^\mathrm{T} \boldsymbol{A}^\mathrm{T} (AC)TCTAT。 由于向量也是一种特殊的矩阵向量内积其实是矩阵乘法的一种特殊形式。但是两个 n × 1 n \times 1 n×1 维的列向量并不满足矩阵乘法对维数的要求。为了将向量的内积与矩阵乘法统一我们通常将其中一个向量转置成 1 × n 1 \times n 1×n 维的行向量再按矩阵乘法的规则进行计算即 x ⋅ y y T x \boldsymbol x \cdot \boldsymbol y \boldsymbol y^\mathrm{T} \boldsymbol x x⋅yyTx 此外内积也常用尖括号写为 ⟨ x , y ⟩ \langle \boldsymbol x, \boldsymbol y \rangle ⟨x,y⟩。该写法只是一种形式其计算规则和上面是相同的。 矩阵可以与向量相乘其计算方式与矩阵乘法相同。设 z A x \boldsymbol{z} \boldsymbol{A}\boldsymbol{x} zAx那么 z i ∑ t 1 n a i t x t z_i \sum_{t1}^n a_{it}x_t zit1∑naitxt 得到的 z \boldsymbol{z} z是 m m m维向量。例如 ( 1 0 2 2 1 1 ) × ( 0 3 1 ) ( 2 4 ) \begin{pmatrix} 1 0 2 \\ 2 1 1 \end{pmatrix} \times \begin{pmatrix} 0 \\ 3 \\ 1 \\ \end{pmatrix} \begin{pmatrix} 2 \\ 4 \end{pmatrix} (120121)× 031 (24) 类似于实数中的 1 1 1任何矩阵与维度相符的单位阵相乘都等于自身即 A m × n I n I m A m × n A m × n \boldsymbol{A}_{m\times n} \boldsymbol{I}_n \boldsymbol{I}_m \boldsymbol{A}_{m\times n} \boldsymbol{A}_{m\times n} Am×nInImAm×nAm×n。进一步在实数中相乘等于 1 1 1的两个数互为倒数。利用单位矩阵我们也可以定义矩阵的“倒数”——逆矩阵inverse。对于 n n n阶方阵 A \boldsymbol{A} A如果存在 n n n阶方阵 B \boldsymbol{B} B满足 A B I \boldsymbol{A}\boldsymbol{B}\boldsymbol{I} ABI则称 B \boldsymbol{B} B是 A \boldsymbol{A} A的逆矩阵记为 B A − 1 \boldsymbol{B} \boldsymbol{A}^{-1} BA−1。逆矩阵之间的乘法是可交换的即 A A − 1 A − 1 A I \boldsymbol{A}\boldsymbol{A}^{-1} \boldsymbol{A}^{-1}\boldsymbol{A} \boldsymbol{I} AA−1A−1AI。例如 ( 1 1 0 1 ) × ( 1 − 1 0 1 ) ( 1 0 0 1 ) , ( 1 − 1 0 1 ) × ( 1 1 0 1 ) ( 1 0 0 1 ) \begin{pmatrix} 1 1 \\ 0 1 \end{pmatrix} \times \begin{pmatrix} 1 -1 \\ 0 1 \end{pmatrix} \begin{pmatrix} 1 0 \\ 0 1 \end{pmatrix},\quad \begin{pmatrix} 1 -1 \\ 0 1 \end{pmatrix} \times \begin{pmatrix} 1 1 \\ 0 1 \end{pmatrix} \begin{pmatrix} 1 0 \\ 0 1 \end{pmatrix} (1011)×(10−11)(1001),(10−11)×(1011)(1001) 转置操作与求逆操作之间的顺序可以交换即 ( A T ) − 1 ( A − 1 ) T (\boldsymbol{A}^\mathrm{T})^{-1} (\boldsymbol{A}^{-1})^\mathrm{T} (AT)−1(A−1)T。
三矩阵与线性方程组 矩阵的逆并不是一定存在的。例如二阶矩阵 A ( 1 − 1 − 1 1 ) \boldsymbol A \left(\begin{matrix} 1 -1 \\ -1 1 \end{matrix}\right) A(1−1−11) 就不存在逆矩阵。显然零矩阵也不存在逆矩阵。那么什么情况下矩阵的逆存在呢我们可以从多元一次方程组的角度来理解。设矩阵 A n × n ∈ R n × n \boldsymbol A_{n\times n}\in \mathbb{R}^{n\times n} An×n∈Rn×n向量 x ∈ R n \boldsymbol x \in \mathbb{R}^n x∈Rn。将方程 A x 0 \boldsymbol A\boldsymbol x \boldsymbol 0 Ax0 按矩阵与向量的乘法展开得到 { a 11 x 1 a 12 x 2 ⋯ a 1 n x n 0 a 21 x 1 a 22 x 2 ⋯ a 2 n x n 0 ⋮ a n 1 x 1 a n 2 x 2 ⋯ a n n x n 0 \begin{cases} a_{11}x_1 a_{12}x_2 \cdots a_{1n}x_n 0 \\ a_{21}x_1 a_{22}x_2 \cdots a_{2n}x_n 0 \\ \quad\quad\vdots \\ a_{n1}x_1 a_{n2}x_2 \cdots a_{nn}x_n 0 \\ \end{cases} ⎩ ⎨ ⎧a11x1a12x2⋯a1nxn0a21x1a22x2⋯a2nxn0⋮an1x1an2x2⋯annxn0 这是一个 n n n元一次方程组且显然有解 x 0 \boldsymbol x \boldsymbol 0 x0。如果该方程组只有这一个解那么矩阵 A \boldsymbol A A的逆存在反之如果方程组存在非零解则矩阵的逆不存在。设 x 1 \boldsymbol x_1 x1是方程的一个非零解满足 A x 1 0 \boldsymbol A \boldsymbol x_1 \boldsymbol 0 Ax10假设矩阵的逆存在那么 0 A − 1 0 A − 1 A x 1 I x 1 x 1 \boldsymbol 0 \boldsymbol A^{-1}\boldsymbol 0 \boldsymbol A^{-1}\boldsymbol A \boldsymbol x_1 \boldsymbol I \boldsymbol x_1 \boldsymbol x_1 0A−10A−1Ax1Ix1x1 由此得到 x 1 0 \boldsymbol x_1\boldsymbol 0 x10与 x 1 \boldsymbol x_1 x1是非零解矛盾故矩阵的逆不存在。 我们用上面举的二阶矩阵的例子来进一步说明这一现象该矩阵对应的方程组为 { x 1 − x 2 0 − x 1 x 2 0 \begin{cases} x_1 - x_2 0 \\ -x_1 x_2 0 \end{cases} {x1−x1−x2x200 可以发现如果将第一个方程乘上-1就得到了第二个方程。因此这两个方程事实上是一样的方程组其实只包含一个方程 x 1 − x 2 0 x_1-x_20 x1−x20。最终方程组有两个未知数但只有一个方程就存在无穷多组解从而矩阵的逆不存在。 如果方程组 A x 0 \boldsymbol {Ax} \boldsymbol0 Ax0 存在非零解不妨设解向量中的前 m m m维 x 1 , x 2 , … , x m x_1,x_2,\ldots, x_m x1,x2,…,xm 不为零。否则我们总可以重排矩阵和向量行的顺序来使不为零的维度变成前 m m m维。设矩阵 A \boldsymbol A A的列向量为 a 1 , a 2 , … , a n \boldsymbol a_1, \boldsymbol a_2, \ldots, \boldsymbol a_n a1,a2,…,an那么非零解就对应着下面的关系 x 1 a 1 x 2 a 2 ⋯ x m a m 0 x_1 \boldsymbol a_1 x_2 \boldsymbol a_2 \cdots x_m \boldsymbol a_m \boldsymbol 0 x1a1x2a2⋯xmam0 也就是说原方程组中至少有一个方程可以由其他方程线性组合得到。像这样对于向量 u 1 , … , u n \boldsymbol u_1, \ldots, \boldsymbol u_n u1,…,un如果以 t i t_i ti为未知数的方程 ∑ i 1 n t i u i 0 \sum_{i1}^n t_i \boldsymbol u_i \boldsymbol 0 i1∑ntiui0 有非零解就称向量组 u 1 , … , u n \boldsymbol u_1, \ldots, \boldsymbol u_n u1,…,un 是线性相关的反之如果该方程只有零解就称向量组是线性无关的。而对于线性相关的向量组设其中存在 m m m个向量线性无关而任取 m 1 m1 m1个向量都线性相关则称该向量组的秩rank为 m m m记为 R a n k ( u 1 , … , u n ) m \mathrm{Rank}(\boldsymbol u_1, \ldots, \boldsymbol u_n) m Rank(u1,…,un)m。线性无关的向量组的秩就等于其包含向量的个数。将这一概念应用到矩阵上可以定义矩阵 A \boldsymbol A A的秩 R a n k ( A ) \mathrm{Rank}(\boldsymbol A) Rank(A)为其列向量组成的向量组的秩。于是我们可以用矩阵的秩来判断其是否可逆方阵 A n × n \boldsymbol A_{n\times n} An×n可逆的充分必要条件是 R a n k ( A ) n \mathrm{Rank}(\boldsymbol A)n Rank(A)n。 直观上来说矩阵的秩可以衡量矩阵包含的信息也就是矩阵的复杂程度。例如在上面的线性方程组中虽然它包含两个方程但由其中一个方程可以推出另一个说明它包含的信息与仅有一个方程没有什么区别。对于矩阵来说矩阵的秩越低其列向量之间的相关性就越强说明其实际上包含的信息就越少。
四矩阵范数 与向量类似在矩阵上同样可以定义范数函数 ∥ ⋅ ∥ : R m × n → R \| \cdot \| \colon \mathbb{R}^{m\times n} \to \mathbb{R} ∥⋅∥:Rm×n→R其需要满足的条件也与向量范数相同。 1正定性 ∥ A ∥ ≥ 0 \|\boldsymbol{A}\| \ge 0 ∥A∥≥0且 ∥ A ∥ 0 \|\boldsymbol{A}\| 0 ∥A∥0 当且仅当 A \boldsymbol{A} A的所有元素都为 0 0 0。 2绝对齐次性 ∥ a A ∥ ∣ a ∣ ∥ A ∥ \| a\boldsymbol{A} \| |a|\| \boldsymbol{A} \| ∥aA∥∣a∣∥A∥。 3三角不等式 ∥ A B ∥ ≤ ∥ A ∥ ∥ B ∥ \| \boldsymbol{A} \boldsymbol{B} \| \le \| \boldsymbol{A} \| \| \boldsymbol{B} \| ∥AB∥≤∥A∥∥B∥。 在机器学习中较为常用的矩阵范数是弗罗贝尼乌斯范数Frobenius norm简称 F \mathrm{F} F范数定义为矩阵每个元素的平方之和的平方根 ∥ A ∥ F ( ∑ i 1 m ∑ j 1 n a i j 2 ) 1 2 \| \boldsymbol{A} \|_\mathrm{F} \left( \sum_{i1}^m \sum_{j1}^n a_{ij}^2 \right)^{\frac{1}{2}} ∥A∥F(i1∑mj1∑naij2)21 F \mathrm{F} F范数与向量的 L 2 L_2 L2范数的定义较为类似直观来说可以用来衡量矩阵整体的“大小”或者可以理解为将矩阵拉成向量后向量对应的模长。
三、梯度 在机器学习中我们经常会将问题抽象成数学模型经过一系列推导后将其转化为在一定约束条件下求某个函数在空间上的最小值的问题这样的问题就叫做优化问题。给定函数 f : R n → R f\colon \mathbb{R}^n \to \mathbb{R} f:Rn→R最简单也是最自然的优化问题是寻找函数的最小值 min x f ( x ) \min_{\boldsymbol{x}} f(\boldsymbol{x}) xminf(x) 要求解这一优化问题就必须分析该函数的性质尤其是函数的变化趋势。试想如果知道了函数在空间的每一个地方沿着任一方向是上升还是下降就可以不断沿着函数值下降的方向走直到向周围的所有方向函数值都上升为止。这时我们就找到了函数的一个局部极小值。当然这里描述的只是某种直观的感受并不完全严谨但也提示了函数的变化趋势在优化问题中的重要性。而梯度就是描述函数变化速率和方向的工具。 假设有一定微积分的基础下面给出梯度gradient的定义。对于向量的标量值函数 f : R n → R f \colon \mathbb{R}^n \to \mathbb{R} f:Rn→R其在 x \boldsymbol{x} x处的梯度为 ∇ x f ( x ) ( ∂ f ∂ x 1 , ∂ f ∂ x 2 , ⋯ , ∂ f ∂ x n ) T \nabla_{\boldsymbol{x}} f(\boldsymbol{x}) \left( \frac{\partial f}{\partial x_1}, \frac{\partial f}{\partial x_2}, \cdots, \frac{\partial f}{\partial x_n} \right)^\mathrm{T} ∇xf(x)(∂x1∂f,∂x2∂f,⋯,∂xn∂f)T 其中 ∇ x \nabla_{\boldsymbol{x}} ∇x表示对变量 x \boldsymbol{x} x求梯度。在不引起混淆的情况下下标 x \boldsymbol{x} x可以省略。可以看出 ∇ f \nabla f ∇f也是一个 n n n维向量与 x \boldsymbol{x} x形状相同其每一维均由 f f f对 x \boldsymbol{x} x的对应维度求偏导数得到。我们知道多元函数对其中一个变量的偏导数代表了函数在该变量方向上的变化速率和方向。如果将向量函数的变量 x \boldsymbol{x} x看作是 n n n个独立的标量变量那么 f f f也可以认为是有 n n n个变量的多元函数 f ( x 1 , … , x n ) f(x_1, \ldots, x_n) f(x1,…,xn)。并且在直角坐标系中由于向量的每一维都对应一个坐标轴 f f f对每个维度的偏导数就指示了函数在这一坐标轴方向上的变化情况。最终由各个偏导数组合而成的向量则代表函数在空间中完整的变化速率与方向。 值得注意的是梯度向量所指的方向有非常特殊的性质。如图1所示图中是函数 f ( x , y ) − x − 2 y f(x,y) -x - 2y f(x,y)−x−2y 在 x y xy xy平面上的等值线图在每条直线上函数的值都相等且颜色越偏红的地方函数值越大越偏蓝的地方函数值越小。按照上面的运算规则可以算出函数在点 ( 1 , 1 ) (1,1) (1,1) 处的梯度是 ( − 1 , − 2 ) (-1,-2) (−1,−2)。图中画出了以 ( 1 , 1 ) (1,1) (1,1) 为起点的一些箭头图例中标明了箭头的方向其中蓝色实线箭头是梯度方向。这些箭头的长度都相等。可以看出虽然沿所有箭头的方向函数值都在增大但是蓝色的箭头跨过了最多的等值线说明沿该方向函数值增大最快。 图1 梯度与函数值变化 或许有人对图1有疑问认为函数非线性的情况与图中展示的线性情况不同函数值增大最快的方向应当是从起点指向最大值点的方向。然而仿照一元函数的泰勒展开 f ( x ) ≈ f ( x 0 ) f ′ ( x 0 ) ( x − x 0 ) f(x) \approx f(x_0) f(x_0)(x-x_0) f(x)≈f(x0)f′(x0)(x−x0)我们也可以利用梯度对标量值函数在局部进行线性近似即 f ( x ) ≈ f ( x 0 ) ∇ f ( x 0 ) T ( x − x 0 ) f(\boldsymbol x) \approx f(\boldsymbol x_0) \nabla f(\boldsymbol x_0)^\mathrm{T} (\boldsymbol x - \boldsymbol x_0) f(x)≈f(x0)∇f(x0)T(x−x0) 在遇到的情境中函数 f f f的性质通常都足够好可以进行上面的线性近似。因此当我们讨论函数在一个很小局部内的变化时总是可以认为函数是线性的。这样参照上面线性函数的例子就可以从直观上推出在某一点函数值上升最快的方向就是函数在该点梯度的方向。更严格的数学证明应当考虑函数在起点 x 0 \boldsymbol x_0 x0沿不同方向的方向导数 ∂ f ( x 0 ) ∂ s \begin{aligned}\frac{\partial f(\boldsymbol x_0)}{\partial \boldsymbol s}\end{aligned} ∂s∂f(x0)其中 s \boldsymbol s s表示空间中的某个方向。该导数的含义是自变量从 x 0 \boldsymbol x_0 x0沿方向 s \boldsymbol s s变为 x 0 d s \boldsymbol x_0 \mathrm{d}\boldsymbol s x0ds时函数值的变化为 ∥ ∂ f ( x 0 ) ∂ s ∥ \begin{aligned}\left\lVert \frac{\partial f(\boldsymbol x_0)}{\partial \boldsymbol s} \right\rVert\end{aligned} ∂s∂f(x0) 。利用方向导数可以证明当函数值变化最大时 s \boldsymbol s s就是梯度方向。 图2展示了几个有代表性的二元函数在空间中部分点的梯度分别是抛物面 f ( x , y ) x 2 y 2 f(x,y)x^2y^2 f(x,y)x2y2马鞍面 f ( x , y ) x 2 − y 2 f(x,y)x^2-y^2 f(x,y)x2−y2以及 f ( x , y ) sin ( x ) sin ( y ) f(x,y)\sin(x)\sin(y) f(x,y)sin(x)sin(y)。 a 抛物面 f ( x , y ) x 2 y 2 f(x,y)x^2y^2 f(x,y)x2y2 的梯度 b 马鞍面 f ( x , y ) x 2 − y 2 f(x,y)x^2-y^2 f(x,y)x2−y2 的梯度 c f ( x , y ) sin ( x ) sin ( y ) f(x,y)\sin(x)\sin(y) f(x,y)sin(x)sin(y) 的梯度 图2 几种二元函数的梯度示意 上文介绍的函数以向量为自变量函数值是标量。除此之外在机器学习中我们还会经常遇到自变量和函数值都是向量的函数称为向量值函数。设 f : R n → R m \boldsymbol{f} \colon \mathbb{R}^n \to \mathbb{R}^m f:Rn→Rm 是向量值函数那么函数值的每一维都是一个 n n n元标量函数 f ( x ) ( f 1 ( x 1 , … , x n ) , f 2 ( x 1 , … , x n ) , ⋯ , f m ( x 1 , … , x n ) ) T \boldsymbol f(\boldsymbol x) \left(f_1(x_1,\ldots,x_n), f_2(x_1,\ldots,x_n), \cdots, f_m(x_1,\ldots,x_n)\right)^\mathrm{T} f(x)(f1(x1,…,xn),f2(x1,…,xn),⋯,fm(x1,…,xn))T 向量值函数其实并不少见半径为 r r r的圆的参数方程 x r cos θ , y r sin θ xr\cos\theta, yr\sin\theta xrcosθ,yrsinθ 就可以看成自变量为 θ \theta θ、函数值为向量 ( x , y ) (x,y) (x,y)的函数。假如我们要描述空间中的风速那么也需要一个从空间坐标 ( x , y , z ) (x,y,z) (x,y,z)到风速 ( v x , v y , v z ) (v_x,v_y,v_z) (vx,vy,vz)的向量值函数。而在机器学习中我们最常见的是向量之间的线性变换 f ( x ) A x \boldsymbol f(\boldsymbol x) \boldsymbol A\boldsymbol x f(x)Ax其中 A \boldsymbol A A是矩阵。 向量值函数同样也可以对自变量求导数但这时导数的结果就变成矩阵称为雅可比矩阵Jacobian matrix通常用 ∇ f \nabla \boldsymbol f ∇f或者 J f \boldsymbol J_{\boldsymbol f} Jf表示。设 f : R n → R m \boldsymbol{f} \colon \mathbb{R}^n \to \mathbb{R}^m f:Rn→Rm其对自变量 x \boldsymbol x x的梯度是一个 m × n m \times n m×n 维的矩阵 ∇ x f ( ∇ x T f 1 ⋮ ∇ x T f m ) ( ∂ f 1 ∂ x 1 ⋯ ∂ f 1 ∂ x n ⋮ ⋮ ∂ f m ∂ x 1 ⋯ ∂ f m ∂ x n ) \nabla_{\boldsymbol x} \boldsymbol f \begin{pmatrix} \nabla_{\boldsymbol x}^\mathrm{T} f_1 \\ \vdots \\ \nabla_{\boldsymbol x}^\mathrm{T} f_m \end{pmatrix} \begin{pmatrix} \begin{aligned}\frac{\partial f_1}{\partial x_1}\end{aligned} \begin{aligned}\cdots\end{aligned} \begin{aligned}\frac{\partial f_1}{\partial x_n}\end{aligned} \\ \begin{aligned}\vdots\end{aligned} \begin{aligned}\end{aligned} \begin{aligned}\vdots\end{aligned} \\ \begin{aligned}\frac{\partial f_m}{\partial x_1}\end{aligned} \begin{aligned}\cdots\end{aligned} \begin{aligned}\frac{\partial f_m}{\partial x_n}\end{aligned} \end{pmatrix} ∇xf ∇xTf1⋮∇xTfm ∂x1∂f1⋮∂x1∂fm⋯⋯∂xn∂f1⋮∂xn∂fm 其中 ∇ T \nabla^\mathrm{T} ∇T表示先求梯度再转置。虽然严格意义上来说雅可比矩阵已经不是梯度但由于其与梯度的含义和形式都高度相似也可以将其看作是梯度的推广。因此简单起见统一用梯度来称呼标量值函数与向量值函数的导数并用 ∇ \nabla ∇符号表示求梯度或雅可比矩阵。 特别的标量值函数的梯度是向量。类比于二阶导数如果对梯度 ∇ f \nabla f ∇f再求一次梯度得到的矩阵就称为 f f f的黑塞矩阵Hessian matrix H f ∇ 2 f ( x ) ( ∂ 2 f ∂ x 1 2 ⋯ ∂ 2 f ∂ x 1 ∂ x n ⋮ ⋮ ∂ 2 f ∂ x n ∂ x 1 ⋯ ∂ 2 f ∂ x n 2 ) \boldsymbol{H}_f \nabla^2 f(\boldsymbol{x})\begin{pmatrix} \begin{aligned}\frac{\partial^2 f}{\partial x_1^2}\end{aligned} \begin{aligned}\cdots\end{aligned} \begin{aligned}\frac{\partial^2 f}{\partial x_1 \partial x_n}\end{aligned} \\ \begin{aligned}\vdots\end{aligned} \begin{aligned}\end{aligned} \begin{aligned}\vdots\end{aligned} \\ \begin{aligned}\frac{\partial^2 f}{\partial x_n \partial x_1}\end{aligned} \begin{aligned}\cdots\end{aligned} \begin{aligned}\frac{\partial^2 f}{\partial x_n^2}\end{aligned} \end{pmatrix} Hf∇2f(x) ∂x12∂2f⋮∂xn∂x1∂2f⋯⋯∂x1∂xn∂2f⋮∂xn2∂2f 我们直接给出向量求导的一些常用公式。读者可以发现这些公式与一元标量函数的求导并无太大差别只是需要注意向量和矩阵的转置来使维度相符。如无特殊标明下面所有的求导都是对向量 x \boldsymbol x x进行的。其中 a a a是标量 y \boldsymbol y y是向量 A \boldsymbol A A是矩阵。带有下角标的 α x , β x \boldsymbol\alpha_{\boldsymbol{x}}, \boldsymbol\beta_{\boldsymbol{x}} αx,βx 是 x \boldsymbol x x的向量值函数。 ∇ y T x ∇ x T y y ∇ x T x 2 x ∇ ∥ x ∥ 2 x / ∥ x ∥ 2 ∇ α x T ( ∇ x T α x ) T ∇ y T A x A T y ∇ x T A x ( A A T ) x ∇ α x T β x ( ∇ α x T ) β x α x T ( ∇ β x ) ∇ A x A T ∇ a x a I \begin{aligned} \nabla \boldsymbol y^\mathrm{T}\boldsymbol x \nabla \boldsymbol x^\mathrm{T}\boldsymbol y \boldsymbol y \nabla \boldsymbol x^\mathrm{T}\boldsymbol x 2\boldsymbol x \nabla \lVert \boldsymbol x \lVert_2 \boldsymbol x / \lVert \boldsymbol x \lVert_2 \\ \nabla \boldsymbol\alpha_{\boldsymbol{x}}^\mathrm{T} (\nabla_{\boldsymbol{x}^\mathrm{T}} \boldsymbol\alpha_{\boldsymbol{x}})^\mathrm{T} \nabla \boldsymbol y^{\mathrm{T}}\boldsymbol A\boldsymbol x \boldsymbol A^{\mathrm{T}}\boldsymbol y \nabla \boldsymbol x^{\mathrm{T}}\boldsymbol A\boldsymbol x (\boldsymbol A \boldsymbol A^\mathrm{T})\boldsymbol x \\ \nabla \boldsymbol\alpha_{\boldsymbol{x}}^\mathrm{T}\boldsymbol\beta_{\boldsymbol{x}} (\nabla\boldsymbol\alpha_{\boldsymbol{x}}^\mathrm{T}) \boldsymbol\beta_{\boldsymbol{x}} \boldsymbol\alpha_{\boldsymbol{x}}^\mathrm{T} (\nabla \boldsymbol\beta_{\boldsymbol{x}}) \nabla \boldsymbol A \boldsymbol x \boldsymbol A^\mathrm{T} \nabla a\boldsymbol x a \boldsymbol I \end{aligned} ∇yTx∇xTyy∇αxT(∇xTαx)T∇αxTβx(∇αxT)βxαxT(∇βx)∇xTx2x∇yTAxATy∇AxAT∇∥x∥2x/∥x∥2∇xTAx(AAT)x∇axaI 与标量函数类似函数 f ( x ) f(\boldsymbol{x}) f(x)在 x 0 \boldsymbol{x}_0 x0处取到极大值或者极小值的必要条件是在该点的梯度为零向量 ∇ f ( x ) ∣ x 0 0 \nabla f(\boldsymbol{x})|_{\boldsymbol{x}_0} \boldsymbol{0} ∇f(x)∣x00 虽然仅有这一条件并不充分比如图2b展示过的 f ( x , y ) x 2 − y 2 f(x,y)x^2-y^2 f(x,y)x2−y2其在 ( 0 , 0 ) (0,0) (0,0)处的梯度为零但该点显然并非局部极小值。然而进一步讨论需要用到 H f \boldsymbol H_f Hf较为复杂的性质且梯度为零在函数光滑时是必要条件。因此我们暂且先对梯度与极值的关系有一个基本认识在需要深入时再具体介绍分析的方法。
四、凸函数 梯度为零并不能说明函数取到极值点。那么是否存在一类函数由梯度为零就可以直接推出极值点呢考虑最简单的开口向上的二次函数 y x 2 yx^2 yx2显然函数在顶点 x 0 x0 x0 处的梯度为零同时该点也是函数的极小值点。进一步分析可以发现在自变量 x x x由小变大的过程中函数的导数梯度 y ′ 2 x y 2x y′2x 是单调增加的。所以如果导数存在零点 x 0 x_0 x0在零点左边导数始终小于0函数值单调减小在零点右边导数始终大于0函数值单调增加。这样导数为零的点一定是函数的极小值点。 当函数的自变量由一元扩展到多元、导数扩展成梯度的时候我们同样需要把上面的直觉扩展找到在不同情况下都适用的描述方法。直观上来说如果梯度为零就可以推出极小值点函数的图像应当是没有“起伏”的这种性质该如何描述呢这里直接给出定义考虑函数 f ( x ) f(\boldsymbol x) f(x)对任意 x 1 , x 2 \boldsymbol x_1, \boldsymbol x_2 x1,x2 和 0 α 1 0 \alpha 1 0α1如果都有 α f ( x 1 ) ( 1 − α ) f ( x 2 ) ≥ f ( α x 1 ( 1 − α ) x 2 ) \alpha f(\boldsymbol x_1) (1-\alpha)f(\boldsymbol x_2) \ge f(\alpha\boldsymbol x_1 (1-\alpha) \boldsymbol x_2) αf(x1)(1−α)f(x2)≥f(αx1(1−α)x2) 就称 f f f是凸函数convex function。 图3是一个凸函数的示意图我们通过这张图来简单说明凸函数定义式的几何含义。上式左边是 f ( x 1 ) f(\boldsymbol x_1) f(x1)和 f ( x 2 ) f(\boldsymbol x_2) f(x2)的加权平均随着 α \alpha α从0变化到1它的轨迹就是连接 ( x 1 , f ( x 1 ) ) (\boldsymbol x_1, f(\boldsymbol x_1)) (x1,f(x1))和 ( x 2 , f ( x 2 ) ) (\boldsymbol x_2, f(\boldsymbol x_2)) (x2,f(x2))两点的线段。上式右边则是 x 1 \boldsymbol x_1 x1和 x 2 \boldsymbol x_2 x2两个点先加权平均得到 α x 1 ( 1 − α ) x 1 \alpha \boldsymbol x_1 (1-\alpha) \boldsymbol x_1 αx1(1−α)x1、再求函数值的结果。要让上式成立就需要左边表示的线段始终在右边对应位置的函数值上方和上面我们希望的函数图像没有“起伏”是一致的。否则我们就可以在函数图像有“鼓包”的地方找到两个点使它们的连线在函数下方了。 图3 凸函数定义的几何解释 图4展示了常见的凸函数 f ( x ) ∣ x ∣ f(x)|x| f(x)∣x∣ 和 f ( x ) e x f(x)e^x f(x)ex以及非凸函数 f ( x ) x 3 f(x)x^3 f(x)x3 和 f ( x ) cos ( x ) , 0 ≤ x ≤ 2 π f(x)\cos(x), 0\le x\le 2\pi f(x)cos(x),0≤x≤2π。非凸函数的图像上还画出了一条红色虚线表示该函数违反凸函数定义的地方。可以自行验证这些函数确实满足或不满足凸函数的定义。 图4 凸函数与非凸函数示例 从这些例子中我们需要说明几个与上面的“直觉”不完全相同的地方也提醒注意严谨的数学表达是比直觉更可靠的工具。第一凸函数不一定在所有点可导可求梯度。例如 ∣ x ∣ |x| ∣x∣ 在 x 0 x0 x0 处的梯度就不存在。但我们在机器学习中遇到的大多数函数都可以通过合理规定不可导点的导数来尽量弥补这一缺陷比如规定 ∣ x ∣ |x| ∣x∣ 在 x 0 x0 x0 的导数为 0 0 0。第二凸函数不一定存在极值点例如 e x e^x ex在定义域内是单调递增函数不存在导数为零的地方。第三存在全局唯一极小值点的不一定是凸函数例如 cos ( x ) \cos(x) cos(x)在 [ 0 , 2 π ] [0,2\pi] [0,2π] 区间上存在唯一极值点 x π x\pi xπ且该点的导数为 − sin ( π ) 0 -\sin(\pi)0 −sin(π)0。甚至 cos ( x ) \cos(x) cos(x)在极值点左边导数 − sin ( x ) -\sin(x) −sin(x) 始终为负、在极值点右边导数始终为正与我们在本节最开始的描述相同但它仍然不是凸函数。 与凸函数相反如果将定义式中的 ≥ \ge ≥改为 ≤ \le ≤即 α f ( x 1 ) ( 1 − α ) f ( x 2 ) ≤ f ( α x 1 ( 1 − α ) x 2 ) \alpha f(\boldsymbol x_1) (1-\alpha)f(\boldsymbol x_2) \le f(\alpha \boldsymbol x_1 (1-\alpha) \boldsymbol x_2) αf(x1)(1−α)f(x2)≤f(αx1(1−α)x2) 就得到了凹函数concave function。类比图2凸函数的几何解释凹函数的图像应当是向上“鼓起”的从而任意两点的连线都在图像的下方。因此凸函数常常与最小化关联凹函数常常与最大化关联。对比两者的定义式可以发现如果 f ( x ) f(\boldsymbol x) f(x)是凸函数那么 − f ( x ) -f(\boldsymbol x) −f(x)一定是凹函数。相应来说最小化凸函数 f ( x ) f(\boldsymbol x) f(x)与最大化凹函数 − f ( x ) -f(\boldsymbol x) −f(x)是等价的。因此我们只需要选取凸函数进行研究就可以得到凹函数的所有性质。 凸函数在机器学习中非常常见一般向量范数都是凸函数。由于凸函数的良好性质它的优化问题通常有简单且理论上严格的解法。因此在后续所有的模型中我们都希望尽可能找到某种形式的凸函数作为优化问题的目标。