(57)【要約】      （修正有）【課題】分枝限定法を用いて実数行列を分解する際の演算効率を向上させる。【解決手段】行列分解装置１０は、係数行列Ｃを決定する係数行列決定部１３と、係数行列Ｃの少なくとも１行がそれぞれ異なる複数の並べ替え係数行列Ａ´のうちのいずれかを選択する並べ替え部１４と、並べ替え係数行列Ａ´を用いて、実数行列Ｗの行ごとに、分枝限定法によって離散値からなる並べ替え最適解ベクトルｘ´を求める分枝限定探索部１５と、並べ替え最適解ベクトルｘ´を並べ替え部１４による並べ替えに基づいて並べ戻して、最適解ベクトルを求める並び戻し部１６と、各行の最適解ベクトルからなる基底行列Ｍと、係数行列Ｃとを出力する分解行列出力部１８とを備える。並べ替え部１４は、所定の基準に基づいて、分枝限定法における木構造の枝刈りが効率的に行われる並べ替え係数行列Ａ´を選択する。【選択図】図１
2019079367.tif 000002
【特許請求の範囲】
【請求項１】
実数行列（Ｗ）を離散値からなる基底行列（Ｍ）と実数からなる係数行列（Ｃ）との積に分解する行列分解装置（１０）であって、
係数行列（Ｃ）を決定する係数行列決定部（１３）と、
前記係数行列（Ｃ）の少なくとも１行がそれぞれ異なる複数の並べ替え係数行列（Ａ´）のうちのいずれかを選択する並べ替え部（１４）と、
前記並べ替え係数行列（Ａ´）を用いて、前記実数行列（Ｗ）の行ごとに、分枝限定法によって離散値からなる並べ替え最適解ベクトル（ｘ´）を求める分枝限定探索部（１５）と、
前記並べ替え最適解ベクトル（ｘ´）を前記並べ替え部（１４）による並べ替えに基づいて並べ戻して、最適解ベクトル（ｘ）を求める並び戻し部（１６）と、
各行の前記最適解ベクトル（ｘ）からなる基底行列（Ｍ）と、前記係数行列（Ｃ）とを出力する分解行列出力部（１８）と、
を備え、
前記並べ替え部（１４）は、所定の基準に基づいて、前記分枝限定法における木構造の枝刈りが効率的に行われる前記並べ替え係数行列（Ａ´）を選択する、行列分解装置。
【請求項２】
前記並べ替え部（１４）は、前記係数行列（Ｃ）の特定の２行の組み合わせがそれぞれ異なり、他の行が任意に並べられた複数の並べ替え行列（Ａ´）の中からいずれかを選択する、請求項１に記載の行列分解装置。
【請求項３】
前記所定の条件は、前記木構造の２段目までのノードにおける部分制約問題の誤差の平均が最大になることである、請求項２に記載の行列分解装置。
【請求項４】
前記所定の条件は、前記木構造の２段目までのノードにおける部分制約問題の最小の誤差が最大になることである、請求項２に記載の行列分解装置。
【請求項５】
実数行列Ｗを−１及び１の２値からなる基底行列Ｍと実数からなる係数行列Ｃとの積に分解するために、
評価関数
【数１】
2019079367.tif 000023
において、
【数２】
2019079367.tif 000024
として、行ごとの最適解ベクトルｘを
【数３】
2019079367.tif 000025
として求める行列分解装置（１０）であって、
前記行列Ａの列を並べ替えることで、先頭の２列の組み合わせがそれぞれ異なる複数の並べ替え行列Ａ´を生成し、前記複数の並べ替え行列Ａ´の中から枝刈りが効果的に進む並べ替え行列Ａ´を選択する並べ替え部（１４）と、
前記並べ替え部にて選択された前記並べ替え行列Ａ´を用いて、
【数４】
2019079367.tif 000026
を分枝限定法で解いて、並べ替え最適解ベクトルｘ´を求める分枝限定探索部（１５）と、
前記並べ替え最適解ベクトルｘ´を選択された前記並べ替え行列Ａ´の並べ替えに従って並び戻して最適解ベクトルｘを求める並び戻し部（１６）と、
を備え、
前記分枝限定探索部（１５）は、前記複数の並べ替え行列Ａ´について、木構造の２段目までのノードにおける部分制約問題の誤差を計算し、
前記並べ替え部（１４）は、前記誤差に基づいて並べ替え行列Ａ´を選択する、行列分解装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、実数で構成される行列を、実数値を持つ係数行列と整数値のみを持つ基底行列との積に分解する行列分解装置及び行列分解方法に関する。
【背景技術】
【０００２】
画像認識の演算には、実数で構成されるベクトル（実数ベクトル）と実数で構成される行列（実数行列）との積演算が含まれることがある。例えば、ＳＶＭ（Support Vector Machine）には、実数ベクトルである特徴ベクトルと、実数行列である重み行列との積演算が含まれ、ＣＮＮ（Convolutional Neural Network）には、実数ベクトルである入力層（ベクトル）と実数行列である畳み込みフィルタ（行列）との積演算が含まれる。このような実数ベクトルと実数行列との積演算の演算負荷は大きく、即ち長い演算時間を要し、かつ、メモリ消費量が大きくなる。
【０００３】
そこで、従来より、実数ベクトルを整数値のみを持つベクトルに変換するとともに、実数行列を整数値のみを持つ基底行列と実数値を持つ係数行列との積に分解することで積演算の負荷を軽減することが提案されている。
【０００４】
実数行列Ｗを係数行列Ｃと基底行列Ｍに分解する問題は、以下の式（１）に帰着できる。
【数１】
2019079367.tif 000003
【０００５】
この問題は、制約付き最適化問題と捉えることができるので、分枝限定法で解くことが可能である。分枝限定法は、要素をすべて決定する途中の段階で制約なし最適化問題として残りの要素が実現し得る最小の制約なし誤差を計算する。この最小の制約なし誤差よりも現在得られている最小の誤差（暫定最小誤差）の方が小さければ、残りの要素の如何に関わらず、暫定最小誤差よりも誤差を小さくする解は得られないことになり、探索木の枝刈りが可能となる。分枝限定法は、このような枝刈りによって探索範囲を決定論的に狭めていき、探索すべき枝がなくなったときに、そのときの暫定最小誤差を実現する組み合わせを大域最適値として出力する。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２０１４−１４２８４９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
分枝限定法は、上述のように厳密に大域最適解が得られるという利点があるが、枝刈りがうまくいかない場合には、演算時間が大きくなりすぎるという問題がある。すなわち、分枝限定法では、早期に大域最適解に近い解が得られた場合には枝刈りが効率的に進む可能性があるが、そうでなければ効率が極めて悪くなってしまう。
【０００８】
本発明は、上記の問題に鑑みてなされたものであり、分枝限定法を用いて実数行列を分解する際の演算効率を向上させることを目的とする。
【課題を解決するための手段】
【０００９】
本発明の一態様は、実数行列（Ｗ）を離散値からなる基底行列（Ｍ）と実数からなる係数行列（Ｃ）との積に分解する行列分解装置（１０）であって、係数行列（Ｃ）を決定する係数行列決定部（１３）と、前記係数行列（Ｃ）の少なくとも１行がそれぞれ異なる複数の並べ替え係数行列（Ａ´）のうちのいずれかを選択する並べ替え部（１４）と、前記並べ替え係数行列（Ａ´）を用いて、前記実数行列（Ｗ）の行ごとに、分枝限定法によって離散値からなる並べ替え最適解ベクトル（ｘ´）を求める分枝限定探索部（１５）と、前記並べ替え最適解ベクトル（ｘ´）を前記並べ替え部（１４）による並べ替えに基づいて並べ戻して、最適解ベクトル（ｘ）を求める並び戻し部（１６）と、各行の前記最適解ベクトル（ｘ）からなる基底行列（Ｍ）と、前記係数行列（Ｃ）とを出力する分解行列出力部（１８）とを備え、前記並べ替え部（１４）は、所定の基準に基づいて、前記分枝限定法における木構造の枝刈りが効率的に行われる前記並べ替え係数行列（Ａ´）を選択する行列分解装置である。
【００１０】
この構成により、実数行列（Ｗ）を分解するための係数行列（Ｃ）が、分枝限定法における枝切りが効率的に行われるように並べ替えられるので、分枝限定法によって基底行列（Ｍ）を早期に求めることができる可能性が向上し、演算効率を向上できる。
【００１１】
上記の行列分解装置（１０）において、前記並べ替え部（１４）は、前記係数行列（Ｃ）の特定の２行の組み合わせがそれぞれ異なり、他の行が任意に並べられた複数の並べ替え行列（Ａ´）の中からいずれかを選択してよい。
【００１２】
上記の行列分解装置（１０）において、前記所定の条件は、前記木構造の２段目までのノードにおける部分制約問題の誤差の平均が最大になることであってよい。
【００１３】
上記の行列分解装置（１０）において、前記所定の条件は、前記木構造の２段目までのノードにおける部分制約問題の最小の誤差が最大になることであってよい。
【００１４】
本発明の別の態様は、実数行列Ｗを−１及び１の２値からなる基底行列Ｍと実数からなる係数行列Ｃとの積に分解するために、評価関数
【数２】
2019079367.tif 000004
において、
【数３】
2019079367.tif 000005
として、行ごとの最適解ベクトルｘを
【数４】
2019079367.tif 000006
として求める行列分解装置（１０）であって、前記行列Ａの列を並べ替えることで、先頭の２列の組み合わせがそれぞれ異なる複数の並べ替え行列Ａ´を生成し、前記複数の並べ替え行列Ａ´の中から枝刈りが効果的に進む並べ替え行列Ａ´を選択する並べ替え部（１４）と、前記並べ替え部にて選択された前記並べ替え行列Ａ´を用いて、
【数５】
2019079367.tif 000007
を分枝限定法で解いて、並べ替え最適解ベクトルｘ´を求める分枝限定探索部（１５）と、前記並べ替え最適解ベクトルｘ´を選択された前記並べ替え行列Ａ´の並べ替えに従って並び戻して最適解ベクトルｘを求める並び戻し部（１６）とを備え、前記分枝限定探索部（１５）は、前記複数の並べ替え行列Ａ´について、木構造の２段目までのノードにおける部分制約問題の誤差を計算し、前記並べ替え部（１４）は、前記誤差に基づいて並べ替え行列Ａ´を選択する行列分解装置である。
【００１５】
この構成によっても、実数行列（Ｗ）を分解するための係数行列（Ｃ）が、分枝限定法における枝切りが効率的に行われるように並べ替えられるので、分枝限定法によって基底行列（Ｍ）を早期に求めることができる可能性が向上し、演算効率を向上できる。
【発明の効果】
【００１６】
本発明によれば、実数行列（Ｗ）を分解するための係数行列（Ｃ）が、分枝限定法における枝切りが効率的に行われるように並べ替えられるので、分枝限定法によって基底行列（Ｍ）を早期に求めることができる可能性が向上し、演算効率を向上できる。
【図面の簡単な説明】
【００１７】
【図１】本発明の実施の形態の行例分解装置の構成を示す図
【図２】本発明の実施の形態の実数行列の分解を示す図
【図３】本発明の実施の形態の分枝限定法で用いられる探索木を示す図
【図４】本発明の実施の形態の行列Ａの列を並べ替える例を示す図
【図５】本発明の実施の形態の行列Ａの列の並べ替えによる木構造の変更を示す図
【図６】本発明の実施の形態の並べ替え行列Ａ´において、第１列、第２列をそれぞれもとの行列Ａの第１列、第３列としたときの２段目のノードの部分制約問題の最小誤差を示す図
【図７】本発明の実施の形態の並べ替え行列Ａ´において、第１列、第２列をそれぞれもとの行列Ａの第３列、第４列としたときの２段目のノードの部分制約問題の最小誤差を示す図
【図８】本発明の実施の形態の行列分解装置にて実行される行列分解方法のフロー図
【発明を実施するための形態】
【００１８】
以下、図面を参照して本発明の実施の形態を説明する。なお、以下に説明する実施の形態は、本発明を実施する場合の一例を示すものであって、本発明を以下に説明する具体的構成に限定するものではない。本発明の実施にあたっては、実施の形態に応じた具体的構成が適宜採用されてよい。
【００１９】
図１は、本発明の実施の形態の行例分解装置の構成を示す図である。図１に示す構成は、ＣＰＵ、メモリ、記憶装置等を備えたコンピュータのＣＰＵが本実施の形態の行列分解プログラムを実行することにより実現される。本実施の形態の行列分割装置１０は、実数行列入力部１１と、ベクトル抽出部１２と、係数行列決定部１３と、並べ替え部１４と、分枝限定探索部１５と、並べ戻し部１６と、分解誤差判定部１７と、分解行列出力部１８とを備えている。
【００２０】
図２は、実数行列の分解を示す図である。行列分解装置１０は、図２に示すようにＤ行Ｌ列の実数行列Ｗを入力して、それをＤ行Ｋ列（Ｋは基底数）の離散値からなる基底行列Ｍと、Ｋ行Ｌ列の係数行列Ｃとの積に分解して、得られた基底行列Ｍと係数行列Ｃを出力する。本実施の形態では、基底行列Ｍは、−１と１とからなる二値行列とするが、基底行列Ｍは、−１、０、１からなる三値行列であっても、任意の整数からなる行列であってもよい。
【００２１】
実数行列入力部１１は、外部から入力された分解すべき実数行列Ｗを取得する。ベクトル抽出部１２は、入力された実数行列Ｗの各行の行ベクトルの転置ベクトルを列ベクトル（実数ベクトル）ｂとして抽出して、行ごとに分枝限定探索部１５に出力する。係数行列決定部１３は、係数行列Ｃを決定して並べ替え部１４に出力する。
【００２２】
並べ替え部１４は、係数行列決定部１３から入力された係数行列Ｃの転置行列Ａの列を並べ替えて並べ替え行列Ａ´を生成して分枝限定探索部１４に出力する。並べ替え行列Ａ´の生成の詳細な説明に先立って、一般的な分枝限定法について説明する。上述のように、実数行列Ｗを係数行列Ｃと基底行列Ｍに分解する問題は、式（１）に帰着できる。
【数６】
2019079367.tif 000008
【００２３】
この式（１）において、コスト関数は、
【数７】
2019079367.tif 000009
である。分枝限定法において一回の計算で求める基底行列Ｍの要素は、図２に示す基底行列Ｍの行ベクトルｍである。
【００２４】
分枝限定法は、基底行列Ｍの行ごとの探索を行う。行ベクトルｍの場合は表記が複雑になるので、基底行列Ｍの各行の行ベクトルｍの転置ベクトルを列ベクトルｘとして、以下の説明では、以下のとおりに再定義をする。
【数８】
2019079367.tif 000010
【００２５】
上記のように再定義すると、コスト関数は、
【数９】
2019079367.tif 000011
となり、行ごとの最適解は、下式（１´）のとおり再定義される。
【数１０】
2019079367.tif 000012
【００２６】
図３は、分枝限定法で用いられる探索木を示す図である。図３の例において、基底行列Ｍは−１、１を要素とする二値行列であり、探索木は各ノードが子ノードとして−１、１をもつ二分木である。また、図３の例では、基底数Ｋ＝４である。図３において、ｋ段目（深さｋ番目）のノードは、ベクトルｘのｋ番目の要素ｘｋの値を−１にするか１にするかに該当する。二分木を最上段のルートノードから最下段のリーフノードまで辿るとｘ１〜ｘＫの値が与えられて（図３の例では、ｘ１〜ｘ４の値が与えられて）、そのときの誤差ｅを計算できる。
【００２７】
分枝限定法は、ルートノードからリーフノードまでの２のＫ乗（基底行列Ｍの列サイズ）とおりの経路の中から、論理的に辿る必要のないノードを刈り取り、探索範囲を削減しながら、大域最適解を探索する。
【００２８】
あるノードに着目すると、分枝限定法は、その着目ノードの２つの子ノードのうちの左側の子ノードがまだ枝刈りされていない場合には、左側の子ノードを次のノードとして決定する。また、分枝限定法は、リーフノードまでたどり着いて誤差ｅを計算すると、そのリーフノードを枝刈りする。着目ノードの２つの子ノードが両方とも枝刈りされている場合は、その着目ノード自体が枝刈りされる。
【００２９】
いま、ｋ段目のあるノードに着目したとき、分枝限定法は、ルートノードからその着目ノードまで辿った経路によって決まるｘ１〜ｘｋの値を並べ、以下のとおりに部分問題を作成する。
【数１１】
2019079367.tif 000013
【００３０】
分枝限定法は、この部分問題を下式のように、離散制約のない実数ベクトルｘｆを求める新たな問題として解く。
【数１２】
2019079367.tif 000014
【００３１】
分枝限定法は、最小二乗法などを使ってこの部分問題を解くことで、最小値（最小誤差）を求める。この最小誤差が暫定最小誤差よりも大きい場合には、分枝限定法は、このノードを枝刈りする。これは、ｘｆは実数ベクトルであるため、このノードより下の探索木においていかなる最適な経路を辿ってもこの最小値よりも誤差が小さい解を得ることができないためである。
【００３２】
着目したノードがリーフノードである場合は、ルートノードから当該リーフノードまでの−１と１の列が解の候補となるので、分枝限定法は、ルートノードから当該リーフノードまでのｘｋの値を並べてベクトルｘを作成し、その誤差ｅを計算する。分枝限定法は、誤差ｅが暫定最小誤差よりも小さい場合には、その誤差ｅで暫定最小誤差を更新して保存する。また、分枝限定法は、そのときの解（即ち、当該暫定最小誤差を算出した経路ｘ１〜ｘＫの組み合わせからなるベクトルｘ）を暫定最適解ベクトルとして保存する。分枝限定法は、すべてのノードが枝刈りされたとき、そのときの暫定最適解を大域最適解として出力する。
【００３３】
上記から分かるように、分枝限定法は、木構造の上方のレイヤで枝刈りがされると、探索ノードの数が大きく減って早期に大域最適解に到達できる。ここで、コスト関数
【数１３】
2019079367.tif 000015
は、行列Ａの列を並べ替えても値が変わらない。そこで、本実施の形態では、行列Ａの列を並べ替えて、早期に枝刈りが進んで大域最適解に到達できる並べ替え行列Ａ´を生成し、この並べ替え行列Ａ´を用いて分枝限定法による探索を行う。
【００３４】
図４は、行列Ａの列を並べ替える例を示す図である。図４に示すように、行列Ａの列を並べ替えることで、それに応じて行を並べ替えられた最適解ベクトルｘを求めることができる。図４の例では、行列Ａの第１列と第４列とを入れ替える例を示している。これに応じて、最適解ベクトルｘも第１行と第４行とが入れ替われる。
【００３５】
図５は、行列Ａの列の並べ替えによる木構造の変更を示す図である。図５に示すように、行列Ａの列の並べ替えは、分枝限定法における木構造の段を上下に入れ替えることに相当する。図５は、図４の並べ替えに対応しており、行列Ａの第１列と第４列を並べ替える場合の木構造の変更を示している。
【００３６】
いま、行列Ａの列数をＫとすると、行列Ａの列ベクトルを並べ替えた並べ替え行列Ａ´は、Ｋの階乗（Ｋ！）通りになる。したがって、可能なすべての並べ替えパターンの中から探索に用いる並べ替え行列Ａ´を選択する場合には、候補数が多すぎて計算負荷が大きくなる。さらに、木構造の下方のレイヤで枝刈りが効率的に進んでも計算量の削減に対する貢献度は大きくない。
【００３７】
そこで、本実施の形態の並べ替え部１４は、行列Ａにおける先頭のｎ行は全パターン調べて、それ以外の列はランダムに並べることで、複数の並べ替え行列Ａ´を生成し、その中から最適な並べ替え行列Ａ´を選択する。こうすることで、例えば、ｎ＝２とした場合には、探索数は、
【数１４】
2019079367.tif 000016
通りとなる。
【００３８】
さらに、−１と１の値域の場合には、木構造の第ｎ段のすべてのノードの部分制約問題の最小誤差を求める必要があり、その回数は、
【数１５】
2019079367.tif 000017
回となる。
【００３９】
図６は、並べ替え行列Ａ´において、第１列、第２列をそれぞれもとの行列Ａの第１列、第３列としたときの２段目のノードの部分制約問題の最小誤差を示す図である。図６の例において、２段目のノードの部分制約問題の最小誤差は、１０、７、５、１０である。
【００４０】
図７は、並べ替え行列Ａ´において、第１列、第２列をそれぞれもとの行列Ａの第３列、第４列としたときの２段目のノードの部分制約問題の最小誤差を示す図である。図７の例において、２段目のノードの部分制約問題の最小誤差は、９、１１、１３、１５である。
【００４１】
図６の例と図７の例とを比較すると、図７の例の方が誤差が大きく、枝刈りが上段で行われる可能性が高いと推測される。よって、図６の例と図７の例との比較では、図７の例の方が有利である。このようにして、すべての並べ替え行列Ａ´について比較をして早期に２段目のノードで枝刈りが行わる可能性が最も高い並べ替え行列Ａ´を選択することで、枝刈りが早く進むことが期待できる。
【００４２】
ここで、各並べ替え行列Ａ´について得られた複数の部分制約問題の最小誤差どうしを比較して早期に２段目のノードで枝刈りが行わる可能性が最も高い並べ替え行列Ａ´を選択する方法として、以下の方法を採用できる。第１の方法は、２段目のノードのすべての部分制約問題の最小誤差の平均どうしを比較して平均値が最も大きい並べ替え行列Ａ´を選択する方法である。第２の方法は、２段目のノードの複数の部分制約問題の最小誤差のうちの最小のものが最も大きい並べ替え行列Ａ´を選択する方法である。第３の方法は、２段目のノードの複数の部分制約問題の最小誤差において最小のものと最大のものとの差分が最も大きい並べ替え行列Ａ´を選択する方法である。
【００４３】
また、各並べ替え行列Ａ´について１段目のノード（ルートノードの子ノード）の部分制約問題の最小誤差を求めて、２段目のノードの最小誤差に加えて１段目のノードの最小誤差も加味して並べ替え行列Ａ´を選択してもよい。例えば、１段目のノードの部分制約問題の最小誤差も含めたすべての部分制約問題の最小誤差の平均どうしを比較して平均値が最も大きい並べ替え行列Ａ´を選択してよい。
【００４４】
並べ替え部１４は、係数行列決定部１３にて決定された係数行列Ｃの転置行列Ａについて、第１列と第２列を順に指定してその他の列をランダムに並べることで、第１列と第２列とがそれぞれ異なる複数の並べ替え行列Ａ´を生成して、順に分枝限定探索部１５に出力する。
【００４５】
分枝限定探索部１５は、並べ替え部１４から入力された各並べ替え行列Ａ´を用いて、２段目の４つのノードについて、それぞれ部分制約問題の最小誤差を算出して、並べ替え部１４に返す。
【００４６】
行列Ａを並べ替えることで、部分制約問題は、
【数１６】
2019079367.tif 000018
となり、部分制約問題の最小誤差は、下式（２）のとおりとなる。
【数１７】
2019079367.tif 000019
但し、
【数１８】
2019079367.tif 000020
分枝限定探索部１５は、式（２）を最小二乗法によって解くことで、最小誤差を求める。
【００４７】
並べ替え部１４は、すべての並べ替え行列Ａ´について、２段目のノードの部分制約問題の最小誤差に基づいて、早期に２段目のノードで枝刈りが行わる可能性が最も高い並べ替え行列Ａ´を選択する。並べ替え部１４は、選択した並べ替え行列Ａ´を分枝限定探索部１５に出力する。
【００４８】
分枝限定探索部１５は、実数行列Ｗの転置行列の列ベクトルｂをベクトル抽出部１２から取得し、並べ替え行列Ａ´を並べ替え部１４から取得し、これらを用いて分枝限定法により、大域最適解を求め、これを列ベクトルｂに対応する並べ替え最適解ベクトルｘ´として出力する。分枝限定探索部１５は、すべての列ベクトルｂについてのこの処理を行う。分枝限定探索部１５は、すべての列ベクトルｂについての並べ替え最適解ベクトルｘ´を並べ替え行列Ａ´とともに並べ戻し部１６に出力する。
【００４９】
並べ戻し部１６は、並べ替え行列Ａ´及び各並べ替え最適解ベクトルｘ´を、並べ替え行列Ａ´を生成したときの並べ替えに従って並べ戻して、行列Ａ及び最適解ベクトルｘを生成する。並べ戻し部１６は、さらに、複数の最適解ベクトルｘを基底行列Ｍの行ベクトルｍに戻し、行列Ａを係数行列Ｃに戻して、得られた基底行列Ｍ及び係数行列Ｃを分解誤差判定部１７に出力する。なお、係数行列Ｃは、係数行列決定部１３から分解誤差判定部１７に直接与えられてもよい。
【００５０】
分解誤差判定部１７は、基底行列Ｍとそれを求めた係数行列Ｃとを用いて、実数行列Ｗと、基底行列Ｍと係数行列Ｃとの積との差分を分解誤差Ｅとして求める。分解誤差判定部１７は、分解誤差Ｅが暫定最小分解誤差より小さいか否かを判断し、分解誤差Ｅが、暫定最小分解誤差より小さい場合には、当該分解誤差Ｅで暫定最小分解誤差を更新し、当該分解誤差Ｅを与えた基底行列Ｍ及び係数行列Ｃを保存する。
【００５１】
分解誤差判定部１７は、基底行列Ｍを係数行列決定部１３に出力する。係数行列決定部１３は、実数行列Ｗと基底行列Ｍとに基づいて、最小二乗法により係数行列Ｃを決定（更新）する。なお、係数行列決定部１３は、まだ分枝限定探索部１５における処理が行われていない処理の最初には、基底行列Ｍが得られていないため、係数行列Ｃを乱数で決定（初期化）して並べ替え部１４に与える。
【００５２】
分解行列出力部１８は、分解誤差判定部１７における暫定最小分解誤差が十分に小さくなった場合には、その暫定最小分解誤差を与えた基底行列Ｍ及び係数行列Ｃを行列分解の結果として出力する。分解行列出力部１８は、例えば、暫定最小分解誤差が所定の閾値以下となった場合に、暫定最小分解誤差が十分に小さくなったと判断してよく、暫定最小分解誤差が更新されなくなったときに、暫定最小分解誤差が十分に小さくなったと判断してもよく、分枝限定探索部１５において所定回数の探索を実行したとき（即ち、所定回数の係数行列Ｃの更新を行ったとき）に暫定最小分解誤差が十分に小さくなったと判断してもよい。
【００５３】
図８は、本実施の形態の行列分解装置にて実行される行列分解方法のフロー図である。行列分解装置１０は、まず、実数行列入力部１１にて、外部から実数行列Ｗを入力する（ステップＳ１１）。また、係数行列決定部１３は、乱数を用いて係数行列Ｃをランダムに初期化する（ステップＳ１２）。
【００５４】
並べ替え部１４は、係数行列決定部１３にて決定された係数行列Ｃの転置行列Ａについて、第１列と第２列とを特定した並べ替えを行い（ステップＳ１３）、それぞれの並べ替え行列Ａ´について分枝限定探索部１５が算出した２段目のノードの部分制約問題の最小誤差に基づいて、枝刈りが最も早期に進む可能性がある並べ替え行列Ａ´を選択する（ステップＳ１４）。
【００５５】
ベクトル抽出部１２は、パラメータｉを１として（ステップＳ１５）、実数行列Ｗの転置行列の第ｉ列の列ベクトルｂを抽出する（ステップＳ１６）。分枝限定探索部１５は、ベクトル抽出部１２にて抽出された列ベクトルｂと、並べ替え部１４にて選択された並べ替え行列Ａ´とを用いた下式（１´´）を分枝限定法で解くことにより、列ベクトルｂに対応する並べ替え最適解ベクトルｘ´を求める（ステップＳ１７）。
【数１９】
2019079367.tif 000021
【００５６】
分枝限定探索部１５は、パラメータｉがＤとなっているか、即ち、実数行列Ｗのすべての行について、対応する並べ替え最適解ベクトルｘ´を求めたかを判断する（ステップＳ１８）。まだすべての行について並べ替え最適解ベクトルｘ´を求めていない場合には（ステップＳ１８にてＮＯ）、ベクトル抽出部１２は、パラメータｉをインクリメントして（ステップＳ１９）、次の列ベクトルｂを抽出し（ステップＳ１６）、分枝限定探索部１５は、その列ベクトルに対応する並べ替え最適解ベクトルｘ´を算出する（ステップＳ１７）。
【００５７】
実数行列Ｗのすべての行について並べ替え最適解ベクトルｘ´を算出した場合には（ステップＳ１８にてＹＥＳ）、並べ戻し部１６は、すべての並べ替え最適解ベクトルｘ´の各々を並べ戻して最適解ベクトルｘとして、それらの転置ベクトルｍを並べることで最適解としての基底行列Ｍを生成し、また、並べ替え行列Ａ´についても並べ戻して行列Ａとして、さらにその転置をとって係数行列Ｃを復元する（ステップＳ２０）。
【００５８】
分解誤差判定部１７は、並べ戻し部１６にて得られた基底行列Ｍと係数行列Ｃと実数行列Ｗを用いて、基底行列Ｍ及び係数行列Ｃによる実数行列Ｗの分解誤差Ｅを計算する（ステップＳ２１）。そして、分解誤差判定部１７は、算出した分解誤差Ｅが暫定最小分解誤差よりも小さいか否かによって暫定最小分解誤差を更新するか否かを判断する（ステップＳ２２）。
【００５９】
分解誤差判定部１７は、算出した分解誤差Ｅが暫定最小分解誤差よりも小さい場合には（ステップＳ２２にてＹＥＳ）、分解誤差Ｅで暫定最小分解誤差を更新し（ステップＳ２３）、算出した分解誤差Ｅが暫定最小分解誤差よりも大きい場合には（ステップＳ２２にてＮＯ）、分解誤差Ｅで暫定最小誤差を更新することなく、分解を終了するか否かを判断する（ステップＳ２４）。分解終了の判断は、上述のように、暫定最小分解誤差が十分に小さくなったか否かによる。
【００６０】
分解を終了しない場合には（ステップＳ２４にてＮＯ）、係数行列決定部１３は、生成した基底行列Ｍと入力されている実数行列Ｗを用いて係数行列Ｃを更新し、ステップＳ１３に戻って更新された係数行列Ｃの並べ替えを行う。
【００６１】
分解誤差判定部１７が分解を終了すると判断した場合には（ステップＳ２４にてＹＥＳ）、分解行列出力部１８は、そのときの暫定最小分解誤差を得た基底行列Ｍ及び係数行列Ｃを分解結果として出力する（ステップＳ２５）。
【００６２】
以上説明したように、本実施の形態の行列分解装置１０は、実数行列Ｗを離散値からなる基底行列Ｍと実数からなる係数行列Ｃとの積に分解するにあたって、まず、係数行列Ｃを固定して基底行列Ｍを更新し、基底行列Ｍが更新されたらそれに従って係数行列Ｃを更新して、分解誤差Ｅが十分に小さくなるまで基底行列Ｍの更新と係数行列Ｃの更新を繰り返す。
【００６３】
そして、本実施の形態の行列分解装置１０は、係数行列Ｃを固定して基底行列Ｍを更新するために、実数行列Ｗの行ごとに分枝限定法を用いて基底行列Ｍの行ベクトルを求めるが、この際に、枝刈りが早く進むように係数行列の並べ替えを行う。これによって、実数行列Ｗの行ごとに、並べ替えられた最適解ベクトルが早期に得られる。並べ替えられた最適解ベクトルは、係数行列の並べ替えに従って並べ戻すことで、最適解としての基底行列Ｍの行ベクトルｍとなり、実数行列Ｗのすべての行について上記のようにして得られた行ベクトルｍを並べることで最適解としての基底行列Ｍを得ることができる。
【００６４】
なお、上記の実施の形態では、分枝限定探索部１４は、分枝限定法によって得られる大域最適解ベクトルを列ベクトルｂに対する並べ替え最適解ベクトルｘ´として出力した。すなわち、分枝限定探索部１４は、大域最適解が得られるまで分枝限定法による探索を行ったが、大域最適解が得られる前に分枝限定探索を打ち切ってもよい。例えば、誤差の計算を所定回数行った場合に、そのときの暫定最小誤差を与える解を最適解ベクトルとして出力して分枝限定探索を終了してよく、又は、暫定最小誤差が所定の閾値を下回ったときに、暫定最小誤差を与える解を最適解ベクトルとして出力して分枝限定探索を終了してよい。
【００６５】
また、上記の実施の形態では、並べ替え行列Ａ´を選択するために部分制約問題の最小誤差を計算する際に、ベクトルｘ´の未探索部分ｘ´ｆを実数としたが、これに代えて、
【数２０】
2019079367.tif 000022
としてもよい（ただし、ｄはｘ´の次元）。このように、部分制約問題の解ｘ´ｆに制約をつけることで、−１と１という離散最適解と制約が近くなるので好ましい。
【産業上の利用可能性】
【００６６】
本発明は、分枝限定法を用いて実数行列を分解する際の演算効率を向上させることができ、実数行列を離散値からなる基底行列と実数からなる係数行列との積に分解する行列分解装置等として有用である。
【符号の説明】
【００６７】
１０  行列分解装置
１１  実数行列入力部
１２  ベクトル抽出部
１３  係数行列決定部
１４  並べ替え部
１５  分枝限定探索部
１６  並べ戻し部
１７  分解誤差判定部
１８  分解行列出力部
【図１】
2019079367.tif 000027
【図２】
2019079367.tif 000028
【図３】
2019079367.tif 000029
【図４】
2019079367.tif 000030
【図５】
2019079367.tif 000031
【図６】
2019079367.tif 000032
【図７】
2019079367.tif 000033
【図８】
2019079367.tif 000034