(57)【要約】      （修正有）【課題】実数行列を分解するための演算の負荷を軽減する。【解決手段】実数行列Ｗを離散値からなる基底行列Ｍと実数からなる係数行列Ｃとの積に分解する行列分解装置１０は、実数行列Ｗの各行の実数ベクトルｂを抽出するベクトル抽出部１２と、係数行列Ｃを決定する係数行列決定部１３と、決定された係数行列Ｃを用いて、抽出された各行の実数ベクトルｂに対応する基底行列Ｍの各行の最適解ベクトルｍを求める最適解探索部１４と、最適解探索部１４で求められた各行の最適解ベクトルｍを組み合わせて基底行列Ｍとして出力するとともに、当該基底行列Ｍを得た際に用いた係数行列Ｃを出力する分解行列出力部１７とを備える。最適解探索部１４は、探索木及び暫定最小誤差を引き継ぎつつモンテカルロ木探索と分枝限定探索とを交互に繰り返し切り替えるハイブリッド探索を行う。【選択図】図１
2019079291.tif 000002
【特許請求の範囲】
【請求項１】
実数行列（Ｗ）を離散値からなる基底行列（Ｍ）と実数からなる係数行列（Ｃ）との積に分解する行列分解装置（１０）であって、
実数行列（Ｗ）の各行の実数ベクトル（ｂ）を抽出するベクトル抽出部（１２）と、
係数行列（Ｃ）を決定する係数行列決定部（１３）と、
前記係数行列決定部（１３）にて決定された前記係数行列（Ｃ）を用いて、前記ベクトル抽出部（１２）にて抽出された各行の前記実数ベクトル（ｂ）に対応する基底行列（Ｍ）の各行の最適解ベクトル（ｍ）を求める最適解探索部（１４）と、
前記最適解探索部（１４）で求められた各行の前記最適解ベクトル（ｍ）を組み合わせて前記基底行列（Ｍ）として出力するとともに、当該基底行列（Ｍ）を得た際に用いた前記係数行列（Ｃ）を出力する分解行列出力部（１７）と、
を備え、
前記最適解探索部（１４）は、探索木及び暫定最小誤差を引き継ぎつつモンテカルロ木探索と分枝限定探索とを交互に繰り返し切り替えるハイブリッド探索を行う、行列分解装置（１０）。
【請求項２】
前記最適解探索部（１４）で求められた各行の前記最適解ベクトル（ｍ）を組み合わせて前記基底行列（Ｍ）としたときの前記分解誤差（Ｅ）が、所定の基準に基づいて十分に小さくなったか否かを判定する分解誤差判定部（１６）をさらに備え、
前記分解行列出力部（１７）は、前記分解誤差判定部（１６）にて前記分解誤差（Ｅ）が十分に小さくなったと判定されたときに、前記基底行列（Ｍ）及び前記係数行列（Ｃ）を出力し、
前記分解誤差判定部（１６）にて分解誤差（Ｅ）が十分に小さくなっていないと判定されたときに、前記係数行列決定部（１３）は、新たな前記係数行列（Ｃ）を決定し、前記最適解探索部（１４）は、新たな前記係数行列（Ｃ）を用いて新たな最適解ベクトルを求める、請求項１に記載の行列分解装置（１０）。
【請求項３】
前記最適解探索部（１４）は、前記分枝限定探索にて大域最適解ベクトルが得られるまで前記ハイブリッド探索を行い、前記大域最適解ベクトルを前記最適解ベクトルとして求める、請求項１又は２に記載の行列分解装置（１０）。
【請求項４】
前記最適解探索部（１４）は、前記暫定最小誤差の更新が滞ったときに、前記モンテカルロ木探索と前記分枝限定探索とを切り替える、請求項１〜３のいずれかに記載の行列分解装置（１０）。
【請求項５】
前記最適解探索部（１４）は、前の切替えから所定時間が経過したときに、前記モンテカルロ木探索と前記分枝限定探索とを切り替える、請求項１〜３のいずれかに記載の行列分解装置（１０）。
【請求項６】
前記最適解探索部（１４）は、誤差を所定回数算出したときに、前記モンテカルロ木探索と前記分枝限定探索とを切り替える、請求項１〜３のいずれかに記載の行列分解装置（１０）。
【請求項７】
前記最適解探索部（１４）は、前の切替えから所定時間が経過し、又は誤差を所定回数算出したときに、前記モンテカルロ木探索法と前記分枝限定探索とを切り替える、請求項１〜３のいずれかに記載の行列分解装置（１０）。
【請求項８】
実数行列（Ｗ）を離散値からなる基底行列（Ｍ）と実数からなる係数行列（Ｃ）との積に分解する行列分解方法であって、
実数行列（Ｗ）を取得するステップと、
前記実数行列（Ｗ）の各行の実数ベクトル（ｂ）を抽出するステップと、
係数行列（Ｃ）を決定するステップと、
前記実数ベクトル（ｂ）と前記係数行列（Ｃ）とを用いて、各行の前記実数ベクトル（ｂ）に対する基底行列（Ｍ）の各行の最適解ベクトル（ｍ）を求めるステップと、
前記実数行列（Ｗ）から抽出されたすべての前記実数ベクトル（ｂ）について求めた前記最適解ベクトル（ｍ）を組み合わせて前記基底行列（Ｍ）として出力し、当該基底行列（Ｍ）を得た際に用いた前記係数行列（Ｃ）を出力するステップと、
を含み、
前記最適解ベクトル（ｍ）を求めるステップは、探索木及び暫定最小誤差を引き継ぎつつモンテカルロ木探索と分枝限定探索とを交互に繰り返し切り替えるハイブリッド探索を行う、行列分解方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、実数で構成される行列を、実数値を持つ行列と整数値のみを持つ行列との積に分解する行列分解装置及び行列分解方法に関する。
【背景技術】
【０００２】
画像認識の演算には、実数で構成されるベクトル（実数ベクトル）と実数で構成される行列（実数行列）との積演算が含まれることがある。例えば、ＳＶＭ（Support Vector Machine）には、実数ベクトルである特徴ベクトルと、実数行列である重み行列との積演算が含まれ、ＣＮＮ（Convolutional Neural Network）には、実数ベクトルである入力層（ベクトル）と実数行列である畳み込みフィルタ（行列）との積演算が含まれる。このような実数ベクトルと実数行列との積演算の演算負荷は大きく、即ち長い演算時間を要し、かつ、メモリ消費量が大きくなる。
【０００３】
そこで、従来より、実数ベクトルを整数値のみを持つベクトルに変換するとともに、実数行列を整数値のみを持つ基底行列と実数値を持つ係数行列との積に分解することで積演算の負荷を軽減することが提案されている。
【０００４】
実数行列Ｗを係数行列Ｃと基底行列Ｍに分解する問題は、以下の式（１）に帰着できる。
【数１】
2019079291.tif 000003
【０００５】
この問題の最適解を求めるには、基本的には、すべての解を探索する必要があるが、問題のサイズによっては天文学的な計算時間を要することもある。そこで、この問題を解くための既存手法としていくつかのアプローチがある。
【０００６】
まず、この問題は、制約付き最適化問題と捉えることができるので、分枝限定法で解くことが可能である。分枝限定法は、要素をすべて決定する途中の段階で制約なし最適化問題として残りの要素が実現し得る最小の制約なし誤差を計算する。この最小の制約なし誤差よりも現在得られている最小の誤差（暫定最小誤差）の方が小さければ、残りの要素の如何に関わらず、暫定最小誤差よりも誤差を小さくする解は得られないことになり、探索木の枝刈りが可能となる。分枝限定法は、このような枝刈りによって探索範囲を決定論的に狭めていき、探索すべき枝がなくなったときに、そのときの暫定最小誤差を実現する組み合わせを大域最適値として出力する。
【０００７】
また、確率的なアプローチとして、モンテカルロ木探索がある（例えば、特許文献１）。モンテカルロ木探索は、すべての解を探索することを諦めて、確率的に良い解を得ようとするアプローチである。なかでも、ＵＣＴ（Upper Confidence Bounds for Trees）と呼ばれる手法が囲碁を指す人工知能などで応用され、高い性能を持つことが知られている。
【０００８】
ＵＣＴでは、探索当初は乱数的に値を探索していくが、探索が進んでくると、過去の誤差の履歴からの選択によって得られる誤差の期待値を計算し、０と１の中から小さい誤差が得られそうな候補を選んで探索する。さらに、期待値だけでは偶然小さい誤差が得られた場合には全く探索されない要素が出てくる可能性もある。このため、過去に選ばれた回数が少ない要素が優先的に選ばれるように、期待値に重み付けがされる。
【先行技術文献】
【特許文献】
【０００９】
【特許文献１】特開２０１４−１４２８４９号公報
【発明の概要】
【発明が解決しようとする課題】
【００１０】
分枝限定法は、上述のように厳密に大域最適解が得られるという利点があるが、枝刈りがうまくいかない場合には、演算時間が大きくなりすぎるという問題がある。すなわち、分枝限定法では、早期に大域最適解に近い解が得られた場合には枝刈りが効率的に進む可能性があるが、そうでなければ効率が極めて悪くなってしまう。
【００１１】
一方、ＵＣＴ等のモンテカルロ木探索では、短時間に比較的良い解が得られる利点があるが、厳密な大域最適解が得られる保証はなく、厳密解を求めるようとすれば、全探索をするよりも演算時間がかかってしまう問題がある。
【００１２】
本発明は、上記の問題に鑑みてなされたものであり、実数行列を分解するための演算負荷を軽減することを目的とする。
【課題を解決するための手段】
【００１３】
本発明の一態様は、実数行列（Ｗ）を離散値からなる基底行列（Ｍ）と実数からなる係数行列（Ｃ）との積に分解する行列分解装置（１０）であって、実数行列（Ｗ）の各行の実数ベクトル（ｂ）を抽出するベクトル抽出部（１２）と、係数行列（Ｃ）を決定する係数行列決定部（１３）と、前記係数行列決定部（１３）にて決定された前記係数行列（Ｃ）を用いて、前記ベクトル抽出部（１２）にて抽出された各行の前記実数ベクトル（ｂ）に対応する基底行列（Ｍ）の各行の最適解ベクトル（ｍ）を求める最適解探索部（１４）と、前記最適解探索部（１４）で求められた各行の前記最適解ベクトル（ｍ）を組み合わせて前記基底行列（Ｍ）として出力するとともに、当該基底行列（Ｍ）を得た際に用いた前記係数行列（Ｃ）を出力する分解行列出力部（１７）とを備え、前記最適解探索部（１４）は、探索木及び暫定最小誤差を引き継ぎつつモンテカルロ木探索と分枝限定探索とを交互に繰り返し切り替えるハイブリッド探索を行う構成を有している。
【００１４】
この構成により、モンテカルロ木探索によって最適解に近い解を早期に探索できるので、分枝限定探索における枝刈りが効果的に進行し、分枝限定探索によって枝刈りが進むとモンテカルロ木探索でより最適解に近い解を早期に探索できるという相乗効果が得られるので、演算負荷を軽減して効果的に最適解を見つけることができる。
【００１５】
上記の行列分解装置（１０）は、前記最適解探索部（１４）で求められた各行の前記最適解ベクトル（ｍ）を組み合わせて前記基底行列（Ｍ）としたときの前記分解誤差（Ｅ）が、所定の基準に基づいて十分に小さくなったか否かを判定する分解誤差判定部（１６）をさらに備えていてよく、前記分解行列出力部（１７）は、前記分解誤差判定部（１６）にて前記分解誤差（Ｅ）が十分に小さくなったと判定されたときに、前記基底行列（Ｍ）及び前記係数行列（Ｃ）を出力してよく、前記分解誤差判定部（１６）にて分解誤差（Ｅ）が十分に小さくなっていないと判定されたときに、前記係数行列決定部（１３）は、新たな前記係数行列（Ｃ）を決定し、前記最適解探索部（１４）は、新たな前記係数行列（Ｃ）を用いて新たな最適解ベクトルを求めてよい。この構成により、分解誤差を小さくして分解の精度を向上できる。
【００１６】
上記の行列分解装置（１０）において、前記最適解探索部（１４）は、前記分枝限定探索にて大域最適解ベクトルが得られるまで前記ハイブリッド探索を行い、前記大域最適解ベクトルを前記最適解ベクトルとして求めてよい。この構成により、分解誤差を小さくして分解の精度を向上できる。
【００１７】
上記の行列分解装置（１０）において、前記最適解探索部（１４）は、前記暫定最小誤差の更新が滞ったときに、前記モンテカルロ木探索と前記分枝限定探索とを切り替えてよい。
【００１８】
上記の行列分解装置（１０）において、前記最適解探索部（１４）は、前の切替えから所定時間が経過したときに、前記モンテカルロ木探索と前記分枝限定探索とを切り替えてよい。
【００１９】
上記の行列分解装置（１０）において、前記最適解探索部（１４）は、誤差を所定回数算出したときに、前記モンテカルロ木探索と前記分枝限定探索とを切り替えてよい。
【００２０】
上記の行列分解装置（１０）において、前記最適解探索部（１４）は、前の切替えから所定時間が経過し、又は誤差を所定回数算出したときに、前記モンテカルロ木探索法と前記分枝限定探索とを切り替えてよい。
【００２１】
本発明の一態様は、実数行列（Ｗ）を離散値からなる基底行列（Ｍ）と実数からなる係数行列（Ｃ）との積に分解する行列分解方法であって、実数行列（Ｗ）を取得するステップと、前記実数行列（Ｗ）の各行の実数ベクトル（ｂ）を抽出するステップと、係数行列（Ｃ）を決定するステップと、前記実数ベクトル（ｂ）と前記係数行列（Ｃ）とを用いて、各行の前記実数ベクトル（ｂ）に対する基底行列（Ｍ）の各行の最適解ベクトル（ｍ）を求めるステップと、前記実数行列（Ｗ）から抽出されたすべての前記実数ベクトル（ｂ）について求めた前記最適解ベクトル（ｍ）を組み合わせて前記基底行列（Ｍ）として出力し、当該基底行列（Ｍ）を得た際に用いた前記係数行列（Ｃ）を出力するステップとを含み、前記最適解ベクトル（ｍ）を求めるステップは、探索木及び暫定最小誤差を引き継ぎつつモンテカルロ木探索と分枝限定探索とを交互に繰り返し切り替えるハイブリッド探索を行う、行列分解方法。
【００２２】
この構成により、モンテカルロ木探索によって最適解に近い解を早期に探索できるので、分枝限定探索における枝刈りが効果的に進行し、分枝限定探索によって枝刈りが進むとモンテカルロ木探索でより最適解に近い解を早期に探索できるという相乗効果が得られるので、演算負荷を軽減して効果的に最適解を見つけることができる。
【発明の効果】
【００２３】
本発明によれば、モンテカルロ木探索によって最適解に近い解を早期に探索できるので、分枝限定探索における枝刈りが効果的に進行し、分枝限定探索によって枝刈りが進むとモンテカルロ木探索でより最適解に近い解を早期に探索できるという相乗効果が得られるので、演算負荷を軽減して効果的に最適解を見つけることができる。
【図面の簡単な説明】
【００２４】
【図１】本発明の実施の形態の行例分解装置の構成を示す図
【図２】本発明の実施の形態の実数行列の分解を示す図
【図３】本発明の実施の形態の最適解探索部で用いられる探索木を示す図
【図４】本発明の実施の形態の行列分解装置にて実行される行列分解方法のフロー図
【図５】本発明の実施の形態の行列分解装置にて実行される最適解探索処理のフロー図
【発明を実施するための形態】
【００２５】
以下、図面を参照して本発明の実施の形態を説明する。なお、以下に説明する実施の形態は、本発明を実施する場合の一例を示すものであって、本発明を以下に説明する具体的構成に限定するものではない。本発明の実施にあたっては、実施の形態に応じた具体的構成が適宜採用されてよい。
【００２６】
図１は、本発明の実施の形態の行例分解装置の構成を示す図である。図１に示す構成は、ＣＰＵ、メモリ、記憶装置等を備えたコンピュータのＣＰＵが本実施の形態の行列分解プログラムを実行することにより実現される。本実施の形態の行列分割装置１０は、実数行列入力部１１と、ベクトル抽出部１２と、係数行列決定部１３と、最適解探索部１４と、切替判定部１５と、分解誤差判定部１６と、分解行列出力部１７とを備えている。最適解探索部１４は、モンテカルロ木探索部１４１と、分枝限定探索部１４２とを備えている。
【００２７】
図２は、実数行列の分解を示す図である。行列分解装置１０は、図２に示すようにＤ行Ｌ列の実数行列Ｗを入力して、それをＤ行Ｋ列（Ｋは基底数）の離散値からなる基底行列Ｍと、Ｋ行Ｌ列の係数行列Ｃとの積に分解して、得られた基底行列Ｍと係数行列Ｃを出力する。本実施の形態では、基底行列Ｍは、−１と１とからなる二値行列とするが、基底行列Ｍは、−１、０、１からなる三値行列であっても、任意の整数からなる行列であってもよい。
【００２８】
実数行列入力部１１は、外部から入力された分解すべき実数行列Ｗを取得する。ベクトル抽出部１２は、入力された実数行列Ｗの各行の行ベクトルの転置ベクトルを列ベクトル（実数ベクトル）ｂとして抽出して、行ごとに最適解探索部１４に出力する。係数行列決定部１３は、係数行列Ｃを決定して最適解探索部１４に出力する。
【００２９】
最適解探索部１４は、係数行列Ｃを係数行列決定部１３から与えられた既知のものとして、最適な基底行列Ｍの探索を行う。最適解探索部１４は、モンテカルロ木探索と分枝限定法による探索（以下、「分枝限定探索」という。）とを交互に繰り返し切り替えるハイブリッド探索によって、高速に最適解を求める。上述のように、実数行列Ｗを係数行列Ｃと基底行列Ｍに分解する問題は、式（１）に帰着できる。
【数２】
2019079291.tif 000004
【００３０】
この式（１）において、コスト関数は、
【数３】
2019079291.tif 000005
である。本実施の形態において一回の計算で求める基底行列Ｍの要素は、図２に示す基底行列Ｍの行ベクトルｍである。
【００３１】
最適解探索部１４は、基底行列Ｍの行ごとの探索を行う。行ベクトルｍの場合は表記が複雑になるので、基底行列Ｍの各行の行ベクトルｍの転置ベクトルを列ベクトルｘとして、以下の説明では、以下のとおりに再定義をする。
【数４】
2019079291.tif 000006
【００３２】
上記のように再定義すると、コスト関数は、
【数５】
2019079291.tif 000007
となり、行ごとの最適解は、
【数６】
2019079291.tif 000008
と再定義される。
【００３３】
図３は、最適解探索部１４で用いられる探索木を示す図である。本実施の形態では、基底行列Ｍは二値行列であるので、探索木として二分木が用いられる。図３は、一例として、基底数Ｋ＝４の場合の二分木を示している。図３において、深さｋ番目のノードは、ｘｋの値を−１にするか１にするかに該当する。二分木を最上段のルートノードから最下段のリーフノードまで辿るとｘ１〜ｘＫの値が与えられて（図３の例では、ｘ１〜ｘ４の値が与えられて）、そのときの誤差を計算できる。
【００３４】
上述のように、最適解探索部１４は、モンテカルロ木探索と分枝限定探索とを交互に繰り返し切り替えるハイブリッド探索によって最適解ベクトルを求める。すなわち、最適解探索部１４は、暫定最小誤差と当該暫定最小誤差を得たときのベクトルｘ（暫定最適解ベクトル）、及び枝刈りの情報を引き継ぎつつモンテカルロ木探索と分枝限定探索とを交互に切り替えて、最適解ベクトルを求める。換言すると、モンテカルロ探索部１４１と分枝限定探索部１４２とは、二分木及び暫定最小誤差を共有して探索を行う。以下では、モンテカルロ探索部１４１におけるモンテカルロ木探索、分枝限定探索部１４２における分枝限定探索、及びそれらの間の切り替えについて説明する。
【００３５】
（モンテカルロ木探索）
モンテカルロ木探索部１４１は、探索木である二分木のルートノードからリーフノードまでの２の４乗（基底行列Ｍの列サイズ）とおりの経路の中から確率的に誤差が小さい経路を探索する。それぞれのノードは、スコアｓと訪問回数ｎを値として保持している。１回の探索はルートノードから初めてリーフノードに辿り着くと終了する。
【００３６】
リーフノード以外のすべてのノードは、２つの子ノードを持っている。あるノードに着目したとき、その着目ノードの両方の子ノードがまだ辿ったことのないノードである場合は、モンテカルロ木探索部１４１は、それらの２つの子ノードの中から、等確率でランダムに次に辿るノードを決定する。２つの子ノードのうちの一方だけ辿ったことがない場合には、モンテカルロ木探索部１４１は、当該辿ったことがないノードを次のノードとして決定する。
【００３７】
後述する分枝限定探索によって両方の子ノードが枝刈りされている場合は、モンテカルロ木探索部１４１は、経路をルートノードに戻す。分枝限定探索によって一方の子ノードだけが枝刈りされている場合には、モンテカルロ木探索部１４１は、まだ残っている子ノードを次のノードとする。
【００３８】
両方の子ノードを辿ったことがある場合には、モンテカルロ木探索部１４１は、２つの子ノードのＵＢＣスコアを比較して、その値が大きい方を次のノードとして決定する。ＵＢＣスコアは、以下の式で計算される。
【数７】
2019079291.tif 000009
ここで、ｔは、それまでに探索したリーフノードの数である。
【００３９】
モンテカルロ木探索部１４１は、以上の各ノードにおける子ノードの決定方法に従って、ルートノードからリーフノードまで辿り着いたときに、誤差ｅを計算する。モンテカルロ木探索部１４１は、さらに、この誤差ｅを以下の式に従ってリーフスコアｌに変換する。
【数８】
2019079291.tif 000010
【００４０】
モンテカルロ木探索部１４１は、さらに、ルートノードから辿り着いたリーフノートまでの経路上にあるすべてのノードについて、スコアｓにリーフスコアｌを加算し、訪問回数ｎに１を加算する。そして、モンテカルロ木探索部１４１は、得られた誤差ｅと暫定最小誤差とを比較して、暫定最小誤差の方が大きければ得られた誤差ｅを暫定最小誤差として更新して保存する。また、モンテカルロ木探索部１４１は、そのときの解（即ち、当該暫定最小誤差を算出した経路ｘ１〜ｘＫの組み合わせからなるベクトルｘ）を暫定最適解ベクトルとして保存する。
【００４１】
リーフノードで誤差ｅが計算されると、そのリーフノードは枝刈りされる。また、各ノードにおいて、その２つの子ノードが何れも枝刈りされている場合は、そのノード自体が枝刈りされる。
【００４２】
モンテカルロ木探索部１４１は、この探索を繰り返して、暫定最小誤差を更新する。なお、モンテカルロ木探索において、探索すべきノードがなくなった場合には探索は終了するが、一般的には、探索木のサイズは天文学的に大きいため、そのような状況にはならず、所定の条件を満たしたところで探索は打ち切られてそのときの暫定最適解が出力される。
【００４３】
（分枝限定探索）
分枝限定探索部１４２は、分枝限定法を用いて最適解を探索する。分枝限定探索部１４２は、ルートノードからリーフノードまでの２の４乗（基底行列Ｍの列サイズ）とおりの経路の中から、論理的にたどる必要のないノードを刈り取り、探索範囲を削減しながら、大域最適解を探索する。
【００４４】
あるノードに着目すると、分枝限定探索部１４２は、その着目ノードの２つの子ノードのうちの左側の子ノードがまだ枝刈りされていない場合には、左側の子ノードを次のノードとして決定する。また、分枝限定探索部１４２は、リーフノードまでたどり着いて誤差ｅを計算すると、そのリーフノードを枝刈りする。着目ノードの２つの子ノードが両方とも枝刈りされている場合は、分枝限定探索部１４２は、その着目ノード自体を枝刈りする。
【００４５】
いま、深さｋのあるノードに着目したとき、分枝限定探索部１４２は、ルートノードからその着目ノードまで辿った経路によって決まるｘ１〜ｘｋの値を並べ、以下のとおりに部分問題を作成する。
【数９】
2019079291.tif 000011
【００４６】
分枝限定探索部１４２は、この部分問題を下式のように、離散制約のない実数ベクトルｘｆを求める新たな問題として解く。
【数１０】
2019079291.tif 000012
【００４７】
分枝限定探索部１４２は、最小二乗法などを使ってこの部分問題を解くことで、最小値を求める。この最小値が暫定最小誤差よりも大きい場合には、分枝限定探索部１４２は、このノードを枝刈りする。これは、ｘｆは実数ベクトルであるため、このノードより下の探索木においていかなる最適な経路を辿ってもこの最小値よりも誤差が小さい解を得ることができないためである。
【００４８】
着目したノードがリーフノードである場合は、ルートノードから当該リーフノードまでの−１と１の列が解の候補となるので、分枝限定探索部１４２は、ルートノードから当該リーフノードまでのｘｋの値を並べてベクトルを作成し、その誤差ｅを計算する。分枝限定探索部１４２は、誤差ｅが暫定最小誤差よりも小さい場合には、その誤差ｅで暫定最小誤差を更新して保存する。また、分枝限定探索部１４２は、そのときの解（即ち、当該暫定最小誤差を算出した経路ｘ１〜ｘＫの組み合わせからなるベクトルｘ）を暫定最適解ベクトルとして保存する。
【００４９】
分枝限定探索部１４２は、すべてのノードが枝刈りされたとき、そのときの暫定最適解を大域最適解として分解誤差判定部１６に出力する。
【００５０】
次に、モンテカルロ木探索部１４１によるモンテカルロ木探索と、分枝限定探索部１４２による分枝限定探索との切替について説明する。切替判定部１５は、モンテカルロ木探索部１４１におけるモンテカルロ木探索において、リーフノードに辿り着くごとに、あるいは定期的に、モンテカルロ木探索から分枝限定探索への切替条件を満たすか否かを判定する。最適解探索部１４は、切替判定部１５が切替条件を満たすとの判定結果を受けたときに、モンテカルロ木探索部１４１による処理を終了して、分枝限定探索部１４２による処理を開始する。
【００５１】
切替判定部１５は、分枝限定探索部１４２における分枝限定探索において、リーフノードに辿り着くごとに、あるいは定期的に、分枝限定探索からモンテカルロ木探索への切替条件を満たすか否かを判定する。最適解探索部１４は、切替判定部１５が切替条件を満たすとの判定結果を受けたときに、分枝限定探索部１４２による処理を終了して、モンテカルロ木探索部１４１による処理を開始する。また、上述のように、分枝限定探索部１４２は、すべてのノードが枝刈りされたときに、そのときの暫定最適解ベクトル（大域最適解ベクトル）を基底行列更新部１６に出力する。
【００５２】
切替判定部１５におけるモンテカルロ木探索から分枝限定探索への切替条件と、分枝限定探索からモンテカルロ木探索への切替条件とは、同じであってよく、異なっていてもよい。切替判定部１５における切替条件の第１の例は、暫定最小誤差の更新が滞ることである。具体的には、切替判定部１５は、誤差を所定回数計算する（即ち、リーフノードまで所定回数辿り着く）間に、暫定最小誤差が所定回数（１回でもよい）以上更新されなかった場合に、暫定最小誤差の更新が滞ったとして、切替条件を満たすと判定する。
【００５３】
切替条件の第２の例は、前の切替えからから所定時間が経過したことである。この例では、切替判定部１５は、モンテカルロ木探索から分枝限定探索に切り替えてから所定時間を経過したときに、切替条件を満たすと判断して、分枝限定探索からモンテカルロ木探索に切り替え、分枝限定探索からモンテカルロ木探索に切り替えてから所定時間を経過したときに、切替条件を満たすと判断して、分枝限定法からモンテカルロ木探索に切り替える。
【００５４】
切替条件の第３の例は、誤差を所定回数算出した（即ち、リーフノードまで所定回数辿り着いた）ことである。切替条件の第４の例は、前の切り替えから所定時間が経過するか（第２の例）、誤差を所定回数以上計算するか（第３の例）のいずれかを満足することである。
【００５５】
また、切替判定部１５は、ランダムに切替判定をしてもよい。この場合に、切り替える確率は任意に決定してよい。また、切替判定部１５は、誤差を所定回数算出した後に、ランダムに切り替えを判定してよい。
【００５６】
ベクトル抽出部１２、最適解探索部１４、及び切替判定部１５は、上記の処理を実数行列Ｗのすべての行ベクトルｗ１〜ｗＤについて行う。その結果、分解誤差判定部１６は、Ｄ個の行ベクトルｗ１〜ｗＤに対応するＤ個の大域最適解ｍ１〜ｍＤを取得する。
【００５７】
分解誤差判定部１６は、大域最適解ｍ１〜ｍＤを順に並べることで基底行列Ｍを生成し、この基底行列Ｍとそれを求めた係数行列Ｃとを用いて、実数行列Ｗと、基底行列Ｍと係数行列Ｃとの積との差分を分解誤差Ｅとして求める。分解誤差判定部１６は、分解誤差Ｅが暫定最小分解誤差より小さいか否かを判断し、分解誤差Ｅが、暫定最小分解誤差より小さい場合には、当該分解誤差Ｅで暫定最小分解誤差を更新し、当該分解誤差Ｅを与えた基底行列Ｍ及び係数行列Ｃを保存する。
【００５８】
分解誤差判定部１６は、大域最適解ｍ１〜ｍＤを順に並べることで生成した基底行列Ｍを係数行列決定部１３に出力する。係数行列決定部１３は、実数行列Ｗと基底行列Ｍとに基づいて、最小二乗法により係数行列Ｃを決定（更新）する。なお、係数行列決定部１３は、まだ最適解探索部１４における処理が行われていない処理の最初には、基底行列Ｍが得られていないため、係数行列Ｃを乱数で決定（初期化）して最適解探索部１４に与える。
【００５９】
分解行列出力部１７は、分解誤差判定部１６における暫定最小分解誤差が十分に小さくなった場合には、その暫定最小分解誤差を与えた基底行列Ｍ及び係数行列Ｃを行列分解の結果として出力する。分解行列出力部１７は、例えば、暫定最小分解誤差が所定の閾値以下となった場合に、暫定最小分解誤差が十分に小さくなったと判断してよく、暫定最小分解誤差が更新されなくなったときに、暫定最小分解誤差が十分に小さくなったと判断してもよく、最適解探索部１４において所定回数のハイブリッド探索を実行したとき（即ち、所定回数の係数行列Ｃの更新を行ったとき）に暫定最小分解誤差が十分に小さくなったと判断してもよい。
【００６０】
図４は、本実施の形態の行列分解装置にて実行される行列分解方法のフロー図である。行列分解装置１０は、まず、実数行列入力部１１にて、外部から実数行列Ｗを入力する（ステップＳ１１）。また、係数行列決定部１３は、乱数を用いて係数行列Ｃをランダムに初期化する（ステップＳ１２）。ベクトル抽出部１２及び最適解探索部１４は、ｉ＝１として（ステップＳ１３）、列ベクトルｂについての最適解ベクトルｘを探索する（ステップＳ１４）。
【００６１】
列ベクトルｂについて最適解ベクトルｘを取得すると、ベクトル抽出部１２及び最適解探索部１４は、ｉ＝Ｄであるか、即ち、実数行列Ｗのすべての列ベクトルｂについて最適解ベクトルｘを求めたかを判定する（ステップＳ１５）。
【００６２】
まだ最適解ベクトルｘを求めていない列ベクトルｂがある場合には（ステップＳ１５にてＮＯ）、ｉをインクリメントして（ステップＳ１６）、ステップＳ１４に戻って、次の列ベクトルｂについて最適解ベクトルｘを探索する（ステップＳ１４）。実数行列Ｗのすべての列ベクトルｂについて最適解ベクトルｘが求まると（ステップＳ１５にてＹＥＳ）、分解誤差判定部１６は、それらの最適解ベクトルｘを用いて基底行列Ｍを生成して、そのときの係数行列Ｃを用いて分解誤差Ｅを計算する（ステップＳ１７）。
【００６３】
分解誤差判定部１６は、算出した分解誤差Ｅが暫定最小分解誤差よりも小さいか否かによって暫定最小分解誤差を更新するか否かを判断する（ステップＳ１８）。分解誤差判定部１６は、算出した分解誤差Ｅが暫定最小分解誤差よりも小さい場合には（ステップＳ１８にてＹＥＳ）、分解誤差Ｅで暫定最小分解誤差を更新し（ステップＳ１９）、算出した分解誤差Ｅが暫定最小分解誤差よりも大きい場合には（ステップＳ１８にてＮＯ）、分解誤差Ｅで暫定最小誤差を更新することなく、分解を終了するか否かを判断する（ステップＳ２０）。分解終了の判断は、上述のように、暫定最小分解誤差が十分に小さくなったか否かによる。
【００６４】
分解を終了しない場合には（ステップＳ２０にてＮＯ）、係数行列決定部１３は、生成した基底行列Ｍと入力されている実数行列Ｗを用いて係数行列Ｃを更新し、ステップＳ１３に戻って再度行列の分解を行う。
【００６５】
分解誤差判定部１６が分解を終了すると判断した場合には（ステップＳ２０にてＹＥＳ）、行列出力部１７は、そのときの暫定最小分解誤差を得た基底行列Ｍ及び係数行列Ｃを分解結果として出力する（ステップＳ２１）。
【００６６】
図５は、ベクトル抽出部１２及び最適解探索部１４による、最適解ベクトルｘの探索処理（ステップＳ１４）のサブルーチンのフロー図である。ベクトル抽出部１２は、まず、入力されている実数行列Ｗの第ｉ行の行ベクトルの転置ベクトルを列ベクトルｂとして抽出する（ステップＳ４１）。モンテカルロ木探索部１４１は、列ベクトルｂと係数行列Ｃを用いてモンテカルロ木探索を実行する（ステップＳ４２）。
【００６７】
切替判定部１５は、切替条件を充足するか否かを判定し（ステップＳ４３）、切替条件を充足していなければ（ステップＳ４３でＮＯ）、モンテカルロ木探索部１４１は、モンテカルロ木探索を継続する（ステップＳ４２）。切替判定部１５が切替条件を充足すると判定した場合は（ステップＳ４３にてＹＥＳ）、最適解探索部１４は、そのときの二分木、暫定最小誤差及び暫定最適解ベクトルを引き継いで、モンテカルロ木探索から分枝限定探索部１４２による分枝限定探索に切り替え、分枝限定探索部１４２は分枝限定探索を実行する（ステップＳ４４）。
【００６８】
切替判定部１５は、切替条件を充足するか否かを判定し（ステップＳ４５）、切替条件を充足していなければ（ステップＳ４５にてＮＯ）、分枝限定探索部１４２は、分枝限定探索を継続する（ステップＳ４４）。切替判定部１５が切替条件を充足すると判定した場合は（ステップＳ４５にてＹＥＳ）、最適解探索部１４は、分枝限定探索部１４２にて大域最適解が得られているか（枝刈りされていないすべてのノードを辿ったか）否かを判断する（ステップＳ４６）。
【００６９】
最適解探索部１４は、まだ大域最適解が得られていない場合には（ステップＳ４６にてＮＯ）、そのときの二分木、暫定最小誤差及び暫定最適解ベクトルを引き継いで、分枝限定法からモンテカルロ木探索部１４１によるモンテカルロ木探索に切り替え、モンテカルロ木探索部１４１は、モンテカルロ木探索を実行する（ステップＳ４２）。
【００７０】
このように、最適解探索部１４は、分枝限定探索部１４２における分枝限定探索によって大域最適解が得られるまで、モンテカルロ木探索と分枝限定探索を交互に繰り返して行う。そして、最適解探索部１４は、大域最適解が取得できたら（ステップＳ４６にてＹＥＳ）、図４のフローに戻る。
【００７１】
以上説明したように、本実施の形態の行列分解装置１０は、実数行列Ｗを離散値からなる基底行列Ｍと実数からなる係数行列Ｃとの積に分解するにあたって、まず、係数行列Ｃを固定して基底行列Ｍを更新し、基底行列Ｍが更新されたらそれに従って係数行列Ｃを更新して、分解誤差が十分に小さくなるまで基底行列Ｍの更新と係数行列Ｃの更新を繰り返す。
【００７２】
そして、本実施の形態の行列分解装置１０は、係数行列Ｃを固定して基底行列Ｍを更新する際には、行ごとに、モンテカルロ木探索と分枝限定探索とを交互に繰り返すハイブリッド探索を行う。このハイブリッド探索では、モンテカルロ木探索によって、短時間に比較的良い解が得られるので、分枝限定探索によって早期に厳密な大域最適解を見つけることができる。すなわち、本実施の形態の行列分解装置１０によれば、行列分解の速度と精度を向上できる。
【００７３】
なお、図５の例では、最適解探索部１４は、分枝限定法によって得られる大域最適解ベクトルを列ベクトルｂに対する最適解ベクトルとして出力した。すなわち、最適解探索部１４は、大域最適解が得られるまでモンテカルロ木探索と分枝限定探索とのハイブリッド探索を行ったが、大域最適解が得られる前にハイブリッド探索を打ち切ってもよい。例えば、モンテカルロ木探索（ステップＳ４２）と分枝限定法（ステップＳ４４）との切替えを所定回数行った場合に、そのときの暫定最小誤差を与える解を最適解ベクトルとして出力してハイブリッド探索を終了してよく、又は、暫定最小誤差が所定の閾値を下回ったときに、暫定最小誤差を与える解を最適解ベクトルとして出力してハイブリッド探索を終了してよい。
【産業上の利用可能性】
【００７４】
本発明は、演算負荷を軽減して効率的に最適解を見つけることができ、実数行列を離散値からなる基底行列と実数からなる係数行列との積に分解する行列分解装置等として有用である。
【符号の説明】
【００７５】
１０  行列分解装置
１１  実数行列入力部
１２  ベクトル抽出部
１３  係数行列決定部
１４  最適解探索部
１４１  モンテカルロ木探索部
１４２  分枝限定探索部
１５  切替判定部
１６  分解誤差判定部
１７  分解行列出力部
【図１】
2019079291.tif 000013
【図２】
2019079291.tif 000014
【図３】
2019079291.tif 000015
【図４】
2019079291.tif 000016
【図５】
2019079291.tif 000017