线性代数在机器学习中有几个基础的使用案例,包括 data representation, dimensionality reduction and vector embedding (数据表示,降维和向量嵌入)。从介绍线性代数的基本概念开始,本文将构建一个如何将这些概念应用于数据表示的基本观点,例如解决线性方程系统,线性回归和神经网络。
标量、向量、矩阵和张量的定义
首先,让我们讨论线性代数的基本构件——标量、向量、矩阵和张量。
- 标量:一个单独的数字
- 向量:一个一维的数字阵列
- 矩阵:一个二维的数字阵列
- 张量:一个多维的数字阵列
为了实现它们,我们可以在Python中使用NumPy数组np.array()
。
scalar = 1
vector = np.array([1,2])
matrix = np.array([[1,1],[2,2]])
tensor = np.array([[[1,1],[2,2]],
[[3,3],[4,4]]])
让我们看一下我们上面生成的向量、矩阵和张量的形状。
矩阵和向量运算
1. 加法,减法,乘法,除法
就像我们对数字执行操作一样,相同的逻辑也适用于矩阵和向量。但是,请注意,这些对矩阵的操作对两个矩阵的大小有限制。这是因为它们是以元素方式执行的,这与矩阵点积不同。
2. 矩阵点积 (Dot Product)
点积常常被误解为矩阵元素逐个乘法(如上所示);实际上,它是对矩阵和向量更常用的运算。点积通过逐行地将第一个矩阵的每一行与第二个矩阵的列进行一次元素乘法来操作,因此,一个 j x k
矩阵和一个 k x i
矩阵之间的点积是一个 j x i
矩阵。以下是一个关于3×2矩阵与2×3矩阵之间的点积运算的示例。
点积运算要求第一个矩阵的列数与第二个矩阵的行数匹配。我们使用dot()
来执行点积。矩阵在操作中的顺序至关重要 – 如下所示,matrix2.dot(matrix1)
将产生与matrix1.dot(matrix2)
不同的结果。因此,与元素间的乘法不同,矩阵的点积不是可交换的。
3. 重构数组 (Reshape)
向量通常被视为一个只有一列的矩阵,我们可以通过指定列数和行数使用reshape()
将其重塑为矩阵格式。我们也可以将矩阵重塑为不同的布局。例如,我们可以使用下面的代码将2×2的矩阵转换为4行1列。
4. 转置交换(Transpose)
转置交换矩阵的行和列,所以一个 j x k
矩阵变成 k x j
。要转置矩阵,我们使用 matrix.T
。
!
5. 单位矩阵和逆矩阵 (Identity and Inverse Matrix)
逆矩阵是矩阵的重要转换,但要理解逆矩阵,我们首先需要解释什么是单位矩阵。单位矩阵要求列数和行数相同,并且所有对角线元素都是1。此外,矩阵或向量在乘以相应的单位矩阵后保持不变。
要在Python中创建一个3 x 3的单位矩阵,我们使用numpy.identity(3)
。
矩阵本身(以下称为M)与矩阵的逆的点积是恒等矩阵,其遵循以下等式:
在考虑矩阵的逆时,有两件事需要考虑:1) 矩阵和矩阵逆的顺序并不重要,尽管大多数矩阵的点积在顺序改变时会有所不同;2) 并非所有的矩阵都有逆。
要计算矩阵的逆,我们可以使用 np.linalg.inv()
。
线性代数在机器学习中的应用
我们将从向量和矩阵在解决线性方程系统中最直接的应用开始,然后逐步推广到线性回归,然后是神经网络。
1. 线性代数在线性方程系统中的应用
假设我们有下面的线性方程系统,常用的计算 a 和 b 的值的方法是一次消除一个元素,这可能需要两个变量的 3 到 4 步。
3a + 2b = 7
a — b = -1
另一种解决方案是使用矩阵和向量的点积来表示它。我们可以将所有的系数打包成一个矩阵,将所有的变量打包成一个向量,然后我们得到以下内容:
矩阵表示法让我们有了一种不同的思维方式,可以一步解决方程。如下图所示,我们将系数矩阵表示为 M,变量向量表示为 x,输出向量为 y,然后将方程的两边都乘以矩阵 M 的逆。由于矩阵的逆和矩阵本身的点积是单位矩阵,我们可以将线性方程系统的解简化为系数矩阵 M 的逆和输出向量 y 的点积。
我们使用以下代码片段一步计算变量 a 和 b 的值。
通过使用矩阵来表示线性方程系统,可以显著提高计算速度。想象一下,如果我们使用传统的方法,需要使用几个 for-loop 一次消除一个元素。这对于这样一个简单的系统来说可能看起来是一个小的改进,但是如果我们将其扩展到包含像这样的大量系统的机器学习或深度学习,那么效率将大大提高。
2. 线性代数在线性回归中的应用
在解决线性方程系统中显示的相同原理可以推广到机器学习中的线性回归模型。假设我们有一个具有 n 个特征和 m 个实例的数据集,我们通常将线性回归表示为这些特征的加权和。
如果我们使用矩阵形式来表示一个实例的公式呢?我们可以在 1 x (n+1)
矩阵中存储特征值,权重存储在 (n+1) x 1
向量中。然后我们将相同颜色的元素相乘,然后加在一起得到加权和。
当实例数量增加时,我们自然会想到使用 for-loop 循环迭代。 但是,如果我们用矩阵乘法来一次处理所有的实例,那么计算就会更快。我们可以创建一个 m x (n + 1)
的特征矩阵,其中每一行是一个实例的特征,然后与权重向量相乘,得到一个 m x 1
的向量,其中每个元素都是相应实例的加权和。
线性回归模型的训练过程就是找到一组权重,使得预测的加权和尽可能接近实际的目标值。我们通常通过最小化预测和实际目标之间的均方误差来实现这一点。这是一个优化问题,我们可以使用梯度下降等方法来解决。
3. 线性代数在神经网络中的应用
神经网络是一种强大的机器学习模型,它可以从数据中学习复杂的非线性模式。神经网络的基本组成部分是神经元,每个神经元都包含一个线性部分和一个非线性部分。线性部分是输入的加权和,非线性部分是激活函数,它可以引入非线性,使得神经网络能够学习非线性模式。
在神经网络的训练过程中,我们需要进行大量的矩阵运算,包括矩阵乘法、矩阵加法、矩阵与标量的运算等。这些运算可以通过线性代数库高效地完成,而无需编写复杂的 for-loop。这大大提高了神经网络的训练速度,使得我们能够在大规模数据集上训练复杂的模型。
以一个简单的例子来说明,我们将神经网络中的隐藏层i(节点i1, i2, i3)和隐藏层j(节点j1, j2)的内部过程可视化。w11表示输入节点i1到节点j1的权重,w21表示输入节点i2到节点j1的权重。在这种情况下,我们可以将权重组合成3×2的矩阵。
这可以推广到成千上万的实例,形成神经网络模型的大量训练数据集。现在这个过程类似于我们如何表示线性回归模型,除了我们使用矩阵来存储权重,而不是向量,但原理仍然相同。
进一步,我们可以将这个扩展到深度神经网络进行深度学习。这就是Tensor用于表示超过两个维度的数据的地方。例如,在卷积神经网络中,我们使用3D Tensor来表示图像像素,因为它们通常通过三个不同的频道(即,红色,绿色,蓝色颜色通道)来描述。
总的来说,线性代数是机器学习的基础,它为我们提供了一种有效的方式来描述和计算数据。通过理解和掌握线性代数,我们可以更好地理解和应用机器学习模型,从而解决实际问题。
今天的文章【机器学习】线性代数在机器学习中的三种常见应用[通俗易懂]分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/84282.html