线性代数如何在机器学习中应用

当您学习线性代数之类的抽象主题时,您可能会奇怪:为什么需要所有这些向量和矩阵? 您将如何为实际目的应用所有这些反演,换位,特征向量和特征值?


好吧,如果您学习线性代数的目的是进行机器学习,那么这就是您的答案。


简而言之,您可以在3个不同的级别上使用线性代数进行机器学习:


  • 将模型应用于数据;
  • 训练模型;
  • 了解它如何工作或为什么不工作。

画图

我假设您(读者)至少对线性代数概念(例如向量,矩阵,它们的乘积,逆矩阵,特征向量和特征值)有模糊的想法,并且机器学习问题(例如回归,分类和降维) 。 如果不是,也许现在是在Wikipedia上阅读它们的好时机,或者甚至是注册有关这些主题的MOOC。


申请书


机器学习通常所做的是拟合某些功能 fWX=H ,在哪里 X 是输入数据, H 是该数据的一些有用表示,并且 W 是其他参数,我们的功能取决于这些参数,必须学习这些参数。 当我们有这个表示 H ,我们可以使用它例如重建原始数据 X (例如在无监督学习中),或者为了预测兴趣价值, Y (如在监督学习中)。


全部 XHWY 通常是数字数组,并且至少可以存储为向量和矩阵。 但是,仅存储并不重要。 重要的是我们的功能 f 通常是线性的,即 H=XW 。 此类线性算法的示例包括:


  • 线性回归,其中 Y=H 。 这是解决回归问题的明智基准,也是回答诸如“ x 影响 y ,其他条件是否相等?”
  • 逻辑回归,其中 Y = softmax(H)$ 。 对于分类问题,这是一个很好的基准,有时很难突破这个基准。
  • 主成分分析,其中 H 只是高维的低维表示 X ,从 X 可以高精度地恢复。 您可以将其视为压缩算法。
  • 其他类似PCA的算法(矩阵分解)被广泛用于推荐系统中,以将“哪些产品是由哪些用户购买”的稀疏矩阵转化为用户和产品的紧凑且密集的表示形式,可以进一步用于预测新的交易。

其他算法(例如神经网络)学习非线性变换,但仍然严重依赖线性运算(即矩阵矩阵或矩阵向量乘法)。 一个简单的神经网络可能看起来像 Y= sigmaW2 sigmaW1X -使用两个矩阵乘法和一个非线性变换  sigma 他们之间。


培训课程


要训​​练算法,通常需要定义一个损失函数并尝试对其进行优化。 损失本身有时可以用线性代数方便地写出来。 例如,二次损失(用于最小二乘法)可以写为点积 Y\帽YTY\帽Y ,在哪里 \帽Y 是您预测的向量,并且 Y 是您试图预测的基本事实。 这种表示很有用,因为它使我们能够派生出最小化这种损失的方法。 例如,如果您将线性回归与最小二乘法结合使用,则最佳解如下 W=XTX1XTY 。 一站式进行大量线性操作!


线性解决方案的另一个示例是PCA,其中感兴趣的参数 W 是第一个 k 矩阵的特征向量 XTX ,对应于最大的特征值。


如果您训练神经网络,通常没有最佳参数的解析解决方案,并且您必须使用梯度下降。 为此,您需要通过参数来区分损耗,并且在这样做时,您必须再次乘以矩阵,因为如果 =fghw (一个复合函数),然后  frac\部\部w=f\乘g\乘h ,并且所有这些导数都是矩阵或向量,因为 gh 是多维的。


简单的梯度下降是可以的,但速度较慢。 您可以通过应用牛顿优化方法来加快速度。 基本方法是 Wt+1=WtA1B ,在哪里 B是参数的一阶导数的向量和损失的二阶导数的矩阵 W 。 但是它可能不稳定和/或计算昂贵,并且您可能需要提出它的近似值(例如L-BFGS),该近似值使用甚至更多的线性代数来进行快速而廉价的优化。


分析方法


您会看到线性代数可以帮助您应用和训练模型。 但是,当您的模型拒绝很好地训练或预测时,才开始真正的科学(或魔术)。 学习可能陷入困境,或者突然变得疯狂。 在深度学习中,它经常是由于梯度消失或爆炸而发生的。 就是说,乳清计算梯度,乘以大量矩阵,然后发生奇怪的事情,并且您需要知道什么,为什么以及如何克服它。 检查正在发生的事情的一种方法是跟踪您要求逆的矩阵的特征值。 如果它们接近0或非常不同,则此矩阵的求反会导致不稳定的结果。 如果您将许多具有大特征值的矩阵相乘,则乘积会爆炸。 当这些特征值较小时,结果将衰减为零。


为了解决这些问题,发明了L1 / L2正则化,批处理归一化和LSTM等不同的技术。 如果要应用这些技术中的任何一种,则需要一种方法来衡量它们是否对您的特定问题有很大帮助。 而且,如果您想自己发明这种技术,则需要一种方法来证明它完全可以工作。 这再次涉及对向量,矩阵,它们的分解等的大量操纵。


结论


您会发现,深入学习机器学习后,在那里看到的线性代数越多。 要应用经过预训练的模型,您至少必须将数据转换为与线性代数兼容的格式(例如Python中的numpy.array )。 如果您需要实施一种训练算法,或者甚至发明一种新的算法,请准备好对许多矩阵进行乘法,求逆和分解。


在本文中,我引用了一些您可能不熟悉的概念。 没关系 本文鼓励您搜索未知的单词并扩大视野。


顺便说一句,在评论中听到您的一些故事很有趣,这些故事是关于您如何在自己的工作或学习中遇到线性代数的。


PS在我的一篇文章中 ,我辩称,即使您从事IT工作,也不必为了成功而学习数学(这在俄罗斯仍然是流行的刻板印象)。 但是,我从未说过数学是没有用的(否则,我不会一直在教它)。 通常,它不是成功的关键,但在很多情况下,它会有所帮助,在少数情况下(例如开发深度学习模型),它至关重要。


PPS 为什么要用英语? 好吧,只是因为我可以。 最初的问题是用这种语言提出的,我用英语回答了。 然后,他决定可以将答案带到一篇简短的公共文章上。


为什么选择Habr,而不选择例如Medium? 首先,与中型不同,这里通常支持公式。 其次,哈伯本人将进入国际市场,那么为什么不尝试在此处放置一些英语内容呢?


让我们看看会发生什么。

Source: https://habr.com/ru/post/zh-CN427185/


All Articles