编码器的计算线性代数
本课程重点讨论以下问题:我们如何以可接受的速度和可接受的精度进行矩阵计算?
这门课是在University of San Francisco’s Masters of Science in Analytics计划,2017年夏季(面向正在学习成为数据科学家的研究生)。本课程使用Python和Jupyter笔记本讲授,在大多数课程中使用的库包括Scikit-Learning和Numpy,还有几节课使用Numba(将Python编译为C以提高性能的库)和PyTorch(用于GPU的Numpy的替代库
随附笔记本的还有一个playlist of lecture videos, available on YouTube如果你曾经被一堂课弄糊涂了,或者它讲得太快,请看下一段视频的开头,我在视频的开头复习了上一节课的概念,经常从新的角度或用不同的插图来解释,并回答问题。
获取帮助
您可以通过以下方式提问或分享您的想法和资源Computational Linear Algebra category on our fast.ai discussion forums
目录
下面的清单链接到此存储库中的笔记本,通过nbviewer服务。涵盖的主题:
0. Course Logistics(Video 1)
- My background
- Teaching Approach
- Importance of Technical Writing
- List of Excellent Technical Blogs
- Linear Algebra Review Resources
1. Why are we here?(Video 1)
我们首先对数值线性代数中的一些基本概念做一个高层次的概述
- Matrix and Tensor Products
- Matrix Decompositions
- Accuracy
- Memory use
- Speed
- Parallelization & Vectorization
2. Topic Modeling with NMF and SVD(Video 2和Video 3)
我们将使用新闻组数据集来尝试识别不同帖子的主题。我们使用术语-文档矩阵来表示文档中词汇的频率。我们使用NMF进行因子分解,然后使用奇异值分解(SVD
- Topic Frequency-Inverse Document Frequency (TF-IDF)
- Singular Value Decomposition (SVD)
- Non-negative Matrix Factorization (NMF)
- Stochastic Gradient Descent (SGD)
- Intro to PyTorch
- Truncated SVD
3. Background Removal with Robust PCA(Video 3,Video 4,以及Video 5)
奇异值分解的另一个应用是识别人物并去除监控视频的背景。我们将介绍使用随机奇异值分解的鲁棒PCA。随机奇异值分解使用LU因式分解
- Load and View Video Data
- SVD
- Principal Component Analysis (PCA)
- L1 Norm Induces Sparsity
- Robust PCA
- LU factorization
- Stability of LU
- LU factorization with Pivoting
- History of Gaussian Elimination
- Block Matrix Multiplication
4. Compressed Sensing with Robust Regression(Video 6和Video 7)
压缩感知对于以较低的辐射进行CT扫描至关重要–可以用较少的数据重建图像。在这里,我们将学习这项技术,并将其应用于CT图像
5. Predicting Health Outcomes with Linear Regressions(Video 8)
6. How to Implement Linear Regression(Video 8)
- How did Scikit Learn do it?
- Naive solution
- Normal equations and Cholesky factorization
- QR factorization
- SVD
- Timing Comparison
- Conditioning & Stability
- Full vs Reduced Factorizations
- Matrix Inversion is Unstable
7. PageRank with Eigen Decompositions(Video 9和Video 10)
我们已经将奇异值分解应用于主题建模、背景去除和线性回归。奇异值分解与特征分解密切相关,因此我们现在将学习如何计算大型矩阵的特征值。我们将使用DBpedia数据,这是维基百科链接的大型数据集,因为这里的主要特征向量给出了不同维基百科页面的相对重要性(这是Google的PageRank算法的基本思想)。我们将看三种不同的计算特征向量的方法,它们的复杂度越来越高(实用性也越来越强!)
- SVD
- DBpedia Dataset
- Power Method
- QR Algorithm
- Two-phase approach to finding eigenvalues
- Arnoldi Iteration
8. Implementing QR Factorization(Video 10)
为什么这门课的授课顺序如此怪异?
本课程的结构包括自上而下教学方法,这与大多数数学课程的操作方式不同。通常,在自下而上方法时,您首先学习要使用的所有独立组件,然后逐渐将它们构建成更复杂的结构。这样做的问题是,学生经常失去动力,没有“大局”意识,也不知道他们需要什么
哈佛大学教授大卫·珀金斯有一本书,Making Learning Whole他用棒球作类比。我们不要求孩子们在让他们玩棒球之前记住所有的棒球规则,了解所有的技术细节。相反,他们开始只是玩一般意义上的游戏,然后随着时间的推移逐渐学习更多的规则/细节。
如果你上了Fast.ai深度学习课程,那就是我们用的。你可以听到更多关于我的教学理念in this blog post或this talk I gave at the San Francisco Machine Learning meetup
总而言之,如果你一开始什么都不懂,也不要担心!你不应该这么做的。我们将开始使用一些尚未解释的“黑盒”或矩阵分解,然后我们将在稍后对更低级别的细节进行挖洞分析
首先,把重点放在事情做什么上,而不是它们是什么