数值线性代数课程简介
数值线性代数课程是关于如何实现快速且准确的矩阵计算的一门课程。该课程在2017年夏季由旧金山大学分析学硕士项目开设,主要面向未来希望成为数据科学家的研究生讲授。课程中使用Python编程语言和Jupyter笔记本辅助教学,并广泛应用Scikit-Learn和Numpy库。部分课题还涉及到使用Numba库(将Python编译为C语言以提高性能)以及PyTorch(作为Numpy在GPU上的替代方案)。
课程资源
课程配有一系列YouTube上的讲座视频。这些视频不仅帮助学生加深对讲座内容的理解,也提供了不同视角的概念阐释。如果对某节课的内容感到困惑,可以通过观看下一节视频的开头部分获取新的解释和答案。
对于想要进一步探讨或交流的同学,可以通过fast.ai讨论论坛上的“计算线性代数”板块分享问题和资源。
课程大纲
课程内容通过Nbviewer渲染,链接指向该仓库中的笔记本:
0. 课程安排
- 课堂背景与教师介绍
- 教学方法
- 技术写作的重要性
- 优秀技术博客推荐
- 线性代数复习资源
1. 我们为什么在这里?
- 矩阵与张量积
- 矩阵分解
- 准确性
- 内存使用
- 速度
- 并行化与向量化
2. 使用NMF和SVD进行主题建模
利用新闻组数据集识别不同帖子的话题,通过词项-文档矩阵进行NMF和SVD分解。
- 主题词频-逆文档频率 (TF-IDF)
- 奇异值分解 (SVD)
- 非负矩阵分解 (NMF)
- 随机梯度下降 (SGD)
- PyTorch入门
- 截断SVD
3. 使用鲁棒PCA进行背景去除
运用SVD识别和去除监控视频背景,通过鲁棒PCA进行随机SVD,利用LU分解。
- 数据加载与查看
- SVD
- 主成分分析 (PCA)
- L1范数引导稀疏性
- 鲁棒PCA
- LU分解
- LU稳定性
- 带枢轴的LU分解
- 高斯消去法历史
- 矩阵分块乘法
4. 用鲁棒回归进行压缩感知
压缩感知能够在减少辐射剂量的情况下重建CT图像,在此课程中将学习并应用这一技术于CT影像。
- 广播
- 稀疏矩阵
- CT扫描与压缩感知
- L1与L2回归
5. 利用线性回归预测健康结果
- sklearn中的线性回归
- 多项式特征
- 使用Numba加速
- 正则化和噪声
6. 如何实现线性回归
- scikit-learn的实现方法
- 简单解决方案
- 正规方程与Cholesky分解
- QR分解
- SVD
- 计时比较
- 条件与稳定性
- 完全与缩减分解
- 矩阵求逆不稳定性
7. 用特征分解实现PageRank
实现PageRank算法并应用于DBpedia数据集,在计算特征值的过程中学习使用SVD。
- SVD
- DBpedia数据集
- 幂法
- QR算法
- 求特征值的两阶段方法
- Arnoldi 迭代
8. 实现QR分解
- Gram-Schmidt
- Householder
- 稳定性示例
教学方法
课程采取自上而下的教学法,与大多数数学课程不同。通常,底层方法需要首先学习所有单独组件,然后逐步构建成更复杂的结构。而这种方法常使学生丧失动力或对全局缺乏感知。因此,该课程遵循哈佛教授David Perkins的“让学习完整”的教学理念,强调理解整体概念后再挖掘细节。
学生开始时可能接触未解释的“黑箱”技术或矩阵分解,而课程则鼓励学生首先关注这些技术的功能,而不是它们的定义或原理。这种学习方法旨在逐步加深学生对数值线性代数的理解。