本课程的重点是这个问题:我们如何以可接受的速度和可接受的精度进行矩阵计算?
本课程在 2017 年夏季旧金山大学分析理学硕士项目中教授(面向正在学习成为数据科学家的研究生)。该课程通过 Jupyter Notebooks 使用 Python 进行授课,大多数课程使用 Scikit-Learn 和 Numpy 等库,以及 Numba(一个将 Python 编译为 C 以获得更快性能的库)和 PyTorch(用于 GPU 的 Numpy 的替代品)在几节课中。
笔记本附带一个讲座视频播放列表,可在 YouTube 上找到。如果您对讲座感到困惑或者讲得太快,请查看下一个视频的开头,我在其中回顾上一讲座的概念,通常从新的角度或使用不同的插图来解释事物,并回答问题。
您可以使用我们 fast.ai 讨论论坛上的计算线性代数类别提出问题或分享您的想法和资源。
以下列表链接到此存储库中的笔记本,通过 nbviewer 服务呈现。涵盖的主题:
我们首先对数值线性代数中的一些基本概念进行高级概述。
我们将使用新闻组数据集来尝试识别不同帖子的主题。我们使用术语-文档矩阵来表示文档中词汇的频率。我们使用 NMF 对其进行分解,然后使用 SVD。
SVD 的另一个应用是识别人员并去除监控视频的背景。我们将介绍使用随机 SVD 的稳健 PCA。随机 SVD 使用 LU 分解。
压缩传感对于以较低辐射进行 CT 扫描至关重要——可以用更少的数据重建图像。在这里,我们将学习该技术并将其应用于 CT 图像。
我们已将 SVD 应用于主题建模、背景去除和线性回归。 SVD 与特征分解密切相关,因此我们现在将学习如何计算大型矩阵的特征值。我们将使用 DBpedia 数据,这是一个维基百科链接的大型数据集,因为这里的主特征向量给出了不同维基百科页面的相对重要性(这是 Google 的 PageRank 算法的基本思想)。我们将研究 3 种不同的计算特征向量的方法,这些方法的复杂性不断增加(并且实用性不断增加!)。
本课程采用自上而下的教学方法,这与大多数数学课程的运作方式不同。通常,在自下而上的方法中,您首先学习将使用的所有单独组件,然后逐渐将它们构建成更复杂的结构。这样做的问题是,学生常常失去动力,没有“大局”意识,也不知道自己需要什么。
哈佛大学教授大卫·珀金斯(David Perkins)有一本书《让学习变得完整》(Making Learning Whole),其中他用棒球作为类比。在让孩子们玩游戏之前,我们不要求孩子们记住所有棒球规则并了解所有技术细节。相反,他们开始玩游戏的一般意义,然后随着时间的推移逐渐了解更多规则/细节。
如果您参加了 fast.ai 深度学习课程,那就是我们使用的课程。您可以在这篇博文或我在旧金山机器学习聚会上发表的演讲中了解更多关于我的教学理念的信息。
综上所述,如果您一开始不理解所有内容,请不要担心!你不应该这样做。我们将开始使用一些尚未解释的“黑匣子”或矩阵分解,然后我们稍后将深入研究较低级别的细节。
首先,关注事物的作用,而不是它们是什么。