JP5011545B2 - 特異値分解装置、及び特異値分解方法 - Google Patents
特異値分解装置、及び特異値分解方法 Download PDFInfo
- Publication number
- JP5011545B2 JP5011545B2 JP2007549031A JP2007549031A JP5011545B2 JP 5011545 B2 JP5011545 B2 JP 5011545B2 JP 2007549031 A JP2007549031 A JP 2007549031A JP 2007549031 A JP2007549031 A JP 2007549031A JP 5011545 B2 JP5011545 B2 JP 5011545B2
- Authority
- JP
- Japan
- Prior art keywords
- singular
- matrix
- diagonal matrix
- singular value
- double diagonal
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
- 238000000354 decomposition reaction Methods 0.000 title claims description 468
- 238000000034 method Methods 0.000 title claims description 234
- 239000011159 matrix material Substances 0.000 claims description 934
- 239000013598 vector Substances 0.000 claims description 390
- 238000004364 calculation method Methods 0.000 claims description 228
- 230000008569 process Effects 0.000 claims description 139
- 238000012545 processing Methods 0.000 claims description 87
- 238000006243 chemical reaction Methods 0.000 claims description 54
- 230000009466 transformation Effects 0.000 claims description 22
- 238000000638 solvent extraction Methods 0.000 claims 2
- 230000014509 gene expression Effects 0.000 description 14
- 238000010586 diagram Methods 0.000 description 13
- 230000003287 optical effect Effects 0.000 description 7
- 239000004065 semiconductor Substances 0.000 description 7
- 238000004891 communication Methods 0.000 description 5
- 230000007774 longterm Effects 0.000 description 5
- 230000006870 function Effects 0.000 description 4
- 230000002441 reversible effect Effects 0.000 description 3
- 230000011218 segmentation Effects 0.000 description 3
- 238000009825 accumulation Methods 0.000 description 2
- 238000004422 calculation algorithm Methods 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- 238000002474 experimental method Methods 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000004458 analytical method Methods 0.000 description 1
- 230000001174 ascending effect Effects 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 238000004590 computer program Methods 0.000 description 1
- 230000007423 decrease Effects 0.000 description 1
- 230000003247 decreasing effect Effects 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 230000018109 developmental process Effects 0.000 description 1
- 230000009977 dual effect Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 238000011156 evaluation Methods 0.000 description 1
- 239000004973 liquid crystal related substance Substances 0.000 description 1
- 238000005259 measurement Methods 0.000 description 1
- 238000000491 multivariate analysis Methods 0.000 description 1
- 238000010606 normalization Methods 0.000 description 1
- 238000000513 principal component analysis Methods 0.000 description 1
- 238000007639 printing Methods 0.000 description 1
- 230000000750 progressive effect Effects 0.000 description 1
- 230000009467 reduction Effects 0.000 description 1
- 230000003252 repetitive effect Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F17/00—Digital computing or data processing equipment or methods, specially adapted for specific functions
- G06F17/10—Complex mathematical operations
- G06F17/16—Matrix or vector computation, e.g. matrix-matrix or matrix-vector multiplication, matrix factorization
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F18/00—Pattern recognition
- G06F18/20—Analysing
- G06F18/21—Design or setup of recognition systems or techniques; Extraction of features in feature space; Blind source separation
- G06F18/213—Feature extraction, e.g. by transforming the feature space; Summarisation; Mappings, e.g. subspace methods
- G06F18/2135—Feature extraction, e.g. by transforming the feature space; Summarisation; Mappings, e.g. subspace methods based on approximation criteria, e.g. principal component analysis
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- Theoretical Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Mathematical Physics (AREA)
- Mathematical Analysis (AREA)
- Computational Mathematics (AREA)
- Pure & Applied Mathematics (AREA)
- Computer Vision & Pattern Recognition (AREA)
- General Engineering & Computer Science (AREA)
- Mathematical Optimization (AREA)
- Life Sciences & Earth Sciences (AREA)
- Artificial Intelligence (AREA)
- Computing Systems (AREA)
- Evolutionary Biology (AREA)
- Bioinformatics & Cheminformatics (AREA)
- Bioinformatics & Computational Biology (AREA)
- Evolutionary Computation (AREA)
- Algebra (AREA)
- Databases & Information Systems (AREA)
- Software Systems (AREA)
- Complex Calculations (AREA)
Description
本発明は、特異値分解を行う特異値分解装置等に関する。
特異値分解(SVD:Singular Value Decomposition)はデータ処理の中心的な行列演算として、画像処理やデータ検索等の多くの分野に応用されている。
なお、特異値分解の従来例としては、例えば、下記の非特許文献1のものなどが知られている。
Ming Gu and Stanley C. Eisenstat、「A Divide−and−Conquer Algorithm for the Bidiagonal SVD」、SIAM Journal on Matrix Analysis and Applications、Vol.16,N0.1,pp.79−92(1995)
なお、特異値分解の従来例としては、例えば、下記の非特許文献1のものなどが知られている。
Ming Gu and Stanley C. Eisenstat、「A Divide−and−Conquer Algorithm for the Bidiagonal SVD」、SIAM Journal on Matrix Analysis and Applications、Vol.16,N0.1,pp.79−92(1995)
近年、これらの応用分野におけるデータ量の増大などに伴って、高速・高精度な特異値分解が求められている。また、特異値分解を並列処理することができる特異値分解装置等の開発が望まれていた。
本発明は、上記状況の下になされたものであり、並列性に優れた高速、高精度な特異値分解を実行可能な特異値分解装置等を提供することを目的とする。
本発明は、上記状況の下になされたものであり、並列性に優れた高速、高精度な特異値分解を実行可能な特異値分解装置等を提供することを目的とする。
上記目的を達成するため、本発明による特異値分解装置は、2重対角行列Bが記憶される対角行列記憶部と、前記2重対角行列Bが2個の2重対角行列に分割され、その2重対角行列が2個の2重対角行列に分割される処理が、分割後の各2重対角行列があらかじめ決められた大きさ以下となるまで繰り返され、当該あらかじめ決められた大きさ以下の各2重対角行列に対して特異値分解が行われた結果である、前記各2重対角行列の特異値と、前記各2重対角行列の特異ベクトルからなる左右直交行列の一部の要素である行列要素とが記憶される特異値分解記憶部と、前記2重対角行列Bの特異値が記憶される特異値記憶部と、各2重対角行列の特異値と、行列要素とを前記特異値分解記憶部から読み出し、前記特異値と、前記行列要素とから、分割元の2重対角行列の特異値と、分割元の2重対角行列の行列要素とを算出して前記特異値分解記憶部に蓄積し、その分割元の2重対角行列の特異値と、行列要素とを算出する処理を、2重対角行列Bの少なくとも1個の特異値を算出するまで繰り返し、前記2重対角行列Bの少なくとも1個の特異値を前記特異値記憶部に蓄積する特異値算出部と、前記2重対角行列Bの特異ベクトルが記憶される特異ベクトル記憶部と、前記対角行列記憶部から2重対角行列Bを読み出し、前記特異値記憶部から前記2重対角行列Bの特異値を読み出し、2重対角行列Bとその特異値とから、ツイスト分解法を用いて2重対角行列Bの少なくとも1個の特異ベクトルを算出して前記特異ベクトル記憶部に蓄積する特異ベクトル算出部と、を備えたものである。
このような構成により、まず特異値を算出し、その特異値に基づいてツイスト分解法を用いて特異ベクトルを算出することによって、高速で高精度な特異値分解を実現することができうる。また、並列性にも優れている。
また、本発明による特異値分解装置では、前記対角行列記憶部には、前記あらかじめ決められた大きさ以下の各2重対角行列も記憶され、前記あらかじめ決められた大きさ以下の各2重対角行列を前記対角行列記憶部から読み出し、前記各2重対角行列に対して特異値分解を行い、前記各2重対角行列の特異値と、前記各2重対角行列の特異ベクトルとを算出し、当該特異値と、当該特異ベクトルからなる左右直交行列の一部の要素である行列要素とを前記特異値分解記憶部に蓄積する特異値分解部をさらに備えてもよい。
このような構成により、特異値を算出する際に、あらかじめ決められた大きさ以下の各2重対角行列に対する特異値分解を、特異値分解装置において行うことができる。
また、本発明による特異値分解装置は、2重対角行列Bが記憶される対角行列記憶部と、前記対角行列記憶部から前記2重対角行列Bを読み出し、当該2重対角行列Bを2個の2重対角行列に分割して前記対角行列記憶部に蓄積し、その2重対角行列を2個の2重対角行列に分割して前記対角行列記憶部に蓄積する処理を、分割後の各2重対角行列があらかじめ決められた大きさ以下となるまで繰り返す行列分割部と、前記あらかじめ決められた大きさ以下の各2重対角行列を前記対角行列記憶部から読み出し、前記各2重対角行列に対して特異値分解を行い、前記各2重対角行列の特異値と、前記各2重対角行列の特異ベクトルとを算出する特異値分解部と、前記特異値分解部によって特異値分解された特異値と、特異ベクトルからなる左右直交行列の一部の要素である行列要素とが記憶される特異値分解記憶部と、前記2重対角行列Bの特異値が記憶される特異値記憶部と、各2重対角行列の特異値と、行列要素とを前記特異値分解記憶部から読み出し、前記特異値と、前記行列要素とから、分割元の2重対角行列の特異値と、分割元の2重対角行列の行列要素とを算出して前記特異値分解記憶部に蓄積し、その分割元の2重対角行列の特異値と、行列要素とを算出する処理を、2重対角行列Bの少なくとも1個の特異値を算出するまで繰り返し、前記2重対角行列Bの少なくとも1個の特異値を前記特異値記憶部に蓄積する特異値算出部と、前記2重対角行列Bの特異ベクトルが記憶される特異ベクトル記憶部と、前記対角行列記憶部から2重対角行列Bを読み出し、前記特異値記憶部から前記2重対角行列Bの特異値を読み出し、2重対角行列Bとその特異値とから、ツイスト分解法を用いて2重対角行列Bの少なくとも1個の特異ベクトルを算出して前記特異ベクトル記憶部に蓄積する特異ベクトル算出部と、を備えたものである。
このような構成により、まず特異値を算出し、その特異値に基づいてツイスト分解法を用いて特異ベクトルを算出することによって、高速で高精度な特異値分解を実現することができうる。また、並列性にも優れている。さらに、全ての特異値や特異ベクトルを算出する必要がない場合には、必要な範囲で特異値や特異ベクトルを算出することができ、処理負荷を軽減することができる。
また、本発明による特異値分解装置では、前記特異ベクトル算出部は、qd型ツイスト分解法により特異ベクトルを算出してもよい。
このような構成により、高速で高精度な特異値分解を実現することができうる。また、並列性にも優れている。
このような構成により、高速で高精度な特異値分解を実現することができうる。また、並列性にも優れている。
また、本発明による特異値分解装置では、前記特異ベクトル算出部は、LV型ツイスト分解法により特異ベクトルを算出してもよい。
このような構成により、数値安定的に特異ベクトルの算出を行うことができうる。
このような構成により、数値安定的に特異ベクトルの算出を行うことができうる。
また、本発明による特異値分解装置では、前記特異ベクトル算出部は、前記対角行列記憶部から2重対角行列Bを読み出し、前記特異値記憶部から前記2重対角行列Bの特異値を読み出し、前記2重対角行列Bの各要素に関してミウラ変換、dLVv型変換、逆ミウラ変換を行うことによって、前記2重対角行列Bを上2重対角行列B(+1)及び下2重対角行列B(−1)にコレスキー分解するコレスキー分解部と、前記上2重対角行列B(+1)及び下2重対角行列B(−1)の各要素と、前記2重対角行列Bの特異値とを用いて一方の左右直交行列を構成する特異ベクトルを算出して前記特異ベクトル記憶部に蓄積する第1特異ベクトル算出部と、前記第1特異ベクトル算出部が算出した一方の左右直交行列を構成する特異ベクトルと、前記2重対角行列Bの特異値と、前記2重対角行列Bとを用いて他方の左右直交行列を構成する特異ベクトルを算出して前記特異ベクトル記憶部に蓄積する第2特異ベクトル算出部と、をさらに備えてもよい。
このような構成により、コレスキー分解の処理において、複数の補助変数を用いることによって、数値安定的に特異ベクトルの算出を行うことができうる。
このような構成により、コレスキー分解の処理において、複数の補助変数を用いることによって、数値安定的に特異ベクトルの算出を行うことができうる。
また、本発明による特異値分解装置では、前記コレスキー分解部は、複数のコレスキー分解手段を備え、前記複数のコレスキー分解手段が、前記2重対角行列Bをコレスキー分解する処理を並列実行してもよい。
このような構成により、コレスキー分解の処理を短時間で行うことができうる。
このような構成により、コレスキー分解の処理を短時間で行うことができうる。
また、本発明による特異値分解装置では、前記第1特異ベクトル算出部は、複数の第1特異ベクトル算出手段を備え、前記複数の第1特異ベクトル算出手段が、特異ベクトルを算出する処理を並列実行してもよい。
このような構成により、特異ベクトルを算出する処理を短時間で行うことができうる。
このような構成により、特異ベクトルを算出する処理を短時間で行うことができうる。
また、本発明による特異値分解装置では、前記第2特異ベクトル算出部は、複数の第2特異ベクトル算出手段を備え、前記複数の第2特異ベクトル算出手段が、特異ベクトルを算出する処理を並列実行してもよい。
このような構成により、特異ベクトルを算出する処理を短時間で行うことができうる。
このような構成により、特異ベクトルを算出する処理を短時間で行うことができうる。
また、本発明による特異値分解装置では、前記特異値算出部は、複数の特異値算出手段を備え、前記複数の特異値算出手段が、分割元の2重対角行列の特異値と、行列要素とを算出する処理を並列実行してもよい。
このような構成により、特異値を算出する処理を短時間で行うことができうる。
このような構成により、特異値を算出する処理を短時間で行うことができうる。
また、本発明による特異値分解装置では、前記特異値分解部は、複数の特異値分解手段を備え、前記複数の特異値分解手段が、2重対角行列に対して特異値分解を行う処理を並列実行してもよい。
このような構成により、特異値分解する処理を短時間で行うことができうる。
このような構成により、特異値分解する処理を短時間で行うことができうる。
また、本発明による特異値分解装置では、行列Aが記憶される行列記憶部と、前記行列Aを前記行列記憶部から読み出し、前記行列Aを2重対角化した前記2重対角行列Bを算出して前記対角行列記憶部に蓄積する対角化部と、をさらに備えてもよい。
このような構成により、任意の行列Aについて特異値を算出することができる。また、2重対角行列Bの特異ベクトルを用いることにより、行列Aの特異ベクトルを算出することもできうる。
このような構成により、任意の行列Aについて特異値を算出することができる。また、2重対角行列Bの特異ベクトルを用いることにより、行列Aの特異ベクトルを算出することもできうる。
また、本発明による特異値分解装置では、前記行列分割部は、2重対角行列を略半分の2個の2重対角行列に分割してもよい。
このような構成により、並列処理を適切に行うことができうる。
このような構成により、並列処理を適切に行うことができうる。
本発明による特異値分解装置等によれば、高速で高精度な特異値分解を行うことができる。また、並列性にも優れている。
以下、本発明による特異値分解装置について、実施の形態を用いて説明する。なお、以下の実施の形態において、同じ符号を付した構成要素及びステップは同一または相当するものであり、再度の説明を省略することがある。
(実施の形態1)
本発明の実施の形態1による特異値分解装置について、図面を参照しながら説明する。
図1は、本実施の形態による特異値分解装置1の構成を示すブロック図である。図1において、本実施の形態による特異値分解装置1は、行列記憶部11と、対角化部12と、対角行列記憶部13と、行列分割部14と、特異値分解部15と、特異値分解記憶部16と、特異値算出部17と、特異値記憶部18と、特異ベクトル算出部19と、特異ベクトル記憶部20とを備える。
本発明の実施の形態1による特異値分解装置について、図面を参照しながら説明する。
図1は、本実施の形態による特異値分解装置1の構成を示すブロック図である。図1において、本実施の形態による特異値分解装置1は、行列記憶部11と、対角化部12と、対角行列記憶部13と、行列分割部14と、特異値分解部15と、特異値分解記憶部16と、特異値算出部17と、特異値記憶部18と、特異ベクトル算出部19と、特異ベクトル記憶部20とを備える。
行列記憶部11では、任意の行列Aが記憶される。この行列Aは、各要素が実数である実行列である。なお、行列Aが記憶されているとは、行列Aを示すデータが記憶されている、という意味である。後述する記憶部においても同様である。行列記憶部11は、所定の記録媒体(例えば、半導体メモリや磁気ディスク、光ディスクなど)によって実現されうる。行列記憶部11での記憶は、RAM等における一時的な記憶でもよく、あるいは、長期的な記憶でもよい。行列記憶部11に行列Aが記憶される過程は問わない。例えば、記録媒体を介して行列Aが行列記憶部11で記憶されるようになってもよく、通信回線等を介して送信された行列Aが行列記憶部11で記憶されるようになってもよく、あるいは、キーボードやマウス等の入力デバイスを介して入力された行列Aが行列記憶部11で記憶されるようになってもよい。
対角化部12は、行列Aを行列記憶部11から読み出し、その読み出した行列Aを2重対角化した2重対角行列Bを算出する。そして、対角化部12は、その算出した2重対角行列Bを対角行列記憶部13に蓄積する。対角化部12は、例えば、ハウスホルダー(Householder)変換を必要なだけ繰り返し行う方法や、その他の2重対角化法を用いて、行列Aを2重対角化する。ここで、2重対角行列Bは、上2重対角行列であってもよく、下2重対角行列であってもよい。本実施の形態では、2重対角行列Bが上2重対角行列である場合について説明する。
対角行列記憶部13では、2重対角行列Bが記憶される。対角行列記憶部13は、所定の記録媒体(例えば、半導体メモリや磁気ディスク、光ディスクなど)によって実現されうる。対角行列記憶部13での記憶は、RAM等における一時的な記憶でもよく、あるいは、長期的な記憶でもよい。
行列分割部14は、対角行列記憶部13から2重対角行列Bを読み出し、その2重対角行列Bを2個の2重対角行列に分割して対角行列記憶部13に蓄積する。行列分割部14は、その2重対角行列を2個の2重対角行列に分割して対角行列記憶部13に蓄積する処理を、分割後の各2重対角行列があらかじめ決められた大きさ以下となるまで再帰的に繰り返す。
特異値分解部15は、あらかじめ決められた大きさ以下の各2重対角行列を対角行列記憶部13から読み出し、その各2重対角行列に対して特異値分解を行い、各2重対角行列の特異値と、その各2重対角行列の特異ベクトルを算出する。特異値分解部15は、例えば、2分法と逆反復法を組み合わせた方法、MR^3法、QRs法等を用いて特異値分解を行ってもよい。ここで、MR^3法において、例えば、dqdsやpqds等のqds法によって特異値を算出してもよい。また、QRs法による特異値分解を行う場合には、FORTRANにおいて提供されているDBDSQRを用いてもよい。また、qds法によって特異値を算出する場合には、FORTRANにおいて提供されているDLASQを用いてもよい。
これらの特異値分解の方法については、すでに公知であり、その詳細な説明を省略する。特異値分解部15は、算出した特異値を特異値分解記憶部16に蓄積する。また、特異値分解部15は、算出した特異ベクトルからなる左右直交行列の一部の要素である行列要素も特異値分解記憶部16に蓄積する。特異ベクトルからなる左右直交行列とは、特異ベクトルを各列とする左直交行列、及び特異ベクトルを各列とする右直交行列のことである。行列要素の詳細については後述する。
これらの特異値分解の方法については、すでに公知であり、その詳細な説明を省略する。特異値分解部15は、算出した特異値を特異値分解記憶部16に蓄積する。また、特異値分解部15は、算出した特異ベクトルからなる左右直交行列の一部の要素である行列要素も特異値分解記憶部16に蓄積する。特異ベクトルからなる左右直交行列とは、特異ベクトルを各列とする左直交行列、及び特異ベクトルを各列とする右直交行列のことである。行列要素の詳細については後述する。
特異値分解記憶部16では、特異値分解部によって特異値分解された特異値と、前述の行列要素とが記憶される。また、特異値分解記憶部16では、特異値算出部17によって算出された特異値や行列要素も記憶される。特異値分解記憶部16は、所定の記録媒体(例えば、半導体メモリや磁気ディスク、光ディスクなど)によって実現されうる。特異値分解記憶部16での記憶は、RAM等における一時的な記憶でもよく、あるいは、長期的な記憶でもよい。
特異値算出部17は、特異値分解部15によって算出された特異値と、行列要素とを特異値分解記憶部16から読み出し、その特異値と行列要素とから、分割元の2重対角行列の特異値と、分割元の2重対角行列の行列要素とを算出して特異値分解記憶部16に蓄積する。特異値算出部17は、その分割元の2重対角行列の特異値と、行列要素とを算出する処理を、2重対角行列Bの特異値を算出するまで再帰的に繰り返す。そして、特異値算出部17は、算出した2重対角行列Bの特異値を特異値記憶部18に蓄積する。
特異値記憶部18では、2重対角行列Bの特異値が記憶される。特異値記憶部18は、所定の記録媒体(例えば、半導体メモリや磁気ディスク、光ディスクなど)によって実現されうる。特異値記憶部18での記憶は、RAM等における一時的な記憶でもよく、あるいは、長期的な記憶でもよい。
特異ベクトル算出部19は、対角行列記憶部13から2重対角行列Bを読み出し、特異値記憶部18から2重対角行列Bの特異値を読み出す。そして、特異ベクトル算出部19は、2重対角行列Bとその特異値とから、ツイスト分解法を用いて2重対角行列Bの特異ベクトルを算出して特異ベクトル記憶部20に蓄積する。特異ベクトル算出部19は、それらの処理を実行する、コレスキー分解部21と、第1特異ベクトル算出部22と、第2特異ベクトル算出部23とを備える。特異ベクトル算出部19は、LV型ツイスト分解法により特異ベクトルを算出してもよく、あるいは、qd型ツイスト分解法により特異ベクトルを算出してもよい。本実施の形態では、前者の場合について説明する。
コレスキー分解部21は、対角行列記憶部13から2重対角行列Bを読み出し、特異値記憶部18から2重対角行列Bの特異値を読み出す。そして、コレスキー分解部21は、2重対角行列Bの各要素に関してミウラ変換、dLVv型変換、逆ミウラ変換を行うことによって、2重対角行列Bを上2重対角行列B(+1)及び下2重対角行列B(−1)にコレスキー分解する。この処理の詳細については後述する。
第1特異ベクトル算出部22は、コレスキー分解部21が算出した上2重対角行列B(+1)及び下2重対角行列B(−1)の各要素と、2重対角行列Bの特異値とを用いて一方の左右直交行列を構成する特異ベクトルを算出して特異ベクトル記憶部20に蓄積する。
第2特異ベクトル算出部23は、特異値記憶部18から2重対角行列Bの特異値を読み出す。そして、第2特異ベクトル算出部23は、第1特異ベクトル算出部22が算出した一方の左右直交行列を構成する特異ベクトルと、2重対角行列Bの特異値と、2重対角行列Bとを用いて他方の左右直交行列を構成する特異ベクトルを算出して特異ベクトル記憶部20に蓄積する。このように、第1特異ベクトル算出部22と、第2特異ベクトル算出部23とによって、左右直交行列のそれぞれが算出されることになる。
特異ベクトル記憶部20では、2重対角行列Bの特異ベクトルが記憶される。特異ベクトル記憶部20は、所定の記録媒体(例えば、半導体メモリや磁気ディスク、光ディスクなど)によって実現されうる。特異ベクトル記憶部20での記憶は、RAM等における一時的な記憶でもよく、あるいは、長期的な記憶でもよい。
なお、行列記憶部11、対角行列記憶部13、特異値分解記憶部16、特異値記憶部18、特異ベクトル記憶部20の任意の2以上の記憶部は、同一の記録媒体によって実現されてもよく、あるいは、別々の記録媒体によって実現されてもよい。前者の場合には、例えば、行列Aの記憶されている領域が行列記憶部11となり、2重対角行列B等の記憶されている領域が対角行列記憶部13となる。
また、行列記憶部11、対角行列記憶部13、特異値分解記憶部16、特異値記憶部18、特異ベクトル記憶部20の各記憶部は、2以上の記録媒体から構成されてもよい。
次に、本実施の形態による特異値分解装置1の動作について、図2のフローチャートを用いて説明する。
(ステップS101)対角化部12は、行列記憶部11で記憶されている行列Aを読み出し、その行列Aを2重対角化して2重対角行列Bを算出して対角行列記憶部13に蓄積する。
(ステップS101)対角化部12は、行列記憶部11で記憶されている行列Aを読み出し、その行列Aを2重対角化して2重対角行列Bを算出して対角行列記憶部13に蓄積する。
(ステップS102)行列分割部14、特異値分解部15、特異値算出部17によって2重対角行列Bの特異値が算出され、特異値記憶部18に蓄積される。この処理の詳細については後述する。
(ステップS103)特異ベクトル算出部19は、対角行列記憶部13から2重対角行列Bを読み出し、特異値記憶部18から2重対角行列Bの特異値を読み出し、2重対角行列Bの特異ベクトルを算出して特異ベクトル記憶部20に蓄積する。この処理の詳細については後述する。
このようにして、2重対角行列Bの特異値分解が終了する。ここで、行列Aの特異値は2重対角行列Bの特異値に等しいため、行列Aの特異値も算出されたことになる。また、後述するように、所定の変換を行うことによって、行列Aの特異ベクトルも2重対角行列Bの特異ベクトルから容易に算出することができる。
次に、図2のフローチャートのステップS102の処理について、図3のフローチャートを用いて説明する。
(ステップS201)行列分割部14は、対角行列記憶部13から2重対角行列Bを読み出し、その2重対角行列Bを2個の2重対角行列に分割して対角行列記憶部13に蓄積する。行列分割部14は、その2重対角行列を2個の2重対角行列に分割する処理を、分割後の各2重対角行列があらかじめ決められた大きさ以下となるまで繰り返す。
(ステップS201)行列分割部14は、対角行列記憶部13から2重対角行列Bを読み出し、その2重対角行列Bを2個の2重対角行列に分割して対角行列記憶部13に蓄積する。行列分割部14は、その2重対角行列を2個の2重対角行列に分割する処理を、分割後の各2重対角行列があらかじめ決められた大きさ以下となるまで繰り返す。
(ステップS202)特異値分解部15は、対角行列記憶部13で記憶されているあらかじめ決められた大きさ以下の各2重対角行列について、特異値分解を行う。特異値分解部15は、特異値分解の結果である特異値と、特異ベクトルからなる左右直交行列の一部の要素である行列要素とを特異値分解記憶部16に蓄積する。
(ステップS203)特異値算出部17は、2重対角行列の特異値と、行列要素とを特異値分解記憶部16から読み出し、分割元の2重対角行列の特異値と、分割元の2重対角行列の行列要素とを算出して特異値分解記憶部16に蓄積する。特異値算出部17は、その分割元の2重対角行列の特異値と、行列要素とを算出する処理を、2重対角行列Bの特異値を算出するまで繰り返し、2重対角行列Bの特異値を特異値記憶部18に蓄積する。このようにして、特異値を算出する処理が終了する。
次に、図2のフローチャートのステップS103の処理について、図4のフローチャートを用いて説明する。
(ステップS301)コレスキー分解部21は、対角行列記憶部13から2重対角行列Bを読み出し、特異値記憶部18から2重対角行列Bの特異値を読み出す。そして、コレスキー分解部21は、2重対角行列Bの各要素に関してミウラ変換、dLVv型変換、逆ミウラ変換を行うことによって、2重対角行列Bを上2重対角行列B(+1)及び下2重対角行列B(−1)にコレスキー分解する。
(ステップS301)コレスキー分解部21は、対角行列記憶部13から2重対角行列Bを読み出し、特異値記憶部18から2重対角行列Bの特異値を読み出す。そして、コレスキー分解部21は、2重対角行列Bの各要素に関してミウラ変換、dLVv型変換、逆ミウラ変換を行うことによって、2重対角行列Bを上2重対角行列B(+1)及び下2重対角行列B(−1)にコレスキー分解する。
(ステップS302)第1特異ベクトル算出部22は、上2重対角行列B(+1)及び下2重対角行列B(−1)の各要素を用いて、一方の左右直交行列を構成する特異ベクトルを算出する。本実施の形態では、第1特異ベクトル算出部22は、右直交行列を構成する右特異ベクトルを算出するものとする。
(ステップS303)第1特異ベクトル算出部22は、算出した特異ベクトルを正規化する。すなわち、第1特異ベクトル算出部22は、算出した特異ベクトルのノルムを算出し、特異ベクトルを算出したノルムで割ったものを最終的な特異ベクトルとして特異ベクトル記憶部20に蓄積する。
(ステップS304)第2特異ベクトル算出部23は、第1特異ベクトル算出部22が算出した特異ベクトルと、2重対角行列Bの特異値と、2重対角行列Bとを用いて、第1特異ベクトル算出部22が算出した特異ベクトルと異なる方の特異ベクトルを算出する。2重対角行列Bを特異値分解した結果が、第1特異ベクトル算出部22が算出した特異ベクトルからなる直交行列と、第2特異ベクトル算出部23が算出する特異ベクトルからなる直交行列と、特異値記憶部18が記憶している特異値であるため、その性質を用いて、第2特異ベクトル算出部23は、特異ベクトルを算出することができる。
(ステップS305)第2特異ベクトル算出部23は、算出した特異ベクトルを正規化する。すなわち、第2特異ベクトル算出部23は、算出した特異ベクトルのノルムを算出し、特異ベクトルを算出したノルムで割ったものを最終的な特異ベクトルとして特異ベクトル記憶部20に蓄積する。このようにして、2重対角行列Bを特異値分解する処理は終了となる。
なお、この後に、行列記憶部11が記憶している行列Aの特異ベクトルを算出する処理が行われてもよいが、ここでは省略している。
なお、この後に、行列記憶部11が記憶している行列Aの特異ベクトルを算出する処理が行われてもよいが、ここでは省略している。
また、特異ベクトル算出部19が算出した特異ベクトルの精度を上げるために、図5で示されるように、特異ベクトルに関する処理を実行してもよく、あるいは、実行しなくてもよい。すなわち、図示しない逆反復法処理部は、特異ベクトル記憶部20から特異ベクトル算出部19が算出した特異ベクトルを読み出し、その特異ベクトルに対して逆反復法の処理を実行し、その結果の特異ベクトルを特異ベクトル記憶部20に蓄積する(ステップS401)。次に、図示しないグラムシュミット処理部は、高精度が必要かどうか判断する(ステップS402)。この判断は、あらかじめ高精度が必要かどうか設定されている記録媒体等から、その設定を読み出すことによって判断してもよい。そして、図示しないグラムシュミット処理部は、高精度が必要な場合には、特異ベクトル記憶部20から逆反復法の処理の実行された特異ベクトルを読み出し、その特異ベクトルに対してグラムシュミット法の処理を実行し、その結果の特異ベクトルを特異ベクトル記憶部20に蓄積する(ステップS403)。なお、逆反復法や、グラムシュミット法については、すでに公知であり、その詳細な説明を省略する。
次に、本実施の形態による特異値分解装置1の動作について、以下、より詳細に説明する。
[行列Aの対角化]
行列Aは、例えば、ハウスホルダー変換等を用いて、以下に示されるように2重対角化することができることが知られている。ここでは、上2重対角化する場合について示すが、下2重対角化も同様にして行うことができる。ここで、2重対角行列Bは、行の数と列の数とが一致する正方行列である。
[行列Aの対角化]
行列Aは、例えば、ハウスホルダー変換等を用いて、以下に示されるように2重対角化することができることが知られている。ここでは、上2重対角化する場合について示すが、下2重対角化も同様にして行うことができる。ここで、2重対角行列Bは、行の数と列の数とが一致する正方行列である。
したがって、対角化部12は、上記のようにして、行列記憶部11から行列Aを読み出し、2重対角行列Bを算出することができる。その算出された2重対角行列は、対角行列記憶部13で記憶される(ステップS101)。
[2重対角行列Bの分割]
2重対角行列Bを分割する処理について説明する。まず、図6で示されるように、上2重対角行列であって、正方行列であるBの右端に、全ての要素が0である列を加えたものを新たに上2重対角行列Bとする。なお、この新たな2重対角行列Bの特異値は、元の正方行列である2重対角行列Bの特異値と同じである。したがって、今後、この新たなn×(n+1)行列の特異値を求める処理について説明する。
2重対角行列Bを分割する処理について説明する。まず、図6で示されるように、上2重対角行列であって、正方行列であるBの右端に、全ての要素が0である列を加えたものを新たに上2重対角行列Bとする。なお、この新たな2重対角行列Bの特異値は、元の正方行列である2重対角行列Bの特異値と同じである。したがって、今後、この新たなn×(n+1)行列の特異値を求める処理について説明する。
図7で示されるように、n×(n+1)の上2重対角行列Bが与えられた場合に、それらを2個の上2重対角行列と、2個の要素(図7では、b7,b8)とに分けることができる。したがって、上2重対角行列Bは、以下のように分割されることになる。
ただし、上2重対角行列Bがn×(n+1)行列であるため、上2重対角行列B1は、(k−1)×k行列であり、上2重対角行列B2は、(n−k)×(n−k+1)行列である。kは、1<k<nとなる整数である。ejは、適切な次元におけるj番目の単位ベクトルである。ここで、並列処理を適切に実行するためには、kを、n/2を超えない最大の整数にとるか、あるいは、n/2を下まわらない最小の整数にとることが好適である(このkの値を用いて行列を2個の行列に分割する場合を、「行列を略半分の2個の行列に分割する」と呼ぶことにする)。
本実施の形態では、kを上式のようにとるものとする。なお、kの値は、前述のように、1<k<nの範囲内で任意であることは言うまでもない。
したがって、行列分割部14は、上述のようにして、対角行列記憶部13が記憶している上2重対角行列Bを2個の上2重対角行列と、2個の要素に分割することができ、その分割の処理を繰り返すことができる。図8は、図3のフローチャートのステップS201における行列分割部14による行列を分割する処理を示すフローチャートである。
(ステップS501)行列分割部14は、カウンタIを「1」に設定する。
(ステップS502)行列分割部14は、対角行列記憶部13からI番目の分割をしていない2重対角行列を読み出し、その2重対角行列を2個の2重対角行列と、2個の要素とに分割する。そして、行列分割部14は、分割した2個の2重対角行列と、2個の要素とを対角行列記憶部13に蓄積する。
(ステップS502)行列分割部14は、対角行列記憶部13からI番目の分割をしていない2重対角行列を読み出し、その2重対角行列を2個の2重対角行列と、2個の要素とに分割する。そして、行列分割部14は、分割した2個の2重対角行列と、2個の要素とを対角行列記憶部13に蓄積する。
(ステップS503)行列分割部14は、I番目の分割を行っていない2重対角行列が、対角行列記憶部13で記憶されているかどうか判断する。そして、I番目の分割を行っていない2重対角行列が、対角行列記憶部13で記憶されている場合には、ステップS502に戻り、そうでない場合には、ステップS504に進む。
(ステップS504)行列分割部14は、I番目の分割を行った2重対角行列の大きさがあらかじめ決められている大きさ以下かどうか判断する。行列分割部14は、例えば、目的とする行列の大きさ(例えば、25×26など)の記憶されている図示しない記録媒体から、その目的とする行列の大きさを読み出し、対角行列記憶部13で記憶されている、I番目の分割後の2重対角行列がその大きさ以下であるかどうかを判断してもよい。そして、I番目の分割を行った2重対角行列の大きさがあらかじめ決められている大きさ以下である場合には、2重対角行列を分割する処理は終了となり、そうでない場合には、ステップS505に進む。
(ステップS505)行列分割部14は、カウンタIを1だけインクリメントする。そして、ステップS502に戻る。
(ステップS505)行列分割部14は、カウンタIを1だけインクリメントする。そして、ステップS502に戻る。
なお、この図8のフローチャートでは、上述のように、行列分割部14が各行列を、略半分の2個の行列に分割するため、I番目の分割後の各2重対角行列の大きさがほとんど同じである場合について説明したが、行列分割部14が各行列を、略半分の2個の行列に分割しない場合には、行列分割部14は、分割後の各行列があらかじめ決められた大きさ以下となるように、分割を繰り返すものとする。
また、図8のフローチャートでは、ステップS504において、行列分割部14が、対角行列記憶部13で記憶されている分割後の行列の大きさをあらかじめ決められた大きさと比較する処理を実行する場合について説明したが、これは一例であって、行列分割部14は、ステップS504において、それ以外の処理を行ってもよい。例えば、上述のように、行列分割部14が各行列を、略半分の2個の行列に分割する場合には、元の2重対角行列Bの大きさを知ることができれば、何番目の分割で目的とする行列の大きさとなるのかを知ることができる。したがって、N番目(Nは1以上の整数)の分割で目的とする行列の大きさとなる場合には、ステップS504において、IがNであるかどうかを比較し、NでなければステップS505に進み、Nであれば一連の処理を終了するようにしてもよい。
図9は、行列の分割について説明するための図である。まず、行列分割部14は、1番目の分割として、2重対角行列Bを、2重対角行列B1と、2重対角行列B2とに分割する(ステップS501,S502)。2重対角行列Bは、1個しかないため、行列分割部14は、1番目の分割をしていない行列がないと判断する(ステップS503)。また、2重対角行列B1等はあらかじめ決められた大きさ以下の行列でないとすると(ステップS504)、行列分割部14は、2番目の分割として、2重対角行列B1を、2重対角行列B11と、2重対角行列B12とに分割する(ステップS505,S502)。この場合には、2番目の分割を行っていない2重対角行列B2が存在するため、行列分割部14は、2重対角行列B2も、2重対角行列B21と、2重対角行列B22とに分割する(ステップS503,S502)。このようにして、分割後の各2重対角行列が目的とする大きさ以下になるまで、行列を分割する処理が繰り返される。なお、図9では、2重対角行列以外の2個の要素については省略している。また、図9において、各2重対角行列は、列の数が行の数よりも1だけ大きい行列である。
ここで、Diは、n×nの対角行列である。(Di0)は、行列Diの右側に全ての要素が0の列が1つある行列である。Diの各対角成分はBiの特異値である。また、viは、行列Biの特異値分解における右直交行列の一番右側のベクトルである。Viは、行列Biの特異値分解における右直交行列のviをのぞいた行列である。(Vi vi)Tは、全体として(n+1)×(n+1)の行列である。
したがって、特異値分解部15は、対角行列記憶部13から分割後の各上2重対角行列を読み出し、上記のようにして、特異値分解を行う(ステップS202)。特異値分解の方法として、例えば、2分法と逆反復法を組み合わせた方法、MR^3法、QRs法等を用いてもよいことは前述の通りである。図9で示されるように上2重対角行列の分割が行われた場合には、特異値分解部15は、各2重対角行列B111,B112,B121,B122,……,B222に対して特異値分解を行うことになる。なお、特異値分解部15は、特異値分解の結果得られた各特異値と、特異値分解の結果得られた左右直交行列の一部の要素である行列要素とを特異値分解記憶部16に蓄積する。ここで、行列要素が、左右直交行列のどの要素を含むのかについては後述する。
[特異値の算出]
まず、図10で示されるように、分割された2個の2重対角行列B1,B2から、分割元の2重対角行列B0の特異値等を算出する処理について説明する。2重対角行列B1,B2は、次のように特異値分解されていたとする。ここで、2重対角行列B1,B2は、両者共に列の数が行の数よりも1だけ大きい行列であるとする。
まず、図10で示されるように、分割された2個の2重対角行列B1,B2から、分割元の2重対角行列B0の特異値等を算出する処理について説明する。2重対角行列B1,B2は、次のように特異値分解されていたとする。ここで、2重対角行列B1,B2は、両者共に列の数が行の数よりも1だけ大きい行列であるとする。
ただし、
である。したがって、行列B0は、
によって、(M 0)に直交変換される。これらより、行列B0の特異値分解を行うためには、行列Mの特異値分解を行えばよいことになる。ここで、n×nの行列Mを次のようにおく。
ここで、計算機によって求めることができるのは、行列Mの真の特異値ではなく、誤差を含む近似値である。したがって、
は、真の値である
と大きく異なる可能性がありうる。すなわち、上記のように計算した場合には、特異ベクトルの計算が数値不安定となることがある。この欠点は、次の定理によって克服できる。
したがって、定理1を用いて行列Mの近似特異値を算出した後に、定理2を用いて、その近似特異値を真の特異値とする行列Mを再構成する。特異ベクトルは、上記の式5を用いて算出した
と、上記の式2を用いて算出した
とを上記の式3,式4に代入することによって数値安定的に求めることができる。このようにして、次のように行列Mの特異値分解が求められたとする。
このように、対象となる行列を2個の副行列に分割し、その分割した後の各副行列について特異値分解を行う処理を再帰的に行うことによって特異値分解を行う方法は、分割統治法(Divide and Conquer:D&C)と呼ばれている。
分割統治法では、特異ベクトルまで算出することになり、その特異ベクトルを算出する処理において行列の計算をしなければならないため、非常に負荷の大きい処理となる。分割統治法において特異値分解をする場合には、例えば、計算時間の95%程度が特異ベクトルを算出するベクトル更新の処理(例えば、上述のように、行列Mの左右直交行列から、行列B0の左右直交行列を算出するために行列を掛け合わせる処理)に費やされることもありうる。
これより、
となる。ここで、fとφとは、行列B0を特異値分解した結果の右直交行列の最初の行の各要素である。また、lとψとは、行列B0を特異値分解した結果の右直交行列の最後の行の各要素である。この右直交行列の最初の行の各要素と、最後の行の各要素とが行列要素となる。
上記の結果から、図10で示されるように、行列B1,B2から分割元の行列B0を構成する場合に、行列B0について、
をそれぞれ算出することができる。このような処理を繰り返すことにより、最終的に、行列Aを2重対角化した2重対角行列Bの特異値を算出することができる。
したがって、特異値算出部17は、上述のようにして、特異値分解記憶部16から特異値と行列要素とを読み出し、対角行列記憶部13から行列の分割時に発生した2個の要素(b2k−1、b2k)を読み出し、それらを用いることによって、分割元の2重対角行列の特異値と行列要素とを算出する。そして、それらを算出する処理を繰り返すことによって、最終的に2重対角行列Bの特異値を算出する。図11は、図3のフローチャートのステップS203における特異値算出部17が特異値を算出する処理を示すフローチャートである。
(ステップS601)特異値算出部17は、カウンタJを「1」に設定する。
(ステップS602)特異値算出部17は、J番目の特異値の算出は最後の特異値の算出であるかどうか判断する。ここで、最後の特異値の算出とは、2重対角行列Bの特異値を算出することである。そして、最後の特異値の算出である場合には、ステップS606に進み、そうでない場合には、ステップS603に進む。
(ステップS602)特異値算出部17は、J番目の特異値の算出は最後の特異値の算出であるかどうか判断する。ここで、最後の特異値の算出とは、2重対角行列Bの特異値を算出することである。そして、最後の特異値の算出である場合には、ステップS606に進み、そうでない場合には、ステップS603に進む。
(ステップS603)特異値算出部17は、分割元の2重対角行列の特異値等を算出する。この処理の詳細については後述する。
(ステップS604)特異値算出部17は、J番目の特異値の算出において、分割元の全ての2重対角行列の特異値等を算出したかどうか判断する。そして、J番目の特異値の算出において、分割元の全ての2重対角行列の特異値等を算出した場合には、ステップS605に進み、そうでない場合には、ステップS603に戻る。
(ステップS604)特異値算出部17は、J番目の特異値の算出において、分割元の全ての2重対角行列の特異値等を算出したかどうか判断する。そして、J番目の特異値の算出において、分割元の全ての2重対角行列の特異値等を算出した場合には、ステップS605に進み、そうでない場合には、ステップS603に戻る。
(ステップS605)特異値算出部17は、カウンタJを1だけインクリメントする。そして、ステップS602に戻る。
(ステップS606)特異値算出部17は、2重対角行列Bの特異値を算出し、その算出した特異値を特異値記憶部18に蓄積する。このようにして、2重対角行列Bの特異値を算出する一連の処理は終了となる。
(ステップS606)特異値算出部17は、2重対角行列Bの特異値を算出し、その算出した特異値を特異値記憶部18に蓄積する。このようにして、2重対角行列Bの特異値を算出する一連の処理は終了となる。
図12は、図11のフローチャートにおけるステップS603の詳細な処理を示すフローチャートである。
(ステップS701)特異値算出部17は、分割元の行列の特異値を式2を用いて算出する。そして、特異値算出部17は、算出した特異値を特異値分解記憶部16に蓄積する。
(ステップS701)特異値算出部17は、分割元の行列の特異値を式2を用いて算出する。そして、特異値算出部17は、算出した特異値を特異値分解記憶部16に蓄積する。
(ステップS702)特異値算出部17は、ステップS701で算出した特異値を用いて、式5のzを算出する。
(ステップS703)特異値算出部17は、ステップS701で算出した特異値と、ステップS702で算出したzとを用いて、式4のviを算出する。このviを算出することにより、viを列ベクトルに有するVMを算出したことになる。そして、特異値算出部17は、算出したVMを特異値分解記憶部16に蓄積する。
(ステップS703)特異値算出部17は、ステップS701で算出した特異値と、ステップS702で算出したzとを用いて、式4のviを算出する。このviを算出することにより、viを列ベクトルに有するVMを算出したことになる。そして、特異値算出部17は、算出したVMを特異値分解記憶部16に蓄積する。
(ステップS704)特異値算出部17は、式6から式9を用いて、分割元の行列に関する行列要素を算出する。そして、特異値算出部17は、算出した分割元の行列要素を特異値分解記憶部16に蓄積する。このようにしてステップS603の処理は終了となる。
図13は、特異値を算出する処理について説明するための図である。特異値分解記憶部16では、特異値分解部15によって行列B111,B112,...,B222が特異値分解された結果、すなわち、それらの特異値と、行列要素とが記憶されているものとする。まず、特異値算出部17は、特異値等の1番目の算出を開始する(ステップS601,S602)。ここで、特異値等の1番目の算出とは、図13の一番下の行の行列の特異値と、行列要素とから、下から2番目の行の行列の特異値と、行列要素とを算出することである。特異値算出部17は、行列B111と、行列B112との各特異値、及び行列B111と、行列B112との各行列要素を特異値分解記憶部16から読み出す。また、行列B11を行列B111と、行列B112とに分解したときに発生した2個の要素を対角行列記憶部13から読み出す。そして、特異値算出部17は、それらの値を用いて、行列B11の特異値を算出して特異値分解記憶部16に蓄積する(ステップS701)。次に、特異値算出部17は、行列B11の特異値を用いてzの値を算出する(ステップS702)。特異値算出部17は、行列B11の特異値と、zの値とを用いて直交行列VMを算出して特異値分解記憶部16に蓄積する(ステップS703)。最後に、特異値算出部17は、行列B11の行列要素を算出して特異値分解記憶部16に蓄積する(ステップS704)。
特異値等の1番目の算出はまだ終わっていないため(ステップS604)、特異値算出部17は、上記説明と同様にして、行列B121、行列B122の特異値、行列要素等に基づいて、行列B12の特異値、行列要素を算出する(ステップS602,S603)。このようにして、特異値等の1番目の算出が終了すると、特異値算出部17は、特異値等の2番目の算出、すなわち、行列B11、行列B12の特異値、行列要素等に基づいて行列B1の特異値、行列要素の算出を行う(ステップS604,S605,S602,S603)。その後、特異値算出部17は、同様にして、行列B21、行列B22の特異値、行列要素等に基づいて行列B2の特異値、行列要素の算出を行う(ステップS604,S603)。
特異値算出部17が特異値等の2番目の算出を終了すると(ステップS604)、次の特異値等の算出は、2重対角行列Bの特異値を求める最後の処理となるため(ステップS605,S602)、特異値算出部17は、特異値の算出のみを行い、その算出した特異値を特異値記憶部18に蓄積する(ステップS606)。このようにして、特異値の算出が終了する。
ここで、一般に次のことが成り立つ。
(1)行列BTBは対称な3重対角行列である。
(2)行列BTBの固有値は全て正であり、行列Bの特異値σj(σ1≧σ2≧…≧σm≧0)は、行列BTBの固有値と次の関係を有する。
(3)VB=Vである。ただし、VBは行列Bの右直交行列である。したがって、行列BTBの固有ベクトルxjは、行列Bの右特異ベクトルに等しい。
(1)行列BTBは対称な3重対角行列である。
(2)行列BTBの固有値は全て正であり、行列Bの特異値σj(σ1≧σ2≧…≧σm≧0)は、行列BTBの固有値と次の関係を有する。
したがって、行列BTBの固有ベクトルを求めると、行列Bの右直交行列が求まることになる。さらに、行列Bの固有値分解を、
とする。すると、右直交行列VBが求まり、特異値を対角成分に有する行列Σが求まることによって、
から、左直交行列も求まることになり、行列Bが特異値分解される。したがって、行列Bの特異ベクトルを求めることは、行列BTB=TSの固有ベクトルを求めることに置き換えることができる。すなわち、次の方程式の固有ベクトルxjを求めればよいことになる。
本来であれば、上記式の右辺は0になるはずであるが、行列Bの特異値を算出するときに、いくらかの誤差を含むため、特異ベクトルxjが真値であれば、上記のように右辺に残差項が存在する。
ここで、行列Nkをツイスト行列と呼ぶ。また、
であるので、(BTB−σj 2I)xj=γkekは、
となる。この簡単な式を解くことによって特異ベクトルを算出することができる。具体的には、
のようにわずかな演算で特異ベクトルを算出することができる。なお、あるρ0について、Dρ0 +=0あるいはDρ0 −=0であったとしても、行列Bの(ρ,ρ)成分であるb2ρ−1 (0)と、行列Bの(ρ,ρ+1)成分であるb2ρ (0)を用いて、
と特異ベクトルを算出することができる(このように特異ベクトルを算出する処理を例外処理と呼ぶことにする)。なお、残差項のパラメータγk及びkの値は、
の絶対値が最小となるように決定する。したがって、上述のコレスキー分解を求め、ツイスト行列Nkを求めることができれば、特異ベクトルを求めることができることになる。そこで、次にコレスキー分解について説明する。
図14で示すように、B(0)TB(0)−σj 2Iをコレスキー分解することは、B(0)に対応する{qk (0),ek (0)}から、B(±1)に対応する{qk (±1),ek (±1)}を求めることである。
この変換は、さらにstationary qd with shift(stqds)変換
及びreverse−time progressive qd with shift(rpqds)変換
に分けられる。特異値σjが既知であれば反復的な計算が不要なため、計算量を少なく抑えることができるが、常に数値安定性と精度が高い方法ではない。それは、stqds変換、rpqds変換は、共に減算による桁落ちが発生する可能性があるからである。例えば、stqds変換において、qk (0)+ek−1 (0)−σj 2〜ek−1 (+1)であれば、qk (+1)を求める際に、倍精度計算でもの有効数字がわずか1桁になることもある。その場合には、qk (0)ek (0)/qk (+1)を計算すると誤差が生じる。つまり、ek (+1)が精度よく計算できないことになる。また、qk+1 (+1)を求めるのにek (+1)が必要であり、ek (+1)を求めるのにqk (+1)が必要であるといったように逐次的な計算が要求されるので、1箇所で発生した桁落ちによる誤差が波及し、さらなる誤差増大の可能性も秘めている。その結果、理論上はqk (+1)≠0であるが、誤差蓄積によりqk (+1)=0となり、qk (0)ek (0)/qk (+1)の計算においてオーバーフローが起こるといった数値不安定な状況も想定される。B(0)=Bの成分{b2k−1 (0),b2k (0)}が与えられる、すなわち{qk (0),ek (0)}が与えられると、σj 2及びek−1 (+1)が一意的に決まるので、この状況は避けることはできない。rpqds変換も同様の性質を持つため、実用的なレベルにまで達したとはいいがたい。LAPACKにおいてFORTRANルーチンDSTEGRとして改良版が公開されているものの欠点は完全に解決されてはいない。
次に、dLVv型変換について説明する。この変換は、さらにstationary discrete Lotka−Volterra with variable step−size(stdLVv)変換
及びreverse−time discrete Lotka−Volterra with variable step−size(rdLVv)変換
に分けられる。ただし、
を満たす範囲内でδ(±1)は任意である。
このようにして、qd型変換と同様に、コレスキー分解を行うことができる。qd型変換では見られない離散Lotka−Volterra型変換の大きな特徴は、任意パラメータを持つことである。すなわち、σj 2=1/δ(0)−1/δ(±1)を満たす範囲でδ(n)の値を任意に設定できる。δ(n)を変動させると補助変数uk (n)の値も変化するが、桁落ちによる誤差や数値不安定が発生するかどうかは事前に判定できる。この判定は、if文によって実装されてもよい。この場合は、δ(n)を再設定後に再度計算すればよい。また、uk (±1)が求まれば逆ミウラ変換によってqk (±1)及びek (±1)が独立に計算されるので、誤差が伝播しないという性質を持つ。なお、逆ミウラ変換をミウラ変換、ミウラ変換を逆ミウラ変換と呼んでもよく、stdLVv変換をstLVv変換と呼んでもよく、rdLVv変換をrLVv変換と呼んでもよい。
ここで、LV型ツイスト分解法による処理のより詳細な処理の一例について説明する。図15〜図20は、LV型ツイスト分解法による処理の一例を示すフローチャートである。
図15は、コレスキー分解の全体の処理の一例を示す図である。
(ステップS901)コレスキー分解部21は、ミウラ変換を行う。この処理の詳細については後述する。
(ステップS902)コレスキー分解部21は、1/δ(±1)を1/δ(0)−σj 2とする。
(ステップS901)コレスキー分解部21は、ミウラ変換を行う。この処理の詳細については後述する。
(ステップS902)コレスキー分解部21は、1/δ(±1)を1/δ(0)−σj 2とする。
(ステップS903)コレスキー分解部21は、後述するProcedure1の処理を実行する。
(ステップS904)コレスキー分解部21は、後述するProcedure2の処理を実行する。
(ステップS904)コレスキー分解部21は、後述するProcedure2の処理を実行する。
(ステップS905)コレスキー分解部21は、qk (+1),ek (+1)がすでに算出されているかどうか判断する。そして、すでに算出されている場合には、コレスキー分解の一連の処理は終了となり、一方、算出されていない場合には、ステップS901に戻る。
図16は、図15のフローチャートにおけるステップS903の処理の詳細を示すフローチャートである。
(ステップS1001)コレスキー分解部21は、qk (+1),ek (+1)がすでに算出されているかどうか判断する。そして、すでに算出されている場合には、終了となり、算出されていない場合には、ステップS1002に進む。
(ステップS1002)コレスキー分解部21は、stdLVv変換等の処理を行う。この処理の詳細については後述する。
(ステップS1001)コレスキー分解部21は、qk (+1),ek (+1)がすでに算出されているかどうか判断する。そして、すでに算出されている場合には、終了となり、算出されていない場合には、ステップS1002に進む。
(ステップS1002)コレスキー分解部21は、stdLVv変換等の処理を行う。この処理の詳細については後述する。
図17は、図15のフローチャートにおけるステップS904の処理の詳細を示すフローチャートである。
(ステップS1101)コレスキー分解部21は、qk (−1),ek (−1)がすでに算出されているかどうか判断する。そして、すでに算出されている場合には、終了となり、算出されていない場合には、ステップS1102に進む。
(ステップS1102)コレスキー分解部21は、rdLVv変換等の処理を行う。この処理の詳細については後述する。
(ステップS1101)コレスキー分解部21は、qk (−1),ek (−1)がすでに算出されているかどうか判断する。そして、すでに算出されている場合には、終了となり、算出されていない場合には、ステップS1102に進む。
(ステップS1102)コレスキー分解部21は、rdLVv変換等の処理を行う。この処理の詳細については後述する。
図18は、図15のフローチャートのステップS901の処理の詳細を示すフローチャートである。
(ステップS1201)コレスキー分解部21は、1/δ(0)の値を決定する。この値は、前述のように任意に決定することができうる。算出された特異値の小さい順にσ1,σ2,…とする場合に、例えば、コレスキー分解部21は、1/δ(0)の値をσ1 2よりも小さい値(例えば、「1」など)に設定し、その後、ステップS1203等で桁落ちの発生する可能性があると判断された場合に、1/δ(0)の値をσj 2とσj+1 2の間(j=1,2,…)に設定する、というように、jを1ずつ大きくしながら1/δ(0)の値を設定していってもよい。なお、1/δ(0)の値を決定する方法は、これに限定されないことは言うまでもない。
(ステップS1202)コレスキー分解部21は、β1をq1 (0)−1/δ(0)に設定する。
(ステップS1201)コレスキー分解部21は、1/δ(0)の値を決定する。この値は、前述のように任意に決定することができうる。算出された特異値の小さい順にσ1,σ2,…とする場合に、例えば、コレスキー分解部21は、1/δ(0)の値をσ1 2よりも小さい値(例えば、「1」など)に設定し、その後、ステップS1203等で桁落ちの発生する可能性があると判断された場合に、1/δ(0)の値をσj 2とσj+1 2の間(j=1,2,…)に設定する、というように、jを1ずつ大きくしながら1/δ(0)の値を設定していってもよい。なお、1/δ(0)の値を決定する方法は、これに限定されないことは言うまでもない。
(ステップS1202)コレスキー分解部21は、β1をq1 (0)−1/δ(0)に設定する。
(ステップS1203)コレスキー分解部21は、β1の絶対値がεよりも大きいかどうか判断する。そして、大きい場合には、ステップS1204に進み、そうでない場合には、ステップS1201に戻って、1/δ(0)の値を決定する処理を再度実行する。なお、このεも任意に定めることができる。例えば、εとしてマシン・イプシロンを用いてもよい。εの値を大きくすると精度が向上し、εの値を小さくすると精度が低下する。なお、このステップS1203で行っている処理は、桁落ちが発生する可能性について判断する処理である。β1の絶対値がεよりも大きくない場合には、桁落ちの発生する可能性があると判断されることになる。
(ステップS1204)コレスキー分解部21は、β2をq1 (0)/(1+δ(0)u0 (0))に設定する。なお、前述のようにu0 (0)=0であるため、β2はq1 (0)に設定されたことになる。
(ステップS1205)コレスキー分解部21は、u1 (0)(1+δ(0)u0 (0))をβ1に設定する。ここで、β1は、ステップS1202においてq1 (0)−1/δ(0)に設定されているが、前述のようにu0 (0)=0であるため、β1は、q1 (0)/(1+δ(0)u0 (0)−1/δ(0)と等しく、これにミウラ変換を行うとu1 (0)=u2k−1 (0)|k=1となるからである。なお、u0 (0)=0から(1+δ(0)u0 (0))=1である。
(ステップS1206)コレスキー分解部21は、カウンタkを「1」に設定する。
(ステップS1207)コレスキー分解部21は、α1をek (0)/β1に設定する。前述のように、β1はu2k−1 (0)となるから、ek (0)/β1にミウラ変換を行うと、α1はδ(0)u2k (0)と等しいことになる。
(ステップS1207)コレスキー分解部21は、α1をek (0)/β1に設定する。前述のように、β1はu2k−1 (0)となるから、ek (0)/β1にミウラ変換を行うと、α1はδ(0)u2k (0)と等しいことになる。
(ステップS1208)コレスキー分解部21は、α2をα1+1に設定する。ステップS1207の説明からわかるように、α2は1+δ(0)u2k (0)と等しいことになる。
(ステップS1209)コレスキー分解部21は、α2の絶対値がεよりも大きいかどうか判断する。そして、大きい場合には、ステップS1210に進み、そうでない場合には、ステップS1201に戻って、1/δ(0)の値を決定する処理を再度実行する。なお、このステップS1209で行っている処理は、ステップS1203の処理と同様に、桁落ちが発生する可能性について判断する処理である。α2の絶対値がεよりも大きくない場合には、桁落ちの発生する可能性があると判断されることになる。
(ステップS1210)コレスキー分解部21は、α1×β2を算出してu2k (0)(1+δ(0)u2k−1 (0))に設定する。前述のように、α1はδ(0)u2k (0)と等しく、β2はqk (0)/(1+δ(0)u2k−2 (0))であるため、α1×β2にミウラ変換を実行すると、u2k (0)(1+δ(0)u2k−1 (0))に等しくなるからである。
(ステップS1211)コレスキー分解部21は、β2をqk+1 (0)/α2に設定する。前述のように、α2は1+δ(0)u2k (0)と等しいため、β2は、qk+1 (0)/(1+δ(0)u2k (0))となり、β2におけるkの値を1だけインクリメントしたことになる。
(ステップS1212)コレスキー分解部21は、β1をβ2−1/δ(0)に設定する。前述のように、β2はqk+1 (0)/(1+δ(0)u2k (0))と等しいため、β1は、qk+1 (0)/(1+δ(0)u2k (0))−1/δ(0)となり、ミウラ変換を実行すると、β1は、u2k+1 (0)となる。したがって、β1におけるkの値を1だけインクリメントしたことになる。
(ステップS1213)コレスキー分解部21は、β1の絶対値がεよりも大きいかどうか判断する。そして、大きい場合には、ステップS1214に進み、そうでない場合には、ステップS1201に戻って、1/δ(0)の値を決定する処理を再度実行する。なお、このステップS1213で行っている処理は、ステップS1203の処理と同様に、桁落ちが発生する可能性について判断する処理である。β1の絶対値がεよりも大きくない場合には、桁落ちの発生する可能性があると判断されることになる。
(ステップS1214)コレスキー分解部21は、α2×β1を算出してu2k+1 (0)(1+δ(0)u2k (0))に設定する。前述のように、α2は1+δ(0)u2k (0)と等しく、β1は、u2k+1 (0)に等しいからである。
(ステップS1215)コレスキー分解部21は、カウンタkを1だけインクリメントする。
(ステップS1216)コレスキー分解部21は、カウンタkがmに等しいかどうか判断する。そして、mに等しい場合には、一連の処理は終了となり、そうでない場合には、ステップS1207に戻る。
(ステップS1216)コレスキー分解部21は、カウンタkがmに等しいかどうか判断する。そして、mに等しい場合には、一連の処理は終了となり、そうでない場合には、ステップS1207に戻る。
このようにして、u2k+1 (0)(1+δ(0)u2k (0))と、u2k (0)(1+δ(0)u2k−1 (0))とが算出されることになる。これらの値は、コレスキー分解部21が有する図示しないメモリ等において一時的に記憶されてもよい。
図19は、図16のフローチャートのステップS1002の処理の詳細を示すフローチャートである。
(ステップS1301)コレスキー分解部21は、α2を1+δ(+1)u0 (+1)に設定する。なお、前述のようにu0 (+1)=0であるため、α2は1に設定されたことになる。
(ステップS1301)コレスキー分解部21は、α2を1+δ(+1)u0 (+1)に設定する。なお、前述のようにu0 (+1)=0であるため、α2は1に設定されたことになる。
(ステップS1302)コレスキー分解部21は、β1をu1 (0)(1+δ(0)u0 (0))/(1+δ(+1)u0 (+1))に設定する。ここで、u1 (0)(1+δ(0)u0 (0))の値としては、ステップS1205で算出したものを用いる。なお、前述のようにu0 (+1)=0である。また、このβ1の式にstdLVv変換を実行すると、β1は、u1 (+1)に設定されたことになる。
(ステップS1303)コレスキー分解部21は、カウンタkを「1」に設定する。
(ステップS1304)コレスキー分解部21は、α1をβ1+1/δ(+1)に設定する。
(ステップS1304)コレスキー分解部21は、α1をβ1+1/δ(+1)に設定する。
(ステップS1305)コレスキー分解部21は、α1の絶対値がεよりも大きいかどうか判断する。そして、大きい場合には、ステップS1306に進み、そうでない場合には、図15のフローチャートのProcedure2(ステップS904)に進む。なお、このステップS1305で行っている処理は、ステップS1203の処理と同様に、桁落ちが発生する可能性について判断する処理である。α1の絶対値がεよりも大きくない場合には、桁落ちの発生する可能性があると判断されることになる。
(ステップS1306)コレスキー分解部21は、β2をu2k (0)(1+δ(0)u2k−1 (0))/α1に設定する。ここで、u2k (0)(1+δ(0)u2k−1 (0))の値としては、ステップS1210で算出したものを用いる。また、このβ2の式にstdLVv変換を実行すると、β2は、δ(+1)u2k (+1)に設定されたことになる。
(ステップS1307)コレスキー分解部21は、α1×α2を算出する。前述のように、α1はβ1+1/δ(+1)=u2k−1 (+1)+1/δ(+1)に等しく、α2は1+δ(+1)u2k−2 (+1)に等しいため、α1×α2に逆ミウラ変換を実行するとqk (+1)に等しくなる。したがって、コレスキー分解部21は、α1×α2を算出してqk (+1)に設定する。
(ステップS1308)コレスキー分解部21は、α2を1+β2に設定する。前述のように、β2はδ(+1)u2k (+1)と等しいため、α2は1+δ(+1)u2k (+1)となる。したがって、α2におけるkの値を1だけインクリメントしたことになる。
(ステップS1309)コレスキー分解部21は、α2の絶対値がεよりも大きいかどうか判断する。そして、大きい場合には、ステップS1310に進み、そうでない場合には、図15のフローチャートのProcedure2(ステップS904)に進む。なお、このステップS1309で行っている処理は、ステップS1203の処理と同様に、桁落ちが発生する可能性について判断する処理である。α2の絶対値がεよりも大きくない場合には、桁落ちの発生する可能性があると判断されることになる。
(ステップS1310)コレスキー分解部21は、β1×β2を算出する。前述のように、β1はu2k−1 (+1)に等しく、β2はδ(+1)u2k (+1)と等しいため、β1×β2に逆ミウラ変換を実行すると、ek (+1)に等しくなる。したがって、コレスキー分解部21は、β1×β2を算出してek (+1)に設定する。
(ステップS1311)コレスキー分解部21は、β1をu2k+1 (0)(1+δ(0)u2k (0))/α2に設定する。ここで、u2k+1 (0)(1+δ(0)u2k (0))の値としては、ステップS1214で算出したものを用いる。また、このβ1の式にstdLVv変換を実行すると、β1は、u2k+1 (+1)に設定されたことになる。したがって、β1におけるkの値を1だけインクリメントしたことになる。
(ステップS1312)コレスキー分解部21は、カウンタkを1だけインクリメントする。
(ステップS1313)コレスキー分解部21は、カウンタkがmに等しいかどうか判断する。そして、mに等しい場合には、ステップS1314に進み、そうでない場合には、ステップS1304に戻る。
(ステップS1313)コレスキー分解部21は、カウンタkがmに等しいかどうか判断する。そして、mに等しい場合には、ステップS1314に進み、そうでない場合には、ステップS1304に戻る。
(ステップS1314)コレスキー分解部21は、α2×(β1+1/δ(+1))を算出する。これは、ステップS1304でα1を更新した後に、ステップS1307でα1×α2を計算することと等しい。したがって、コレスキー分解部21は、α2×(β1+1/δ(+1))を算出してq1 (+1)に設定する。このようにして、ミウラ変換された結果にstdLVv変換と、逆ミウラ変換とを実行して、qk (+1)、ek (+1)を算出する処理が終了する。これらの値は、コレスキー分解部21が有する図示しないメモリ等において一時的に記憶されてもよい。
図20は、図17のフローチャートのステップS1102の処理の詳細を示すフローチャートである。
(ステップS1401)コレスキー分解部21は、β1をu2m−1 (0)(1+δ(0)u2m−2 (0))/(1+δ(−1)u2m (−1))に設定する。ここで、u2m−1 (0)(1+δ(0)u2m−2 (0))の値としては、ステップS1214で算出したものを用いる。なお、前述のようにu2m (−1)=0である。また、このβ1の式にrdLVv変換を実行すると、β1は、u2m−1 (−1)に設定されたことになる。
(ステップS1401)コレスキー分解部21は、β1をu2m−1 (0)(1+δ(0)u2m−2 (0))/(1+δ(−1)u2m (−1))に設定する。ここで、u2m−1 (0)(1+δ(0)u2m−2 (0))の値としては、ステップS1214で算出したものを用いる。なお、前述のようにu2m (−1)=0である。また、このβ1の式にrdLVv変換を実行すると、β1は、u2m−1 (−1)に設定されたことになる。
(ステップS1402)コレスキー分解部21は、カウンタkを「m−1」に設定する。
(ステップS1403)コレスキー分解部21は、α1をβ1+1/δ(−1)に設定する。
(ステップS1403)コレスキー分解部21は、α1をβ1+1/δ(−1)に設定する。
(ステップS1404)コレスキー分解部21は、α1の絶対値がεよりも大きいかどうか判断する。そして、大きい場合には、ステップS1405に進み、そうでない場合には、図15のフローチャートのミウラ変換(ステップS901)に戻る。なお、このステップS1404で行っている処理は、ステップS1203の処理と同様に、桁落ちが発生する可能性について判断する処理である。α1の絶対値がεよりも大きくない場合には、桁落ちの発生する可能性があると判断されることになる。
(ステップS1405)コレスキー分解部21は、β2をu2k (0)(1+δ(0)u2k−1 (0))/α1に設定する。ここで、u2k (0)(1+δ(0)u2k−1 (0))の値としては、ステップS1210で算出したものを用いる。また、このβ2の式にrdLVv変換を実行すると、β2は、δ(−1)u2k (−1)に設定されたことになる。
(ステップS1406)コレスキー分解部21は、α2を1+β2に設定する。前述のように、β2はδ(−1)u2k (−1)と等しいため、α2は1+δ(−1)u2k (−1)となる。
(ステップS1407)コレスキー分解部21は、α2の絶対値がεよりも大きいかどうか判断する。そして、大きい場合には、ステップS1408に進み、そうでない場合には、図15のフローチャートのミウラ変換(ステップS901)に戻る。なお、このステップS1407で行っている処理は、ステップS1203の処理と同様に、桁落ちが発生する可能性について判断する処理である。α2の絶対値がεよりも大きくない場合には、桁落ちの発生する可能性があると判断されることになる。
(ステップS1408)コレスキー分解部21は、α1×α2を算出する。前述のように、α1はβ1+1/δ(−1)=u2k+1 (−1)+1/δ(−1)に等しく、α2は1+δ(−1)u2k (−1)に等しいため、α1×α2に逆ミウラ変換を実行するとqk+1 (−1)に等しくなる。したがって、コレスキー分解部21は、α1×α2を算出してqk+1 (−1)に設定する。
(ステップS1409)コレスキー分解部21は、β1をu2k−1 (0)(1+δ(0)u2k−2 (0))/α2に設定する。ここで、u2k−1 (0)(1+δ(0)u2k−2 (0))の値としては、ステップS1205,S1214で算出したものを用いる。また、このβ1の式にstdLVv変換を実行すると、β1は、u2k−1 (−1)に設定されたことになる。したがって、β1におけるkの値を1だけデクリメントしたことになる。
(ステップS1410)コレスキー分解部21は、β1×β2を算出する。前述のように、β1はu2k−1 (−1)に等しく、β2はδ(−1)u2k (−1)と等しいため、β1×β2に逆ミウラ変換を実行すると、ek (−1)に等しくなる。したがって、コレスキー分解部21は、β1×β2を算出してek (−1)に設定する。
(ステップS1411)コレスキー分解部21は、カウンタkを1だけデクリメントする。
(ステップS1412)コレスキー分解部21は、カウンタkが0に等しいかどうか判断する。そして、0に等しい場合には、ステップS1413に進み、そうでない場合には、ステップS1403に戻る。
(ステップS1412)コレスキー分解部21は、カウンタkが0に等しいかどうか判断する。そして、0に等しい場合には、ステップS1413に進み、そうでない場合には、ステップS1403に戻る。
(ステップS1413)コレスキー分解部21は、β1+1/δ(−1)を算出する。これは、ステップS1403でα1を更新した後に、ステップS1408でα1×α2を計算することと等しい。この場合、α2は1だからである。したがって、コレスキー分解部21は、β1+1/δ(−1)を算出してq1 (−1)に設定する。このようにして、ミウラ変換された結果にrdLVv変換と、逆ミウラ変換とを実行して、qk (−1)、ek (−1)を算出する処理が終了する。これらの値は、コレスキー分解部21が有する図示しないメモリ等において一時的に記憶されてもよい。
なお、図15のフローチャートの処理によって算出することができるのは1個の特異値に対応する特異ベクトルであるため、全ての特異値に対応する特異ベクトルを算出する場合には、コレスキー分解部21は、図15のフローチャートの処理を特異値の数だけ繰り返すことになる。
メモリ消費を抑えるために、補助変数uk (n)のための配列は必ずしも用意する必要はない。一方、1+δ(0)u(0)のためのメモリ領域を確保し、ミウラ変換、dLVv型変換、逆ミウラ変換のステップにまたがってこの値を利用することで、メモリ消費を抑え、計算量を低減することができる。これにより、誤差も低減される。
ここで、誤差について説明する。人間が理想的な状況、すなわち、無限桁の計算をいくらでもできるとすると、qd型ツイスト分解法であっても、LV型ツイスト分解法であっても問題ない。しかしながら、コンピュータで計算を行う場合は注意が必要である。有限桁の計算しか行えないコンピュータ上では、数学的に正しい計算法を使ったとしても必ずしも正しい結果が得られる訳ではない。そればかりか、いつまでたっても計算が終了しないといった思わぬ数値的な問題が発生する場合もある。
コンピュータ計算による誤差には、丸め誤差及び桁落ちによる誤差などが知られている。丸め誤差単独では、高々有効桁の最後の桁が真値と比べて異なる程度で大きな誤差にはならない。また、指数部が異なる2つの実数の加算、乗算、除算の少なくとも1つの演算を行えばやはり丸め誤差が生じるが、それ以上の誤差は発生しない。さらに、このような丸め誤差を発生するような操作が繰り返されても、丸めモードがnear(四捨五入)ならば、一方的に切り上げられたり、あるいは切り捨てられたりして誤差が極端に蓄積することは少ない。よって、多くの数値計算法は加算、乗算、除算の少なくとも1つの演算によって発生する丸め誤差を特別注意することは少なく、dLVsルーチンによる特異値計算でも結果的に丸め誤差は一様に増大しない。
問題となるのは、同符号の実数の減算及び異符号の実数の加算により生じる、桁落ちである。桁落ちによる誤差で値が0となった後、その値による除算を行うと、0が分母にくるような不定形となり計算不可能となる。こうなるといつまでたっても計算が終了しない。減算→除算と計算する部分がqd型ツイスト分解法、LV型ツイスト分解法の両方に存在するので、桁落ち誤差には十分に注意する必要がある。
LV型ツイスト分解法では、上述の桁落ちによる誤差を含んでいるかどうかは減算によって得られた値が小さいかどうかで判断できる。qd型ツイスト分解法の場合、桁落ち誤差を含むことが分かったとしても、それを回避することはできない。なぜならば、初期値として{qk (0),ek (0)}が与えられると、σjは一意的に決定され、{qk (±1),ek (±1)}も一意的に導出されるためである。すなわち、任意パラメータを持たない自由度のない計算法であるためである。
それに対して、LV型ツイスト分解法は、自由に設定できるパラメータδ(0)を持つため、補助変数uk (n)の値を様々に変化させることができる(図21A、図21B参照)。すなわち、様々な経路で{qk (±1),ek (±1)}を計算することができる。よって、桁落ちが発生する場合も回避できる。図18〜図20の条件判定によって桁落ちの影響をチェックし、減算によって得られた値の絶対値が小さな数εより大きいという条件が満たされなければ、パラメータδ(0)の設定に戻るというものである。この処理は、条件が満たされるまで繰り返される。なお、精度よりも高速性を重視する場合は、数回条件が満たさなければ(qk (+1)=0あるいはqk (−1)=0ならば)、例外処理を行ってもよい。
qd型ツイスト分解法あるいはLV型ツイスト分解法によってコレスキー分解をすることができると、上述のようにツイストされた行列Nkを算出することができ、その行列NkのNk Txj=ekを解くことによって、xjを算出することができる。ここで、
とxjを置き換えることにより、このxjを正規化する。このようにして、右特異ベクトルxjを求めることができる。この右特異ベクトルxjを用いて、VB=(x1,x2,...,xm)とすることにより、右直交行列VBを算出することができる。
また、前述のように、
となるため、VBが求まれば、2重対角行列B、特異値を対角成分に有する行列Σは既知であるため、左直交行列を算出することができる。より具体的には、特異値σjが0でない場合には、
となる。一方、特異値σjが0である場合には、
を解くことにより、yjを算出することができる。ここで、xjの場合と同様に、
とyjを置き換えることにより、このyjを正規化する。このようにして、左特異ベクトルyjを求めることができる。この左特異ベクトルyjを用いて、UB=(y1,y2,...,ym)とすることにより、左直交行列UBを算出することができる。このようにして、2重対角行列Bの特異値分解がなされる。なお、この処理の後に、逆反復法や、グラムシュミット法の処理を行ってもよいことは前述の通りである。また、ここでは右直交行列VBを先に算出する場合について説明したが、BBTの固有ベクトル、すなわち左直交行列UBを先に算出してもよい。
特異ベクトル算出部19は、上述のようにして、特異値記憶部18が記憶している上2重対角行列Bの特異値と、対角行列記憶部13が記憶している上2重対角行列Bとを用いて、上2重対角行列Bの特異ベクトルを算出する。まず、コレスキー分解部21は、対角行列記憶部13から上2重対角行列Bを読み出し、特異値記憶部18から上2重対角行列Bの特異値を読み出す。そして、コレスキー分解部21は、図22のフローチャートで示されるように各変換を行い、コレスキー分解の処理を行う。ここでは、LV型ツイスト分解法を用いる場合について説明する。
コレスキー分解部21は、まず、上2重対角行列Bの各要素の値から、qk (0),ek (0)を求める。そして、コレスキー分解部21は、ミウラ変換を実行することにより、u1 (0),u2 (0)等を順次求めていく(ステップS801)。
次に、コレスキー分解部21は、ミウラ変換で得られたuk (0)を用いて、stdLVv変換を実行することにより、u1 (+1)等を順次求めていく(ステップS802)。また、コレスキー分解部21は、ミウラ変換で得られたuk (0)を用いて、rdLVv変換を実行することにより、u2m−1 (−1)等を順次求めていく(ステップS803)。
最後に、コレスキー分解部21は、stdLVv変換で得られたuk (+1)及びrdLVv変換で得られたuk (−1)を用いて、逆ミウラ変換を実行することにより、q1 (±1)、e1 (±1)等を順次求めていく(ステップS804)。qk (±1)及びek (±1)が求まると、すなわち、上2重対角行列B(+1)と、下2重対角行列B(−1)が求まると、コレスキー分解部21は、それらを第1特異ベクトル算出部22に渡す。なお、コレスキー分解部21は、各特異値について、それぞれコレスキー分解を行うものとする。
なお、ここでは、説明の便宜上、図22のフローチャートを用いてコレスキー分解の処理を説明したが、図15〜図20のフローチャートで示されるように処理を行ってもよいことは言うまでもない。
第1特異ベクトル算出部22は、特異値記憶部18から特異値を読み出し、式10を用いてkの値を決定する。第1特異ベクトル参集部22は、そのkの値を用いて、qk (±1)及びek (±1)からツイスト行列Nkを求め、Nk Txj=ekを解くことによって、xjを算出する(ステップS302)。
次に、第1特異ベクトル算出部22は、算出したxjを正規化して、右特異ベクトルxjを求めて特異ベクトル記憶部20に蓄積する(ステップS303)。そして、第1特異ベクトル算出部22は、算出した右特異ベクトルxjを第2特異ベクトル算出部23に渡す。なお、第1特異ベクトル算出部22は、各特異値について、xjを算出する処理と、正規化する処理とを行うことによって、全ての右特異ベクトルを算出することができる。
第2特異ベクトル算出部23は、上2重対角行列Bを対角行列記憶部13から読み出し、その上2重対角行列Bの特異値を特異値記憶部18から読み出す。そして、第2特異ベクトル算出部23は、第1特異ベクトル算出部22から受け取った右特異ベクトルxjと、上2重対角行列Bと、特異値とを用いて、yj=Bxj/σj、あるいは、BTyj=0を解くことによって、yjを算出する(ステップS304)。次に、第2特異ベクトル算出部23は、右特異ベクトルxjの場合と同様に、算出したyjを正規化して、左特異ベクトルyjを求めて特異ベクトル記憶部20に蓄積する(ステップS305)。このようにして、特異ベクトルの算出が終了する。なお、第2特異ベクトル算出部23は、各特異値について、yjを算出する処理と、正規化する処理とを行うことによって、全ての左特異ベクトルを算出することができる。
この後、行列記憶部11が記憶している行列Aの特異ベクトルを算出してもよい。その算出の方法は、前述の通りである。
この後、行列記憶部11が記憶している行列Aの特異ベクトルを算出してもよい。その算出の方法は、前述の通りである。
また、特異値算出部17が算出した特異値、特異ベクトル算出部19が算出した特異ベクトルを出力する図示しない出力部を特異値分解装置1が備えてもよい。ここで、図示しない出力部による出力は、例えば、特異値等の表示デバイス(例えば、CRTや液晶ディスプレイなど)への表示でもよく、特異値等の所定の機器への通信回線を介した送信でもよく、特異値等のプリンタによる印刷でもよく、特異値等の記録媒体への蓄積でもよい。なお、その出力部は、出力を行うデバイス(例えば、表示デバイスやプリンタなど)を含んでもよく、あるいは含まなくてもよい。また、その出力部は、ハードウェアによって実現されてもよく、あるいは、それらのデバイスを駆動するドライバ等のソフトウェアによって実現されてもよい。
なお、ここでは、コレスキー分解部21がLV型ツイスト分解法によってコレスキー分解を行う場合について説明したが、コレスキー分解部21は、qd型ツイスト分解法によってコレスキー分解を行ってもよい。例えば、コレスキー分解部21は、算出された特異値の分布を見て、分布が密でない場合には、qd型ツイスト分解法を用いるようにしてもよい。
また、上記説明では、行列Bが上2重対角行列である場合について説明したが、行列Bは下2重対角行列であっても、その行列Bを上2重対角行列に変換することによって特異値分解を同様に実行することができうる。例えば、行列Cが下2重対角行列であるとすると、上2重対角行列B=CTとすることができる。その上2重対角行列Bを、
B=UΣVT
と特異値分解できたとすると、
C=BT=(UΣVT)T=VΣUT
となる。したがって、下2重対角行列の特異値分解において、特異値は上2重対角行列Bの特異値と同じであり、特異ベクトルは、左右が逆になることがわかる。
B=UΣVT
と特異値分解できたとすると、
C=BT=(UΣVT)T=VΣUT
となる。したがって、下2重対角行列の特異値分解において、特異値は上2重対角行列Bの特異値と同じであり、特異ベクトルは、左右が逆になることがわかる。
一方、下2重対角行列Cについても、行列分割部14等が下2重対角行列Cの分割を行い、その分割された下2重対角行列について特異値分解部15が特異値分解を行い、その特異値分解の結果を用いて特異値算出部17が下2重対角行列Cの特異値を算出するようにしてもよい。また、特異ベクトル算出部19において、下2重対角行列Cと、その特異値とを用いてコレスキー分解を行い、その特異値に対応する各特異ベクトルを算出するようにしてもよい。
また、上記説明では、特異値算出部17が全ての特異値を算出する場合について説明したが、一部の特異値のみを算出するようにしてもよい。例えば、図13において、特異値算出部17は、行列B1,B2までは、全ての特異値を算出する必要があるが、行列B1,B2から上2重対角行列Bの特異値を算出する際に、必要な範囲で特異値を算出してもよい。したがって、特異値算出部17は、2重対角行列Bの少なくとも1個の特異値を算出するものであってもよい。その場合には、不必要な特異値を算出することに伴う余分な処理を実行しなくてよいため、処理負荷を軽減することができうる。このように、一部の特異値のみを算出する場合には、例えば、上2重対角行列Bの特異値を算出する処理に費やす計算時間を約(1+k/m)/2倍にすることができうる。ここで、mは行列サイズであり、kは求める特異値の個数である。
また、上記説明では、特異ベクトル算出部19が算出された特異値に対応する全ての特異ベクトルを算出する場合について説明したが、上記説明から明らかなように、特異ベクトルを算出する処理は、特異値ごとに行うことができる。したがって、特異ベクトル算出部19は、2重対角行列Bの少なくとも1個の特異ベクトルを算出するものであってもよい。このように、特異ベクトル算出部19は、必要な範囲で特異ベクトルを算出することができ、不必要な特異ベクトルを算出することに伴う余分な処理を実行しなくてよいため、処理負荷を軽減することができうる。
次に、本実施の形態による特異値分解装置1における並列処理について説明する。
本実施の形態による特異値分解装置1では、特異値の計算及び特異ベクトルの計算において、並列的に処理を実行することができる。例えば、図23で示されるように、特異値分解装置1において、特異値分解部15、特異値算出部17、コレスキー分解部21、第1特異ベクトル算出部22、第2特異ベクトル算出部23において、それぞれ並列処理を行ってもよい。
本実施の形態による特異値分解装置1では、特異値の計算及び特異ベクトルの計算において、並列的に処理を実行することができる。例えば、図23で示されるように、特異値分解装置1において、特異値分解部15、特異値算出部17、コレスキー分解部21、第1特異ベクトル算出部22、第2特異ベクトル算出部23において、それぞれ並列処理を行ってもよい。
特異値分解部15は、複数の特異値分解手段15a、15bを備え、その複数の特異値分解手段15a、15bが、分割後の2重対角行列の特異値と、行列要素とを算出する処理を並列実行してもよい。例えば、図13において、特異値分解手段15aが行列B111,B112,B121,B121の特異値分解を実行し、特異値分解手段15bが行列B211,B212,B221,B222の特異値分解を実行してもよい。
特異値算出部17は、複数の特異値算出手段17a、17bを備え、その複数の特異値算出手段17a、17bが、分割元の2重対角行列の特異値と、行列要素とを算出する処理を並列実行してもよい。例えば、図13において、特異値算出手段17aが行列B11,B12,B1,Bの特異値等を算出する処理を実行し、特異値算出手段17bが行列B21,B22,B2の特異値等を算出する処理を実行してもよい。
コレスキー分解部21は、複数のコレスキー分解手段21a、21bを備え、その複数のコレスキー分解手段21a、21bが、2重対角行列Bをコレスキー分解する処理を並列実行してもよい。例えば、コレスキー分解手段21aが半分の特異値についてコレスキー分解する処理を実行し、コレスキー分解手段21bが残りの半分の特異値についてコレスキー分解する処理を実行してもよい。
第1特異ベクトル算出部22は、複数の第1特異ベクトル算出手段22a、22bを備え、その複数の第1特異ベクトル算出手段22a、22bが、特異ベクトルを算出する処理を並列実行してもよい。例えば、第1特異ベクトル算出手段22aがコレスキー分解手段21aによってコレスキー分解された特異値に関して特異ベクトルを算出する処理を実行し、第1特異ベクトル算出手段22bがコレスキー分解手段21bによってコレスキー分解された特異値に関して特異ベクトルを算出する処理を実行してもよい。
第2特異ベクトル算出部23は、複数の第2特異ベクトル算出手段23a、23bを備え、その複数の第2特異ベクトル算出手段23a、23bが、特異ベクトルを算出する処理を並列実行してもよい。例えば、第2特異ベクトル算出手段23aが第1特異ベクトル算出手段22aによって算出された特異ベクトルに対応する特異ベクトルを算出する処理を実行し、第2特異ベクトル算出手段23bが第1特異ベクトル算出手段22bによって算出された特異ベクトルに対応する特異ベクトルを算出する処理を実行してもよい。
なお、特異値算出部17の複数の特異値算出手段17a、17bは、図10で示される分割された2個の行列B1,B2の特異値と行列要素とから、分割元の行列B0の特異値と行列要素とを算出する処理を、並列実行してもよい。以下、その処理について説明する。
この式11から、式5を計算するのに、一部の特異値に対応する式11の部分を計算しておき、他の特異値に対応する式11の部分を後から掛け合わせることによって、最終的に
を算出できることがわかる。したがって、特異値算出手段17a、17bのそれぞれは、まず、2個の行列B1,B2の特異値と行列要素とを特異値分解記憶部16から読み出し、2個の行列B1,B2の分割時に発生した2個の要素を対角行列記憶部13から読み出す。その読み出された行列要素と、2個の要素とを用いて、ziの値を知ることができる。その後、各特異値算出手段17a、17bは、式2を用いて、それぞれが担当する特異値を算出する。この処理は、並列実行することができる。
次に、特異値算出手段17aは、算出した特異値を用いて計算することができる式11の部分について計算する。また同様に、特異値算出手段17bも、算出した特異値を用いて計算することができる式11の部分について計算する。そして、特異値算出手段17a、17bは、その計算した値を交換し、あらかじめ計算していた値と掛け合わせることによって、最終的に式11の値を計算することができる。このように、特異値算出手段17a、17bは、式11を計算する処理も並列実行することができる。
次に、特異値算出手段17a、17bは、式4を用いて、それぞれが算出した特異値に対応する特異ベクトルを計算する。このように、特異値算出手段17a、17bは、右直交行列VMを計算する処理も並列実行することができる。
その後、特異値算出手段17a、あるいは特異値算出手段17bが、式6から式9を用いて行列B0の行列要素を計算することによって、分割元の行列B0の特異値と行列要素とを算出する処理が終了する。このように、分割された2個の行列B1,B2の特異値と行列要素とから、分割元の行列B0の特異値と行列要素とを算出する処理を、特異値算出手段17a、17bによって並列実行することができる。
上記のような各構成要素における並列処理において、各手段が特異値等の情報を格納するメモリを用いる場合に、複数の手段が同一のメモリ、すなわち共有メモリを使用してもよく、あるいは、各手段がそれぞれ別のメモリを使用してもよい。
なお、図23を用いて、特異値分解部15や特異値算出部17等が2個の手段によって並列処理を実行する場合について説明したが、特異値分解部15や特異値算出部17等が3以上の手段を備え、並列処理を実行してもよい。また、特異値分解部15、特異値算出部17、コレスキー分解部21、第1特異ベクトル算出部22、第2特異ベクトル算出部23のそれぞれにおいて並列処理が実行される場合について説明したが、いずれかの任意の1以上の部において、並列処理が実行されなくてもよい。例えば、特異値分解部15において並列処理が行われなくてもよい。
また、その並列処理は、1の装置において、2以上のCPU等を用いて実行されてもよく、2以上の装置において実行されてもよい。例えば、図24で示されるように、装置Aと、装置Bとがそれぞれ特異値分解手段15a、15bを備え、各装置において、特異値分解の処理が並列実行されてもよい。この場合には、装置Aの特異値分解手段15aを備える特異値分解部15−1と、装置Bの特異値分解手段15bを備える特異値分解部15−2とによって特異値分解部15が構成されることになる。したがって、特異値分解装置1は、装置Aと、装置Bとからなるシステムを構成することになる。ここでは、特異値分解部15の並列処理について説明したが、その他の特異値算出部17やコレスキー分解部21等についても、2以上の装置による並列処理を行ってもよい。
[2次元画像から3次元へ復元する画像処理への応用]
次に、物体の2次元画像から3次元へ復元する画像処理に特異値分解を応用する場合について説明する。
次に、物体の2次元画像から3次元へ復元する画像処理に特異値分解を応用する場合について説明する。
複数の2次元画像から3次元復元を行う処理は、以下の各ステップによって行われる。
(1)2次元画像から特徴点を抽出するステップ。
(2)特徴点データより形状(元の物体の特徴点の3次元座標データ)及び回転(3次元データから特徴点データへの変換)に関するデータを計算するステップ。
(3)形状及び回転のデータより可視化を行うステップ。
(1)2次元画像から特徴点を抽出するステップ。
(2)特徴点データより形状(元の物体の特徴点の3次元座標データ)及び回転(3次元データから特徴点データへの変換)に関するデータを計算するステップ。
(3)形状及び回転のデータより可視化を行うステップ。
以下、上記(1)、(2)の各ステップについて、図25のフローチャートを用いて説明する。ここで、2次元画像は、例えば、スキャナやデジタルスチルカメラ、デジタルビデオカメラ等の光学的読み取り機器によって読み取られた2次元画像であってもよい。
ステップS5001において、2次元画像j(j=1,・・・,m、mは3以上の整数)から特徴点i(i=1,・・・,n、nは2以上の整数)の座標(xi j,yi j)を抽出する。取り扱う2次元画像は、弱中心射影画像であることが好ましい。このとき、次の式が成り立つ。
ここで、sjは物体のスケールに相対するj番目の画像のスケール、r1,j,r2,jはそれぞれ物体座標系に相対するj番目のカメラ座標系の回転行列の1番目と2番目の行ベクトル、(Xi,Yi,Zi)Tはi番目の点の3次元座標である。物体のスケールは1番目の画像のスケールと同じにし(s1=1)、物体の座標系の姿勢は1番目の画像のカメラ座標系と同じにする(r1,1=(1,0,0)T,r2,1=(0,1,0)T)。m枚全ての画像におけるn個全ての点の座標を行列Dの要素として並べると、次式のようになる。
MとSの形から分かるように、Dのランクは3である。ここで、ステップ5001において、行列Dが与えられている。以下、回転に関するデータM及び形状Sを求める。
そこで、行列Dの特異値分解
D=UΣVT
を考える。ここで、Σは特異値を大小順に対角線上に並べたもので、U及びVはそれぞれ左直交行列、及び右直交行列である。この特異値分解として、前述の方法を用いることができる。すなわち、特異値分解装置1において、行列記憶部11が記憶している行列Aを、このたびの行列Dとすることにより、前述の説明のようにして、行列Aの特異値分解がなされることになる。なお、特異値分解装置1において、特異ベクトル記憶部20に蓄積されるのは、行列Dを変換した上2重対角行列Bの特異ベクトルであるので、その特異ベクトルを、前述の説明のようにして、行列Dの特異ベクトルに変換する必要がある。
D=UΣVT
を考える。ここで、Σは特異値を大小順に対角線上に並べたもので、U及びVはそれぞれ左直交行列、及び右直交行列である。この特異値分解として、前述の方法を用いることができる。すなわち、特異値分解装置1において、行列記憶部11が記憶している行列Aを、このたびの行列Dとすることにより、前述の説明のようにして、行列Aの特異値分解がなされることになる。なお、特異値分解装置1において、特異ベクトル記憶部20に蓄積されるのは、行列Dを変換した上2重対角行列Bの特異ベクトルであるので、その特異ベクトルを、前述の説明のようにして、行列Dの特異ベクトルに変換する必要がある。
ここで、画像のデジタル誤差のため、ゼロでない特異値は3つ以上出てくる。しかし、4番目以降の特異値はノイズによるもので、最初の3つの特異値と比べて格段に小さい。そこで、ステップS5002では、最初の3つの特異値に対して特異ベクトルを計算する。採用する3個のベクトルをまとめると、次式となる。
D'=L'Σ'R'T=M'S'
ただし、M'=L'(Σ')1/2、S'=(Σ')1/2R'T、D'は‖D−D'‖を最小にするランク3の行列である。
D'=L'Σ'R'T=M'S'
ただし、M'=L'(Σ')1/2、S'=(Σ')1/2R'T、D'は‖D−D'‖を最小にするランク3の行列である。
次に、D'からM及びSを求めたいが、その組合せは唯一ではない。なぜなら、任意の正則行列Cが
D'=(M'C)(C−1S')
を満たすからである。そこで、上式におけるCをM=M'Cを満たすように決める。Cは下記の式を満たす。
D'=(M'C)(C−1S')
を満たすからである。そこで、上式におけるCをM=M'Cを満たすように決める。Cは下記の式を満たす。
E=CCTとすると、上式からEの6つの要素に関する2m+1個の線形方程式が得られる。m≧3であるので、Eの要素を一意に決めることができる。ステップS5003において、行列Eを求める。
次に、ステップS5004において、EからCを求める。Cの自由度(9)はEの自由度(6)より多い。そこで、条件r1j=(1,0,0)T,r2j=(0,1,0)Tを加えれば、Cを決めることができる。このとき2つの解(Necker Reversal)が出る。
次に、ステップS5005において、M=M'C及びS=C−1S'より、回転に関するデータM及び形状Sが決まる。
次に、ステップS5005において、M=M'C及びS=C−1S'より、回転に関するデータM及び形状Sが決まる。
[文書検索への応用]
次に、文書検索処理に特異値分解を応用する場合について説明する。文書中からその文書の内容に関連する索引語を抽出し、索引語の重みを計算する処理の後、ベクトル空間モデルでは、この索引語の重みを要素とするベクトルで文書を表現する。ここで、検索対象となる文書をd1,d2,・・・,dnとし、これら文書集合全体を通して全部でm個の索引語w1,w2,・・・,wmがあるとする。このとき、文書djは、次のようなベクトルで表現されることになる。これを文書ベクトルと呼ぶ。
次に、文書検索処理に特異値分解を応用する場合について説明する。文書中からその文書の内容に関連する索引語を抽出し、索引語の重みを計算する処理の後、ベクトル空間モデルでは、この索引語の重みを要素とするベクトルで文書を表現する。ここで、検索対象となる文書をd1,d2,・・・,dnとし、これら文書集合全体を通して全部でm個の索引語w1,w2,・・・,wmがあるとする。このとき、文書djは、次のようなベクトルで表現されることになる。これを文書ベクトルと呼ぶ。
行列Dを索引語文書行列と呼ぶ。索引語文書行列の各列は文書に関する情報を表している文書ベクトルであるが、同様に、索引語文書行列の各行は索引語に関する情報を表しているベクトルであり、これを索引語ベクトルと呼ぶ。検索質問も、文書と同様に、索引語の重みを要素とするベクトルで表現することができる。検索質問文に含まれる索引語wiの重みをqiとすると、検索質問ベクトルqは次のように表されることになる。
実際の文書検索においては、与えられた検索質問文と類似した文書を見つけ出す必要があるが、検索質問ベクトルqと各文書ベクトルdjの間の類似度を計算することにより行う。ベクトル間の類似度の定義としてはさまざまなものが考えられるが、文書検索においてよく用いられているものはコサイン尺度(2つのベクトルのなす角度)または内積である。
なお、ベクトルの長さが1に正規化(コサイン正規化)されている場合には、コサイン尺度と内積とは一致する。
図26は、本実施の形態による特異値分解装置1を利用した文書検索方法の一例を示すフローチャートである。
ステップ6001において、質問ベクトルqを受け取る。
ステップ6001において、質問ベクトルqを受け取る。
ここでは、Dの近似行列Dkを使った検索を考える。ベクトル空間モデルでは、検索質問ベクトルqと索引語文書行列D中の各文書ベクトルdjの間の類似度を計算することにより検索を行うが、ここではDの代わりにDkを使う。ベクトル空間モデルでは、文書ベクトルの次元数は索引語の総数と等しい。したがって、検索対象となる文書の数が増えるに従い、文書ベクトルの次元数も増加する傾向にある。しかし、次元数が増加してくると、コンピュータのメモリによる制限や検索時間の増大などの問題が生じてくるばかりでなく、文書中に含まれる不必要な索引語がノイズ的な影響を及ぼし、検索精度を低下させてしまうという現象も起こってくる。潜在的意味インデキシング(latent semantic indexing;LSI)は、高次元の空間にある文書ベクトルを低次元の空間へと射影することにより、検索精度の改善を図る技術である。高次元の空間では別々に扱われていた索引語が、低次元の空間では相互に関連を持ったものとして扱われる可能性もあるため、索引語の持つ意味や概念に基づく検索を行うことができる。たとえば、通常のベクトル空間モデルでは"car"という索引語と"automobile"という索引語はまったく別物であり、一方の索引語による質問ではもう片方の索引語を含んだ文書を検索することができない。しかし、低次元の空間ではこれらの意味的に関連した索引語は1つの次元に縮退することが期待できるため、"car"という検索質問によって"car"を含む文書ばかりでなく"automobile"を含む文書をも検索することが可能となる。潜在的意味インデキシングでは、特異債分解により高次元ベクトルの次元削減を行うが、これは基本的に多変量解析における主成分分析と等価である。
ステップS6002において、kを選択する。ここでは、k<rなるkの値を選択する。r=min(n,m)である。kの値は、予め与えられていてもよいし、計算ごとに選択可能であってもよい。
次に、ステップS6003では、行列Dの特異値分解を行う。この特異値分解として、前述の方法を用いることができる。すなわち、特異値分解装置1において、行列記憶部11が記憶している行列Aを、このたびの行列Dとすることにより、前述の説明のようにして、行列Aの特異値分解がなされることになる。なお、特異値分解装置1において、特異ベクトル記憶部20に蓄積されるのは、行列Dを変換した上2重対角行列Bの特異ベクトルであるので、その特異ベクトルを、前述の説明のようにして、行列Dの特異ベクトルに変換する必要がある。また、この特異値分解では、計算された特異値のうち、大きい順に1番目からk番目までのk個の特異値に対してDの特異ベクトルを算出する。kは、ステップS6002で選択された値である。
すなわち、
Dk=UkΣVk T
なるUk及びVkを計算する。ここで、Ukは、最初のk個の左特異ベクトルのみから構成されるm×k行列であり、Vkは、最初のk個の右特異ベクトルのみから構成されるn×k行列であり、Σは、最初のk個の特異値のみから構成されるk×k対角行列である。
Dk=UkΣVk T
なるUk及びVkを計算する。ここで、Ukは、最初のk個の左特異ベクトルのみから構成されるm×k行列であり、Vkは、最初のk個の右特異ベクトルのみから構成されるn×k行列であり、Σは、最初のk個の特異値のみから構成されるk×k対角行列である。
次に、ステップ6004において、行列Dkと質問ベクトルqとの類似度を計算する。いま、ベクトルejをn次元の単位ベクトルとすると、Dkのj番目の文書ベクトルはDkejで表すことができる。文書ベクトルDkejと検索質問ベクトルqとの間の類似度計算は、
としてもよいが、別の定義を用いてもよい。上式では、DkをUk,Σk,Vkから再構成する必要はなく特異値分解の結果から、直接、類似度を計算できることを示している。上式の中に現われるΣkVk Tejは、
ΣkVk Tej=Uk TDkej
と書き直すことができる。この式の右辺は、近似行列Dkにおけるj番目の文書ベクトルの基底Ukのもとでの座標(文書のk次元表現)を表している。同様に、上式の中のUk Tqは、検索質問ベクトルqの基底Ukのもとでの座標(検索質問のk次元表現)である。
ΣkVk Tej=Uk TDkej
と書き直すことができる。この式の右辺は、近似行列Dkにおけるj番目の文書ベクトルの基底Ukのもとでの座標(文書のk次元表現)を表している。同様に、上式の中のUk Tqは、検索質問ベクトルqの基底Ukのもとでの座標(検索質問のk次元表現)である。
ステップS6005において、ステップS6004において計算された類似度を基準に、検索結果を出力する。
最後に、数値実験による性能の評価について説明する。ここでは、本実施の形態による特異値分解装置1の方法と、標準的な分割統治法と、シフト付きQR法とを比較した。分割統治法としては、LAPACKで提供されているDBDSDCを用いた。QR法としては、LAPACKで提供されているDBDSQRを用いた。実験で用いるLAPACKはATLAS(Automatically Tuned Linear Algebra Software)で最適化したBLAS(Basic Linear Algebra Subprograms)を呼び出す。また、本実施の形態による特異値分解装置1の特異値分解部15では、QR法を用いて特異値分解を行った。計算機は、キャッシュメモリL1D:64KB,L1I:64KB,L2:1024KBを搭載したOpteron 1.8GHzを用いた。
最後に、数値実験による性能の評価について説明する。ここでは、本実施の形態による特異値分解装置1の方法と、標準的な分割統治法と、シフト付きQR法とを比較した。分割統治法としては、LAPACKで提供されているDBDSDCを用いた。QR法としては、LAPACKで提供されているDBDSQRを用いた。実験で用いるLAPACKはATLAS(Automatically Tuned Linear Algebra Software)で最適化したBLAS(Basic Linear Algebra Subprograms)を呼び出す。また、本実施の形態による特異値分解装置1の特異値分解部15では、QR法を用いて特異値分解を行った。計算機は、キャッシュメモリL1D:64KB,L1I:64KB,L2:1024KBを搭載したOpteron 1.8GHzを用いた。
図27は、計算時間を示す図である。特異値分解装置1による特異値分解が、他の特異値分解方法よりも非常に高速であることがわかる。特に、分割統治法(D&C)と比較すると、ベクトル更新を省略した効果がわかる。
図28は、異なる行列サイズの計算時間の変化を示す図である。特異値分解装置1による特異値分解は、ほぼO(n2)という計算量を持つことがわかる。
なお、図27及び図28で示される計算時間の測定では、対角成分が2.001,非対角成分が2.0であり、近接特異値を持たない行列について計算を行った。
なお、図27及び図28で示される計算時間の測定では、対角成分が2.001,非対角成分が2.0であり、近接特異値を持たない行列について計算を行った。
図29は、計算制度を示す図である。特異値分解装置1による特異値の算出は、分割統治法と同程度の高い精度を有することがわかる。図29では、100個のランダム行列を解き、精度を評価した。行列サイズは、1000である。
以上のように、本実施の形態による特異値分解装置1では、分割統治法を用いて特異値のみを算出するため、標準的な分割統治法で実行されるベクトル更新が必要なくなり、標準的な分割統治法よりも非常に高速である。また、特異値から特異ベクトルを算出する処理も、高速に処理することができる。さらに、QR法では特異値を算出する段階の並列化が困難であるが、本実施の形態による特異値分解装置1では、特異値を算出する段階、及び特異値から特異ベクトルを算出する段階のそれぞれにおいて、本質的に高い並列性を持つ。また、本実施の形態による特異値分解装置1の精度は、分割統治法やQR法とほぼ同等の精度が得られることがわかる。
なお、本実施の形態による特異値分解装置1は、スタンドアロンの装置であってもよく、サーバクライアントシステムにおけるサーバ装置であってもよく、前述のように、複数の装置から構成されるシステムであってもよい。特異値分解装置1がサーバクライアントシステムにおけるサーバ装置である場合には、行列記憶部11で記憶される行列Aや、特異値記憶部18で記憶される特異値や特異ベクトル記憶部20で記憶される特異ベクトル等は、インターネットやイントラネット等の通信回線を介して送受信されてもよい。
また、特異値分解装置1における一部の処理を、特異値分解装置1以外において行ってもよい。例えば、行列分解部14による2重対角行列Bを分割する処理、あるいは、特異値分解部15による特異値分解の処理を、特異値分解装置1において実行しなくてもよい。その場合には、例えば、2重対角行列Bが分割された結果である、あらかじめ決められた大きさ以下の各2重対角行列が、入力デバイスや通信回線、記録媒体等を介して受け付けられ、対角行列記憶部13で記憶されていてもよい。また、例えば、そのあらかじめ決められた大きさ以下の各2重対角行列に対して特異値分解が行われた結果である、各2重対角行列の特異値と、各2重対角行列の特異ベクトルからなる左右直交行列の一部の要素である行列要素とが、入力デバイスや通信回線、記録媒体等を介して受け付けられ、特異値分解記憶部15で記憶されていてもよい。
また、上記実施の形態において、各処理または各機能は、単一の装置または単一のシステムによって集中処理されることによって実現されてもよく、あるいは、複数の装置または複数のシステムによって分散処理されることによって実現されてもよい。
また、上記実施の形態において、各構成要素は専用のハードウェアにより構成されてもよく、あるいは、ソフトウェアにより実現可能な構成要素については、プログラムを実行することによって実現されてもよい。例えば、ハードディスクや半導体メモリ等の記録媒体に記録されたソフトウェア・プログラムをCPU等のプログラム実行部が読み出して実行することによって、各構成要素が実現され得る。なお、上記実施の形態における特異値分解装置を実現するソフトウェアは、以下のようなプログラムである。つまり、このプログラムは、コンピュータに、2重対角行列Bが2個の2重対角行列に分割され、その2重対角行列が2個の2重対角行列に分割される処理が、分割後の各2重対角行列があらかじめ決められた大きさ以下となるまで繰り返され、当該あらかじめ決められた大きさ以下の各2重対角行列に対して特異値分解が行われた結果である、前記各2重対角行列の特異値と、前記各2重対角行列の特異ベクトルからなる左右直交行列の一部の要素である行列要素とが記憶される特異値分解記憶部から、各2重対角行列の特異値と、行列要素とを読み出し、前記特異値と、前記行列要素とから、分割元の2重対角行列の特異値と、分割元の2重対角行列の行列要素とを算出して前記特異値分解記憶部に蓄積し、その分割元の2重対角行列の特異値と、行列要素とを算出する処理を、2重対角行列Bの少なくとも1個の特異値を算出するまで繰り返し、前記2重対角行列Bの少なくとも1個の特異値を特異値記憶部に蓄積する特異値算出ステップと、前記2重対角行列Bが記憶される対角行列記憶部から2重対角行列Bを読み出し、前記特異値記憶部から前記2重対角行列Bの特異値を読み出し、2重対角行列Bとその特異値とから、ツイスト分解法を用いて2重対角行列Bの少なくとも1個の特異ベクトルを算出して特異ベクトル記憶部に蓄積する特異ベクトル算出ステップと、を実現させるためのものである。
また、このプログラムでは、コンピュータに、前記あらかじめ決められた大きさ以下の各2重対角行列も記憶される前記対角行列記憶部から、前記あらかじめ決められた大きさ以下の各2重対角行列を読み出し、前記各2重対角行列に対して特異値分解を行い、前記各2重対角行列の特異値と、前記各2重対角行列の特異ベクトルとを算出し、当該特異値と、当該特異ベクトルからなる左右直交行列の一部の要素である行列要素とを前記特異値分解記憶部に蓄積する特異値分解ステップをさらに実行させてもよい。
また、上記実施の形態における特異値分解装置を実現するソフトウェアは、以下のようなプログラムである。つまり、このプログラムは、コンピュータに、2重対角行列Bが記憶される対角行列記憶部から前記2重対角行列Bを読み出し、当該2重対角行列Bを2個の2重対角行列に分割して前記対角行列記憶部に蓄積し、その2重対角行列を2個の2重対角行列に分割して前記対角行列記憶部に蓄積する処理を、分割後の各2重対角行列があらかじめ決められた大きさ以下となるまで繰り返す行列分割ステップと、前記あらかじめ決められた大きさ以下の各2重対角行列を前記対角行列記憶部から読み出し、前記各2重対角行列に対して特異値分解を行い、前記各2重対角行列の特異値と、前記各2重対角行列の特異ベクトルとを算出し、特異値分解された特異値と、特異ベクトルからなる左右直交行列の一部の要素である行列要素とを特異値分解記憶部に蓄積する特異値分解ステップと、各2重対角行列の特異値と、行列要素とを前記特異値分解記憶部から読み出し、前記特異値と、前記行列要素とから、分割元の2重対角行列の特異値と、分割元の2重対角行列の行列要素とを算出して前記特異値分解記憶部に蓄積し、その分割元の2重対角行列の特異値と、行列要素とを算出する処理を、2重対角行列Bの少なくとも1個の特異値を算出するまで繰り返し、前記2重対角行列Bの少なくとも1個の特異値を特異値記憶部に蓄積する特異値算出ステップと、前記対角行列記憶部から2重対角行列Bを読み出し、前記特異値記憶部から前記2重対角行列Bの特異値を読み出し、2重対角行列Bとその特異値とから、ツイスト分解法を用いて2重対角行列Bの少なくとも1個の特異ベクトルを算出して特異ベクトル記憶部に蓄積する特異ベクトル算出ステップと、を実行させるためのものである。
また、このプログラムでは、前記特異ベクトル算出ステップは、前記対角行列記憶部から2重対角行列Bを読み出し、前記特異値記憶部から前記2重対角行列Bの特異値を読み出し、前記2重対角行列Bの各要素に関してミウラ変換、dLVv型変換、逆ミウラ変換を行うことによって、前記2重対角行列Bを上2重対角行列B(+1)及び下2重対角行列B(−1)にコレスキー分解するコレスキー分解ステップと、前記上2重対角行列B(+1)及び下2重対角行列B(−1)の各要素と、前記2重対角行列Bの特異値とを用いて一方の左右直交行列を構成する特異ベクトルを算出して前記特異ベクトル記憶部に蓄積する第1特異ベクトル算出ステップと、前記第1特異ベクトル算出ステップで算出した一方の左右直交行列を構成する特異ベクトルと、前記2重対角行列Bの特異値と、前記2重対角行列Bとを用いて他方の左右直交行列を構成する特異ベクトルを算出して前記特異ベクトル記憶部に蓄積する第2特異ベクトル算出ステップと、をさらに備えてもよい。
なお、上記プログラムにおいて、情報を蓄積する処理などでは、ハードウェアでしか行われない処理は少なくとも含まれない。
なお、上記プログラムにおいて、情報を蓄積する処理などでは、ハードウェアでしか行われない処理は少なくとも含まれない。
また、このプログラムは、サーバなどからダウンロードされることによって実行されてもよく、所定の記録媒体(例えば、CD−ROMなどの光ディスクや磁気ディスク、半導体メモリなど)に記録されたプログラムが読み出されることによって実行されてもよい。
また、このプログラムを実行するコンピュータは、単数であってもよく、複数であってもよい。すなわち、集中処理を行ってもよく、あるいは分散処理を行ってもよい。
図30は、上記プログラムを実行して、上記実施の形態による特異値分解装置1を実現するコンピュータの外観の一例を示す模式図である。上記実施の形態は、コンピュータハードウェア及びその上で実行されるコンピュータプログラムによって実現されうる。
図30において、コンピュータシステム100は、CD−ROM(Compact Disk Read Only Memory)ドライブ105、FD(Flexible Disk)ドライブ106を含むコンピュータ101と、キーボード102と、マウス103と、モニタ104とを備える。
図31は、コンピュータシステムを示す図である。図31において、コンピュータ101は、CD−ROMドライブ105、FDドライブ106に加えて、CPU(Central Processing Unit)111と、ブートアッププログラム等のプログラムを記憶するためのROM(Read Only Memory)112と、CPU111に接続され、アプリケーションプログラムの命令を一時的に記憶すると共に、一時記憶空間を提供するRAM(Random Access Memory)113と、アプリケーションプログラム、システムプログラム、及びデータを記憶するハードディスク114と、CPU111、ROM112等を相互に接続するバス115とを備える。なお、コンピュータ101は、LANへの接続を提供する図示しないネットワークカードを含んでもよい。
コンピュータシステム100に、上記実施の形態による特異値分解装置1の機能を実行させるプログラムは、CD−ROM121、またはFD122に記憶されて、CD−ROMドライブ105、またはFDドライブ106に挿入され、ハードディスク114に転送されてもよい。これに代えて、そのプログラムは、図示しないネットワークを介してコンピュータ101に送信され、ハードディスク114に記憶されてもよい。プログラムは実行の際にRAM113にロードされる。なお、プログラムは、CD−ROM121やFD122、またはネットワークから直接、ロードされてもよい。
また、行列記憶部11、対角行列記憶部13、特異値分解記憶部16、特異値記憶部18,特異ベクトル記憶部20は、RAM113やハードディスク114によって実現されてもよい。
プログラムは、コンピュータ101に、上記実施の形態による特異値分解装置1の機能を実行させるオペレーティングシステム(OS)、またはサードパーティプログラム等を必ずしも含まなくてもよい。プログラムは、制御された態様で適切な機能(モジュール)を呼び出し、所望の結果が得られるようにする命令の部分のみを含んでいてもよい。コンピュータシステム100がどのように動作するのかについては周知であり、詳細な説明を省略する。
また、本発明は、以上の実施の形態に限定されることなく、種々の変更が可能であり、それらも本発明の範囲内に包含されるものであることは言うまでもない。
また、本発明のほんのいくつかの典型的な実施例について上で詳細に説明したが、その典型的な実施例において、発明の利益と新規な技術から実質的にはずれることなく多くの変更が可能であることを当業者は容易に認識することができるであろう。したがって、そのようなすべての変更は、本発明の範囲に含まれるものである。
また、本発明のほんのいくつかの典型的な実施例について上で詳細に説明したが、その典型的な実施例において、発明の利益と新規な技術から実質的にはずれることなく多くの変更が可能であることを当業者は容易に認識することができるであろう。したがって、そのようなすべての変更は、本発明の範囲に含まれるものである。
以上のように、本発明による特異値分解装置等によれば、特異値分解を高速に処理することができ、画像処理や検索処理、その他の特異値分解を用いる処理を実行する装置等において有用である。
Claims (23)
- 2重対角行列Bが記憶される対角行列記憶部と、
前記2重対角行列Bが2個の2重対角行列に分割され、その2重対角行列が2個の2重対角行列に分割される処理が、分割後の各2重対角行列があらかじめ決められた大きさ以下となるまで繰り返され、当該あらかじめ決められた大きさ以下の各2重対角行列に対して特異値分解が行われた結果である、前記各2重対角行列の特異値と、前記各2重対角行列の特異ベクトルからなる左右直交行列の一部の要素である行列要素とが記憶される特異値分解記憶部と、
前記2重対角行列Bの特異値が記憶される特異値記憶部と、
各2重対角行列の特異値と、行列要素とを前記特異値分解記憶部から読み出し、前記特異値と、前記行列要素とから、分割元の2重対角行列の特異値と、分割元の2重対角行列の行列要素とを算出して前記特異値分解記憶部に蓄積し、その分割元の2重対角行列の特異値と、行列要素とを算出する処理を、2重対角行列Bの少なくとも1個の特異値を算出するまで繰り返し、前記2重対角行列Bの少なくとも1個の特異値を前記特異値記憶部に蓄積する特異値算出部と、
前記2重対角行列Bの特異ベクトルが記憶される特異ベクトル記憶部と、
前記対角行列記憶部から2重対角行列Bを読み出し、前記特異値記憶部から前記2重対角行列Bの特異値を読み出し、2重対角行列Bとその特異値とから、ツイスト分解法を用いて2重対角行列Bの少なくとも1個の特異ベクトルを算出して前記特異ベクトル記憶部に蓄積する特異ベクトル算出部と、を備えた特異値分解装置。 - 前記対角行列記憶部には、前記あらかじめ決められた大きさ以下の各2重対角行列も記憶され、
前記あらかじめ決められた大きさ以下の各2重対角行列を前記対角行列記憶部から読み出し、前記各2重対角行列に対して特異値分解を行い、前記各2重対角行列の特異値と、前記各2重対角行列の特異ベクトルとを算出し、当該特異値と、当該特異ベクトルからなる左右直交行列の一部の要素である行列要素とを前記特異値分解記憶部に蓄積する特異値分解部をさらに備えた請求項1記載の特異値分解装置。 - 2重対角行列Bが記憶される対角行列記憶部と、
前記対角行列記憶部から前記2重対角行列Bを読み出し、当該2重対角行列Bを2個の2重対角行列に分割して前記対角行列記憶部に蓄積し、その2重対角行列を2個の2重対角行列に分割して前記対角行列記憶部に蓄積する処理を、分割後の各2重対角行列があらかじめ決められた大きさ以下となるまで繰り返す行列分割部と、
前記あらかじめ決められた大きさ以下の各2重対角行列を前記対角行列記憶部から読み出し、前記各2重対角行列に対して特異値分解を行い、前記各2重対角行列の特異値と、前記各2重対角行列の特異ベクトルとを算出する特異値分解部と、
前記特異値分解部によって特異値分解された特異値と、特異ベクトルからなる左右直交行列の一部の要素である行列要素とが記憶される特異値分解記憶部と、
前記2重対角行列Bの特異値が記憶される特異値記憶部と、
各2重対角行列の特異値と、行列要素とを前記特異値分解記憶部から読み出し、前記特異値と、前記行列要素とから、分割元の2重対角行列の特異値と、分割元の2重対角行列の行列要素とを算出して前記特異値分解記憶部に蓄積し、その分割元の2重対角行列の特異値と、行列要素とを算出する処理を、2重対角行列Bの少なくとも1個の特異値を算出するまで繰り返し、前記2重対角行列Bの少なくとも1個の特異値を前記特異値記憶部に蓄積する特異値算出部と、
前記2重対角行列Bの特異ベクトルが記憶される特異ベクトル記憶部と、
前記対角行列記憶部から2重対角行列Bを読み出し、前記特異値記憶部から前記2重対角行列Bの特異値を読み出し、2重対角行列Bとその特異値とから、ツイスト分解法を用いて2重対角行列Bの少なくとも1個の特異ベクトルを算出して前記特異ベクトル記憶部に蓄積する特異ベクトル算出部と、を備えた特異値分解装置。 - 前記特異ベクトル算出部は、qd型ツイスト分解法により特異ベクトルを算出する、請求項3記載の特異値分解装置。
- 前記特異ベクトル算出部は、LV型ツイスト分解法により特異ベクトルを算出する、請求項3記載の特異値分解装置。
- 前記特異ベクトル算出部は、
前記対角行列記憶部から2重対角行列Bを読み出し、前記特異値記憶部から前記2重対角行列Bの特異値を読み出し、前記2重対角行列Bの各要素に関してミウラ変換、dLVv型変換、逆ミウラ変換を行うことによって、前記2重対角行列Bを上2重対角行列B(+1)及び下2重対角行列B(−1)にコレスキー分解するコレスキー分解部と、
前記上2重対角行列B(+1)及び下2重対角行列B(−1)の各要素と、前記2重対角行列Bの特異値とを用いて一方の左右直交行列を構成する特異ベクトルを算出して前記特異ベクトル記憶部に蓄積する第1特異ベクトル算出部と、
前記第1特異ベクトル算出部が算出した一方の左右直交行列を構成する特異ベクトルと、前記2重対角行列Bの特異値と、前記2重対角行列Bとを用いて他方の左右直交行列を構成する特異ベクトルを算出して前記特異ベクトル記憶部に蓄積する第2特異ベクトル算出部と、をさらに備えた、請求項5記載の特異値分解装置。 - 前記コレスキー分解部は、複数のコレスキー分解手段を備え、
前記複数のコレスキー分解手段が、前記2重対角行列Bをコレスキー分解する処理を並列実行する、請求項6記載の特異値分解装置。 - 前記第1特異ベクトル算出部は、複数の第1特異ベクトル算出手段を備え、
前記複数の第1特異ベクトル算出手段が、特異ベクトルを算出する処理を並列実行する、請求項6または請求項7記載の特異値分解装置。 - 前記第2特異ベクトル算出部は、複数の第2特異ベクトル算出手段を備え、
前記複数の第2特異ベクトル算出手段が、特異ベクトルを算出する処理を並列実行する、請求項6から請求項8のいずれか記載の特異値分解装置。 - 前記特異値算出部は、複数の特異値算出手段を備え、
前記複数の特異値算出手段が、分割元の2重対角行列の特異値と、行列要素とを算出する処理を並列実行する、請求項3から請求項9のいずれか記載の特異値分解装置。 - 前記特異値分解部は、複数の特異値分解手段を備え、
前記複数の特異値分解手段が、2重対角行列に対して特異値分解を行う処理を並列実行する、請求項3から請求項10のいずれか記載の特異値分解装置。 - 行列Aが記憶される行列記憶部と、
前記行列Aを前記行列記憶部から読み出し、前記行列Aを2重対角化した前記2重対角行列Bを算出して前記対角行列記憶部に蓄積する対角化部と、をさらに備えた請求項3から請求項11のいずれか特異値分解装置。 - 前記行列分割部は、2重対角行列を略半分の2個の2重対角行列に分割する、請求項3から請求項12のいずれか記載の特異値分解装置。
- 前記特異値算出部は、2重対角行列Bの全ての特異値を算出する、請求項3から請求項13のいずれか記載の特異値分解装置。
- 前記特異ベクトル算出部は、2重対角行列Bの全ての特異ベクトルを算出する、請求項14記載の特異値分解装置。
- 前記行列Aは、2次元画像j(j=1,…,m、mは3以上の整数)から抽出された特徴点i(i=1,…,n、nは2以上の整数)の座標(xi j,yi j)から構成される行列である、請求項12記載の特異値分解装置。
- 前記行列Aは、索引語の重みを要素とするベクトルであって、検索対象となる文書を示すベクトルであるd1,…,dn(nは2以上の整数)を各列に有する行列である索引語文書行列である、請求項12記載の特異値分解装置。
- 2重対角行列Bが記憶される対角行列記憶部と、前記2重対角行列Bが2個の2重対角行列に分割され、その2重対角行列が2個の2重対角行列に分割される処理が、分割後の各2重対角行列があらかじめ決められた大きさ以下となるまで繰り返され、当該あらかじめ決められた大きさ以下の各2重対角行列に対して特異値分解が行われた結果である、前記各2重対角行列の特異値と、前記各2重対角行列の特異ベクトルからなる左右直交行列の一部の要素である行列要素とが記憶される特異値分解記憶部と、前記2重対角行列Bの特異値が記憶される特異値記憶部と、特異値算出部と、前記2重対角行列Bの特異ベクトルが記憶される特異ベクトル記憶部と、特異ベクトル算出部とを備えた特異値分解装置で用いられる特異値分解方法であって、
前記特異値算出部が、各2重対角行列の特異値と、行列要素とを前記特異値分解記憶部から読み出し、前記特異値と、前記行列要素とから、分割元の2重対角行列の特異値と、分割元の2重対角行列の行列要素とを算出して前記特異値分解記憶部に蓄積し、その分割元の2重対角行列の特異値と、行列要素とを算出する処理を、2重対角行列Bの少なくとも1個の特異値を算出するまで繰り返し、前記2重対角行列Bの少なくとも1個の特異値を前記特異値記憶部に蓄積する特異値算出ステップと、
前記特異ベクトル算出部が、前記対角行列記憶部から2重対角行列Bを読み出し、前記特異値記憶部から前記2重対角行列Bの特異値を読み出し、2重対角行列Bとその特異値とから、ツイスト分解法を用いて2重対角行列Bの少なくとも1個の特異ベクトルを算出して前記特異ベクトル記憶部に蓄積する特異ベクトル算出ステップと、を備えた特異値分解方法。 - 2重対角行列Bが記憶される対角行列記憶部と、行列分割部と、特異値分解部と、前記特異値分解部によって特異値分解された特異値と、特異ベクトルからなる左右直交行列の一部の要素である行列要素とが記憶される特異値分解記憶部と、前記2重対角行列Bの特異値が記憶される特異値記憶部と、特異値算出部と、前記2重対角行列Bの特異ベクトルが記憶される特異ベクトル記憶部と、特異ベクトル算出部と、を備えた特異値分解装置で用いられる特異値分解方法であって、
前記行列分割部が、前記対角行列記憶部から前記2重対角行列Bを読み出し、当該2重対角行列Bを2個の2重対角行列に分割して前記対角行列記憶部に蓄積し、その2重対角行列を2個の2重対角行列に分割して前記対角行列記憶部に蓄積する処理を、分割後の各2重対角行列があらかじめ決められた大きさ以下となるまで繰り返す行列分割ステップと、
前記特異値分解部が、前記あらかじめ決められた大きさ以下の各2重対角行列を前記対角行列記憶部から読み出し、前記各2重対角行列に対して特異値分解を行い、前記各2重対角行列の特異値と、前記各2重対角行列の特異ベクトルとを算出する特異値分解ステップと、
前記特異値算出部が、各2重対角行列の特異値と、行列要素とを前記特異値分解記憶部から読み出し、前記特異値と、前記行列要素とから、分割元の2重対角行列の特異値と、分割元の2重対角行列の行列要素とを算出して前記特異値分解記憶部に蓄積し、その分割元の2重対角行列の特異値と、行列要素とを算出する処理を、2重対角行列Bの少なくとも1個の特異値を算出するまで繰り返し、前記2重対角行列Bの少なくとも1個の特異値を前記特異値記憶部に蓄積する特異値算出ステップと、
前記特異ベクトル算出部が、前記対角行列記憶部から2重対角行列Bを読み出し、前記特異値記憶部から前記2重対角行列Bの特異値を読み出し、2重対角行列Bとその特異値とから、ツイスト分解法を用いて2重対角行列Bの少なくとも1個の特異ベクトルを算出して前記特異ベクトル記憶部に蓄積する特異ベクトル算出ステップと、を備えた特異値分解方法。 - 前記特異ベクトル算出部は、コレスキー分解部と、第1特異ベクトル算出部と、第2特異ベクトル算出部と、をさらに備えており、
前記特異ベクトル算出ステップは、
前記コレスキー分解部が、前記対角行列記憶部から2重対角行列Bを読み出し、前記特異値記憶部から前記2重対角行列Bの特異値を読み出し、前記2重対角行列Bの各要素に関してミウラ変換、dLVv型変換、逆ミウラ変換を行うことによって、前記2重対角行列Bを上2重対角行列B(+1)及び下2重対角行列B(−1)にコレスキー分解するコレスキー分解ステップと、
前記第1特異ベクトル算出部が、前記上2重対角行列B(+1)及び下2重対角行列B(−1)の各要素と、前記2重対角行列Bの特異値とを用いて一方の左右直交行列を構成する特異ベクトルを算出して前記特異ベクトル記憶部に蓄積する第1特異ベクトル算出ステップと、
前記第2特異ベクトル算出部が、前記第1特異ベクトル算出ステップで算出した一方の左右直交行列を構成する特異ベクトルと、前記2重対角行列Bの特異値と、前記2重対角行列Bとを用いて他方の左右直交行列を構成する特異ベクトルを算出して前記特異ベクトル記憶部に蓄積する第2特異ベクトル算出ステップと、をさらに備えた、請求項19記載の特異値分解方法。 - コンピュータに、
2重対角行列Bが2個の2重対角行列に分割され、その2重対角行列が2個の2重対角行列に分割される処理が、分割後の各2重対角行列があらかじめ決められた大きさ以下となるまで繰り返され、当該あらかじめ決められた大きさ以下の各2重対角行列に対して特異値分解が行われた結果である、前記各2重対角行列の特異値と、前記各2重対角行列の特異ベクトルからなる左右直交行列の一部の要素である行列要素とが記憶される特異値分解記憶部から、各2重対角行列の特異値と、行列要素とを読み出し、前記特異値と、前記行列要素とから、分割元の2重対角行列の特異値と、分割元の2重対角行列の行列要素とを算出して前記特異値分解記憶部に蓄積し、その分割元の2重対角行列の特異値と、行列要素とを算出する処理を、2重対角行列Bの少なくとも1個の特異値を算出するまで繰り返し、前記2重対角行列Bの少なくとも1個の特異値を特異値記憶部に蓄積する特異値算出ステップと、
前記2重対角行列Bが記憶される対角行列記憶部から2重対角行列Bを読み出し、前記特異値記憶部から前記2重対角行列Bの特異値を読み出し、2重対角行列Bとその特異値とから、ツイスト分解法を用いて2重対角行列Bの少なくとも1個の特異ベクトルを算出して特異ベクトル記憶部に蓄積する特異ベクトル算出ステップと、を実現させるためのプログラム。 - コンピュータに、
2重対角行列Bが記憶される対角行列記憶部から前記2重対角行列Bを読み出し、当該2重対角行列Bを2個の2重対角行列に分割して前記対角行列記憶部に蓄積し、その2重対角行列を2個の2重対角行列に分割して前記対角行列記憶部に蓄積する処理を、分割後の各2重対角行列があらかじめ決められた大きさ以下となるまで繰り返す行列分割ステップと、
前記あらかじめ決められた大きさ以下の各2重対角行列を前記対角行列記憶部から読み出し、前記各2重対角行列に対して特異値分解を行い、前記各2重対角行列の特異値と、前記各2重対角行列の特異ベクトルとを算出し、特異値分解された特異値と、特異ベクトルからなる左右直交行列の一部の要素である行列要素とを特異値分解記憶部に蓄積する特異値分解ステップと、
各2重対角行列の特異値と、行列要素とを前記特異値分解記憶部から読み出し、前記特異値と、前記行列要素とから、分割元の2重対角行列の特異値と、分割元の2重対角行列の行列要素とを算出して前記特異値分解記憶部に蓄積し、その分割元の2重対角行列の特異値と、行列要素とを算出する処理を、2重対角行列Bの少なくとも1個の特異値を算出するまで繰り返し、前記2重対角行列Bの少なくとも1個の特異値を特異値記憶部に蓄積する特異値算出ステップと、
前記対角行列記憶部から2重対角行列Bを読み出し、前記特異値記憶部から前記2重対角行列Bの特異値を読み出し、2重対角行列Bとその特異値とから、ツイスト分解法を用いて2重対角行列Bの少なくとも1個の特異ベクトルを算出して特異ベクトル記憶部に蓄積する特異ベクトル算出ステップと、を実行させるためのプログラム。 - 前記特異ベクトル算出ステップは、
前記対角行列記憶部から2重対角行列Bを読み出し、前記特異値記憶部から前記2重対角行列Bの特異値を読み出し、前記2重対角行列Bの各要素に関してミウラ変換、dLVv型変換、逆ミウラ変換を行うことによって、前記2重対角行列Bを上2重対角行列B(+1)及び下2重対角行列B(−1)にコレスキー分解するコレスキー分解ステップと、
前記上2重対角行列B(+1)及び下2重対角行列B(−1)の各要素と、前記2重対角行列Bの特異値とを用いて一方の左右直交行列を構成する特異ベクトルを算出して前記特異ベクトル記憶部に蓄積する第1特異ベクトル算出ステップと、
前記第1特異ベクトル算出ステップで算出した一方の左右直交行列を構成する特異ベクトルと、前記2重対角行列Bの特異値と、前記2重対角行列Bとを用いて他方の左右直交行列を構成する特異ベクトルを算出して前記特異ベクトル記憶部に蓄積する第2特異ベクトル算出ステップと、をさらに備えた、請求項22記載のプログラム。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2007549031A JP5011545B2 (ja) | 2005-12-05 | 2006-09-21 | 特異値分解装置、及び特異値分解方法 |
Applications Claiming Priority (4)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2005351089 | 2005-12-05 | ||
JP2005351089 | 2005-12-05 | ||
PCT/JP2006/318713 WO2007066445A1 (ja) | 2005-12-05 | 2006-09-21 | 特異値分解装置、及び特異値分解方法 |
JP2007549031A JP5011545B2 (ja) | 2005-12-05 | 2006-09-21 | 特異値分解装置、及び特異値分解方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
JPWO2007066445A1 JPWO2007066445A1 (ja) | 2009-05-14 |
JP5011545B2 true JP5011545B2 (ja) | 2012-08-29 |
Family
ID=38122597
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2007549031A Active JP5011545B2 (ja) | 2005-12-05 | 2006-09-21 | 特異値分解装置、及び特異値分解方法 |
Country Status (3)
Country | Link |
---|---|
US (1) | US20090216821A1 (ja) |
JP (1) | JP5011545B2 (ja) |
WO (1) | WO2007066445A1 (ja) |
Families Citing this family (19)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8306361B2 (en) * | 2004-06-03 | 2012-11-06 | Japan Science And Technology Agency | High-speed high-accuracy matrix singular value decomposition method, program, and device |
US20070282778A1 (en) | 2006-06-05 | 2007-12-06 | International Business Machines Corporation | Policy-based management system with automatic policy selection and creation capabilities by using singular value decomposition technique |
WO2008018188A1 (fr) * | 2006-08-08 | 2008-02-14 | Kyoto University | dispositif de décomposition de valeur propre et procédé de décomposition de valeur propre |
US8055607B2 (en) * | 2008-03-03 | 2011-11-08 | International Business Machines Corporation | Adaptive multi-levels dictionaries and singular value decomposition techniques for autonomic problem determination |
CN101533386A (zh) * | 2008-03-14 | 2009-09-16 | 国际商业机器公司 | 在多处理器系统上对矩阵进行qr分解的方法和装置 |
TWI394086B (zh) * | 2008-04-18 | 2013-04-21 | Everspeed Technology Ltd | An Analytical Method of Digital Data and Its Application |
CN102467709B (zh) * | 2010-11-17 | 2017-03-01 | 阿里巴巴集团控股有限公司 | 一种发送商品信息的方法和装置 |
US9448970B2 (en) | 2013-06-14 | 2016-09-20 | Microsoft Technology Licensing, Llc | Singular value decomposition of complex matrix |
US10990713B1 (en) * | 2014-08-13 | 2021-04-27 | Ansys, Inc. | Systems and methods for fast matrix decomposition in model generation |
US9984041B2 (en) | 2016-06-30 | 2018-05-29 | International Business Machines Corporation | System, method, and recording medium for mirroring matrices for batched cholesky decomposition on a graphic processing unit |
US9697177B1 (en) | 2016-10-13 | 2017-07-04 | Sas Institute Inc. | Analytic system for selecting a decomposition description of sensor data |
US10762101B2 (en) * | 2016-11-01 | 2020-09-01 | Micro Focus Llc | Singular value decompositions |
US10671697B1 (en) * | 2017-02-24 | 2020-06-02 | Cyber Atomics, Inc. | Iterative and efficient technique for singular value decomposition |
US10277604B2 (en) * | 2017-03-30 | 2019-04-30 | Pearson Education, Inc. | Analysis and selection of interactive content resources for execution |
CN107330911B (zh) * | 2017-05-08 | 2022-01-11 | 上海交通大学 | 基于相交约束的纯旋转运动判定方法 |
CN110910320B (zh) * | 2019-11-04 | 2022-09-06 | 南京邮电大学 | 一种基于奇异值分解的人脸图像光照复原方法 |
CN113743571A (zh) * | 2020-05-30 | 2021-12-03 | 华为技术有限公司 | 数据处理的方法、电子设备和存储介质 |
WO2022061781A1 (en) * | 2020-09-25 | 2022-03-31 | Intel Corporation | Programmable spatial array for matrix decomposition |
CN117034090A (zh) * | 2023-09-06 | 2023-11-10 | 北京百度网讯科技有限公司 | 模型参数调整、模型应用方法、装置、设备及介质 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2005119507A1 (ja) * | 2004-06-03 | 2005-12-15 | Japan Science And Technology Agency | 行列の高速高精度特異値分解方法、プログラムおよび装置 |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH09212489A (ja) * | 1996-01-31 | 1997-08-15 | Fujitsu Ltd | 対称行列の固有値問題を解く並列処理装置および方法 |
AU2002220233A1 (en) * | 2000-12-01 | 2002-06-11 | Lizardtech, Inc. | Method for lossless encoding of image data by approximating linear transforms and preserving selected properties |
JP2003242133A (ja) * | 2002-02-19 | 2003-08-29 | Matsushita Electric Ind Co Ltd | 行列演算装置 |
US7296045B2 (en) * | 2004-06-10 | 2007-11-13 | Hasan Sehitoglu | Matrix-valued methods and apparatus for signal processing |
US7895254B2 (en) * | 2004-11-15 | 2011-02-22 | Qualcomm Incorporated | Eigenvalue decomposition and singular value decomposition of matrices using Jacobi rotation |
US7711762B2 (en) * | 2004-11-15 | 2010-05-04 | Qualcomm Incorporated | Efficient computation for eigenvalue decomposition and singular value decomposition of matrices |
-
2006
- 2006-09-21 JP JP2007549031A patent/JP5011545B2/ja active Active
- 2006-09-21 WO PCT/JP2006/318713 patent/WO2007066445A1/ja active Application Filing
- 2006-09-21 US US12/086,013 patent/US20090216821A1/en not_active Abandoned
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2005119507A1 (ja) * | 2004-06-03 | 2005-12-15 | Japan Science And Technology Agency | 行列の高速高精度特異値分解方法、プログラムおよび装置 |
Also Published As
Publication number | Publication date |
---|---|
JPWO2007066445A1 (ja) | 2009-05-14 |
WO2007066445A1 (ja) | 2007-06-14 |
US20090216821A1 (en) | 2009-08-27 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP5011545B2 (ja) | 特異値分解装置、及び特異値分解方法 | |
JP5017666B2 (ja) | 固有値分解装置、及び固有値分解方法 | |
CN110738321B (zh) | 一种量子信号处理方法及装置 | |
JP4325877B2 (ja) | 行列の高速高精度特異値分解方法、プログラムおよび装置 | |
Cevher et al. | Convex optimization for big data: Scalable, randomized, and parallel algorithms for big data analytics | |
Bogomolov et al. | Reach set approximation through decomposition with low-dimensional sets and high-dimensional matrices | |
Khudia et al. | Fbgemm: Enabling high-performance low-precision deep learning inference | |
Wang et al. | IK-SVD: dictionary learning for spatial big data via incremental atom update | |
Pavel et al. | Algorithms for efficient computation of convolution | |
Halko | Randomized methods for computing low-rank approximations of matrices | |
Nasikun et al. | Fast Approximation of Laplace‐Beltrami Eigenproblems | |
Oh et al. | High-performance tucker factorization on heterogeneous platforms | |
Park et al. | Fast and scalable approximate spectral matching for higher order graph matching | |
Shen et al. | Scalability and robustness of spectral embedding: landmark diffusion is all you need | |
Chapman et al. | CCA-Zoo: A collection of Regularized, Deep Learning based, Kernel, and Probabilistic CCA methods in a scikit-learn style framework | |
Kruliš et al. | Efficient extraction of feature signatures using multi-gpu architecture | |
Martel et al. | A GPU-based processing chain for linearly unmixing hyperspectral images | |
Boţ et al. | Inertial proximal block coordinate method for a class of nonsmooth sum-of-ratios optimization problems | |
Chu et al. | An efficient implementable inexact entropic proximal point algorithm for a class of linear programming problems | |
Holtmann-Rice et al. | Tensors, differential geometry and statistical shading analysis | |
WO2016083861A1 (en) | Mapping a geological parameter on an unstructured grid | |
Tao et al. | Study on L 1 over L 2 minimization for nonnegative signal recovery | |
Beneš et al. | Singular value decomposition used for compression of results from the finite element method | |
Rosman et al. | Fast multidimensional scaling using vector extrapolation | |
Silva et al. | Cuda-based parallelization of power iteration clustering for large datasets |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20090807 |
|
TRDD | Decision of grant or rejection written | ||
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20120508 |
|
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 |
|
R150 | Certificate of patent or registration of utility model |
Free format text: JAPANESE INTERMEDIATE CODE: R150 |