众所周知,无论是机器学习还是深度学习的参数几乎都是用矩阵去描述的,自然而然的就会认为矩阵是用来存储数据的。其实这么去理解是可以的,从数据结构去理解的话,其实矩阵就是数组,而数组是用来存储数据的。
那么我们为什么要从空间的角度去理解矩阵呢?因为无论是机器学习还是深度学习中我们都会接触到空间的概念,从空间的角度去理解矩阵有助于加深深度学习和机器学习的概念。接下来让我们从空间的角度去理解矩阵的相关操作吧
什么是矩阵
我们可以想象有两个多维空间,假设一个是3维一个是4维。接下来我们需要做一个操作,就是将这俩个空间产生联系,类似于在这两个空间之间搭一座桥让两边的空间里面的数据可以交流。其实这就是函数中的映射,一个空间中的任意数据A通过这座桥(映射)之后变成了另一个空间中的数据B。这样的话两个空间就通过这座桥(映射)产生了联系。那么这座桥是怎么表示的呢?其实这座桥就是用矩阵来表示的。
假设三维空间中的数据为{a1, a2, a3},四维空间中的数据为{b1, b2, b3, b4}。那么这座桥我们就可以表示成一个3*4的矩阵
[
x
11
x
12
x
13
x
14
x
21
x
22
x
23
x
24
x
31
x
32
x
33
x
34
]
\left[ \begin{matrix} x11 & x12 & x13 & x14\\ x21 & x22 & x23 & x24\\ x31 & x32 & x33 & x34 \end{matrix} \right]
⎣⎡x11x21x31x12x22x32x13x23x33x14x24x34⎦⎤,这样两个空间就产生映射关系了,所以矩阵就是映射!
矩阵的运算
矩阵运算通常有三种:矩阵的加法;矩阵的乘法;矩阵的逆。
1.矩阵的加法:矩阵A和B的相加,我们可以理解为用矩阵B去调整矩阵A的映射规则。
2.矩阵的乘法:可以理解为多个映射的叠加。如我们有三个空间 X, Y , Z。已知X和Y空间用映射A去联系,Y和Z空间用映射B去联系。那么需要将X空间和Z空间联系起来话。我们只需要将A和B相乘就可以了。
3.矩阵的逆:前面说了映射就是矩阵,那么矩阵的逆就是逆映射。例如在一个机器翻译任务中我们已经训练好了一个从源语言到目标语言的翻译模型。那么我们如何去得到从目标语言到源语言的翻译模型呢?其实我们只需要去求得原模型的参数矩阵的逆,就可以了。完全不需要再去重新训练。
矩阵的分块
矩阵的分块其实涉及到了一种分治的思想。把大的矩阵分割成小的矩阵再去进行运算这样能加快运算速度。
在深度学习中我们是需要并行化计算去提升速度的。假如矩阵A是100000100000、矩阵B是100000*200000。我们仅依靠单核的CPU去计算的话速度是很慢的。而深度学习中参数矩阵都大的吓人。如果都去依靠CPU计算估计会让人崩溃。所以我们需要使用GPU去进行计算,因为GPU中有很多个核我们可以将这些很大参数矩阵进行分块然后分配到各个核中实现并行计算,这样可以极大的提升计算速度。