天天看點

基于單邊Jacobi旋轉的并行SVD算法-MPI架構

    單邊Jacobi方法的核心思想是采用一系列Jacobi平面旋轉變換[1],對次元為m*n的矩陣A進行正交化, B=A(J1J2J3...),使得B中任意兩列向量滿足bj.T*bj=0,然後對Bm*n歸一化得到

基于單邊Jacobi旋轉的并行SVD算法-MPI架構

,Jacobi平面旋轉變換的結構如公式(1)所示:

基于單邊Jacobi旋轉的并行SVD算法-MPI架構

(i,j)表示消去元素在矩陣中的位置(c表示cosθ, s表示sinθ,θ稱為旋轉角)。可以證明JTJ=I, Jacobi旋轉變換為正交變換。因為J(I,j,θ)僅僅影響與i和j相應行和列的元素,其他矩陣元素不會受到影響。因為V=J1J2J3…,是由一系列Jacobi旋轉變換矩陣相乘而得,是以它本身也是正交矩陣。整理後就可以得到矩陣A的奇異值分解A=UΣ , 其中U與V是有A的左右奇異向量構成的酉矩陣,Σ是A的奇異值矩陣。對矩陣進行正交化時,僅僅i與j 列兩列元素受到影響,具體變換過程如下:

基于單邊Jacobi旋轉的并行SVD算法-MPI架構

由于bj.T*bj=0,有

基于單邊Jacobi旋轉的并行SVD算法-MPI架構

又根據:

基于單邊Jacobi旋轉的并行SVD算法-MPI架構

, 解二進制一次方程組得:

基于單邊Jacobi旋轉的并行SVD算法-MPI架構

        因為B中任意兩列向量都要彼此正交之後,算法才可以收斂,是以一共需要對A進行N(N-1)/2次旋轉才能使得矩陣中所有列之間都正交一次。由于Jacobi旋轉變換中對c和s的計算是決定單邊Jacobi方法收斂速度的主要原因之一,是以後續學者對此提出了多種改進方法。Hestens設計了一種新的單邊 Jacobi方法。在該方法種,當矩陣A中向量||Ai||<||Aj||時,先交換兩列元素,然後再利用平面旋轉變換,按照循環序列對矩陣進行正交變換。這個方法可以保證最終求解的奇異值是按照非增序列排列好的。

      由于該單邊Jacobi平面旋轉變換僅僅影響兩列元素,是以通過合理劃分,可以并行的對互相之間不存在依賴關系的列對進行變換。例如矩陣列數為4,可以分别對索引對(1,2)和(3,4), (1 ,3)和(2,4),(1,4)和(2,3)同時變換,而不發生沖突。這樣原來在同一時間段内對一個索引對的一次旋轉變換變成現在對兩個索引對的一組旋轉變換。“一輪”也就是由原來的n(n-1)=6變為現在的n-1=3.為了保證在合理的疊代次數下并行的完成n(n-1)/2次旋轉,需要設計一個“好的”資料交換序列。我們采用奇偶序列,按照該序列,在并行實作單邊Jacobi方法時,最多可以同時對n/2個列對進行旋轉變換,也就是一輪變換最少需要n(n為奇數)或n-1(n為偶數)個階段完成。

    奇偶序列通過不斷交換索引而形成索引對。如圖所示,在每一個階段結束後,将原來形成的索引列對拆分并按照從左到右一次遞增的順序進行交換(交換僅僅發生在索引内部)。如果目前出在奇數階段,則從左邊第一個索引位置開始,一次向右,每兩個索引形成一個索引對。如果目前出在偶數階段,則從左邊第二個索引位置開始,每兩個索引形成一個索引對。在索引對産生的各個階段,如果某一索引無法與其他索引形成列隊,他将在本階段孤立出來。按照這個方法,經過n個階段就可以産生所有n(n-1)/2個索引對。并且最終的索引是按照從小到達的順序進行排列的。   

基于單邊Jacobi旋轉的并行SVD算法-MPI架構

參考文獻

1郭強. 并行JACOBI方法求解矩陣奇異值的研究. 蘇州大學學位論文,2011

2. http://www.cnblogs.com/zhangchaoyang/articles/2575948.html

繼續閱讀