(57)【要約】【課題】最適化の仕組みに依存せずにモデル探索で用いられるデータの同一性を判定できるようにする。【解決手段】機械学習制御装置１０は、データ５ａ，５ｂを生成するための一連の処理について、汎用プログラムを呼び出す第１種処理であれば、汎用プログラムを示す処理名と引数との組を取得する。また、処理内容が定義された第２種処理であれば、処理内容を示す処理名とパラメータとの組を取得する。そしてデータ５ａ，５ｂが生成され、かつ格納されたとき、取得した情報をデータ５ａ，５ｂに関連付けてテーブル４に格納する。また機械学習制御装置１０は、探索条件２ｃに基づくモデル探索で利用するデータを生成するための一連の処理について、分類に応じた情報を取得する。そして、取得した情報をテーブル４に格納された情報と比較して、探索条件２ｃに基づくモデル探索で利用するデータが、データ５ａ，５ｂと一致するか否かを判定する。【選択図】図１
2017224245.tif 000002
【特許請求の範囲】
【請求項１】
機械学習の処理を、モデル探索に利用するパラメータを含む探索条件を決定する最適化系と、決定された前記探索条件に応じて、モデル探索プログラムに示されたモデル探索を行う実行系とに分けてコンピュータに実行させる機械学習制御プログラムにおいて、
前記コンピュータに、
前記最適化系で第１の探索条件が決定されたとき、前記第１の探索条件に基づくモデル探索で利用する第１のデータを生成するための一連の処理を示す第１処理列内の各処理について、処理の分類が、前記モデル探索プログラムの実行環境に用意された汎用プログラムを呼び出す第１種処理であれば、呼び出し先の汎用プログラムを示す処理名と該処理の呼び出し時に指定する引数との組を、該処理の処理特定情報として取得し、処理の分類が、前記モデル探索プログラム中に処理内容が定義された第２種処理であれば、処理内容を示す処理名と該処理で参照するパラメータとの組を、該処理の処理特定情報として取得し、
前記第１の探索条件に基づくモデル探索において前記第１のデータが生成され、かつ格納されたとき、前記第１処理列内の処理それぞれの処理特定情報を、生成された前記第１のデータに関連付けてテーブルに格納し、
前記最適化系で第２の探索条件が決定されたとき、前記第２の探索条件に基づくモデル探索で利用する第２のデータを生成するための一連の処理を示す第２処理列内の各処理について、処理の分類が前記第１種処理であれば、呼び出し先の汎用プログラムを示す処理名と該処理の呼び出し時に指定する引数との組を処理特定情報として取得し、処理の分類が前記第２種処理であれば、処理内容を示す処理名と該処理で参照するパラメータとの組を処理特定情報として取得し、
前記第２処理列内の各処理の処理特定情報を、前記テーブルに格納された前記第１処理列内の各処理の処理特定情報と比較して、前記第２のデータと前記第１のデータとが一致するか否かを判定する、
処理を実行させる機械学習制御プログラム。
【請求項２】
前記コンピュータに、さらに、
前記第２のデータと前記第１のデータとが一致する場合、前記第２の探索条件に基づくモデル探索において、前記第２のデータを生成する一連の処理に変えて、格納された前記第１のデータを取得するように、前記第２の探索条件に基づくモデル探索の処理手順を修正する、
処理を実行させる請求項１記載の機械学習制御プログラム。
【請求項３】
前記判定では、前記第１処理列内の処理数と前記第２処理列内の処理数とを比較すると共に、前記第１処理列と前記第２処理列との同じ処理順の処理の処理特定情報同士を比較する、
請求項１または２記載の機械学習制御プログラム。
【請求項４】
前記コンピュータに、さらに、
ソースコードをコンパイルして前記モデル探索プログラムを生成する際に、モデル探索の過程で生成されるデータの格納指示を検出し、
該データを生成するための一連の処理を、前記第１種処理と前記第２種処理とに分類し、
該データを生成するための一連の処理に関連付けて、処理の分類に応じた処理特定情報の取得先を記憶する、
処理を実行させ、
前記第１処理列内の各処理の処理特定情報の取得では、前記第１のデータに関連付けられた取得先から該処理特定情報を取得し、
前記第２処理列内の各処理の処理特定情報の取得では、前記第２のデータに関連付けられた取得先から該処理特定情報を取得する、
請求項１乃至３のいずれかに記載の機械学習制御プログラム。
【請求項５】
前記第２種処理に分類される処理の処理内容を示す処理名は、コンパイル時に割り当てられたクラス名である、
請求項１乃至４のいずれかに記載の機械学習制御プログラム。
【請求項６】
機械学習の処理を、モデル探索に利用するパラメータを含む探索条件を決定する最適化系と、決定された前記探索条件に応じて、モデル探索プログラムに示されたモデル探索を行う実行系とに分けてコンピュータで実行する機械学習制御方法において、
前記コンピュータが、
前記最適化系で第１の探索条件が決定されたとき、前記第１の探索条件に基づくモデル探索で利用する第１のデータを生成するための一連の処理を示す第１処理列内の各処理について、処理の分類が、前記モデル探索プログラムの実行環境に用意された汎用プログラムを呼び出す第１種処理であれば、呼び出し先の汎用プログラムを示す処理名と該処理の呼び出し時に指定する引数との組を、該処理の処理特定情報として取得し、処理の分類が、前記モデル探索プログラム中に処理内容が定義された第２種処理であれば、処理内容を示す処理名と該処理で参照するパラメータとの組を、該処理の処理特定情報として取得し、
前記第１の探索条件に基づくモデル探索において前記第１のデータが生成され、かつ格納されたとき、前記第１処理列内の処理それぞれの処理特定情報を、生成された前記第１のデータに関連付けてテーブルに格納し、
前記最適化系で第２の探索条件が決定されたとき、前記第２の探索条件に基づくモデル探索で利用する第２のデータを生成するための一連の処理を示す第２処理列内の各処理について、処理の分類が前記第１種処理であれば、呼び出し先の汎用プログラムを示す処理名と該処理の呼び出し時に指定する引数との組を処理特定情報として取得し、処理の分類が前記第２種処理であれば、処理内容を示す処理名と該処理で参照するパラメータとの組を処理特定情報として取得し、
前記第２処理列内の各処理の処理特定情報を、前記テーブルに格納された前記第１処理列内の各処理の処理特定情報と比較して、前記第２のデータと前記第１のデータとが一致するか否かを判定する、
機械学習制御方法。
【請求項７】
機械学習の処理を、モデル探索に利用するパラメータを含む探索条件を決定する最適化系と、決定された前記探索条件に応じて、モデル探索プログラムに示されたモデル探索を行う実行系とに分けて実行する機械学習制御装置において、
前記最適化系で第１の探索条件が決定されたとき、前記第１の探索条件に基づくモデル探索で利用する第１のデータを生成するための一連の処理を示す第１処理列内の各処理について、処理の分類が、前記モデル探索プログラムの実行環境に用意された汎用プログラムを呼び出す第１種処理であれば、呼び出し先の汎用プログラムを示す処理名と該処理の呼び出し時に指定する引数との組を、該処理の処理特定情報として取得し、処理の分類が、前記モデル探索プログラム中に処理内容が定義された第２種処理であれば、処理内容を示す処理名と該処理で参照するパラメータとの組を、該処理の処理特定情報として取得すると共に、前記最適化系で第２の探索条件が決定されたとき、前記第２の探索条件に基づくモデル探索で利用する第２のデータを生成するための一連の処理を示す第２処理列内の各処理について、処理の分類が前記第１種処理であれば、呼び出し先の汎用プログラムを示す処理名と該処理の呼び出し時に指定する引数との組を処理特定情報として取得し、処理の分類が前記第２種処理であれば、処理内容を示す処理名と該処理で参照するパラメータとの組を処理特定情報として取得する取得手段と、
前記第１の探索条件に基づくモデル探索において前記第１のデータが生成され、かつ格納されたとき、前記第１処理列内の処理それぞれの処理特定情報を、生成された前記第１のデータに関連付けてテーブルに格納する格納手段と、
前記第２処理列内の各処理の処理特定情報を、前記テーブルに格納された前記第１処理列内の各処理の処理特定情報と比較して、前記第２のデータと前記第１のデータとが一致するか否かを判定する判定手段と、
を有する機械学習制御装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、機械学習制御プログラム、機械学習制御方法、および機械学習制御装置に関する。
【背景技術】
【０００２】
近年ビッグデータ処理技術の適用先として期待されている分野に機械学習がある。機械学習とはデータを分析することでデータの傾向（モデル）を明らかにし、新たに手に入った未知のデータから既知の結果を予測することである。
【０００３】
機械学習は学習フェーズと予測フェーズの二つからなる。学習フェーズでは訓練データを入力としてモデルを出力する。予測フェーズでは学習フェーズで出力したモデルと、予測データを基に予測する。機械学習では、予測フェーズにより高精度の予測結果を得るには、学習フェーズにおいて質の高いモデルを作成することが重要である。
【０００４】
質が高いモデルを生成するには、対象のデータに対して適切な機械学習のアルゴリズムと、アルゴリズム固有のパラメータ（ハイパーパラメータ）との最適化を行うこととなる。この最適化では、アルゴリズムやハイパーパラメータを変えながら何度もモデルの作成とモデルの評価が行われる。この一連の処理を、以下「モデル探索」と呼ぶことにする。
【０００５】
モデル探索を効率的に進めるには、探索過程で生成されるデータの再利用を促進させるのが有効である。例えばモデル探索では、ＤＡＧ（有向非巡回グラフ：Directed Acyclic Graph）で、処理を管理するものがある。ＤＡＧは、処理を辺、入出力を頂点とするグラフである。ＤＡＧを利用したモデル探索では、ＤＡＧが同一のデータを生成しているのであればそのデータをキャッシュすることで、そのデータを再利用できる。
【０００６】
なお、ＤＡＧは、様々な技術に利用されている。例えば、ＤＡＧを用いて、プロセッサ内のリソースの利用効率を向上し、かつ、命令の実行において高速なスケジュールの生成を行う命令スケジューリング装置がある。また、ＤＡＧを用いて、効率的かつ正確な構成プログラムの構築を見込んで多数の部品間の相互依存関係を追跡し続ける、製品の構成方法も考えられている。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２００２−２６８８９５号公報
【特許文献２】特表２００４−５２３０２６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
モデル探索において、ＤＡＧが同一のデータを生成しているのであればそのデータを再利用できるが、現実には、モデル探索においてＤＡＧが生成するデータが同一のデータを生成するのかを判定することは難しい。その原因は、モデル探索では、次に探索するアルゴリズムとハイパーパラメータを決定する最適化系と、実際にモデル探索を行う実行系が分離していることにある。
【０００９】
なおメモ化と呼ばれる手法を用いれば、一連の処理が固定化されていて、かつ与えられるパラメータの種類と数が固定されている場合、それらの組み合わせを覚えておくことでデータの同一性を判定することができる。しかし、最適化系が実行系に与えるパラメータの数と種類に応じてデータの同一性を判定する仕組みを実行系が備えていると、最適化系のパラメータの数や種類が変化したときに、実行系が備えた仕組みをその都度変更しなければならなくなる。その結果、実行系におけるモデル探索用のプログラムの保守性が低下する。
【００１０】
以上のことを考慮すると、モデル探索におけるデータの再利用を促進するには、最適化系が実行系にどのようなパラメータを与えるのかといった仕組みに依存せずに、モデル探索で用いられるデータの同一性を判定できることが重要となる。
【００１１】
１つの側面では、本発明は、最適化の仕組みに依存せずにモデル探索で用いられるデータの同一性を判定できるようにすることを目的とする。
【課題を解決するための手段】
【００１２】
１つの案では、機械学習の処理をコンピュータに実行させる機械学習制御プログラムが提供される。当該機械学習の処理は、モデル探索に利用するパラメータを含む探索条件を決定する最適化系と、決定された探索条件に応じて、モデル探索プログラムに示されたモデル探索を行う実行系とに分けて実行される。コンピュータは、機械学習制御プログラムに基づいて以下の処理を実行する。
【００１３】
コンピュータは、最適化系で第１の探索条件が決定されたとき、第１の探索条件に基づくモデル探索で利用する第１のデータを生成するための一連の処理を示す第１処理列内の各処理について、処理の分類が、モデル探索プログラムの実行環境に用意された汎用プログラムを呼び出す第１種処理であれば、呼び出し先の汎用プログラムを示す処理名と該処理の呼び出し時に指定する引数との組を、該処理の処理特定情報として取得し、処理の分類が、モデル探索プログラム中に処理内容が定義された第２種処理であれば、処理内容を示す処理名と該処理中で参照するパラメータとの組を、該処理の処理特定情報として取得する。次にコンピュータは、最適化系で決定された第１の探索条件に基づくモデル探索において、第１のデータが生成され、かつ格納されたとき、第１処理列内の処理それぞれの処理特定情報を、生成された第１のデータに関連付けてテーブルに格納する。次にコンピュータは、最適化系で第２の探索条件が決定されたとき、第２の探索条件に基づくモデル探索で利用する第２のデータを生成するための一連の処理を示す第２処理列内の各処理について、処理の分類が第１種処理であれば、呼び出し先の汎用プログラムを示す処理名と該処理の呼び出し時に指定する引数との組を処理特定情報として取得し、処理の分類が第２種処理であれば、処理内容を示す処理名と該処理で参照するパラメータとの組を処理特定情報として取得する。そしてコンピュータは、第２処理列内の各処理の処理特定情報を、テーブルに格納された第１処理列内の各処理の処理特定情報と比較して、第２のデータと第１のデータとが一致するか否かを判定する。
【発明の効果】
【００１４】
１態様によれば、最適化の仕組みに依存せずにモデル探索で用いられるデータの同一性を判定可能となる。
【図面の簡単な説明】
【００１５】
【図１】第１の実施の形態に係る機械学習制御装置の構成例を示す図である。
【図２】ＤＡＧを用いたキャッシュの再利用の仕組みを示す図である。
【図３】最適化系と実行系とによる機械学習の仕組みを示す図である。
【図４】ＡＰＩの処理とクロージャの処理とが混在するＤＡＧの一例を示す図である。
【図５】第２の実施の形態の並列分散処理システム構成例を示す図である。
【図６】マスタノードのハードウェアの一構成例を示す図である。
【図７】第２の実施の形態における機械学習機能を示すブロック図である。
【図８】機械学習の処理手順の一例を示すフローチャートである。
【図９】実行履歴テーブル作成処理の手順の一例を示すフローチャートである。
【図１０】ユーザが作成したコードの一例を示す図である。
【図１１】再利用するデータを作成するための一連の処理の検出例を示す図である。
【図１２】再利用するデータを生成するための一連の処理の流れを示す図である。
【図１３】クロージャとコンパイル後のクラス名との対応関係の一例を示す図である。
【図１４】実行履歴テーブルの一例を示す図である。
【図１５】モデル探索処理の手順の一例を示すフローチャートである。
【図１６】ＤＡＧ修正処理の手順の一例を示すフローチャートである。
【図１７】ＤＡＧの修正例を示す図である。
【図１８】変数「ＴＡＢＬＥＳ」の一例を示す図である。
【図１９】変数「ＣＡＮＤＩＤＡＴＥＳ」の一例を示す図である。
【図２０】同一性判定処理の手順の一例を示すフローチャートである。
【図２１】同一性判定の第１の例を示す図である。
【図２２】同一性判定の第２の例を示す図である。
【図２３】同一性判定の第３の例を示す図である。
【図２４】同一性判定の第４の例を示す図である。
【図２５】並列分散処理基盤の一例を示す図である。
【図２６】機械学習の並列分散処理の手順の一例を示す第１の図である。
【図２７】機械学習の並列分散処理の手順の一例を示す第２の図である。
【発明を実施するための形態】
【００１６】
以下、本実施の形態について図面を参照して説明する。なお各実施の形態は、矛盾のない範囲で複数の実施の形態を組み合わせて実施することができる。
〔第１の実施の形態〕
まず第１の実施の形態について説明する。
【００１７】
図１は、第１の実施の形態に係る機械学習制御装置の構成例を示す図である。機械学習制御装置１０は、演算部１１と記憶部１２とを有する。演算部１１は、機械学習制御プログラムに基づいて、機械学習を、最適化系１１ａと実行系１１ｂとに分けて実行する。最適化系１１ａは、モデル探索に利用するパラメータを含む探索条件２ａ，２ｂ，２ｃを決定する処理である。実行系１１ｂは、決定された探索条件２ａ，２ｂ，２ｃに応じて、モデル探索プログラム１に示されたモデル探索を行う処理である。モデル探索プログラム１は、例えばユーザにより作成されたソースコードをコンパイルして生成されたマシン語のプログラムである。
【００１８】
実行系１１ｂは、取得手段１１ｃ、判定手段１１ｄ、モデル探索手段１１ｅ、および格納手段１１ｆを含む。
取得手段１１ｃは、最適化系１１ａで探索条件２ａ〜２ｃが決定されたとき、探索条件２ａ〜２ｃに基づくモデル探索で利用するデータを生成するための一連の処理を示す処理列内の各処理について、処理特定情報３ａ〜３ｆを習得する。処理特定情報３ａ〜３ｆは、処理の分類に応じて取得される。取得手段１１ｃは、処理の分類が、モデル探索プログラムの実行環境に用意された汎用プログラムを呼び出す第１種処理であれば、呼び出し先の汎用プログラムを示す処理名と処理の呼び出し時に指定する引数との組を、処理特定情報３ａ〜３ｆとして取得する。また取得手段１１ｃは、処理の分類が、モデル探索プログラム中に処理内容が定義された第２種処理であれば、処理内容を示す処理名と処理で参照するパラメータとの組を、処理特定情報３ａ〜３ｆとして取得する。
【００１９】
なお、第１種処理は、例えばＡＰＩ（Application Programming Interface）の呼び出し処理である。また第２種処理は、例えばクロージャである。第２種処理に分類される処理の処理内容を示す処理名は、例えばコンパイル時に割り当てられたクラス名である。
【００２０】
判定手段１１ｄは、探索条件２ａ〜２ｃに基づくモデル探索で利用するデータを生成するための一連の処理を示す処理列内の各処理の処理特定情報３ａ〜３ｆを、テーブル４に格納された、処理列ごとの処理特定情報と比較する。そして判定手段１１ｄは、比較結果に基づいて、生成するデータと、既に格納されているデータとが一致するか否かを判定する。
【００２１】
例えばテーブル４に、探索条件２ａ，２ｂに基づくモデル探索で利用するデータを生成するための一連の処理を示す処理列（第１処理列）内の各処理の処理特定情報３ａ〜３ｄが格納されているものとする。このとき探索条件２ｃが決定されると、判定手段１１ｄは、探索条件２ｃに基づくモデル探索で利用するデータを生成するための一連の処理を示す処理列（第２処理列）内の各処理の処理特定情報３ｅ，３ｆと、処理特定情報３ａ〜３ｄとを比較する。例えば判定手段１１ｄは、まず、探索条件２ｃに応じて取得した処理特定情報３ｅ，３ｆを、探索条件２ａに応じて取得した処理特定情報３ａ，３ｂと比較する。判定手段１１ｄは、探索条件２ａに応じて実行された第１処理列の処理数と、探索条件２ｃに応じて実行される第２処理列の処理数とを比較する。また判定手段１１ｄは、探索条件２ａに応じて実行された第１処理列と探索条件２ｃに応じて実行される第２処理列との同じ処理順の処理の処理特定情報同士を比較する。判定手段１１ｄは、処理数が等しく、同じ処理順の処理の処理特定情報同士がすべて等しい場合、探索条件２ａに応じて生成されたデータ５ａと、探索条件２ｃに応じて実行される第２処理列によって生成されるデータとが一致すると判定する。
【００２２】
モデル探索手段１１ｅは、最適化系１１ａが決定した探索条件２ａ〜２ｃに従って、モデル探索プログラム１に示された処理手順でのモデル探索を行い、モデルを生成する。なお、モデル探索手段１１ｅは、モデル探索で利用するデータのうち、判定手段１１ｄにおいて、不一致と判定されたデータについては、そのデータを生成し、生成したデータを記憶部１２に格納する。モデル探索手段１１ｅは、モデル探索に利用するデータが、記憶部１２に格納されているデータと一致すると判定された場合、そのデータを生成する一連の処理に変えて、格納されているデータを取得するように、探索条件に基づくモデル探索の処理手順を修正する。そして、モデル探索手段１１ｅは、修正した処理手順に従って、記憶部１２からデータを取得する。
【００２３】
格納手段１１ｆは、探索条件２ａ〜２ｃに基づくモデル探索においてデータが生成され、かつ格納されたとき、データを生成するための処理列内の処理それぞれの処理特定情報を、生成されたデータに関連付けてテーブル４に格納する。
【００２４】
このような機械学習制御装置１０によれば、例えば、最適化系１１ａで１回目の探索条件決定処理が行われ、探索条件２ａが生成されたとき、その時点ではテーブル４内は空であり、判定手段１１ｄでは不一致と判定される。その結果、モデル探索手段１１ｅにおけるモデル探索の過程でデータ５ａが生成され、そのデータ５ａが記憶部１２に格納される。この際、データ５ａを生成するための一連の処理それぞれに対して取得された処理特定情報３ａ，３ｂが、データ５ａの保存場所に関連付けて、テーブル４に登録される。
【００２５】
次に最適化系１１ａで２回目の探索条件決定処理が行われ、探索条件２ｂが生成される。すると、探索条件２ｂに基づくモデル探索で利用するデータ５ｂを生成するための一連の処理の処理特定情報３ｃ，３ｄが取得され、既にテーブル４に格納されている処理特定情報３ａ，３ｂと比較される。図１の例では、処理特定情報３ｂと処理特定情報３ｄとが異なるため、不一致と判定される。その結果、モデル探索手段１１ｅにおけるモデル探索の過程でデータ５ｂが生成され、そのデータ５ｂが記憶部１２に格納される。この際、データ５ｂを生成するための一連の処理ぞれぞれの処理特定情報３ｃ，３ｄが、データ５ｂの保存場所に関連付けて、テーブル４に登録される。
【００２６】
次に最適化系１１ａで３回目の探索条件決定処理が行われ、探索条件２ｃが生成される。すると、探索条件２ｃに基づくモデル探索で利用するデータ５ａを生成するための一連の処理の処理特定情報３ｅ，３ｆが取得され、既にテーブル４に格納されている処理特定情報３ａ，３ｂの組および処理特定情報３ｃ，３ｄの組と比較される。図１の例では、処理特定情報３ｅ，３ｆは、探索条件２ａに応じたモデル探索時に格納された処理特定情報３ａと処理特定情報３ｂと一致する。その結果、モデル探索手段１１ｅにおけるモデル探索の過程では、データ５ａの生成に代えて、記憶部１２に格納されたデータ５ａが再利用される。すなわち、テーブル４において処理特定情報３ａと処理特定情報３ｂに関連付けられた保存場所からデータ５ａが取得される。
【００２７】
このようにして、最適化系の仕組みに依存せずに、データの同一性を判定することが可能となり、格納したデータを再利用することができる。すなわち、データを生成するための一連の処理にクロージャのような、モデル探索プログラム１内に処理内容が記述された処理の場合、その処理を一意に特定する名称と、参照するパラメータとの組が、処理特定情報として取得される。この処理特定情報を用いることで、クロージャのような処理であっても、処理の同一性を正しく判断することができ、生成されるデータの同一性が正しく判定できる。しかもデータの同一性判定を行うために、最適化系の仕組みに応じてモデル探索プログラム１の処理を変更するようなこともなく、モデル探索プログラム１の保守性が低下することもない。
【００２８】
なお、データを生成するための一連の処理について、処理特定情報の取得先を、モデル探索プログラム１のコンパイル時に定義しておくことができる。例えば、機械学習制御装置１０の演算部１１は、ソースコードをコンパイルしてモデル探索プログラム１を生成する際に、モデル探索の過程で生成されるデータの格納指示を検出する。次に演算部１１は、そのデータを生成するための一連の処理を、第１種処理と第２種処理とに分類する。次に演算部１１は、そのデータを生成するための一連の処理に関連付けて、処理の分類に応じた処理特定情報の取得先を記憶する。処理がＡＰＩであれば、処理特定情報の取得先は、そのＡＰＩを呼び出すための関数名と、呼び出し時に指定される引数である。引数は、例えば探索条件２ａ〜２ｃ内で、パラメータとして指定されている場合もある。処理がクロージャであれば、処理特定情報の取得先は、そのクロージャの処理内容と、処理において参照するパラメータである。参照するパラメータは、探索条件２ａ〜２ｃ内で指定されている場合もある。クロージャの処理内容は、例えばコンパイル時にその処理内容に割り当てられたクラス名によって特定できる。すなわち、クラス名を指定することで、処理内容を取得可能である。
【００２９】
演算部１１は、各処理について、処理特定情報の取得先は、例えばテーブル４の項目名に登録しておく。この場合、取得手段１１ｃは、各処理の処理特定情報を取得する際に、データを生成するための一連の処理に対応するテーブル４の項目名に登録されている取得先から、処理特定情報を取得する。このようにコンパイル時に処理特定情報の取得先を定義しておくことで、データの同一性判定が容易となり、モデル探索の処理効率が向上する。
【００３０】
なお、演算部１１は、例えば機械学習制御装置１０が有するプロセッサにより実現することができる。また、記憶部１２は、例えば機械学習制御装置１０が有するメモリまたはストレージ装置により実現することができる。
【００３１】
また、図１に示した各要素間を接続する線は通信経路の一部を示すものであり、図示した通信経路以外の通信経路も設定可能である。
〔第２の実施の形態〕
次に第２の実施の形態について説明する。第２の実施の形態では、ビッグデータの機械学習において、ＤＡＧを用いて実行された処理の過程で生成されたデータと同一データが他のＤＡＧでも使用されるとき、先に生成されたデータを再利用できるようにしたものである。
【００３２】
まず、ビッグデータの機械学習におけるデータ再利用の困難性について説明する。
ビッグデータの機械学習において取り扱うデータは、１つのマシンで扱うことができないデータサイズである。そのため並列分散処理技術を用いてモデル探索が行われる。特に、機械学習は処理の繰り返しが多発するため、データをメモリに保持したまま処理を適用できるインメモリ並列分散処理のミドルウェアが用いられる。インメモリ並列分散処理のミドルウェアの代表例として「Ａｐａｃｈｅ  ｓｐａｒｋ（商標）」が挙げられる。インメモリ並列分散処理のミドルウェアの特徴は以下の通りである。
・処理を辺、入出力データを頂点とするＤＡＧの形式で全体の処理を管理する。
・ユーザが明示的に指定したデータを各サーバのメモリ上に分散キャッシュし、ＤＡＧ上の同じデータが繰り返し参照される場合はキャッシュしたデータを再利用する仕組みを持つ。
【００３３】
図２は、ＤＡＧを用いたキャッシュの再利用の仕組みを示す図である。図２に示すＤＡＧ３０には、「Ａ」〜「Ｆ」のデータの生成過程が示されている。各データ間を接続している辺が、データを生成する処理３１〜３６を表している。
【００３４】
機械学習では、探索するアルゴリズムを示すプログラムに基づいてＤＡＧ３０を作成した後、実効計画が立てられる。その後、実際に各ＤＡＧ３０に示されるデータが順番に生成される。ＤＡＧ３０において、データを処理することで得られたデータは、元のデータと親子関係にある。例えば、図２ではデータ「Ａ」はデータ「Ｂ」の親であり、データ「Ｂ」はデータ「Ａ」の子である。
【００３５】
図２のＤＡＧ３０では、最も下位の子供のデータはデータ「Ｆ」である。このデータ「Ｆ」を生成することがＤＡＧ３０による実行計画の最終目標である。データ「Ｆ」を生成するための一連の処理は、処理群（１以上の処理の集合）に分けられる。第１の処理群には、データ「Ａ」を入力としてデータ「Ｄ」を作成する処理３１〜３３が含まれる。第２の処理群には、データ「Ａ」を入力としてデータ「Ｅ」を作成する処理３１，３５が含まれる。第３の処理群には、データ「Ｄ」とデータ「Ｅ」を付き合わせることで得られるデータ「Ｆ」を作成する処理３４，３６が含まれる。実行の順番を決定する際には、まず、データ「Ｆ」の親を辿ることで、データ「Ｄ」とデータ「Ｅ」が見つけられる。その後、データ「Ｄ」とデータ「Ｅ」との親を辿ることで、Ａ→Ｂ→Ｃ→Ｄ（第１の処理群）とＡ→Ｂ→Ｅ（第２の処理群）の２種類の親子関係が見つけられる。この結果、見つけられた２種類の親子関係に沿った処理の実行計画が立てられる。
【００３６】
このような一連の処理を記述したプログラムの作成時点で、プログラマがデータ「Ｂ」が共通していることを意識していれば、そのプログラマは、データ「Ｂ」をキャッシュするように指示したコーディングをすることができる。例えばプログラマは、第１の処理群の実行時に生成されたデータ「Ｂ」を第２の処理群の実行時に省略するようにコーディングする。このコーディングにより、例えば、機械学習の実行系において、第１の処理群の実行後、第２の処理群の実行計画を立てるときに、データ「Ｅ」から親を辿っていく過程でデータ「Ｂ」が既にキャッシュされていて再利用できることが検知される。そして、実行系では、データ「Ａ」を使わずに、キャッシュされているデータ「Ｂ」を使用してデータ「Ｅ」を生成する。これにより、全体の処理を高速化することができる。なお、データ「Ｆ」が生成されると、ＤＡＧ３０の実行計画は破棄される。
【００３７】
機械学習では、１回の探索が複数のＤＡＧに分かれていてもよいが、以下の説明では、説明を分かりやすくするため、１回のモデル探索が１つのＤＡＧに相当するものと仮定する。
【００３８】
モデル探索を効率的に進めるには、各モデル探索で生成するＤＡＧに基づいて同一のデータが生成されているのであればそのデータをキャッシュすればよい。しかし、ＤＡＧに基づいて生成されるデータが、他のＤＡＧに基づいて生成されたデータと同一なのかを判定することは難しい。その原因は高度なモデル探索を実現するためのアーキテクチャにおいて、次に探索するアルゴリズムとハイパーパラメータを決定する最適化系と、実際に並列処理を行う実行系とが分離していることに起因する。
【００３９】
図３は、最適化系と実行系とによる機械学習の仕組みを示す図である。最適化系４１は、実行系４２にどのような条件でモデル探索を行うのかを探索条件４３として、実行系４２に指示する。実行系４２は、モデル探索手順を示すプログラム４０に探索条件４３を適用し、モデル作成と評価を行う。そして実行系４２は、モデル作成と評価の結果を、探索結果４４として最適化系４１に返す。最適化系４１は、実行系４２から探索結果４４が得られるごとに、次の探索条件４３を最適化する。
【００４０】
モデル探索の探索条件４３には、例えば入力データ（InputData）、サンプリング率（sampling_rate）、モデル作成に用いる機械学習アルゴリズム（Algorithm）、およびアルゴリズム固有のハイパーパラメータ（HyperParameter1、HyperParameter2…）が含まれる。入力データからサンプリング率に応じてサンプリングされたデータ４５ａ〜４５ｃは、メモリにキャッシュしておくことができる。実行系４２は、探索条件４３に示されるサンプリング率に応じたデータをメモリから取得し、モデル探索を行う。図３の例では、１０％のサンプリング率でサンプリングされたデータ４５ｂが利用されている。
【００４１】
実行系４２は、モデル探索を行うときにＤＡＧを生成し、一度モデル探索を行い最適化系４１に探索結果４４を返すとＤＡＧを廃棄する。この場合、モデル探索ごとに異なるＤＡＧが生成される。そのため実行系４２は、以前に実行したモデル探索で生成したデータと、これから実行するモデル探索で生成するデータとの同一性を判定することができず、データを有効に再利用することができない。
【００４２】
例えば、入力データとサンプリング率を見ればデータの同一性を判定することはできるが、ミドルウェアの実行系４２はプログラムのみを見て同一性を判定する。そのためＤＡＧが同一であるかを容易に判定することはできない。データの同一性が判定できないと、同一のデータを何度も作り直すことになり無駄な処理が発生する（課題１）。
【００４３】
なお、最適化系の最適化手法は様々であるが、その仕組みにあわせてデータの同一性を自動的に判定するように実行系をコーディングすることは可能である。例えば、図３の例では、入力データとサンプリング率とのペアをキーとするハッシュマップを用意し、TrainDataを作成するたびにデータをキャッシュしてキーと関連付けて記憶しておく。最適化系４１からモデル探索の探索条件４３を新たに受け取ると、探索条件４３中のサンプリング率と入力データのペアから過去に実行したものであるかを判定することができる。そのため、異なるＤＡＧであっても再利用できるデータであるかを判定することができる。このように、指示元から与えられた指示（クエリ）の内容を見て結果の同一性を判定しデータを再利用する方法は、例えばメモ化が知られている。しかし、これらは指示元である最適化の手法に特化した実装を避けられない。そのため、最適化系４１の探索方法を改善すると再度それにあわせて実行系４２のデータ判定方法を修正しなければならずプログラムの保守性が低下する（課題２）。
【００４４】
そこで、第２の実施の形態では、ＤＡＧの仕組みを活用した汎用的なデータ同一性の判定方法を導入することで、ユーザが最適化系の仕組みを意識することなく自動的にデータを再利用することを可能にする。これにより、プログラムの保守性を損なうことなく、モデル探索の高速化が実現される。詳細には以下の通りである。
【００４５】
無駄な処理の発生（課題１）および保守性の低下（課題２）の原因の１つは、最適化の仕組みが複数あり得る最適化系から、モデル探索の実行方法が、適宜に与えられることである。また上記課題の発生原因として、ＤＡＧが探索結果を生成するたびに廃棄され、ＤＡＧの親子関係の情報以外に使える情報が、最適化系のモデル探索手法に依存していることにある。
【００４６】
第２の実施の形態では、最適化系のモデル探索手法に依存しない方法で、ＤＡＧにおけるデータの同一性を判定する。なお、ビッグデータの並列分散処理で行われる処理の多くは、ミドルウェアでは予めその処理を実現するＡＰＩが用意されている。第２の実施の形態では、予め用意されているＡＰＩを有効に活用する。またＡＰＩに用意されていない特殊な処理に関しては、クロージャ（closure：関数オブジェクトの一種）と呼ばれるプログラムのバイナリを各サーバに配布してデータに適用するように指示する機能を実行系が備えている。クロージャの処理内容は、例えば、ユーザが作成したモデル探索用のプログラム内に定義される。第２の実施の形態では、ミドルウェアが、ＡＰＩとクロージャとの二種類の実行方法ですべての処理を実現していることも、有効に活用する。
【００４７】
ＡＰＩで実行できる処理については、どのＡＰＩがどの引数で実行されているかを判定することで、過去に実行処理と同じ処理であるかを判定することができる。
クロージャについては、処理の同一性を、クロージャの処理で用いるＡＰＩと最適化系から与えられるパラメータ変数との組合せで判定することができる。具体的には、コード（例えば所定のプログラミング言語で記述されたソースコード）のコンパイル時に、コンパイルを実行するマシンにおいて、ミドルウェアの大規模処理のためのＡＰＩとクロージャの処理が区別される。この時、当該マシンは、クロージャの処理と判断された処理の中身を、（Ａ）最適化系から指定される各種パラメータと、（Ｂ）処理内容を表すＡＰＩとの組み合わせと見なす。その後、実際にモデル探索をする場面において、最適化系からパラメータを与えられた、並列分散処理システムの実行系が、処理内容（Ｂ）とパラメータ（Ａ）の組合せで処理が同一であるかを判定する。コードをコンパイルするタイミングと実際にパラメータを与えられて処理が確定するタイミングが異なっているため、このような手法を使い処理の同一性を判定することができる。
【００４８】
図４は、ＡＰＩの処理とクロージャの処理とが混在するＤＡＧの一例を示す図である。例えば、ＤＡＧ３０の処理３２，３５がクロージャを用いて実行される処理であり、他の処理３１，３３，３４，３６がＡＰＩを用いて実行される処理であるものとする。この場合、処理３１，３３，３４，３６については、ＡＰＩの同一性判定手法を用いて、処理の同一性を判定することができる。処理３２，３５については、クロージャの同一性判定手法を用いて、処理の同一性を判定することができる。
【００４９】
このように２種類の同一性判定手法を組み合わせることで、ビッグデータ向けの分散処理ミドルウェアが実行するすべての処理の同一性を判定し、異なるＤＡＧ間であっても、一連の処理の結果生成されるデータの同一性を判定することができる。異なるＤＡＧ間のデータの同一性が判定できれば、データの再利用により、無駄な処理が発生するという課題（課題１）を解決できる。また最適化系の仕組みに依存せずにデータの同一性を判定でき、プログラムの保守性が低下するという課題（課題２）を解決することができる。
【００５０】
以下、異なるＤＡＧ間でもデータの再利用を可能とした機械学習を実施する並列分散処理システムについて、詳細に説明する。
図５は、第２の実施の形態の並列分散処理システム構成例を示す図である。並列分散処理システムは、例えば１台のマスタノード１００と複数のワーカノード２１０，２２０，・・・を含んでいる。マスタノード１００と複数のワーカノード２１０，２２０，・・・とは、ネットワーク２０で接続されている。マスタノード１００は、機械学習の分散処理を制御するコンピュータである。ワーカノード２１０，２２０，・・・は、機械学習の実行系の処理を、並列処理で実行するコンピュータである。
【００５１】
図６は、マスタノードのハードウェアの一構成例を示す図である。マスタノード１００は、プロセッサ１０１によって装置全体が制御されている。プロセッサ１０１には、バス１０９を介してメモリ１０２と複数の周辺機器が接続されている。プロセッサ１０１は、マルチプロセッサであってもよい。プロセッサ１０１は、例えばＣＰＵ（Central Processing Unit）、ＭＰＵ（Micro Processing Unit）、またはＤＳＰ（Digital Signal Processor）である。プロセッサ１０１がプログラムを実行することで実現する機能の少なくとも一部を、ＡＳＩＣ（Application Specific Integrated Circuit）、ＰＬＤ（Programmable Logic Device）などの電子回路で実現してもよい。
【００５２】
メモリ１０２は、マスタノード１００の主記憶装置として使用される。メモリ１０２には、プロセッサ１０１に実行させるＯＳ（Operating System）のプログラムやアプリケーションプログラムの少なくとも一部が一時的に格納される。また、メモリ１０２には、プロセッサ１０１による処理に必要な各種データが格納される。メモリ１０２としては、例えばＲＡＭ（Random Access Memory）などの揮発性の半導体記憶装置が使用される。
【００５３】
バス１０９に接続されている周辺機器としては、ストレージ装置１０３、グラフィック処理装置１０４、入力インタフェース１０５、光学ドライブ装置１０６、機器接続インタフェース１０７およびネットワークインタフェース１０８がある。
【００５４】
ストレージ装置１０３は、内蔵した記憶媒体に対して、電気的または磁気的にデータの書き込みおよび読み出しを行う。ストレージ装置１０３は、コンピュータの補助記憶装置として使用される。ストレージ装置１０３には、ＯＳのプログラム、アプリケーションプログラム、および各種データが格納される。なお、ストレージ装置１０３としては、例えばＨＤＤ（Hard Disk Drive）やＳＳＤ（Solid State Drive）を使用することができる。
【００５５】
グラフィック処理装置１０４には、モニタ２１が接続されている。グラフィック処理装置１０４は、プロセッサ１０１からの命令に従って、画像をモニタ２１の画面に表示させる。モニタ２１としては、ＣＲＴ（Cathode Ray Tube）を用いた表示装置や液晶表示装置などがある。
【００５６】
入力インタフェース１０５には、キーボード２２とマウス２３とが接続されている。入力インタフェース１０５は、キーボード２２やマウス２３から送られてくる信号をプロセッサ１０１に送信する。なお、マウス２３は、ポインティングデバイスの一例であり、他のポインティングデバイスを使用することもできる。他のポインティングデバイスとしては、タッチパネル、タブレット、タッチパッド、トラックボールなどがある。
【００５７】
光学ドライブ装置１０６は、レーザ光などを利用して、光ディスク２４に記録されたデータの読み取りを行う。光ディスク２４は、光の反射によって読み取り可能なようにデータが記録された可搬型の記録媒体である。光ディスク２４には、ＤＶＤ（Digital Versatile Disc）、ＤＶＤ−ＲＡＭ、ＣＤ−ＲＯＭ（Compact Disc Read Only Memory）、ＣＤ−Ｒ（Recordable）／ＲＷ（ReWritable）などがある。
【００５８】
機器接続インタフェース１０７は、マスタノード１００に周辺機器を接続するための通信インタフェースである。例えば機器接続インタフェース１０７には、メモリ装置２５やメモリリーダライタ２６を接続することができる。メモリ装置２５は、機器接続インタフェース１０７との通信機能を搭載した記録媒体である。メモリリーダライタ２６は、メモリカード２７へのデータの書き込み、またはメモリカード２７からのデータの読み出しを行う装置である。メモリカード２７は、カード型の記録媒体である。
【００５９】
ネットワークインタフェース１０８は、ネットワーク２０に接続されている。ネットワークインタフェース１０８は、ネットワーク２０を介して、他のコンピュータまたは通信機器との間でデータの送受信を行う。
【００６０】
以上のようなハードウェア構成によって、第２の実施の形態の処理機能を実現することができる。なお、ワーカノード２１０，２２０，・・・も、図６に示したマスタノード１００と同様のハードウェアにより実現することができる。また、第１の実施の形態に示した機械学習制御装置１０も、図６に示したマスタノード１００と同様のハードウェアにより実現することができる。
【００６１】
マスタノード１００は、例えばコンピュータ読み取り可能な記録媒体に記録されたプログラムを実行することにより、第２の実施の形態の処理機能を実現する。マスタノード１００に実行させる処理内容を記述したプログラムは、様々な記録媒体に記録しておくことができる。例えば、マスタノード１００に実行させるプログラムをストレージ装置１０３に格納しておくことができる。プロセッサ１０１は、ストレージ装置１０３内のプログラムの少なくとも一部をメモリ１０２にロードし、プログラムを実行する。またマスタノード１００に実行させるプログラムを、光ディスク２４、メモリ装置２５、メモリカード２７などの可搬型記録媒体に記録しておくこともできる。可搬型記録媒体に格納されたプログラムは、例えばプロセッサ１０１からの制御により、ストレージ装置１０３にインストールされた後、実行可能となる。またプロセッサ１０１が、可搬型記録媒体から直接プログラムを読み出して実行することもできる。
【００６２】
図７は、第２の実施の形態における機械学習機能を示すブロック図である。機械学習におけるモデル探索の処理内容を記述したアプリケーションプログラムのコード５１をコンパイルし、実行バイナリ５３を生成するコンパイラ５２が設けられている。
【００６３】
実行管理部５４は、実行系５６で実行されたことのある一連の処理を管理する。例えば実行管理部５４は、コンパイラ５２がコンパイルを実行するとき、アプリケーションプログラムのコード５１に基づいて、所定のデータを生成するまでの一連の処理の実行命令を検出し、実行履歴テーブル５４ａに設定する。
【００６４】
実行バイナリ５３に基づく機械学習が、最適化系５５と実行系５６との連携した処理により実行される。最適化系５５と実行系５６との間の関係は、図３に示した通りである。実行系５６は、ＤＡＧ生成部５６ａ、同一性判定部５６ｂ、および実行部５６ｃを有する。
【００６５】
ＤＡＧ生成部５６ａは、最適化系５５から探索条件を受け取ると、実行バイナリ５３を参照し、探索条件に従った探索の際の、処理とデータとの関係を表すＤＡＧを生成する。ＤＡＧ生成部５６ａは、生成したＤＡＧを実行部５６ｃに送信する。
【００６６】
同一性判定部５６ｂは、ＤＡＧに基づいて、データ生成までに実行する一連の処理を判断し、実行管理部５４が管理する過去の実行履歴の中に、同じ一連の処理が登録されているかどうかを判断する。同じ一連の処理が登録されていれば、同一性判定部５６ｂは、その一連の処理の過去の実行で生成されたデータを再利用できると判断する。再利用できるデータがある場合、同一性判定部５６ｂは、そのデータが再利用できることを実行部５６ｃに通知する。
【００６７】
実行部５６ｃは、探索条件に従って、実行バイナリ５３に基づくモデル探索を実行する。実行部５６ｃは、モデル探索を実行する際、ＤＡＧ生成部５６ａで生成されたＤＡＧに含まれるデータのうち、同一性判定部５６ｂで、過去に生成されたデータと同一であると判定されたデータがあるか否かを判断する。実行部５６ｃは、該当するデータがある場合、ＤＡＧで示される一連の処理のうち、該当データを生成するまでの処理をスキップし、該当データをデータ記憶部５７から取得する。そして実行部５６ｃは、データ記憶部５７から取得したデータを用いて、そのデータを利用した処理を実行する。また実行部５６ｃは、モデル探索過程で生成したデータを、データ記憶部５７に格納する。
【００６８】
データ記憶部５７は、モデル探索過程で生成されたデータを記憶する。
なお、図７に示した各要素間を接続する線は通信経路の一部を示すものであり、図示した通信経路以外の通信経路も設定可能である。また、図７に示した各要素の機能は、例えば、その要素に対応するプログラムモジュールをコンピュータに実行させることで実現することができる。
【００６９】
図７に示した機能を図５に示す並列分散処理システムで実現する場合、例えば実行部５６ｃとデータ記憶部５７以外の各要素は、マスタノード１００内に設けられる。データ記憶部５７は、例えば複数のワーカノード２１０，２２０，・・・で連携動作するファイルシステムで実現される。実行部５６ｃは、例えば、マスタノード１００からの指示で、複数のワーカノード２１０，２２０，・・・が処理を実行することで実現される。
【００７０】
次に、第２の実施の形態における機械学習の処理手順について説明する。
図８は、機械学習の処理手順の一例を示すフローチャートである。以下、図８に示す処理をステップ番号に沿って説明する。
【００７１】
［ステップＳ１０１］コンパイラ５２は、アプリケーションのコード５１をコンパイルし、実行バイナリ５３を生成する。コンパイラ５２は、生成した実行バイナリ５３を、実行系５６に渡す。
【００７２】
［ステップＳ１０２］実行管理部５４は、実行履歴テーブル作成処理を実行する。この処理の詳細は、後述する（図９参照）。
［ステップＳ１０３］最適化系５５がモデル探索のためのパラメータなどの探索条件を決定し、実行系５６にその探索条件でのモデル探索を依頼する。
【００７３】
［ステップＳ１０４］実行系５６は、指定されたパラメータに基づいて、モデル探索処理を行う。この処理の詳細は後述する（図１５参照）。
［ステップＳ１０５］実行系５６は、モデル探索の結果を最適化系５５に送信する。
【００７４】
［ステップＳ１０６］最適化系５５は、機械学習を終了させるか否かを判断する。例えば最適化系５５は、予め設定された回数分のモデル探索処理が完了したら、機械学習終了と判断する。機械学習を終了させる場合、最適化系５５は、その次点で最も評価の高いモデルを機械学習の結果として出力し、処理を終了する。機械学習を継続する場合、処理がステップＳ１０３に進められる。
【００７５】
このような手順で機械学習が進められる。次に、実行履歴テーブル作成処理について、詳細に説明する。
図９は、実行履歴テーブル作成処理の手順の一例を示すフローチャートである。以下、図９に示す処理をステップ番号に沿って説明する。
【００７６】
［ステップＳ１１１］実行管理部５４は、ユーザによって作成されたアプリケーションのコードの中から、ユーザが再利用を指示したデータを見つける。例えば実行管理部５４は、コード中のキャッシュを指示する命令を見つけ、その命令におけるキャッシュ対象のデータが、再利用するデータであると判断する。
【００７７】
［ステップＳ１１２］実行管理部５４は、再利用するデータを生成するための一連の処理を、ユーザによって作成されたコードの中から見つける。
［ステップＳ１１３］実行管理部５４は、再利用するデータを生成するための一連の処理について、各処理の同一性判定に用いる情報を実行履歴テーブルに書き出す。
【００７８】
このような手順で実行履歴テーブルが作成される。以下、具体例を用いて、実行履歴テーブルの作成手順を説明する。
図１０は、ユーザが作成したコードの一例を示す図である。コード６０には、ＲＤＤ（Resilient Distributed Dataset）と呼ばれるデータ構造のデータの生成処理が記述されている。そしてコード６０には、データ「sample」を再利用することを示すＲＤＤ．ｃａｃｈｅの実行箇所がある。実行管理部５４は、コード６０内の命令文を解析し、ＲＤＤ．ｃａｃｈｅの実行箇所を検出する。
【００７９】
図１１は、再利用するデータを作成するための一連の処理の検出例を示す図である。まず、実行管理部５４は、ＲＤＤ．ｃａｃｈｅの実行箇所が、データ「indexed」に対して、ＡＰＩ「sample」を引数２つで実行した結果生成されるデータのキャッシュ命令であることを検出する（ステップＳ１１）。この際、実行管理部５４は、ＡＰＩ「sample」の引数が、最適化系５５から与えられたパラメータ[rate]とパラメータ[seed]であることも検出する。次に実行管理部５４は、データ「indexed」が、データ「clean」に対して、ＡＰＩ「zipWithIndex」を引数なしで実行した結果であることを検出する（ステップＳ１２）。
【００８０】
次に実行管理部５４は、データ「input」に対して、クロージャ「filter」を実行していることを検出する（ステップＳ１３）。例えば実行管理部５４は、ミドルウェアにおいて予め用意されたＡＰＩ以外の関数をクロージャと判断する。実行管理部５４は、クロージャの中身を調べ、クロージャの内容を取得すると共に、最適化系５５からパラメータ[THRETHOLD]が与えられることを検出する。
【００８１】
次に実行管理部５４は、ＡＰＩ「textFile」を使いファイル「“/database/file1”」からデータを読み込んでいることを検出する（ステップＳ１４）。これにより、再利用するデータを作成するための一連の処理の検出が完了する。
【００８２】
実行管理部５４は、処理の長さが「４」であることと、各処理で格納する情報が確定したため、確定した情報に基づいて、実行履歴テーブルを作成する。
図１２は、再利用するデータを生成するための一連の処理の流れを示す図である。図１２に示すように、４つの処理の結果、再利用するデータが生成される。４つの処理のうち、「filter」のみがクロージャであり、他の処理はＡＰＩである。
【００８３】
検出された一連の処理を実行履歴テーブルに設定するとき、例えば、実行管理部５４は、再利用するデータごとに実行履歴テーブルを分ける。また実行管理部５４は、各処理で与えられることになるＡＰＩの種類と引数の数、クロージャの内容、最適化系から与えられるパラメータを保存する。
【００８４】
なお、クロージャを含むコードをコンパイルすると、クロージャのためのクラスファイルが作られる。そのため、クロージャの内容とクラスファイルは一対一で対応する。
図１３は、クロージャとコンパイル後のクラス名との対応関係の一例を示す図である。例えばＡクラスのコンパイル後のクラス名が「A.class」のとき、Ａクラスのクロージャのコンパイル後のクラス名は「A$$anonfun$1.class」となる。モデル探索を分散処理する際、ワーカノード２１０，２２０，・・・は、クラス名は「A$$anonfun$1.class」を指定することで、クロージャの処理内容を取得できる。
【００８５】
また、変数への参照情報は、クラスファイルの中で定義される。例えば「＃２１」のように、参照情報は、クラスファイル中の番号で管理される。そこで実行管理部５４は、クロージャについては、コンパイル後のクラス名と、最適化系から与えられるパラメータに対応する変数の番号とを、例えば実行履歴テーブルの項目名として設定する。
【００８６】
図１４は、実行履歴テーブルの一例を示す図である。実行履歴テーブル５４ａには、再利用するデータを生成するための一連の処理（「処理１」〜「処理４」）を示す情報が、処理順に設定されている。
【００８７】
例えば実行履歴テーブル５４ａには、処理がＡＰＩの場合、ＡＰＩ名と変数の参照先とが、項目名に含まれる。処理がクロージャの場合、クロージャのクラス名と変数の参照先を示す番号とが設定される。変数の参照先は、引数の場合は「aload_N」、それ以外の場合は「#N」（「N」は整数）で表現される。なお「処理４」の引数１と引数２は最適化系５５から与えられるパラメータだが、引数として記録しても正常に動作する。
【００８８】
生成された実行履歴テーブル５４ａは、例えばメモリ１０２内の実行管理部５４が管理する領域に格納される。
このように実行履歴テーブル５４ａの項目名として、各処理の名称と、引数やパラメータの取得先を示す情報とを登録しておく。同一性判定時には、実行履歴テーブル５４ａの項目名を参照して、各処理に関する情報を取得する。これにより、同一性判定時には、情報の取得先の特定処理が不要となり、同一性判定処理を効率的に行うことができる。
【００８９】
以上がコンパイル時に実行される処理である。その後、例えば機械学習の開始指示に応じて、図８のステップＳ１０３以降の機械学習が開始される。機械学習が開始されると、最適化系５５において探索条件が決定され、実行系５６においてモデル探索処理が実行される。
【００９０】
図１５は、モデル探索処理の手順の一例を示すフローチャートである。以下、図１５に示す処理をステップ番号に沿って説明する。
［ステップＳ１２１］ＤＡＧ生成部５６ａは、最適化系５５から与えられた探索条件に応じたモデル探索を実行するためのＤＡＧを構築する。
【００９１】
［ステップＳ１２２］ＤＡＧ生成部５６ａは、再利用できるデータの有無に応じて、ＤＡＧを修正する。このＤＡＧ修正処理の詳細は後述する（図１６参照）。
［ステップＳ１２３］ＤＡＧ生成部５６ａは、実行部５６ｃに修正後のＤＡＧを渡す。実行部５６ｃは、ワーカノード２１０，２２０，・・・にＤＡＧに従った処理の実行を依頼する。実行部５６ｃは、ワーカノード２１０，２２０，・・・それぞれの処理結果に応じたモデルを生成し、そのモデルを評価する。
【００９２】
次に、ＤＡＧ修正処理について詳細に説明する。
図１６は、ＤＡＧ修正処理の手順の一例を示すフローチャートである。以下、図１６に示す処理をステップ番号に沿って説明する。
【００９３】
［ステップＳ１３１］ＤＡＧ生成部５６ａは、生成したＤＡＧに示される各データについての同一性判定処理を、同一性判定部５６ｂに依頼する。同一性判定部５６ｂは、実行履歴テーブル５４ａを用いて、ＤＡＧ内のデータそれぞれについて、既にメモリにキャッシュされているデータとの同一性を判定する。同一のデータが存在する場合、キャッシュされているデータの再利用が可能である。同一性判定部５６ｂは、例えば、ＤＡＧ内に再利用可能なデータが含まれていれば、ＤＡＧ内の再利用可能なデータについて、再利用可能であることを示すフラグを立てる。同一性判定処理の詳細は、後述する（図２０参照）。
【００９４】
［ステップＳ１３２］ＤＡＧ生成部５６ａは、ＤＡＧの根（最初の処理における入力データ）を着目点として、着目点のデータから順に、再利用可能なデータの探索を開始する。
【００９５】
［ステップＳ１３３］ＤＡＧ生成部５６ａは、着目点の次の処理の結果により生成されるデータが再利用可能か否かを判断する。例えばＤＡＧ生成部５６ａは、ＤＡＧの該当データに、再利用可能であることを示すフラグが設定されていれば、再利用可能であると判断する。再利用可能であれば、処理がステップＳ１３４に進められる。再利用できなければ、処理がステップＳ１３５に進められる。
【００９６】
［ステップＳ１３４］ＤＡＧ生成部５６ａは、処理対象のＤＡＧを、再利用可能と判断したデータを根とするＤＡＧに変更する。例えばＤＡＧ生成部５６ａは、元のＤＡＧから、再利用可能なデータの生成過程を示す処理と、その処理で使用するデータの情報を削除する。
【００９７】
［ステップＳ１３５］ＤＡＧ生成部５６ａは、ＤＡＧの葉（最後の処理で生成されるデータ）まで探索が終了したか否かを判断する。探索が終了した場合、ＤＡＧ修正処理が終了する。探索が終了していなければ、ＤＡＧ生成部５６ａは、着目点の位置を、現在の着目点の次の処理で生成されるデータに移動し、処理をステップＳ１３３に進める。
【００９８】
このようにして、ＤＡＧが修正される。
図１７は、ＤＡＧの修正例を示す図である。図１７に示す構築前のＤＡＧ６１は、４つのデータ「Ａ」〜「Ｄ」と３つの処理「処理１」〜「処理３」を含んでいる。そして、２番目の「処理２」で生成されるデータ「Ｃ」には、再利用可能であることを示すフラグ６１ａが設定されている。
【００９９】
ＤＡＧ生成部５６ａは、ＤＡＧ６１を、最上位の親のデータ「Ａ」から順番に辿っていく。ＤＡＧ生成部５６ａは、ＤＡＧ６１を辿る途中で、フラグ６１ａを検出すると、フラグ６１ａが設定されたデータ「Ｃ」までに辿った処理を除外したＤＡＧ６２を生成する。そして、最後の子のデータ「Ｄ」までたどり着いたときに実際に処理すべき内容が確定する。図１７の例では、確定した処理が修正後のＤＡＧ６２に示され、ＤＡＧ６２に基づいて、キャッシュされたデータを再利用したモデル探索の処理が実行される。
【０１００】
次に、同一性判定処理について詳細に説明する。同一性判定処理は、以下の変数が用いられる。
・ＣＡＮＤＩＤＡＴＥ＿ＴＡＢＬＥ：ＤＡＧの処理内容が今のところ一致しており、最終的に再利用可能なデータが見つかるかもしれない実行履歴テーブルの候補。
・ＮＵＭ：処理の順番。
・ＴＡＢＬＥＳ：コンパイル時に作成した実行履歴テーブル一覧。データがキャッシュされるたびに処理と引数、パラメータがレコードとして格納される。図１８は、変数「ＴＡＢＬＥＳ」の一例を示す図である。図１８に示すように、変数「ＴＡＢＬＥＳ」には、コンパイル時に作成された実行履歴テーブル７１，７２が設定される。
・ＣＡＮＤＩＤＡＴＥＳ：探索候補のリスト。出力結果がキャッシュ済みの過去のＤＡＧのうち、現在実行しようとしているＤＡＧと一致する可能性があるものがレコードとして格納される。一致しないことが分かったレコードは、変数「ＣＡＮＤＩＤＡＴＥＳ」から削除される。図１９は、変数「ＣＡＮＤＩＤＡＴＥＳ」の一例を示す図である。図１９に示すように、変数「ＣＡＮＤＩＤＡＴＥＳ」には、ＤＡＧと一致する可能性が残されているＤＡＧの一連の処理を表すレコードが登録されている。
・ＰＲＯＣＥＳＳ：ＤＡＧの次の辺（処理）を示す情報。ＡＰＩなのかクロージャなのか、それらの引数や参照する変数をクラスファイルから算出する。
【０１０１】
これらの変数は、実際に同一性判定処理を実行するときに初めて値が決定する。値を評価するときにテーブルを参照するフック機能があるため、このフック機能によってテーブルが参照される。変数の内容は実行中に動的にロードされる。そのため、参照先さえ分かっていればＡＰＩの引数であってもクロージャ中で利用される変数であっても、実行中に実際の値を知ることができる。
【０１０２】
図２０は、同一性判定処理の手順の一例を示すフローチャートである。以下、図２０に示す処理をステップ番号に沿って説明する。
［ステップＳ１４１］同一性判定部５６ｂは、実行対象のＤＡＧの根のデータから順に探索を開始する。
【０１０３】
［ステップＳ１４２］同一性判定部５６ｂは、変数「ＮＵＭ」を「１」に初期化する。
［ステップＳ１４３］同一性判定部５６ｂは、実行対象のＤＡＧにおける次の処理（最初の処理である）を調べ、変数「ＰＲＯＣＥＳＳ」に設定する。変数「ＰＲＯＣＥＳＳ」には、次の処理が、ＡＰＩなのかクロージャなのかを示す情報、引数や参照する変数を示す情報が含まれる。
【０１０４】
［ステップＳ１４４］同一性判定部５６ｂは、変数「ＴＡＢＬＥＳ」に示されている全実行履歴テーブル内のレコードのうち、変数「ＮＵＭ」番目の処理（処理１）が、変数「ＰＲＯＣＥＳＳ」と一致しているレコードを、変数「ＣＡＮＤＩＤＡＴＥＳ」に追加する。例えば変数「ＰＲＯＣＥＳＳ」に示されている次の処理が「{textFile,“/database/file1”}」であり、変数「ＴＡＢＬＥＳ」に図１８に示す実行履歴テーブル７１，７２が設定されている場合を考える。この場合、実行履歴テーブル７１，７２それぞれのレコードの「処理１」が変数「ＰＲＯＣＥＳＳ」と完全一致する。その結果、図１９に示すように、一致したレコードが変数「ＣＡＮＤＩＤＡＴＥＳ」に追加される。
【０１０５】
［ステップＳ１４５］同一性判定部５６ｂは、変数「ＮＵＭ」の値を１だけ増加させる。
［ステップＳ１４６］同一性判定部５６ｂは、実行対象のＤＡＧにおける次の処理を調べ、変数「ＰＲＯＣＥＳＳ」に設定する。次の処理とは、変数「ＣＡＮＤＩＤＡＴＥＳ」内のレコードの処理との一致判定をまだ行っていない、実行対象のＤＡＧ内の処理のうち、実行対象のＤＡＧ内での処理順が最も早い処理である。
【０１０６】
［ステップＳ１４７］同一性判定部５６ｂは、変数「ＣＡＮＤＩＤＡＴＥＳ」に登録されているレコードのうち、変数「ＮＵＭ」番目の処理と、変数「ＰＲＯＣＥＳＳ」に示されている処理とが一致していないレコードを、変数「ＣＡＮＤＩＤＡＴＥＳ」から削除する。
【０１０７】
［ステップＳ１４８］同一性判定部５６ｂは、同一性判定部５６ｂは、変数「ＣＡＮＤＩＤＡＴＥＳ」に残存しているレコードのうち、変数「ＮＵＭ」番目の処理が最後の処理のレコードがある場合、そのレコードに対応するデータを再利用可能であると判定する。同一性判定部５６ｂは、再利用可能なデータがある場合、ＤＡＧにおける、変数「ＰＲＯＣＥＳＳ」に示された処理で生成されるデータに、再利用可能であることを示すフラグを立てる。このとき同一性判定部５６ｂは、例えば、フラグに対して、再利用可能なデータの保存場所の情報を付与する。
【０１０８】
［ステップＳ１４９］同一性判定部５６ｂは、ＤＡＧの葉まで探索が完了したか否かを判断する。探索が完了した場合、同一性判定処理を終了する。探索が完了していなければ、処理がステップＳ１４５に進められる。
【０１０９】
次に、具体的な同一性判定例について、図２１〜図２４を参照して説明する。なお、以下の例では、処理の長さを比較することで、処理の同一性の比較対象とするレコードの絞り込みを行うものとする。
【０１１０】
図２１は、同一性判定の第１の例を示す図である。図２１では、機械学習が開始されて最初に構築されたＤＡＧに対する同一性判定状況を示している。
初めて構築されたＤＡＧの処理を実行する場合は、実行履歴テーブル７１には、何も要素が設定されていない。そこで同一性判定部５６ｂは、再利用できるデータが存在しないと判断する。その結果、実行部５６ｃが構築されたＤＡＧに従った処理を実際に実行し、処理の結果生成されたデータを、データ記憶部５７に格納する。そして同一性判定部５６ｂは、一連の処理（ＡＰＩとその引数、クロージャ、最適化系から与えられるパラメータ）を実行履歴テーブル７１に保存する。その際、同一性判定部５６ｂは、一連の処理を示すレコードのキャッシュ保存場所の項目に、生成したデータの保存場所を設定する。
【０１１１】
図２２は、同一性判定の第２の例を示す図である。図２２の例では、構築されたＤＡＧに示される処理の長さは「４」である。この場合、構築されたＤＡＧで再利用できる可能性があるのは、処理の長さが「４」以下のレコードに示されるデータである。この段階で実行履歴テーブル７１に登録されている１行目のレコードの処理の長さは「４」である。そのため、１行目のレコードが比較対象となる。
【０１１２】
そして同一性判定部５６ｂは、構築されたＤＡＧの処理と、実行履歴テーブル７１の処理とを、「処理１」から「処理４」まで順に比較する。図２２の例では、「処理２」のクロージャにおいて、最適化系５５から与えられるパラメータの内容が違う。同一性判定部５６ｂは、「処理２」が相違することを発見し、データを再利用できないと結論付ける。そこで実行部５６ｃがデータを新たに生成し、同一性判定部５６ｂが実行履歴テーブル７１に一連の処理を追加する。
【０１１３】
図２３は、同一性判定の第３の例を示す図である。図２３の例では、構築されたＤＡＧに示される処理は、処理の長さ、処理の内容ともに１回目に実行したものと同じである。そこで同一性判定部５６ｂは、実行履歴テーブル７１の１番目のレコードに示されるデータが再利用可能であると判定する。実行部５６ｃは、データ記憶部５７内に存在するデータを再利用する。このときに構築されたＤＡＧに応じた処理は、実行履歴テーブル７１には保存されない。
【０１１４】
図２４は、同一性判定の第４の例を示す図である。図２４の例では、構築されたＤＡＧに示される処理は、データのサンプリングのための処理が存在しないため、実行履歴テーブル７１に登録されたレコードとは、処理の長さが異なる。同一性判定部５６ｂは、処理の長さ「３」以下のレコードは存在せず、再利用できるデータも存在しないと判断する。そこで実行部５６ｃが構築されたＤＡＧに示される処理を実行し、データを生成する。そして同一性判定部５６ｂが実行履歴テーブル７２に一連の処理を追加する。
【０１１５】
このようにして、同一性判定が行われ、キャッシュされているデータを利用可能であれば、そのデータが再利用される。
なお、並列分散処理システムでは、マスタノード１００とワーカノード２１０，２２０，・・・とが連携して、機械学習を実施する。以下、分散処理システム上での機械学習の実現例について説明する。
【０１１６】
図２５は、並列分散処理基盤の一例を示す図である。図２５には、並列分散処理基盤として「Ａｐａｃｈｅ  Ｓｐａｒｋ（商標）」を用いた場合の例が示されている。「Ａｐａｃｈｅ  Ｓｐａｒｋ（商標）」は、例えばＨＤＦＳ（Hadoop Distributed File System）と呼ばれる分散ファイルシステムにより、データを分散して管理している。
【０１１７】
マスタノード１００は、Ｄｒｉｖｅｒ１１０、ＮａｍｅＮｏｄｅ１２０、および実行履歴テーブル１３０を有している。ワーカノード２１０，２２０，・・・は、Ｅｘｅｃｕｔｏｒ２１１，２２１，・・・とＤａｔａＮｏｄｅ２１２，２２２とを有している。
【０１１８】
Ｄｒｉｖｅｒ１１０とＥｘｅｃｕｔｏｒ２１１，２２１，・・・とは、「Ａｐａｃｈｅ  Ｓｐａｒｋ（商標）」で提供される機能である。Ｄｒｉｖｅｒ１１０は、例えば、図７に示す最適化系５５の処理と、実行系５６のうちの実行部５６ｃ以外の処理を実行する。Ｅｘｅｃｕｔｏｒ２１１，２２１，・・・は、図７に示す実行部５６ｃの処理を、並列分散によって実行する。
【０１１９】
ＮａｍｅＮｏｄｅ１２０とＤａｔａＮｏｄｅ２１２，２２２，・・・とは、ＨＤＦＳで提供される機能である。ＮａｍｅＮｏｄｅ１２０は、ＨＤＦＳ上に格納されるファイルのメタデータ、各ファイルを構成するブロックがどのＤａｔａＮｏｄｅ２１２，２２２，・・・で管理されているのかといった情報を管理する。ＤａｔａＮｏｄｅ２１２，２２２，・・・は、ＨＤＦＳで管理するファイルを構成するブロックを管理する。
【０１２０】
このような並列分散処理基盤により、機械学習が実施される。
図２６は、機械学習の並列分散処理の手順の一例を示す第１の図である。Ｄｒｉｖｅｒ１１０は、まずＤＡＧを作成する。作成されたＤＡＧを示すＤＡＧ情報１４０は、ＨＤＦＳで管理される。次にＤｒｉｖｅｒ１１０は、作成したＤＡＧに基づいて、機械学習の実行計画１５０を作成する。実行計画１５０には、例えば、どのワーカノードを使用してモデル作成を行うのかが示される。また実行計画１５０には、モデル作成に使用するデータや、そのデータに対する処理が示される。その後、Ｄｒｉｖｅｒ１１０は、実行履歴テーブル１３０を参照し、過去に作成したデータと、これから実行するＤＡＧで利用するデータとの同一性を判定する。
【０１２１】
図２７は、機械学習の並列分散処理の手順の一例を示す第２の図である。同一性判定により、再利用可能なデータが見つかった場合、Ｄｒｉｖｅｒ１１０は、ＤＡＧ情報１４０に示されるＤＡＧを修正し、それに応じて実行計画１５０も修正する。そしてＤｒｉｖｅｒ１１０は、修正後の実行計画１５０に基づいて、ワーカノード２１０，２２０，・・・のＥｘｅｃｕｔｏｒ２１１，２２１，・・・に、モデル作成の処理を依頼する。このようにして、並列分散処理が実現される。
【０１２２】
以上のようにして、ビッグデータ処理技術で近年主流になっているインメモリの並列分散処理のミドルウェアを利用した機械学習のモデル探索において、データの再利用による処理効率の向上が可能となる。すなわち、最適化系に依存せずにデータの同一性を判定できるため、同じデータを生成する複数の処理が行われる場合、データを再利用することで、処理の効率化を図ることができる。また、実行系のみの処理でデータの同一性を判定できるため、機械学習用のプログラムの保守性が維持される。結果として、高い性能で汎用性が高い機械学習が可能となる。
【０１２３】
以上、実施の形態を例示したが、実施の形態で示した各部の構成は同様の機能を有する他のものに置換することができる。また、他の任意の構成物や工程が付加されてもよい。さらに、前述した実施の形態のうちの任意の２以上の構成（特徴）を組み合わせたものであってもよい。
【符号の説明】
【０１２４】
１  モデル探索プログラム
２ａ〜２ｃ  探索条件
３ａ〜３ｆ  処理特定情報
４  テーブル
５ａ，５ｂ  データ
１０  機械学習制御装置
１１  演算部
１１ａ  最適化系
１１ｂ  実行系
１１ｃ  取得手段
１１ｄ  判定手段
１１ｅ  モデル探索手段
１１ｆ  格納手段
１２  記憶部
【図１】
2017224245.tif 000003
【図２】
2017224245.tif 000004
【図３】
2017224245.tif 000005
【図４】
2017224245.tif 000006
【図５】
2017224245.tif 000007
【図６】
2017224245.tif 000008
【図７】
2017224245.tif 000009
【図８】
2017224245.tif 000010
【図９】
2017224245.tif 000011
【図１０】
2017224245.tif 000012
【図１１】
2017224245.tif 000013
【図１２】
2017224245.tif 000014
【図１３】
2017224245.tif 000015
【図１４】
2017224245.tif 000016
【図１５】
2017224245.tif 000017
【図１６】
2017224245.tif 000018
【図１７】
2017224245.tif 000019
【図１８】
2017224245.tif 000020
【図１９】
2017224245.tif 000021
【図２０】
2017224245.tif 000022
【図２１】
2017224245.tif 000023
【図２２】
2017224245.tif 000024
【図２３】
2017224245.tif 000025
【図２４】
2017224245.tif 000026
【図２５】
2017224245.tif 000027
【図２６】
2017224245.tif 000028
【図２７】
2017224245.tif 000029