矩阵分解CUDA软件

Download Report

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