当前位置: 首页 > 科技观察

基本介绍:深度学习中矩阵运算的概念和代码实现

时间:2023-03-16 19:49:30 科技观察

我们在学习机器学习的时候,经常会遇到需要利用矩阵来提高计算效率的需求。例如,当使用批量梯度下降迭代寻找最优解时,正规方程将以更紧凑的矩阵形式提供权重的解析解。而如果不了解矩阵的算法和含义,我们甚至很难理解矩阵分解、反向传播算法等一些基本概念。同时,由于特征和权重都是用向量存储的,如果不了解矩阵运算,代码实现会变得非常困难。1.什么是线性代数?在深度学习中,线性代数是一个强大的数学工具箱,它提供了同时计算多维数组的方法。线性代数不仅会提供向量、矩阵等结构来存储这些数,还会提供矩阵的加减乘除等运算规则。2.为什么线性代数这么实用?线性代数将复杂的问题转化为简单、直观和高效的计算问题。下面的例子可以看出线性代数的代码表达是多么的简洁和优美,实现了同样的功能。#Multiplytwoarraysx=[1,2,3]y=[2,3,4]product=[]foriinrange(len(x)):product.append(x[i]*y[i])#Linearalgebraversionx=numpy。array([1,2,3])y=numpy.array([2,3,4])x*y3.线性代数如何应用于深度学习?神经网络将权重存储在矩阵中。线性代数,尤其是在GPU上,可以对矩阵进行简单快速的计算。事实上,GPU的设计源于向量和矩阵计算处理的基本概念。与图像由像素块阵列构成的方式相同,视频游戏使用大量连续展开的矩阵来产生引人入胜的游戏体验。GPU并行操作整个矩阵的元素,而不是一个一个地操作。4.Vector由数字或其他项组成的一维数组。在几何学中,向量存储空间中点方向的潜在变化。向量[3,-2]也表示原点向(3,-2)移动的趋势。如果向量具有多于一维的维度,则称为矩阵。1.向量的符号表示向量的符号表示方式有很多种,以下是您在本文中可能会遇到的几种:2.几何中的向量向量一般表示一个点的运动,向量存储它的方向和潜在变化的幅度。如下图,在平面空间绘制向量[-2,5],因为向量只存储了方向和大小,那么平移不会改变向量的值,所以所有的平移向量(direction和size保持不变)都是相等的。3.标量运算标量运算是向量和数字之间的运算。向量与数的运算,就是对向量中的每一个元素和这个数进行相应的运算。如下图所示的一个标量运算:4.向量之间的运算在向量之间的运算中,可以将对应位置的值组合起来生成一个新的向量。第一个向量的第i个值只匹配第二个向量的第i个值。这也意味着向量之间的维度必须相等才能执行操作。下图表示向量之间的加减就是对应元素之间的加减,代码表示向量之间的加减除。y=np.array([1,2,3])x=np.array([2,3,4])y+x=[3,5,7]y-x=[-1,-1,-1]y/x=[.5,.67,.75]在numpy中,如果向量是一维的,那么它可以看成是一个标量,与其他多维向量的运算就相当于一个数。5.向量乘法向量乘法有两种:一种是点积,一种是阿达玛积。6.点积两个向量点积的结果是一个标量。向量和矩阵的点积(矩阵乘法)是深度学习中最重要的运算之一。7.Hadamard乘积Hadamard乘积是向量中元素与结果之间的乘积。从下图可以看出,阿达玛乘积是向量对应元素的乘积。y=np.array([1,2,3])x=np.array([2,3,4])y*x=[2,6,12]8。向量场向量场表示如果我们使用一个向量函数(如向量加法或乘法等),其中任意一点(x,y)将有什么样的运动趋势。给定空间中的一个点,向量场是我们使用的向量运算在该点的方向和大小。这个向量场很有趣,因为它会根据起点有不同的方向。发生这种情况是因为在这个矢量场中,存储在矢量后面的项不是像5或2这样的实数,而是像2x或x^2这样的变量。对于图中的每一个点,我们将坐标轴变换为2x或者x^2,然后从起点到新的坐标点画一个箭头,这样就做出了上图。向量场对于梯度下降等机器学习算法的可视化非常重要。5.矩阵矩阵是由数字或其他项组成的表格,但表格会有特定的加减乘法规则。1.矩阵的阶我们用阶来描述矩阵的维数:即行数×列数(如3×2)的阶矩阵。a=np.array([[1,2,3],[4,5,6]])a.shape==(2,3)b=np.array([[1,2,3]])b.shape==(1,3)2.矩阵的标量运算矩阵的标量运算与向量相同。标量和矩阵中的每个元素都可以进行简单的处理(如加、减、乘、除等)。a=np.array([[1,2],[3,4]])a+1[[2,3],[4,5]]3。为了在矩阵之间进行加减运算,两个矩阵的阶数必须相等。然后我们可以对两个矩阵的相应元素进行操作。下图显示了二阶方阵的相加。a=np.array([[1,2],[3,4]])b=np.array([[1,2],[3,4]])a+b[[2,4],[6,8]]a—b[[0,0],[0,0]]4。Numpy广播在Numpy中,矩阵之间的运算所需的顺序相等性可以通过称为广播的机制来更改Lessstrict。如果两个矩阵对应的阶数(行数×列数)满足以下两个要求,则可以进行运算:两个矩阵的阶数相等矩阵的阶数维度为1a=np。array([[1],[2]])b=np.array([[3,4],[5,6]])c=np.array([[1,2]])#Sameno.ofrows#Differentno.ofcolumns#butahasonecolumnsothisworksa*b[[3,4],[10,12]]#Sameno.ofcolumns#Differentno.ofrows#butchasonerowsothisworksb*c[[3,8],[5,12]]#Differentno.ofcolumns#Differentno.ofrows#Butbothaandcmeetthe#size1requirementrulea+c[[2,3],[3,4]]在高维(三维或四维等)矩阵的情况下,矩阵间运算比较多有趣,但它们在深度学习中并不常见。5、矩阵的阿达玛积阿达玛积也是矩阵间的运算,即两个矩阵之间相同位置的元素互积。a=np.array([[2,3],[2,3]])b=np.array([[3,4],[5,6]])#使用python的smultiplyoperatora*b[[6,12],[10,18]]在numpy中,矩阵和向量的Hadamard乘积只需要两个矩阵就可以满足广播机制的要求。6、矩阵转置神经网络在处理权值或不同大小的输入矩阵时,矩阵的阶数往往不满足矩阵乘法的要求。矩阵的转置是通过旋转矩阵来满足矩阵乘法的维数要求。下面,我们可以分两步完成矩阵的转置。将矩阵旋转90度,将每一行的元素倒序写入。接下来,我们将矩阵M转置为一个矩阵Ta=np.array([[1,2],[3,4]])a.T[[1,3],[2,4]]六、矩阵乘法矩阵乘法由一组乘法规则组成,它们共同作用乘以一个新的矩阵。1.规则是不是所有的矩阵都能进行矩阵乘法。如果两个矩阵可以相乘,需要满足以下条件:第一个矩阵的列数必须等于第二个矩阵的行数m×nn×k阶矩阵左乘的结果由一个m×k阶矩阵是一个m×k阶矩阵。新矩阵等于第一个矩阵的行数×第二个矩阵的列数。2.步骤矩阵乘法的步骤类似于向量点积的过程。它们都是通过在相应位置乘以和添加元素得到的。第一个矩阵的每一行的维度等于第二个矩阵的每一列的维度,所以第一个矩阵的第i行元素与第j个对应元素的乘积之和第二个矩阵的第i列等于新矩阵第i行第j列元素的值。下图中,矩阵A左乘矩阵B得到矩阵C,A矩阵的行向量与B矩阵的列向量的点积等于C矩阵的元素,即可以通过下图中C矩阵内部元素的组成来理解。A矩阵的行向量a1与B矩阵的列向量b1的点积如下图所示:下面是另一个矩阵的乘积:矩阵乘法不可交换(即AB≠BA)。由于不可能期望在更改向量的一部分后得到相同的结果,并且第一个矩阵必须具有相同的列数,而第二个矩阵具有相同的行数,因此也可以看出为什么顺序结果矩阵乘以影响。矩阵乘法虽然是人为的规则,但它确实极大地简化了计算的表达,可以简洁地表达庞大的计算量,这对机器学习算法的开发和使用有着重要的作用。***你可以通过以下案例来检验你是否掌握了矩阵运算的基本原理:下列矩阵乘法的顺序是什么?以下矩阵乘法的顺序是什么?以下矩阵的乘积是多少?以下矩阵的乘积是多少?以下矩阵的乘积是多少?7.使用Numpy进行矩阵乘法在Numpy中,np.dot(a,b)函数可以进行向量和矩阵的点积。而且这个函数有很多有趣的特性,所以建议大家在使用之前先看看这个函数的用法:https://docs.scipy.org/doc/numpy/reference/generated/numpy.dot.htmla=np.array([[1,2]])a.shape==(1,2)b=np.array([[3,4],[5,6]])b.shape==(2,2)#Multiplymm=np.dot(a,b)mm==[13,16]mm.shape==(1,2)深度学习通常计算量巨大。从最初的特征输入开始,我们将使用高维向量将特征输入到神经网络中,并将每一层的权重作为列向量,形成权重矩阵。每一层的前向传播需要使用矩阵乘法计算,反向传播需要了解矩阵运算才能更深入地理解其运行原理。这篇文章是一篇关于矩阵运算的基础文章。不仅对于概念的理解很重要,在初学者开始学习搭建机器学习系统时也更有用,因为矩阵运算的代码是理解一段代码或者写一段代码的基础.并且矩阵运算代码实现的算法远比循环语句或条件语句代码实现的算法简洁易读。原文:https://medium.com/towards-data-science/linear-algebra-cheat-sheet-for-deep-learning-cd67aba4526c【本文为机器之心专栏原文翻译,微信公众号《机器之心(id:almosthuman2014)》]点此查看本作者更多好文