前面大概有2年时间,利用业余时间断断续续写了一个机器学习方法系列,和深度学习方法系列,还有一个三十分钟理解系列(一些趣味知识);新的一年开始了,今年给自己定的学习目标——以补齐基础理论为重点,研究一些基础课题;同时逐步继续写上述三个系列的文章。
最近越来越多的研究工作聚焦研究多层神经网络的原理,本质,我相信深度学习并不是无法掌控的“炼金术”,而是真真实实有理论保证的理论体系;
本篇打算摘录整理一些最最基本的数据知识,包括线性代数,矩阵求导,凸函数等,一方面便于自己平时查用,一方面也给读者想入门的有一个初步的介绍。
1.线性代数
线性代数作为数学中的一个重要的分支,我感觉是一般人学习机器学习或者深度学习算法的必备知识,作为博主这样的CS出身的工科生,学了线性代数、微积分、概率论这些基础课程,平时也就够用了,再复杂的一些数学分支涉及的很少。(这一部分摘录自[1],加上我自己的一些理解)
1.1 标量,向量,矩阵和张量
- 标量(scalar):一个标量就是一个单独的数。用斜体表示标量,如 s∈R .
向量(vector):一个向量是一列数,我们用粗体的小写名称表示向量。比如
x,将向量x 写成方括号包含的纵柱:
x=⎡⎣⎢⎢⎢⎢x1x2⋮xn⎤⎦⎥⎥⎥⎥矩阵(matrix):矩阵是二维数组,我们通常赋予矩阵粗体大写变量名称,比如
A 。如果一个矩阵高度是m,宽度是n,那么说 A∈Rm×n 。一个矩阵可以表示如下:
张量(tensor):某些情况下,我们会讨论不止维坐标的数组。如果一组数组中的元素分布在若干维坐标的规则网络中,就将其称为张量。用A 表示,如张量中坐标为(i,j,k)的元素记作 Ai,j,k
转置(transpose):矩阵的转置是以对角线为轴的镜像,这条从左上角到右下角的对角线称为主对角线(main diagonal)。将矩阵A的转置表示为 AT 。定义如下: (A⊤)i,j=Aj,i
1.2 矩阵和向量相乘
矩阵乘法:矩阵运算中最重要的操作之一。两个矩阵A和B 的矩阵乘积(matrix product)是第三个矩阵C 。矩阵乘法中A 的列必须和 B的行数相同。即如果矩阵 A的形状是 m×n,矩阵B的形状是 n×p,那么矩阵 C的形状就是 m×p。即
C=A×B具体的地,其中的乘法操作定义为Ci,j=∑kAi,kBk,j矩阵乘积服从分配律,结合律,但是矩阵乘法没有交换律,
点积(dot product)两个相同维数的向量x和y的点积可看作是矩阵乘积 xTy
矩阵乘积的转置 (向量也是一种特殊的矩阵)
(AB)⊤=B⊤A⊤x⊤y=(x⊤y)⊤=y⊤x
1.3 单位矩阵和逆矩阵
矩阵A的矩阵逆被记作
A−1
,被定义为如下形式:
线性无关(linearly independent): 如果一组向量中的任意一个向量都不能表示成其他向量的线性组合,那么这组向量被称之为线性无关。要想使矩阵可逆,首先必须矩阵是一个方阵(square),即 m=n,其次,所有的列向量都是线性无关的。一个列向量线性相关的方阵被称为 奇异的(singular)。
1.4 范数
需要衡量一个向量的大小,在机器学习中,我们使用称为范数(norm)的函数来衡量向量大小,形式上,
Lp
范数如下[5]:
范数是将向量映射到非负值的函数。直观上来说,向量 x的范数就是衡量从原点到 x的距离。更严格来说,范数满足下列性质的函数:
当 p=2时, L2被称作欧几里得范数(Euclidean norm)。它表示从原点出发到向量x确定的点的欧几里得距离。L2范数常被用来衡量向量的大小,因为它便于求导计算(如对向量中每个元素的导数只取决于对应的元素,但是它也有缺陷,即它在原点附近增长得十分缓慢),可以简单用点积 xTx 来计算。
当p=1时,称为L1范数,是向量元素绝对值之和;
当p=0时,上面的定义没有包含,称为0范数,定义为向量非零元素的数量
max范数(max norm):这个范数表示向量中具有最大幅度得元素的绝对值,用
L∞
范数表示,形式为:
两个向量的点积(dot product)也可以用范数来表示。具体地
矩阵的范数(matrix norm)具体请参考[6],最常用的就是 Frobenius norm
1.5 特殊类型的矩阵和向量
对角矩阵 (diagonal matrix) 只在主对角线上含有非零元素,其它位置都是零。矩阵D是对角矩阵,当且仅当 ∀i≠j,Di,j=0,用 diag(v)表示一个对角元素由向量v中元素给定的对角矩。对称(symmetric) 矩阵是任意转置和自己相等的矩阵: A=A⊤ .
单位向量(unit vector) 是具有单位范数(unit norm) 的向量: ||x||2=1
- 正交矩阵(orthonormal matrix) 是指行向量是标准正交的,列向量是标准正交的方阵:
如果 x⊤y=0 ,那么向量 x和向量 y互相正交(orthogonal)。如果两个向量都有非零范数,那么表示这两个向量之间的夹角是90度。在 Rn 中,至多有n个范数非零向量互相正交。如果这些向量不仅互相正交,并且范数都为1那么我们称它们是标准正交(orthonormal) 。
A⊤A=AA⊤=I,即A−1=A⊤
所以正交矩阵受到关注是因为求逆计算代价小。
1.6 特征分解
许多数学对象可以通过将它们分解成多个组成部分,或者找到它们的一些属性而被更好地理解,这些属性是通用的,而不是由我们选择表示它们的方式引起的。就像我们可以通过分解质因数来发现一些关于整数的真实性质,我们也可以通过分解矩阵来获取一些矩阵表示成数组元素时不明显的函数性质。
特征分解(eigendecomposition) 是使用最广的矩阵分解之一,即我们将矩阵分解成一组特征向量和特征值。方阵A的特征向量(eigenvector)是指与A相乘后相当于对该向量进行缩放的非零向量v:
标量λ被称为这个特征向量对应的特征值(eigenvalue);如果v是A的特征向量,那么任何放缩后的向量 sv,s∈R,s≠0 也是A的特征向量并且其与 v 有相同的特征值。所以我们通常只考虑单位特征向量。
假设矩阵A有n个线性无关的特征向量 {v1,v2,...,vn} ,对应的特征值是 {λ1,λ2,...,λn} ,我们将特征向量连成一个矩阵,使得每一列是一个特征向量:
因此
A
的特征分解(eigen-decomposition)可以记作
上面我们构建具体特定的特征值和特征向量,能够使我们在目标方向上延伸空间。我们也常常希望将矩阵分解(decompose) 成特征值和特征向量。这样可以帮助我们分析矩阵的特定性质,就像质因数分解有助于我们理解整数。
并不是所有的方阵都可以被对角化,这里主要考虑对称矩阵( A=AT )的特征分解。如果一个对称矩阵的特征值都不相同,则其相应的所有特征向量正交
其中V是A的特征向量组成的正交矩阵,Λ是对角矩阵。因为V是正交矩阵,所以可以将A看作是沿方向
vi
延展
λi
倍的空间。如下图所示:
1.7 矩阵的迹
矩阵的迹定义是矩阵对角元素的和:
标量的迹是它本身: a=Tr(a) 。迹运算因为很多原因而受到关注。若不使用求和符号,有些矩阵运算很难描述,而通过矩阵乘法和迹运算符号,可以进行清楚地表示。例如,迹运算提供了另一种描述矩阵Frobenius 范数的方式:
用迹运算表示式,使我们可以用很多有用的性质来操纵表示式。例如迹运算在转置下是不变的:
矩阵乘积的迹可以按顺序调换矩阵的位置:
1.8 二次型(Quadratic Form)
给定矩阵
A∈Rm×n
,函数
被称为二次型。如果对于所有 x∈Rn ,有 xTAx≥0 ,则为半正定矩阵,此时 λ(A)≥0 .如果对于所有 x∈Rn ,有 xTAx>0 ,则为正定矩阵,此时 λ(A)>0 .
2. 矩阵求导, 凸函数
下一篇特别写一下求导,以及凸优化的基本概念,这些都是机器学习基本的知识。本篇就到这里。
未完待续…
[1] http://blog.csdn.net/u010976453/article/details/54342895
[2] http://blog.csdn.net/u010976453/article/details/78482502
[3] http://blog.csdn.net/u010976453/article/details/54381248
[4] Jacobian矩阵和Hessian矩阵 http://jacoxu.com/jacobian%e7%9f%a9%e9%98%b5%e5%92%8chessian%e7%9f%a9%e9%98%b5/
[5] https://en.wikipedia.org/wiki/Norm_(mathematics)
[6] https://en.wikipedia.org/wiki/Matrix_norm
[7] 机器学习中的线性代数之矩阵求导 http://blog.csdn.net/u010976453/article/details/54381248
[8] 牛顿法与Hessian矩阵http://blog.csdn.net/linolzhang/article/details/60151623