(57)【特許請求の範囲】
【請求項１】
複数の決定木が連結された連結決定木の構成についての情報を構成情報として取得する構成情報取得手段と、
第１の遷移先ノードの値と、第２の遷移先ノードの値の間に所定の規則性がある際に、前記第１の遷移先ノードのみが存在するとみなした構造に前記決定木の構造を圧縮する木構造圧縮手段と、
前記連結決定木に含まれる各ノードにおける処理をベクトル化して行う際の実行順序を、複数の前記決定木それぞれに含まれる前記ノードのうち、根ノードからの位置が同一の前記ノードにおける処理がベクトル化されるように決定する実行順序決定手段と、
前記実行順序に基づいて前記連結決定木が実行されるようにプログラムを生成するプログラム生成手段と、
を備えることを特徴とするプログラム生成装置。
【請求項２】
前記実行順序に基づいて、異なる前記決定木に含まれる前記ノードをたどる処理を最内側にしたループを生成するループ生成手段と、
前記実行順序を基に、前記連結決定木を実行する際に用いるデータのメモリ上の配置をデータ配置として決定するデータ構造決定手段と、
をさらに備え、
前記プログラム生成手段は、前記実行順序、前記ループおよび前記データ配置を基に前記プログラムを生成することを特徴とする請求項１に記載のプログラム生成装置。
【請求項３】
前記実行順序決定手段は、処理結果によって打ち切りが生じない階層を、前記最内側の処理として実行される階層として設定することを特徴とする請求項２に記載のプログラム生成装置。
【請求項４】
前記実行順序決定手段は、スコアが所定の基準を一度、満たすとその後の前記スコアの変化が最終的な判断に影響が無い場合に、打ち切り処理が設定されている階層において、前記打ち切り処理を行わずに処理が継続されるように前記実行順序を設定することを特徴とする請求項１から３いずれかに記載のプログラム生成装置。
【請求項５】
多数のデータに前記連結決定木を用いる場合に、複数の前記データの処理の繰り返しをベクトル化することを特徴とする請求項１から４いずれかに記載のプログラム生成装置。
【請求項６】
複数の決定木が連結された連結決定木の構成についての情報を構成情報として取得する構成情報取得処理と、
第１の遷移先ノードの値と、第２の遷移先ノードの値の間に所定の規則性がある際に、前記第１の遷移先ノードのみが存在するとみなした構造に前記決定木の構造を圧縮する木構造圧縮処理と、
前記連結決定木に含まれる各ノードにおける処理をベクトル化して行う際の実行順序を、複数の前記決定木それぞれに含まれる前記ノードのうち、根ノードからの位置が同一の前記ノードにおける前記処理がベクトル化されるように決定する実行順序決定処理と、
前記実行順序に基づいて前記連結決定木が実行されるようにプログラムを生成するプログラム生成処理と、
をコンピュータに実行させることを特徴とするプログラム生成用プログラム。
【請求項７】
複数の決定木が連結された連結決定木の構成についての情報を構成情報として取得し、
第１の遷移先ノードの値と、第２の遷移先ノードの値の間に所定の規則性がある際に、前記第１の遷移先ノードのみが存在するとみなした構造に前記決定木の構造を圧縮し、
前記連結決定木に含まれる各ノードにおける処理をベクトル化して行う際の実行順序を、複数の前記決定木それぞれに含まれる前記ノードのうち、根ノードからの位置が同一の前記ノードにおける前記処理がベクトル化されるように決定し、
前記実行順序に基づいて前記連結決定木が実行されるようにプログラムを生成することを特徴とするプログラム生成方法。
【請求項８】
前記実行順序に基づいて、異なる前記決定木に含まれる前記ノードをたどる処理を最内側にしたループを生成し、
前記実行順序を基に、前記連結決定木を実行する際に用いるデータのメモリ上の配置をデータ配置として決定し、
前記実行順序、前記ループおよび前記データ配置を基に前記プログラムを生成することを特徴とする請求項７に記載のプログラム生成方法。
【請求項９】
処理結果によって打ち切りが生じない階層を、前記最内側の処理として実行される階層として設定することを特徴とする請求項８に記載のプログラム生成方法。
【請求項１０】
スコアが所定の基準を一度、満たすとその後の前記スコアの変化が最終的な判断に影響が無い場合に、打ち切り処理が設定されている階層において、前記打ち切り処理を行わずに処理が継続されるように前記実行順序を設定する請求項８または９に記載のプログラム生成方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラムを生成する技術に関するものであり、特に、連結決定木を実行するプログラムを生成する技術に関するものである。
【背景技術】
【０００２】
情報処理装置において画像認識等を行う場合に、複数の決定木をカスケードで連結させた連結決定木を基に画像認識等を行うアルゴリズムが用いられることがある。連結決定木を構成する各決定木では、画像を構成する画素データ等の特徴量が決定木のノードにおいて評価される。特徴量が評価されるとノードごとに設定された閾値と比較され、比較結果を基に、隣接する次のノードへの遷移が行われる。ノード間での遷移によって決定木のリーフに到達すると、リーフに設定されている値が、認識対象であるかを判断する際のスコアとして算出される。各決定木においてリーフのスコアが算出されると、複数の決定木のスコアの累計値が最終的なスコアとして算出される。また、画像認識等では、多量の画像を識別するために短期間で処理結果が得られことが望ましく、画像認識等に関する処理を高速で行えることが望ましい。
【０００３】
画像認識等に用いる連結決定木は、汎用的なライブラリとして実装されることがある。しかし、ライブラリでは決定木の構造および値や閾値等のデータの特徴を利用した高速化を行うことは困難である。決定木の構造および値や閾値等のデータは、プログラムの実行時に与えられるため、プログラムのコンパイル時の最適化に利用できないからである。そのため、決定木の構成とデータを直接埋め込んだ条件分岐プログラムを自動生成することで，高速化を行う技術の開発が行われている。そのような、決定木を基にプログラムを自動生成する技術としては、例えば、非特許文献１のような技術が開示されている。
【０００４】
非特許文献１は、決定木を基に処理を行うプログラムを生成する技術に関するものである。非特許文献１では、決定木の構成情報を入力として、プログラムを生成するコンパイラが示されている。特許文献１のコンパイラは、学習によって作られた決定木の構成情報を入力として、決定木の構成に特化したプログラムを生成する。
【０００５】
また、特許文献１には、決定木に基づく認識処理を行う認識装置が開示されている。特許文献１の認識装置は、決定木の情報を有し認識処理を行う認識部と、決定木の各ノードをメモリ上に配置する配置部と、メモリを備えている。特許文献１において、配置部は、各ノードを最上位ノードからの深さに基づいて、メモリ上に配置する。配置部は、配置するノードの最上位ノードからの深さが閾値以下のとき、各ノードを決定木の幅方向の探索順に従ってメモリ上に配置する。また、配置部は、配置するノードの最上位ノードからの深さが閾値よりも大きいとき、各ノードを決定木の深さ方向の探索順に従ってメモリ上に配置する。特許文献１は、そのようにノードを配置することでキャッシュメモリに必要なデータが保持する可能性が高くなるため、処理の高速化を行うことができるとしている。
【０００６】
特許文献２には、ベクトル命令を用いたプログラムを生成するベクトル化コンパイラが示されている。特許文献２では、変数や関数の値を返す場所の管理を行うことで、大きさが動的に変化する木においてもベクトル命令を実行することができるとしている。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２０１１−１５０５４６号公報
【特許文献２】特開平５−１０８７００号公報
【非特許文献】
【０００８】
【非特許文献１】Ｂ．  Ｂｅｒｎｓｔｅｉｎ，ｅｔ  ａｌ．，“Ｆａｓｔｅｒ  Ｒｅａｌ−Ｔｉｍｅ  Ｃｌａｓｓｆｉｃａｔｉｏｎ  Ｕｓｉｎｇ  Ｃｏｍｐｌｉｌａｔｉｏｎ”，［平成２８年５月１１日検索］，インターネット（ＵＲＬ：https://courses.cs.washington.edu/courses/cse501/10au/compile-machlearn.pdf）
【発明の概要】
【発明が解決しようとする課題】
【０００９】
しかしながら、非特許文献１の技術は次のような点で十分ではない。非特許文献１の技術は、１つの決定木だけを処理対象としたものである。よって、複数の決定木を処理する際には、決定木ごとの処理を繰り返し行う必要がある。そのため、非特許文献１の技術は、連結決定木の処理を十分に効率化することができない。また、特許文献１も、１つの決定木のノードをメモリ上に効率的に配置する技術である。そのため、特許文献１の技術は、連結決定木の特徴的な構造に基づいて、各ノードをメモリ上に配置することはできないため、連結決定木の処理を十分に効率化することはできない。同様に、特許文献２も１つの決定木の処理を対象とした技術のため、連結決定木の処理を十分に効率化することができない。よって、特許文献１および特許文献２の技術では、連結決定木を用いた際の処理を、連結決定木の特徴に基づいて十分に効率化することはできない。以上より、非特許文献１、特許文献１および特許文献２は、連結決定木を用いた処理を高速に行うための技術としては十分ではない。
【００１０】
本発明は、上記の課題を解決するため、連結決定木を用いた処理を高速で行うことができるプログラムを生成するプログラム生成装置を得ることを目的としている。
【課題を解決するための手段】
【００１１】
上記の課題を解決するため、本発明のプログラム生成装置は、構成情報取得手段と、実行順序決定手段と、プログラム生成手段を備えている。構成情報取得手段は、複数の決定木が連結された連結決定木の構成についての情報を構成情報として取得する。実行順序決定手段は、連結決定木に含まれる各ノードにおける処理をベクトル化して行う際の実行順序を、連結決定木の構成情報を基に決定する。プログラム生成手段は、実行順序に基づいて連結決定木が実行されるようにプログラムを生成する。
【００１２】
本発明のプログラム生成方法は、複数の決定木が連結された連結決定木の構成についての情報を構成情報として取得する。本発明のプログラム生成方法は、連結決定木に含まれる各ノードにおける処理をベクトル化して行う際の実行順序を、連結決定木の構成情報を基に決定する。本発明のプログラム生成方法は、実行順序に基づいて連結決定木が実行されるようにプログラムを生成する。
【発明の効果】
【００１３】
本発明によると、連結決定木を用いた処理を高速で行うことができる。
【図面の簡単な説明】
【００１４】
【図１】本発明の第１の実施形態の構成の概要を示す図である。
【図２】本発明の第２の実施形態の構成の概要を示す図である。
【図３】本発明の第２の実施形態の連結木構成情報の構成の例を示した図である。
【図４】本発明の第２の実施形態において連結決定木を用いて行われる処理を模式的に示した図である。
【図５】本発明の第２の実施形態の動作フローを示した図である。
【図６】本発明の第２の実施形態のデータ構造の例を示した図である。
【図７】本発明の第２の実施形態において生成されるプログラムの例を示した図である。
【図８】本発明と対比した構成におけるプログラムの例を示した図である。
【図９】本発明と対比した構成におけるプログラムの例を示した図である。
【図１０】本発明の第２の実施形態の連結情報の例を示した図である。
【図１１】本発明の第２の実施形態において連結決定木を用いて行われる処理の例を示した図である。
【図１２】本発明の第２の実施形態におけるノードのデータの例を示した図である。
【図１３】本発明の第２の実施形態における評価関数の例を示した図である。
【図１４】本発明の第２の実施形態におけるデータ構造の例を示した図である。
【図１５】本発明に第２の実施形態において生成されるプログラムの例を示した図である。
【図１６】本発明の第３の実施形態の構成の概要を示す図である。
【図１７】本発明の第３の実施形態の動作フローを示す図である。
【図１８】本発明の第３の実施形態の決定木における処理の例を示す図である。
【図１９】本発明の第３の実施形態の決定木における処理の例を示す図である。
【図２０】本発明の第３の実施形態の複数の決定木における処理を模式的に示す図である。
【発明を実施するための形態】
【００１５】
（第１の実施形態）
本発明の第１の実施形態について図を参照して詳細に説明する。図１は、本実施形態のプログラム生成装置の構成の概要を示したものである。本実施形態のプログラム生成装置は、構成情報取得手段１と、実行順序決定手段２と、プログラム生成手段３を備えている。構成情報取得手段１は、複数の決定木が連結された連結決定木の構成についての情報を構成情報として取得する。実行順序決定手段２は、連結決定木に含まれる各ノードにおける処理をベクトル化して行う際の実行順序を、連結決定木の構成情報を基に決定する。プログラム生成手段３は、実行順序に基づいて連結決定木が実行されるようにプログラムを生成する。
【００１６】
本実施形態のプログラム生成装置は、構成情報取得手段１によって取得された連結決定木の構成情報を基に、連結決定木に含まれる各ノードにおける処理をベクトル化して行う際の実行順序を実行順序決定手段２において決定している。本実施形態のプログラム生成装置は、連結決定木の構成情報を基に各ノードにおける処理をベクトル化して行う際の処理の実行順序を決定しているため、連結決定木の構成に応じて最適な実行順序を決定することができる。そのため、本実施形態のプログラム生成装置は、そのように決定された実行順序を基にプログラム生成手段３においてプログラムを生成することで、連結決定木における処理を効率的に行うプログラムを生成することができる。その結果、本実施形態のプログラム生成装置を用いることで連結決定木を用いた処理を高速で行うことができる。
【００１７】
（第２の実施形態）
本発明の第２の実施形態について図を参照して詳細に説明する。図２は、本実施形態のプログラム生成装置１０の構成の概要を示したものである。本実施形態のプログラム生成装置は、入力される連結決定木の構成に関する情報を基に、連結決定木を実行するプログラムを生成する装置である。連結決定木とは、複数の決定木がカスケードで連結されているものをいう。本実施形態のプログラム生成装置は、連結決定木を構成する各決定木のノードにおける処理がベクトル化されるように、異なる決定木のノードを横断的にたどるように実行順序を設定してプログラムを生成する。本実施形態のプログラム生成装置は、１つの決定木のノードをたどるよりも複数の決定木に含まれるノードをたどる処理の方が効率的に処理を行えるときに、複数の決定木に含まれるノードをたどる処理をベクトル化する。本実施形態のプログラム生成装置は、そのように複数の決定木に含まれるノードをたどる処理をベクトル化することで、連結決定木の処理を高速化することができるプログラムを生成することを特徴とする。
【００１８】
本実施形態のプログラム生成装置１０は、実行順序決定部１１と、データ構造決定部１２と、ループ生成部１３と、コード生成部１４を備えている。また、本実施形態のプログラム生成装置１０は、連結木構成情報入力部１５と、装置情報入力部１６をさらに備えている。
【００１９】
実行順序決定部１１は、連結木構成情報を基に、処理の実行順序を決定する機能を有する。図３は、実行順序決定部１１に入力される連結木構成情報を模式的に示したものである。連結木構成情報は、連結構造と、木構造と、データと、評価関数によって構成されている。連結構造は、連結決定木の構造、すなわち、連結決定木を形成するそれぞれの決定木がどのように結合しているかを示す情報である。連結構造には、例えば、ステージ数、ツリーの数、打ち切り処理の有無などの情報が含まれる。木構造は、単一の決定木の構造を示す情報である。データは、決定木の各ノードで用いられる閾値やスコア等の値である。評価関数は、各ノードにおいて実行される処理の内容を示す情報である。実行順序決定部１１は、入力される連結木構成情報および装置情報を基に、処理の実行順序を決定し、決定した処理の実行順序の情報を、データ構造決定部１２およびループ生成部１３にそれぞれ送る。
【００２０】
実行順序決定部１１は、連結決定木を実行する際に効率的に処理が行われるように実行順序を決定する。実行順序決定部１１は、例えば、複数の決定木に属するノードのうち、同一のノードの処理がベクトル化されるように実行順序を決定する。同一のノードとは、各決定木の根ノードからの位置が同じノードのことをいう。そのような場合に、実行順序決定部１１は、１つの決定木内のノードを順にたどる処理に代えて、複数の決定木の同一のノードにおける処理が最内側でベクトル化されるように実行順序を決定する。すなわち、実行順序決定部１１は、各決定木を横断するようにノードの処理が進められるに実行順序を決定する。各決定木に含まれる同一のノードにおける処理、すなわち、処理内容が似ている処理をベクトル化することで、処理の効率が上がり処理速度の向上が期待できる。
【００２１】
また、本実施形態の実行順序決定部１１は、第１の実施形態の実行順序決定手段２に相当する。
【００２２】
データ構造決定部１２は、実行順序を基に、処理を行う際に利用されるデータをメモリ上に配置する機能を有する。データ構造決定部１２は、実行順序決定部１１から入力される実行順序の情報を基に、メモリ上のデータの配置を決定する。データ構造決定部１２は、処理を実行する際にデータの読み書きに要する時間が短くなるように、データをメモリ上に配置する。データ構造決定部１２は、例えば、実行順序に基づいて処理を行ったとき、連続で利用されるデータがメモリ上の連続した領域に保存されるようにデータを配置する。
【００２３】
ループ生成部１３は、実行順序に基づいて、実行するループを生成する。ループ生成部１３は、実行順序決定部１１から入力される実行順序の情報を基に、処理を行う際に実行されるループを生成する。ループ生成部１３は、実行順序に基づいて、複数の決定木の同一のノードにおける処理が最内側となるようにループを生成する。ループ生成部１３は、生成したループの情報を、コード生成部１４に送る。
【００２４】
コード生成部１４は、実行順序、ループおよびデータ構造の情報を基に、プログラムを生成する機能を有する。コード生成部１４は、データ構造決定部１２から入力されるデータ構造と、ループ生成部１３から入力されるループの情報を基に処理を実行する際に使用されるプログラムを生成する。コード生成部１４は、Ｃ言語などのプログラム言語によってプログラムを生成し、コンパイラによって実行可能形式に変換する。コード生成部１４は、実行可能な形式のプログラムのデータを直接、生成してもよい。
【００２５】
また、本実施形態のコード生成部１４は、第１の実施形態のプログラム生成手段３に相当する。
【００２６】
連結木構成情報入力部１５は、連結木構成情報の入力インタフェースとしての機能を有する。連結木構成情報入力部１５は、入力された連結木構成情報を、自装置内で用いるデータ形式に変換して実行順序決定部１１に送る。また、本実施形態の連結木構成情報入力部１５は、第１の実施形態の構成情報取得手段１に相当する。
【００２７】
装置情報入力部１６は、プログラムが実行される情報処理装置のハードウェアの情報の入力インタフェースとしての機能を有する。装置情報入力部１６は、入力されたプログラムが実行される情報処理装置のハードウェアの構成に関する情報を、自装置内で用いるデータ形式に変換して装置情報として、実行順序決定部１１に送る。装置情報入力部１６は、入力された装置情報を実行順序決定部１１に送る。装置情報とは、ＣＰＵ（Central Processing Unit）やＧＰＵ（Graphics Processing Unit）等のプロセッサの数や機能、メモリ構成などプログラムを実行する装置の構成の情報のことをいう。プロセッサの機能には、例えば、ベクトル長や水平加算の有無などの情報が含まれる。
【００２８】
本実施形態の実行順序決定部１１、データ構造決定部１２、ループ生成部１３およびコード生成部１４は、半導体装置によって形成することができる。半導体装置は、ＣＰＵやメモリによって構成される。連結木構成情報入力部１５および装置情報入力部１６も、同様に半導体装置によって形成することができる。連結木構成情報入力部１５および装置情報入力部１６は、外部からデータを受信する通信モジュールを備えていてもよい。また、実行順序決定部１１、データ構造決定部１２、ループ生成部１３、コード生成部１４、連結木構成情報入力部１５および装置情報入力部１６の機能の全て、または、一部が１つの半導体装置内に形成されていてもよい。
【００２９】
本実施形態のプログラム生成装置の動作について説明する。図４は、本実施形態にプログラム生成装置が生成する連結決定木を用いた処理を模式的に示したものである。また、図５は、本実施形態のプログラム生成装置の動作フローを示したものである。
【００３０】
複数の決定木をカスケードで連結した連結決定木を用いて画像認識や音声認識などを行う場合に、図４に「ｔｒｅｅ０」のように示した各決定木において、それぞれスコアが算出される。図４に「ｔｒｅｅ０」等で示すように、各決定木は、白い丸で示したノードと、直線で示されているノード間を接続する枝によって構成されている。各決定木は、図４に示すように、頂点に配置されている根ノードから２つに分岐された先のノードがさらに２つに分岐される二分木型の木構造を有する。決定木を構成する各ノードには評価関数とスコアが設定され、入力されたデータと評価関数に基づいて遷移先のノードが順次、決定される。また、最終的に到達する遷移先が無い葉ノードにおけるスコアが各決定木のスコアとして算出される。
【００３１】
各ステージでは、各決定木のスコアの累計値が、各ステージの連結決定木の処理結果であるステージスコアとして算出される。図４の例では、各ステージの処理が順に行われて、処理の結果が所定の条件を満たしたときに打ち切られるか、最終スコアが算出される場合の例を示している。また、図４は、各ステージ内においては、処理の打ち切りは行われない例を示している。また、図４では、ステージとツリーの２階層の例を示しているが、本実施形態のプログラム生成装置において生成するプログラムにおける処理は、３階層以上に分けられていてもよく、また、１階層であってもよい。
【００３２】
図５を参照して本実施形態のプログラム生成装置の動作について説明する。プログラム生成装置が動作を開始すると、始めに、連結木構成情報が連結木構成情報入力部１５を介して、実行順序決定部１１に入力される（ステップ１０１）。また、装置情報が、装置情報入力部１６を介して実行順序決定部１１に入力される。連結木構成情報および装置情報は、画像認識や音声認識などを行う情報処理装置から連結木構成情報入力部１５および装置情報入力部１６にそれぞれ入力される。また、連結木構成情報および装置情報として、連結木構成情報入力部１５および装置情報入力部１６に保存されていた情報が、実行順序決定部１１に入力されもよい。
【００３３】
連結木構成情報および装置情報が入力され、連結木構成情報等を取得すると、実行順序決定部１１は、連結木構成情報および装置情報を基に処理の実行順序を決定する（ステップ１０２）。実行順序決定部１１は、連結決定木を実行した際に、処理が効率的に行われるように実行順序を決定する。実行順序決定部１１は、決定木の内部をたどる処理よりも、複数の決定木のノードをたどる処理を最内にしたときに処理が効率化される場合に、複数の決定木のノードをたどる処理が最内側の処理としてベクトル化されるように実行順序を決定する。処理の実行順序を決定すると、実行順序決定部１１は、決定した処理の実行順序の情報をデータ構造決定部１２およびループ生成部１３に送る。
【００３４】
データ構造決定部１２は、実行順序の情報を受け取ると、実行順序に基づいてメモリ上にデータを配置する。データ構造決定部１２は、連続した処理において、閾値やスコア等のデータへのアクセスが連続で行えるようにメモリ上の配置を決定する（ステップ１０３）。
【００３５】
図６は、メモリ上に配置されるデータの構造の例を示したものである。図６の左側では、１つの決定木の各ノードのデータが順に配置され、１つの決定木のデータが全て配置された後に、次のノードのデータが配置されている。また、図６の右側では、各ノードに属するノードのうち同一のノードのデータが順に配置され、１つのノードのデータが全て配置された後に、各決定木の次のノードのデータが順に配置されている。実行順序決定部１１が、複数の決定木のノードの処理が最内側でベクトル処理されるように実行順序を設定したときは、図６の右側のようにデータが配置される。図６の右側のようにデータを配置することで、連続した処理において、閾値やスコア等のデータへのアクセスが連続で行うことができるようになり処理の効率と速度が向上する。
【００３６】
データ構造決定部１２は、データの配置を決定すると、メモリ上のデータの配置の情報をコード生成部１４に送る。
【００３７】
また、ループ生成部１３は、実行順序の情報を受け取ると、実行順序に基づいてループを生成する（ステップ１０４）。ループ生成部１３は、ループを生成すると、生成したループの情報をコード生成部１４に送る。ステップ１０３と１０４の動作は、並行して行われてもよい。また、ステップ１０４の動作が、ステップ１０３の動作よりも先に行われてもよい。
【００３８】
コード生成部１４は、データの配置の情報と、ループの情報を受け取ると、データの配置の情報およびループの情報を基に、プログラムのコードを生成する（ステップ１０５）。コード生成部１４は、コードを生成すると、生成したコードを実行可能形式に変換し、実行可能形式のプログラムのデータを出力する。コード生成部１４が出力したプログラムは、情報処理装置等において連結決定木を用いた画像認識や音声認識等に用いられる。
【００３９】
図７は、本実施形態のプログラム生成装置が生成するプログラムの例を示したものである。図７の例では、始めに複数の決定木の１つ目のノードをたどる処理が最内側のループによって行われ、次に、複数の決定木の１つ目のノードをたどる処理が行われている。すなわち、本実施形態のプログラム生成装置は、１つの決定木をたどる処理ではなく、複数の決定木の同一のノードをたどる処理を最内側に設定してループを生成している。このような構成とすることで、本実施形態のプログラム生成装置は、連結決定木に対応するプログラムを実行する際の処理の効率を上げ、速度を向上させている。
【００４０】
図８は、本実施形態のプログラム生成装置が生成するプログラムと対比した例として、汎用ライブラリを用いて生成したプログラムの例を示している。図８の例では、１つの決定木内のノードをたどるループによって各ノードにおける処理が行われ、１つの決定木の処理が行われた後に、次の決定木の処理が行われる。このように、汎用ライブラリを用いた場合には、連結決定木の構造に基づいて実行順序を最適化することはできないので、処理の効率化を行うことはできない。
【００４１】
また、図９は、本実施形態のプログラム生成装置が生成するプログラムと対比した例として、ｉｆ文を用いて１つの決定木のノードの処理を行った後に、複数の木の処理を行う場合の例を示している。図９のような場合では、ｉｆ文を用いているためにベクトル化の効率が向上しない。一方で、本実施形態のプログラム生成装置は、連結決定木の構造に基づいて複数の決定木のノードの処理を最内側とするベクトル化処理を行う最適化されたプログラムを生成することができる。そのため、連結決定木に対応するプログラムを実行する際の処理の効率を上げ、速度を向上させることができる。
【００４２】
本実施形態のプログラム生成装置の動作についてより具体的に説明する。図１０は、本実施形態のプログラム生成装置で用いられる連結情報の例を示したものである。また、図１１は連結情報を、模式的に示した図である。
【００４３】
図１０および図１１は、３つの階層に分けた情報として連結決定木の構成に関する情報が連結情報として設定されている場合の例を示している。図１０および図１１の例では、第１階層においてステージの連結が行われ、第２階層においてツリーを結合する構成が設定されている。また、第３階層において決定木においてノードの処理が行われる。
【００４４】
図１０および図１１は、ステージが８個、各ステージの決定木が１５個として設定されている例を示している。第１階層の各ステージのおける処理では、図１０に示す打ち切りの条件を満たすときに処理の打ち切りが行われる。また、第２階層の各決定木における処理では打ち切りは行われない例を示している。図１０および図１１の例では、ステージ内におけるツリーの数は同一であるが、ツリーの数はステージ間で異なっていてもよい。
【００４５】
図１２は、木の各ノードで利用されるデータの例を示している。また、図１３は、各ノードで利用される評価関数の例を示している。決定木の各ノードでは、図１３に示す評価関数に基づいて、ノードごとに決められているoffset０とoffset１にしたがって、変数名dataの配列の値が読み出され、読み出された値の差が算出される。算出された差の値は閾値と比較され、閾値よりも小さければscore０を評価値とし、閾値以上であればscore１が評価値として用いられる。また、図１３では、次に遷移するノードが０と１によって示されている。図１０および図１１の例では、第３階層の決定木は、二分木であるので、遷移する可能性があるノードは２つ存在する。
【００４６】
図１０および図１１の構成の連結決定木を実行するプログラムを生成する際の動作について説明する。実行順序決定部１１は、連結情報を読み込みと、直列構造で打ち切りが無い階層を最初に実行されるように選択する。最初に実行される階層、すなわち、最内側とする階層は、ベクトル化の対象となるが、その際に打ち切りがあるとベクトル化の効率が悪くなるからである。ベクトル処理が行われる場合には、複数の要素の処理が同時に行われるが、途中で打ち切りが行われる場合には、打ち切られた要素以降の処理が無駄になるため効率が低下する。打ち切りとは、その時点で一連の処理を中止し、処理の実行を終了することをいう。同様に、木構造をたどる処理を最内側にすると、本来たどられないノードを処理するなどが必要になるためベクトル処理の効率が悪化する。
【００４７】
図１０および図１１の例では、実行順序決定部１１は、第２階層の決定木をたどる処理に打ち切りが設定されていない。そのため、実行順序決定部１１は、第２階層の決定木をたどる処理を最内側として選択する。候補が複数ある場合には、構成要素が多い階層が選択されることが望ましい。構成要素が多い階層では、ベクトル長を長くすることができるので効率が高くなる。また、要素が１など極めて少ない階層は、ベクトル化の効率が悪いため、実行順序決定部１１は、最内側として選択されない。
【００４８】
実行順序決定部１１が実行順序を決定すると、データ構造決定部１２は、実行順序に基づいてデータ構造、すなわち、データの配置を決定する。データ構造決定部１２は、実行順序に従って、最内側の処理で利用するデータがメモリ上で連続となるようにデータの配置を決定する。図１４は、データ構造決定部１２が決定したデータ構造の例を示したものである。図１４では、実行順序に基づいて、最内側の処理で利用されるデータが連続になるように配置されている。
【００４９】
コード生成部１４は、データ構造決定部１２およびループ生成部１３から入力される情報を基に、プログラムを生成する。図１５は、コード生成部１４が生成するプログラムの例を模式的に示したものである。
【００５０】
図１５の例では、決定木を示す「tree」を回るループがベクトル化の対象として最内側に設定されている。図１５の例では、プログラムは、ソースコードの形式で生成されている。コード生成部１４は、ソースコードをコンパイルする際のコンパイラの自動ベクトル化機能が利用できるようにコード生成を行う。また、コード生成部１４は、intrinsic関数などを用いてベクトル処理を直接、記述したソースコードを生成する構成としてもよい。
【００５１】
また、図１０および図１１の例では、木の途中のノードとリーフのノードを区別せずに扱っているが、途中ノードとリーフの処理が分けられていてもよい。例えば、リーフに対しては後続のノードがないため、次のノードを求める処理を省略することで効率を高めることができる。
【００５２】
本実施形態のプログラム生成装置では、実行順序決定部１１が連結決定木を構成する複数の決定木のノードをたどる処理がベクトル化されるように実行順序を決定している。ループ生成部１３は、実行順序決定部１１が決定した実行順序を基に、複数の決定木のノードをたどる処理が最内側となるようにループを生成する。また、データ構造決定部１２は、実行順序を基に、連続で処理されるノードのデータがメモリ上で連続となるようにデータの配置を決定する。本実施形態のプログラム生成装置では、連結決定木を構成する複数の決定木のノードをたどる処理をベクトル化することで、単一の決定木のノードをたどる処理をベクトル化するようにも効率的に処理を行うことができる。その結果、実施形態のプログラム生成装置を用いることで、連結決定木を用いた処理を高速で行うことができる。
【００５３】
（第３の実施形態）
本発明の第３の実施形態について図を参照して詳細に説明する。図１６は、本実施形態のプログラム生成装置２０の構成の概要を示したものである。第２の実施形態のプログラム生成装置１０は、入力された連結木構成情報を基に、実行順序の決定を行っている。本実施形態のプログラム生成装置は、そのような構成に加えて、決定木の構造の圧縮が可能であるときに圧縮を行った後の決定木の構成を基にプログラムの生成を行うことを特徴とする。
【００５４】
本実施形態のプログラム生成装置２０は、木構造変換部２１と、実行順序決定部２２と、データ構造決定部２３と、ループ生成部２４と、コード生成部２５を備えている。また、本実施形態のプログラム生成装置２０は、連結木構成情報入力部２６と、装置情報入力部２７をさらに備えている。本実施形態のループ生成部２４、コード生成部２５、装置情報入力部２７の構成と機能は、第２の実施形態の同名称の部位と同様である。
【００５５】
木構造変換部２１は、連結木構成情報の木構造を変換する機能を有する。木構造変換部２１は、連結木構成情報入力部２６から入力される連結木構成情報に含まれる、木構造およびデータを基に決定木の圧縮を行う。木構造変換部２１は、分岐先の２つのノードのデータに規則性があるとき、決定木の圧縮を行い、圧縮した木構造のデータを実行順序決定部２２に送る。
【００５６】
実行順序決定部２２は、第２の実施形態の実行順序決定部１１と同様の機能を有する。実行順序決定部２２は、木構造変換部２１から入力される圧縮された構成に基づく連結木構成情報を基に実行順序を決定し、決定した実行順序の情報をデータ構造決定部２３に送る。実行順序決定部２２は、第２の実施形態の実行順序決定部１１と同様の方法で実行順序を決定する。
【００５７】
データ構造決定部２３は、第２の実施形態のデータ構造決定部１２と同様の機能を有する。また、データ構造決定部２３は、圧縮された決定木の構成と実行順序の情報を基に、データの配置を決定する。データ構造決定部２３は、決定したデータの配置の情報をコード生成部２５に送る。
【００５８】
本実施形態の木構造変換部２１、実行順序決定部２２、データ構造決定部２３、ループ生成部２４およびコード生成部２５は、半導体装置によって形成することができる。半導体装置は、ＣＰＵやメモリによって構成される。連結木構成情報入力部２６および装置情報入力部２７も、同様に半導体装置によって形成することができる。連結木構成情報入力部２６および装置情報入力部２７は、外部からデータを受信する通信モジュールを備えていてもよい。また、プログラム生成装置２０の各部位が有する機能の全て、または、一部が１つの半導体装置内に形成されていてもよい。
【００５９】
本実施形態のプログラム生成装置２０の動作について説明する。図１７は、本実施形態のプログラム生成装置２０の動作フローを示したものである。プログラム生成装置が動作を開始すると、始めに、連結木構成情報が連結木構成情報入力部２６を介して、木構造変換部２１に入力される（ステップ１１１）。また、装置情報が、装置情報入力部２７から実行順序決定部２２に入力される。装置情報は、装置情報入力部２７を介して実行順序決定部２２に入力される。
【００６０】
連結木構成情報が入力されると、木構造変換部２１は、連結木構成情報の木構造およびデータを確認し、木の圧縮が可能であるかを判断する。分岐先のノードのデータに規則性があるとき、木構造変換部２１は、木構造の圧縮を行う（ステップ１１２）。木構造の圧縮を行うと、木構造変換部２１は、木構造のデータに圧縮を行ったことを示す情報を付加し、木構造のデータを更新する。また、ノードのデータに規則性が無いとき、木構造変換部２１は、決定木の構造の圧縮を行わずに連結木構成情報を実行順序決定部２２に送る。木構造の確認が終わると、木構造変換部２１は、更新された木構造のデータを含む連結木構成情報を実行順序決定部２２に送る。
【００６１】
決定木の圧縮が可能な場合の例を図１８に示す。図１８の例では、ノード１のスコアは、０．５、ノード２のスコアは、−０．５として設定されている。このとき、ノード２のスコアは、ノード１のスコアに「−１」を乗じると算出できるような規則性があるとき、一方のスコアからもう一方のスコアを計算することができる。そのため、そのような規則性を有するときは、２つのスコアのデータを別々にメモリに保存する必要は無いため、決定木の構造を圧縮することができる。図１９は、圧縮が行われた後の決定木の構造の圧縮が行われた後の決定木の構造を示したものである。図１９の例では、ノード１のみが残されて、ノード２のスコアは、ノード１のスコアを基に計算によって算出される。
【００６２】
このような圧縮した構成では、ベクトル化した処理を行う場合に、特に効率の向上が期待できる。ベクトル化した処理を行う場合において、異なるツリーの複数のノードに対して処理が同時に行われる際には、図２０に示す様に、ツリーによってscore０を使うかscore１を使うかいずれかの処理が行われる。この処理をベクトル化して行う際に、規則性を用いないと、４つのツリーに対してscore０とscore１をメモリからそれぞれ読み出し、条件判定の結果に基づいて適切な方を選択する処理が行われるので、それぞれのツリーにおいてメモリアクセスが２回発生する。一方で、本実施形態のように規則性を用いてscore０のみにアクセスするように圧縮することで、メモリアクセスを１回行えばよい。そのため、規則性に基づいて木の圧縮を行うことで処理の効率を向上することができる。
【００６３】
連結木構成情報および装置情報が入力されると、実行順序決定部２２は、連結木構成情報および装置情報を基に処理の実行順序を決定する。処理の実行順序を決定すると、実行順序決定部２２は、決定した処理の実行順序の情報をデータ構造決定部２３およびループ生成部２４に送る。
【００６４】
データ構造決定部２３は、実行順序の情報を受け取ると、実行順序に基づいてメモリ上にデータを配置する。データ構造決定部１２は、連続した処理において、閾値やスコア等のデータへのアクセスが連続で行えるようにメモリ上の配置を決定する。また、データ構造決定部２３は、木構造の圧縮が行われた部分のデータは、圧縮後の構成に基づいてデータを配置する。
【００６５】
データ構造決定部２３は、データの配置を決定すると、メモリ上のデータの配置の情報をコード生成部２５に送る。また、ループ生成部２４は、実行順序の情報を受け取ると、実行順序に基づいてループを生成する。ループ生成部２４は、ループを生成すると、生成したループの情報をコード生成部２５に送る。
【００６６】
コード生成部２５は、データの配置の情報と、ループの情報を受け取ると、データの配置の情報およびループの情報を基に、プログラムのコードを生成する。コード生成部２５は、コードを生成すると、生成したコードを実行可能形式に変換し、実行可能形式のプログラムのデータを出力する。
【００６７】
本実施形態のプログラム生成装置は、第２の実施形態と同様の効果を有する。また、本実施形態のプログラム生成装置は、木構造変換部２１おいて所定の規則性のある決定木の構造の圧縮を行っている。決定木を圧縮することで、ノードを処理する際にメモリにアクセスする回数を減らすことができるので、連結決定木をプログラムによって実行する際の処理速度を向上することができる。その結果、本実施形態のプログラム生成装置を用いることで、連結決定木を用いた処理をより高速に行うことができる。
【００６８】
第２および第３の実施形態のプログラム生成装置は、連結決定木によって多数の対象を処理する場合にも、多数の対象を処理することに最適化したプログラムを生成することができる。例えば、連結決定木によって複数の画像の画像認識を行うような場合に用いることができる。複数の画像の画像認識を行うような場合には、複数の画像のデータに対する繰り返しの処理が行われる。実行順序決定部は、複数の画像のデータの処理を繰り返す部分が、ベクトル化などを考慮した際に最も効率がよいと判断した場合には、複数の画像のデータを処理する繰り返しの部分を最内側として選択する。すなわち、実行順序決定部は、異なるデータに対する同じ決定木における処理をベクトル化した方が効率がよいと判断したときは、異なるデータに対する同じ決定木における処理を最内側として選択する。そのような構成とすることで、複数の画像などを処理する場合においても、効率的に処理を行うことができる。
【００６９】
第２および第３のプログラム生成装置は、異なるステージの決定木に含まれるノードにおける処理をベクトル化してもよい。複数のステージの処理を行う際に、異なるステージのノードにおける処理を繰り返す部分をベクトル化した方が最も効率がよいと判断した場合に、実行順序決定部は、異なるステージの決定木に含まれるノードにおける処理を最内側として選択する。そのような構成とすることで、より効率的に処理を行うことが可能になる。
【００７０】
第２および第３の実施形態のプログラム生成装置において、プロセッサの情報を利用する構成としてもよい。例えば、プロセッサがサポートしているベクトル命令（Single Instruction Multiple Data；ＳＩＭＤ）のベクトル長を考慮して、最も効率がよい実行順序が選択されるようにしてもよい。
【００７１】
第２および第３の実施形態のプログラム生成装置において実行順序を決定する際に、打ち切り率や、決定木のノードの遷移率が利用されるようにしてもよい。多数のデータに対して、打ち切り率や遷移率に規則性がある場合には、規則性を利用してより効率的な実行順序を選択することができる。例えば、打ち切りが特定のステージ後のみで起こるという情報がある場合には、実行順序決定部は、その前後を分割してそれぞれベクトル化されるようにする。打ち切りが頻繁に起こるところで分割することで、打ち切りによって無駄になる処理を減らし、処理の効率を向上することができる。
【００７２】
第２および第３の実施形態のプログラム生成装置において、決定木の連結情報に打ち切りの有無の変更の可否の情報が含まれるようにしてもよい。ベクトル化した処理を実行する際に、一度に処理される要素間において打ち切り処理を無しに変えることで、処理の効率を上げることができる。打ち切りがある場合は、ベクトル化して一度に処理された要素のうち、打ち切り切られた要素について、最終的なスコアへの影響が生じないように除外する処理を行う必要がある。しかし、打ち切られる要素に関するスコアが最終的なスコアの計算に利用しても良い場合は、除外の処理が不要となる。そのため、打ち切らずに処理を継続させることで、ベクトル化した処理の効率を向上させることができる。ベクトル化して一度に処理した場合には、打ち切りに関する要素を処理したとしても、除外の処理が不要ならば効率の悪化を抑えることができる。
【００７３】
打ち切りを無しに変更できる場合には、例えば、要素の増加に対してスコアが単調増加する場合が該当する。ある要素で閾値を超えてその後に要素を追加しても閾値を下回らない場合には、打ち切らずに処理を計測しても最終的なスコアを基にした判断に影響は生じない。打ち切りの有無の変更の可否の情報は、連結情報として入力されてもよく、また、決定木のデータや評価関数を基に判断されるようにしてもよい。
【００７４】
第２および第３の実施形態のプログラム生成装置の各機能に相当する処理は、コンピュータプログラムとしてコンピュータで実行されるようにしてもよい。また、第２および第３の実施形態に示した各処理をコンピュータに実行させるできるプログラムは、記憶媒体格納して頒布することもできる。記憶媒体としては、例えば、データ記録用磁気テープや、ハードディスクなどの磁気ディスクを用いることができる。また、記憶媒体としては、ＣＤ-ＲＯＭ（Compact Disc Read Only Memory）やＤＶＤ（Digital Versatile Disc）などの光ディスク、光磁気ディスク（ＭＯ：Magneto Optical disk）を用いることもできる。半導体メモリを記憶媒体として用いてもよい。
【符号の説明】
【００７５】
１    構成情報取得手段
２    実行順序決定手段
３    プログラム生成手段
１０    プログラム生成装置
１１    実行順序決定部
１２    データ構造決定部
１３    ループ生成部
１４    コード生成部
１５    連結木構成情報入力部
１６    装置情報入力部
２０    プログラム生成装置
２１    木構造変換部
２２    実行順序決定部
２３    データ構造決定部
２４    ループ生成部
２５    コード生成部
２６    連結木構成情報入力部
２７    装置情報入力部
【図１】
0006750330.tif 000002
【図２】
0006750330.tif 000003
【図３】
0006750330.tif 000004
【図４】
0006750330.tif 000005
【図５】
0006750330.tif 000006
【図６】
0006750330.tif 000007
【図７】
0006750330.tif 000008
【図８】
0006750330.tif 000009
【図９】
0006750330.tif 000010
【図１０】
0006750330.tif 000011
【図１１】
0006750330.tif 000012
【図１２】
0006750330.tif 000013
【図１３】
0006750330.tif 000014
【図１４】
0006750330.tif 000015
【図１５】
0006750330.tif 000016
【図１６】
0006750330.tif 000017
【図１７】
0006750330.tif 000018
【図１８】
0006750330.tif 000019
【図１９】
0006750330.tif 000020
【図２０】
0006750330.tif 000021