面向程序员的计算线性代数(2017)

2020-06-27 04:34:21

本课程关注的问题是:如何以可接受的速度和精度进行矩阵计算?

这门课程于2017年夏季在旧金山大学的分析科学硕士项目中授课(面向正在学习成为数据科学家的研究生)。本课程使用Python和Jupyter笔记本讲授,在大多数课程中使用了诸如Scikit-Learning和Numpy这样的库,以及在一些课程中使用Numba(一个将Python编译为C以获得更快性能的库)和PyTorch(用于GPU的Numpy的替代)。

与笔记本一起提供的是YouTube上的讲座视频播放列表。如果你曾经被一堂课搞糊涂了,或者它讲得太快了,请看下一段视频的开头,在那里我复习了上一节课的概念,经常从新的角度或用不同的插图解释事情,并回答问题。

您可以在我们的ast.ai论坛上使用计算线性代数类别提出问题或分享您的想法和资源。

下面的清单链接到此存储库中通过nbviewer服务呈现的笔记本。涵盖的主题:

我们首先对数值线性代数中的一些基本概念进行高层次的概述。

我们将使用新闻组数据集来尝试识别不同帖子的主题。我们使用术语-文档矩阵来表示文档中词汇的频率。我们先用NMF分解,然后用奇异值分解(SVD)。

奇异值分解的另一个应用是识别人物并去除监控视频的背景。我们将介绍使用随机奇异值分解的鲁棒PCA。随机奇异值分解使用LU因式分解。

压缩感知对于以较低的辐射进行CT扫描至关重要--可以用较少的数据重建图像。在这里,我们将学习这项技术,并将其应用于CT图像。

我们已经将奇异值分解应用于主题建模、背景去除和线性回归。奇异值分解与特征分解密切相关,因此我们现在将学习如何计算大型矩阵的特征值。我们将使用DBpedia数据,这是维基百科链接的大型数据集,因为这里的主要特征向量给出了不同维基百科页面的相对重要性(这是Google的PageRank算法的基本思想)。我们将看三种不同的计算特征向量的方法,它们的复杂度越来越高(有用性也越来越高!)。

本课程采用自上而下的教学方法,这与大多数数学课程的操作方式不同。通常,在自下而上的方法中,您首先了解要使用的所有独立组件,然后逐渐将它们构建成更复杂的结构。这样做的问题是,学生经常失去动力,没有大局意识,也不知道他们需要什么。

哈佛大学教授大卫·珀金斯(David Perkins)有一本书,名为“让学习变得完整”,他在书中用棒球作为类比。我们不要求孩子们在让他们玩棒球之前记住所有的棒球规则,了解所有的技术细节。相反,他们开始只是玩一般意义上的游戏,然后随着时间的推移逐渐学习更多的规则/细节。

如果你上了Fast.ai深度学习课程,那就是我们用的。你可以在这篇博客文章或我在旧金山机器学习会议上的演讲中听到更多关于我的教学理念的内容。

总而言之,如果你一开始没有完全理解,不要担心!你不应该这样做。我们将开始使用一些尚未解释的黑盒或矩阵分解,然后我们将在稍后深入研究较低级别的细节。