最近估计不少同志也终于开始撸起袖子学人工智能了。如果你像我一样分不清“人工智能”、“机器学习”、“深度学习”、“神经网络”各种词汇之间的关系的话,可以看下这个图:
我们(嗯对,就是我以及我家那位)准备在学习的过程中把相关笔记都记录下来。本篇的序号是0,意思就是在尚未正式开始之前的一些准备工作。
相信很多对AI持观望态度的开发者,都是卡在数学这关,因为随便翻开一个资料,一大堆数学公式,各种看不懂。其实学习AI的过程中可能涉及到的数学知识大概有这么几个:线性代数、微积分、概率论。也就是大一大二的知识,没什么深奥的东西——但是,对于大多数人来说,大学里面的数学课自己都不知道是怎么过的。比如对我而言,学得最不好的就是线性代数,如果不是查看维基百科,我都想不起来线性代数里面其实就是学的向量和矩阵相关的知识。
所以,这篇笔记里面我来回顾一些矩阵的基础,尤其是要搞清楚,到底该如何理解矩阵。
矩阵
矩阵的数学定义:
一个m×n的矩阵是一个由m行n列元素排列成的矩形阵列
矩阵乘法
两个矩阵的乘法仅当第一个矩阵A的列数和另一个矩阵B的行数相等时才能定义。如A是m×n矩阵和B是n×p矩阵,它们的乘积AB是一个m×p矩阵
举个例子:
矩阵的本质
大家应该对上述的矩阵与矩阵乘法并不陌生,毕竟线性代数是大学的必修课。我也学过,但我在学习线性代数的时候其实内心是抗拒的:我为什么要用一堆方框里的数字进行加减乘除?意义在哪里?另外,导数可以用函数曲线的斜率来想象,积分可以用函数覆盖面积来想象,但矩阵相关的一系列知识无法在我脑海中形成一个可以想象的物理模型,导致对里面的各种知识点我只能死记硬背,考完试就忘了。
如果你也有类似的困惑,可以跟我一起来重新认识一下矩阵。
有三篇网文非常直观地解释了矩阵的本质:
其思路概括来说如下:
- 首先要有空间的概念,如果不考虑严谨的定义,你可以用我们熟知的二维或者三维空间来想象:里面有无穷多的点,通过某些动作,可以从一个点“移动”到另一个点,容纳运动是空间的本质特征。
- 线性空间也是一种空间,线性空间是容纳向量对象运动的。如果选定了坐标系,那么一个向量可以用它在每个维度上的坐标值来表示,比如二维空间里可以表示为[x, y],三维空间可以表示为[x, y, z],更高维虽然无法想象,但仍然可以用类似的数学方式表示出来。
- 向量共有两种形式,一种为列向量,一种为行向量。虽然我们可能比较习惯行向量,但在这里,我们默认使用列向量。比如[-1,2]就这样表示:
- 我们可以通过某种运算,把空间里的一个点“移动”另一个位置。比如我们想把[-1,2]移动到[5,2],可以执行如下运算:
- 上图中左边的这个变量,就是一个矩阵,所以矩阵是线性空间中运动(变换)的描述。
换言之,矩阵的乘法,本质是一种运动。但除此以外,还有另外一种理解方式。
我们知道,运动是相对的,把[-1,2]变成[5,2],除了“移动”,还可以通过变换坐标系的方式实现。也就是说,找到这样的一个坐标系,在那里,同样的一个向量可以表示为[5,2]。
在这个情况下,对上面那个矩阵相乘例子而言,里面的那个2x2方阵就可以理解为一个坐标系,在这个坐标系下,[-1,2]这个向量可以表示为[5,2]。
比如上面这个动图中,通过坐标系变化,把红色向量[0,1]、绿色向量[1,0]变成了[3,0]和[1,-2]。
因此,矩阵的实质就是将坐标整体线性变换
转置矩阵
这里顺带回顾一下转置矩阵的概念。
m×n矩阵A的转置是一个n×m的矩阵,记为AT,其中的第i个行向量是原矩阵A的第i个列向量
之所以提这个,是因为后续在学习评分函数的时候会看到这个,如果你看到y=WT*X+b,你就这么理解:如前文所说,所有的向量默认都是列向量,因此WT就是一个行向量,根据矩阵相乘法则容易得出WT*X就是一个标量,而b也是标量,所以y也是标量了。
如果你喜欢本文,请不要吝啬你的点赞或打赏,毕竟一个红心就能让我高兴半天
如果你想获取本系列后续的新内容,请关注我的账号,预计会以一周一篇的频率进行更新~