机器学习是如何利用线性代数来解决数据问题的

2021-09-15 14:13:48 浏览数 (1)

机器或者说计算机只理解数字,我们所有的而计算,计算机都会将这些转换成某种方式数字表示进行处理,使这些机器能够通过从数据中学习而不是像编程那样的预定义指令来解决问题。

所有类型的编程都在某种程度上使用数学,而机器学习是对数据进行编程以学习最能描述数据的函数。使用数据找到函数的最佳参数的问题(或过程)在 ML 中称为模型训练。因此,简而言之,机器学习是编程以优化最佳可能的解决方案,我们需要数学来理解该问题是如何解决的。

学习机器学习中数学的第一步是学习线性代数。

线性代数是解决在机器学习模型中表示数据和计算问题的数学基础。

它是数组的数学——技术上称为向量、矩阵和张量。

线性代数常见的应用领域

在 ML 中,开发模型的所有主要阶段的背后数学支持就是线性代数,或者说在所有的机器学习过程中运行的基本上都是线性代数的计算。

线性代数支持的重要应用领域是:

  1. 数据和学习模型表示
  2. 词嵌入
  3. 降维

数据表示是 ML 模型的燃料,我们需要将数据在输入模型之前转换为数组,对这些数组执行的计算包括矩阵乘法(点积)等操作,然后得到并返回输出,该输出也表示为 数字的变换矩阵/张量。

词嵌入:不用担心这里的术语,它只是用较小的维向量表示大维数据(想想数据中的大量变量)。例如自然语言处理 (NLP) 处理文本数据。处理文本意味着理解大量单词的含义,每个单词代表不同的含义,可能与另一个单词相似,线性代数中的向量嵌入使我们能够更有效地表示这些单词。

特征向量(SVD):像特征向量这样的概念允许我们减少数据的特征或维度的数量,同时使用例如主成分分析的得降维方法保留所有特征的本质。

从数据到向量

线性代数主要处理向量和矩阵(不同形状的数组)以及对这些数组的操作。在 NumPy 中,向量基本上是一维数字数组,但在几何上,它具有大小和方向。

我们的数据可以用向量表示。在上图中,该数据中的一行由一个特征向量表示,该向量具有 3 个元素或表示 3 个不同维度的分量。向量中的 N 个条目使其成为 n 维向量空间,在这种情况下,我们可以看到 3 维。

深度学习:神经网络中的张量流

线性代数可以在当今所有主要应用程序中发挥作用,无论是 LinkedIn 或 Twitter 帖子(词嵌入)上的情感分析,还是从 X 射线图像(计算机视觉)或任何语音中检测一种肺部感染 到文本机器人(NLP)。所有这些数据类型都由张量中的数字表示,我们运行向量化操作以使用神经网络从中学习模式,然后输出处理过的张量,然后解码以产生模型的最终推理。

所以我们可以理解为神经网络是张量在我们定义中的模型中流动。

降维:向量空间变换

当涉及到嵌入时,基本上可以认为是一个 n 维向量被另一个属于低维空间的向量替换,该向量更有意义并且克服了计算复杂性。

例如,这里有一个使用 2 维空间代替的 3 维向量,我们可以将其外推到具有大量维数的真实场景中。

降维并不意味着从数据中删除特征,而是寻找新特征,这些特征是原始特征的线性函数并保留原始特征的方差。

找到这些新变量(特征)转化为找到收敛于解决特征向量和特征值问题的主成分(PC)。

推荐引擎:利用嵌入

可以将嵌入视为嵌入在 3D 空间中的 2D 平面,这就是该术语的来源。我们可以将所站立的地面视为嵌入到生活的这个空间中的 2D 平面。

例如,这是谷歌推荐系统课程中的一张图片,我们在其中获得了不同用户及其首选电影的数据。有些用户有些是孩子,有些是成年人,有些电影堪称经典,而有些则更具艺术性。有些电影是针对年轻观众的,而像memento这样的电影则是成年人的首选。

现在,我们不仅需要用数字来表示这些信息,还需要找到新的小维向量表示,以很好地捕捉所有这些特征。

理解我们如何完成这项任务的一个非常快速的方法是理解称为矩阵分解的东西,它允许我们将一个大矩阵分解成更小的矩阵。

现在先忽略数字和颜色,试着理解我们是如何将一个大矩阵分解成两个小矩阵的。

例如,这里这个由 4X5、4 行和 5 个特征组成的矩阵被分解为两个矩阵,一个是 4X2 形状,另一个是 2X5 形状。我们基本上为用户和电影提供了新的小维向量。

这允许我们在 2D 向量空间上绘制它,在这里你会看到用户 #1 和电影哈利波特更接近,用户 #3 和电影史莱克更接近。

向量的点积(矩阵乘法)的概念告诉我们更多关于两个向量的相似性。它在相关/协方差计算、线性回归、逻辑回归、PCA、卷积、PageRank 和许多其他算法中都有应用。

线性代数被大量使用的行业

到目前为止,我希望你能够看到线性代数正在推动当今许多领域的 ML 计划。如果没有,这里是一个列表,仅举几例:

  1. 数据统计
  2. 化学物理
  3. 基因组学
  4. 词嵌入——神经网络/深度学习
  5. 机器人
  6. 图像处理
  7. 量子物理学

我们应该知道多少才能开始使用 ML / DL

现在,重要的问题是如何学习对这些线性代数概念进行编程。答案是不必重新发明轮子,只需要在计算上了解向量代数的基础知识,然后学习使用 NumPy 对这些概念进行编程。

NumPy 是一个科学计算包,它使我们可以访问线性代数的所有基本概念。它运行编译的 C 代码速度很快,并且具有大量我们可以使用的数学和科学函数。

0 人点赞