Transcript 矩阵分解CUDA软件
讲个例子,看看理解对不对 2 Cite: http://hi.baidu.com/hehehehello/blog/item/1a63aa343040ffadd1a2d360.html?timeStamp=1310882799258 LSI (Latent Semantic Indexing)隐语义索引 问题:由于一词多义, 基于精确匹配的检索算法会报告许多用户不 要的东西; 由于一义多词,基于精确匹配的检索算法又会遗漏许多用 户想要的东西。 • 设Doc1, Doc2, Doc3是三个文件. 一些术语在这三个文件中的出现情况如下表: Doc1 Doc2 Doc3 ------------------------------------------------------access X document X retrieval X X information X* X* theory X database X indexing X computer X* X* ------------------------------------------------------这里, 假定用"information" 和"computer"作为主题词进行检索, 那么Doc2和 Doc3与之精确匹配, 因而中选. 然而, Doc2是用户并不想要的文件, Doc1才是 3 想要的查不出来. 继续1 • 首先, 以术语(terms)为行, 文件(documents)为列做一个大矩阵(matrix). 设一共有t 行d列, 矩阵名为X. 矩阵的元素为术语在文件中的出现频度. • 数学上可以证明: X可以分解为三个矩阵T0, S0, D0'(D0的转置)的积. 其中T0和D0 的列向量都是正交归一化的, S0是对角矩阵. T0是t*m矩阵, S0是m*m矩阵,D0是 d*m矩阵,m是X的秩. 这种分解叫做单值分解(singlar value decomposition,简称 SVD). X=T0*S0*D0' 一般要求T0, S0, D0都是满秩的. 不难做到把S0的元素沿对角线从大到小排列. 现在, 把S0的m个对角元素的前k个保留, 后m-k个置0, 我们可以得到一个新的近似 的 分解: Xhat=T*S*D' • Xhat在最小二乘意义(?)下是X的最佳近似! 这样, 我们实际上有了一个"降维"的途 径 4 继续2(?) 1. 做“正向”乘法: Xhat * Xhat’ = T * S * D’ * D * S * T’ = T * S^2 * T’ (D’ * D = I, 因为D已经是正交归一的). 它的第i行第j列表明了术语i和j的相似程 度. 2. 做“逆向”乘法: Xhat’ * Xhat = D * S * T’ * T * S * D’ = D * S^2 * D’ (T’ * T = I, 因为T已经是正交归一的). 它的第i行第j列表明了文件i和j的相似程 度. 3. 比较一个文件和一个术语 恰巧就是Xhat本身. 它的第i行第j列表明了术语i和文件j的相关联程度. Application: 可以把主题词的集合认为是一个虚拟的文件. 查询的任务说白了是 把这个虚拟的文件和其他文件做相似性比较, 挑选最相似的出来(挑 选到什么程度打住, 要看实际问题的要求) 5 我的理解 1. 把一个大矩阵拆解成简单矩阵 2. 把两个大矩阵计算变成简单矩阵间的计算 6 SVD(singlar value decomposition) NMF(Non-negative Matrix Factorization ) ①矩阵的三角分解(Cholesky分解、LU分解等) ②矩阵的正交三角分解(QR分解等) ③矩阵的满秩分解(?) ④矩阵的奇异值分解(SVD) Cite: http://www.cyqdata.com/cnblogs/article-detail-35278 7 Cite:The Relationships Among Various Nonnegative Matrix Factorization Methods.pdf 我的理解1 1. 2. 3. 4. 5. 6. SVD分解——拆解为:两个相互正交矩阵和一个对角矩阵 QR分解——拆解为:一个正交矩阵和一个上三角矩阵 LU分解——拆解为:一个上三角矩阵和一个下三角矩阵 Cholesky分解——(?) NMF分解——拆解为:两个非负矩阵 。。。 我的问题: Note: • 区分矩阵元素的正负 • 近似解 是不是存在某种分解是基于另一种分解的? 比如先拆成两个矩阵,再把其中某个再拆解。 或者.. 8 我的理解2 我目前遇到的应用: • 图像降维重构(?) • 数据挖掘算法:聚类k-means • 文本挖掘 • 社会网络分析 9 矩阵分解的具体算法 还没有学习。 海洋和远帅希望能做补充。 比如对稀疏(sparse)和密集(dense)矩阵不同的算法。 10 我的工作 矩阵分解&并行计算——概况 • 常用的线性代数数学库 • 基于多核多处理器以及机群的数学库 • 基于GPU并行加速的解决方案 11 常用的线性代数数学库 BLAS——Basic Linear Algebra Subprograms(Fortran) 一个最基础的库,其他软件在对它进行优化 ATLAS——Automatically Tuned Linear Algebra Software(C and Fortran) 对BALS加强,提供更加灵活的接口 LAPACK——Linear Algebra PACKage(C and Fortran) 对BLAS进行封装,提供专门对矩阵的处理接口 比如:matrix factorizations (LU, Cholesky, QR, SVD, Schur, generalized Schur) 缺点:慢,调用难 CUBLAS—— NVIDIA CUDA Basic Linear Algebra Subroutines CUDA版本的基础线性代数库 12 基于多核多处理器以及机群的数学库 基本上是根据硬件对BLAS的进行定制: • MKL——Intel® Math Kernel Library Intel处理器数学库核心 • ACML——AMD Core Math Library (ACML) AMD处理器数学库核心 • GotoBLAS2 多处理器并行化提高效率 • PLASMA 多核处理器并行化 缺点:还是不够快,没有考虑GPU的优势 13 基于GPU并行加速的解决方案——SVD_1 • 张舒——没有源代码 <One sided Jacobi Method on CUDA for SVD> <基于CUDA的矩阵奇异值分解> • ISVD-CUDA——没有源代码 http://sourceforge.net/projects/isvd-cuda/ • QR-SVD—— 没有源代码 < singular value decomposition on GPU using CUDA > • 赵佳——只是个ppt,没有源代码 < Jacobi-based SVD algorithm in CUDA > http://www.nku-isc.org/~zhaojia/ • Fast SVD on Graphics Processors——没有源代码 http://gamma.cs.unc.edu/NUMERIC/SVD/ 14 基于GPU并行加速的解决方案——SVD_2 CULA——一个商业软件,功能齐全,dense版本是免费 CULA是LAPACK的cuda版 主要功能: • Linear Equations • Orthogonal Factorizations • Least Squares Solvers • Symmetric Eigenproblems • Nonsymmetric Eigenproblems • Singular Value Decomposition Note: 自己编写代码,可以成功运行 缺点:商业软件,无法获得源代码 15 基于GPU并行加速的解决方案——SVD_3 MAGMA——一个开源软件,功能齐全 MAGMA也是LAPACK的cuda版 解决: • LU, QR, and Cholesky factorizations • SVD • Eigen and singular value problem … Note: 需要和ATLAS或者GotoBLAS2搭配使用 还没写出矩阵分解程序。接口没搞懂。 16 基于GPU并行加速的解决方案——NMF 求解:NMF GPUMLib——提供NMF计算,接口不清晰,需摸索 <Non-negative Matrix Factorization Implementation Using Graphic Processing Units> NMF-CUDA——某个图像研究生的程序,但是功能不清晰 修改过代码,可以跑 17 总结 • 软件基本都是Linux 安装复杂,依赖关系复杂 • 显然有部分人实现了矩阵分解的CUDA并行化,但是没有公开代码,根据 论文描述,似乎还并不太完善。 • 功能丰富的软件例如MAGMA和CULA都有各自不足。商业软件,不开放源 代码,无法全面评估,以及适用于研究领域,不具开源优势。MAGMA是 开源中做得最好的,但是对别的软件依赖性太强,光是安装就花费了两天 时间才摸索出来。 • 没有一个软件能让我们DIY。我们必须借鉴他们的已有做法,从基础库开 发,实现CUDA版本。 18 下一步 学习分解算法 或者 根据一个应用实例,在找到的源代码基础上修改。 19 Reference: 1. Singular Value Decomposition on GPU using CUDA 2. LU, QR and Cholesky Factorizations using Vector Capabilities of GPUs 3. A GPU-based Approximate SVD Algorithm 4. Non-negative Matrix Factorization Implementation Using Graphic Processing Units 5. The Relationships Among Various Nonnegative Matrix Factorization Methods 6. Non-negative Matrix Factorization on GPU 7. Parallel Algorithms for the Singular Value Decomposition 8. 基于CUDA的矩阵奇异值分解 9. 推荐系统中的矩阵分解技术进展 20