From 8816786bbc94cf9fd74ea577d6ccb07f4dc42c52 Mon Sep 17 00:00:00 2001 From: swordyork Date: Wed, 1 Mar 2017 16:35:29 +0800 Subject: [PATCH] chapter 2 done --- Chapter1/{annotations => annotations.txt} | 0 Chapter2/annotations.txt | 102 +++++++ Chapter2/linear_algebra.tex | 171 +++++------- README.md | 2 +- .../2016-12-02-Chapter2_linear_algebra.md | 263 ++++++++---------- scripts/parse_anno.py | 32 +++ terminology.tex | 4 +- 7 files changed, 337 insertions(+), 237 deletions(-) rename Chapter1/{annotations => annotations.txt} (100%) create mode 100644 Chapter2/annotations.txt create mode 100644 scripts/parse_anno.py diff --git a/Chapter1/annotations b/Chapter1/annotations.txt similarity index 100% rename from Chapter1/annotations rename to Chapter1/annotations.txt diff --git a/Chapter2/annotations.txt b/Chapter2/annotations.txt new file mode 100644 index 0000000..8f13a64 --- /dev/null +++ b/Chapter2/annotations.txt @@ -0,0 +1,102 @@ +{'user': 'acct:badpoem@hypothes.is', 'text': 'deep learning algorithms. 此处考虑语义对比应该加回算法二字。改为深度学习算法。', 'origin_text': '线性代数对于理解和从事机器学习算法相关工作是很有必要的,尤其对于 !!!深度学习!!! 而言。因此,在我们开始介绍深度学习之前,我们集中探讨一些必备的', 'time': '2017-01-25T08:10'} +{'user': 'acct:badpoem@hypothes.is', 'text': 'If you have previous experience with these concepts\n如果你已经了解这些概念', 'origin_text': '知识。如果你已经很熟悉线性代数,那么你可以轻松地跳过本章。 !!!如果你先前接触过本章的内容!!! ,但是需要一份索引表来回顾一些重要公式,那么我们推荐\\emph{', 'time': '2017-01-25T08:13'} +{'user': 'acct:badpoem@hypothes.is', 'text': 'types\n类', 'origin_text': '数知识。标量、向量、矩阵和张量学习线性代数,会涉及以下几 !!!个!!! 数学概念: 标量:一个标量就是一个单独的数,不同于线性代', 'time': '2017-01-25T08:14'} +{'user': 'acct:badpoem@hypothes.is', 'text': 'which are usually arrays of multiple numbers\n通常是多个数字的序列', 'origin_text': ' 标量:一个标量就是一个单独的数,不同于线性代数中大多数概念 !!!会涉及到多个数!!! 。 我们用斜体表示标量。标量通常赋予小写的变量名称。 当', 'time': '2017-01-25T08:16'} +{'user': 'acct:badpoem@hypothes.is', 'text': '被赋予', 'origin_text': '数中大多数概念会涉及到多个数。 我们用斜体表示标量。标量通常 !!!赋予!!! 小写的变量名称。 当我们介绍标量时,会明确它们是哪种类型的数', 'time': '2017-01-25T08:16'} +{'user': 'acct:badpoem@hypothes.is', 'text': 'then the vector lies in the set formed by taking the Cartesian product of R n times\n那么该向量属于实数集R的n次笛卡尔乘积构成的集合中', 'origin_text': '如果每个元素都属于ℝR\\SetR,并且该向量有nn\\Sn个元素, !!!那么该向量属于实数集ℝR\\SetR笛卡尔乘积nn\\Sn次!!! ,表示为ℝnRn\\SetR^n。 当我们需要明确表示向量中的', 'time': '2017-01-25T08:20'} +{'user': 'acct:badpoem@hypothes.is', 'text': 'Sometimes we need to index a set of elements of a vector\n有时我们需要指明向量中的元素构成的集合', 'origin_text': '向量看作空间中的点,每个元素是不同的坐标轴上的坐标。 !!!有时我们需要指定向量中某个集合的元素!!! 。 在这种情况下,我们定义一个包含这些索引的集合,然后将该集', 'time': '2017-01-25T08:22'} +{'user': 'acct:badpoem@hypothes.is', 'text': '指明集合的补集', 'origin_text': '1,3,6},然后写作xSxS\\Vx_S。我 们用符号−−- !!!表示集合的补集中的索引!!! 。 比如x−1x−1\\Vx_{-1}表示xx\\Vx中除x1x', 'time': '2017-01-25T08:23'} +{'user': 'acct:badpoem@hypothes.is', 'text': '以不加粗的斜体形式使用其名称', 'origin_text': 'R^{m\\times n}。 我们在表示矩阵中的元素时,通常 !!!使用其名称以不加粗的斜体形式!!! ,索引用逗号间隔。 比如,A1,1A1,1\\SA_{1,1}', 'time': '2017-01-25T08:24'} +{'user': 'acct:badpoem@hypothes.is', 'text': 'We can identify allof the numbers with vertical coordinateiby writing a “:” for the horizontalcoordinate\n我们可以通过使用":"表示水平坐标,以表示垂直坐标i中的所有元素', 'origin_text': 'm,nAm,n\\SA_{m,n}表示AA\\MA右下的元素。 !!!我们表示垂直坐标ii\\Si中的所有元素时,用”:”表示水平坐标。!!! 比如,Ai,:Ai,:\\MA_{i,:}表示AA\\MA中垂', 'time': '2017-01-25T08:26'} +{'user': 'acct:badpoem@hypothes.is', 'text': 'but donot convert anything to lower case\n但不必将矩阵的变量名称小写化', 'origin_text': '引,而不是单个元素。 在这种情况下,我们在表达式后面接下标, !!!但不需要写作小写字母!!! 。 比如,f(A)i,jf(A)i,jf(\\MA)_{i,j', 'time': '2017-01-25T08:28'} +{'user': 'acct:badpoem@hypothes.is', 'text': 'an array of numbers 一列数字', 'origin_text': '张量:在某些情况下,我们会讨论不只两维坐标的数组。 一般地, !!!一组数组中的元素!!! 分布在若干维坐标的规则网格中,我们将其称之为张量。 我们使用', 'time': '2017-01-25T08:29'} +{'user': 'acct:badpoem@hypothes.is', 'text': '我们通过将向量元素作为行矩阵写在文本行中,然后使用转置操作将其变为标准列向量,来定义一个向量', 'origin_text': '列的矩阵。对应地,向量的转置可以看作是只有一行的矩阵。有时, !!!我们将向量表示成行矩阵的转置,写在行中,然后使用转置将其变为标准的列向量!!! ,比如x=[x1,x2,x3]⊤x=[x1,x2,x3]⊤\\Vx', 'time': '2017-01-25T08:36'} +{'user': 'acct:badpoem@hypothes.is', 'text': 'define a matrix withbcopied intoeach row\n定义一个将向量b复制到每一行生成的矩阵', 'origin_text': '矩阵AA\\MA的每一行相加。这个速记方法使我们无需在加法操作前 !!!定义复制向量bb\\Vb到矩阵的每一行!!! 。这种隐式地复制向量bb\\Vb到很多位置的方式,被称为广播。', 'time': '2017-01-25T08:37'} +{'user': 'acct:badpoem@hypothes.is', 'text': '虽然词汇为速记,但是写作简写似乎更流畅', 'origin_text': '}。换言之,向量bb\\Vb和矩阵AA\\MA的每一行相加。这个 !!!速记!!! 方法使我们无需在加法操作前定义复制向量bb\\Vb到矩阵的每一行。', 'time': '2017-01-25T08:39'} +{'user': 'acct:badpoem@hypothes.is', 'text': 'We can write the matrix product just by placing two or more matricestogether\n我们可以通过将两个或多个矩阵并列放置以书写矩阵乘法', 'origin_text': '矩阵CC\\MC的形状是m×pm×p\\Sm\\times \\Sp。 !!!矩阵乘积可以作用于两个或多个并在一起的矩阵!!! ,例如C=AB.C=AB.\\begin{equation} ', 'time': '2017-01-25T08:40'} +{'user': 'acct:badpoem@hypothes.is', 'text': 'b属于R^m', 'origin_text': '\\MA\\in \\SetR^{m\\times n}是一个已知矩阵, !!!b!!! b\\Vb是一个已知向量,xx\\Vx是一个我们要求解的未知向量。', 'time': '2017-01-25T08:42'} +{'user': 'acct:badpoem@hypothes.is', 'text': 'x属于R^n', 'origin_text': '{m\\times n}是一个已知矩阵,bb\\Vb是一个已知向量, !!!x!!! x\\Vx是一个我们要求解的未知向量。向量xx\\Vx的每一个元素', 'time': '2017-01-25T08:42'} +{'user': 'acct:badpoem@hypothes.is', 'text': '方程', 'origin_text': '_m.\\end{gather}矩阵向量乘积符号为这种形式的 !!!等式!!! 提供了更紧凑的表示。单位矩阵和逆矩阵线性代数提供了被', 'time': '2017-01-25T08:42'} +{'user': 'acct:badpoem@hypothes.is', 'text': '为具有大多数值的矩阵A求解式2.11\n这里表达的应该是A可能有很多不同的数值,对于其中存在矩阵逆的A,可以通过矩阵逆来求解2.11', 'origin_text': '逆矩阵线性代数提供了被称为矩阵逆的强大工具,使我们能够解析地 !!!求解具有多值矩阵AA\\MA的\\eqn?!!! 。为了描述矩阵逆,我们首先需要定义单位矩阵的概念。任意向量', 'time': '2017-01-25T08:46'} +{'user': 'acct:badpoem@hypothes.is', 'text': '在大多数软件应用程序中实际使用', 'origin_text': '矩阵A−1A−1\\MA^{-1}主要是作为理论工具使用的,并不会 !!!在实际中使用于大多数软件应用程序中!!! 。这是因为逆矩阵A−1A−1\\MA^{-1}在数字计算机上只能', 'time': '2017-01-25T08:47'} +{'user': 'acct:badpoem@hypothes.is', 'text': '但是,对于方程组而言,\nHowever出现在此处而不是后面。\nthe system of equations 方程组', 'origin_text': '在,那么\\eqn?肯定对于每一个向量bb\\Vb恰好存在一个解。 !!!对系统方程而言!!! ,对于某些bb\\Vb的值,有可能不存在解,或者存在无限多个解。', 'time': '2017-01-25T08:53'} +{'user': 'acct:badpoem@hypothes.is', 'text': '此处没有However。\n以及此处应该有一个短句:对于特定的向量b(for a particular b)', 'origin_text': '言,对于某些bb\\Vb的值,有可能不存在解,或者存在无限多个解。 !!!然而,!!! 存在多于一个解但是少于无限多个解的情况是不可能发生的;因为如果x', 'time': '2017-01-25T08:54'} +{'user': 'acct:badpoem@hypothes.is', 'text': '如前所言,应为 方程组', 'origin_text': '多个解的情况是不可能发生的;因为如果xx\\Vx和yy\\Vy都是某 !!!系统方程!!! 的解,则z=αx+(1−α)yz=αx+(1−α)y\\begi', 'time': '2017-01-25T08:55'} +{'user': 'acct:badpoem@hypothes.is', 'text': '为了分析\nTo analyse', 'origin_text': 'n}(其中αα\\alpha取任意实数)也是该系统方程的解。 !!!分析!!! 方程有多少个解,我们可以将AA\\MA的列向量看作是从原点(元素都', 'time': '2017-01-25T08:55'} +{'user': 'acct:badpoem@hypothes.is', 'text': '标量系数', 'origin_text': '性组合。形式上,某个集合中向量的线性组合,是指每个向量乘以对应 !!!系数!!! 之后的和,即:∑iciv(i).∑iciv(i).\\begin', 'time': '2017-01-25T09:00'} +{'user': 'acct:badpoem@hypothes.is', 'text': '矩阵逆', 'origin_text': '方阵或者是一个奇异的方阵,该方程仍然可能有解。但是我们不能使用 !!!逆矩阵!!! 去求解。目前为止,我们已经讨论了逆矩阵左乘。我们也可以定义逆', 'time': '2017-01-25T09:17'} +{'user': 'acct:badpoem@hypothes.is', 'text': 'L2范数', 'origin_text': ' 当p=2p=2p=2时, !!!L2!!! L2L^2被称为欧几里得范数。它表示从原点出发到向量xx\\Vx', 'time': '2017-01-25T09:53'} +{'user': 'acct:badpoem@hypothes.is', 'text': 'discriminate between elements that are exactlyzero and elements that are small but nonzero\n区分恰好是零的元素和非零小值的元素', 'origin_text': '受欢迎,因为它在原点附近增长得十分缓慢。在某些机器学习应用中, !!!区分元素值恰好是零还是非零小值!!! 是很重要的。在这些情况下,我们更倾向于使用在各个位置斜率相同,', 'time': '2017-01-25T09:58'} +{'user': 'acct:badpoem@hypothes.is', 'text': 'turn to 转向', 'origin_text': ',区分元素值恰好是零还是非零小值是很重要的。在这些情况下,我们 !!!更倾向于!!! 使用在各个位置斜率相同,同时保持简单的数学形式的函数:L1L1L', 'time': '2017-01-25T10:02'} +{'user': 'acct:badpoem@hypothes.is', 'text': '向量', 'origin_text': '术语在数学意义上是不对的。向量的非零元素的数目不是范数,因为对 !!!标量!!! 放缩αα\\alpha倍不会改变该向量非零的数目。因此,L1L1', 'time': '2017-01-25T10:05'} +{'user': 'acct:badpoem@hypothes.is', 'text': '非零元素', 'origin_text': '素的数目不是范数,因为对标量放缩αα\\alpha倍不会改变该向量 !!!非零!!! 的数目。因此,L1L1L^1范数经常作为表示非零元素数目的替代', 'time': '2017-01-25T10:06'} +{'user': 'acct:badpoem@hypothes.is', 'text': 'magnitude在这里写成大小就好了。翻译成幅度有些别扭。', 'origin_text': 'nfty范数,也被称为max 范数。这个范数表示向量中具有最大 !!!幅度!!! 的元素的绝对值:‖x‖∞=maxi|xi|.‖x‖∞=maxi', 'time': '2017-01-25T10:11'} +{'user': 'acct:badpoem@hypothes.is', 'text': '方阵', 'origin_text': 'iag}(\\Vv)\\Vx=\\Vv \\odot \\Vx。计算对角 !!!矩阵!!! 的逆矩阵也很高效。对角矩阵的逆矩阵存在,当且仅当对角元素都是非', 'time': '2017-01-25T10:16'} +{'user': 'acct:badpoem@hypothes.is', 'text': '在很多情况下', 'origin_text': 'iag}([1/v_1,\\dots,1/v_n]^\\top)。 !!!在很多情况!!! ,我们可以根据任意矩阵导出一些通用的机器学习算法;但通过将一些矩', 'time': '2017-01-25T10:17'} +{'user': 'acct:binfengjia@hypothes.is', 'text': '此处应该是第i个特征向量vi', 'origin_text': '察$\\MA$拉伸单位圆的方式,我们可以看到它能够将$\\Vv^{( !!!2)!!! }$方向的空间拉伸到$\\lambda_i$。\t}\\end{fig', 'time': '2017-01-25T15:01'} +{'user': 'acct:badpoem@hypothes.is', 'text': '产生', 'origin_text': '性而更好地理解,这些属性是通用的,而不是由我们选择表示它们的方式 !!!引起!!! 的。例如,整数可以分解为质数。我们可以用十进制或二进制', 'time': '2017-01-26T01:37'} +{'user': 'acct:badpoem@hypothes.is', 'text': '距离度量矩阵', 'origin_text': '函数生成元素时,对称矩阵经常会出现。例如,如果AA\\MA是一个 !!!表示距离的矩阵!!! ,Ai,jAi,j\\MA_{i,j}表示点iii到点jjj的距离', 'time': '2017-01-26T01:37'} +{'user': 'acct:badpoem@hypothes.is', 'text': '一组向量的线性组合', 'origin_text': 'equation}一般而言,这种操作被称为线性组合。形式上, !!!某个集合中向量的线性组合!!! ,是指每个向量乘以对应系数之后的和,即:∑iciv(i).∑i', 'time': '2017-01-26T01:37'} +{'user': 'acct:badpoem@hypothes.is', 'text': '质因数', 'origin_text': '不是由我们选择表示它们的方式引起的。例如,整数可以分解为 !!!质数!!! 。我们可以用十进制或二进制等不同方式表示整数121212,但质', 'time': '2017-01-26T01:46'} +{'user': 'acct:badpoem@hypothes.is', 'text': '但是12=2*3*3总是成立的', 'origin_text': '质数。我们可以用十进制或二进制等不同方式表示整数121212, !!!但质因数分解永远是对的12=2×3×3!!! 12=2×3×312=2\\times 3\\times 3。从这', 'time': '2017-01-26T01:48'} +{'user': 'acct:badpoem@hypothes.is', 'text': 'a left eigenvector 做特征向量', 'origin_text': 'bda被称为这个特征向量对应的特征值。(类似地,我们也可以定义 !!!左奇异向量!!! v⊤A=λv⊤v⊤A=λv⊤\\Vv^\\top\\MA=\\lamb', 'time': '2017-01-26T01:52'} +{'user': 'acct:badpoem@hypothes.is', 'text': 'right eigenvectors\n右特征向量', 'origin_text': 'op\\MA=\\lambda \\Vv^\\top,但是通常我们更关注 !!!右奇异向量!!! )。如果vv\\Vv是AA\\MA的特征向量,那么任何放缩后的向', 'time': '2017-01-26T01:52'} +{'user': 'acct:badpoem@hypothes.is', 'text': '连接成', 'origin_text': '_1, \\dots , \\lambda_n }。我们将特征向量 !!!连接!!! 一个矩阵,使得每一列是一个特征向量:V=[v(1),…,v(n)', 'time': '2017-01-26T02:04'} +{'user': 'acct:badpoem@hypothes.is', 'text': '特征分解存在,但是会涉及到复数', 'origin_text': '每一个矩阵都可以分解成特征值和特征向量。在某些情况下,特征分解 !!!会!!! 涉及到复数,而非实数。幸运的是,在本书中我们通常只需要探讨一类', 'time': '2017-01-26T02:07'} +{'user': 'acct:badpoem@hypothes.is', 'text': '分解', 'origin_text': '征分解会涉及到复数,而非实数。幸运的是,在本书中我们通常只需要 !!!探讨!!! 一类有简单分解的矩阵。具体地,每个实对称矩阵都可以分解成实特征', 'time': '2017-01-26T02:08'} +{'user': 'acct:badpoem@hypothes.is', 'text': '那么在由这些特征向量得到的生成子空间中', 'origin_text': '特征分解可能并不唯一。如果两个或多个特征向量拥有相同的特征值, !!!那么这组特征向量生成子空间中!!! ,任意一组正交向量都是该特征值对应的特征向量。因此,我们可以使', 'time': '2017-01-26T02:18'} +{'user': 'acct:badpoem@hypothes.is', 'text': '“不应该是作为Q的特征向量,而是直接构成Q啊”。\n我们可以等价地从这些特征向量中构成Q作为替代', 'origin_text': '成子空间中,任意一组正交向量都是该特征值对应的特征向量。因此, !!!我们可以使用任意一组正交向量作为QQ\\MQ的特征向量!!! 。按照惯例,我们通常按降序排列ΛΛ\\VLambda的条目。在', 'time': '2017-01-26T02:20'} +{'user': 'acct:badpoem@hypothes.is', 'text': '元素', 'origin_text': '的特征向量。按照惯例,我们通常按降序排列ΛΛ\\VLambda的 !!!条目!!! 。在该约定下,特征分解唯一当且仅当所有的特征值都是唯一的。', 'time': '2017-01-26T02:20'} +{'user': 'acct:badpoem@hypothes.is', 'text': '与特征分解同类型的信息', 'origin_text': ',将矩阵分解为奇异向量和奇异值。通过奇异值分解,我们会得到一些 !!!类似特征分解的信息!!! 。然而,奇异值分解有更广泛的应用。每个实数矩阵都有一个奇异值', 'time': '2017-01-26T02:34'} +{'user': 'acct:badpoem@hypothes.is', 'text': '定义', 'origin_text': '.\\end{equation}计算伪逆的实际算法没有基于这个 !!!式子!!! ,而是使用下面的公式:A+=VD+U⊤.A+=VD+U⊤.\\b', 'time': '2017-01-26T02:58'} +{'user': 'acct:badpoem@hypothes.is', 'text': '特别', 'origin_text': '的列数多于行数时,使用伪逆求解线性方程是众多可能解法中的一种。 !!!具体!!! 地,x=A+yx=A+y\\Vx=\\MA^+\\Vy是方程所有可行解', 'time': '2017-01-26T03:00'} +{'user': 'acct:badpoem@hypothes.is', 'text': '因为已经说没有解了,所以后面不应该说x是解。写作“通过伪逆得到的x使得Ax和y的欧几里得距离||Ax-y||2最小”', 'origin_text': '当矩阵AA\\MA的行数多于列数时,可能没有解。在这种情况下, !!!通过伪逆得到的xx\\Vx是使得AxAx\\MA\\Vx和yy\\Vy的欧几里得距离‖Ax−y‖2‖Ax−y‖2\\norm{\\MA\\Vx-\\Vy}_2最小的解!!! 。迹运算迹运算返回的是矩阵对角元素的和:Tr(A)=∑', 'time': '2017-01-26T03:05'} +{'user': 'acct:badpoem@hypothes.is', 'text': '有用', 'origin_text': '{i,i}.\\end{equation}迹运算因为很多原因而 !!!受到关注!!! 。若不使用求和符号,有些矩阵运算很难描述,而通过矩阵乘法和迹运', 'time': '2017-01-26T03:13'} +{'user': 'acct:badpoem@hypothes.is', 'text': 'a square matrix composed of many factors\n多个矩阵乘积得到的方阵的迹', 'origin_text': '=\\Tr(\\MA^\\top).\\end{equation} !!!多个矩阵乘积的迹!!! ,和将这些矩阵中最后一个挪到最前面之后乘积的迹是相同的。当然,', 'time': '2017-01-26T03:26'} +{'user': 'acct:badpoem@hypothes.is', 'text': '因为这里只有一个矩阵,所以没有相乘。改为“参与矩阵乘法”', 'origin_text': '。行列式等于矩阵特征值的乘积。行列式的绝对值可以用来衡量矩阵 !!!相乘!!! 后空间扩大或者缩小了多少。如果行列式是000,那么空间至少沿着', 'time': '2017-01-26T03:32'} +{'user': 'acct:badpoem@hypothes.is', 'text': '参与矩阵乘法', 'origin_text': '完全收缩了,使其失去了所有的体积。如果行列式是111,那么矩阵 !!!相乘!!! 没有改变空间体积。实例:主成分分析主成分分析是一个简单的', 'time': '2017-01-26T03:32'} +{'user': 'acct:badpoem@hypothes.is', 'text': '这里有一个问题,不是翻译上的而是叙述上的。按照之前正交矩阵的定义,列向量之间不仅需要是正交的,而且应该是标准正交的。那这样的话这里即使l=n 也并非正交矩阵啊', 'origin_text': '了使编码问题简单一些,PCA限制DD\\MD的列向量为彼此正交的( !!!注意,除非l=nl=nl=n,否则严格上DD\\MD不是一个正交矩阵!!! )。目前为止所描述的问题,可能会有多个解。因为如果我们按比', 'time': '2017-01-26T03:46'} +{'user': 'acct:badpoem@hypothes.is', 'text': 'turn into 变为', 'origin_text': '们限制DD\\MD中所有列向量都有单位范数。为了将这个基本想法 !!!放进!!! 我们能够实现的算法,首先我们需要明确如何根据每一个输入xx\\Vx', 'time': '2017-01-26T03:48'} +{'user': 'acct:badpoem@hypothes.is', 'text': '向量微积分', 'origin_text': 'c^\\top\\Vc\\end{equation}我们可以通过 !!!线性代数微积分!!! 来求解这个最优化问题(如果你不清楚怎么做,请参考\\sec?)∇', 'time': '2017-01-26T03:54'} +{'user': 'acct:badpoem@hypothes.is', 'text': ' such that 使得', 'origin_text': 'etR^{m\\times n}是将描述点的向量堆叠在一起的矩阵, !!!例如!!! Xi,:=x(i)⊤Xi,:=x(i)⊤\\MX_{i,:}=\\V', 'time': '2017-01-26T04:03'} +{'user': 'acct:badpoem@hypothes.is', 'text': '概率论', 'origin_text': '的基础数学学科之一。另一门在机器学习中无处不在的重要数学学科是 !!!概率学!!! ,我们将在下章探讨。 ', 'time': '2017-01-26T04:10'} +{'user': 'acct:badpoem@hypothes.is', 'text': '此处应该是i,而不是2', 'origin_text': '察$\\MA$拉伸单位圆的方式,我们可以看到它能够将$\\Vv^{( !!!2!!! )}$方向的空间拉伸到$\\lambda_i$。\t}\\end{fi', 'time': '2017-01-26T04:15'} +{'user': 'acct:badpoem@hypothes.is', 'text': '应该是拉伸了lamda_i倍', 'origin_text': '位圆的方式,我们可以看到它能够将$\\Vv^{(2)}$方向的空间 !!!拉伸到$\\lambda_i$!!! 。\t}\\end{figure}\\begin{figure}[!h', 'time': '2017-01-26T04:15'} +{'user': 'acct:badpoem@hypothes.is', 'text': '此处集中写一个不归属于翻译问题的错误。是式子(如定义、定理)等的索引。在v4.0-alpha中,有一些索引出了问题,比如图2,2被建立了索引,这是不应该的,再比如式子2.80的上一行提到了式2.55,但是这个索引是不对的,应该是2.52。并且现在的索引和原书中也不完全一致。因为这个问题比较大,而且涉及比较多,所以于此统一指出,而不在后面细究每一个索引是否有问题。', 'origin_text': ' !!!线性代数!!! 作为数学的一个分支,广泛用于科学和工程中。然而,因为线性代数主', 'time': '2017-01-26T06:07'} +{'user': 'acct:showgood163@hypothes.is', 'text': '在原本中,标量是小写字母,矢量是小写加粗字母,矩阵是大写斜体字母,张量是大写正体字母。在译文中,格式不太合适。', 'origin_text': '本章跳过了很多重要但是对于理解深度学习非必需的线性代数知识。 !!!标量、向量、矩阵和张量!!! 学习线性代数,会涉及以下几个数学概念: 标量:一个标', 'time': '2017-02-07T02:58'} +{'user': 'acct:angrymidiao@hypothes.is', 'text': '“', 'origin_text': '确它们是哪种类型的数。 比如,在定义实数标量时,我们可能会说 !!!”!!! 让s∈ℝs∈R\\Ss \\in \\SetR表示一条线的斜率”;在定', 'time': '2017-02-09T13:08'} +{'user': 'acct:angrymidiao@hypothes.is', 'text': '“', 'origin_text': ' \\SetR表示一条线的斜率”;在定义自然数标量时,我们可能会说 !!!”!!! 让n∈ℕn∈N\\Sn\\in\\SetN表示元素的数目”。', 'time': '2017-02-09T13:08'} +{'user': 'acct:angrymidiao@hypothes.is', 'text': 'i行j列', 'origin_text': 'MA)_{i,j}表示函数fff作用在AA\\MA上输出的矩阵的第 !!!(i,j)(i,j)(i,j)!!! 个元素。 张量:在某些情况下,我们会讨论不只', 'time': '2017-02-09T13:18'} +{'user': 'acct:angrymidiao@hypothes.is', 'text': '合理', 'origin_text': 'A和BB\\MB的矩阵乘积是第三个矩阵CC\\MC。为了使乘法定义 !!!良好!!! ,矩阵AA\\MA的列数必须和矩阵BB\\MB的行数相等。如果矩阵', 'time': '2017-02-09T13:24'} +{'user': 'acct:angrymidiao@hypothes.is', 'text': '在放缩后的末尾', 'origin_text': '及到xx\\Vx中每个元素的放缩,如果DD\\MD是瘦长型矩阵,那么 !!!放缩后末尾!!! 添加一些零;如果DD\\MD是胖宽型矩阵,那么放缩后去掉最后一些元', 'time': '2017-02-09T14:34'} +{'user': 'acct:angrymidiao@hypothes.is', 'text': '在放缩后', 'origin_text': '矩阵,那么放缩后末尾添加一些零;如果DD\\MD是胖宽型矩阵,那么 !!!放缩后!!! 去掉最后一些元素。对称矩阵是转置和自己相等的矩阵:A=', 'time': '2017-02-09T14:34'} +{'user': 'acct:zhzhang@hypothes.is', 'text': '一个二', 'origin_text': 'Sx_6外所有元素构成的向量。 矩阵:矩阵是 !!!二!!! 维数组,其中的每一个元素被两个索引而非一个所确定。 我们通常', 'time': '2017-02-11T17:58'} +{'user': 'acct:zhzhang@hypothes.is', 'text': '令', 'origin_text': '它们是哪种类型的数。 比如,在定义实数标量时,我们可能会说” !!!让!!! s∈Rs∈R\\Ss \\in \\SetR表示一条线的斜率”;在定义', 'time': '2017-02-11T20:09'} +{'user': 'acct:zhzhang@hypothes.is', 'text': '令', 'origin_text': '\\SetR表示一条线的斜率”;在定义自然数标量时,我们可能会说” !!!让!!! n∈Nn∈N\\Sn\\in\\SetN表示元素的数目”。', 'time': '2017-02-11T20:10'} +{'user': 'acct:zhzhang@hypothes.is', 'text': '“-”', 'origin_text': 'S={1,3,6},然后写作xSxS\\Vx_S。我 们用符号 !!!−!!! −-表示集合的补集中的索引。 比如x−1x−1\\Vx_{-1', 'time': '2017-02-11T20:12'} + +============================= Replies ============================= + +{'user': 'acct:badpoem@hypothes.is', 'text': '好的。那这样翻译为多值矩阵就没问题了。', 'time': '2017-03-01T01:44'} +{'user': 'acct:liber145@hypothes.is', 'text': '额,我觉得原文是想说 求解式2.11式,矩阵A是固定的,它比较难解的原因在于A有多个数(如果是一元一次方程的话,那就不需要矩阵逆这样的操作了),而矩阵逆可以轻松解决这个问题。 如果注重A是非固定的,可以有其他可能取值,感觉没有表达这个意思。。', 'time': '2017-02-28T17:11'} +{'user': 'acct:liber145@hypothes.is', 'text': '好的,改成你那样的。', 'time': '2017-02-28T16:54'} +{'user': 'acct:liber145@hypothes.is', 'text': '刚看到邮件,才发现你已经回复了!', 'time': '2017-02-28T16:51'} +{'user': 'acct:badpoem@hypothes.is', 'text': '嗯呐 我觉得交换顺序了就没问题了 有了单位范数和彼此正交的限制,这里的“否则”二字才能成立', 'time': '2017-02-28T06:56'} +{'user': 'acct:badpoem@hypothes.is', 'text': '是因为当时我在理解的时候花了一些时间,所以我修改的目的在于强调这个“生成子空间”是由提到的拥有相同特征值的向量得到的。这样子', 'time': '2017-02-28T06:50'} +{'user': 'acct:badpoem@hypothes.is', 'text': 'allows us to analytically solve equation 2.11 for many values of A 原文是这样的。所以我的理解还是在于A有多种可能的取值。', 'time': '2017-02-28T06:46'} +{'user': 'acct:badpoem@hypothes.is', 'text': '我觉得我对张量的理解好像有一点问题TAT。就按照你提出这个吧', 'time': '2017-02-28T06:42'} +{'user': 'acct:badpoem@hypothes.is', 'text': '我觉得这样表达就没问题了。因为后面有使用集合来指代这里的a set of elements 所以我按照那个样子断句的。', 'time': '2017-02-28T06:35'} +{'user': 'acct:liber145@hypothes.is', 'text': '嗯,顺序上有些问题。紧接着下面一段提到了D中向量是单位向量。这两个限制条件是独立的。\n\n现打算将这两段换个先后顺序,你看如何。', 'time': '2017-02-28T04:53'} +{'user': 'acct:liber145@hypothes.is', 'text': '赞!多谢细致地帮忙校对,真是太感谢了!', 'time': '2017-02-28T04:34'} +{'user': 'acct:liber145@hypothes.is', 'text': '噢!对的。多谢指正啊!', 'time': '2017-02-28T04:05'} +{'user': 'acct:liber145@hypothes.is', 'text': '感觉直接说 一个向量集的生成子空间 挺顺的。暂时打算翻译为 “那么在这组特征向量的生成子空间中 ”,或者你有什么其他看法。', 'time': '2017-02-28T04:03'} +{'user': 'acct:liber145@hypothes.is', 'text': '赞语序!', 'time': '2017-02-28T03:21'} +{'user': 'acct:liber145@hypothes.is', 'text': '嗯,我觉得这里只是说明 A 作为矩阵,含有很多个数。', 'time': '2017-02-28T03:18'} +{'user': 'acct:liber145@hypothes.is', 'text': '这个翻译得比之前好多啦!', 'time': '2017-02-28T03:02'} +{'user': 'acct:liber145@hypothes.is', 'text': '嗯,单独翻译感觉这样挺好的。那块前面有个 array 我给翻译成 数组 了,所以这里也想用数组。\n\n现打算翻译成“一个数组的元素”,你看这样如何。', 'time': '2017-02-28T03:00'} +{'user': 'acct:liber145@hypothes.is', 'text': '额,这里断句不太一样,我偏向于 a set of elements | of | a vector,你的好像是 a set | of | elements of a vector. \n\n现打算翻译为“有时我们需要指定向量中的一些元素”,你看如何。', 'time': '2017-02-28T02:34'} +{'user': 'acct:liber145@hypothes.is', 'text': '好的,谢啦!', 'time': '2017-02-08T01:58'} +{'user': 'acct:liber145@hypothes.is', 'text': '嗯,字体格式也是需要注意的。可以具体说下哪些地方需要修改的么,我一时半会儿没找到。', 'time': '2017-02-08T01:50'} +{'user': 'acct:liber145@hypothes.is', 'text': '好的。', 'time': '2017-02-08T01:40'} +{'user': 'acct:liber145@hypothes.is', 'text': '赞!', 'time': '2017-02-08T01:39'} +{'user': 'acct:liber145@hypothes.is', 'text': 'OK,谢谢啦!新版英文中缩了一个式子,tex版本中已修正过来。', 'time': '2017-02-08T01:38'} \ No newline at end of file diff --git a/Chapter2/linear_algebra.tex b/Chapter2/linear_algebra.tex index 39f1320..5ce39c5 100644 --- a/Chapter2/linear_algebra.tex +++ b/Chapter2/linear_algebra.tex @@ -22,7 +22,7 @@ \section{标量、向量、矩阵和张量} 学习线性代数,会涉及以下几类数学概念: \begin{itemize} - \item \firstgls{scalar}:一个标量就是一个单独的数,不同于线性代数中大部分概念通常是多个数字的序列。 + \item \firstgls{scalar}:一个标量就是一个单独的数,它不同于线性代数中研究的其他大部分对象(通常是多个数的数组)。 我们用斜体表示标量。标量通常被赋予小写的变量名称。 当我们介绍标量时,会明确它们是哪种类型的数。 比如,在定义实数标量时,我们可能会说``令$\Ss \in \SetR$表示一条线的斜率'';在定义自然数标量时,我们可能会说``令$\Sn\in\SetN$表示元素的数目''。 @@ -36,8 +36,8 @@ \section{标量、向量、矩阵和张量} 向量中的元素可以通过带脚标的斜体表示。 向量$\Vx$的第一个元素是$\Sx_1$,第二个元素是$\Sx_2$,等等。 我们也会注明存储在向量中的元素是什么类型的。 - 如果每个元素都属于$\SetR$,并且该向量有$\Sn$个元素,那么该向量属于实数集$\SetR$的$\Sn$次笛卡尔乘积构成的集合,表示为$\SetR^n$。 - 当我们需要明确表示向量中的元素时,我们会将元素排列成一个方括号包围的纵柱: + 如果每个元素都属于$\SetR$,并且该向量有$\Sn$个元素,那么该向量属于实数集$\SetR$的$\Sn$次笛卡尔乘积构成的集合,记为$\SetR^n$。 + 当我们需要明确表示向量中的元素时,我们会将元素排列成一个方括号包围的纵列: \begin{equation} \Vx=\begin{bmatrix} \Sx_1 \\ \Sx_2 \\ @@ -45,9 +45,9 @@ \section{标量、向量、矩阵和张量} \Sx_n \end{bmatrix}. \end{equation} - 我们可以把向量看作空间中的点,每个元素是不同的坐标轴上的坐标。 + 我们可以把向量看作空间中的点,每个元素是不同坐标轴上的坐标。 - 有时我们需要指定向量中的一些元素。 + 有时我们需要\gls{index}向量中的一些元素。 在这种情况下,我们定义一个包含这些元素\gls{index}的集合,然后将该集合写在脚标处。 比如,指定$\Sx_1$,$\Sx_3$和$\Sx_6$,我们定义集合$S=\{1,3,6\}$,然后写作$\Vx_S$。我 们用符号-表示集合的补集中的\gls{index}。 @@ -60,8 +60,8 @@ \section{标量、向量、矩阵和张量} 比如,$\SA_{1,1}$表示$\MA$左上的元素,$\SA_{m,n}$表示$\MA$右下的元素。 我们通过用``:''表示水平坐标,以表示垂直坐标$\Si$中的所有元素。 比如,$\MA_{i,:}$表示$\MA$中垂直坐标$i$上的一横排元素。 - 这也被称为$\MA$的第$i$\firstgls{row}。 - 同样地,$\MA_{:,i}$表示$\MA$的第$i$\firstgls{column}。 + 这也被称为$\MA$的第$i$~\firstgls{row}。 + 同样地,$\MA_{:,i}$表示$\MA$的第$i$~\firstgls{column}。 当我们需要明确表示矩阵中的元素时,我们将它们写在用方括号包围起来的数组中: \begin{equation} \begin{bmatrix} @@ -75,9 +75,9 @@ \section{标量、向量、矩阵和张量} % -- 30 -- - \item \firstgls{tensor}:在某些情况下,我们会讨论不只两维坐标的数组。 + \item \firstgls{tensor}:在某些情况下,我们会讨论坐标超过两维的数组。 一般地,一个数组中的元素分布在若干维坐标的规则网格中,我们将其称之为张量。 - 我们使用这种字体$\TSA$来表示张量``A''。 + 我们使用字体$\TSA$来表示张量``A''。 张量$\TSA$中坐标为$(i,j,k)$的元素记作$\TEA_{i,j,k}$。 \end{itemize} @@ -114,7 +114,7 @@ \section{标量、向量、矩阵和张量} 两个矩阵相加是指对应位置的元素相加,比如$\MC=\MA+\MB$,其中$\SC_{i,j}= \SA_{i,j}+\SB_{i,j}$。 -标量和矩阵相乘,或是和矩阵相加时,我们将其与矩阵的每个元素相乘或相加,比如$\MD = \Sa \cdot \MB + \Sc$,其中$\SD_{i,j} = \Sa\cdot \SB_{i,j} + \Sc$。 +标量和矩阵相乘,或是和矩阵相加时,我们只需将其与矩阵的每个元素相乘或相加,比如$\MD = \Sa \cdot \MB + \Sc$,其中$\SD_{i,j} = \Sa\cdot \SB_{i,j} + \Sc$。 在深度学习中,我们也使用一些不那么常规的符号。 @@ -146,7 +146,7 @@ \section{矩阵和向量相乘} 需要注意的是,两个矩阵的标准乘积\emph{不是}指两个矩阵中对应元素的乘积。 -不过,那样的矩阵操作确实是存在的,被称为\firstgls{element_wise_product}或者\firstgls{hadamard_product},表示为$\MA\odot\MB$。 +不过,那样的矩阵操作确实是存在的,被称为\firstgls{element_wise_product}或者\firstgls{hadamard_product},记为$\MA\odot\MB$。 两个相同维数的向量$\Vx$和$\Vy$的\firstgls{dot_product}可看作是矩阵乘积$\Vx^\top\Vy$。 @@ -155,16 +155,10 @@ \section{矩阵和向量相乘} 矩阵乘积运算有许多有用的性质,从而使矩阵的数学分析更加方便。 比如,矩阵乘积服从分配律: - - \begin{equation} \MA(\MB+\MC)=\MA\MB +\MA\MC. \end{equation} - - 矩阵乘积也服从结合律: - - \begin{equation} \MA(\MB\MC)=(\MA\MB)\MC. \end{equation} @@ -173,10 +167,8 @@ \section{矩阵和向量相乘} % -- 32 -- -不同于标量乘积,矩阵乘积并不满足交换律($\MA\MB=\MB\MA$的情况并非总是满足)。 +不同于标量乘积,矩阵乘积\emph{并不}满足交换律($\MA\MB=\MB\MA$的情况并非总是满足)。 然而,两个向量的\firstgls{dot_product}满足交换律: - - \begin{equation} \label{eq:2.8} \Vx^\top\Vy=\Vy^\top\Vx. @@ -184,13 +176,9 @@ \section{矩阵和向量相乘} 矩阵乘积的转置有着简单的形式: - - \begin{equation} (\MA\MB)^\top=\MB^\top\MA^\top. \end{equation} - - 利用向量乘积是标量,标量转置是自身的事实,我们可以证明\eqnref{eq:2.8}: \begin{equation} \Vx^\top \Vy = \left(\Vx^\top \Vy \right)^\top = \Vy^\top \Vx. @@ -201,8 +189,6 @@ \section{矩阵和向量相乘} 现在我们已经知道了足够多的线性代数符号,可以表达下列线性方程组: - - \begin{equation} \label{eq:2.11} \MA\Vx=\Vb @@ -237,7 +223,8 @@ \section{单位矩阵和逆矩阵} \label{sec:identity_and_inverse_atrices} -线性代数提供了被称为\firstgls{matrix_inverse}的强大工具,使我们能够解析地求解具有多值矩阵$\MA$的\eqnref{eq:2.11}。 +线性代数提供了被称为\firstgls{matrix_inverse}的强大工具。 +对于大多数矩阵$\MA$,我们都能通过\gls{matrix_inverse}解析地求解\eqnref{eq:2.11}。 为了描述矩阵逆,我们首先需要定义\firstgls{identity_matrix}的概念。 @@ -247,11 +234,8 @@ \section{单位矩阵和逆矩阵} \begin{equation} \forall \Vx \in \SetR^{\Sn}, \MI_{\Sn} \Vx = \Vx. \end{equation} - - 单位矩阵的结构很简单:所有沿主对角线的元素都是$1$,而所有其他位置的元素都是$0$。 -如\figref{fig:chap2_empty2}所示。 - +如\figref{fig:chap2_empty2}所示的例子。 \begin{figure}[!htb] \ifOpenSource \centerline{\includegraphics{figure.pdf}} @@ -270,8 +254,9 @@ \section{单位矩阵和逆矩阵} \end{figure} -矩阵$\MA$的\firstgls{matrix_inverse}记作$\MA^{-1}$,定义为如下的矩阵 +矩阵$\MA$的\firstgls{matrix_inverse}记作$\MA^{-1}$,其定义的矩阵满足如下条件 \begin{equation} \MA^{-1}\MA = \MI_{\Sn}. \end{equation} + 现在我们可以通过以下步骤求解\eqnref{eq:2.11}: \begin{gather} \MA\Vx=\Vb \\ @@ -281,7 +266,7 @@ \section{单位矩阵和逆矩阵} \end{gather} -当然,这取决于能否找到一个逆矩阵$\MA^{-1}$。 +当然,这取决于我们能否找到一个逆矩阵$\MA^{-1}$。 在接下来的章节中,我们会讨论逆矩阵$\MA^{-1}$存在的条件。 @@ -308,7 +293,7 @@ \section{线性相关和生成子空间} 为了分析方程有多少个解,我们可以将$\MA$的列向量看作是从\firstgls{origin}(元素都是零的向量)出发的不同方向,确定有多少种方法可以到达向量$\Vb$。 -在这个观点中,向量$\Vx$中的每个元素表示我们应该沿着这些方向走多远,即$\Sx_{\Si}$表示我们需要沿着第$\Si$个向量的方向走多远: +在这个观点下,向量$\Vx$中的每个元素表示我们应该沿着这些方向走多远,即$\Sx_{\Si}$表示我们需要沿着第$\Si$个向量的方向走多远: \begin{equation} \MA \Vx = \sum_i x_i \MA_{:,i}. \end{equation} @@ -324,7 +309,7 @@ \section{线性相关和生成子空间} 这个特殊的\gls{span}被称为$\MA$的\firstgls{column_space}或者$\MA$的\firstgls{range}。 -为了让方程$\MA \Vx=\Vb$对于任意的向量$\Vb \in \SetR^m$都有解的话,我们要求$\MA$的列空间构成整个$\SetR^{\Sm}$。 +为了使方程$\MA \Vx=\Vb$对于任意向量$\Vb \in \SetR^m$都存在解,我们要求$\MA$的列空间构成整个$\SetR^{\Sm}$。 如果$\SetR^m$中的某个点不在$\MA$的列空间中,那么该点对应的$\Vb$会使得该方程没有解。 矩阵$\MA$的列空间是整个$\SetR^m$的要求,意味着$\MA$至少有$m$列,即$n\geq m$。 否则,$\MA$列空间的维数会小于$m$。 @@ -345,7 +330,7 @@ \section{线性相关和生成子空间} 换言之,虽然该矩阵有$2$列,但是它的列空间仍然只是一条线,不能涵盖整个$\SetR^2$空间。 -正式地,这种冗余被称为\firstgls{linear_dependence}。 +正式地说,这种冗余被称为\firstgls{linear_dependence}。 如果一组向量中的任意一个向量都不能表示成其他向量的线性组合,那么这组向量被称为\firstgls{linearly_independent}。 如果某个向量是一组向量中某些向量的线性组合,那么我们将这个向量加入到这组向量后不会增加这组向量的\gls{span}。 这意味着,如果一个矩阵的\gls{column_space}涵盖整个$\SetR^m$,那么该矩阵必须包含至少一组$m$个线性无关的向量。 @@ -393,7 +378,7 @@ \section{范数} 范数(包括$L^p$范数)是将向量映射到非负值的函数。 -直观上来说,向量$\Vx$的范数是衡量从原点到点$\Vx$的距离。 +直观上来说,向量$\Vx$的范数衡量从原点到点$\Vx$的距离。 更严格地说,范数是满足下列性质的任意函数: \begin{itemize} \item $f(\Vx) = 0 \Rightarrow \Vx = \mathbf{0}$ @@ -404,15 +389,15 @@ \section{范数} 当$p=2$时,$L^2$范数被称为\firstgls{euclidean_norm}。 它表示从原点出发到向量$\Vx$确定的点的欧几里得距离。 -$L^2$范数十分频繁地出现在机器学习中,经常简化表示为$\norm{x}$,略去了下标$2$。 +$L^2$范数在机器学习中出现地十分频繁,经常简化表示为$\norm{x}$,略去了下标$2$。 平方$L^2$范数也经常用来衡量向量的大小,可以简单地通过\gls{dot_product} $\Vx^\top\Vx$计算。 平方$L^2$范数在数学和计算上都比$L^2$范数本身更方便。 例如,平方$L^2$范数对$\Vx$中每个元素的导数只取决于对应的元素,而$L^2$范数对每个元素的导数却和整个向量相关。 但是在很多情况下,平方$L^2$范数也可能不受欢迎,因为它在原点附近增长得十分缓慢。 -在某些机器学习应用中,区分恰好是零的元素和非零小值的元素是很重要的。 -在这些情况下,我们转向使用在各个位置斜率相同,同时保持简单的数学形式的函数:$L^1$范数。 +在某些机器学习应用中,区分恰好是零的元素和非零但值很小的元素是很重要的。 +在这些情况下,我们转而使用在各个位置斜率相同,同时保持简单的数学形式的函数:$L^1$范数。 $L^1$范数可以简化如下: \begin{equation} \norm{\Vx}_1 = \sum_i |x_i|. @@ -423,7 +408,7 @@ \section{范数} 有时候我们会统计向量中非零元素的个数来衡量向量的大小。 有些作者将这种函数称为``$L^0$范数'',但是这个术语在数学意义上是不对的。 -向量的非零元素的数目不是范数,因为对向量放缩$\alpha$倍不会改变该向量非零元素的数目。 +向量的非零元素的数目不是范数,因为对向量缩放$\alpha$倍不会改变该向量非零元素的数目。 因此,$L^1$范数经常作为表示非零元素数目的替代函数。 @@ -431,20 +416,20 @@ \section{范数} % -- 37 -- -另外一个经常在机器学习中出现的范数是$L^\infty$范数,也被称为\firstgls{max_norm}。 -这个范数表示向量中具有最大大小的元素的绝对值: +另外一个经常在机器学习中出现的范数是$L^\infty$范数,也被称为~\firstgls{max_norm}。 +这个范数表示向量中具有最大幅值的元素的绝对值: \begin{equation} \norm{\Vx}_\infty = \max_i |x_i|. \end{equation} -有时候我们可能也需要衡量矩阵的大小。 +有时候我们可能也希望衡量矩阵的大小。 在深度学习中,最常见的做法是使用\firstgls{frobenius_norm}, \begin{equation} \norm{\MA}_F = \sqrt{\sum_{i,j} A_{i,j}^2}, %%lyj 原文是\norm{A}_F ... \end{equation} -类似于向量的$L^2$范数。 +其类似于向量的$L^2$范数。 两个向量的\firstgls{dot_product}可以用范数来表示。 @@ -467,18 +452,18 @@ \section{特殊类型的矩阵和向量} 形式上,矩阵$\MD$是对角矩阵,当且仅当对于所有的$i\neq j$,$\SD_{i,j}=0$。 我们已经看到过一个对角矩阵:单位矩阵,对角元素全部是$1$。 我们用$\text{diag}(\Vv)$表示一个对角元素由向量$\Vv$中元素给定的对角方阵。 -对角矩阵受到关注,部分原因是对角矩阵的乘法计算很高效。 +对角矩阵受到关注的部分原因是对角矩阵的乘法计算很高效。 计算乘法$\text{diag}(\Vv)\Vx$,我们只需要将$\Vx$中的每个元素$x_i$放大$v_i$倍。 换言之,$\text{diag}(\Vv)\Vx=\Vv \odot \Vx$。 计算对角方阵的逆矩阵也很高效。 对角方阵的逆矩阵存在,当且仅当对角元素都是非零值,在这种情况下,$\text{diag}(\Vv)^{-1}=\text{diag}([1/v_1,\dots,1/v_n]^\top)$。 -在很多情况下,我们可以根据任意矩阵导出一些通用的机器学习算法;但通过将一些矩阵限制为对角矩阵,我们可以得到计算代价较低的(并且描述语言较少的)算法。 +在很多情况下,我们可以根据任意矩阵导出一些通用的机器学习算法;但通过将一些矩阵限制为对角矩阵,我们可以得到计算代价较低的(并且简明扼要的)算法。 不是所有的对角矩阵都是方阵。 长方形的矩阵也有可能是对角矩阵。 -长方形对角矩阵没有逆矩阵,但我们仍然可以很快地计算它们的乘法。 -对于一个长方形对角矩阵$\MD$而言,乘法$\MD\Vx$会涉及到$\Vx$中每个元素的放缩,如果$\MD$是瘦长型矩阵,那么在放缩后的末尾添加一些零;如果$\MD$是胖宽型矩阵,那么在放缩后去掉最后一些元素。 +非方阵的对角矩阵没有逆矩阵,但我们仍然可以高效地计算它们的乘法。 +对于一个长方形对角矩阵$\MD$而言,乘法$\MD\Vx$会涉及到$\Vx$中每个元素的缩放,如果$\MD$是瘦长型矩阵,那么在缩放后的末尾添加一些零;如果$\MD$是胖宽型矩阵,那么在缩放后去掉最后一些元素。 % -- 38 -- @@ -503,7 +488,7 @@ \section{特殊类型的矩阵和向量} 如果这些向量不仅互相正交,并且范数都为$1$,那么我们称它们是\firstgls{orthonormal}。 -\firstgls{orthogonal_matrix}是指行向量是标准正交的,列向量是标准正交的方阵: +\firstgls{orthogonal_matrix}是指行向量和列向量是分别标准正交的方阵: \begin{equation} \MA^\top\MA=\MA\MA^\top=\MI. \end{equation} @@ -512,7 +497,7 @@ \section{特殊类型的矩阵和向量} \MA^{-1}=\MA^\top, \end{equation} 所以正交矩阵受到关注是因为求逆计算代价小。 -需要注意正交矩阵的定义。 +我们需要注意正交矩阵的定义。 反直觉地,正交矩阵的行向量不仅是正交的,还是标准正交的。 对于行向量或列向量互相正交但不是标准正交的矩阵没有对应的专有术语。 @@ -537,7 +522,7 @@ \section{\glsentrytext{eigendecomposition}} \firstgls{eigendecomposition}是使用最广的矩阵分解之一,即我们将矩阵分解成一组特征向量和特征值。 -方阵$\MA$的\firstgls{eigenvector}是指与$\MA$相乘后相当于对该向量进行放缩的非零向量$\Vv$: +方阵$\MA$的\firstgls{eigenvector}是指与$\MA$相乘后相当于对该向量进行缩放的非零向量$\Vv$: \begin{equation} \MA\Vv=\lambda \Vv. \end{equation} @@ -545,13 +530,13 @@ \section{\glsentrytext{eigendecomposition}} (类似地,我们也可以定义\firstgls{left_Evector} $\Vv^\top\MA=\lambda \Vv^\top$,但是通常我们更关注\firstgls{right_Evector})。 -如果$\Vv$是$\MA$的特征向量,那么任何放缩后的向量$s\Vv$($s\in \SetR$,$s\neq 0$)也是$\MA$的特征向量。 +如果$\Vv$是$\MA$的特征向量,那么任何缩放后的向量$s\Vv$~($s\in \SetR$,$s\neq 0$)也是$\MA$的特征向量。 此外,$s\Vv$和$\Vv$有相同的特征值。 基于这个原因,通常我们只考虑单位特征向量。 假设矩阵$\MA$有$n$个线性无关的特征向量$\{\Vv^{(1)}, \dots, \Vv^{(n)}\}$,对应着特征值$\{\lambda_1, \dots , \lambda_n \}$。 -我们将特征向量连接成一个矩阵,使得每一列是一个特征向量:$V=[\Vv^{(1)}, \dots, \Vv^{(n)}]$. +我们将特征向量连接成一个矩阵,使得每一列是一个特征向量:$\MV=[\Vv^{(1)}, \dots, \Vv^{(n)}]$. 类似地,我们也可以将特征值连接成一个向量$\Vlambda = [\lambda_1, \dots , \lambda_n]^\top$。 因此$\MA$的\firstgls{eigendecomposition}可以记作 \begin{equation} @@ -574,13 +559,13 @@ \section{\glsentrytext{eigendecomposition}} 其中$\MQ$是$\MA$的特征向量组成的正交矩阵,$\VLambda$是对角矩阵。 特征值$\Lambda_{i,i}$对应的特征向量是矩阵$\MQ$的第$i$列,记作$\MQ_{:,i}$。 因为$\MQ$是正交矩阵,我们可以将$\MA$看作是沿方向$\Vv^{(i)}$延展$\lambda_i$倍的空间。 -如\figref{fig:chap2_eigen_ellipse}所示。 +如\figref{fig:chap2_eigen_ellipse}所示的例子。 % -- 40 -- 虽然任意一个实对称矩阵$\MA$都有特征分解,但是特征分解可能并不唯一。 如果两个或多个特征向量拥有相同的特征值,那么在这些特征向量的生成子空间中,任意一组正交向量都是该特征值对应的特征向量。 -因此,我们可以等价地从这些特征向量中构成$\MQ$作为替代。 +因此,我们可以等价地使用这些特征向量构成$\MQ$作为替代。 按照惯例,我们通常按降序排列$\VLambda$的元素。 在该约定下,特征分解唯一当且仅当所有的特征值都是唯一的。 @@ -618,12 +603,12 @@ \section{\glsentrytext{eigendecomposition}} -\section{\gls{SVD}} +\section{\glsentrytext{SVD}} \label{sec:singular_value_decomposition} 在\secref{sec:eigendecomposition},我们探讨了如何将矩阵分解成特征向量和特征值。 还有另一种分解矩阵的方法,被称为\firstall{SVD},将矩阵分解为\firstgls{Svector}和\firstgls{Svalue}。 -通过\gls{SVD},我们会得到一些与\gls{eigendecomposition}同类型的信息。 +通过\gls{SVD},我们会得到一些与\gls{eigendecomposition}相同类型的信息。 然而,\gls{SVD}有更广泛的应用。 每个实数矩阵都有一个\gls{SVD},但不一定都有\gls{eigendecomposition}。 例如,非方阵的矩阵没有\gls{eigendecomposition},这时我们只能使用\gls{SVD}。 @@ -645,12 +630,12 @@ \section{\gls{SVD}} % -- 42 -- -这些矩阵每一个都拥有特殊的结构。 -矩阵$\MU$和$\MV$都是正交矩阵,矩阵$\MD$是对角矩阵。 +这些矩阵中的每一个经定义后都拥有特殊的结构。 +矩阵$\MU$和$\MV$都被定义为正交矩阵,而矩阵$\MD$被定义为对角矩阵。 注意,矩阵$\MD$不一定是方阵。 -对角矩阵$\MD$对角线上的元素被称为矩阵$\MA$的\gls{Svalue}。 +对角矩阵$\MD$对角线上的元素被称为矩阵$\MA$的\firstgls{Svalue}。 矩阵$\MU$的列向量被称为\firstgls{left_Svector},矩阵$\MV$的列向量被称\firstgls{right_Svector}。 @@ -678,14 +663,14 @@ \section{\glsentrytext{Moore}} \begin{equation} \Vx=\MB\Vy. \end{equation} -是否存在一个唯一的映射,将$\MA$映射到$\MB$,取决于问题的形式。 +取决于问题的形式,我们可能无法设计一个唯一的映射将$\MA$映射到$\MB$。 如果矩阵$\MA$的行数大于列数,那么上述方程可能没有解。 如果矩阵$\MA$的行数小于列数,那么上述矩阵可能有多个解。 -\firstgls{Moore}使我们能够解决这类问题。 +\firstgls{Moore}使我们在这类问题上取得了一定的进展。 矩阵$\MA$的伪逆定义为: \begin{equation} \MA^+ = \lim_{a \searrow 0} (\MA^\top\MA + \alpha \MI)^{-1} \MA^\top. @@ -726,20 +711,21 @@ \section{迹运算} \end{equation} -用迹运算表示表达式,我们可以使用很多有用的等式来操纵表达式。 +用迹运算表示表达式,我们可以使用很多有用的等式巧妙地处理表达式。 例如,迹运算在转置运算下是不变的: \begin{equation} \Tr(\MA)=\Tr(\MA^\top). \end{equation} -多个矩阵乘积得到的方阵的迹,和将这些矩阵中最后一个挪到最前面之后乘积的迹是相同的。 +多个矩阵相乘得到的方阵的迹,和将这些矩阵中的最后一个挪到最前面之后相乘的迹是相同的。 当然,我们需要考虑挪动之后矩阵乘积依然定义良好: \begin{equation} \Tr(\MA\MB\MC)=\Tr(\MC\MA\MB)= \Tr(\MB\MC\MA). \end{equation} 或者更一般地, -\begin{equation} +\begin{equation} +\label{eq:2.52} \Tr(\prod_{i=1}^n \MF^{(i)})= \Tr(\MF^{(n)} \prod_{i=1}^{n-1} \MF^{(i)}). \end{equation} 即使循环置换后矩阵乘积得到的矩阵形状变了,迹运算的结果依然不变。 @@ -747,7 +733,7 @@ \section{迹运算} \begin{equation} \Tr(\MA\MB)= \Tr(\MB\MA) \end{equation} -即使$\MA\MB \in \SetR^{m\times m}$和$\MB\MA \in \SetR^{n\times n}$。 +尽管$\MA\MB \in \SetR^{m\times m}$和$\MB\MA \in \SetR^{n\times n}$。 % -- 44 -- @@ -764,7 +750,7 @@ \section{行列式} 行列式等于矩阵特征值的乘积。 行列式的绝对值可以用来衡量矩阵参与矩阵乘法后空间扩大或者缩小了多少。 如果行列式是$0$,那么空间至少沿着某一维完全收缩了,使其失去了所有的体积。 -如果行列式是$1$,那么矩阵参与矩阵乘法没有改变空间体积。 +如果行列式是$1$,那么这个转换保持空间体积不变。 @@ -787,17 +773,17 @@ \section{实例:\glsentrytext{PCA}} \glssymbol{PCA}由我们选择的解码函数而定。 -具体地,为了简化解码器,我们使用矩阵乘法将编码映射回$\SetR^n$,即$g(\Vc)=\MD\Vc$,其中$\MD\in \SetR^{n\times l}$ 是解码矩阵。 +具体地,为了简化解码器,我们使用矩阵乘法将编码映射回$\SetR^n$,即$g(\Vc)=\MD\Vc$,其中$\MD\in \SetR^{n\times l}$是定义解码的矩阵。 % -- 45 -- 目前为止所描述的问题,可能会有多个解。 因为如果我们按比例地缩小所有点对应的编码向量$c_i$,那么我们只需按比例放大$\MD_{:,i}$,即可保持结果不变。 -为了让问题有唯一解,我们限制$\MD$中所有列向量都有\gls{unit_norm}。 +为了使问题有唯一解,我们限制$\MD$中所有列向量都有\gls{unit_norm}。 计算这个解码器的最优编码可能是一个困难的问题。 -为了使编码问题简单一些,\glssymbol{PCA}限制$\MD$的列向量为彼此正交的(注意,除非$l=n$,否则严格上$\MD$不是一个正交矩阵)。 +为了使编码问题简单一些,\glssymbol{PCA}限制$\MD$的列向量彼此正交(注意,除非$l=n$,否则严格意义上$\MD$不是一个正交矩阵)。 为了将这个基本想法变为我们能够实现的算法,首先我们需要明确如何根据每一个输入$\Vx$得到一个最优编码$\Vc^*$。 @@ -805,8 +791,7 @@ \section{实例:\glsentrytext{PCA}} 我们使用范数来衡量它们之间的距离。 在\glssymbol{PCA}算法中,我们使用$L^2$范数: \begin{equation} -\label{eq:2.52} -\Vc^* = \underset{\Vc}{\arg\min} \norm{\Vx-g(\Vc)}_2. + \Vc^* = \underset{\Vc}{\arg\min} \norm{\Vx-g(\Vc)}_2. \end{equation} @@ -815,8 +800,6 @@ \section{实例:\glsentrytext{PCA}} \begin{equation} \Vc^* = \argmin_{\Vc} \norm{\Vx - g(\Vc)}_2^2. \end{equation} - - 该最小化函数可以简化成 \begin{equation} (\Vx-g(\Vc))^\top(\Vx-g(\Vc)) @@ -846,7 +829,7 @@ \section{实例:\glsentrytext{PCA}} \begin{equation} = \underset{\Vc}{\arg\min} -2\Vx^\top\MD\Vc + \Vc^\top\MI_l\Vc \end{equation} -(矩阵$\MD$有正交和单位范数约束) +(矩阵$\MD$的正交性和单位范数约束) \begin{equation} = \underset{\Vc}{\arg\min} -2\Vx^\top\MD\Vc + \Vc^\top\Vc \end{equation} @@ -861,12 +844,13 @@ \section{实例:\glsentrytext{PCA}} 这使得算法很高效:最优编码$\Vx$只需要一个矩阵-向量乘法操作。 -我们使用该编码函数去编码向量: +为了编码向量,我们使用编码函数: \begin{equation} f(\Vx)=\MD^\top\Vx. \end{equation} 进一步使用矩阵乘法,我们也可以定义\glssymbol{PCA}重构操作: \begin{equation} +\label{eq:2.67} r(\Vx)=g(f(\Vx)) = \MD\MD^\top \Vx. \end{equation} @@ -876,16 +860,16 @@ \section{实例:\glsentrytext{PCA}} 因为我们用相同的矩阵$\MD$对所有点进行解码,我们不能再孤立地看待每个点。 反之,我们必须最小化所有维数和所有点上的误差矩阵的\gls{frobenius_norm}: \begin{equation} - \MD^* = \underset{\MD}{\arg\min} \sqrt{\sum_{i,j}\left( \Vx_j^{(i)} - r(\Vx^{(i)})_j\right)^2} \text{ 限制在 } \MD^\top\MD = \MI_l. +\label{eq:2.68} + \MD^* = \underset{\MD}{\arg\min} \sqrt{\sum_{i,j}\left( \Vx_j^{(i)} - r(\Vx^{(i)})_j\right)^2} \text{ subject to } \MD^\top\MD = \MI_l. \end{equation} 为了推导用于寻求$\MD^*$的算法,我们首先考虑$l=1$的情况。 在这种情况下,$\MD$是一个单一向量$\Vd$。 -将\eqnref{eq:2.67}代入\eqnref{eq:2.68},简化$\MD$为$\Vd$,问题化为 +将\eqnref{eq:2.67}代入\eqnref{eq:2.68},简化$\MD$为$\Vd$,问题简化为 \begin{equation} -\label{eq:2.67} \Vd^* = \underset{\Vd}{\arg\min} \sum_i \norm{\Vx^{(i)} - \Vd\Vd^\top \Vx^{(i)}}_2^2 - \text{ 限制在 } \norm{\Vd}_2 = 1. + \text{ subject to } \norm{\Vd}_2 = 1. \end{equation} % -- 47 -- @@ -895,25 +879,24 @@ \section{实例:\glsentrytext{PCA}} 将该标量放在左边的写法更为传统。 于是我们通常写作如下: \begin{equation} -\label{eq:2.68} \Vd^* = \underset{\Vd}{\arg\min} \sum_i \norm{\Vx^{(i)} - \Vd^\top \Vx^{(i)}\Vd}_2^2 - \text{ 限制在 } \norm{\Vd}_2 = 1, + \text{ subject to } \norm{\Vd}_2 = 1, \end{equation} 或者,考虑到标量的转置和自身相等,我们也可以写作: \begin{equation} \Vd^* = \underset{\Vd}{\arg\min} \sum_i \norm{\Vx^{(i)} - \Vx^{(i)\top}\Vd\Vd}_2^2 - \text{ 限制在 } \norm{\Vd}_2 = 1. + \text{ subject to } \norm{\Vd}_2 = 1. \end{equation} 读者应该对这些重排写法慢慢熟悉起来。 此时,使用单一矩阵来重述问题,比将问题写成求和形式更有帮助。 这有助于我们使用更紧凑的符号。 -让$\MX\in\SetR^{m\times n}$是将描述点的向量堆叠在一起的矩阵,使得$\MX_{i,:}=\Vx^{(i)^\top}$。 +将表示各点的向量堆叠成一个矩阵,记为$\MX\in\SetR^{m\times n}$,其中$\MX_{i,:}=\Vx^{(i)^\top}$。 原问题可以重新表述为: \begin{equation} \Vd^* = \underset{\Vd}{\arg\min} \norm{\MX - \MX\Vd\Vd^\top}_F^2 - \text{ 限制在 } \Vd^\top \Vd = 1. + \text{ subject to } \Vd^\top \Vd = 1. \end{equation} 暂时不考虑约束,我们可以将\gls{frobenius_norm}简化成下面的形式: \begin{equation} @@ -946,25 +929,25 @@ \section{实例:\glsentrytext{PCA}} 此时,我们再来考虑约束条件: \begin{equation} - = \underset{\Vd}{\arg\min} \, - 2\Tr(\MX^\top\MX \Vd\Vd^\top) + \Tr(\MX^\top\MX\Vd\Vd^\top\Vd\Vd^\top ) - \text{ 限制在 } \Vd^\top \Vd = 1 + \underset{\Vd}{\arg\min} \, - 2\Tr(\MX^\top\MX \Vd\Vd^\top) + \Tr(\MX^\top\MX\Vd\Vd^\top\Vd\Vd^\top ) + \text{ subject to } \Vd^\top \Vd = 1 \end{equation} \begin{equation} = \underset{\Vd}{\arg\min} \, - 2\Tr(\MX^\top\MX \Vd \Vd^\top) + \Tr(\MX^\top\MX\Vd\Vd^\top ) - \text{ 限制在 } \Vd^\top \Vd = 1 + \text{ subject to } \Vd^\top \Vd = 1 \end{equation} (因为约束条件) \begin{equation} = \underset{\Vd}{\arg\min} \, - \Tr(\MX^\top\MX \Vd\Vd^\top) - \text{ 限制在 } \Vd^\top \Vd = 1 + \text{ subject to } \Vd^\top \Vd = 1 \end{equation} \begin{equation} = \underset{\Vd}{\arg\max} \, \Tr(\MX^\top\MX \Vd\Vd^\top) - \text{ 限制在 } \Vd^\top \Vd = 1 + \text{ subject to } \Vd^\top \Vd = 1 \end{equation} \begin{equation} = \underset{\Vd}{\arg\max} \, \Tr(\Vd^\top\MX^\top\MX \Vd) - \text{ 限制在 } \Vd^\top \Vd = 1 + \text{ subject to } \Vd^\top \Vd = 1 . \end{equation} @@ -973,11 +956,11 @@ \section{实例:\glsentrytext{PCA}} 以上推导特定于$l=1$的情况, 仅得到了第一个主成分。 -更一般地,当我们希望得到主成分的基时,矩阵$\MD$由几个最大的特征值对应的的$l$个特征向量组成。 +更一般地,当我们希望得到主成分的基时,矩阵$\MD$由前$l$个最大的特征值对应的特征向量组成。 这个结论可以通过归纳法证明,我们建议将此证明作为练习。 -线性代数是学习深度学习所必须掌握的基础数学学科之一。 +线性代数是理解深度学习所必须掌握的基础数学学科之一。 另一门在机器学习中无处不在的重要数学学科是概率论,我们将在下章探讨。 diff --git a/README.md b/README.md index a9737ed..cad531b 100644 --- a/README.md +++ b/README.md @@ -40,7 +40,7 @@ | 章节 | 负责人 | 简单阅读 | 中英对比 | 进度 | | ------------ | ------------ | ------------ | ------------ | ------------ | | [第一章 前言](https://exacity.github.io/deeplearningbook-chinese/Chapter1_introduction/) | @swordyork | lc, @SiriusXDJ, @corenel | @linzhp | 完成合并 | -| [第二章 线性代数](https://via.hypothes.is/https://exacity.github.io/deeplearningbook-chinese/Chapter2_linear_algebra/) | @liber145 | @SiriusXDJ, @angrymidiao | @badpoem | 等待合并 | +| [第二章 线性代数](https://via.hypothes.is/https://exacity.github.io/deeplearningbook-chinese/Chapter2_linear_algebra/) | @liber145 | @SiriusXDJ | @badpoem | 完成合并 | | [第三章 概率与信息论](https://via.hypothes.is/https://exacity.github.io/deeplearningbook-chinese/Chapter3_probability_and_information_theory/) | @KevinLee1110 | @SiriusXDJ | @kkpoker | 等待合并 | | [第四章 数值计算](https://via.hypothes.is/https://exacity.github.io/deeplearningbook-chinese/Chapter4_numerical_computation/) | @swordyork | @zhangyafeikimi | @quasi-jing, @hengqujushi | 等待合并 | | [第五章 机器学习基础](https://via.hypothes.is/https://exacity.github.io/deeplearningbook-chinese/Chapter5_machine_learning_basics/) | @liber145 | @wheaio, @ZhiweiYang | @fairmiracle, @linzhp | 等待合并 | diff --git a/docs/_posts/2016-12-02-Chapter2_linear_algebra.md b/docs/_posts/2016-12-02-Chapter2_linear_algebra.md index 7883156..3f1bd96 100644 --- a/docs/_posts/2016-12-02-Chapter2_linear_algebra.md +++ b/docs/_posts/2016-12-02-Chapter2_linear_algebra.md @@ -6,12 +6,12 @@ share: false 线性代数作为数学的一个分支,广泛用于科学和工程中。 然而,因为线性代数主要是面向连续数学,而非离散数学,所以很多计算机科学家很少接触它。 -掌握好线性代数对于理解和从事机器学习算法相关工作是很有必要的,尤其对于深度学习而言。 +掌握好线性代数对于理解和从事机器学习算法相关工作是很有必要的,尤其对于深度学习算法而言。 因此,在我们开始介绍深度学习之前,我们集中探讨一些必备的线性代数知识。 如果你已经很熟悉线性代数,那么你可以轻松地跳过本章。 -如果你先前接触过本章的内容,但是需要一份索引表来回顾一些重要公式,那么我们推荐\emph{The Matrix Cookbook} {cite?}。 +如果你已经了解这些概念,但是需要一份索引表来回顾一些重要公式,那么我们推荐\emph{The Matrix Cookbook} {cite?}。 如果你没有接触过线性代数,那么本章将告诉你本书所需的线性代数知识,不过我们仍然非常建议你参考其他专注于讲解线性代数的文献,例如{shilov1977linear}。 最后,本章跳过了很多重要但是对于理解深度学习非必需的线性代数知识。 @@ -22,12 +22,12 @@ share: false # 标量、向量、矩阵和张量 -学习线性代数,会涉及以下几个数学概念: +学习线性代数,会涉及以下几类数学概念: -+ 标量:一个标量就是一个单独的数,不同于线性代数中大多数概念会涉及到多个数。 - 我们用斜体表示标量。标量通常赋予小写的变量名称。 ++ 标量:一个标量就是一个单独的数,它不同于线性代数中研究的其他大部分对象(通常是多个数的数组)。 + 我们用斜体表示标量。标量通常被赋予小写的变量名称。 当我们介绍标量时,会明确它们是哪种类型的数。 - 比如,在定义实数标量时,我们可能会说"让$\Ss \in \SetR$表示一条线的斜率";在定义自然数标量时,我们可能会说"让$\Sn\in\SetN$表示元素的数目"。 + 比如,在定义实数标量时,我们可能会说"令$\Ss \in \SetR$表示一条线的斜率";在定义自然数标量时,我们可能会说"令$\Sn\in\SetN$表示元素的数目"。 @@ -38,8 +38,8 @@ share: false 向量中的元素可以通过带脚标的斜体表示。 向量$\Vx$的第一个元素是$\Sx_1$,第二个元素是$\Sx_2$,等等。 我们也会注明存储在向量中的元素是什么类型的。 - 如果每个元素都属于$\SetR$,并且该向量有$\Sn$个元素,那么该向量属于实数集$\SetR$笛卡尔乘积$\Sn$次,表示为$\SetR^n$。 - 当我们需要明确表示向量中的元素时,我们会将元素排列成一个方括号包围的纵柱: + 如果每个元素都属于$\SetR$,并且该向量有$\Sn$个元素,那么该向量属于实数集$\SetR$的$\Sn$次笛卡尔乘积构成的集合,记为$\SetR^n$。 + 当我们需要明确表示向量中的元素时,我们会将元素排列成一个方括号包围的纵列: \begin{equation} \Vx=\begin{bmatrix} \Sx_1 \\ \Sx_2 \\ @@ -47,23 +47,23 @@ share: false \Sx_n \end{bmatrix}. \end{equation} - 我们可以把向量看作空间中的点,每个元素是不同的坐标轴上的坐标。 + 我们可以把向量看作空间中的点,每个元素是不同坐标轴上的坐标。 - 有时我们需要指定向量中某个集合的元素。 - 在这种情况下,我们定义一个包含这些索引的集合,然后将该集合写在脚标处。 + 有时我们需要索引向量中的一些元素。 + 在这种情况下,我们定义一个包含这些元素索引的集合,然后将该集合写在脚标处。 比如,指定$\Sx_1$,$\Sx_3$和$\Sx_6$,我们定义集合$S=\{1,3,6\}$,然后写作$\Vx_S$。我 - 们用符号$-$表示集合的补集中的索引。 + 们用符号-表示集合的补集中的索引。 比如$\Vx_{-1}$表示$\Vx$中除$\Sx_1$外的所有元素,$\Vx_{-S}$表示$\Vx$中除$\Sx_1$,$\Sx_3$,$\Sx_6$外所有元素构成的向量。 -+ 矩阵:矩阵是二维数组,其中的每一个元素被两个索引而非一个所确定。 ++ 矩阵:矩阵是一个二维数组,其中的每一个元素被两个索引而非一个所确定。 我们通常会赋予矩阵粗体的大写变量名称,比如$\MA$。 如果一个实数矩阵高度为$m$,宽度为$n$,那么我们说$\MA\in \SetR^{m\times n}$。 - 我们在表示矩阵中的元素时,通常使用其名称以不加粗的斜体形式,索引用逗号间隔。 + 我们在表示矩阵中的元素时,通常以不加粗的斜体形式使用其名称,索引用逗号间隔。 比如,$\SA_{1,1}$表示$\MA$左上的元素,$\SA_{m,n}$表示$\MA$右下的元素。 - 我们表示垂直坐标$\Si$中的所有元素时,用":"表示水平坐标。 + 我们通过用":"表示水平坐标,以表示垂直坐标$\Si$中的所有元素。 比如,$\MA_{i,:}$表示$\MA$中垂直坐标$i$上的一横排元素。 - 这也被称为$\MA$的第$i$行。 - 同样地,$\MA_{:,i}$表示$\MA$的第$i$列。 + 这也被称为$\MA$的第$i$~行。 + 同样地,$\MA_{:,i}$表示$\MA$的第$i$~列。 当我们需要明确表示矩阵中的元素时,我们将它们写在用方括号包围起来的数组中: \begin{equation} \begin{bmatrix} @@ -72,14 +72,14 @@ share: false \end{bmatrix}. \end{equation} 有时我们需要矩阵值表达式的索引,而不是单个元素。 - 在这种情况下,我们在表达式后面接下标,但不需要写作小写字母。 - 比如,$f(\MA)_{i,j}$表示函数$f$作用在$\MA$上输出的矩阵的第$(i,j)$个元素。 + 在这种情况下,我们在表达式后面接下标,但不必将矩阵的变量名称小写化。 + 比如,$f(\MA)_{i,j}$表示函数$f$作用在$\MA$上输出的矩阵的第$i$行第$j$列元素。 -+ 张量:在某些情况下,我们会讨论不只两维坐标的数组。 - 一般地,一组数组中的元素分布在若干维坐标的规则网格中,我们将其称之为张量。 - 我们使用这种字体$\TSA$来表示张量"A"。 ++ 张量:在某些情况下,我们会讨论坐标超过两维的数组。 + 一般地,一个数组中的元素分布在若干维坐标的规则网格中,我们将其称之为张量。 + 我们使用字体$\TSA$来表示张量"A"。 张量$\TSA$中坐标为$(i,j,k)$的元素记作$\TEA_{i,j,k}$。 @@ -103,7 +103,7 @@ share: false 向量可以看作是只有一列的矩阵。 对应地,向量的转置可以看作是只有一行的矩阵。 -有时,我们将向量表示成行矩阵的转置,写在行中,然后使用转置将其变为标准的列向量,比如$\Vx=[\Sx_1, \Sx_2, \Sx_3]^\top$. +有时,我们通过将向量元素作为行矩阵写在文本行中,然后使用转置操作将其变为标准的列向量,来定义一个向量,比如$\Vx=[\Sx_1, \Sx_2, \Sx_3]^\top$. 标量可以看作是只有一个元素的矩阵。 @@ -115,13 +115,13 @@ share: false 两个矩阵相加是指对应位置的元素相加,比如$\MC=\MA+\MB$,其中$\SC_{i,j}= \SA_{i,j}+\SB_{i,j}$。 -标量和矩阵相乘,或是和矩阵相加时,我们将其与矩阵的每个元素相乘或相加,比如$\MD = \Sa \cdot \MB + \Sc$,其中$\SD_{i,j} = \Sa\cdot \SB_{i,j} + \Sc$。 +标量和矩阵相乘,或是和矩阵相加时,我们只需将其与矩阵的每个元素相乘或相加,比如$\MD = \Sa \cdot \MB + \Sc$,其中$\SD_{i,j} = \Sa\cdot \SB_{i,j} + \Sc$。 在深度学习中,我们也使用一些不那么常规的符号。 我们允许矩阵和向量相加,产生另一个矩阵:$\MC=\MA + \Vb$,其中$\SC_{i,j}= \SA_{i,j} + \Sb_{j}$。 换言之,向量$\Vb$和矩阵$\MA$的每一行相加。 -这个速记方法使我们无需在加法操作前定义复制向量$\Vb$到矩阵的每一行。 +这个简写方法使我们无需在加法操作前定义一个将向量$\Vb$复制到每一行而生成的矩阵。 这种隐式地复制向量$\Vb$到很多位置的方式,被称为广播。 @@ -135,7 +135,7 @@ share: false 两个矩阵$\MA$和$\MB$的矩阵乘积是第三个矩阵$\MC$。 为了使乘法定义良好,矩阵$\MA$的列数必须和矩阵$\MB$的行数相等。 如果矩阵$\MA$的形状是$\Sm \times \Sn$,矩阵$\MB$的形状是$\Sn\times \Sp$,那么矩阵$\MC$的形状是$\Sm\times \Sp$。 -矩阵乘积可以作用于两个或多个并在一起的矩阵,例如 +我们可以通过将两个或多个矩阵并列放置以书写矩阵乘法,例如 \begin{equation} \MC=\MA\MB. \end{equation} @@ -148,7 +148,7 @@ share: false 需要注意的是,两个矩阵的标准乘积\emph{不是}指两个矩阵中对应元素的乘积。 -不过,那样的矩阵操作确实是存在的,被称为元素对应乘积或者Hadamard乘积,表示为$\MA\odot\MB$。 +不过,那样的矩阵操作确实是存在的,被称为元素对应乘积或者Hadamard乘积,记为$\MA\odot\MB$。 两个相同维数的向量$\Vx$和$\Vy$的点积可看作是矩阵乘积$\Vx^\top\Vy$。 @@ -157,16 +157,10 @@ share: false 矩阵乘积运算有许多有用的性质,从而使矩阵的数学分析更加方便。 比如,矩阵乘积服从分配律: - - \begin{equation} \MA(\MB+\MC)=\MA\MB +\MA\MC. \end{equation} - - 矩阵乘积也服从结合律: - - \begin{equation} \MA(\MB\MC)=(\MA\MB)\MC. \end{equation} @@ -175,23 +169,17 @@ share: false -不同于标量乘积,矩阵乘积并不满足交换律($\MA\MB=\MB\MA$的情况并非总是满足)。 +不同于标量乘积,矩阵乘积\emph{并不}满足交换律($\MA\MB=\MB\MA$的情况并非总是满足)。 然而,两个向量的点积满足交换律: - - \begin{equation} \Vx^\top\Vy=\Vy^\top\Vx. \end{equation} 矩阵乘积的转置有着简单的形式: - - \begin{equation} (\MA\MB)^\top=\MB^\top\MA^\top. \end{equation} - - 利用向量乘积是标量,标量转置是自身的事实,我们可以证明\eqn?: \begin{equation} \Vx^\top \Vy = \left(\Vx^\top \Vy \right)^\top = \Vy^\top \Vx. @@ -202,12 +190,10 @@ share: false 现在我们已经知道了足够多的线性代数符号,可以表达下列线性方程组: - - \begin{equation} \MA\Vx=\Vb \end{equation} -其中$\MA\in \SetR^{m\times n}$是一个已知矩阵,$\Vb$是一个已知向量,$\Vx$是一个我们要求解的未知向量。 +其中$\MA\in \SetR^{m\times n}$是一个已知矩阵,$\Vb\in\SetR^m$是一个已知向量,$\Vx\in\SetR^n$是一个我们要求解的未知向量。 向量$\Vx$的每一个元素$\Sx_i$都是未知的。 矩阵$\MA$的每一行和$\Vb$中对应的元素构成一个约束。 我们可以把\eqn?重写为 @@ -226,7 +212,7 @@ share: false \end{gather} -矩阵向量乘积符号为这种形式的等式提供了更紧凑的表示。 +矩阵向量乘积符号为这种形式的方程提供了更紧凑的表示。 @@ -238,7 +224,8 @@ share: false -线性代数提供了被称为矩阵逆的强大工具,使我们能够解析地求解具有多值矩阵$\MA$的\eqn?。 +线性代数提供了被称为矩阵逆的强大工具。 +对于大多数矩阵$\MA$,我们都能通过矩阵逆解析地求解\eqn?。 为了描述矩阵逆,我们首先需要定义单位矩阵的概念。 @@ -248,11 +235,8 @@ share: false \begin{equation} \forall \Vx \in \SetR^{\Sn}, \MI_{\Sn} \Vx = \Vx. \end{equation} - - 单位矩阵的结构很简单:所有沿主对角线的元素都是$1$,而所有其他位置的元素都是$0$。 -如\fig?所示。 - +如\fig?所示的例子。 \begin{figure}[!htb] \ifOpenSource \centerline{\includegraphics{figure.pdf}} @@ -270,8 +254,9 @@ share: false \end{figure} -矩阵$\MA$的矩阵逆记作$\MA^{-1}$,定义为如下的矩阵 +矩阵$\MA$的矩阵逆记作$\MA^{-1}$,其定义的矩阵满足如下条件 \begin{equation} \MA^{-1}\MA = \MI_{\Sn}. \end{equation} + 现在我们可以通过以下步骤求解\eqn?: \begin{gather} \MA\Vx=\Vb \\ @@ -281,13 +266,13 @@ share: false \end{gather} -当然,这取决于能否找到一个逆矩阵$\MA^{-1}$。 +当然,这取决于我们能否找到一个逆矩阵$\MA^{-1}$。 在接下来的章节中,我们会讨论逆矩阵$\MA^{-1}$存在的条件。 当逆矩阵$\MA^{-1}$存在时,有几种不同的算法都能找到它的闭解形式。 理论上,相同的逆矩阵可用于多次求解不同向量$\Vb$的方程。 -然而,逆矩阵$\MA^{-1}$主要是作为理论工具使用的,并不会在实际中使用于大多数软件应用程序中。 +然而,逆矩阵$\MA^{-1}$主要是作为理论工具使用的,并不会在大多数软件应用程序中实际使用。 这是因为逆矩阵$\MA^{-1}$在数字计算机上只能表现出有限的精度,有效使用向量$\Vb$的算法通常可以得到更精确的$\Vx$。 @@ -300,21 +285,21 @@ share: false 如果逆矩阵$\MA^{-1}$存在,那么\eqn?肯定对于每一个向量$\Vb$恰好存在一个解。 -对系统方程而言,对于某些$\Vb$的值,有可能不存在解,或者存在无限多个解。 -然而,存在多于一个解但是少于无限多个解的情况是不可能发生的;因为如果$\Vx$和$\Vy$都是某系统方程的解,则 +但是,对于方程组而言,对于向量$\Vb$的某些值,有可能不存在解,或者存在无限多个解。 +存在多于一个解但是少于无限多个解的情况是不可能发生的;因为如果$\Vx$和$\Vy$都是某方程组的解,则 \begin{equation} \Vz=\alpha \Vx + (1-\alpha) \Vy \end{equation} -(其中$\alpha$取任意实数)也是该系统方程的解。 +(其中$\alpha$取任意实数)也是该方程组的解。 -分析方程有多少个解,我们可以将$\MA$的列向量看作是从原点(元素都是零的向量)出发的不同方向,确定有多少种方法可以到达向量$\Vb$。 -在这个观点中,向量$\Vx$中的每个元素表示我们应该沿着这些方向走多远,即$\Sx_{\Si}$表示我们需要沿着第$\Si$个向量的方向走多远: +为了分析方程有多少个解,我们可以将$\MA$的列向量看作是从原点(元素都是零的向量)出发的不同方向,确定有多少种方法可以到达向量$\Vb$。 +在这个观点下,向量$\Vx$中的每个元素表示我们应该沿着这些方向走多远,即$\Sx_{\Si}$表示我们需要沿着第$\Si$个向量的方向走多远: \begin{equation} \MA \Vx = \sum_i x_i \MA_{:,i}. \end{equation} 一般而言,这种操作被称为线性组合。 -形式上,某个集合中向量的线性组合,是指每个向量乘以对应系数之后的和,即: +形式上,一组向量的线性组合,是指每个向量乘以对应标量系数之后的和,即: \begin{equation} \sum_i \Sc_i \Vv^{(i)}. \end{equation} @@ -325,7 +310,7 @@ share: false 这个特殊的生成子空间被称为$\MA$的列空间或者$\MA$的值域。 -为了让方程$\MA \Vx=\Vb$对于任意的向量$\Vb \in \SetR^m$都有解的话,我们要求$\MA$的列空间构成整个$\SetR^{\Sm}$。 +为了使方程$\MA \Vx=\Vb$对于任意向量$\Vb \in \SetR^m$都存在解,我们要求$\MA$的列空间构成整个$\SetR^{\Sm}$。 如果$\SetR^m$中的某个点不在$\MA$的列空间中,那么该点对应的$\Vb$会使得该方程没有解。 矩阵$\MA$的列空间是整个$\SetR^m$的要求,意味着$\MA$至少有$m$列,即$n\geq m$。 否则,$\MA$列空间的维数会小于$m$。 @@ -346,7 +331,7 @@ share: false 换言之,虽然该矩阵有$2$列,但是它的列空间仍然只是一条线,不能涵盖整个$\SetR^2$空间。 -正式地,这种冗余被称为线性相关。 +正式地说,这种冗余被称为线性相关。 如果一组向量中的任意一个向量都不能表示成其他向量的线性组合,那么这组向量被称为线性无关。 如果某个向量是一组向量中某些向量的线性组合,那么我们将这个向量加入到这组向量后不会增加这组向量的生成子空间。 这意味着,如果一个矩阵的列空间涵盖整个$\SetR^m$,那么该矩阵必须包含至少一组$m$个线性无关的向量。 @@ -364,7 +349,7 @@ share: false 如果矩阵$\MA$不是一个方阵或者是一个奇异的方阵,该方程仍然可能有解。 -但是我们不能使用逆矩阵去求解。 +但是我们不能使用矩阵逆去求解。 目前为止,我们已经讨论了逆矩阵左乘。我们也可以定义逆矩阵右乘: @@ -394,7 +379,7 @@ share: false 范数(包括$L^p$范数)是将向量映射到非负值的函数。 -直观上来说,向量$\Vx$的范数是衡量从原点到点$\Vx$的距离。 +直观上来说,向量$\Vx$的范数衡量从原点到点$\Vx$的距离。 更严格地说,范数是满足下列性质的任意函数: + $f(\Vx) = 0 \Rightarrow \Vx = \mathbf{0}$ @@ -403,17 +388,17 @@ share: false -当$p=2$时,$L^2$被称为欧几里得范数。 +当$p=2$时,$L^2$范数被称为欧几里得范数。 它表示从原点出发到向量$\Vx$确定的点的欧几里得距离。 -$L^2$范数十分频繁地出现在机器学习中,经常简化表示为$\norm{x}$,略去了下标$2$。 +$L^2$范数在机器学习中出现地十分频繁,经常简化表示为$\norm{x}$,略去了下标$2$。 平方$L^2$范数也经常用来衡量向量的大小,可以简单地通过点积 $\Vx^\top\Vx$计算。 平方$L^2$范数在数学和计算上都比$L^2$范数本身更方便。 例如,平方$L^2$范数对$\Vx$中每个元素的导数只取决于对应的元素,而$L^2$范数对每个元素的导数却和整个向量相关。 但是在很多情况下,平方$L^2$范数也可能不受欢迎,因为它在原点附近增长得十分缓慢。 -在某些机器学习应用中,区分元素值恰好是零还是非零小值是很重要的。 -在这些情况下,我们更倾向于使用在各个位置斜率相同,同时保持简单的数学形式的函数:$L^1$范数。 +在某些机器学习应用中,区分恰好是零的元素和非零但值很小的元素是很重要的。 +在这些情况下,我们转而使用在各个位置斜率相同,同时保持简单的数学形式的函数:$L^1$范数。 $L^1$范数可以简化如下: \begin{equation} \norm{\Vx}_1 = \sum_i |x_i|. @@ -424,7 +409,7 @@ $L^1$范数可以简化如下: 有时候我们会统计向量中非零元素的个数来衡量向量的大小。 有些作者将这种函数称为"$L^0$范数",但是这个术语在数学意义上是不对的。 -向量的非零元素的数目不是范数,因为对标量放缩$\alpha$倍不会改变该向量非零的数目。 +向量的非零元素的数目不是范数,因为对向量缩放$\alpha$倍不会改变该向量非零元素的数目。 因此,$L^1$范数经常作为表示非零元素数目的替代函数。 @@ -432,20 +417,20 @@ $L^1$范数可以简化如下: -另外一个经常在机器学习中出现的范数是$L^\infty$范数,也被称为max 范数。 -这个范数表示向量中具有最大幅度的元素的绝对值: +另外一个经常在机器学习中出现的范数是$L^\infty$范数,也被称为~max 范数。 +这个范数表示向量中具有最大幅值的元素的绝对值: \begin{equation} \norm{\Vx}_\infty = \max_i |x_i|. \end{equation} -有时候我们可能也需要衡量矩阵的大小。 +有时候我们可能也希望衡量矩阵的大小。 在深度学习中,最常见的做法是使用Frobenius 范数, \begin{equation} \norm{\MA}_F = \sqrt{\sum_{i,j} A_{i,j}^2}, \end{equation} -类似于向量的$L^2$范数。 +其类似于向量的$L^2$范数。 两个向量的点积可以用范数来表示。 @@ -469,18 +454,18 @@ $L^1$范数可以简化如下: 形式上,矩阵$\MD$是对角矩阵,当且仅当对于所有的$i\neq j$,$\SD_{i,j}=0$。 我们已经看到过一个对角矩阵:单位矩阵,对角元素全部是$1$。 我们用$\text{diag}(\Vv)$表示一个对角元素由向量$\Vv$中元素给定的对角方阵。 -对角矩阵受到关注,部分原因是对角矩阵的乘法计算很高效。 +对角矩阵受到关注的部分原因是对角矩阵的乘法计算很高效。 计算乘法$\text{diag}(\Vv)\Vx$,我们只需要将$\Vx$中的每个元素$x_i$放大$v_i$倍。 换言之,$\text{diag}(\Vv)\Vx=\Vv \odot \Vx$。 -计算对角矩阵的逆矩阵也很高效。 -对角矩阵的逆矩阵存在,当且仅当对角元素都是非零值,在这种情况下,$\text{diag}(\Vv)^{-1}=\text{diag}([1/v_1,\dots,1/v_n]^\top)$。 -在很多情况,我们可以根据任意矩阵导出一些通用的机器学习算法;但通过将一些矩阵限制为对角矩阵,我们可以得到计算代价较低的(并且描述语言较少的)算法。 +计算对角方阵的逆矩阵也很高效。 +对角方阵的逆矩阵存在,当且仅当对角元素都是非零值,在这种情况下,$\text{diag}(\Vv)^{-1}=\text{diag}([1/v_1,\dots,1/v_n]^\top)$。 +在很多情况下,我们可以根据任意矩阵导出一些通用的机器学习算法;但通过将一些矩阵限制为对角矩阵,我们可以得到计算代价较低的(并且简明扼要的)算法。 不是所有的对角矩阵都是方阵。 长方形的矩阵也有可能是对角矩阵。 -长方形对角矩阵没有逆矩阵,但我们仍然可以很快地计算它们的乘法。 -对于一个长方形对角矩阵$\MD$而言,乘法$\MD\Vx$会涉及到$\Vx$中每个元素的放缩,如果$\MD$是瘦长型矩阵,那么放缩后末尾添加一些零;如果$\MD$是胖宽型矩阵,那么放缩后去掉最后一些元素。 +非方阵的对角矩阵没有逆矩阵,但我们仍然可以高效地计算它们的乘法。 +对于一个长方形对角矩阵$\MD$而言,乘法$\MD\Vx$会涉及到$\Vx$中每个元素的缩放,如果$\MD$是瘦长型矩阵,那么在缩放后的末尾添加一些零;如果$\MD$是胖宽型矩阵,那么在缩放后去掉最后一些元素。 @@ -490,7 +475,7 @@ $L^1$范数可以简化如下: \MA=\MA^\top. \end{equation} 当某些不依赖参数顺序的双参数函数生成元素时,对称矩阵经常会出现。 -例如,如果$\MA$是一个表示距离的矩阵,$\MA_{i,j}$表示点$i$到点$j$的距离,那么$\MA_{i,j}=\MA_{j,i}$,因为距离函数是对称的。 +例如,如果$\MA$是一个距离度量矩阵,$\MA_{i,j}$表示点$i$到点$j$的距离,那么$\MA_{i,j}=\MA_{j,i}$,因为距离函数是对称的。 单位向量是具有单位范数的向量: @@ -505,7 +490,7 @@ $L^1$范数可以简化如下: 如果这些向量不仅互相正交,并且范数都为$1$,那么我们称它们是标准正交。 -正交矩阵是指行向量是标准正交的,列向量是标准正交的方阵: +正交矩阵是指行向量和列向量是分别标准正交的方阵: \begin{equation} \MA^\top\MA=\MA\MA^\top=\MI. \end{equation} @@ -514,7 +499,7 @@ $L^1$范数可以简化如下: \MA^{-1}=\MA^\top, \end{equation} 所以正交矩阵受到关注是因为求逆计算代价小。 -需要注意正交矩阵的定义。 +我们需要注意正交矩阵的定义。 反直觉地,正交矩阵的行向量不仅是正交的,还是标准正交的。 对于行向量或列向量互相正交但不是标准正交的矩阵没有对应的专有术语。 @@ -525,12 +510,12 @@ $L^1$范数可以简化如下: # 特征分解 -许多数学对象可以通过将它们分解成多个组成部分,或者找到它们的一些属性而更好地理解,这些属性是通用的,而不是由我们选择表示它们的方式引起的。 +许多数学对象可以通过将它们分解成多个组成部分,或者找到它们的一些属性而更好地理解,这些属性是通用的,而不是由我们选择表示它们的方式产生的。 -例如,整数可以分解为质数。 -我们可以用十进制或二进制等不同方式表示整数$12$,但质因数分解永远是对的$12=2\times 3\times 3$。 +例如,整数可以分解为质因数。 +我们可以用十进制或二进制等不同方式表示整数$12$,但是$12=2\times 3\times 3$永远是对的。 从这个表示中我们可以获得一些有用的信息,比如$12$不能被$5$整除,或者$12$的倍数可以被$3$整除。 @@ -540,21 +525,21 @@ $L^1$范数可以简化如下: 特征分解是使用最广的矩阵分解之一,即我们将矩阵分解成一组特征向量和特征值。 -方阵$\MA$的特征向量是指与$\MA$相乘后相当于对该向量进行放缩的非零向量$\Vv$: +方阵$\MA$的特征向量是指与$\MA$相乘后相当于对该向量进行缩放的非零向量$\Vv$: \begin{equation} \MA\Vv=\lambda \Vv. \end{equation} 标量$\lambda$被称为这个特征向量对应的特征值。 -(类似地,我们也可以定义左奇异向量 $\Vv^\top\MA=\lambda \Vv^\top$,但是通常我们更关注右奇异向量)。 +(类似地,我们也可以定义左特征向量 $\Vv^\top\MA=\lambda \Vv^\top$,但是通常我们更关注右特征向量)。 -如果$\Vv$是$\MA$的特征向量,那么任何放缩后的向量$s\Vv$($s\in \SetR$,$s\neq 0$)也是$\MA$的特征向量。 +如果$\Vv$是$\MA$的特征向量,那么任何缩放后的向量$s\Vv$~($s\in \SetR$,$s\neq 0$)也是$\MA$的特征向量。 此外,$s\Vv$和$\Vv$有相同的特征值。 基于这个原因,通常我们只考虑单位特征向量。 假设矩阵$\MA$有$n$个线性无关的特征向量$\{\Vv^{(1)}, \dots, \Vv^{(n)}\}$,对应着特征值$\{\lambda_1, \dots , \lambda_n \}$。 -我们将特征向量连接一个矩阵,使得每一列是一个特征向量:$V=[\Vv^{(1)}, \dots, \Vv^{(n)}]$. +我们将特征向量连接成一个矩阵,使得每一列是一个特征向量:$\MV=[\Vv^{(1)}, \dots, \Vv^{(n)}]$. 类似地,我们也可以将特征值连接成一个向量$\Vlambda = [\lambda_1, \dots , \lambda_n]^\top$。 因此$\MA$的特征分解可以记作 \begin{equation} @@ -568,8 +553,8 @@ $L^1$范数可以简化如下: 不是每一个矩阵都可以分解成特征值和特征向量。 -在某些情况下,特征分解会涉及到复数,而非实数。 -幸运的是,在本书中我们通常只需要探讨一类有简单分解的矩阵。 +在某些情况下,特征分解存在,但是会涉及到复数,而非实数。 +幸运的是,在本书中我们通常只需要分解一类有简单分解的矩阵。 具体地,每个实对称矩阵都可以分解成实特征向量和实特征值: \begin{equation} \MA = \MQ \VLambda \MQ^\top. @@ -577,14 +562,14 @@ $L^1$范数可以简化如下: 其中$\MQ$是$\MA$的特征向量组成的正交矩阵,$\VLambda$是对角矩阵。 特征值$\Lambda_{i,i}$对应的特征向量是矩阵$\MQ$的第$i$列,记作$\MQ_{:,i}$。 因为$\MQ$是正交矩阵,我们可以将$\MA$看作是沿方向$\Vv^{(i)}$延展$\lambda_i$倍的空间。 -如\fig?所示。 +如\fig?所示的例子。 虽然任意一个实对称矩阵$\MA$都有特征分解,但是特征分解可能并不唯一。 -如果两个或多个特征向量拥有相同的特征值,那么这组特征向量生成子空间中,任意一组正交向量都是该特征值对应的特征向量。 -因此,我们可以使用任意一组正交向量作为$\MQ$的特征向量。 -按照惯例,我们通常按降序排列$\VLambda$的条目。 +如果两个或多个特征向量拥有相同的特征值,那么在这些特征向量的生成子空间中,任意一组正交向量都是该特征值对应的特征向量。 +因此,我们可以等价地使用这些特征向量构成$\MQ$作为替代。 +按照惯例,我们通常按降序排列$\VLambda$的元素。 在该约定下,特征分解唯一当且仅当所有的特征值都是唯一的。 \begin{figure}[!htb] @@ -598,7 +583,7 @@ $L^1$范数可以简化如下: 在这里,矩阵$\MA$有两个标准正交的特征向量,对应特征值为$\lambda_1$的$\Vv^{(1)}$以及对应特征值为$\lambda_2$的$\Vv^{(2)}$。 (左)我们画出了所有的单位向量$\Vu\in\SetR^2$的集合,构成一个单位圆。 (右)我们画出了所有的$\MA\Vu$点的集合。 -通过观察$\MA$拉伸单位圆的方式,我们可以看到它能够将$\Vv^{(2)}$方向的空间拉伸到$\lambda_i$。 } +通过观察$\MA$拉伸单位圆的方式,我们可以看到它能够将$\Vv^{(i)}$方向的空间拉伸了$\lambda_i$倍。 } \end{figure} @@ -626,7 +611,7 @@ $L^1$范数可以简化如下: 在\sec?,我们探讨了如何将矩阵分解成特征向量和特征值。 还有另一种分解矩阵的方法,被称为奇异值分解,将矩阵分解为奇异向量和奇异值。 -通过奇异值分解,我们会得到一些类似特征分解的信息。 +通过奇异值分解,我们会得到一些与特征分解相同类型的信息。 然而,奇异值分解有更广泛的应用。 每个实数矩阵都有一个奇异值分解,但不一定都有特征分解。 例如,非方阵的矩阵没有特征分解,这时我们只能使用奇异值分解。 @@ -648,8 +633,8 @@ $L^1$范数可以简化如下: -这些矩阵每一个都拥有特殊的结构。 -矩阵$\MU$和$\MV$都是正交矩阵,矩阵$\MD$是对角矩阵。 +这些矩阵中的每一个经定义后都拥有特殊的结构。 +矩阵$\MU$和$\MV$都被定义为正交矩阵,而矩阵$\MD$被定义为对角矩阵。 注意,矩阵$\MD$不一定是方阵。 @@ -682,19 +667,19 @@ SVD最有用的一个性质可能是拓展矩阵求逆到非方矩阵上。我 \begin{equation} \Vx=\MB\Vy. \end{equation} -是否存在一个唯一的映射,将$\MA$映射到$\MB$,取决于问题的形式。 +取决于问题的形式,我们可能无法设计一个唯一的映射将$\MA$映射到$\MB$。 如果矩阵$\MA$的行数大于列数,那么上述方程可能没有解。 如果矩阵$\MA$的行数小于列数,那么上述矩阵可能有多个解。 -Moore-Penrose 伪逆使我们能够解决这类问题。 +Moore-Penrose 伪逆使我们在这类问题上取得了一定的进展。 矩阵$\MA$的伪逆定义为: \begin{equation} \MA^+ = \lim_{a \searrow 0} (\MA^\top\MA + \alpha \MI)^{-1} \MA^\top. \end{equation} -计算伪逆的实际算法没有基于这个式子,而是使用下面的公式: +计算伪逆的实际算法没有基于这个定义,而是使用下面的公式: \begin{equation} \MA^+ = \MV\MD^+\MU^\top. \end{equation} @@ -704,11 +689,12 @@ Moore-Penrose 伪逆使我们能够解决这类问题。 当矩阵$\MA$的列数多于行数时,使用伪逆求解线性方程是众多可能解法中的一种。 -具体地,$\Vx=\MA^+\Vy$是方程所有可行解中欧几里得范数$\norm{\Vx}_2$最小的一个。 +特别地,$\Vx=\MA^+\Vy$是方程所有可行解中欧几里得范数$\norm{\Vx}_2$最小的一个。 当矩阵$\MA$的行数多于列数时,可能没有解。 -在这种情况下,通过伪逆得到的$\Vx$是使得$\MA\Vx$和$\Vy$的欧几里得距离$\norm{\MA\Vx-\Vy}_2$最小的解。 +在这种情况下,通过伪逆得到的$\Vx$使得$\MA\Vx$和$\Vy$的欧几里得距离$\norm{\MA\Vx-\Vy}_2$最小。 + @@ -721,7 +707,7 @@ Moore-Penrose 伪逆使我们能够解决这类问题。 \begin{equation} \Tr(\MA)= \sum_i \MA_{i,i}. \end{equation} -迹运算因为很多原因而受到关注。 +迹运算因为很多原因而有用。 若不使用求和符号,有些矩阵运算很难描述,而通过矩阵乘法和迹运算符号,可以清楚地表示。 例如,迹运算提供了另一种描述矩阵Frobenius 范数的方式: \begin{equation} @@ -729,20 +715,20 @@ Moore-Penrose 伪逆使我们能够解决这类问题。 \end{equation} -用迹运算表示表达式,我们可以使用很多有用的等式来操纵表达式。 +用迹运算表示表达式,我们可以使用很多有用的等式巧妙地处理表达式。 例如,迹运算在转置运算下是不变的: \begin{equation} \Tr(\MA)=\Tr(\MA^\top). \end{equation} -多个矩阵乘积的迹,和将这些矩阵中最后一个挪到最前面之后乘积的迹是相同的。 +多个矩阵相乘得到的方阵的迹,和将这些矩阵中的最后一个挪到最前面之后相乘的迹是相同的。 当然,我们需要考虑挪动之后矩阵乘积依然定义良好: \begin{equation} \Tr(\MA\MB\MC)=\Tr(\MC\MA\MB)= \Tr(\MB\MC\MA). \end{equation} 或者更一般地, -\begin{equation} +\begin{equation} \Tr(\prod_{i=1}^n \MF^{(i)})= \Tr(\MF^{(n)} \prod_{i=1}^{n-1} \MF^{(i)}). \end{equation} 即使循环置换后矩阵乘积得到的矩阵形状变了,迹运算的结果依然不变。 @@ -750,7 +736,7 @@ Moore-Penrose 伪逆使我们能够解决这类问题。 \begin{equation} \Tr(\MA\MB)= \Tr(\MB\MA) \end{equation} -即使$\MA\MB \in \SetR^{m\times m}$和$\MB\MA \in \SetR^{n\times n}$。 +尽管$\MA\MB \in \SetR^{m\times m}$和$\MB\MA \in \SetR^{n\times n}$。 @@ -766,9 +752,9 @@ Moore-Penrose 伪逆使我们能够解决这类问题。 行列式,记作$\text{det}(\MA)$,是一个将方阵$\MA$映射到实数的函数。 行列式等于矩阵特征值的乘积。 -行列式的绝对值可以用来衡量矩阵相乘后空间扩大或者缩小了多少。 -如果行列式是$0$,那么空间至少沿着某一维完全收缩了,使其失去了所有的体积。 -如果行列式是$1$,那么矩阵相乘没有改变空间体积。 +行列式的绝对值可以用来衡量矩阵参与矩阵乘法后空间扩大或者缩小了多少。 +如果行列式是$0$,那么空间至少沿着某一维完全收缩了,使其失去了所有的体积。 +如果行列式是$1$,那么这个转换保持空间体积不变。 @@ -792,26 +778,25 @@ Moore-Penrose 伪逆使我们能够解决这类问题。 PCA由我们选择的解码函数而定。 -具体地,为了简化解码器,我们使用矩阵乘法将编码映射回$\SetR^n$,即$g(\Vc)=\MD\Vc$,其中$\MD\in \SetR^{n\times l}$ 是解码矩阵。 +具体地,为了简化解码器,我们使用矩阵乘法将编码映射回$\SetR^n$,即$g(\Vc)=\MD\Vc$,其中$\MD\in \SetR^{n\times l}$是定义解码的矩阵。 - -计算这个解码器的最优编码可能是一个困难的问题。 -为了使编码问题简单一些,PCA限制$\MD$的列向量为彼此正交的(注意,除非$l=n$,否则严格上$\MD$不是一个正交矩阵)。 - - 目前为止所描述的问题,可能会有多个解。 因为如果我们按比例地缩小所有点对应的编码向量$c_i$,那么我们只需按比例放大$\MD_{:,i}$,即可保持结果不变。 -为了让问题有唯一解,我们限制$\MD$中所有列向量都有单位范数。 +为了使问题有唯一解,我们限制$\MD$中所有列向量都有单位范数。 + + +计算这个解码器的最优编码可能是一个困难的问题。 +为了使编码问题简单一些,PCA限制$\MD$的列向量彼此正交(注意,除非$l=n$,否则严格意义上$\MD$不是一个正交矩阵)。 -为了将这个基本想法放进我们能够实现的算法,首先我们需要明确如何根据每一个输入$\Vx$得到一个最优编码$\Vc^*$。 +为了将这个基本想法变为我们能够实现的算法,首先我们需要明确如何根据每一个输入$\Vx$得到一个最优编码$\Vc^*$。 一种方法是最小化原始输入向量$\Vx$和重构向量$g(\Vc^*)$之间的距离。 我们使用范数来衡量它们之间的距离。 在PCA算法中,我们使用$L^2$范数: \begin{equation} -\Vc^* = \underset{\Vc}{\arg\min} \norm{\Vx-g(\Vc)}_2. + \Vc^* = \underset{\Vc}{\arg\min} \norm{\Vx-g(\Vc)}_2. \end{equation} @@ -820,8 +805,6 @@ PCA由我们选择的解码函数而定。 \begin{equation} \Vc^* = \argmin_{\Vc} \norm{\Vx - g(\Vc)}_2^2. \end{equation} - - 该最小化函数可以简化成 \begin{equation} (\Vx-g(\Vc))^\top(\Vx-g(\Vc)) @@ -851,13 +834,13 @@ PCA由我们选择的解码函数而定。 \begin{equation} = \underset{\Vc}{\arg\min} -2\Vx^\top\MD\Vc + \Vc^\top\MI_l\Vc \end{equation} -(矩阵$\MD$有正交和单位范数约束) +(矩阵$\MD$的正交性和单位范数约束) \begin{equation} = \underset{\Vc}{\arg\min} -2\Vx^\top\MD\Vc + \Vc^\top\Vc \end{equation} -我们可以通过线性代数微积分来求解这个最优化问题(如果你不清楚怎么做,请参考\sec?) +我们可以通过向量微积分来求解这个最优化问题(如果你不清楚怎么做,请参考\sec?) \begin{gather} \nabla_{\Vc} (-2\Vx^\top \MD \Vc + \Vc^\top\Vc) = 0\\ -2\MD^\top\Vx + 2\Vc = 0\\ @@ -866,7 +849,7 @@ PCA由我们选择的解码函数而定。 这使得算法很高效:最优编码$\Vx$只需要一个矩阵-向量乘法操作。 -我们使用该编码函数去编码向量: +为了编码向量,我们使用编码函数: \begin{equation} f(\Vx)=\MD^\top\Vx. \end{equation} @@ -881,15 +864,15 @@ PCA由我们选择的解码函数而定。 因为我们用相同的矩阵$\MD$对所有点进行解码,我们不能再孤立地看待每个点。 反之,我们必须最小化所有维数和所有点上的误差矩阵的Frobenius 范数: \begin{equation} - \MD^* = \underset{\MD}{\arg\min} \sqrt{\sum_{i,j}\left( \Vx_j^{(i)} - r(\Vx^{(i)})_j\right)^2} \text{ 限制在 } \MD^\top\MD = \MI_l. + \MD^* = \underset{\MD}{\arg\min} \sqrt{\sum_{i,j}\left( \Vx_j^{(i)} - r(\Vx^{(i)})_j\right)^2} \text{ subject to } \MD^\top\MD = \MI_l. \end{equation} 为了推导用于寻求$\MD^*$的算法,我们首先考虑$l=1$的情况。 在这种情况下,$\MD$是一个单一向量$\Vd$。 -将\eqn?代入\eqn?,简化$\MD$为$\Vd$,问题化为 +将\eqn?代入\eqn?,简化$\MD$为$\Vd$,问题简化为 \begin{equation} \Vd^* = \underset{\Vd}{\arg\min} \sum_i \norm{\Vx^{(i)} - \Vd\Vd^\top \Vx^{(i)}}_2^2 - \text{ 限制在 } \norm{\Vd}_2 = 1. + \text{ subject to } \norm{\Vd}_2 = 1. \end{equation} @@ -900,23 +883,23 @@ PCA由我们选择的解码函数而定。 于是我们通常写作如下: \begin{equation} \Vd^* = \underset{\Vd}{\arg\min} \sum_i \norm{\Vx^{(i)} - \Vd^\top \Vx^{(i)}\Vd}_2^2 - \text{ 限制在 } \norm{\Vd}_2 = 1, + \text{ subject to } \norm{\Vd}_2 = 1, \end{equation} 或者,考虑到标量的转置和自身相等,我们也可以写作: \begin{equation} \Vd^* = \underset{\Vd}{\arg\min} \sum_i \norm{\Vx^{(i)} - \Vx^{(i)\top}\Vd\Vd}_2^2 - \text{ 限制在 } \norm{\Vd}_2 = 1. + \text{ subject to } \norm{\Vd}_2 = 1. \end{equation} 读者应该对这些重排写法慢慢熟悉起来。 此时,使用单一矩阵来重述问题,比将问题写成求和形式更有帮助。 这有助于我们使用更紧凑的符号。 -让$\MX\in\SetR^{m\times n}$是将描述点的向量堆叠在一起的矩阵,例如$\MX_{i,:}=\Vx^{(i)^\top}$。 +将表示各点的向量堆叠成一个矩阵,记为$\MX\in\SetR^{m\times n}$,其中$\MX_{i,:}=\Vx^{(i)^\top}$。 原问题可以重新表述为: \begin{equation} \Vd^* = \underset{\Vd}{\arg\min} \norm{\MX - \MX\Vd\Vd^\top}_F^2 - \text{ 限制在 } \Vd^\top \Vd = 1. + \text{ subject to } \Vd^\top \Vd = 1. \end{equation} 暂时不考虑约束,我们可以将Frobenius 范数简化成下面的形式: \begin{equation} @@ -949,25 +932,25 @@ PCA由我们选择的解码函数而定。 此时,我们再来考虑约束条件: \begin{equation} - = \underset{\Vd}{\arg\min} \, - 2\Tr(\MX^\top\MX \Vd\Vd^\top) + \Tr(\MX^\top\MX\Vd\Vd^\top\Vd\Vd^\top ) - \text{ 限制在 } \Vd^\top \Vd = 1 + \underset{\Vd}{\arg\min} \, - 2\Tr(\MX^\top\MX \Vd\Vd^\top) + \Tr(\MX^\top\MX\Vd\Vd^\top\Vd\Vd^\top ) + \text{ subject to } \Vd^\top \Vd = 1 \end{equation} \begin{equation} = \underset{\Vd}{\arg\min} \, - 2\Tr(\MX^\top\MX \Vd \Vd^\top) + \Tr(\MX^\top\MX\Vd\Vd^\top ) - \text{ 限制在 } \Vd^\top \Vd = 1 + \text{ subject to } \Vd^\top \Vd = 1 \end{equation} (因为约束条件) \begin{equation} = \underset{\Vd}{\arg\min} \, - \Tr(\MX^\top\MX \Vd\Vd^\top) - \text{ 限制在 } \Vd^\top \Vd = 1 + \text{ subject to } \Vd^\top \Vd = 1 \end{equation} \begin{equation} = \underset{\Vd}{\arg\max} \, \Tr(\MX^\top\MX \Vd\Vd^\top) - \text{ 限制在 } \Vd^\top \Vd = 1 + \text{ subject to } \Vd^\top \Vd = 1 \end{equation} \begin{equation} = \underset{\Vd}{\arg\max} \, \Tr(\Vd^\top\MX^\top\MX \Vd) - \text{ 限制在 } \Vd^\top \Vd = 1 + \text{ subject to } \Vd^\top \Vd = 1 . \end{equation} @@ -976,12 +959,12 @@ PCA由我们选择的解码函数而定。 以上推导特定于$l=1$的情况, 仅得到了第一个主成分。 -更一般地,当我们希望得到主成分的基时,矩阵$\MD$由几个最大的特征值对应的的$l$个特征向量组成。 +更一般地,当我们希望得到主成分的基时,矩阵$\MD$由前$l$个最大的特征值对应的特征向量组成。 这个结论可以通过归纳法证明,我们建议将此证明作为练习。 -线性代数是学习深度学习所必须掌握的基础数学学科之一。 -另一门在机器学习中无处不在的重要数学学科是概率学,我们将在下章探讨。 +线性代数是理解深度学习所必须掌握的基础数学学科之一。 +另一门在机器学习中无处不在的重要数学学科是概率论,我们将在下章探讨。 diff --git a/scripts/parse_anno.py b/scripts/parse_anno.py new file mode 100644 index 0000000..fe8a416 --- /dev/null +++ b/scripts/parse_anno.py @@ -0,0 +1,32 @@ +import json + +# download the raw annotations from hypothes +# for example https://hypothes.is/api/search?_separate_replies=true&group=__world__&limit=200&offset=0&order=asc&sort=created&uri=https%3A%2F%2Fexacity.github.io%2Fdeeplearningbook-chinese%2FChapter2_linear_algebra%2F +anno = open('raw.txt','r').read() +json_anno = json.loads(anno) + +rows = json_anno['rows'] +replies = json_anno['replies'] + +cleaned_keys = ['user', 'text'] +cleaned_replies = [] +cleaned_rows = [] + +for reply in replies: + cleaned_reply = {k:reply[k] for k in ['user', 'text']} + cleaned_reply['time'] = reply['updated'][:16] + cleaned_replies.append(str(cleaned_reply)) + +for row in rows: + cleaned_row = {k:row[k] for k in ['user', 'text']} + origin_text = row['target'][0]['selector'][3] + cleaned_row['origin_text'] = (origin_text['prefix'] + " !!!" + origin_text['exact'] + "!!! " + origin_text['suffix']).replace('\n', '') + cleaned_row['time'] = row['updated'][:16] + cleaned_rows.append(str(cleaned_row)) + +# write to new file +f = open('annotations.txt', 'w') +f.write('\n'.join(cleaned_rows)) +f.write('\n\n============================= Replies =============================\n\n') +f.write('\n'.join(cleaned_replies)) +f.close() diff --git a/terminology.tex b/terminology.tex index 4391df7..78c4190 100644 --- a/terminology.tex +++ b/terminology.tex @@ -5432,8 +5432,8 @@ \newglossaryentry{matrix_inverse} { name=矩阵逆, - description={matrix inverse}, - sort={matrix inverse}, + description={matrix inversion}, + sort={matrix inversion}, } \newglossaryentry{origin}