JP5860829B2 - 積演算装置、方法、及びプログラム - Google Patents

積演算装置、方法、及びプログラム Download PDF

Info

Publication number
JP5860829B2
JP5860829B2 JP2013056980A JP2013056980A JP5860829B2 JP 5860829 B2 JP5860829 B2 JP 5860829B2 JP 2013056980 A JP2013056980 A JP 2013056980A JP 2013056980 A JP2013056980 A JP 2013056980A JP 5860829 B2 JP5860829 B2 JP 5860829B2
Authority
JP
Japan
Prior art keywords
node
score
array
intermediate node
calculated
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
Application number
JP2013056980A
Other languages
English (en)
Other versions
JP2014182615A (ja
Inventor
宜仁 安田
宜仁 安田
正彬 西野
正彬 西野
永田 昌明
昌明 永田
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Nippon Telegraph and Telephone Corp
Original Assignee
Nippon Telegraph and Telephone Corp
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Nippon Telegraph and Telephone Corp filed Critical Nippon Telegraph and Telephone Corp
Priority to JP2013056980A priority Critical patent/JP5860829B2/ja
Publication of JP2014182615A publication Critical patent/JP2014182615A/ja
Application granted granted Critical
Publication of JP5860829B2 publication Critical patent/JP5860829B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Description

本発明は、積演算装置、方法、及びプログラムに係り、特に、二値行列とベクトル又は行列との積の演算を行う積演算装置、方法、及びプログラムに関する。
行列の積の計算は、様々な工学の分野で用いられる演算であり、その高速化が求められる。一般に、M行N列の二値行列と、N次元ベクトルとの積の計算にはN×M回の要素間の乗算が必要である。ここで、二値行列とは、行列のすべての要素が0あるいは1であるような行列である。
行列が疎な場合、すなわち、行列の大半の要素が零である場合には、すべての要素について計算する代わりに零でない要素についてのみ計算を行うことで高速に計算する方法が広く知られている(非特許文献1)。この場合、行列中の非零要素の個数をKとすると、K回の要素間の乗算回数が必要となる。
また、近年、二値行列をゼロサプレス型二分決定グラフ(ZDD:Zero-suppressed Binary Decision Diagrams)と呼ばれるデータ構造に変換して保持することによって、二値行列に対する乗算を高速に行う手法が提案されている(非特許文献2)。
非特許文献2の手法は、二値行列とベクトルの積の演算に必要な要素間の乗算回数を、変換後のZDDのノード数と同じ数まで減らすことができる。この変換後のZDDのノード数は行列の非零要素数以下であり、非特許文献2によれば約1/2倍程度にできるものとされている。なお、かける側のベクトルの各要素が行ベクトルで表現されていると考えることにより、従来手法を二値行列と一般の行列との積に適用することも可能である。
Saad, Y, "SPARSKIT: A basic toolkit for sparse matrix compu-tations", 1994 西野正彬, 安田宜仁, 小林透: ZDD を用いた効率的な集合拡張の計算 人工知能学会論文誌Vol. 27, No.2 , pp. 22-27 (2012)
しかし、上記ZDDを用いた方法を用いて積の計算を行う場合、ZDDのノード数分だけの一時的な記憶領域が必要となってしまうという問題がある。
これは、ZDDのノードを辿りつつ計算を行う際、後のZDDのノードに対応する値を決定するためには、他の決定済みのZDDノードに対応する値を参照する必要があるため、すべてのノードに対応する値を保持する必要があるためである。
非特許文献2によれば、ZDDのノード数は少なくなったとしても元行列の非零の要素数の1/2倍程度であるとされていることから、結果としては、元行列の非零の要素数に比例した一時的な記憶領域が必要になる。もし非零要素が一定割合で出現するような行列の場合、非特許文献2の方法によれば、M行N列の行列においてM×Nに比例した大きさの一時的な記憶領域が必要となる、という問題がある。
一方、ZDDを用いない非特許文献1の方法では、通常一時的な記憶領域はかけるベクトルの次元数分、すなわちN個だけで済むことになる。これは、単一要素数からなるベクトルの場合には、これらの差異は大きな問題とはならないが、行列にかけるものが行方向に巨大な行列である場合等は、これらの差は無視できないという問題がある。
本発明では、上記問題点を解決するために成されたものであり、二値行列とベクトル又は行列との積の演算に使用する一時記憶領域を低減することできる積演算装置、方法、及びプログラムを提供することを目的とする。
上記目的を達成するために、第1の発明に係る積演算装置は、入力されたM行N列の二値行列とN次元ベクトルとの積演算を行う積演算装置であって、前記二値行列を、値を示す終端ノード、前記二値行列の各行に対応する各行ノード、及び前記二値行列の非ゼロの各要素に対応する各中間ノードを含むゼロサプレス型二分決定グラフ(Zero-suppressed Binary Decision Diagrams)に変換するZDD構築手段と、前記ZDD構築手段により構築されたゼロサプレス型二分決定グラフの中間ノードの各々に対応する各要素を含む配列であり、前記要素の各々に、前記要素に対応する前記中間ノードの親ノードの数である参照数を格納する残り参照数配列を作成する残り参照数配列作成手段と、前記ゼロサプレス型二分決定グラフの前記終端ノードから前記行ノードに向かう順序で、前記中間ノードの各々について、スコアを算出するスコア算出手段であって、算出対象の中間ノードの各々について、前記積演算の結果を格納するための一時記憶領域に格納された、前記算出対象の中間ノードの子ノードである各中間ノードのスコアと、前記算出対象の中間ノードに対応する前記二値行列の要素、及び乗算すべき前記N次元ベクトルの要素の積との和を、前記算出対象の中間ノードのスコアとして算出すると共に、前記残り参照数配列の前記子ノードである中間ノードの各々に対する要素に格納された参照数を各々1減算して前記残り参照数配列の参照数が0となった要素に対応する中間ノードのスコアが格納された前記一時記憶領域を未使用にし、かつ、前記算出された前記算出対象の中間ノードのスコアを、未使用となっている前記一時記憶領域に格納し、前記行ノードの各々について、前記行ノードの子ノードである中間ノードのスコアを前記一時記憶領域から取得し、前記積演算の結果として、M次元ベクトルを出力するスコア算出手段と、を含んで構成されている。
第2の発明に係る積演算方法は、ZDD構築手段と、残り参照数配列作成手段と、スコア算出手段と、を含み、入力されたM行N列の二値行列とN次元ベクトルとの積演算を行う積演算装置における積演算方法であって、前記ZDD構築手段によって、前記二値行列を、値を示す終端ノード、前記二値行列の各行に対応する各行ノード、及び前記二値行列の非ゼロの各要素に対応する各中間ノードを含むゼロサプレス型二分決定グラフ(Zero-suppressed Binary Decision Diagrams)に変換するステップと、前記参照数配列作成手段によって、前記ZDD構築手段により構築されたゼロサプレス型二分決定グラフの中間ノードの各々に対応する各要素を含む配列であり、前記要素の各々に、前記要素に対応する前記中間ノードの親ノードの数である参照数を格納する残り参照数配列を作成するステップと、前記算出手段によって、前記ゼロサプレス型二分決定グラフの前記終端ノードから前記行ノードに向かう順序で、前記中間ノードの各々について、スコアを算出するステップであって、前記算出手段によって、算出対象の中間ノードの各々について、前記積演算の結果を格納するための一時記憶領域に格納された、前記算出対象の中間ノードの子ノードである各中間ノードのスコアと、前記算出対象の中間ノードに対応する前記二値行列の要素、及び乗算すべき前記N次元ベクトルの要素の積との和を、前記算出対象の中間ノードのスコアとして算出すると共に、前記残り参照数配列の前記子ノードである中間ノードの各々に対する要素に格納された参照数を各々1減算して前記残り参照数配列の参照数が0となった要素に対応する中間ノードのスコアが格納された前記一時記憶領域を未使用にし、かつ、前記算出された前記算出対象の中間ノードのスコアを、未使用となっている前記一時記憶領域に格納し、前記行ノードの各々について、前記行ノードの子ノードである中間ノードのスコアを前記一時記憶領域から取得し、前記積演算の結果として、M次元ベクトルを出力する。
第1の発明及び第2の発明によれば、ZDD構築手段によって、入力された二値行列をゼロサプレス型二分決定グラフに変換し、残り参照数配列作成手段により、中間ノードの親ノードの数である参照数を格納する残り参照数配列を作成する。
そして、スコア算出手段により、中間ノードの各々について、中間ノードの各子ノードである中間ノードのスコアと、中間ノードに対応する二値行列の要素、及び乗算すべきN次元ベクトルの要素の積との和を、中間ノードのスコアとして算出すると共に、残り参照数配列の子ノードである中間ノードの各々に対する要素に格納された参照数を各々1減算し、参照数が0となった要素に対応する中間ノードのスコアが格納された一時記憶領域を未使用にし、かつ、算出された中間ノードのスコアを、未使用となっている一時記憶領域に格納し、行ノードの各々について、行ノードの子ノードである中間ノードのスコアを一時記憶領域から取得し、積演算の結果として、M次元ベクトルを出力する。
このように、第1の発明及び第2の発明によれば、入力された二値行列をゼロサプレス型二分決定グラフに変換し、中間ノードの親ノードの数である参照数を格納する残り参照数配列を作成し、中間ノードの各々について、中間ノードの各子ノードである中間ノードのスコアと、中間ノードに対応する二値行列の要素、及び乗算すべきN次元ベクトルの要素の積との和を、中間ノードのスコアとして算出すると共に、残り参照数配列の子ノードである中間ノードの各々に対する要素に格納された参照数を各々1減算し、参照数が0となった要素に対応する中間ノードのスコアが格納された一時記憶領域を未使用にし、かつ、算出された中間ノードのスコアを、未使用となっている一時記憶領域に格納し、行ノードの各々について、行ノードの子ノードである中間ノードのスコアを一時記憶領域から取得し、積演算の結果として、M次元ベクトルを出力することにより、二値行列とベクトルとの積との演算において利用する一時記憶領域を削減することができる。
また、第1の発明及び第2の発明において、前記積演算の結果を格納するための一時記憶領域として、少なくともM個の要素からなるスコア配列を作成するスコア配列作成手段を更に含み、前記スコア算出手段は、算出対象の中間ノードの各々について、前記スコア配列に格納された、前記算出対象の中間ノードの各子ノードである中間ノードのスコアと、前記算出対象の中間ノードに対応する前記二値行列の要素、及び乗算すべき前記N次元ベクトルの要素の積との和を、前記算出対象の中間ノードのスコアとして算出すると共に、前記残り参照数配列の前記子ノードである中間ノードの各々に対する要素に格納された参照数を各々1減算し、前記残り参照数配列の参照数が0となった要素に対応する中間ノードのスコアが格納された、前記スコア配列の要素を未使用にし、かつ、前記算出された前記算出対象の中間ノードのスコアを、未使用となっている前記スコア配列の要素に格納し、前記行ノードの各々について、前記行ノードの子ノードである中間ノードのスコアを前記スコア配列から取得し、前記積演算の結果として、M次元ベクトルを出力するようにしてもよい。
第3の発明に係る積演算装置は、入力されたM行N列の二値行列とN行G列の行列との積演算を行う積演算装置であって、前記二値行列を、値を示す終端ノード、前記二値行列の各行に対応する各行ノード、及び前記二値行列の非ゼロの各要素に対応する各中間ノードを含むゼロサプレス型二分決定グラフ(Zero-suppressed Binary Decision Diagrams)に変換するZDD構築手段と、前記ZDD構築手段により構築されたゼロサプレス型二分決定グラフの中間ノードの各々に対応する各要素を含む配列であり、前記要素の各々に、前記要素に対応する前記中間ノードの親ノードの数である参照数を格納する残り参照数配列を作成する残り参照数配列作成手段と、前記ゼロサプレス型二分決定グラフの前記終端ノードから前記行ノードに向かう順序で、前記中間ノードの各々について、G次元のスコアベクトルを算出するスコア算出手段であって、算出対象の中間ノードの各々について、前記積演算の結果を格納するための一時記憶領域に格納された、前記算出対象の中間ノードの各子ノードである中間ノードのスコアベクトルと、前記算出対象の中間ノードに対応する前記二値行列の要素、及び乗算すべき前記N行G列の行列のうちのG次元ベクトルの積との和を、前記算出対象の中間ノードのスコアベクトルとして算出すると共に、前記残り参照数配列の前記子ノードである中間ノードの各々に対する要素に格納された参照数を各々1減算し、前記残り参照数配列の参照数が0となった要素に対応する中間ノードのスコアベクトルが格納された前記一時記憶領域を未使用にし、かつ、前記算出された前記算出対象の中間ノードのスコアベクトルを、未使用となっている前記一時記憶領域に格納し、前記行ノードの各々について、前記行ノードの子ノードである中間ノードのスコアベクトルを前記一時記憶領域から取得し、前記積演算の結果として、M行G列の行列を出力するスコア算出手段と、を含んで構成されている。
第4の発明に係る積演算方法は、ZDD構築手段と、残り参照数配列作成手段と、スコア算出手段と、を含み、入力されたM行N列の二値行列とN行G列の行列との積演算を行う積演算装置における積演算方法であって、前記ZDD構築手段によって、前記二値行列を、値を示す終端ノード、前記二値行列の各行に対応する各行ノード、及び前記二値行列の非ゼロの各要素に対応する各中間ノードを含むゼロサプレス型二分決定グラフ(Zero-suppressed Binary Decision Diagrams)に変換するステップと、前記残り参照数配列作成手段によって、前記ZDD構築手段により構築されたゼロサプレス型二分決定グラフの中間ノードの各々に対応する各要素を含む配列であり、前記要素の各々に、前記要素に対応する前記中間ノードの親ノードの数である参照数を格納する残り参照数配列を作成するステップと、前記スコア算出手段によって、前記ゼロサプレス型二分決定グラフの前記終端ノードから前記行ノードに向かう順序で、前記中間ノードの各々について、G次元のスコアベクトルを算出するステップであって、前記算出手段によって、算出対象の中間ノードの各々について、前記積演算の結果を格納するための一時記憶領域に格納された、前記算出対象の中間ノードの各子ノードである中間ノードのスコアベクトルと、前記算出対象の中間ノードに対応する前記二値行列の要素、及び乗算すべき前記N行G列の行列のうちのG次元ベクトルの積との和を、前記算出対象の中間ノードのスコアベクトルとして算出すると共に、前記残り参照数配列の前記子ノードである中間ノードの各々に対する要素に格納された参照数を各々1減算し、前記残り参照数配列の参照数が0となった要素に対応する中間ノードのスコアベクトルが格納された前記一時記憶領域を未使用にし、かつ、前記算出された前記算出対象の中間ノードのスコアベクトルを、未使用となっている前記一時記憶領域に格納し、前記行ノードの各々について、前記行ノードの子ノードである中間ノードのスコアベクトルを前記一時記憶領域から取得し、前記積演算の結果として、M行G列の行列を出力する。
第3の発明及び第4の発明によれば、ZDD構築手段によって、入力された二値行列をゼロサプレス型二分決定グラフに変換し、残り参照数配列作成手段により、中間ノードの親ノードの数である参照数を格納する残り参照数配列を作成する。
そして、スコア算出手段により、中間ノードの各々について、中間ノードの各子ノードである中間ノードのスコアベクトルと、中間ノードに対応する二値行列の要素、及び乗算すべき前記N行G列の行列のうちのG次元ベクトルの積との和を、中間ノードのスコアベクトルとして算出すると共に、残り参照数配列の子ノードである中間ノードの各々に対する要素に格納された参照数を各々1減算し、参照数が0となった要素に対応する中間ノードのスコアベクトルが格納された一時記憶領域を未使用にし、かつ、算出された中間ノードのスコアベクトルを、未使用となっている一時記憶領域に格納し、行ノードの各々について、行ノードの子ノードである中間ノードのスコアベクトルを一時記憶領域から取得し、積演算の結果として、M行G列の行列を出力する。
このように、第3の発明及び第4の発明によれば、入力された二値行列をゼロサプレス型二分決定グラフに変換し、中間ノードの親ノードの数である参照数を格納する残り参照数配列を作成し、中間ノードの各々について、中間ノードの各子ノードである中間ノードのスコアベクトルと、中間ノードに対応する二値行列の要素、及び乗算すべき前記N行G列の行列のうちのG次元ベクトルの積との和を、中間ノードのスコアベクトルとして算出すると共に、残り参照数配列の子ノードである中間ノードの各々に対する要素に格納された参照数を各々1減算し、参照数が0となった要素に対応する中間ノードのスコアベクトルが格納された一時記憶領域を未使用にし、かつ、算出された中間ノードのスコアベクトルを、未使用となっている一時記憶領域に格納し、行ノードの各々について、行ノードの子ノードである中間ノードのスコアベクトルを一時記憶領域から取得し、積演算の結果として、M行G列の行列を出力することにより、二値行列と行列との積との演算において利用する一時記憶領域を削減することができる。
また、本発明のプログラムは、コンピュータを、上記の積演算装置を構成する各手段として機能させるためのプログラムである。
以上説明したように、本発明の積演算装置、方法、及びプログラムによれば、二値行列とベクトル又は行列との積演算において利用する一時記憶領域を削減することができる。
本発明の実施の形態に係る積演算装置の構成を示す概略図である。 入力される二値行列の例を示す図である。 二値行列をZDDへ変換した例を示す図である。 ZDDの簡略表記の例を示す図である。 ZDDの配列表現の例を示す図である。 ZDD配列表現と参照数配列の併記の例を示す図である。 スコア−ノード対応表の例を示す図である。 中間ノードのスコアを算出する例を示す図である。 M行N列の二値行列とN次元のベクトルとの積の例を示す図である。 本発明の実施の形態に係る積演算装置における積演算処理ルーチンを示す図である。 本発明の実施の形態に係る積演算装置における積の計算処理ルーチンを示す図である。 本発明の実施の形態に係る積演算装置におけるスコア配列未使用位置取得処理ルーチンを示す図である。 本発明の実施の形態に係る積演算装置におけるスコア算出処理ルーチンを示す図である。
以下、図面を参照して本発明の第1の実施の形態を詳細に説明する。なお、本発明の第1の実施の形態においては、M行N列の二値行列XとN次元のベクトルqとの積(p=Xq)について説明する。なお、入力ベクトルqのη(i)番目の要素をqη(i)と表し、ベクトルの各要素は実数値でもベクトルであっても良い。ここで、η(i)はノードID=iのノードのラベルを受け取り、当該ラベルの添え字を返す関数である。
<第1の実施の形態に係る積演算装置の構成>
本発明の第1の実施の形態に係る積演算装置について説明する。図1に示すように、本発明の実施の形態に係る積演算装置100は、CPUと、RAMと、後述する積演算処理ルーチンを実行するためのプログラムや各種データを記憶したROMと、を含むコンピュータで構成することが出来る。この積演算装置100は、機能的には図1に示すように入力部10と、演算部20と、出力部50とを備えている。
入力部10は、キーボードなどの入力装置から、図2に示すようなM行N列の二値行列Xと、N次元のベクトルqとを受け付ける。なお、入力部10は、ネットワーク等を介して外部から入力されたものを受け付けるようにしてもよい。なお、本発明の第1の実施の形態においては、M行N列の二値行列Xとして、図2に示す4行4列の二値行列が入力され、また、N次元ベクトルとして、q=[1,1,0,1]が入力されたものとして説明する。
演算部20は、ZDD構築部22と、参照数配列作成部26と、ZDD記憶部24と、残り参照数配列作成部28と、スコア配列作成部30と、対応配列作成部32と、配列記憶部34と、積計算部36と、を備えている。
ZDD構築部22は、入力部10において受け付けた二値行列Xを図3に示すようなZDDのデータ構造に変換する。ZDDは、0、1の値の各々に対する終端ノード、二値行列Xの各行に対応する各行ノード、及び二値行列Xの非ゼロの各要素に対応する各中間ノードを含む。図3中のFは始点ノードへのポインタを示し、rで始まるラベルがついた各ノード(行ノード)は二値行列Xの各行に対応し、cで始まるラベルがついた各ノード(中間ノード)は二値行列Xの各列に対応している。中間ノードはすべてLO側のリンクが0終端ノードへつながっているため、これらのLO側のリンクを省略し、図4のように表記する。なお、二値行列XをZDDのデータ構造に変換する手法については、上記の非特許文献2に記載の方法を用いればよい。
また、このダイヤグラムを図5のように、終端ノードから始点ノードへ向かって順番ににノードIDを付し、ノードごとに、ノードIDと、ラベルと、HI側リンクの接続先のノードIDと、LO側リンクの接続先のノードIDと、を対応付けた一次元配列で表現し、ZDD記憶部24に記憶する。なお、図3及び図4に対応する配列表現を図5左に示し、図5右にZDDの各ノードにノードIDを記したものを示す。図5のように、0終端、1終端の2つの終端ノードには、配列番号1、2が割り当てられているとし、配列番号3以降に中間ノードが並び、その後に行ノードが並ぶように構成する。
具体的には、入力部10により受け付けた二値行列Xを組み合わせ集合として表現し、組み合わせ集合で用いられるシンボルの集合Sを、S={r1,...,rM,c1,...,cN}とする。ここで、r1,...,rMは、それぞれ各行に対応するシンボルであり、c1,...,cNは、それぞれ各列に対応するシンボルとする。これらのシンボルを用いて、Xに対応する組み合わせ集合Zを、下記(1)式として表現し、当該組み合わせ集合をZDDとして構築する。
ここで、a(l)は、k行目のxkのベクトルの成分xk1,...,xkNのうち、値が1となるl番目の要素の添え字を表す。また、bkはxk1,...,xkNのうち値が1となる要素の総数である。1≦ak(1)<…<ak(bk)≦Nを満たす。例えば、図2の二値行列Xには、組み合わせ集合{r1c1c3,r2c1c2,r3c1c2c4,r4c1c4}が対応する。これをZDDとして表現したものが図3となる。
また、構築されたZDDにはいくつかの特徴がある。まず、ZDDの節点数は、
以下であり、かつシンボルr1,...,rMに対応する節点は、常に高々一つしか出現しないという特徴がある。また、集合中の2つの項について、ある節点の共有による簡約化はc1,...,cNに対応する節点でのみ起きるようになる。各項に含まれるシンボルのうち、順序的に後にくるものがすべて共通な場合にのみ、ZDDにおいて構造の共有が行われるということになる。図4では、図2の二値行列Xの1行目に相当する項がr1c1c3、2行目に相当する項がr2c1c2c3であり、c3に相当する節点で共有されている。
参照数配列作成部26は、ZDD記憶部24に記憶されているZDDについて、各ノードの親ノードの数である参照数を記憶する参照数配列を作成し、ZDD記憶部24に記憶する。
具体的には、要素数がZDDのノード数となる配列を作成し、すべての要素を0で初期化する。そして、ノードIDが3から最大ノード番号Wまでのノードの各々について、HIカラムを参照し、HIカラムの値が3以上であれば、参照数配列のノードIDの番号が、HIカラムの値となるノードIDに対応する、配列の要素の値に1を加える。また、LOのカラムについても同様に、ノードIDが3から最大ノード番号Wまでのノードの各々について、LOカラムを参照し、LOカラムの値が3以上であれば、参照数配列のノードIDの番号が、LOカラムの値となるノードIDに対応する、配列の要素の値に1を加える。また、始点ノードに対応する配列の要素については、便宜上1の値を与える。なお、ノードIDが3未満であれば、そのノードは終端ノードに相当するので参照数は考慮しない。また、ZDD記憶部24に記憶されている図6に示すような配列表現にカラムを追加して、参照数配列を記憶するようにしても良い。
ZDD記憶部24には、ZDD構築部22において構築された図5に示すような二値行列XのZDDを一次元配列で表現した配列と、参照数配列作成部26において作成された参照数配列とが記憶されている。
残り参照数配列作成部28は、ZDD記憶部24に記憶されている参照数配列を複製し、残り参照数配列として配列記憶部34に記憶する。
スコア配列作成部30は、計算の途中結果を保持するための一時記憶領域としての、中間ノード各々のスコアを保持するための各要素からなるスコア配列を作成し、配列記憶部34に記憶する。計算の途中結果を保持するために、少なくとも行数分の一時記憶領域が必要であり、第1の実施の形態においては、M+1個の要素からなる1次元配列をスコア配列として作成する。なお、このスコア配列をscoreとする。
対応配列作成部32は、図7に示すように、配列記憶部34に記憶されているスコア配列の要素が現在どのノードのスコアを格納しているかどうかを管理するための表として、スコア−ノード対応表を作成し、配列記憶部34に記憶する。スコア−ノード対応表は、M+1個の要素からなる配列であり、各要素が0で初期化される。
積計算部36は、ZDD記憶部24に記憶されている二値行列XのZDDと、配列記憶部34に記憶されている残り参照配列、スコア配列、及びスコア−ノード対応表とに基づいて、入力部10において受け付けたM行N列の二値行列Xと、N次元のベクトルqとの積(p=Xq)の計算を行い、その結果を出力部50に出力する。
具体的には、ZDD記憶部24に記憶されている二値行列XのZDDと、入力部10において受け付けたN次元のベクトルqとを受け付ける。そして、ZDD記憶部24に記憶されている二値行列XのZDDの構造を利用して、ノードIDが3からの中間ノードの各々について、ノードIDの昇順に各中間ノードのスコアを算出する。なお、ノードIDが1又は2のノードは終端ノードであるので当該ノードのスコアは0とする。
また、中間ノードのスコアを算出する場合には、算出したスコアを格納するため、配列記憶部34に記憶されているスコア配列の未使用位置を取得する必要がある。そのため、配列記憶部34に記憶されているスコア−ノード対応表の配列を走査し、値が0となる要素に対応するスコア配列の番地を、未使用位置として取得する。また、スコア−ノード対応表の、スコア配列の未使用位置に対応する要素に、スコアを算出する対象の中間ノードのノードIDを格納し、当該未使用位置の番地に対応するスコア配列の要素を0で初期化する。そして、下記(2)式により算出対象の中間ノード(ノードID=i)のスコアを算出し、取得した未使用位置であるスコア配列の要素にスコアを格納する。図8に各中間ノードのスコアの算出例を示す。
ここで、iはノードIDの値であり、η(i)はノードID=iのノードのラベルを受け取り、当該ラベルの添え字を返す関数である。例えば、図5を例に示すと、η(3)=4、η(5)=2となる。また、qη(i)は、入力部10において受け付けたN次元ベクトルqのη(i)番目の要素であり、ノードID=iのノードに対応する二値行列Xの要素と乗算すべき、ベクトルq中の要素である。また、配列記憶部34に記憶されているスコア−ノード対応表を順に走査し、算出対象の中間ノード(ノードID=i)のHI側の子ノードのノードIDの値HI(i)が格納されている要素を探索し、探索された当該要素に対応する配列番号が示す、スコア配列の要素に格納されているスコアを取得することでscore[HI(i)]の値を取得する。
そして、配列記憶部34に記憶されている残り参照配列の、ノードIDの値HI(i)に対応する要素の値を1減算し、当該要素の値が0となった場合に、配列記憶部34に記憶されているスコア−ノード対応表において、ノードIDの値HI(i)が格納されている要素の値を0に初期化し、対応するスコア配列の要素が未使用位置であることを示すようにする。
また、中間ノードの全てのスコアが算出された場合、下記(3)式によりp1〜Mを求め、出力部50により、p1〜Mを各要素とするM次元ベクトルpを、積演算の結果として出力する。図9にp1〜M及びpの算出例を示す。
ここで、上記(3)式は、ラベルr1〜rMに対応する行ノードの各々について算出される。そのため、当該行ノードの各々に対応するpη(i)の値はベクトルpの各要素に該当する。そして、pη(i)をメモリ(図示省略)に格納しておき、ラベルr1〜rMに対応する全てのノードについてpη(i)が算出された場合に、pη(i)の値を結合しpとして結果を出力部50に出力する。
<第1の実施の形態に係る積演算装置の作用>
次に、本発明の第1の実施の形態に係る積演算装置100の作用について説明する。まず、入力部10により、M行N列の二値行列X及びN次元のベクトルqが入力され、積演算装置100のROMに記憶されたプログラムを、CPUが実行することにより、図10に示す積演算処理ルーチンが実行される。
まず、ステップS100では、入力部10により入力されたM行N列の二値行列X及びN次元のベクトルqを受け付ける。
次に、ステップS102では、ステップS100において取得したM行N列の二値行列Xを、0,1の値の各々に対する終端ノード、二値行列Xの各行に対応する各行ノード、及び二値行列Xの非ゼロの各要素に対応する各中間ノードを含むZDDのデータ構造に変換し、ZDD記憶部24に記憶する。
次に、ステップS104では、ステップS102において構築したZDDに基づいて、ZDDの各ノードについて親ノードの数である参照数を各々記憶した参照数配列を作成し、ZDD記憶部24に記憶する。
次に、ステップS106では、ZDD記憶部24に記憶されている参照数配列を複製して、残り参照数配列を作成し、配列記憶部34に記憶する。
次に、ステップS108では、ステップS100において取得したM行N列の二値行列X及びN次元ベクトルqに基づいて、計算途中結果を保持するためのM+1個の要素からなる一次元配列のスコア配列を作成する。
次に、ステップS110では、ステップS108で作成したスコア配列に対応して、スコア−ノード対応表を作成し、配列記憶部34に記憶する。
次に、ステップS112において、ステップS102において構築した二値行列XのZDDと、配列記憶部34に記憶された残り参照数配列、スコア配列、及びスコア−ノード対応表とに基づいて、ステップS100において受け付けたM行N列の二値行列Xと、N次元のベクトルqとの積(p=Xq)の積を計算し、結果を出力部50に出力して処理を終了する。
上記ステップS112は、図11に示す積の計算処理ルーチンによって実現される。
まず、ステップS200では、変数iに初期値として3を与える。
次に、ステップS202では、ノードID=iのノードのラベルがCh(h=1,...,N)か否かを判定する。ノードID=iのノードのラベルがChである場合には、ステップS204に移行し、ノードID=iのノードのラベルがChでない場合には、ノードID=iのノードが行ノードであると判断し、ステップS218へ移行する。
次に、ステップS204では、配列記憶部34に記憶されたスコア−ノード対応表に基づいて、配列記憶部34に記憶されたスコア配列の未使用位置を取得する。
上記ステップS204は、図12に示すスコア配列未使用位置取得処理ルーチンによって実現される。
まず、ステップS300では、変数jに初期値として0を与える。
次に、ステップS302では、配列記憶部34に記憶されたスコア−ノード対応表のj番目の要素の値が0か否かを判定する。スコア−ノード対応表のj番目の値が0である場合には、スコア配列のj番目の要素が未使用であると判断し、ステップS306に移行し、スコア−ノード対応表のj番目の値が0でない場合には、ステップS304に移行する。
ステップS304では、変数jの値に1を加えた値をjとする。
次に、ステップS306では、スコア配列のj番目の要素に、ノードID=iのノードのスコアを格納するために、配列記憶部34に記憶されたスコア−ノード対応表のj番目の要素にノード番号iを格納する。
次に、ステップS308では、配列記憶部34に記憶されたスコア配列のj番目の要素score[j]の値を0で初期化する。
次に、ステップS310では、ノードID=iのノードのスコアを格納するスコア配列の未使用位置として、変数jを出力する。
図11のステップS206では、ノードID=iのノードのスコアを算出する。
上記ステップS206は、図13に示すスコア算出処理ルーチンによって実現される。
まず、ステップS400では、配列記憶部34に記憶されたスコア−ノード対応表の要素を順に走査し、ノードID=iのノードのHI側の子ノードのノードIDの値HI(i)が格納されている要素を探索する。
次に、ステップS402では、配列記憶部34に記憶されたスコア−ノード対応表において、上記ステップS400で探索された要素に対応するスコア配列の要素番号を取得し、取得した要素番号に基づいて、スコア配列に格納されている、ノードID=iのノードのHI側の子ノードのスコアscore[HI(i)]を取得する。
次に、ステップS404では、ノードID=iのノードのラベルの添え字η(i)を取得し、取得したη(i)に基づいて、ステップS100において取得したN次元のベクトルqから、qη(i)を取得し、ステップS402において取得したscore[HI(i)]の値と、取得したqη(i)とに基づいて、上記(2)式に従って、ノードID=iのノードのスコアを算出する。
図11のステップS208では、配列記憶部34に記憶された残り参照数配列から、ノードID=iのノードのHI側の子ノードのノードIDの値HI(i)に対応する要素を取得し、取得した要素の値を1減算して、配列記憶部34に記憶された残り参照数配列の当該要素を更新する。
図11のステップS210では、上記ステップS208で更新された、配列記憶部34に記憶された残り参照数配列の当該要素の値が0か否かを判定する。残り参照数配列の、ノードID=iのHI側の子ノードに対応する当該要素の値が0である場合にはステップS212に移行し、残り参照数配列の当該要素の値が0でない場合にはステップS214に移行する。
次に、ステップS212では、配列記憶部34に記憶されたスコア−ノード対応表において、上記ステップS400で探索された、ノードID=iのノードのHI側の子ノードのノードIDの値HI(i)が格納されている要素の値を0に初期化する。
次に、ステップS214では、変数iの値が最大ノード番号W未満であるか否かを判定する。変数iが最大ノード番号W未満である場合にはステップS216に移行し、それ以外の場合にはステップS220に移行する。
次に、ステップS216では、変数iに1を加えた値を変数iとする。
ステップS218では、ノードID=iの行ノードについて、スコアノード対応表において、当該行ノードのHI側の子ノードのノードIDの値HI(i)が格納されている要素を探索し、探索された要素に対応するスコア配列の要素番号を取得し、取得した要素番号に基づいて、スコア配列に格納されている、当該行ノードのHI側の子ノードのスコアを取得する。そして、当該行ノードについて、ノードID=iの当該行ノードのラベルの添え字η(i)を取得し、当該行ノードについて取得したスコアを、積演算の結果であるM次元ベクトルの要素pη(i)とする。
次に、ステップS220では、ステップS218において取得したM次元ベクトルの要素p1〜Mの結果に基づいて、p1〜Mを各要素とするM次元ベクトルpを、積演算の結果として出力部50に出力して処理を終了する。
以上説明したように、本発明の第1の実施の形態に係る積演算装置によれば、入力された二値行列をゼロサプレス型二分決定グラフに変換し、中間ノードの親ノードの数である参照数を格納する残り参照数配列を作成し、中間ノードの各々について、中間ノードの各子ノードのスコアと、中間ノードに対応する二値行列の要素、及び乗算すべきN次元ベクトルの要素の積との和を、中間ノードのスコアとして算出すると共に、残り参照数配列の子ノードの各々に対する要素に格納された参照数を各々1減算し、参照数が0となった要素に対応する中間ノードのスコアが格納されたスコア配列の要素を未使用にし、かつ、算出された中間ノードのスコアを、スコア配列の未使用となっている要素に格納し、行ノードの各々について、行ノードの子ノードのスコアをスコア配列の要素から取得し、積演算の結果として、M次元ベクトルを出力することにより、二値行列とベクトルとの積との演算において利用するスコア配列の領域を削減することができる。
また、ZDDノード間の参照数を参考にすることで、スコア値を格納する一時的な記憶領域に必要な量を最大で行数分+1に抑えることができる。
次に、第2の実施の形態について説明する。第2の実施の形態では、二値行列Xと行列Yとの積を計算する点が第1の実施の形態とは異なる。なお、第1の実施の形態の積演算装置100と同一の構成となる部分については、同一の符号を付して説明を省略する。
<第2の実施の形態に係る積演算装置の構成>
入力部10は、キーボードなどの入力装置から、図2に示すようなM行N列の二値行列Xと、N行G列の行列Yとを受け付ける。なお、入力部10は、ネットワーク等を介して外部から入力されたものを受け付けるようにしてもよい。なお、本発明の第2の実施の形態においては、M行N列の二値行列Xとして、図2に示す4行4列の二値行列が入力されたものとして説明する。
スコア配列作成部30は、計算の途中結果を保持するための一時記憶領域としての、中間ノード各々のスコアを保持するための各要素からなるスコア配列を作成し、配列記憶部34に記憶する。計算の途中結果を保持するために、要素をG次元のベクトルとすると、少なくとも行数分の要素が必要であり、第2の実施の形態においては、M+1個の要素(G次元ベクトル)からなる1次元配列をスコア配列として作成する。なお、このスコア配列をscoreとする。
積計算部36は、ZDD記憶部24に記憶されている二値行列XのZDDと、配列記憶部34に記憶されている残り参照配列、スコア配列、及びスコア−ノード対応表とに基づいて、入力部10において受け付けたM行N列の二値行列Xと、N行G列の行列Yとの積(p=XY)の計算を行い、その結果を出力部50に出力する。
具体的には、ZDD記憶部24に記憶されている二値行列XのZDDと、入力部10において受け付けたN行G列の行列Yとを受け付ける。そして、ZDD記憶部24に記憶されている二値行列XのZDDの構造を利用して、ノードIDが3からの中間ノードの各々について、ノードIDの昇順に各中間ノードのスコアベクトルを算出する。なお、ノードIDが1又は2のノードは終端ノードであるので当該ノードのスコアベクトルは各値が0のベクトルとする。
また、中間ノードのスコアを算出する場合には、算出したスコアを格納するため、配列記憶部34に記憶されているスコア配列の未使用位置を取得する必要がある。そのため、配列記憶部34に記憶されているスコア−ノード対応表の配列を走査し、値が0となる要素に対応するスコア配列の番地を、未使用位置として取得する。また、スコア−ノード対応表の、スコア配列の未使用位置に対応する要素に、スコアを算出する対象の中間ノードのノードIDを格納し、当該未使用位置の番地に対応するスコア配列の要素を、各値が0のG次元のベクトルで初期化する。そして、下記(4)式により算出対象の中間ノード(ノードID=i)のスコアベクトルを算出し、取得した未使用位置であるスコア配列の要素にスコアベクトルを格納する。
ここで、iはノードIDの値であり、η(i)はノードID=iのノードのラベルを受け取り、当該ラベルの添え字を返す関数である。例えば、図5を例に示すと、η(3)=4、η(5)=2となる。また、Yη(i)は、入力部10において受け付けたN行G列の行列Yのη(i)行目の各要素からなるベクトルであり、ノードID=iのノードに対応する二値行列Xの要素と乗算すべき行列の各要素からなるベクトルである。また、配列記憶部34に記憶されているスコア−ノード対応表を順に走査し、算出対象の中間ノード(ノードID=i)のHI側の子ノードのノードIDの値HI(i)が格納されている要素を探索し、探索された当該要素に対応する配列番号が示す、スコア配列の要素に格納されているスコアベクトルを取得することでscore[HI(i)]の値を取得する。
そして、配列記憶部34に記憶されている残り参照配列の、ノードIDの値HI(i)に対応する要素の値を1減算し、当該要素の値が0となった場合に、配列記憶部34に記憶されているスコア−ノード対応表において、ノードIDの値HI(i)が格納されている要素の値を0に初期化し、対応するスコア配列の要素が未使用位置であることを示すようにする。
また、中間ノードの全てのスコアベクトルが算出された場合、上記(3)式によりベクトルp1〜Mを求め、出力部50により、ベクトルp1〜Mを各行に並べたM行G列の行列pを、積演算の結果として出力する。
ここで、上記(3)式は、ラベルr1〜rMに対応するノードの各々について算出される。そのため、当該ノードの各々に対応するpη(i)のベクトルはpの各行に該当する。そして、pη(i)をメモリ(図示省略)に格納しておき、ラベルr1〜rMに対応する全てのノードについてpη(i)が算出された場合に、pη(i)のベクトルを結合しpとして結果を出力部50に出力する。
<第2の実施の形態に係る積演算装置の作用>
次に、本発明の第2の実施の形態に係る積演算装置100の作用について説明する。まず、入力部10により、M行N列の二値行列X及びN行G列の行列Yが入力され、積演算装置100のROMに記憶されたプログラムを、CPUが実行することにより、図10に示す積演算処理ルーチンが実行される。
まず、ステップS100では、入力部10により入力されたM行N列の二値行列X及びN行G列の行列Yを受け付ける。
次に、ステップS102では、ステップS100において取得したM行N列の二値行列Xを、0,1の値の各々に対する終端ノード、二値行列Xの各行に対応する各行ノード、及び二値行列Xの非ゼロの各要素に対応する各中間ノードを含むZDDのデータ構造に変換し、ZDD記憶部24に記憶する。
次に、ステップS104では、ステップS102において構築したZDDに基づいて、ZDDの各ノードについて親ノードの数である参照数を各々記憶した参照数配列を作成し、ZDD記憶部24に記憶する。
次に、ステップS106では、ZDD記憶部24に記憶されている参照数配列を複製して、残り参照数配列を作成し、配列記憶部34に記憶する。
次に、ステップS108では、ステップS100において取得したM行N列の二値行列X及びN行G列の行列Yに基づいて、計算途中結果を保持するための、各要素をG次元ベクトルとしたM+1個の要素からなる一次元配列のスコア配列を作成する。
次に、ステップS110では、スコア−ノード対応表を作成し、配列記憶部34に記憶する。
次に、ステップS112において、ステップS102において構築した二値行列XのZDDと、配列記憶部34に記憶された残り参照数配列、スコア配列、及びスコア−ノード対応表とに基づいて、ステップS100において受け付けたM行N列の二値行列Xと、N行G列の行列Yとの積(p=XY)の積を計算し、結果を出力部50に出力して処理を終了する。
以上説明したように、本発明の第2の実施の形態に係る積演算装置によれば、入力された二値行列をゼロサプレス型二分決定グラフに変換し、中間ノードの親ノードの数である参照数を格納する残り参照数配列を作成し、中間ノードの各々について、中間ノードの各子ノードのスコアベクトルと、中間ノードに対応する二値行列の要素、及び乗算すべきN行G列の行列の要素からなるベクトルの積との和を、中間ノードのスコアベクトルとして算出すると共に、残り参照数配列の子ノードの各々に対する要素に格納された参照数を各々1減算し、参照数が0となった要素に対応する中間ノードのスコアベクトルが格納されたスコア配列の要素を未使用にし、かつ、算出された中間ノードのスコアベクトルを、スコア配列の未使用となっている要素に格納し、行ノードの各々について、行ノードの子ノードのスコアベクトルをスコア配列の要素から取得し、積演算の結果として、M行G列の行列を出力することにより、二値行列と行列との積との演算において利用するスコア配列を削減することができる。
なお、本発明は、上述した実施形態に限定されるものではなく、この発明の要旨を逸脱しない範囲内で様々な変形や応用が可能である。
例えば、本実施の形態においては、スコア配列の要素数をM+1とする場合について説明したが、これに限定されるものではなく、スコア配列の要素数をM+1以上としてもよい。
また、本実施の形態においては、算出対象の中間ノードのスコアを算出する前に、スコアを格納するためのスコア配列の未使用領域を確保する場合について説明したが、これに限定されるものではない。例えば、算出対象の中間ノードのスコアを算出し、当該算出対象の中間ノードのHI側の子ノード(中間ノード)の参照数を1減算し、当該参照数が0となった場合には、当該算出対象の中間ノードのHI側の子ノードのスコアが格納されている、スコア配列の要素を未使用にしてから、算出対象の中間ノードのスコアを格納するための、スコア配列の未使用領域を確保し、当該確保したスコア配列の要素に当該算出対象の中間ノードのスコアを格納するようにしてもよい。この場合、スコア配列の要素数の最小値はMとなる。
また、固定数の要素からなるスコア配列を作成してから、ノードの各々のスコアをスコア配列に格納する場合を説明したが、これに限定されるものではない。各スコアを格納する一時記憶領域の数を固定せずに、OSのメモリ管理機構(malloc、free等)を用いてスコアを格納する一時記憶領域を動的に用意するようにしてもよい。この場合、mallocを用いて未使用の一時記憶領域を確保し、残り参照数配列の値が0となった場合にfreeを用いてmallocにより確保した一時記憶領域を未使用にする。なお、この場合、ノードの各々と当該ノードのスコアが格納されている一時記憶領域のアドレスとを対応付ける対応表が必要となる。
10 入力部
20 演算部
22 ZDD構築部
24 ZDD記憶部
26 参照数配列作成部
28 残り参照数配列作成部
30 スコア配列作成部
32 対応配列作成部
34 配列記憶部
36 積計算部
50 出力部
100 積演算装置

Claims (7)

  1. 入力されたM行N列の二値行列とN次元ベクトルとの積演算を行う積演算装置であって、
    前記二値行列を、値を示す終端ノード、前記二値行列の各行に対応する各行ノード、及び前記二値行列の非ゼロの各要素に対応する各中間ノードを含むゼロサプレス型二分決定グラフ(Zero-suppressed Binary Decision Diagrams)に変換するZDD構築手段と、
    前記ZDD構築手段により構築されたゼロサプレス型二分決定グラフの中間ノードの各々に対応する各要素を含む配列であり、前記要素の各々に、前記要素に対応する前記中間ノードの親ノードの数である参照数を格納する残り参照数配列を作成する残り参照数配列作成手段と、
    前記ゼロサプレス型二分決定グラフの前記終端ノードから前記行ノードに向かう順序で、前記中間ノードの各々について、スコアを算出するスコア算出手段であって、
    算出対象の中間ノードの各々について、前記積演算の結果を格納するための一時記憶領域に格納された、前記算出対象の中間ノードの子ノードである各中間ノードのスコアと、前記算出対象の中間ノードに対応する前記二値行列の要素、及び乗算すべき前記N次元ベクトルの要素の積との和を、前記算出対象の中間ノードのスコアとして算出すると共に、前記残り参照数配列の前記子ノードである中間ノードの各々に対する要素に格納された参照数を各々1減算して前記残り参照数配列の参照数が0となった要素に対応する中間ノードのスコアが格納された前記一時記憶領域を未使用にし、かつ、前記算出された前記算出対象の中間ノードのスコアを、未使用となっている前記一時記憶領域に格納し、
    前記行ノードの各々について、前記行ノードの子ノードである中間ノードのスコアを前記一時記憶領域から取得し、前記積演算の結果として、M次元ベクトルを出力するスコア算出手段と、
    を含む積演算装置。
  2. 前記積演算の結果を格納するための一時記憶領域として、少なくともM個の要素からなるスコア配列を作成するスコア配列作成手段を更に含み、
    前記スコア算出手段は、算出対象の中間ノードの各々について、前記スコア配列に格納された、前記算出対象の中間ノードの各子ノードである中間ノードのスコアと、前記算出対象の中間ノードに対応する前記二値行列の要素、及び乗算すべき前記N次元ベクトルの要素の積との和を、前記算出対象の中間ノードのスコアとして算出すると共に、前記残り参照数配列の前記子ノードである中間ノードの各々に対する要素に格納された参照数を各々1減算し、前記残り参照数配列の参照数が0となった要素に対応する中間ノードのスコアが格納された、前記スコア配列の要素を未使用にし、かつ、前記算出された前記算出対象の中間ノードのスコアを、未使用となっている前記スコア配列の要素に格納し、
    前記行ノードの各々について、前記行ノードの子ノードである中間ノードのスコアを前記スコア配列から取得し、前記積演算の結果として、M次元ベクトルを出力する請求項1記載の積演算装置。
  3. 入力されたM行N列の二値行列とN行G列の行列との積演算を行う積演算装置であって、
    前記二値行列を、値を示す終端ノード、前記二値行列の各行に対応する各行ノード、及び前記二値行列の非ゼロの各要素に対応する各中間ノードを含むゼロサプレス型二分決定グラフ(Zero-suppressed Binary Decision Diagrams)に変換するZDD構築手段と、
    前記ZDD構築手段により構築されたゼロサプレス型二分決定グラフの中間ノードの各々に対応する各要素を含む配列であり、前記要素の各々に、前記要素に対応する前記中間ノードの親ノードの数である参照数を格納する残り参照数配列を作成する残り参照数配列作成手段と、
    前記ゼロサプレス型二分決定グラフの前記終端ノードから前記行ノードに向かう順序で、前記中間ノードの各々について、G次元のスコアベクトルを算出するスコア算出手段であって、
    算出対象の中間ノードの各々について、前記積演算の結果を格納するための一時記憶領域に格納された、前記算出対象の中間ノードの各子ノードである中間ノードのスコアベクトルと、前記算出対象の中間ノードに対応する前記二値行列の要素、及び乗算すべき前記N行G列の行列のうちのG次元ベクトルの積との和を、前記算出対象の中間ノードのスコアベクトルとして算出すると共に、前記残り参照数配列の前記子ノードである中間ノードの各々に対する要素に格納された参照数を各々1減算し、前記残り参照数配列の参照数が0となった要素に対応する中間ノードのスコアベクトルが格納された前記一時記憶領域を未使用にし、かつ、前記算出された前記算出対象の中間ノードのスコアベクトルを、未使用となっている前記一時記憶領域に格納し、
    前記行ノードの各々について、前記行ノードの子ノードである中間ノードのスコアベクトルを前記一時記憶領域から取得し、前記積演算の結果として、M行G列の行列を出力するスコア算出手段と、
    を含む積演算装置。
  4. 前記積演算の結果を格納するための一時記憶領域として、要素をG次元のベクトルとした少なくともM個の要素からなるスコア配列を作成するスコア配列作成手段を更に含み、
    前記スコア算出手段は、算出対象の中間ノードの各々について、前記スコア配列に格納された、前記算出対象の中間ノードの各子ノードである中間ノードのスコアベクトルと、前記算出対象の中間ノードに対応する前記二値行列の要素、及び乗算すべき前記N行G列の行列のうちのG次元ベクトルの積との和を、前記算出対象の中間ノードのスコアベクトルとして算出すると共に、前記残り参照数配列の前記子ノードである中間ノードの各々に対する要素に格納された参照数を各々1減算し、前記残り参照数配列の参照数が0となった要素に対応する中間ノードのスコアベクトルが格納された、前記スコア配列の要素を未使用にし、かつ、前記算出された前記算出対象の中間ノードのスコアベクトルを、未使用となっている前記スコア配列の要素に格納し、
    前記行ノードの各々について、前記行ノードの子ノードである中間ノードのスコアベクトルを前記スコア配列から取得し、前記積演算の結果として、M行G列の行列を出力する請求項3記載の積演算装置。
  5. ZDD構築手段と、残り参照数配列作成手段と、スコア算出手段と、を含み、入力されたM行N列の二値行列とN次元ベクトルとの積演算を行う積演算装置における積演算方法であって、
    前記ZDD構築手段によって、前記二値行列を、値を示す終端ノード、前記二値行列の各行に対応する各行ノード、及び前記二値行列の非ゼロの各要素に対応する各中間ノードを含むゼロサプレス型二分決定グラフ(Zero-suppressed Binary Decision Diagrams)に変換するステップと、
    前記参照数配列作成手段によって、前記ZDD構築手段により構築されたゼロサプレス型二分決定グラフの中間ノードの各々に対応する各要素を含む配列であり、前記要素の各々に、前記要素に対応する前記中間ノードの親ノードの数である参照数を格納する残り参照数配列を作成するステップと、
    前記算出手段によって、前記ゼロサプレス型二分決定グラフの前記終端ノードから前記行ノードに向かう順序で、前記中間ノードの各々について、スコアを算出するステップであって、
    前記算出手段によって、算出対象の中間ノードの各々について、前記積演算の結果を格納するための一時記憶領域に格納された、前記算出対象の中間ノードの子ノードである各中間ノードのスコアと、前記算出対象の中間ノードに対応する前記二値行列の要素、及び乗算すべき前記N次元ベクトルの要素の積との和を、前記算出対象の中間ノードのスコアとして算出すると共に、前記残り参照数配列の前記子ノードである中間ノードの各々に対する要素に格納された参照数を各々1減算して前記残り参照数配列の参照数が0となった要素に対応する中間ノードのスコアが格納された前記一時記憶領域を未使用にし、かつ、前記算出された前記算出対象の中間ノードのスコアを、未使用となっている前記一時記憶領域に格納し、
    前記行ノードの各々について、前記行ノードの子ノードである中間ノードのスコアを前記一時記憶領域から取得し、前記積演算の結果として、M次元ベクトルを出力するステップと、
    を含む積演算方法。
  6. ZDD構築手段と、残り参照数配列作成手段と、スコア算出手段と、を含み、入力されたM行N列の二値行列とN行G列の行列との積演算を行う積演算装置における積演算方法であって、
    前記ZDD構築手段によって、前記二値行列を、値を示す終端ノード、前記二値行列の各行に対応する各行ノード、及び前記二値行列の非ゼロの各要素に対応する各中間ノードを含むゼロサプレス型二分決定グラフ(Zero-suppressed Binary Decision Diagrams)に変換するステップと、
    前記残り参照数配列作成手段によって、前記ZDD構築手段により構築されたゼロサプレス型二分決定グラフの中間ノードの各々に対応する各要素を含む配列であり、前記要素の各々に、前記要素に対応する前記中間ノードの親ノードの数である参照数を格納する残り参照数配列を作成するステップと、
    前記スコア算出手段によって、前記ゼロサプレス型二分決定グラフの前記終端ノードから前記行ノードに向かう順序で、前記中間ノードの各々について、G次元のスコアベクトルを算出するステップであって、
    前記スコア算出手段によって、算出対象の中間ノードの各々について、前記積演算の結果を格納するための一時記憶領域に格納された、前記算出対象の中間ノードの各子ノードである中間ノードのスコアベクトルと、前記算出対象の中間ノードに対応する前記二値行列の要素、及び乗算すべき前記N行G列の行列のうちのG次元ベクトルの積との和を、前記算出対象の中間ノードのスコアベクトルとして算出すると共に、前記残り参照数配列の前記子ノードである中間ノードの各々に対する要素に格納された参照数を各々1減算し、前記残り参照数配列の参照数が0となった要素に対応する中間ノードのスコアベクトルが格納された前記一時記憶領域を未使用にし、かつ、前記算出された前記算出対象の中間ノードのスコアベクトルを、未使用となっている前記一時記憶領域に格納し、
    前記行ノードの各々について、前記行ノードの子ノードである中間ノードのスコアベクトルを前記一時記憶領域から取得し、前記積演算の結果として、M行G列の行列を出力するステップと、
    を含む積演算方法。
  7. コンピュータを、請求項1〜4の何れか1項記載の積演算装置を構成する各手段として機能させるためのプログラム。
JP2013056980A 2013-03-19 2013-03-19 積演算装置、方法、及びプログラム Active JP5860829B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2013056980A JP5860829B2 (ja) 2013-03-19 2013-03-19 積演算装置、方法、及びプログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2013056980A JP5860829B2 (ja) 2013-03-19 2013-03-19 積演算装置、方法、及びプログラム

Publications (2)

Publication Number Publication Date
JP2014182615A JP2014182615A (ja) 2014-09-29
JP5860829B2 true JP5860829B2 (ja) 2016-02-16

Family

ID=51701263

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2013056980A Active JP5860829B2 (ja) 2013-03-19 2013-03-19 積演算装置、方法、及びプログラム

Country Status (1)

Country Link
JP (1) JP5860829B2 (ja)

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH07239843A (ja) * 1994-02-25 1995-09-12 Sony Corp 並列演算処理装置
JP2002032356A (ja) * 2000-07-18 2002-01-31 Victor Co Of Japan Ltd 再帰型離散フーリエ変換装置
US20040229688A1 (en) * 2003-05-12 2004-11-18 Electronic Arts Inc. Methods and apparatus for playing video sequences while loading game data
JP5634941B2 (ja) * 2011-05-18 2014-12-03 日本電信電話株式会社 演算装置、演算方法および演算プログラム

Also Published As

Publication number Publication date
JP2014182615A (ja) 2014-09-29

Similar Documents

Publication Publication Date Title
Fang et al. Lower bounds for centered and wrap-around L2-discrepancies and construction of uniform designs by threshold accepting
Neumann Expected runtimes of a simple evolutionary algorithm for the multi-objective minimum spanning tree problem
US9524316B2 (en) Processing search queries using a data structure
Cano et al. Penniless propagation in join trees
Wang et al. Improved multi-order distributed HOSVD with its incremental computing for smart city services
Chen et al. Nearly optimal one-to-many parallel routing in star networks
CN105824974B (zh) 数据分析处理的方法和系统
CN111209410B (zh) 一种基于锚点的动态知识图谱表示学习方法及系统
Al-Adwan et al. Solving traveling salesman problem using parallel repetitive nearest neighbor algorithm on OTIS-Hypercube and OTIS-Mesh optoelectronic architectures
JP5059132B2 (ja) 地域情報検索サーバ及び地域情報検索方法
Butz et al. A simple graphical approach for understanding probabilistic inference in Bayesian networks
JP5364996B2 (ja) 類似ユーザ発見システム、類似ユーザ発見方法および類似ユーザ発見プログラム
US11669727B2 (en) Information processing device, neural network design method, and recording medium
JP5860829B2 (ja) 積演算装置、方法、及びプログラム
CN116633800A (zh) 一种网络拓扑的构建方法、装置、设备及介质
Poormohammadi et al. TripNet: a method for constructing rooted phylogenetic networks from rooted triplets
Grimme Picking a uniformly random point from an arbitrary simplex
Mehrafsa et al. Vectorising k-truss decomposition for simple multi-core and simd acceleration
CN114047926A (zh) 数组计算表达语言的转换方法、装置、设备及存储介质
CN110210691B (zh) 资源推荐方法、装置、存储介质及设备
JP5736336B2 (ja) 行列ベクトル積演算装置、行列ベクトル積演算方法、及び行列ベクトル積演算プログラム
JP2014182753A (ja) Ppr演算装置、方法、及びプログラム
Slonkina et al. Analysis and optimization of the packing tree search algorithm for the knapsack problem
Iiduka Almost sure convergence of random projected proximal and subgradient algorithms for distributed nonsmooth convex optimization
CN115204149B (zh) 基于hdp等价描述的文本主题提取方法、设备及存储介质

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20150129

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20151014

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: 20151124

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20151221

R150 Certificate of patent or registration of utility model

Ref document number: 5860829

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150