(57)【要約】【課題】効率的にグラフを用いた演算を行う。【解決手段】訓練装置は、誤差逆伝播の経路に基づいてグラフを生成する、グラフ生成部と、前記グラフにおいて、前記誤差逆伝播の経路に基づいて識別子を各ノードに付与する、ＩＤ付与部と、前記グラフ及び前記識別子に基づいて誤差逆伝播を実行する、逆伝播部と、を備える。【選択図】図１
2020091855.tif 000002
【特許請求の範囲】
【請求項１】
１又は複数のメモリと、
１又は複数のプロセッサと、
を備え、
前記１又は複数のプロセッサは、
誤差逆伝播の経路に基づいてグラフを生成し、
前記グラフにおいて、前記誤差逆伝播の経路に基づいて識別子を各ノードに付与し、
前記グラフ及び前記識別子に基づいて誤差逆伝播を実行する、
訓練装置。
【請求項２】
前記１又は複数のプロセッサは、
入力された変数、順伝播における演算及び出力された変数に対応する誤差逆伝播の経路となるノードをそれぞれ生成する、
請求項１に記載の訓練装置。
【請求項３】
前記１又は複数のプロセッサは、
複数の異なる前記誤差逆伝播の経路が存在する場合に、それぞれの経路を示す複数の前記グラフを生成する、
請求項１又は請求項２に記載の訓練装置。
【請求項４】
前記１又は複数のプロセッサは、
前記誤差逆伝播の経路が同一の前記グラフごとに、一意的に前記識別子を各ノードへと付与する、
請求項１乃至請求項３のいずれかに記載の訓練装置。
【請求項５】
前記１又は複数のプロセッサは、
前記誤差逆伝播の経路が異なる前記グラフに属するノードに対して、異なる前記識別子を付与する、
請求項４に記載の訓練装置。
【請求項６】
前記１又は複数のプロセッサは、
同一の前記識別子が付与されたノードについて誤差逆伝播を実行し、当該識別子について誤差逆伝播が完了した場合に、当該識別子が付与されている前記グラフのデータを破棄する、
請求項１乃至請求項５のいずれかに記載の訓練装置。
【請求項７】
前記１又は複数のプロセッサは、
異なる前記識別子を有するノード間において参照関係がある場合には、前記参照関係を有するノードを生成し、
前記参照関係に基づいて、誤差逆伝播を行う前記グラフの順番を決定する、
請求項１乃至請求項６のいずれかに記載の訓練装置。
【請求項８】
１又は複数のプロセッサが、誤差逆伝播の経路に基づいてグラフを生成し、
前記１又は複数のプロセッサが、前記グラフにおいて、前記誤差逆伝播の経路に基づいて識別子を各ノードに付与し、
前記１又は複数のプロセッサが、前記グラフ及び前記識別子に基づいて誤差逆伝播を実行する、
モデルの生成方法。
【請求項９】
前記１又は複数のプロセッサが、生成されたモデルを１又は複数のメモリに格納する、
請求項８に記載のモデルの生成方法。
【請求項１０】
１又は複数のプロセッサに実行させると、
誤差逆伝播の経路に基づいてグラフを生成し、
前記グラフにおいて、誤差逆伝播の経路に基づいて識別子を各ノードに付与し、
前記グラフ及び前記識別子に基づいて誤差逆伝播を実行する、
プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、訓練装置、モデルの生成方法及びプログラムに関する。
【背景技術】
【０００２】
機械学習において、ニューラルネットワークモデルは、入力層から出力層までのデータの遷移をグラフとして表し、グラフの接続に基づいて順伝播及び逆伝播が行われて訓練される。ネットワークの構築として、例えば、訓練の実行中にネットワークを定義するDefine-by-Run形式がある。Define-by-Run形式においては、非特許文献１に示すように、訓練中にグラフの形状が変化していくため、順伝播時にデータの処理を示すグラフを形成し、そのグラフを用いて逆伝播を行う。この結果、グラフを記憶する相当の領域が必要となり、メモリ領域を圧迫するため、効率的にネットワークの訓練を行うことが困難な場合がある。
【先行技術文献】
【非特許文献】
【０００３】
【非特許文献１】S. Tokui, et.al., "Chainer: a Next-Generation Open Source Framework for Deep Learning," Proceedings of Workshop on Machine Learning Systems (LearningSys) in The Twenty-ninth Annual Conference on Neural Information Processing Systems (NIPS), 2015
【発明の概要】
【発明が解決しようとする課題】
【０００４】
本実施形態においては、効率的にグラフを用いた演算を行う、グラフ演算装置、グラフ演算方法及びプログラムを提供する。
【課題を解決するための手段】
【０００５】
一実施形態によれば、訓練装置は、誤差逆伝播の経路に基づいてグラフを生成する、グラフ生成部と、前記グラフにおいて、前記誤差逆伝播の経路に基づいて識別子を各ノードに付与する、ＩＤ付与部と、前記グラフ及び前記識別子に基づいて誤差逆伝播を実行する、逆伝播部と、を備える。
【図面の簡単な説明】
【０００６】
【図１】一実施形態に係る訓練装置の機能を示すブロック図。
【図２】一実施形態に係るグラフ生成の一例を示す図。
【図３】一実施形態に係る訓練装置の処理を示すフローチャート。
【図４】一実施形態に係るグラフ生成の一例を示す図。
【図５】一実施形態に係るグラフ生成の一例を示す図。
【図６】一実施形態に係るグラフ生成の一例を示す図。
【図７】一実施形態に係るグラフ生成の一例を示す図。
【図８】一実施形態に係るグラフ生成の一例を示す図。
【図９】一実施形態に係る訓練装置のハードウェア実装例を示す図。
【発明を実施するための形態】
【０００７】
以下、図面を参照して実施形態について説明する。
【０００８】
図１は、一実施形態に係る訓練装置の機能を示すブロック図である。訓練装置１は、入力部１０と、記憶部１２と、グラフ生成部１４と、順伝播部１６と、ＩＤ付与部１８と、逆伝播部２０と、出力部２２と、を備え、入力データに対して所定の処理を行った出力データを出力する学習済みモデルを訓練する。
【０００９】
入力部１０は、データの入力を受け付ける。入力データは、例えば、訓練データであり、訓練するネットワークに入力されるデータと、損失の計算に用いるための教師データ（label）データ等、必要となるデータである。
【００１０】
記憶部１２は、訓練装置１において訓練に必要となるデータあるいは訓練の結果を記憶する。この記憶部１２は、例えば、訓練の対象となるネットワークについて、構成、訓練において更新されるパラメータ等を記憶する。また、入力部１０から入力されたデータを一時的に記憶してもよい。さらに、訓練が終了した後の最終的なパラメータを記憶してもよい。訓練装置１に記憶部１２が備えられる構成としているが、記憶部１２の一部又は全部は、訓練装置１の外部に備えられ、通信回線等を介して訓練装置１がデータの送受信できるようにしてもよい。
【００１１】
グラフ生成部１４は、ネットワークにデータが入力されるタイミングにおいて、演算グラフを生成する。順伝播部１６は、記憶部１２に記憶されているネットワーク形成の定義の記述に基づいて、入力データの演算を行う。別の例として、ネットワークを形成する定義を記述するネットワーク定義記述部が備えられ、当該ネットワーク定義記述部に記述されているネットワークの定義に基づいて、順伝播を実行しながらグラフを生成してもよい。このように、所定のネットワーク定義に基づいてあらかじめグラフが生成されて順伝播、逆伝播等の処理が行われるのではなく、上記のように、ネットワークの定義の記述に基づいて、順伝播のタイミングでグラフが生成され、生成されたグラフに基づいて以降の処理が行われる。グラフは、例えば、入出力変数の形態等により異なるものが形成されてもよい。
【００１２】
より具体的には、グラフ生成部１４と、順伝播部１６は、別個の動作を行うのではなく、訓練の対象となるネットワークの構造に基づいて、順伝播部１６が順伝播の処理を実行するとともにグラフ生成部１４がグラフを生成する。すなわち、訓練装置１は、あるデータ又はデータ群に対して、それぞれのデータに基づいてネットワークの順伝播を実行するとともに、逆伝播のためのグラフを生成する。このように、あらかじめ決められたネットワークの演算グラフを生成してから順伝播以降の処理を行うのではなく、順伝播処理とともに入力されたデータがどのような演算を行うかによりグラフを都度生成し、それ以降の処理（例えば、逆伝播）を実行する。
【００１３】
ＩＤ付与部１８は、グラフ生成部１４が生成したグラフに対して、逆伝播する経路を示す識別子（以下、逆伝播ＩＤと記載する）を付与する。逆伝播においてデータに含まれる変数ごとに異なる演算経路を辿る場合、この演算経路ごとにユニークな逆伝播ＩＤを当該演算経路に含まれるノード、例えば、変数ノード及び演算ノードに付与する。例えば、バッチが同種の変数を有する場合には、バッチごとにグラフが生成され、この変数ごとに逆伝播ＩＤが付与されてもよい。逆伝播ＩＤは、グラフごとに一意的に与えられる。
【００１４】
逆伝播部２０は、順伝播部１６がネットワークを順伝播させて出力した結果と、教師データ（ラベル）とを比較して損失を算出し、当該損失に基づいて誤差逆伝播処理を実行する。この逆伝播処理は、ＩＤ付与部１８が付与した逆伝播ＩＤごとに実行される。逆伝播部２０は、逆伝播が終了したグラフを削除してもよい。削除とは、グラフ自体を破棄してもよいし、グラフが保存されているメモリ領域等を上書きできる状態にする（例えば、メモリを解放する）ことによりグラフデータを実質的に破棄してもよい。また、このグラフの削除は、逆伝播部２０が実行するのではなく、別途グラフ削除部（図示しない）を備え、当該グラフ削除部が逆伝播部２０の動作に基づいてグラフを削除する構成としてもよい。
【００１５】
バッチ演算等を行う場合には、同種の変数が存在する場合がある。このような場合、これらの同種の変数において、演算経路が異ならない、又は、２回以上微分を行わない等の条件がある場合には、変数群として変数ノード、演算ノードを生成して、同一の逆伝播ＩＤを用いて演算を行ってもよい。
【００１６】
逆伝播部２０の動作が終了した後、必要であれば、さらにネットワークを訓練するために、グラフ生成部１４、順伝播部１６、ＩＤ付与部１８及び逆伝播部２０により上記の処理が訓練の終了条件を満たすまで繰り返される。
【００１７】
出力部２２は、訓練が終了した後、学習済みのモデルを出力する。学習済みのモデルの出力は、モデル全体を出力するものであってもよいし、モデルに関する形状、パラメータ等のデータを出力し、外部で同じ学習済みモデルを構築することが可能なデータを出力するものであってもよい。さらに、出力部２２を介して外部に出力するのではなく、記憶部１２に学習済みモデルを格納し、記憶させてもよく、この場合、訓練が終了した訓練装置１を、学習済みモデルを用いた推定装置等として機能させてもよい。
【００１８】
図２は、本実施形態に係るグラフ生成の一例を示す図である。例えば、変数Ａ、Ｂが入力され、変数Ｃが出力される状態（Ｃ＝Ｆ（Ａ，Ｂ））について示している。各グラフにおいてノード間を接続するエッジ（破線）は、出力から入力へと向かっているが、逆伝播をわかりやすく図示したものであり、順伝播時には、逆方向へとノード間を遷移する。なお、有向グラフとして示したが、逆伝播の順序が判断できるのであれば、必ずしも有向グラフではなくともよい。例えば、出力から入力へ向けて演算が行われるようにノードを辿るための指示をしてもよい。具体的には、出力から入力へ向けた演算ノードの列を記憶し、それを順番に実行していってもよい。
【００１９】
変数Ａ、Ｂが入力されると、関数Ｆの処理が行われ、変数Ｃが出力される。これらの処理は、順伝播部１６により実行される。この順伝播の処理と並行して、グラフ生成部１４がグラフを生成する。例えば、グラフ生成部１４は、関数Ｆの処理を順伝播部１６が定義するタイミングで、逆伝播の経路を判断し、経路が複数ある場合には、それぞれの経路に対応するグラフを生成する。この結果、例えば、変数Ａ、Ｂのそれぞれに対して逆伝播の経路が存在する場合には、変数ノードＡ、関数演算ノードＦ１及び変数ノードＣ１を含むグラフと、変数ノードＢ、関数演算ノードＦ２及び変数ノードＣ２を含むグラフと、が生成される。
【００２０】
逆伝播される経路ごとに、ＩＤ付与部１８は、グラフについて逆伝播ＩＤを付与する。図２において、変数ノードＡ、演算ノードＦ１、変数ノードＣ１が属するグラフにおいては、各ノードに対して逆伝播ＩＤ１が付与される。一方で、変数ノードＢ、演算ノードＦ２、変数ノードＣ２が属するグラフにおいては、各ノードに対して逆伝播ＩＤ２が付与される。なお、逆伝播ＩＤの付与がこのようにグラフ生成の後、又は、グラフ生成と並列に行われるのではなく、逆伝播ＩＤがあり、これに基づいたグラフ生成を行うようにしてもよい。この場合にも、グラフ生成とともに、グラフを構成する各ノードにＩＤ付与部１８が逆伝播ＩＤを付与してもよい。
【００２１】
なお、各グラフについて演算ノードは、１つずつしか示されていないが、これは説明の簡単のためであり、実際には複数の演算ノードが連なるグラフを形成していてもよい。以下の説明においても同様に、演算ノードはグラフに対して１つしか示されないが、２以上の演算ノードが存在していてもよく、順伝播において逆伝播が必要となる演算ごとに演算ノードが生成され、この各演算ノードにしたがい逆伝播の演算を行う。また、演算ノードに接続する入出力変数ノードについても、必ずしも最初の演算ノード（例えば、入力層）又は最後の演算ノード（例えば、出力層）に対して入出力される訳ではなく、複数ある演算ノードのうち、途中のノードに対する入出力がされてもよい。この関係は、訓練する対象となるネットワークに対する変数の入出力、特に逆伝播する経路と同等の関係となる。
【００２２】
複数の演算ノードが存在する場合、演算ノード同士の接続についても同様であり、逆伝播の経路により、ある関数から他の複数の関数へと分岐するような場合には、異なる逆伝播ＩＤが付与される複数のグラフが生成されてもよい。このように、変数、関数に基づいて逆伝播の経路ごとにグラフ、当該グラフに属するノードが生成され、各グラフにおいて一意的にノードに逆伝播ＩＤが付与される。
【００２３】
逆伝播部２０は、付与された逆伝播ＩＤごとに誤差逆伝播の処理を行い、ネットワークを更新する。例えば、逆伝播ＩＤ１のグラフを辿ることにより、変数ノードＣ１から、関数Ｆ１におけるパラメータについて逆伝播を実行し、パラメータを更新する。付与されたＩＤについて全ての演算が終了する、例えば、変数ノードＡまで逆伝播を行うと、逆伝播ＩＤ１が付与されたノード、エッジの情報が破棄されることにより、当該グラフが破棄される。あるいは、グラフの情報ごと破棄されてもよい。さらに別の例として、逆伝播部２０は、必要がなくなったタイミングにおいて、ノードごとに情報を破棄してもよい。ノードごとに破棄することで、より早いタイミングで使用しているリソースを解放することが可能となる。
【００２４】
この段階においては、逆伝播ＩＤ２が付与されているグラフは、まだ存在している。そこで、逆伝播部２０は、この逆伝播ＩＤ２が付与されているノードについて誤差逆伝播を上記と同様に実行することで、ネットワークを更新する。
【００２５】
一般的な機械学習と同様に、この後に、別の変数を入力してさらにネットワークを更新してもよい。この場合、さらに、入力された変数に対して同様にグラフを生成して順伝播し、逆伝播ＩＤを付与して、逆伝播を行いつつ、自動的に不要となるグラフを破棄する。なお、訓練については、一般的な機械学習の手法を用いることができる。もちろん、ミニバッチ等を用いて並列的に処理することも可能である。
【００２６】
図３は、本実施形態に係る処理を示すフローチャートである。
【００２７】
まず、入力部１０を介してデータの入力を受け付ける（Ｓ１００）。データの入力は、個々のデータごとに入力を受け付けてもよいし、所定の数又は所定のサイズのデータを一度に受け付けてもよい。また、入力の受け付けは、外部から明示的に入力されるものには限られず、外部のストレージ等に記憶されているデータを入力部１０が取得して入力を受け付けてもよいし、記憶部１２に記憶されているデータから取得するものであってもよい。
【００２８】
次に、順伝播部１６は、入力されたデータを順伝播させる（Ｓ１０２）。順伝播を行うことにより、当該入力されたデータを学習対象となるモデルに入力した場合における出力を取得する。
【００２９】
次に、グラフ生成部１４は、グラフを生成する（Ｓ１０４）。グラフの生成は、ネットワークの構成に基づいて変数（すなわち、受け付けた入力データ）ごとに実行される、又は、関数ごとに逆伝播される経路に基づいて実行される。すなわち、逆伝播する経路が複数である場合には、複数のグラフが生成される。この経路は、ネットワークの定義の記述から取得することが可能である。
【００３０】
次に、ＩＤ付与部１８は、入力変数の保持する変数ノードに基づいて、逆伝播ＩＤを生成されたグラフの各ノードに対して付与する（Ｓ１０６）。入力変数により訓練対象のモデルにおいて逆伝播において辿る経路が異なる場合等に、入力変数、パラメータ、出力変数等により逆伝播において必要となる経路ごとに異なる逆伝播ＩＤが付与される。なお、フローチャート上では、Ｓ１０４とＳ１０６の処理は、別々に示されるが、実際には、ＩＤ付与部１８は、変数ノードが有する逆伝播ＩＤに基づいて、Ｓ１０４のグラフの生成とともに、逆伝播ＩＤを付与する。すなわち、Ｓ１０２からＳ１０６の処理は、個々に実行されるのではなく、協働して実行されてもよい。
【００３１】
なお、別の例として、Ｓ１０２からＳ１０６の処理については、逐次的に実行されるものであってもよい。例えば、Ｓ１０２、Ｓ１０４、Ｓ１０６の順番で、順伝播して、グラフを生成して、ＩＤ付与をしてもよいし、Ｓ１０２の後に、Ｓ１０４とＳ１０６の処理を併せて実行、すなわち、順伝播が終了した後にグラフを作成とＩＤ付与とを併せて実行してもよい。あるいは、Ｓ１０４の後にＳ１０２が行われる、すなわち、逆伝播のためのグラフを生成した後に、順伝播を行ってもよい。このように、Ｓ１０２からＳ１０６の処理は、順伝播された結果を取得でき、かつ、逆伝播の経路ごとにグラフを生成し逆伝播ＩＤを付与することができる実装であればいずれにも適用することができる。
【００３２】
次に、逆伝播部２０は、付与された逆伝播ＩＤに基づいて誤差逆伝播の処理を実行する（Ｓ１０８）。また、演算が終了し、以後の後の演算で必要となる逆伝播ＩＤが付与されていないグラフデータ、例えば、ノードについては、当該逆伝播ＩＤに基づいた誤差逆伝播が終了した後に破棄する（Ｓ１１０）。別の例として、誤差逆伝播を行いつつ再利用されないノードを破棄してもよい。グラフ間に参照関係がある場合には、逆伝播する順番を逆伝播部２０が決定し、当該順番通りに逆伝播処理を行なってもよい。
【００３３】
次に、逆伝播部２０は、逆伝播されていないグラフ、すなわち、破棄されていないグラフがあるかにより処理を分岐させる（Ｓ１１２）。破棄されていないグラフが存在する場合（Ｓ１１２：ＮＯ）、逆伝播はまだ終了していないので、当該破棄されていないグラフについて誤差逆伝播を実行する（Ｓ１０８〜Ｓ１１０）。
【００３４】
例えば、逆伝播ＩＤ１のグラフについて逆伝播とグラフの破棄が終了した後、続いて、逆伝播ＩＤ２のグラフについて処理が実行される。このフローチャートにおける分岐は、あくまで便宜的に記載したものであり、動的に形成されるものではなくてもよく、生成されたグラフの全てについて逆伝播とグラフの破棄を行うということを意味する。  
【００３５】
さらに、破線で示したように、あるグラフを用いて逆伝播が終了した後、別の順伝播処理が実行されてもよい。この場合、あるグラフの処理の後に、別の逆伝播ＩＤに関する順伝播処理が実行され、グラフが生成され、逆伝播が行われてもよい（Ｓ１０２〜Ｓ１１０）。このように、逆伝播の処理の後に他の順伝播処理、グラフ生成処理が行われてもよい。
【００３６】
さらにまた、例えば、逆伝播ＩＤ１、２の順伝播、グラフ生成が実行され、逆伝播ＩＤ１の逆伝播、グラフ破棄が実行され、逆伝播ＩＤ３の順伝播、グラフ生成をし、その後に逆伝播ＩＤ２の逆伝播、グラフ破棄が実行されるといった複雑な処理であってもよい。この処理の順番は、上述したように、ネットワーク定義の記述に基づいて、例えば、入力変数に基づいた順伝播処理が定義され、順伝播が実行されはじめた場合に、一意的に決定されて実行されてもよい。別の例としては、後の順伝播処理の開始のタイミングで、さらなる順伝播処理の分岐が存在してもよい。このように、一般的なDefine-by-Runの形式により実行されるいかなる処理に対しても、Ｓ１０２〜Ｓ１１２の処理が適切に実行されうる。
【００３７】
すなわち、フローチャートにおけるＳ１０２からＳ１１０の処理の記載は、便宜的に順番に並べられているだけであり、それぞれの逆伝播の経路に対して順伝播及びグラフ生成と、逆伝播と、グラフ破棄と、の処理が順番に実行されればよく、同一の逆伝播ＩＤを有する処理が連続して行われることは、要求されない。上述したように、逆伝播ＩＤ１の処理は、連続して順番に行われる一方で、逆伝播ＩＤ２の処理及び逆伝播ＩＤ３の処理がそれぞれのＩＤに対して連続して順番に行われなくてもよい。さらに複雑な場合にも、同様に処理の順番を適切に入れ替えることが可能である。
【００３８】
一方で、全てのグラフが破棄されている場合（Ｓ１１２：ＹＥＳ）、訓練が終了しているか否かを判断する（Ｓ１１４）。訓練の終了は、一般的な学習と同様に、所定のエポック数の訓練がおこなわれた、損失の値が所定の値よりも小さくなった、アキュラシーが所定の値よりも大きくなった、等の終了条件により判断される。
【００３９】
訓練が終了していない場合（Ｓ１１４：ＮＯ）、新たな入力変数に対して、新たなグラフを作成し（Ｓ１０２）、訓練の処理を繰り返す（Ｓ１０４〜Ｓ１１２）。
【００４０】
一方で、訓練が終了している場合（Ｓ１１４：ＹＥＳ）、結果を出力、格納等し（Ｓ１１６）、訓練処理を終了する。
【００４１】
以上のように、本実施形態によれば、生成したグラフの情報を全ての変数、関数等についての逆伝播を行うまで保持する必要がなくなるため、Define-by-Runの処理を行いながらもメモリの使用について効率化を図ることが可能となる。より具体的には、複数のグラフが使用できることにより、誤差逆伝播の計算のために、グラフにおいて保持する部分と、保持しない部分とをより明確に細かく制御することが可能となり、メモリの効率化を図ることができる。
【００４２】
例えば、誤差逆伝播において、演算ノードに対して２回以上の微分を行う等、グラフが複数の経路を有する場合には、さらに効率よく訓練を行うことが可能となる。これは、損失関数において実行される誤差逆伝播では、入力に関する勾配を計算するが、損失関数に対する誤差逆伝播においては入力に関する勾配を計算しない場合にも用いることができる。このようにグラフを生成、破棄することにより、例えば、変数の一部において誤差逆伝播が完了したタイミングにおいて、必要のなくなるグラフを破棄し、当該グラフのために使用されていたメモリ領域を解放することが可能となる。
【００４３】
図２において、グラフ生成の一例について説明したが、さらに異なる例について以下説明する。いずれの場合においても、全体的な処理の流れは、上述したフローチャートと同様である。
【００４４】
図４は、入力ノードにおいて、変数Ａが２つのノードを有する場合のグラフ生成を示す図である。例えば、Ｂ＝Ｆ（Ａ）という計算において、変数Ａが２つのノードＡ１、Ａ２を有している場合、図４のように逆伝播においてそれぞれのノードＡ１、Ａ２に対応する演算ノードが生成される。以下の図において、実線は、グラフのエッジ、一点鎖線は、変数等からのノード生成を示す。
【００４５】
変数Ａに対して、ノードＡ１、Ｆ１、Ｂ１を有し、各ノードに逆伝播ＩＤ１が付与されたグラフと、ノードＡ２、Ｆ２、Ｂ２を有し、各ノードに逆伝播ＩＤ２が付与されたグラフとがそれぞれ生成される。より具体的には、順伝播においては、演算Ｆにより、変数Ｂが出力される。そして、逆伝播の経路が２つ存在する場合、図４に示すように逆伝播の経路に基づいて、ノードＡ１、Ｆ１、Ｂ１を含む逆伝播ＩＤ１のグラフと、ノードＡ２、Ｆ２、Ｂ２を含む逆伝播ＩＤ２のグラフとが生成される。
【００４６】
図５は、２変数を入力すると１変数を出力する場合のグラフ生成を示す図である。例えば、Ｃ＝Ｆ（Ａ，Ｂ）のような引数を２つ必要とする演算の場合である。
【００４７】
この場合、ＡとＢが異なる逆伝播ＩＤを持つ変数ノードを有すると、それぞれの逆伝播ＩＤに対応する演算ノードが生成され、出力変数Ｃに対して、その全てに対応する変数ノードＣ１、Ｃ２が生成される。例えば、演算ノードＦ１においては、変数Ａに対する出力である変数ノードＣ１から誤差逆伝播の処理が実行され、一方、演算ノードＦ２においては、変数Ｂに対する出力である変数ノードＣ２から誤差逆伝播の処理が実行される。
【００４８】
このように、別々の変数からの出力、及び、同一又は異なる演算に対して、別々の逆伝播ＩＤが付与されるグラフが、それぞれ生成される。
【００４９】
上述の全ての例においては、変数が異なるノードを有する一方で、演算ノードは、各変数に対して１つの経路からしか接続されない場合を説明したが、これには限られず、例えば、同一の演算ノードに異なる入力変数ノードへの接続が存在する場合もある。
【００５０】
図６は、このように、１つの演算ノードに対して複数の入力ノード及び出力ノードが接続する場合におけるグラフ生成を示す。一例として、Ｂ＝Ｆ（Ａ）となる演算において、入力ノードと出力ノードを参照する場合について説明する。以下の図において、破線は、参照関係を示す。例えば、グラフ生成部１４が逆伝播経路に基づいて、ノード間にこの参照関係を持つように設定する。
【００５１】
変数ノードＡ１、Ｂ１及び演算ノードＦ１には、逆伝播ＩＤ１が付与され、変数ノードＡ２、Ｂ２及び演算ノードＦ２には、逆伝播ＩＤ２が付与される。ただし、演算ノードＦ２の演算においては、変数ノードＡ１、Ｂ１の変数が使用されるため、演算ノードＦ２には、変数ノードＡ１、Ｂ１への参照関係（図中の破線矢印）をさらに持たせる。
【００５２】
逆伝播部２０は、このような場合、参照しているノードを有する逆伝播ＩＤのグラフから演算を実行する。図６の例を用いて説明する。逆伝播ＩＤ１、２を有する２つのグラフが存在し、逆伝播ＩＤ２が付与されている演算ノードＦ２には、逆伝播ＩＤ１が付与されている変数ノードＡ１、Ｂ１への参照が存在する。
【００５３】
この場合、逆伝播部２０は、逆伝播ＩＤ２に係るグラフから演算を開始する。まず、変数ノードＢ２において、損失を算出し、演算ノードＦ２において、逆伝播された損失に基づいて勾配を算出する。例えば、この勾配の算出に、変数Ａ１、Ｂ１を用いる。前述と同様に、演算ノードは１つしか示されていないが複数であってもよい。そして、ある１つの演算ノードに対する勾配の算出に変数Ａ１、Ｂ１が用いられてもよいし、異なる演算ノードに対する勾配の算出にそれぞれ変数Ａ１、Ｂ１が用いられてもよいし、これらの組み合わせであってもよい。入出力される変数が３以上であっても同様である。
【００５４】
逆伝播部２０により演算ノードＦ２の勾配が算出され、変数ノードＡ２まで誤差逆伝播の処理が実行され、逆伝播ＩＤ２に関するグラフの誤差逆伝播の処理が終了すると、逆伝播部２０は、逆伝播ＩＤ２が付与されている各ノードを有するグラフを破棄する。その後、逆伝播ＩＤ１に関する誤差逆伝播の処理を実行する。
【００５５】
このように、参照関係を持たせておくことにより、複数のグラフ間で変数ノード又は演算ノードとの間に相互に関係性を有する場合にも、グラフの生成、破棄を実行することにより、メモリの使用効率を向上させることが可能である。逆伝播の処理（演算）を行う順番は、例えば、逆伝播部２０が各グラフにおける参照関係を抽出し、抽出結果に基づいて決定する。
【００５６】
微分の演算が他の逆伝播ＩＤの変数ノードに依存する場合には、微分の計算自体を通常の逆伝播の計算と同様に演算ノード及び変数ノードを用いて記憶しておき、参照関係に基づいて演算を行う。
【００５７】
なお、図７のように、変数ノードに対して参照関係を持たせておいてもよい。別の例として、参照関係を示す変数ノードを各グラフに備え、他のグラフ内のノードから、又は、他のグラフ内のノードへの参照関係を格納しておき、逆伝播を実行するタイミングで当該変数ノードへの参照を確認することにより、グラフが効率よく破棄できる順番で逆伝播を行ってもよい。例えば、他の逆伝播ＩＤを有するノードへの参照関係を確認し、他のグラフへの参照があるグラフから逆伝播を実行する。
【００５８】
別の例として、参照関係を示す参照グラフをさらに備えてもよく、参照グラフの末端となるノードに対応する逆伝播ＩＤを有するグラフから演算を実行してもよい。このようにすると、参照関係が複雑となる複数のグラフを有する場合にも、容易に適用することが可能となる。
【００５９】
参照関係は、他のグラフのノードを参照するグラフに対して持たせるようにしたが、逆に、他のグラフから参照されるノードを有する関係をグラフとともに記憶させてもよい。この場合、上述と同様に適切に参照するノードから逆伝播の演算を実行することにより、演算が終了したグラフの情報から破棄することが可能となる。
【００６０】
図８は、さらに複雑な場合のグラフ生成の例を示す。入出力と演算の関係は、上記と同様にＢ＝Ｆ（Ａ）であるとする。さらに、演算Ｆの微分Ｆ’が入出力変数Ａ、Ｂを用いた計算であるとする。図８において、点線は、破棄されたノード、エッジを示す。
【００６１】
まず、グラフ生成時において、演算ノードＦ２から変数ノードＡ１、Ｂ１への参照がされる。ΔＢは、誤差逆伝播の途中結果として得られている変数Ｂに対する勾配を表し、ΔＡは、演算Ｆに対する誤差逆伝播の結果として得られる変数Ａに対する勾配を表す。この図８においては、ΔＢについて逆伝播ＩＤ１が付与されているノードを有する場合を示している。
【００６２】
逆伝播ＩＤ２が付与されているグラフから逆伝播の処理が実行される。Ｆ２の微分Ｆ２’を算出すると、Ｆ２’の演算ノードには、逆伝播ＩＤ１が付与される。そして、この演算ノードＦ２’から変数ノードＡ１、Ｂ１への参照がされる。そして、逆伝播が終了した変数ノードＢ２、演算ノードＦ２、変数ノードＡ２は、破棄される。
【００６３】
このように、他のグラフに依存するノードを有する場合には、逆伝播ＩＤが付与された変数の入力を伝達するノードを生成することにより、逆伝播の経路ごとに前述と同様にグラフを破棄することが可能となる。参照しているノードの誤差逆伝播が完了した後に、当該逆伝播ＩＤが付与された変数ノード、演算ノードは破棄され、特に、演算ノードが保持していたリソースのうち、他の逆伝播ＩＤの演算ノードと共有していないものについてリソースが解放される。一方で、他の逆伝播ＩＤの計算グラフに対する誤差逆伝播は、例えば、演算ノードＦ２’が保持されることにより、正しく演算を行うことが可能である。
【００６４】
本実施形態においては、単純な場合についていくつか例を挙げて説明したが、グラフを生成し、生成したグラフごとにノードに一意性を有する逆伝播ＩＤを付与し、必要であれば異なる逆伝播ＩＤが付与されたノード間において参照関係を持たせることにより、逆伝播が完了した計算グラフから順にリソースを解放することが可能である。これは、前述で示したものよりも複雑なグラフになっても同様に適用することができる。
【００６５】
このように、ネットワークの逆伝播をする場合に、そのネットワーク全体についてグラフを生成するのではなく、逆伝播する経路に基づいてグラフを生成することにより、リソースの利用効率を向上することができる。これにより、複雑な演算を行うDefine-by-Run方式においても、メモリの効率化を図ることが可能となる。
【００６６】
前述した実施形態における訓練装置１において、各機能は、アナログ回路、デジタル回路又はアナログ・デジタル混合回路で構成された回路であってもよい。また、各機能の制御を行う制御回路を備えていてもよい。各回路の実装は、ＡＳＩＣ（Application Specific Integrated Circuit）、ＦＰＧＡ（Field Programmable Gate Array）等によるものであってもよい。
【００６７】
上記の全ての記載において、訓練装置１の少なくとも一部はハードウェアで構成されていてもよいし、ソフトウェアで構成され、ソフトウェアの情報処理によりＣＰＵ（Central Processing Unit）等が実施をしてもよい。ソフトウェアで構成される場合には、訓練装置１及びその少なくとも一部の機能を実現するプログラムをフレキシブルディスクやＣＤ−ＲＯＭ等の記憶媒体に収納し、コンピュータに読み込ませて実行させるものであってもよい。記憶媒体は、磁気ディスクや光ディスク等の着脱可能なものに限定されず、ハードディスク装置やメモリなどの固定型の記憶媒体であってもよい。すなわち、ソフトウェアによる情報処理がハードウェア資源を用いて具体的に実装されるものであってもよい。さらに、ソフトウェアによる処理は、ＦＰＧＡ等の回路に実装され、ハードウェアが実行するものであってもよい。ジョブの実行は、例えば、ＧＰＵ（Graphics Processing Unit）等のアクセラレータを使用して行ってもよい。
【００６８】
例えば、コンピュータが読み取り可能な記憶媒体に記憶された専用のソフトウェアをコンピュータが読み出すことにより、コンピュータを上記の実施形態の装置とすることができる。記憶媒体の種類は特に限定されるものではない。また、通信ネットワークを介してダウンロードされた専用のソフトウェアをコンピュータがインストールすることにより、コンピュータを上記の実施形態の装置とすることができる。こうして、ソフトウェアによる情報処理が、ハードウェア資源を用いて、具体的に実装される。
【００６９】
図９は、本発明の一実施形態におけるハードウェア構成の一例を示すブロック図である。訓練装置１は、プロセッサ７１と、主記憶装置７２と、補助記憶装置７３と、ネットワークインタフェース７４と、デバイスインタフェース７５と、を備え、これらがバス７６を介して接続されたコンピュータ装置７として実現できる。
【００７０】
なお、図９のコンピュータ装置７は、各構成要素を一つ備えているが、同じ構成要素を複数備えていてもよい。また、１台のコンピュータ装置７が示されているが、ソフトウェアが複数のコンピュータ装置にインストールされて、当該複数のコンピュータ装置それぞれがソフトウェアの異なる一部の処理を実行してもよい。
【００７１】
プロセッサ７１は、コンピュータの制御装置および演算装置を含む電子回路（処理回路、Processing circuit、Processing circuitry）である。プロセッサ７１は、コンピュータ装置７の内部構成の各装置などから入力されたデータやプログラムに基づいて演算処理を行い、演算結果や制御信号を各装置などに出力する。具体的には、プロセッサ７１は、コンピュータ装置７のＯＳ（Operating System）や、アプリケーションなどを実行することにより、コンピュータ装置７を構成する各構成要素を制御する。プロセッサ７１は、上記の処理を行うことができれば特に限られるものではない。訓練装置１及びそれらの各構成要素は、プロセッサ７１により実現される。ここで、処理回路とは、１チップ上に配置された１又は複数の電気回路を指してもよいし、２つ以上のチップあるいはデバイス上に配置された１又は複数の電気回路を指してもよい。
【００７２】
主記憶装置７２は、プロセッサ７１が実行する命令および各種データなどを記憶する記憶装置であり、主記憶装置７２に記憶された情報がプロセッサ７１により直接読み出される。補助記憶装置７３は、主記憶装置７２以外の記憶装置である。なお、これらの記憶装置は、電子情報を格納可能な任意の電子部品を意味するものとし、メモリでもストレージでもよい。また、メモリには、揮発性メモリと、不揮発性メモリがあるが、いずれでもよい。訓練装置１内において各種データを保存するためのメモリ、例えば、記憶部１２は、主記憶装置７２または補助記憶装置７３により実現されてもよい。例えば、前述した各記憶部の少なくとも一部は、この主記憶装置７２又は補助記憶装置７３に実装されていてもよい。別の例として、アクセラレータが備えられている場合には、前述した各記憶部の少なくとも一部は、当該アクセラレータに備えられているメモリ内に実装されていてもよい。
【００７３】
ネットワークインタフェース７４は、無線または有線により、通信ネットワーク８に接続するためのインタフェースである。ネットワークインタフェース７４は、既存の通信規格に適合したものを用いればよい。ネットワークインタフェース７４により、通信ネットワーク８を介して通信接続された外部装置９Ａと情報のやり取りが行われてもよい。
【００７４】
外部装置９Ａは、例えば、カメラ、モーションキャプチャ、出力先デバイス、外部のセンサ、入力元デバイスなどが含まれる。また、外部装置９Ａは、訓練装置１の構成要素の一部の機能を有する装置でもよい。そして、コンピュータ装置７は、訓練装置１の処理結果の一部を、クラウドサービスのように通信ネットワーク８を介して送受信してもよい。
【００７５】
デバイスインタフェース７５は、外部装置９Ｂと直接接続するＵＳＢ（Universal Serial Bus）などのインタフェースである。外部装置９Ｂは、外部記憶媒体でもよいし、ストレージ装置でもよい。各記憶部は、外部装置９Ｂにより実現されてもよい。
【００７６】
外部装置９Ｂは出力装置でもよい。出力装置は、例えば、画像を表示するための表示装置でもよいし、音声などを出力する装置などでもよい。例えば、ＬＣＤ（Liquid Crystal Display）、ＣＲＴ（Cathode Ray Tube）、ＰＤＰ（Plasma Display Panel）、スピーカなどがあるが、これらに限られるものではない。
【００７７】
なお、外部装置９Ｂは入力装置でもよい。入力装置は、キーボード、マウス、タッチパネルなどのデバイスを備え、これらのデバイスにより入力された情報をコンピュータ装置７に与える。入力装置からの信号はプロセッサ７１に出力される。
【００７８】
本発明の態様は、上記した個々の実施形態に限定されるものではない。特許請求の範囲に規定された内容及びその均等物から導き出される本発明の概念的な思想と趣旨を逸脱しない範囲において種々の追加、変更及び部分的削除が可能である。例えば、前述した全ての実施形態において、説明に用いた数値は、一例として示したものであり、これらに限られるものではない。
【符号の説明】
【００７９】
１：訓練装置、１０：入力部、１２：記憶部、１４：グラフ生成部、１６：順伝播部、１８：ＩＤ付与部、２０：逆伝播部、２２：出力部
【図１】
2020091855.tif 000003
【図２】
2020091855.tif 000004
【図３】
2020091855.tif 000005
【図４】
2020091855.tif 000006
【図５】
2020091855.tif 000007
【図６】
2020091855.tif 000008
【図７】
2020091855.tif 000009
【図８】
2020091855.tif 000010
【図９】
2020091855.tif 000011