(57)【要約】【課題】グラフ上の畳み込み演算においてプーリング処理を行う。【解決手段】計算機システムは、グラフ上の畳み込みニューラルネットワークを実行する。グラフ上の畳み込みニューラルネットワークは、１以上の畳み込み層と、１以上のプーリング層と、を含む。１以上のプロセッサは、各畳み込み層において、各ノードの値を、所定ホップ数のサイズを有するカーネルに基づく畳み込み演算によって、更新し、各プーリング層において、各ノードの値を、各ノードの値及び各ノードから所定ホップ数のプーリング範囲内のノードの値に基づくプーリング処理によって、更新する。プーリング層の後段の畳み込み層のカーネルのサイズは、前段の畳み込み層のカーネルのサイズよりも大きい。【選択図】図９
2020027399.tif 000002
【特許請求の範囲】
【請求項１】
グラフ上の畳み込みニューラルネットワークを実行する、計算機システムであって、
１以上のプロセッサと、
１以上の記憶装置と、を含み、
前記グラフ上の畳み込みニューラルネットワークは、
１以上の畳み込み層と、
１以上のプーリング層と、を含み、
前記１以上の記憶装置は、前記１以上の畳み込み層のカーネルの重みデータを格納し、
前記１以上のプロセッサは、
各畳み込み層において、各ノードの値を、所定ホップ数のサイズを有するカーネルに基づく畳み込み演算によって、更新し、
各プーリング層において、各ノードの値を、各ノードの値及び各ノードから所定ホップ数のプーリング範囲内のノードの値に基づくプーリング処理によって、更新し、
プーリング層の後段の畳み込み層のカーネルのサイズは、前段の畳み込み層のカーネルのサイズよりも大きい、計算機システム。
【請求項２】
請求項１に記載の計算機システムであって、
畳み込み層の後段のプーリング層のプーリング範囲は、前段のプーリング層のプーリング範囲よりも広い、計算機システム。
【請求項３】
請求項１に記載の計算機システムであって、
前記１以上のプロセッサは、前記所定ホップ数のプーリング範囲のプーリング処理を、１ホップ範囲のプーリング処理を前記所定ホップ数と一致する回数だけ繰り返すことで行う、計算機システム。
【請求項４】
請求項１に記載の計算機システムであって、
前記１以上のプロセッサは、前記グラフ上の畳み込みニューラルネットワークの誤差伝播学習において、誤差関数に前記１以上の畳み込み層の正則化項を含める、計算機システム。
【請求項５】
請求項１に記載の計算機システムであって、
前記１以上のプロセッサは、前記プーリング処理において、入力値にスムースマキシマムを適用した後に平均値プーリングを行う、計算機システム。
【請求項６】
請求項１に記載の計算機システムであって、
前記１以上のプロセッサは、前記１以上の畳み込み層及び前記１以上のプーリング層の後段において、全域平均プーリングを実行する、計算機システム。
【請求項７】
請求項１に記載の計算機システムであって、
前記計算機システムは、ネットワークにより接続された複数のサブシステムを含み、
前記複数のサブシステムは、隣接するサブシステムとのみ通信を行い、
前記複数のサブシステムのそれぞれは、前記グラフ上の畳み込みニューラルネットワークにおいて、同一位置のニューロンからなるカラムの計算を行う、計算機システム。
【請求項８】
請求項７に記載の計算機システムであって、
前記複数のサブシステムのそれぞれは、
前記カラムの値を示す内部状態ベクトルを保持し、
隣接サブシステムを含む他のサブシステムから前記内部状態ベクトルを取得し、
自内部状態ベクトル及び他のサブシステムの内部状態ベクトルを使用して前記カラムの計算を行う、計算機システム。
【請求項９】
請求項７に記載の計算機システムであって、
前記複数のサブシステムは、前記１以上の畳み込み層及び前記１以上のプーリング層の後段において、分散で前記カラムの値の平均値を計算する、計算機システム。
【請求項１０】
請求項７に記載の計算機システムであって、
前記複数のサブシステムのそれぞれは、
他のサブシステムから独立して、誤差逆伝播による学習によって前記１以上の畳み込み層の重みを更新し、
前記更新した重みの平均値を他のサブシステムとの通信により計算する、計算機システム。
【請求項１１】
計算機システムが、グラフ上の畳み込みニューラルネットワークを実行する、方法であって、
前記計算機システムは、
１以上のプロセッサと、
１以上の記憶装置と、を含み、
前記グラフ上の畳み込みニューラルネットワークは、
１以上の畳み込み層と、
１以上のプーリング層と、を含み、
前記１以上の記憶装置は、前記１以上の畳み込み層のカーネルの重みデータを格納し、
前記方法は、
各畳み込み層において、各ノードの値を、所定ホップ数のサイズを有するカーネルに基づく畳み込み演算によって、更新し、
各プーリング層において、各ノードの値を、各ノードの値及び各ノードから所定ホップ数のプーリング範囲内のノードの値に基づくプーリング処理によって、更新し、
プーリング層の後段の畳み込み層のカーネルのサイズは、前段の畳み込み層のカーネルのサイズよりも大きい、方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、計算機システムに関する。
【背景技術】
【０００２】
社会インフラ及び都市等を効率的に設計、運用するため、実社会及びサイバ空間のデータを処理し、社会インフラ等の状態を解析し、若しくは予測し、又は、社会インフラ等を制御し、若しくは誘導する技術が注目されている。処理されるデータは、温度及び湿度等の環境のセンシングデータ、自動車等の機械のログデータ、並びにメール及びＳＮＳ等の人間又は組織のログデータから構成される。
【０００３】
近年、ニューラルネットワークを使用する機械学習が、データ解析する手法として注目されている。ニューラルネットワークは、高速で正確なデータ解析を容易に実現することができる。上述のようなシステムのデータを含む様々な種類のデータは、グラフ構造により表わすことができるグラフデータである。
【０００４】
例えば、国際公開第２０１６／１７４７２５号（特許文献１）は、グラフデータのニューラルネットワークを構築得る技術を開示する。具体的には、特許文献１は、一つ以上のニューロンを含む複数の層から構成されるニューラルネットワークを用いた演算処理を実行する計算機であって、複数のノード及び複数のノード間を接続する一つ以上のエッジから構成されるグラフデータ、及びニューラルネットワークに入力される一つ以上の値を格納するサンプルデータを格納する記憶部と、グラフデータを用いて、ニューラルネットワークを構築する構築部と、を備え、構築部は、グラフデータに含まれる前記複数のノードに基づいて、複数の層の各々の一つ以上のニューロンを生成し、グラフデータに含まれる一つ以上のエッジに基づいて、複数の層の各々に含まれる一つ以上のニューロン間の接続を生成することによってニューラルネットワークを構築する、ことを開示する（例えば要約）。また、非特許文献１は、関係グラフ畳み込みネットワークの例を開示する。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】国際公開第２０１６／１７４７２５号
【非特許文献】
【０００６】
【非特許文献１】M. Schlichtkrull et al.、 “Modeling Relational Data with Graph Convolutional Networks”、arXiv preprint arXiv:1703.06103、 2017.
【発明の概要】
【発明が解決しようとする課題】
【０００７】
様々な種類のニューラルネットワークが知られている中で、畳み込みニューラルネットワーク（ＣＮＮ）は、特に画像処理に有用なニューラルネットワークとして知られている。グラフデータは関係性を有しており、グラフデータをＣＮＮにより解析することができれば有用である。
【０００８】
ＣＮＮを深いネットワークで構成するいわゆる深層学習の実現には、プーリング、又は、より一般にパラメータの自由度を上層に行くほど小さくする操作が必要である。プーリング層なしで畳み込み層だけを多数重ねると、表現可能な自由度が減らない（正則化がかからない）ままパラメータ数のみが増えることととなり、パラメータの学習時に過学習を引き起こす。
【０００９】
従来のグリッドデータのＣＮＮ（グリッド上のＣＮＮ）は、畳み込み演算（及び非線形活性化関数の適用）の後に、プーリングと呼ばれる操作で画像サイズを縮小することが一般的である。しかし、グラフデータのＣＮＮにおいて、プーリング操作の実現は困難である。
【００１０】
グリッドデータにおけるプーリング操作を単純にグラフデータに対応させると、適当にグラフデータのノードを削除してグラフデータのサイズを縮小すればよいと考えられる。しかしながら、どのようにして削除するノードと残すノードを選ぶのかの指針が明らかでない。
【００１１】
したがって、グラフ上のＣＮＮにおいてパラメータの自由度を低減するプーリングを実現する技術が望まれる。
【課題を解決するための手段】
【００１２】
本開示の一態様は、グラフ上の畳み込みニューラルネットワークを実行する、計算機システムであって、１以上のプロセッサと、１以上の記憶装置と、を含み、前記グラフ上の畳み込みニューラルネットワークは、１以上の畳み込み層と、１以上のプーリング層と、を含み、前記１以上の記憶装置は、前記１以上の畳み込み層のカーネルの重みデータを格納し、前記１以上のプロセッサは、各畳み込み層において、各ノードの値を、所定ホップ数のサイズを有するカーネルに基づく畳み込み演算によって、更新し、各プーリング層において、各ノードの値を、各ノードの値及び各ノードから所定ホップ数のプーリング範囲内のノードの値に基づくプーリング処理によって、更新し、プーリング層の後段の畳み込み層のカーネルのサイズは、前段の畳み込み層のカーネルのサイズよりも大きい。
【発明の効果】
【００１３】
本開示の一態様によれば、グラフ上の畳み込み演算において適切にプーリング処理を行うことができる。
【図面の簡単な説明】
【００１４】
【図１】計算機システムの構成の一例を示す。
【図２】ニューラルネットワークの一例を示す。
【図３】畳み込みニューラルネットワークの例を示す。
【図４】グラフ上のＣＮＮの構成例を示す。
【図５】グラフデータの例を示す。
【図６】一つのノード及び当該ノードに接続されているノードを示す。
【図７】重みデータの一部であって、ノードの畳み込みに関する値を示す。
【図８】ノードの状態値の更新を模式的に示す。
【図９】グラフ上のＣＮＮの第１畳み込み層、第１プーリング層、第２畳み込み層及び第２プーリング層詳細を示す。
【図１０】グラフ上のＣＮＮに入力されるグラフデータの例を示す。
【図１１】第１畳み込み層の畳み込み演算の例を示す。
【図１２】グラフデータの属性の例を示す。
【図１３】本例の重みデータの一部のデータを示す。
【図１４】第１畳み込み層によりエッジの状態値の更新を示す。
【図１５】第１プーリング層によるプーリング処理を模式的に示す。
【図１６】図１５に示すグラフ構造を有するグラフデータにおいて、適用可能なラプラシアン行例の例を示す。
【図１７】第２畳み込み層による、ノードのための畳み込み演算を模式的に示す。
【図１８】計算機が実行する学習処理を説明するフローチャートである。
【図１９】分散ＣＮＮを実行する計算機システムの例を示す。
【図２０】分散ＣＮＮの層及びカラムの例を示す。
【図２１】分散ＣＮＮの概念的な構成例を示す。
【図２２】関数ｆの適用ノードの伝播則を示す。
【図２３】可算ノードの伝播則を示す。
【図２４】乗算ノードの伝播則を示す。
【図２５】変数複製ノード（分岐ノード）の伝播則を示す。
【図２６】分散ＣＮＮの構成例及びその処理を示す。
【発明を実施するための形態】
【００１５】
以下、添付図面を参照して本発明の実施形態を説明する。本実施形態は本発明を実現するための一例に過ぎず、本発明の技術的範囲を限定するものではないことに注意すべきである。各図において共通の構成については同一の参照符号が付されている。
【実施例１】
【００１６】
［システム構成］
図１は、計算機システムの構成の一例を示す。図１に示すように、計算機システム１００は、複数の計算機１０１、及びストレージシステム１０２から構成され、複数の計算機１０１とストレージシステム１０２とは、互いに通信できるように、ネットワーク１０３を介して接続される。本実施例の計算機システム１００は、３つの計算機１０１を含む。図１は、一つの計算機のみを例として符号１００で指示する。なお、計算機及びストレージシステムの数は、任意である。計算機システム１００は、一つの計算機１０１で構成されていてもよい。
【００１７】
ネットワーク１０３は、ＷＡＮ（Ｗｉｄｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、ＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、及びＳＡＮ（Ｓｔｏｒａｇｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）等が考えられる。なお、ネットワーク１０３の種別は限定されない。計算機１０１それぞれとストレージシステム１０２接続するネットワークと、計算機１０１それぞれを接続するネットワークは、異なるネットワークであってもよい。
【００１８】
計算機１０１は、プロセッサ１１０、メモリ１１１、通信インタフェース１１２、及び入出力インタフェース１１８を含み、各構成はバス１１４を介して互いに接続される。また、入出力装置１１９は、入出力インタフェース１１８を介して他の装置と接続される。プロセッサ１１０は、演算処理を実行する１つ以上のＣＰＵ１１５を含む。図１において、一つのＣＰＵのみが符号１１５で指示されている。ＣＰＵ１１５は、メモリ１１１に格納されるプログラムを実行することによって、計算機１０１が有する機能を実現する。また、計算機１０１上で実行される処理は１つ以上のＣＰＵ１１５によって実行される。なお、１つのＣＰＵ１１５が複数の処理を実行してもよい。なお、ＣＰＵ１１５は、ＦＰＧＡ又はＧＰＵ等の演算器であってもよい。
【００１９】
メモリ１１１は、プロセッサ１１０が実行するプログラム及び当該プログラムによって使用される情報を格納する。また、メモリ１１１は、プロセッサ１１０が実行する１つの処理に対して割り当てられるメモリ空間を含む。なお、当該メモリ空間は、複数のメモリ１１１のメモリ領域上に確保されてもよいし、また、１つのメモリ１１１のメモリ領域上に確保されてもよい。また、メモリ１１１は、複数の処理のメモリ空間を含んでもよい。メモリ１１１に格納されるプログラム及び情報については後述する。
【００２０】
通信インタフェース１１２は、ネットワーク１０３を介して外部装置と通信する。プロセッサ１１０は、通信インタフェース１１２を介して、他の装置にアクセスする。入出力インタフェース１１８は、ネットワーク１０３を介して、他の装置と入出力装置１１９との通信を媒介する。
【００２１】
ストレージシステム１０２は、ディスクインタフェース１３３、及び複数の記憶デバイス１１７を含み、各装置はバス１３５を介して互いに接続される。ディスクインタフェース１３３は、複数の記憶ドライブ１３４と接続するためのインタフェースである。記憶ドライブ１３４は、各種データを格納する記憶装置であり、例えば、ＨＤＤやＳＳＤである。図１において、一つの記憶ドライブのみが符号１３４で指示されている。
【００２２】
メモリ１１１は、データ処理部１２０を実現するプログラムを格納する。データ処理部１２０を実行するプロセッサ１１０は、逆誤差伝播により学習処理、及び順伝播による分析処理を実行する。学習処理では、プロセッサ１１０は、学習データ１２２を使用して、構築したニューラルネットワーク内のエッジの重みを決定する。分析処理では、プロセッサ１１０は、分析対象であるデータを、構築されたニューラルネットワークに入力することによって、分類や回帰等の所定の分析を行う。
【００２３】
なお、データ処理部１２０は、複数のプログラムモジュールから構成されてもよい。例えば、データ処理部１２０は、ニューラルネットワークを構築する構築モジュール、学習処理を実行する学習処理モジュール、及び分析処理を実行する分析処理モジュールを含んでもよい。また、それぞれのプログラムモジュールを別々の計算機１０１が実行してもよい。
【００２４】
［ニューラルネットワーク］
図２は、ニューラルネットワークの一例を示す。図２に示すニューラルネットワーク２００は、入力層２０１、中間層２０２、及び出力層２０３の３層から構成される。各層は１つ以上のニューロン２１１から構成される。また、各層のニューロン２１１は、他の層の少なくとも１つのニューロン２１１と接続する。具体的には、入力層２０１のニューロン２１１は、中間層２０２の少なくとも１つのニューロン２１１と接続し、また、中間層２０２のニューロン２１１は、出力層２０３の少なくとも１つのニューロン２１１と接続する。入力層２０１の側が前段側であり、出力層２０３の側が後段側である。
【００２５】
エッジ２１２はニューロン２１１間のデータの出力を表す。ニューラルネットワーク２００は、分析処理において、入力されたデータを入力層２０１から、中間層２０２を介して、出力層２０３に順伝播する。各ニューロン２１１に入力された値は、エッジに割り当てられている重みと掛け算され、エッジ２１２によって接続される他の層のニューロン２１１に出力される。入力２１１への入力はバイアスを含んでよい。重みは、ニューロン２１１間の接続の強さを表し、後述する学習処理によって決定される。学習処理は、損失信号の誤差逆伝播により各層の重みが更新される。
【００２６】
図１に戻って、メモリ１１１は、グラフデータ１２１、学習データ１２２、及び重みデータ１２３を格納する。グラフデータ１２１は、任意の要素に対応するノード、及びノード間を接続するエッジから構成されるグラフ構造を有するデータである。学習データ１２２は、ニューラルネットワークを用いた学習処理において用いられるデータである。重みデータ１２３は、ニューラルネットワークの学習処理の処理結果である重みを管理する情報である。
【００２７】
グラフデータ１２１及び学習データ１２２は、例えば、ストレージシステム１０２に格納されており、プロセッサ１１０が、ストレージシステム１０２からグラフデータ１２１及び学習データ１２２を取得し、取得されたグラフデータ１２１及び学習データ１２２をメモリ１１１にロードする。
【００２８】
［グリッド上のＣＮＮ］
図３は、畳み込みニューラルネットワーク（ＣＮＮ）の例を示す。本開示の計算機システム１００は、グラフ上のＣＮＮを実行する。図３を参照して、典型的なグリッド上のＣＮＮ３００を説明する。グリッド上のＣＮＮは、画像データのようなマトリックス状（グリッド状）の入力データを処理する。
【００２９】
図３の例において、２８ｘ２８のグレースケールの手書きの数字の画像３０１が入力される。ＣＮＮ３００は、５ｘ５の畳み込みフィルタ及びＲｅＬＵ関数を適用して（３０２）、６つの２４ｘ２４の特徴マップ３０３を生成する。ＣＮＮ３００は、これら特徴マップに２ｘ２の最大値プーリングを適用して（３０４）、画像サイズを半分に縮小された特徴マップ３０５を生成する。
【００３０】
ＣＮＮ３００は、さらに、５ｘ５の畳み込みフィルタ及びＲｅＬＵ関数を実行して（３０６）、１０の８ｘ８の特徴マップ３０７を生成する。ＣＮＮ３００は、これら特徴マップに２ｘ２の最大値プーリングを適用して（３０８）、画像サイズを半分に縮小された特徴マップ３０９を生成する。その後、２層の全結合層よりなるパーセプトロン３１０が、最終的に１０次元のベクトルを出力する。出力された１０次元ベクトルはＳｏｆｔＭａｘ関数によりワンホットベクトル表現に変換され、入力画像が０〜９までのどの数字であるかの尤もらしさを表す。
【００３１】
［グラフ上のＣＮＮ（順伝播）］
以下において、本開示のグラフ上のＣＮＮについて説明する。計算機システム１００は、グラフ上のＣＮＮを実行する。図４は、グラフ上のＣＮＮの構成例４００を示す。図４は、ＣＮＮ４００における順伝播（分析処理）を示し、データ処理部１２０により実行される。グラフ上のＣＮＮ４００は、各層において、共通のグラフ構造上でデータを処理する。
【００３２】
グラフ構造は、複数のノードと、それぞれ二つノードを接続する複数のエッジで構成されている。グリッド構造はグラフ構造の一つであり、各ノードが隣接するノードそれぞれとエッジで接続されている。本開示におけるグラフ構造は、任意の複数ノードと、任意数のエッジとで構成される。一つのノードは、１以上の任意の数のエッジに接続される。
【００３３】
グラフデータは、グラフ構造を有するデータであって、ノードそれぞれに状態値が割り当てられている。状態値は、１次元以上のベクトルで表わすことができる。図４に示すように、グラフデータ１２１が、グラフ上のＣＮＮ４００に入力される。上述のように、グラフデータ１２１の各ノードは、状態値を有しており、ノード間のエッジが定義されている。
【００３４】
図４のＣＮＮ４００は、図３を参照して説明したグリッド上のＣＮＮ３００のように、２つの畳み込み層と２つのプーリング層を含む。具体的には、ＣＮＮ４００は、第１畳み込み層４１１、第１プーリング層４１２、第２畳み込み層４１３、第２プーリング層４１４及び全域平均プーリング（Ｇｌｏｂａｌ  Ａｖｅｒａｇｅ  Ｐｏｏｌｉｎｇ：ＧＡＰ）層４１５を含む。第１畳み込み層４１１は、グラフデータ１２１のグラフ構造上で、入力されたグラフデータ１２１の畳み込み演算を行う。これにより、２つの特徴マップ４０２が生成される。
【００３５】
第１プーリング層４１２、グラフデータ１２１のグラフ構造上で、特徴マップ４０２それぞれにプーリング処理を実行し、表現の自由度が低下した特徴マップ４０３に変換する。第２畳み込み層４１３は、グラフデータ１２１のグラフ構造上で、特徴マップ４０３の畳み込み演算を行う。これにより、３つの特徴マップ４０４が生成される。
【００３６】
第２プーリング層４１４、グラフデータ１２１のグラフ構造上で、特徴マップ４０４それぞれにプーリング処理を実行し、表現の自由度が低下した特徴マップ４０５に変換する。特徴マップ４０５は全域平均プーリング層４１５に入力される。全域平均プーリング層４１５は、チャネル毎に全てのニューロンの値の平均値をとる。
【００３７】
畳み込み層及びプーリング層の処理の詳細は後述するが、畳み込み層及びプーリング層は、それぞれ、グラフデータの各ノードの状態値を更新する。したがって、各層に入力されたデータのグラフ構造は、出力データにおいて維持されている。具体的には、入力グラフデータ１２１、特徴マップ４０２〜４０５のグラフ構造は共通である。各層において、ノードそれぞれに対応するニューロンが存在し、ニューロンは、対応するノードの新たな値を出力する。なお、他の例において、１又は複数の層における入力データのグラフ構造が出力データのグラフ構造と異なっていてもよい。
【００３８】
図５は、グラフデータ１２１の例を示す。図５に示すグラフデータ１２１は、エッジの構造情報５００及びノードの構造情報５１０を含む。エッジの構造情報５００は、エッジＩＤ５０１、ノードＩＤ５０２、及びエッジ属性５０３を含む。エッジＩＤ５０１は、グラフデータのエッジそれぞれのＩＤを示す。ノードＩＤ５０２は、グラフデータそれぞれのノードのＩＤを示す。エッジ属性５０３は、エッジそれぞれに付与されている属性情報を示す。エッジ属性５０３は、エッジの向き及び種類の情報を含む。
【００３９】
ノードの構造情報５１０は、ノードＩＤ５１１、エッジＩＤ（ＯＵＴ）５１２、エッジＩＤ（ＩＮ）５１３、及びノード属性５１４を含む。ノードＩＤ５１１は、ノードＩＤ５０２と同一のである。エッジＩＤ（ＯＵＴ）５１２は、ノードから流出するエッジのＩＤを示す。ノードは、エッジＩＤ（ＯＵＴ）５１２が示すエッジの始点ノードである。エッジＩＤ（ＯＵＴ）５１３は、ノードＩＤ５１１が示すノードに流入するエッジのＩＤを示す。ノードは、エッジＩＤ（ＩＮ）５１３が示すエッジの終点である。ノード属性５１４は、ノードの属性情報を示す。ノード属性５１４は、ノードの種類の情報を含む。
【００４０】
様々な種類の情報がグラフデータで表わすことができ、例えば、地図情報、分子構造情報、ソーシャルネットワークの情報、交通網の情報などが、グラフデータで表わすことができる。例えば、地図の位置がノードで表わされ、道路がエッジで表わされる。土地を表すノードの属性情報は、不動産価値や、駅又は公園等の土地の利用形態などを含む。また、道路を表すエッジの属性情報は、路線名、道路幅、接続する土地（ノード）の属性、向きなどを含む。土地及び道路の属性情報に応じて、土地及び道路それぞれに属性種類が定義される。例えば、グラフＣＮＮを既存の不動産価値を表す属性情報を教師データとして学習することで、与えられた土地の不動産価値の推定を行うことができる。
【００４１】
グラフ上の畳み込み演算には、大きく分けて、グラフフーリエ変換を用いる手法と、Ｒｅｌａｔｉｏｎａｌ  Ｇｒａｐｈ  Ｃｏｎｖｏｌｕｔｉｏｎ  Ｎｅｔｗｏｒｋ（Ｒ−ＧＣＮ）と呼ばれるより直接的な手法がある。このうち、グラフフーリエ変換を用いる手法は、理論的な背景が明らかという利点があるが、重複エッジのない単純な無向グラフにしか適用することができないという欠点がある。
【００４２】
一方、Ｒ−ＧＣＮは、グリッド上の畳み込み演算の直感的な拡張になっており、有向グラフエッジ、又はより一般的にノードやエッジに属性が付与されている場合でも自然に定義することが可能である。本開示の特徴は、いずれの手法にも適用することができるが、以下において、Ｒ−ＧＣＮの例を説明する。
【００４３】
［Ｒ−ＧＣＮの例］
図６、７及び８を参照して、Ｒ−ＧＣＮの公知の例を説明する。畳み込み演算は、ノードの状態値を、当該ノード及び周囲の他のノードの状態値に基づき、更新する。以下においては、一つのノードの状態値を更新する処理の例を説明する。図６は一つのノード６００及び当該ノード６００に接続されているノード６１１〜６１４、６２１〜６２３を示す。ノード６００及びノード６１１〜６１４それぞれを接続するエッジは属性Ｒ１を有する。ノード６００及びノード６２１〜６２３それぞれを接続するエッジは属性Ｒ２を有する。
【００４４】
図７は、重みデータ１２３の一部であって、ノード６００の畳み込みに関する値を示す。重みデータ１２３は、エッジ属性種類６０１と重み６０２を含む。エッジ属性種類６０１は、エッジ属性の種類の識別子を示す。本例において、エッジ属性種類６０１とグラフデータ１２１のエッジ属性５０３で示される種類とは異なる。これらは同一であってもよい。重み６０２は、エッジ属性種類それぞれの重みを示す。重み６０２が示す値は、ＣＮＮ４００の学習（訓練）において更新される。なお、本例のノード６００の状態値の畳み込み演算のバイアスは０とする。
【００４５】
図６及び７に示すように、エッジの属性種類は、エッジの属性及びノード６００に対するエッジの方向により定義されている。具体的には、ノード６１２〜６１４とノード６００とを接続するエッジのエッジ属性種類は、Ｒ１（ＩＮ）である。ノード６１１とノード６００とを接続するエッジのエッジ属性種類は、Ｒ１（ＯＵＴ）である。ノード６２２及び６２３とノード６００とを接続するエッジのエッジ属性種類は、Ｒ２（ＩＮ）である。ノード６２１とノード６００とを接続するエッジのエッジ属性種類は、Ｒ２（ＯＵＴ）である。エッジ６３１の始点及び終点はノード６００のセルフループであり、そのエッジ属性種類は、ＳＥＬＦである。
【００４６】
図８は、ノード６００の状態値の更新を模式的に示す。畳み込み演算は、まず、同一エッジ属性種類のノードの状態値の総和を計算する。具体的には、以下の通りである。ノード６１２〜６１４のエッジ属性種類はＲ１（ＩＮ）である。畳み込み演算は、ノード６１２〜６１４の状態値８０１の総和８１１を計算する。ノード６１１のエッジ属性種類はＲ１（ＯＵＴ）である。畳み込み演算は、ノード６１１の状態値８０２の総和８１２を計算する。
【００４７】
ノード６２２及び６２３のエッジ属性種類はＲ２（ＩＮ）である。畳み込み演算は、ノード６２２及び６２３の状態値８０３の総和８１３を計算する。ノード６２１のエッジ属性種類はＲ２（ＯＵＴ）である。畳み込み演算は、ノード６２１の状態値８０４の総和８１４を計算する。畳み込み演算は、セルフループエッジ６３１に対して、ノード６００の状態値８０５の総和８１５を計算する。
【００４８】
次に、畳み込み演算は、エッジ属性種類の総和と対応する重みの積和を計算する。エッジ属性種類の重みは、図７の重みデータ１２３に示されている。つまり、畳み込み演算は、エッジ属性種類の総和それぞれに、重みデータ１２３が示す重みを乗算し、それらの総和を計算する（８２１）。畳み込み演算は、この積和にＲｅＬＵ関数８２２を適用して得られる状態値８３１を出力する。
【００４９】
図６〜８を参照して説明したグラフ上のＣＮＮの例は、対象ノードの状態値と、当該対象ノードに隣接するノード状態値とから、当該対象ノードの状態値の更新値を決定する。隣接するノードは、対象ノードから１ホップのノードである。ホップ数は、ノード間の距離を表し、ノード間のエッジの数を示す。一つのノードから他のノードまで複数の経路が存在する場合、それぞれの経路のホップ数が定義される。
【００５０】
［グラフ上のＣＮＮの各層の処理］
図９は、グラフ上のＣＮＮ４００の第１畳み込み層４１１、第１プーリング層４１２、第２畳み込み層４１３及び第２プーリング層４１４の詳細を示す。第１畳み込み層４１１は、各ノードの状態値の更新値を、当該ノード及び１ホップ内のノードの状態値から、ＲｅＬＵ関数を使用して計算する。第１プーリング層４１２は、１ホップ内でのプーリング処理を実行する。プーリング処理の詳細は後述する。
【００５１】
第２畳み込み層４１３は、各ノードの状態値の更新値を、当該ノード及び２ホップ内のノードの状態値から、ＲｅＬＵ関数を使用して計算する。第２プーリング層４１４は、２ホップ内でのプーリング処理を実行する。２ホップ内でのプーリング処理を実行するかわりに、１ホッププーリングを２回実行してもよい。
【００５２】
図９に示すように、第２畳み込み層４１３の畳み込み演算の範囲は、第１畳み込み層４１１の畳み込み演算の範囲よりも広い。また、第１プーリング層４１２が１ホップ内でのプーリング処理を実行することに対して、第２プーリング層４１４は、２ホップ内でのプーリング処理を実行する。これは、第２プーリング層４１４のプーリング処理の範囲が、第１プーリング層４１２のプーリング処理の範囲よりも広いことを意味する。
【００５３】
図３を参照して説明したように、従来のグリッド上のＣＮＮ３００は、畳み込み演算（畳み込み演算＋非線形活性化関数の適用）の後にプーリング処理（通常は最大値プーリング処理）を実行することで、画像サイズを縮小する。これに対して、本例のグラフ上のＣＮＮ４００のプーリング層４１２及び４１４は、グラフ構造を縮小することなくプーリング処理を実行する。後述するように、グラフ上のＣＮＮ４００におけるプーリング処理は、グラフのサイズを一定に保つ一方で、近隣のノード間で値を近づけるという正則化をとりいれることで、実質的にプーリングを行う。
【００５４】
第１プーリング層４１２の直後の第２畳み込み層４１３は、プーリング層で近隣のノードの値が近づいてしまうため、広い範囲を見る、すなわち、畳み込みフィルタのカーネルサイズを広げる。これにより、プーリング処理後の畳み込み演算がより有効となる。第２畳み込み層４１３の後のプーリング層４１４は、第２畳み込み層４１３の畳み込みフィルタのカーネルサイズが広げられたため、プーリング範囲を広げることで、より有効なプーリング処理を実現する。
【００５５】
図９に示す例において、第１畳み込み層４１１の範囲は１ホップ内であるが、第１畳み込み層４１１の範囲はより広くてもよい。第２畳み込み層４１３の範囲は、第１畳み込み層４１１の範囲より広ければ、それらの関係は限定されない。例えば、第２畳み込み層４１３の範囲は、３ホップ以上であってもよい。
【００５６】
グラフ上のＣＮＮ４００の例は、それぞれ３増以上の畳み込み層及びプーリング層を含むことができる。例えば、畳み込み層の畳み込み演算の範囲（ホップ数）は、例えば、一つ前の畳み込み層の定数倍である。ホップ数２倍の例において、畳み込み層の畳み込み演算の範囲は、１ホップ、２ホップ、４ホップ、８ホップと増加する。ホップ数１．５倍の例において、畳み込み層の畳み込み演算の範囲は、１ホップ、２ホップ、３ホップ、４ホップ、６ホップと増加する。プーリング層のプーリング処理の範囲（ホップ数）は、例えば、直前の畳み込み層のホップ数と一致させる。
【００５７】
以下において、グラフ上のＣＮＮ４００の処理の例を示す。図１０は、グラフ上のＣＮＮ４００に入力されるグラフデータ１２１の例を示す。グラフデータ１２１は、ノードＮ１〜Ｎ１３と、それぞれノード間を接続する複数のエッジを含む。図１０は明示していないが、ノードＮ１〜Ｎ１３のそれぞれに状態値が定義されており、また、エッジのそれぞれにエッジ属性種類が定義されている。
【００５８】
［第１畳み込み層］
図１１は、第１畳み込み層４１１の畳み込み演算の例を示す。図１１は、ノードＮ１の状態値の更新の例を示す。第１畳み込み層４１１は、１ホップ内で畳み込み演算を実行する。ノードＮ１から１ホップ内のノード、つまり、ノードＮ１に一つのエッジで接続されているノードは、ノードＮ２、Ｎ６、Ｎ９、Ｎ１０及びＮ１２である。第１畳み込み層４１１は、ノードＮ２、Ｎ６、Ｎ９、Ｎ１０及びＮ１２の状態値を集め、それら状態値とノードＮ１の状態値とから、ノードＮ１の更新状態値を計算する。
【００５９】
図１２は、グラフデータ１２１の属性の例を示す。グラフデータのエッジそれぞれにエッジ属性種類が定義されており、Ｐと数字からなる符号で指示されている。例えば、ノードＮ１とノードＮ１２の間のエッジのエッジ属性種類はＲ１であり、ノードＮ１とノードＮ２の間のエッジのエッジ属性種類はＲ２であり、ノードＮ１とノードＮ６の間のエッジのエッジ属性種類はＲ３である。エッジ属性種類Ｒ１のエッジは実線で表わされ、エッジ属性種類Ｒ２のエッジは破線で表わされ、エッジ属性種類Ｒ３のエッジは２点鎖線で表わされている。
【００６０】
図１３は、本例の重みデータ１２３の一部のデータを示す。重みデータ１２３は、対象ノードの現在状態値の重みＷ０及び１ホップのエッジ属性種類の重みを定義すると共に、２ホップのエッジ属性種類の重みを定義する。１ホップのエッジ属性種類は、エッジそれぞれのエッジ属性種類Ｒ１、Ｒ２及びＲ３と一致する。２ホップのエッジ属性種類は、２つのＰと２つの数字で表わされており、二つのエッジのエッジ属性種類の組を示す。
【００６１】
より具体的には、２ホップのエッジ属性種類は、対象ノードに近いエッジのエッジ属性種類と対象ノードから遠いエッジのエッジ属性種類を示す。例えば、エッジ属性種類Ｒ１Ｒ２は、対象ノードと隣接ノードの間のエッジのエッジ属性種類がＲ１であり、対象ノードの隣接ノードと２ホップ離れたノードとの間のエッジのエッジ属性種類がＲ２であることを表す。
【００６２】
図１４は、第１畳み込み層４１１によりノードＮ１の状態値の更新を示す。第１畳み込み層４１１は、対象ノードＮ１の状態値Ｖ１及び、対象ノードＮ１の１ホップ内のノード、つまり隣接ノードＮ２、Ｎ６、Ｎ９、Ｎ１０、Ｎ１２の状態値Ｖ２、Ｖ６、Ｖ９、Ｖ１０、Ｖ１２を取得する。対象ノードＮ１と、隣接ノードＮ２、Ｎ６、Ｎ９、Ｎ１０、Ｎ１２それぞれとの間のエッジのエッジ属性種類は、Ｒ２、Ｒ３、Ｒ１、Ｒ２、Ｒ１である。
【００６３】
図１３の重みデータ１２３が示すように、自ノードの状態値の重みはＷ０、エッジ属性種類Ｒ１、Ｒ２及びＲ３の重みは、それぞれ、Ｗ１、Ｗ２及びＷ３である。畳み込み演算の例は、エッジのエッジ属性種類毎に異なる重みをノードの状態値に乗算して足し合わせ、全てのエッジ属性種類の総和を計算する。つまり、ノードＮ１のための畳み込み演算は、以下の数式で表わされる。なお、バイアスは０とした。
Ｖ１´＝Ｗ０×Ｖ１＋Ｗ１＊（Ｖ９＋Ｖ１２）＋Ｗ２＊（Ｖ２＋Ｖ１０）＋Ｗ３＊Ｖ６
【００６４】
第１畳み込み層４１１は、畳み込み演算の結果の状態値Ｖ１´を非線形関数であるＲｅＬＵに入力し、その出力をノードＮ１の新たな状態値Ｖ１として保持する。なお、ＲｅＬＵと異なる非線形関数（例えばシグモイド関数）を使用してもよい。第１畳み込み層４１１は、全てのノードについて、上述のような処理を行う。
【００６５】
［第１プーリング層］
次に、第１プーリング層４１２の処理を説明する。従来のグリッド上のＣＮＮは、畳み込み演算（＋非線形活性化関数の適用）の後に、プーリング処理により画像サイズを縮小することが一般的である。本開示のグラフ上のＣＮＮ４００のプーリング層は、入力グラフデータ１２１のグラフ構造を変更することなく従来のプーリング処理に相当する処理、つまり、グラフ上のプーリング処理を実行する。
【００６６】
プーリング処理は、近隣のノードで値を近づける処理であり、これによって、表現の自由度を低減する。以下において、いくつかのグラフ上のプーリング処理の例を説明する。プーリング処理には、いくつかの手法が知られているが、一般に使用される手法は、平均値プーリング及び最大値プーリングである。そこで、以下においては、グラフ上の平均値プーリング及び最大値プーリングを説明する。
【００６７】
プーリング処理は、畳み込み演算と同様に、グラフ構造を維持しつつ、各ノードの状態値を更新する。プーリング処理は、対象ノード及び対象ノードの近隣のノードの状態値から、対象ノードの新たな状態値を決定する。図１５は、第１プーリング層４１２によるプーリング処理を模式的に示す。図１５において、２つのノードＮ１及びＮ２が着目されている。第１プーリング層４１２は、ノードＮ１の状態値を、隣接ノードＮ２、Ｎ６、Ｎ９、Ｎ１０、Ｎ１２の状態値と近づくように更新する。同様に、第１プーリング層４１２は、ノードＮ２の状態値を、隣接ノードＮ１、Ｎ３、Ｎ４、Ｎ５の状態値と近づくように更新する。
【００６８】
グラフ上の平均値プーリングの例は、対象ノード及び隣接ノードの状態値をもとに、対象ノードの新たな状態値が、対象ノード及び隣接ノードの新たな状態値の平均値になるように、対象ノードの新たな状態値と決定する。例えば、第１プーリング層４１２は、ノードＮ１及びその隣接ノードＮ２、Ｎ６、Ｎ９、Ｎ１０、Ｎ１２の現在の（更新前の）状態値を取得し、それらの平均値を計算する。第１プーリング層４１２は、当該平均値をノードＮ１の新たな状態値と決定する。第１プーリング層４１２は、エッジ属性種類に応じて、ノードの状態値に重みを与えた値の平均値を計算してもよい。
【００６９】
グラフ上の平均値プーリングの他の例は、以下の数式に従って対象ノードの新たな状態値を決定する。Ｎはグラフデータ１２１のノードの集合を示し、Ｅはエッジの集合を示す。ｐｉは、ノードｉのプーリング処理の出力であり、ｖｉは、ノードｉのプーリング処理の入力である。ｖｉは、直前の畳み込み演算の出力（状態値）である。βはハイパーパラメータ、Ｉは単位行列、Ｌはラプラシアン行列である。Ｄは、グラフデータ１２１の全エッジ本数である。右辺の第２項をＤで除算しているのは、エッジ１本あたりの制約の強さをそろえるためであるが、Ｄで割らない（Ｄ＝１とする）構成も考えられる。
【００７０】
【数１】
2020027399.tif 000003
【００７１】
ノードｉの第１プーリング層４１２の出力ｐｉは、第１項より入力ｖｉに近い値であり、かつ、第２項より隣接するノードの出力値ｐｊとも近い値となる。βが大きくなると第２項の寄与が大きくなるため、グラフ上のより広い範囲で値が近づくことになる。すなわち、βはプーリング処理のカーネルサイズに相当するパラメータである。上記式は、より汎用的に適切な平均値プーリングを行うことができる。
【００７２】
図１６は、図１５に示すグラフ構造を有するグラフデータ１２１において、適用可能なラプラシアン行例Ｌの例を示す。上記プーリング処理の式及び図１６に示すラプラシアン行例Ｌは、エッジ属性種類を無視して、全エッジを一律にプーリング処理する場合に使用される。プーリング処理は、エッジ属性種類を無視して実行してもよい。
【００７３】
これと異なり、エッジ属性種類に基づきプーリング処理を実行してもよい。これにより、より適切なプーリング処理を実行できる。第１プーリング層４１２は、エッジ属性種類毎にプーリング処理を実行する。具体的には、エッジ属性種類に基づくプーリング処理の例は、以下の数式に従う。
【００７４】
【数２】
2020027399.tif 000004
【００７５】
Ｅ１、Ｅ２、Ｅ３は、それぞれ、エッジ属性種類Ｒ１、Ｒ２及びＲ３のエッジの集合を示す。β１、β２、β３は、それぞれ、エッジ属性種類Ｒ１、Ｒ２及びＲ３のハイパーパラメータ（プーリングのカーネルサイズ）である。Ｌ１、Ｌ２、Ｌ３は、それぞれ、エッジ属性種類Ｒ１、Ｒ２及びＲ３のプーリングのラプラシアン行列である。
【００７６】
次に、グラフ上の最大値プーリングの例を説明する。グラフ上の最大値プーリングの例は、プーリング範囲内のノードの状態値の最大値を選択する。例えば、第１プーリング層４１２は、ノードＮ２及びその隣接ノードＮ１、Ｎ３、Ｎ４、Ｎ５の現在の（更新前の）状態値を取得し、それらの内の最大値を選択する。第１プーリング層４１２は、当該最大値をノードＮ２の新たな状態値と決定する。第１プーリング層４１２は、エッジ属性種類に応じた重みに基づき、更新値を与えるノードを選択してもよい。
【００７７】
グラフ上の最大値プーリングの他の例は、入力値（ノードの現在の状態値）にＳｍｏｏｔｈ  Ｍａｘｉｍｕｍを適用した後で、平均値プーリングを行う。Ｓｍｏｏｔｈ  Ｍａｘｉｍｕｍとしていくつかの関数が知られているが、例えば、ＬｏｇＭｅａｎＥｘｐを使用することができる。グラフ上の最大値プーリングの他の例は、以下の数式に従って対象ノードの新たな状態値を決定する。
【００７８】
【数３】
2020027399.tif 000005
【００７９】
ρは、Ｓｍｏｏｔｈ  Ｍａｘｉｍｕｍの強さを表すパラメータであり、∞の極限で、ＬｏｇＭｅａｎＥｘｐは最大値関数と一致する。他の変数は、平均値プーリングで説明した通りである。〔数３〕で表わされる最大値プーリングは、エッジ属性種類を無視して、全エッジを一律にプーリング処理する場合に使用される。プーリング処理は、エッジ属性種類を無視して実行してもよい。
【００８０】
平均値プーリングの説明と同様に、第１プーリング層４１２は、エッジ属性種類に基づきプーリング処理を実行してもよい。第１プーリング層４１２は、〔数１〕に代えて、〔数２〕を使用する。これにより、より適切なプーリング処理を実行できる。第１プーリング層４１２は、エッジ属性種類毎にプーリング処理を実行する。
【００８１】
［第２畳み込み層］
次に、第２畳み込み層４１３の処理を説明する。上述のように、第１プーリング層４１２は、グラフ構造のサイズを一定に保つ一方で、近隣のノード間で値を近づけるという正則化をとりいれることで、データの表現の自由度を低減する。第２畳み込み層４１３は、第１プーリング層４１２で近隣のノードの値が近づいてしまう分、広い範囲を参照する、つまり、畳み込みフィルタのカーネルサイズ（畳み込み演算で参照するノードの範囲）を広げる。
【００８２】
図１７は、第２畳み込み層４１３による、ノードＮ１のための畳み込み演算を模式的に示す。同様の畳み込み演算が全てのノードに対して実行される。第２畳み込み層４１３は、ノードＮ１から２ホップ範囲内のノードの現在の（更新前の）状態値を取得する。２ホップ範囲内のノードは、対象ノードから１ホップのノード及び２ホップのノードで構成される。なお、２ホップ範囲内のノード、つまり１ホップのノード及び２ホップのノードを使う代わりに、２ホップのノードのみを使う構成も考えられる。
【００８３】
図１７に示す例において、ノードＮ２、Ｎ６、Ｎ９、Ｎ１０、Ｎ１２は、ノードＮ１から１ホップのノードである。ノードＮ３〜Ｎ５、Ｎ７〜Ｎ１３は、ノードＮ１から２ホップのノードである。ノードＮ９、Ｎ１０、Ｎ１２は、ノードＮ１から１ホップのノードであると共に、２ホップのノードでもある。ノードＮ９、Ｎ１０、Ｎ１２は、ノードＮ１から１ホップのノードと定義し、ノードＮ１から２ホップのノードから除外してもよい。
【００８４】
第２畳み込み層４１３は、対象ノードＮ１の状態値、対象ノードＮ１から１ホップのノードの状態値及び対象ノードＮ１から２ホップのノードの状態値と、重みデータ１２３でエッジ属性種類毎に定義されている重みの積和を計算する。図１３を参照して説明したように、重みデータ１２３は、自ノードの重み、１つのエッジのエッジ属性種類の重み、及び２つのエッジの組のエッジ属性種類の重みを定義している。図示していないが、重みデータ１２３は、さらに、３種類以上のエッジの組のエッジ属性種類の重みを定義する。第１畳み込み層４１１と同様に、畳み込み演算により得られた対象ノードの状態値は、ＲｅＬＵに入力され、その出力が対象ノードの新しい状態値として保持される。なお、第２畳み込み層４１３の畳み込み演算は、バイアスを含むことができる。
【００８５】
［第２プーリング層］
第２プーリング層４１４は、図９に示すように、２ホップ範囲内でプーリング処理を実行する。例えば、第２プーリング層４１４は、第１プーリング層４１２が実行するプーリング処理を２回実行する。これにより、第２畳み込み層４１３の処理範囲に応じたプーリング処理を行うことができる。
【００８６】
［全域平均プーリング層］
次に、全域平均プーリング層４１５の処理を説明する。グラフ上のＣＮＮ４００は、ノード数やエッジ数が異なる様々なグラフ構造のグラフデータを取り扱う。従来のＣＮＮにおける全結合層は、入力層のニューロンの数が固定であることを前提としており、グラフ上のＣＮＮ４００にそのまま適用することはできない。本開示のグラフ上のＣＮＮ４００は、全域平均プーリングを使用する。なお、入力されるグラフデータのグラフ構造が一定である場合、全域平均プーリング層に代えて、全てのニューロンの値を一ヶ所に集めてアフィン演算することで最終出力する値を計算する全結合層を使用してもよい。
【００８７】
全域平均プーリング層４１５は、その入力のチャネル毎に全てのニューロンの値の平均値をとる。したがって、全域平均プーリング層４１５の出力は入力チャネル数の次元のベクトルとなる。例えば、全域平均プーリング層４１５の後段にアフィン変換層（全結合層）を配置し、最終的に必要とする次元の出力を得る。全域平均プーリング層４１５は全結合層に比べてパラメータ数が大幅に少ないにも関わらず、全結合層と同等以上の性能を示すことができる。
【００８８】
［誤差逆伝播による学習（訓練）］
以下において、グラフ上のＣＮＮ４００の誤差逆伝播によるパラメータの学習を説明する。学習処理は、データ処理部１２０により実行される。誤差逆伝播は、順伝播におけるグラフのノードを逆にたどる。上述のように、第２畳み込み層４１３は、畳み込みフィルタのカーネルサイズを広げる。しかし、第１プーリング層４１２で近隣のノードの値が近づいているので、単純にカーネルサイズを広げるのみでは、パラメータ設定の自由度が大きくなりすぎて過学習を引き起こす、又は、不良設定問題となりパラメータの学習が全くできない可能性が存在する。
【００８９】
そこで、プーリング後の第２畳み込み層４１３に対して、畳み込みフィルタのカーネルサイズを大きくすると同時に、直前の第１プーリング層４１２と同様に、畳み込みフィルタ上の近隣の重みを近づけるという正則化を行う。こうすることで、第１プーリング層４１２と直後の第２畳み込み層４１３の自由度が揃うことになり、畳み込み演算とプーリング処理のセットを何層も積み上げる、いわゆる深層学習のグラフ上のＣＮＮをより適切に構成することができる。
【００９０】
ここでは、グラフ上のＣＮＮ４００のパラメータの学習（誤差逆伝播）は、畳み込み層における複数の重みを、１段前のプーリング層と同じ正則化項を含む式により最適化する。より具体的には、ＣＮＮ４００全体の誤差関数Ｅ（ｗ）に畳み込み層の正則化項を含める。
【００９１】
【数４】
2020027399.tif 000006
【００９２】
上記式は、３以上の畳み込み層を含む構成の誤差関数Ｅ（ｗ）を示す。Ｅ０（ｗ）は、畳み込み層の正則化項を含まない通常の誤差関数である。右辺の第２項は、第２畳み込み層の正則化項であり、第３項は第３畳み込み層の正則化項である。ｗ２、ｉ、ｗ２、ｊは、あるノードから２ホップ離れたノードにおいて隣接している（一つのエッジで結合されている）ノードを示す。ｗ３、ｉ、ｗ３、ｊは、あるノードから３ホップ離れたノードにおいて隣接しているノードを示す。βはプーリング層で使用されるβと同一である。誤差関数Ｅ（ｗ）は、２層目の畳み込み層以降の畳み込み層の正則化項を含む。
【００９３】
上述のように、第２畳み込み層、第３畳み込み層と、後段にいくにしたがって畳み込みフィルタのカーネルサイズを大きくすることになる。上記式の右辺の第２項と第３項でβにかかる次数を増やして正則化項の効果を大きくしていくことで、各畳み込み層における実質的なパラメータ設定の自由度を一定に保つ。
【００９４】
図１３を参照して説明したように、重みデータ１２３は、自ノードの重み、１つのエッジのエッジ属性種類の重み、及び２つのエッジの組のエッジ属性種類の重み、３種類以上のエッジの組のエッジ属性種類の重み、を定義している。このとき、例えば、右辺の第２項、すなわち、第２畳み込み層の正則化項は、全ノードそれぞれから２ホップのノードにおいて隣接するノード間の重みの差の２乗の和を計算する。
【００９５】
ノードＮ１を例として、右辺の第２項を説明する。ノードＮ１から２ホップのノードは、ノードＮ３〜Ｎ５、Ｎ７〜Ｎ１３である。ｗ２、ｉは、これらノードの全ての重みがそれぞれ代入される。ｗ２、ｊは、ｗ２、ｉのノードに隣接する全てのノードの全ての重みが代入される。ノードＮ１の第２項の計算（β／２を省略）は以下のように表わされる。
【００９６】
【数５】
2020027399.tif 000007
【００９７】
ノードＮ３の例を説明する。ノードＮ１からノードＮ３を見て、２つのエッジの組のエッジ属性種類の重みは、Ｗ１２、Ｗ２３（ノードＮ２を介する）、Ｗ２３（ノードＮ１０を介する）である。従って、ノードＮ３のｗ２、ｉは、Ｗ１２、Ｗ２３、Ｗ２３である。ノードＮ１から２ホップのノードにおいて、ノードＮ３に隣接するノードは、ノードＮ４、Ｎ１０、Ｎ１２である。したがって、ｗ２、ｊは、ノードＮ１からこれらノードを見た重みそれぞれが代入される。
【００９８】
例えば、ノードＮ１からノードＮ４を見て、２つのエッジの組のエッジ属性種類の重みは、Ｗ２２である。ノードＮ１からノードＮ１０を見て、２つのエッジの組のエッジ属性種類の重みは、Ｗ１１、Ｗ１２である。ノードＮ１からノードＮ１２を見て、２つのエッジの組のエッジ属性種類の重みは、Ｗ２２である。
【００９９】
第２項は、ノードＮ１について、ノード３についての上記説明と同様の処理を、ノードＮ４、Ｎ５、Ｎ７〜Ｎ１３についても計算する。さらに、ノードＮ１以外の他のノードについても同様の計算を行う。第３項は、第２項と同様に、全ノードそれぞれから３ホップのノードについて計算を行う。
【０１００】
他の例において、正則化項は、グラフ構造に代えて、エッジ属性種類の関係に基づく計算を行ってもよい。例えば、第２項は、対象ノードに近いエッジのエッジ属性種類が同一の重みが近づくような計算を行ってもよい。例えば、重みグループ（Ｗ１１、Ｗ１２、Ｗ１３）、（Ｗ２１、Ｗ２２、Ｗ２３）、（Ｗ３１、Ｗ３２、Ｗ３３）それぞれにおいて、重みが近づくように、第２項が定義される。第３項以下についても、３ホップ以上のエッジ属性種類に応じて同様に定義される。
【０１０１】
第２畳み込み層の勾配値は、以下の数式のように、誤差関数Ｅ（ｗ）をｗで微分することにより得られる。
【０１０２】
【数６】
2020027399.tif 000008
【０１０３】
〔数６〕における右辺の第１項は、上層からの誤差信号（通常の誤差逆伝播）を示す。右辺の第２項は、正規化項の微分を示す。他の畳み込み層の勾配値も同様の式で表わすことができる。学習処理は、この勾配値にしたがって、畳み込み層の重みｗを更新する。例えば、ＳＧＤ（ｓｔｏｃｈａｓｔｉｃ  ｇｒａｄｉｅｎｔ  ｄｅｓｃｅｎｔ）、ＡＤＡＭなどの公知の手法を使用することができる。このように、誤差逆伝播による学習は、上層から逆伝播されてきた通常の誤差信号に、正則化項の微分の項（βＬｗ、ｎ）を加算した値を勾配として、重みｗを更新する。これにより、畳み込み層（フィルタ）に対して、直前のプーリングに応じた制約を加えることができる。
【０１０４】
次に、学習処理の全体について説明する。図１８は、計算機１０１が実行する学習処理の一つの例を説明するフローチャートである。プロセッサ１１０は、ニューラルネットワークの構築処理を実行する（Ｓ２０１）。ニューラルネットワークの構築処理は後述する。
【０１０５】
次に、プロセッサ１１０は、ストレージシステム１０２から学習データ１２２を取得し、メモリ１１１に格納する（Ｓ２０２）。学習データ１２２は複数のサンプルを含む。次に、プロセッサ１１０は、誤差逆伝播処理のループ処理を開始する（Ｓ２０３）。本ループ処理では、プロセッサ１１０は、ステップＳ２０３からステップＳ２０７の処理を繰り返し実行する。例えば、本ループ処理内で実行される誤差逆伝播処理によって算出される誤差が予め設定された閾値以下になった場合、又は、予め決められた回数だけ誤差逆伝播処理が実行された場合に、ループ処理が終了する。
【０１０６】
プロセッサ１１０は、サンプルのループ処理を開始する（ステップＳ７０５）。サンプルのループ処理では、ステップＳ２０２において取得された複数のサンプルに対し、サンプル毎にループ内部の処理を実行する。さらに、プロセッサ１１０は、１つのサンプルに対して誤差逆伝播処理を実行する（Ｓ２０５）。
【０１０７】
誤差逆伝播処理では、プロセッサ１１０は、あるサンプルを入力とし、その入力に対するグラフ上のＣＮＮ４００の出力結果と当該サンプルに対応する教師データとを比較し、２つのデータの誤差を削減するように、ＣＮＮ４００の上層から順に重みを更新する。
【０１０８】
サンプルのループ処理では、プロセッサ１１０が、複数のサンプルの各々に対して前述した処理を実行する。ステップＳ２０５の誤差逆伝播処理では、任意のサンプルデータに対する重みの更新が１回だけ行われる。一方、誤差逆伝播処理のループ処理では、誤差を最小にするためには、誤差逆伝播処理が複数回実行される。具体的には、プロセッサ１１０が、所定の条件を満たすまで、繰り返し、複数のサンプルの各々に対して誤差逆伝播処理を実行する。また、サンプルのループ処理は、複数のサンプルに対する重みの更新が行われる。
【０１０９】
次に、プロセッサ１１０は、全てのサンプルデータに対して誤差逆伝播処理が実行されたか否かを判定する（Ｓ２０６）。全てのサンプルデータに対して誤差逆伝播処理が実行されていないと判定された場合、プロセッサ１１０は、ステップＳ２０４に戻り、同様の処理を実行する。全てのサンプルデータに対して誤差逆伝播処理が実行されたと判定された場合、プロセッサ１１０は、所定の条件を満たしたか否かを判定する（Ｓ２０７）。
【０１１０】
所定の条件を満たしていないと判定された場合、プロセッサ１１０は、ステップＳ２０３に戻り、同様の処理を実行する。所定の条件を満たしたと判定された場合、プロセッサ１１０は、学習結果をメモリ１１１又はストレージシステム１０２に格納する（ステップＳ２０８）。学習結果は、構築されたニューラルネットワークの構造を示す情報及び学習により得られた重みの情報等が含まれる。重みは、エッジ属性種類それぞれに対して得られ、分析処理において、重みデータ１２３として使用される。
【０１１１】
［グラフ上のＣＮＮの構築］
グラフ上のＣＮＮ４００は、ノード数やエッジ数が異なる様々なグラフ構造のグラフデータを取り扱う。データ処理部１２０は、分析対象のグラフデータ１２１に応じたＣＮＮ４００を構築する。データ処理部１２０は、グラフデータ１２１のグラフ構造に従って、畳み込み層及びプーリング層それぞれを構築する。データ処理部１２０は、学習結果からエッジ属性種類それぞれに対する重みを取得して、重みデータ１２３を構成する。
【０１１２】
以上のように、本実施例によれば、グラフ上のＣＮＮにおいてプーリングを行うことで、表現可能自由度（パラメータの自由度）を上層に行くほど小さくすることができ、パラメータの学習時の過学習や不良設定問題の蓋然性を低下させることができる。また、ＣＮＮの層の数を増加させていわゆる深層学習を行うグラフ上のＣＮＮを構成することが可能となる。
【実施例２】
【０１１３】
以下において、分散ＣＮＮを説明する。分散ＣＮＮは、ネットワークを介して接続された複数のサブシステム（例えば計算機）が、ＣＮＮを実行する。サブシステムは、サブシステムをネットワーク上で隣接するサブシステムとのみ通信（情報交換）が可能である。なお、サブシステム間を接続するネットワーク構造は、固定である必要はなく時間的に変化してもよい。分散ＣＮＮにおいて、各サブシステムは、例えば、それぞれ独立にシステム状態関数の値を推定する。分散ＣＮＮにより、全てのサブシステムの推定値が真のシステム状態関数の値に一致する。
【０１１４】
他の例において、各サブシステムがそれぞれの環境入力と内部状態に応じてアクションを取ってもよい。各サブシステムは、全体システムの状態関数の値を最適化するようなアクションを見出すことができる。例えば、ネットワークを介して接続された工場（の計算機）が、それぞれ隣接する工場とのみ通信を行い、全工場の総利益を最小化するような工場の電力使用量を決定する。工場又はその計算機は、サブシステムである。
【０１１５】
このほか、分散ＣＮＮは、車間通信による、車のルート最適化に適用できる。車又はその計算機（例えばカーナビゲーションシステム）は、サブシステムである。各車は、現在位置と、目的地とから、独立にルートを決定する。各車が近隣の車と通信することで、多数の車が、全体として一つの分散ＣＮＮを構成する。各車は、自車のルートを入力として、分散ＣＮＮによって、平均移動時間を回帰（推定）する。
【０１１６】
各車は、独立に、誤差逆伝播によって、分散ＣＮＮの出力値（＝平均移動時間）を減らす方向に、ルート（＝入力）を更新する。同時に、各車は、独立に、道路交通情報から得た真の平均移動時間と、分散ＣＮＮの出力値との誤差を減らすように、誤差逆伝播で、パラメータ（重み）を更新する。各車は、目的地につけば、分散ＣＮＮから離脱する。
【０１１７】
［システム構成］
図１９は、分散ＣＮＮを実行する計算機システムの例を示す。計算機システムは、複数の計算機１０１Ａ〜１０１Ｍを含み、これらはネットワークを介して接続されている。通信可能な隣接計算機は、エッジで接続されている。計算機の構成は実施例１で説明した通りである。図１９のネットワーク構成は一例であって、他の例において、グリッド状に配置された計算機が隣接計算機とのみ通信可能であってもよい。
【０１１８】
分散ＣＮＮは、ＣＮＮを構成するニューロンを層（畳み込み層やプーリング層等）ごとにまとめて扱うのではなく、複数の層の同一位置のニューロン（以下ではカラムと呼ぶ）をまとめて、一つのサブシステムで計算する。結果として、多数のサブシステムが集まったシステム全体が、単一のＣＮＮとして動作する。
【０１１９】
図２０は、分散ＣＮＮの層及びカラムの例を示す。分散ＣＮＮは、畳み込み層やプーリング層等の層７０１〜７０４を含む。図２０は、一つのカラム７１１を例として示す。一つのカラムは、一つのサブシステムにより実行される。図１９の計算機システムにおいて、いずれか一つの計算機が、カラムのニューロンの計算を行う。
【０１２０】
以上の説明から理解されるように、実施例１において説明したグラフ上のＣＮＮは、分散ＣＮＮに適用することができる。図１９に示す計算機システムのネットワーク構造は、実施例１で説明したグラフデータ１２１のグラフ構造と一致している。計算機１０１Ａ〜１０１Ｍは、それぞれ、ＣＮＮを構成する各層（畳み込み層やプーリング層）において、グラフデータ１２１における対応するノードの演算処理を行う。
【０１２１】
図２１は、分散ＣＮＮの概念的な構成例を示す。図２１は、３つの計算機（サブシステム）１０１Ｂ、１０１Ｃ、及び１０１Ｄを例として示す。計算機１０１Ｄは、計算機１０１Ｂ及び計算機１０１Ｃと隣接しており、通信可能である。計算機１０１Ｂ、１０１Ｃ、及び１０１Ｄは、それぞれ、カラム７１１Ｂ、７１１Ｃ、及び７１１Ｄを実行する。カラムを構成する四角はニューロンを示す。
【０１２２】
各サブシステムは、自装置が担当するカラム上のニューロンの出力値をまとめたベクトルを内部状態として保持する。各サブシステムは、自分の内部状態ベクトルと、隣接サブシステムと通信によって得た隣接サブシステムの内部状態ベクトル（隣接位置のカラム上のニューロンの値）を入力として、各層の演算を行って、自分の内部状態ベクトルを更新する。
【０１２３】
分散ＣＮＮを実行する計算機システムにおいて、システム全体を統括する中央制御システムは存在せず、システム全体でのグローバルな同期機構も存在しない。各サブシステムは、隣接サブシステムとの通信とサブシステムの内部状態ベクトルの更新を、他のサブシステムは非同期に実行する。サブシステムは、他のサブシステムの内部状態ベクトルと自サブシステムの内部状態ベクトルに基づき、自サブシステムの内部状態ベクトルを更新する。
【０１２４】
隣接サブシステムとの通信とサブシステムの内部状態ベクトルの更新は、同頻度で行われるとは限らず、あるサブシステムでは隣接サブシステムとの通信頻度が高いのに対して、別のサブシステムでは内部状態ベクトルの更新の頻度高いこともある。あるサブシステムが複数の隣接サブシステムをもつとき、それぞれの隣接サブシステムとの通信が行われる頻度は同一でなくてよい。
【０１２５】
分散ＣＮＮを実行する計算機システムは、隣接サブシステム間の通信と内部状態ベクトルの更新処理をそれぞれ非同期に行う。したがって、サブシステムは、内部状態ベクトルの更新を実行する時に、畳み込み演算に必要な隣接コラム（隣接サブシステムが実行するカラム）上のニューロンの値を得ることはできない。
【０１２６】
そのため、サブシステムは、前回の隣接サブシステムとの通信のときに得られた隣接コラム上のニューロンの値（内部状態ベクトル）をメモリに記憶し、内部状態ベクトルの更新時には記憶しておいた値を用いて畳み込み演算を行う。この構成は、後述するように、誤差逆伝播を非同期で行うことを可能とする。
【０１２７】
［畳み込み］
以下において、分散ＣＮＮの各層の処理を説明する。計算機システムは、実施例１において説明した、グラフ上のＣＮＮ４００における各層の処理を実行することができる。まず、畳み込み層の処理を説明する。分散ＣＮＮを実行する各サブシステムは、自システムが担当するカラムの畳み込み演算する。各サブシステムは、実施例１で説明した畳み込み層の処理を、担当するカラムにおいて実行する。
【０１２８】
実施例１において説明したように、畳み込み演算は、対象ノード（ニューロン）の値及び対象ノードから所定ホップ数のノードの値を使用する。分散ＣＮＮでは、各サブシステムは、対象ノード（ニューロン）以外のノードの値を、他のサブシステムから収集する。
【０１２９】
上述のように、各サブシステムは、隣接サブシステムとの通信時に得た隣接カラム上のニューロンの値を記憶しておき、内部状態ベクトルの更新時には、記憶しておいた値を用いて畳み込み演算を行う。畳み込み演算の重み（カーネルの係数）は、全てのサブシステムで共通である。例えば、サブシステムは、互いに通信を行うことで、同一の重みデータを共有することができる。
【０１３０】
サブシステムは、畳み込み演算のカーネル範囲（ホップ数）内の全てのカラムの値を必要とする。実施例１で説明したように、プーリング層の後の畳み込み章におけるカーネルサイズは広げられる。第２畳み込み層４１３の処理のような、２ホップ以上のカーネルサイズの畳み込み演算のため、サブシステムは、隣接していないサブシステムのカラムの値（内部状態ベクトル）を、隣接サブシステムを介したマルチホップ中継により取得する。ｎホップの情報伝達は、ｎ回の通信が必要である。
【０１３１】
［プーリング］
次に、プーリング処理について説明する。分散ＣＮＮでは、各サブシステムが、ＣＮＮの下層から上層まで同一位置のニューロンをカラムとして扱うため、全ての層でニューロンの数は一定である。これは、実施例１において説明したグラフ上のＣＮＮと同様である。分散ＣＮＮにおいて、各サブシステムは、実施例１で説明したプーリング処理と同様に、そこで、ニューロン数（ノード数）を削減することなく、表現の自由度を低下させるプーリング処理を実行する。
【０１３２】
実施例１において説明した平均値プーリング及び最大値プーリングの双方が、分散ＣＮＮにおけるプーリング処理に適用できる。実施例１において説明したように、プーリング処理は、隣接ノードの状態値を必要とする。分散ＣＮＮにおいては、サブシステムは、自システムの内部状態ベクトルと隣接するサブシステムから取得した内部状態ベクトルから、自システムの新たな内部状態ベクトルを計算する。
【０１３３】
［全結合］
次に全結合について説明する。集中型のＣＮＮは、畳み込み演算及びプーリングを何度か繰り返したのち全結合層によって全てのニューロンの値を一ヶ所に集めてアフィン演算することで、最終出力する値を計算する。一方、分散ＣＮＮでは、各サブシステムは自律的に動作しており、全サブシステムの値を一ヶ所に集めることはできない。
【０１３４】
そこで、本開示の計算機システムは、分散で平均値を求める既知のアルゴリズムを利用する。分散で平均値を求めるアルゴリズムは、例えば、分散ＡＤＭＭ（Ａｌｔｅｒｎａｔｉｎｇ  Ｄｉｒｅｃｔｉｏｎ  Ｍｅｔｈｏｄ  ｏｆ  Ｍｕｌｔｉｐｌｉｅｒｓ）や平均合意アルゴリズムである。
【０１３５】
具体的には、各サブシステムは、まず、自分のカラム上のニューロンの出力値に、対応する全結合層の重み係数を乗算する。次に、全てのサブシステムの乗算結果の値の平均値を、後述のアルゴリズムを用いて分散で計算することで、全結合層の出力値を得ることができる。なお、この方法は、ニューロンの値に重み係数を乗算したものの総和ではなく平均値が出力する。重み係数は学習データ（教師データ）から学習されるため、この違いが問題になることはない。従来の集中型ＣＮＮで学習した重み係数を分散ＣＮＮで用いる場合には、各サブシステムに保持させる重み係数の値に、あらかじめ全サブシステムの数を乗算しておけばよい。
【０１３６】
以下において、分散で平均値を計算するアルゴリズムの二つの例を説明する。第１の例は分散ＡＤＭＭを用いた平均値計算アルゴリズムである。分散ＡＤＭＭを用いて以下の最適化問題を解くことで、Ｎ個の値ｘｉの平均値νを分散で計算することができる。
【０１３７】
【数７】
2020027399.tif 000009
【０１３８】
分散ＡＤＭＭを用いる方法は、常に、上記式を満たすように最適化を行うため、動作の最中に値ｘｉやネットワークトポロジが動的に変化した場合でも、変化に追随してその時点での平均値νを出力することができる。したがって、任意の指定した時点の値に対する平均値を計算することができる。
【０１３９】
第２の例は平均合意アルゴリズムである。平均合意アルゴリズムは、各サブシステムで保持する値ｘｉの総和を一定に保ちながら、サブシステム間で値ｘｉを分配し、最終的に、全てのサブシステムの値ｘｉのを同一の値に収束させる。値ｘｉの総和が常に一定であることから、収束値は各値ｘｉ初期値の平均値となる。いくつかの種類の平均アルゴリズムの中で、最も単純な平均合意アルゴリズムは、例えば、サブシステムｉとサブシステムｊの通信時に、値ｘｉと値ｘjを以下の式に従って更新する。
【０１４０】
【数８】
2020027399.tif 000010
【０１４１】
これにより、隣接間通信が行われるたびに、システム全体の値ｘｉの総和を一定に保ちながら、値ｘｉの分散が減少するため、いずれ、全ての値ｘｉが同一の値、すなわち、各値ｘｉの初期値の平均値に収束することになる。
【０１４２】
平均合意アルゴリズムは、動作の最中に値ｘｉの値やネットワークトポロジが動的に変化すると、システム全体での値ｘｉの総和が変化するため、各値ｘｉの初期値の平均値を正しく計算できない。一方で、平均合意アルゴリズムが持つ収束値が常にその時点でのシステム全体の値ｘｉの平均値になっているので、誤差逆伝播による畳み込みフィルタの重み係数の学習に有用である。
【０１４３】
［誤差逆伝播による学習（訓練）］
上述のように、分散ＣＮＮにおいて、サブシステムは、前回の隣接サブシステムとの通信のときに得られた隣接カラム上のニューロンの値を記憶し、記憶しておいた値を用いて畳み込み演算等の順伝播の計算を行うことで内部状態ベクトルを更新する。サブシステムは、誤差逆伝播計算時に順伝播時に用いた値をそのまま使うことで、他のサブシステムとの同期なく、誤差逆伝播によるパラメータ更新を行うことができる。
【０１４４】
誤差逆伝播の計算は、順伝播のグラフのノード（ニューロン）を逆にたどることで行う。図２２〜２５にグラフ上のノードの種類ごとの伝播則の例を示す。具体的には、図２２〜２５は、それぞれ、関数ｆの適用ノード７７１、可算ノード７７２、乗算ノード７７３及び変数複製ノード（分岐ノード）７７４を示す。順伝播の伝播則は実線で示され、逆伝播の伝播則は破線で示されている。順伝播の入力はｘ及びｙである。分散ＣＮＮでは、このうち変数複製ノード７７４の実現に工夫が必要である。
【０１４５】
変数複製ノード７７４は、順伝播の計算時に同一の変数を複数回使用することに相当する。分散ＣＮＮでは複数のサブシステムが分散して計算するため、図２５の変数複製ノード７７４の逆伝播則において、上層からの誤差信号ｄｘ１及びｄｘ２のうち、自サブシステム以外のサブシステムが担当するカラムからの信号を得ることはできない。
【０１４６】
そこで、変数複製ノード７７４の誤差逆伝搬では、各サブシステムが、それぞれ自サブシステムが担当するカラム内部で得られる誤差信号のみを使って、独立にパラメータの微係数を計算してパラメータ値を更新する。その後、各サブシステムは、上記平均合意アルゴリズムを用いて全てのサブシステムが保持するパラメータ値の平均を計算する。平均合意アルゴリズムでは、収束値が、常にその時点での全てのサブシステムが持つ値の平均値になっているため、継続的に学習、すなわち、パラメータ値の更新を続けることができる。
【０１４７】
なお、数学的に正しい微係数が上層からの全ての誤差信号の総和であるのに対して、この方法は、上層からの全ての誤差信号の平均値を微係数と考えてパラメータを更新する。そのため、パラメータ更新に用いる学習アルゴリズムのハイパーパラメータである学習率（Ｌｅａｒｎｉｎｇ  Ｒａｔｅ）に、あらかじめ全サブシステムの数を乗算しておく。
【０１４８】
逆誤差伝播における分岐ノードの後段（順伝播では前段）にさらに別のノードがある場合も、同様に、分岐ノードでは各サブシステムが自サブシステムが担当するコラムの情報のみを用いて誤差信号を逆伝播させて後段にあるパラメータ更新を独立に実行し、その後にパラメータ値の平均値を平均合意アルゴリズムにより計算する。
【０１４９】
［分散ＣＮＮの構成例］
以下において、本開示の分散ＣＮＮの構成例を説明する。図２６は、分散ＣＮＮの構成例９００及びその処理を示す。以下において、一つのサブシステムが実行する処理を説明する。まず、順伝播を説明する。順伝播において、第１畳み込み層９０１は、実施例１の第１畳み込み層４１１と同様に、畳み込み演算及びＲｅＬＵを実行する。第１畳み込み層９０１は、自内部状態ベクトルから対象ニューロンの値を取得し、また、予め保持している隣接サブシステムの内部状態ベクトルから、隣接ニューロンの値を取得する。第１畳み込み層９０１は、これらの値の畳み込み演算及びＲｅＬＵを実行し、自内部状態ベクトルを更新する。
【０１５０】
第１プーリング層９０２は、実施例１の第１畳み込み層４１１と同様に、プーリング処理を実行する。第１プーリング層９０２は、自内部状態ベクトルから第１畳み込み層９０１により更新された対象ニューロンの値を取得し、また、予め保持している隣接サブシステムの内部状態ベクトルから、隣接ニューロンの第１畳み込み層９０１の出力値を取得する。第１プーリング層９０２は、これらの値のプーリング、本例において最大値プーリングを実行し、自内部状態ベクトルを更新する。
【０１５１】
第２畳み込み層９０４は、実施例１の第２畳み込み層４１３と同様に、畳み込み演算及びＲｅＬＵを実行する。第２畳み込み層９０４は、自内部状態ベクトルから第１プーリング層９０２に更新された対象ニューロンの値を取得し、また、予め保持している２ホップ内のサブシステムの内部状態ベクトルから、隣接ニューロンの第１プーリング層の出力値を取得する。２ホップ離れたサブシステムからのデータは、隣接サブシステムを介して転送される。第２畳み込み層９０４は、これらの値の畳み込み演算及びＲｅＬＵを実行し、自内部状態ベクトルを更新する。
【０１５２】
第２プーリング層９０６は、実施例１の第２プーリング層４１４と同様に、プーリング処理を実行する。第２プーリング層９０６は、自内部状態ベクトルから第２畳み込み層９０４に更新された対象ニューロンの値を取得し、また、予め保持している隣接サブシステムの内部状態ベクトルから、隣接ニューロンの値を取得する。第２プーリング層９０６は、これらの値のプーリング、本例において最大値プーリングを実行し、自内部状態ベクトルを更新する。
【０１５３】
第２プーリング層９０６は、さらに、自内部状態ベクトルから直前のプーリング処理で更新されたニューロンの値を取得し、予め保持している隣接サブシステムの内部状態ベクトルから、隣接ニューロンの値を取得する。第２プーリング層９０６は、これらの値のプーリング、本例において最大値プーリングを実行し、自内部状態ベクトルを更新する。
【０１５４】
全結合層９０７は、分散ＡＤＭＭによって平均値を計算する。全結合層９０７は、自内部状態ベクトルの対象ニューロンの値と、予め保持している他のサブシステムの内部状態ベクトルの対象ニューロンの値から、分散ＡＤＭＭによって平均値を計算する。
【０１５５】
次に、誤差逆伝播を説明する。誤差逆伝播において、各サブシステムは、教師データを与えられている。各サブシステムは、内部に保持しているデータを使用して、他のサブシステムから独立に、重みデータ（バイアスを含む）を更新する。各サブシステムは、平均合意アルゴリズムによって、更新した重みデータの平均値を計算する。これにより、全てのサブシステムの重みデータが共通化される。
【０１５６】
なお、本発明は上記した実施例に限定されるものではなく、様々な変形例が含まれる。例えば、上記した実施例は本発明を分かりやすく説明するために詳細に説明したものであり、必ずしも説明したすべての構成を備えるものに限定されるものではない。また、ある実施例の構成の一部を他の実施例の構成に置き換えることが可能であり、また、ある実施例の構成に他の実施例の構成を加えることも可能である。また、各実施例の構成の一部について、他の構成の追加・削除・置換をすることが可能である。
【０１５７】
また、上記の各構成・機能・処理部等は、それらの一部又は全部を、例えば集積回路で設計する等によりハードウェアで実現してもよい。また、上記の各構成、機能等は、プロセッサがそれぞれの機能を実現するプログラムを解釈し、実行することによりソフトウェアで実現してもよい。各機能を実現するプログラム、テーブル、ファイル等の情報は、メモリや、ハードディスク、ＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）等の記録装置、または、ＩＣカード、ＳＤカード等の記録媒体に置くことができる。また、制御線や情報線は説明上必要と考えられるものを示しており、製品上必ずしもすべての制御線や情報線を示しているとは限らない。実際には殆どすべての構成が相互に接続されていると考えてもよい。
【符号の説明】
【０１５８】
１０１  計算機、１１０  プロセッサ、１１１  メモリ、１２３  重みデータ、４００  ＣＮＮ、４１１  第１畳み込み層、４１２  第１プーリング層、４１３  第２畳み込み層、４１４  第２プーリング層、９００  分散ＣＮＮ
【図１】
2020027399.tif 000011
【図２】
2020027399.tif 000012
【図３】
2020027399.tif 000013
【図４】
2020027399.tif 000014
【図５】
2020027399.tif 000015
【図６】
2020027399.tif 000016
【図７】
2020027399.tif 000017
【図８】
2020027399.tif 000018
【図９】
2020027399.tif 000019
【図１０】
2020027399.tif 000020
【図１１】
2020027399.tif 000021
【図１２】
2020027399.tif 000022
【図１３】
2020027399.tif 000023
【図１４】
2020027399.tif 000024
【図１５】
2020027399.tif 000025
【図１６】
2020027399.tif 000026
【図１７】
2020027399.tif 000027
【図１８】
2020027399.tif 000028
【図１９】
2020027399.tif 000029
【図２０】
2020027399.tif 000030
【図２１】
2020027399.tif 000031
【図２２】
2020027399.tif 000032
【図２３】
2020027399.tif 000033
【図２４】
2020027399.tif 000034
【図２５】
2020027399.tif 000035
【図２６】
2020027399.tif 000036