(57)【要約】  ニューラルネットワークの畳み込み層における畳み込み演算を行列積演算により行う演算方法であって、畳み込み層ごとに、当該畳み込み層に入力される入力データが所定のデータ量以下であるかを判定する判定ステップ（Ｓ１）と、入力データが所定のデータ量以下であると判定された場合（Ｓ１でＹｅｓ）、第１の演算モードを選択して、第１の演算モードで畳み込み演算を実行するステップと（Ｓ２、Ｓ３）、入力データが所定のデータ量より大きい場合（Ｓ１でＮｏ）、第２の演算モードを選択して、第２の演算モードで畳み込み演算を実行するステップ（Ｓ５、Ｓ６）と、畳み込み演算を実行することにより得られた結果である出力データを出力する出力ステップ（Ｓ７）とを含む演算方法。
2019234794.tif 000002
【特許請求の範囲】
【請求項１】
ＬＳＩが内部に有する演算器と内部メモリとを用いて、ニューラルネットワークの畳み込み層における畳み込み演算を行列積演算により行う演算方法であって、
畳み込み層ごとに、当該畳み込み層に入力される入力データが所定のデータ量以下であるか否かを判定する判定ステップと、
前記判定ステップにおいて、前記入力データが所定のデータ量以下であると判定された場合、第１の演算モードを選択して、前記第１の演算モードで畳み込み演算を実行するステップと、
前記判定ステップにおいて、前記入力データが所定のデータ量より大きいと判定された場合、第２の演算モードを選択して、前記第２の演算モードで畳み込み演算を実行するステップと、
畳み込み演算を実行することにより得られた結果である出力データを出力する出力ステップとを含み、
前記第１の演算モードで畳み込み演算を実行するステップでは、
当該畳み込み層の重みデータを、前記ＬＳＩの外部にある外部メモリに配置するステップと、
当該畳み込み層の前記入力データを前記内部メモリに配置するステップと、
前記外部メモリから、前記重みデータを、一部ずつ、１以上の行または列ベクトルデータとして前記内部メモリに読み出して、前記内部メモリに配置された前記入力データの行列との行列積演算を前記演算器に行わせるステップとを含み、
前記重みデータは、全体として、前記外部メモリから前記内部メモリに一度だけ読み出され、
前記第２の演算モードで畳み込み演算を実行するステップでは、
当該畳み込み層の入力データを、前記ＬＳＩの外部にある外部メモリに配置するステップと、
当該畳み込み層の重みデータの行列を前記内部メモリに配置するステップと、
前記外部メモリから、前記入力データを、一部ずつ、１以上の列または行ベクトルデータとして前記内部メモリに読み出して、前記内部メモリに配置された前記重みデータの行列との行列積演算を前記演算器に行わせるステップとを含み、
前記入力データは、全体として、前記外部メモリから前記内部メモリに一度だけ読み出される、
演算方法。
【請求項２】
前記出力ステップでは、前記出力データを、前記内部メモリまたは前記外部メモリに、当該畳み込み層の後段の層における入力データとして配置することで、前記出力データを出力する、
請求項１に記載の演算方法。
【請求項３】
前記後段の層は、畳み込み層、プーリング層、または、正規化層である、
請求項２に記載の演算方法。
【請求項４】
前記第１の演算モードで畳み込み演算を実行するステップでは、
前記内部メモリに配置された前記入力データを、サンプリングすることで前記入力データの行列に変換するステップを含み、
前記第２の演算モードで畳み込み演算を実行するステップでは、
前記内部メモリに読み出した前記入力データの一部を、サンプリングすることで、前記１以上の列または行ベクトルデータに変換するステップを含む、
請求項１〜３のいずれか１項に記載の演算方法。
【請求項５】
前記第２の演算モードで畳み込み演算を実行するステップでは、
前記入力データは、前記外部メモリにタイル状の形式で配置される、
請求項１〜４のいずれか１項に記載の演算方法。
【請求項６】
前記出力ステップでは、前記出力データが前記外部メモリに配置される場合、前記出力データは、前記外部メモリにタイル状の形式で配置される、
請求項１〜５のいずれか１項に記載の演算方法。
【請求項７】
ＬＳＩが内部に有する演算器と内部メモリとを用いて、ニューラルネットワークの畳み込み層における畳み込み演算を行列積演算により行う演算方法であって、
畳み込み層ごとに、当該畳み込み層に入力される入力データが所定のデータ量以下であるか否かを判定する判定ステップと、
前記判定ステップにおいて、前記入力データが所定のデータ量以下であると判定された場合、第１の演算モードを選択して、前記第１の演算モードで畳み込み演算を実行するステップと、
前記判定ステップにおいて、前記入力データが所定のデータ量より大きいと判定された場合、第２の演算モードを選択して、前記第２の演算モードで畳み込み演算を実行するステップと、
畳み込み演算を実行することにより得られた結果である出力データを出力する出力ステップとを含み、
前記第１の演算モードで畳み込み演算を実行するステップでは、
当該畳み込み層の重みデータを、前記ＬＳＩの外部にある外部メモリに配置するステップと、
当該畳み込み層の前記入力データを前記内部メモリに配置するステップと、
前記外部メモリから、前記重みデータを、一部ずつ、１以上の行または列ベクトルデータとして前記内部メモリに読み出して、前記内部メモリに配置された前記入力データの行列との行列積演算を前記演算器に行わせるステップとを含み、
前記重みデータは、全体として、前記外部メモリから前記内部メモリに一度だけ読み出され、
第２の演算モードで畳み込み演算を実行するステップでは、
当該畳み込み層の入力データ及び重みデータを、前記ＬＳＩの外部にある外部メモリに配置するステップと、
前記外部メモリから、前記重みデータの一部を、１以上の行または列ベクトルデータである第１ベクトルデータとして前記内部メモリに配置するステップと、
前記外部メモリから、前記入力データを、一部ずつ、１以上の列または行ベクトルデータとして前記内部メモリに読み出して、前記内部メモリに配置された前記第１ベクトルデータとの行列積演算を前記演算器に行わせるステップと、
前記外部メモリから、前記重みデータの一部と異なる一部を、１以上の行または列ベクトルデータである第２ベクトルデータとして前記内部メモリに配置するステップと、
前記外部メモリから、前記入力データを、一部ずつ、１以上の列または行ベクトルデータとして前記内部メモリに読み出して、前記内部メモリに配置された前記第２ベクトルデータとの行列積演算を前記演算器に行わせるステップとを含み、
前記重みデータは、全体として、前記外部メモリから前記内部メモリに一度だけ読み出される、
演算方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、演算方法に関し、特に、畳み込みニューラルネットワークの畳み込み層における畳み込み演算を行う演算方法に関する。
【背景技術】
【０００２】
近年、局所領域の畳み込み(Convolution)を繰り返す多層のニューラルネットワークからなる畳み込みニューラルネットワークを用いて、画像認識を行うことが可能になっている。【０００３】
また、多次元データに対して演算処理を行うことができるＬＳＩチップを用いて、畳み込みニューラルネットワークの畳み込み層における畳み込み演算を行うことができることが知られている（例えば、特許文献１）。特許文献１では、ＬＳＩチップに内蔵するメモリ回路ブロックのメモリサイズを超える２次元データに対する演算処理を効率的に実行可能な技術が開示されている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００７−２０６８８７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
ところで、近年のディープラーニング技術の進展により、畳み込みニューラルネットワークを用いた画像認識の認識率は向上しているものの、ネットワーク規模が巨大化している。このため、畳み込み層の１層あたりの演算処理量も大きくなっている。【０００６】
しかしながら、特許文献１では、比較的小規模の畳み込みニューラルネットワークにおける畳み込み演算が演算処理対象となっている。このため、特許文献１に開示される技術では、大規模な畳み込みニューラルネットワークにおける畳み込み演算を行う際、入力データを外部から読み出して用いることになるので消費電力が大きくなってしまうという問題がある。【０００７】
換言すると、特許文献１に開示されるようなＬＳＩチップでは、ＬＳＩチップの内部に搭載される内部メモリに収まらないサイズの処理結果は外部メモリに出力せざるを得ない。そして、後段の畳み込み層で再び入力データとして内部メモリに読み出して用いる必要があることから、消費電力が大きくなってしまう。一方で、ＬＳＩチップにおいて、消費電力を抑制するために、演算処理結果を一時的に保持する内部メモリの容量を大きくすると、コストアップにつながってしまうという問題もある。【０００８】
本開示は、上述の事情を鑑みてなされたもので、例えば数Ｍバイト以下といった限られた容量の内部メモリであっても、消費電力をより抑制しながら畳み込み演算を行うことができる演算方法を提供することを目的とする。
【課題を解決するための手段】
【０００９】
本開示の一形態に係る演算方法は、ＬＳＩが内部に有する演算器と内部メモリとを用いて、ニューラルネットワークの畳み込み層における畳み込み演算を行列積演算により行う演算方法であって、畳み込み層ごとに、当該畳み込み層に入力される入力データが所定のデータ量以下であるか否かを判定する判定ステップと、前記判定ステップにおいて、前記入力データが所定のデータ量以下であると判定された場合、第１の演算モードを選択して、前記第１の演算モードで畳み込み演算を実行するステップと、前記判定ステップにおいて、前記入力データが所定のデータ量より大きいと判定された場合、第２の演算モードを選択して、前記第２の演算モードで畳み込み演算を実行するステップと、畳み込み演算を実行することにより得られた結果である出力データを出力する出力ステップとを含み、前記第１の演算モードで畳み込み演算を実行するステップでは、当該畳み込み層の重みデータを、前記ＬＳＩの外部にある外部メモリに配置するステップと、当該畳み込み層の前記入力データを前記内部メモリに配置するステップと、前記外部メモリから、前記重みデータを、一部ずつ、１以上の行または列ベクトルデータとして前記内部メモリに読み出して、前記内部メモリに配置された前記入力データの行列との行列積演算を前記演算器に行わせるステップとを含み、前記重みデータは、全体として、前記外部メモリから前記内部メモリに一度だけ読み出され、前記第２の演算モードで畳み込み演算を実行するステップでは、当該畳み込み層の入力データを、前記ＬＳＩの外部にある外部メモリに配置するステップと、当該畳み込み層の重みデータの行列を前記内部メモリに配置するステップと、前記外部メモリから、前記入力データを、一部ずつ、１以上の列または行ベクトルデータとして前記内部メモリに読み出して、前記内部メモリに配置された前記重みデータの行列との行列積演算を前記演算器に行わせるステップとを含み、前記入力データは、全体として、前記外部メモリから前記内部メモリに一度だけ読み出される。【００１０】
これにより、限られた容量の内部メモリであっても、消費電力をより抑制しながら畳み込み演算を行うことができる。【００１１】
ここで、例えば、前記出力ステップでは、前記出力データを、前記内部メモリまたは前記外部メモリに、当該畳み込み層の後段の層における入力データとして配置することで、前記出力データを出力するとしてもよい。【００１２】
また、例えば、前記後段の層は、畳み込み層、プーリング層、または、正規化層であるとしてもよい。【００１３】
また、例えば、前記第１の演算モードで畳み込み演算を実行するステップでは、前記内部メモリに配置された前記入力データを、サンプリングすることで前記入力データの行列に変換するステップを含み、前記第２の演算モードで畳み込み演算を実行するステップでは、前記内部メモリに読み出した前記入力データの一部を、サンプリングすることで、前記１以上の列または行ベクトルデータに変換するステップを含むとしてもよい。【００１４】
また、例えば、前記第２の演算モードで畳み込み演算を実行するステップでは、前記入力データは、前記外部メモリにタイル状の形式で配置されるとしてもよい。【００１５】
また、例えば、前記出力ステップでは、前記出力データが前記外部メモリに配置される場合、前記出力データは、前記外部メモリにタイル状の形式で配置されるとしてもよい。【００１６】
また、本開示の一形態に係る演算方法は、ＬＳＩが内部に有する演算器と内部メモリとを用いて、ニューラルネットワークの畳み込み層における畳み込み演算を行列積演算により行う演算方法であって、畳み込み層ごとに、当該畳み込み層に入力される入力データが所定のデータ量以下であるか否かを判定する判定ステップと、前記判定ステップにおいて、前記入力データが所定のデータ量以下であると判定された場合、第１の演算モードを選択して、前記第１の演算モードで畳み込み演算を実行するステップと、前記判定ステップにおいて、前記入力データが所定のデータ量より大きいと判定された場合、第２の演算モードを選択して、前記第２の演算モードで畳み込み演算を実行するステップと、畳み込み演算を実行することにより得られた結果である出力データを出力する出力ステップとを含み、前記第１の演算モードで畳み込み演算を実行するステップでは、当該畳み込み層の重みデータを、前記ＬＳＩの外部にある外部メモリに配置するステップと、当該畳み込み層の前記入力データを前記内部メモリに配置するステップと、前記外部メモリから、前記重みデータを、一部ずつ、１以上の行または列ベクトルデータとして前記内部メモリに読み出して、前記内部メモリに配置された前記入力データの行列との行列積演算を前記演算器に行わせるステップとを含み、前記重みデータは、全体として、前記外部メモリから前記内部メモリに一度だけ読み出され、第２の演算モードで畳み込み演算を実行するステップでは、当該畳み込み層の入力データ及び重みデータを、前記ＬＳＩの外部にある外部メモリに配置するステップと、前記外部メモリから、前記重みデータの一部を、１以上の行または列ベクトルデータである第１ベクトルデータとして前記内部メモリに配置するステップと、前記外部メモリから、前記入力データを、一部ずつ、１以上の列または行ベクトルデータとして前記内部メモリに読み出して、前記内部メモリに配置された前記第１ベクトルデータとの行列積演算を前記演算器に行わせるステップと、前記外部メモリから、前記重みデータの一部と異なる一部を、１以上の行または列ベクトルデータである第２ベクトルデータとして前記内部メモリに配置するステップと、前記外部メモリから、前記入力データを、一部ずつ、１以上の列または行ベクトルデータとして前記内部メモリに読み出して、前記内部メモリに配置された前記第２ベクトルデータとの行列積演算を前記演算器に行わせるステップとを含み、前記重みデータは、全体として、前記外部メモリから前記内部メモリに一度だけ読み出される。【００１７】
なお、これらの包括的または具体的な態様は、システム、方法、集積回路、コンピュータプログラムまたはコンピュータで読み取り可能なＣＤ−ＲＯＭなどの記録媒体で実現されてもよく、システム、方法、集積回路、コンピュータプログラム及び記録媒体の任意な組み合わせで実現されてもよい。
【発明の効果】
【００１８】
本開示の演算方法によれば、限られた容量の内部メモリであっても、消費電力をより抑制しながら畳み込み演算を行うことができる。
【図面の簡単な説明】
【００１９】
【図１】図１は、実施の形態に係る演算システムの構成の一例を示すブロック図である。
【図２】図２は、実施の形態に係る畳み込みニューラルネットの構成の一例を示す図である。
【図３Ａ】図３Ａは、行列積演算により畳み込み演算を行う方法の説明図である。
【図３Ｂ】図３Ｂは、行列積演算により畳み込み演算を行う方法の説明図である。
【図４Ａ】図４Ａは、実施の形態に係る外部メモリにおける出力データの配置方法を示す図である。
【図４Ｂ】図４Ｂは、実施の形態に係る外部メモリにおける出力データの配置方法を示す図である。
【図５】図５は、実施の形態に係る演算システムの動作概要を示すフローチャートである。
【図６】図６は、図５に示すステップＳ３の動作詳細を示すフローチャートである。
【図７】図７は、図５に示すステップＳ６の動作詳細を示すフローチャートである。
【図８】図８は、実施の形態に係る第１の演算モードでの演算方法の効果を説明するための図である。
【図９】図９は、実施の形態に係る第１の演算モードでの演算方法の効果を説明するための図である。
【図１０】図１０は、実施の形態に係る第２の演算モードでの演算方法の効果を説明するための図である。
【図１１】図１１は、変形例に係るステップＳ６の動作詳細を示すフローチャートである。
【図１２】図１２は、変形例に係る第２の演算モードでの演算方法の効果を説明するための図である。
【発明を実施するための形態】
【００２０】
以下、本開示の実施の形態について、図面を用いて詳細に説明する。なお、以下で説明する実施の形態は、いずれも本開示の一具体例を示すものである。以下の実施の形態で示される数値、形状、材料、構成要素、構成要素の配置位置及び接続形態、使用手順、通信手順等は、一例であり、本開示を限定する主旨ではない。また、以下の実施の形態における構成要素のうち、本開示の最上位概念を示す独立請求項に記載されていない構成要素については、任意の構成要素として説明される。また、各図は、必ずしも厳密に図示したものではない。各図において、実質的に同一の構成については同一の符号を付し、重複する説明は省略または簡略化する。
【００２１】
（実施の形態）
以下では、図面を参照しながら、実施の形態に係る演算方法等の説明を行う。
【００２２】
［システムの構成］
図１は、実施の形態に係る演算システム１の構成の一例を示すブロック図である。
【００２３】
図１に示す演算システム１は、回路１０と、外部メモリ２０と、判定部３０と、制御部４０と、出力部５０とを備える。図２は、実施の形態に係る畳み込みニューラルネットワーク６０の構成の一例を示す図である。
【００２４】
［外部メモリ２０］
外部メモリ２０は、回路１０の外部にあり、例えばＥＥＰＲＯＭ、フラッシュメモリ等の不揮発メモリ、ハードディスク、または、電池つきＲＡＭなどによって構成される。本実施の形態では、外部メモリ２０には、制御部４０が選択する第１の演算モードまたは第２の演算モードに応じて、例えば畳み込みニューラルネットワーク６０の演算処理対象の畳み込み層における重みデータ、または、入力データが配置される。また、外部メモリ２０には、回路１０に畳み込み演算を行わせることにより得られた出力データが配置されてもよい。
【００２５】
ここで、図２を用いて、畳み込みニューラルネットワーク６０の構成の一例について説明する。図２では、畳み込みニューラルネットワークを、CNN（Convolutional Neural Network）と表記している。
【００２６】
［畳み込みニューラルネットワーク６０］
畳み込みニューラルネットワーク６０は、畳み込み層(Conv)とプーリング層(Pooling Layer)と正規化層（Normalize Layer）とを繰り返す多層のニューラルネットワークである。図２に示す例では、畳み込みニューラルネットワーク６０は、２つ目のプーリング層の後段に異なる３つの畳み込み層が接続されている。
【００２７】
本実施の形態では、例えば畳み込みニューラルネットワーク６０を構成する複数の畳み込み層における畳み込み演算を回路１０に行わせる。
【００２８】
［回路１０］
回路１０は、例えばＬＳＩまたはＬＳＩチップで構成され、例えば畳み込みニューラルネットワーク６０の畳み込み層における畳み込み演算を行列積演算により行う。回路１０は、図１に示すように、内部に、演算器１１と、内部メモリ１２とを有する。
【００２９】
＜内部メモリ１２＞
内部メモリ１２は、比較的小さい容量からなり、例えばＲＡＭなどによって構成される。ここで、比較的小さい容量の一例としては、数百ｋバイト〜数Ｍバイト以下の容量が考えられる。本実施の形態では、内部メモリ１２は、後述する制御部４０により制御される。内部メモリ１２は、制御部４０が選択する第１の演算モードまたは第２の演算モードに応じて、例えば畳み込みニューラルネットワーク６０の演算処理対象の畳み込み層における重みデータの一部ずつ、または、当該重みデータが配置される。また、内部メモリ１２は、制御部４０が選択する第１の演算モードまたは第２の演算モードに応じて、例えば畳み込みニューラルネットワーク６０の演算処理対象の畳み込み層の入力データの一部ずつまたは、当該入力データが配置される。
【００３０】
なお、内部メモリ１２は、回路１０に畳み込み演算を行わせることにより得られた出力データが配置されてもよい。
【００３１】
＜演算器１１＞
演算器１１は、後述する制御部４０により制御される。演算器１１は、図１に示すように積和演算部１１１と、データ変換部１１２とを有する。
【００３２】
≪積和演算部１１１≫
積和演算部１１１は、制御部４０により制御され、畳み込み演算を行列積演算により行う。
【００３３】
ここで、図３Ａ及び図３Ｂを用いて、畳み込み演算を行列積演算により行う方法について説明する。図３Ａ及び図３Ｂは、実施の形態に係る行列積演算により畳み込み演算を行う方法の説明図である。
【００３４】
重みデータと入力データとの畳み込み演算を行うことは、重みデータと入力データとの行列積を演算することに相当することが知られている。ここで、例えば図３Ａに示すように、重みデータがＣｏ×Ｋ行列で表され、入力データがＣｉ×Ｌ行列で表されるとする。この場合、例えばサンプリングなどのデータ変換を入力データに行い、Ｋ×Ｎ行列で表される変換後の入力データを用いて、重みデータとの行列積を演算する。ｐ×ｑ行列とｒ×ｓ行列の積（行列積）はｑ＝ｒのときのみ定義されるからである。そして、その結果は、ｐ×ｓ行列になることから、重みデータと変換後の入力データの行列積の結果である出力データは、Ｃｏ×Ｎ行列で表されることになる。
【００３５】
重みデータと入力データとの行列積のより具体的な方法は、例えば図３Ｂに示されている。すなわち、重みデータの１行目の成分と変換後の入力データの１列目の成分の積和が出力データの１行１列目の成分となり、重みデータの１行目の成分と変換後の入力データの２列目の成分の積和が出力データの１行２列目の成分となる。このように、重みデータのａ行目の成分と変換後の入力データのｂ列目の成分の積和が出力データのａ行ｂ列目の成分となるようにして行列積が演算される。
【００３６】
なお、行列積演算により畳み込み演算を行う場合、出力データの各要素にはバイアスデータをさらに加える場合もある。
【００３７】
また、図３Ａ及び図３Ｂでは、重みデータの行列と変換後の入力データの行列との行列積をこの順で演算するとして説明したが、これに限らない。変換後の入力データの行列と重みデータの行列との行列積をこの順で演算するとしてよい。この場合には、変換後の入力データの１行の成分数が、重みデータの行列の１列の成分数と同一となるように入力データをサンプリングしてデータ変換すればよい。
【００３８】
本実施の形態では、積和演算部１１１は、第１の演算モードが選択された場合、外部メモリ２０から、一部ずつ、１以上の行または列ベクトルデータとして内部メモリ１２に読み出された重みデータと、内部メモリ１２に配置された入力データの行列との行列積演算を行う。積和演算部１１１は、第２の演算モードが選択された場合、内部メモリ１２に配置された重みデータの行列と、外部メモリ２０から、一部ずつ、１以上の列または行ベクトルデータとして内部メモリ１２に読み出された入力データとの行列積演算を行う。
【００３９】
≪データ変換部１１２≫
データ変換部１１２は、制御部４０により制御され、内部メモリ１２に読み出された一部の入力データまたは内部メモリ１２に配置された入力データを、サンプリングによりデータ変換する。これにより、データ変換された入力データは、重みデータの行列と行列積演算することができる。
【００４０】
本実施の形態では、データ変換部１１２は、第１の演算モードが選択された場合、内部メモリ１２に配置された入力データを、サンプリングすることで入力データの行列に変換する。また、データ変換部１１２は、第２の演算モードが選択された場合、内部メモリ１２に読み出した入力データの一部を、サンプリングすることで、１以上の列または行ベクトルデータに変換する。
【００４１】
［判定部３０］
判定部３０は、図示しないＣＰＵ（Central Processing Unit）と、メモリとなどにより実現される。判定部３０は、畳み込み層ごとに、当該畳み込み層に入力される入力データが所定のデータ量以下であるか否かを判定する。ここで、所定のデータ量は、例えば内部メモリ１２のうち入力データに割り当てられる最大の容量（サイズ）である。
【００４２】
本実施の形態では、判定部３０は、例えば図２に示す畳み込みニューラルネットワーク６０の演算処理対象となる畳み込み層ごとに、当該畳み込み層に入力される入力データが所定のデータ量以下であるか否かを判定する。なお、図２に示すように、同一レイヤの後段に複数の畳み込み層が接続される場合には、判定部３０は、各々の畳み込み層ごとに入力される入力データが所定のデータ量以下であるか否かを判定すればよい。
【００４３】
［制御部４０］
制御部４０は、図示しないＣＰＵと、メモリとなどにより実現される。制御部４０は、判定部３０により入力データが所定のデータ量以下であると判定された場合、第１の演算モードを選択して、第１の演算モードで畳み込み演算を実行する。より詳細には、制御部４０は、第１の演算モードを選択した場合、当該畳み込み層の重みデータを、回路１０の外部にある外部メモリ２０に配置し、当該畳み込み層の入力データを内部メモリ１２に配置する。そして、制御部４０は、外部メモリ２０から、重みデータを、一部ずつ、１以上の行または列ベクトルデータとして内部メモリ１２に読み出して、内部メモリ１２に配置された入力データの行列との行列積演算を積和演算部１１１に行わせる。これにより、重みデータは、全体として、外部メモリ２０から内部メモリ１２に一度だけ読み出されることになる。
【００４４】
一方、制御部４０は、判定部３０により入力データが所定のデータ量より大きいと判定された場合、第２の演算モードを選択して、第２の演算モードで畳み込み演算を実行する。より詳細には、制御部４０は、第２の演算モードを選択した場合、当該畳み込み層の入力データを、回路１０の外部にある外部メモリ２０に配置し、当該畳み込み層の重みデータの行列を内部メモリ１２に配置する。そして、制御部４０は、外部メモリ２０から、入力データを、一部ずつ、１以上の列または行ベクトルデータとして内部メモリ１２に読み出して、内部メモリ１２に配置された重みデータの行列との行列積演算を積和演算部１１１に行わせる。これにより、入力データは、全体として、外部メモリ２０から内部メモリ１２に一度だけ読み出されることになる。
【００４５】
［出力部５０］
出力部５０は、畳み込み演算を実行することにより得られた結果である出力データを出力する。本実施の形態では、出力部５０は、当該出力データを、内部メモリ１２または外部メモリ２０に、当該畳み込み層の後段の層における入力データとして配置することで、出力データを出力してもよい。ここで、後段の層は、畳み込みニューラルネットワークにおける畳み込み層、プーリング層、または、正規化層である。
【００４６】
図４Ａ及び図４Ｂは、実施の形態に係る外部メモリ２０における出力データの配置方法を示す図である。
【００４７】
出力部５０は、外部メモリ２０に出力データを出力する場合には、図４Ａに示すラスター状の形式で配置してもよいが、タイル状の形式で配置してもよい。ここで、ラスター状の形式とは、所定の領域において、出力データを構成する数値（成分）が、横１列に並べられ、かつ複数の行に並べるように配置された形式を意味する。また、タイル状の形式とは、所定の領域において、四角い形をした領域である四角領域が行列状に並べられ、個々の四角領域内では、出力データを構成する数値（成分）が、横１列に並べられ、かつ複数の行に並べるように配置された形式を意味する。
【００４８】
なお、外部メモリ２０に入力データを配置する場合も同様のことが言える。すなわち、外部メモリ２０には、入力データがラスター状の形式で配置されてもよいし、タイル状の形式で配置されてもよい。
【００４９】
また、出力部５０が、外部メモリ２０に出力データ及び入力データをタイル状の形式で配置する場合には、ラスター状の形式で配置する場合と比較して、行列積を演算する際にアクセスされる縦方向の効率が向上し、消費電力を抑制することができる。
【００５０】
［演算システム１の動作］
以上のように構成された演算システム１の動作について説明する。
【００５１】
図５は、実施の形態に係る演算システム１の動作概要を示すフローチャートである。図６は、図５に示すステップＳ３の動作詳細を示すフローチャートである。図７は、図５に示すステップＳ６の動作詳細を示すフローチャートである。
【００５２】
まず、演算システム１は、入力データが所定のデータ量以下であるか否かを判定する（Ｓ１）。より具体的には、演算システム１は、演算処理対象となる畳み込み層ごとに、当該畳み込み層に入力される入力データが所定のデータ量以下であるか否かを判定する。
【００５３】
ステップＳ１において、入力データが所定のデータ量以下である場合（Ｓ１でＹｅｓ）、演算システム１は、第１の演算モードを選択し（Ｓ２）、第１の演算モードで、重みデータと入力データとの畳み込み演算を実行する（Ｓ３）。より具体的には、演算システム１は、ステップＳ１において、入力データが所定のデータ量以下であると判定し場合、第１の演算モードを選択して、第１の演算モードで畳み込み演算を実行する。ここで、より詳細な説明を図６を用いて行う。
【００５４】
ステップＳ３において、図６に示すように、演算システム１は、まず、演算処理対象となる畳み込み層の重みデータを外部メモリ２０に配置する（Ｓ３１）。次いで、演算システム１は、演算処理対象となる畳み込み層への入力データを内部メモリ１２に配置する（Ｓ３２）。次いで、演算システム１は、外部メモリ２０から重みデータの一部を、行または列ベクトルデータとして内部メモリ１２に読み出す（Ｓ３３）。本実施の形態では、演算システム１は、外部メモリ２０から重みデータの一部を、行ベクトルデータとして内部メモリ１２に読み出している。次いで、演算システム１は、内部メモリ１２に配置された当該行または列ベクトルデータと、入力データの行列との行列積を演算する（Ｓ３４）。本実施の形態では、演算システム１は、内部メモリ１２に配置された当該行ベクトルデータと、入力データをサンプリングにより行列の形式にデータ変換した入力データの行列との行列積を演算している。次いで、演算システム１は、外部メモリ２０に配置した重みデータの全てに対して、入力データの行列との行列積を演算済みか否か判定する（Ｓ３５）。ステップＳ３５において、重みデータの全てに対して演算済みの場合（Ｓ３５でＹｅｓ）、演算システム１は、ステップＳ３の処理を終了する。一方、ステップＳ３５において、重みデータの全てに対して演算済みでない場合（Ｓ３５でＮｏ）、演算システム１は、ステップＳ３３に戻る。そして、ステップＳ３３において、外部メモリ２０から、先ほど読み出した重みデータの一部と異なる重みデータの一部を、行または列ベクトルデータとして内部メモリ１２に読み出し、ステップＳ３４の処理を行う。
【００５５】
以下図５に戻って説明を続ける。
【００５６】
一方、ステップＳ１において、入力データが所定のデータ量より大きい場合（Ｓ１でＮｏ）、演算システム１は、第２の演算モードを選択し（Ｓ５）、第２の演算モードで、重みデータと入力データとの畳み込み演算を実行する（Ｓ６）。より具体的には、演算システム１は、ステップＳ１において、入力データが所定のデータ量より大きいと判定した場合、第２の演算モードを選択して、第２の演算モードで畳み込み演算を実行する。ここで、より詳細な説明を、図７を用いて行う。
【００５７】
ステップＳ６において、図７に示すように、演算システム１は、まず、演算処理対象となる畳み込み層への入力データを外部メモリ２０に配置する（Ｓ６１）。次いで、演算システム１は、演算処理対象となる畳み込み層の重みデータを内部メモリ１２に配置する（Ｓ６２）。次いで、演算システム１は、外部メモリ２０から入力データの一部を、列または行ベクトルデータとして内部メモリ１２に読み出す（Ｓ６３）。本実施の形態では、演算システム１は、外部メモリ２０から入力データの一部を、列ベクトルデータとして内部メモリ１２に読み出している。次いで、演算システム１は、内部メモリ１２に配置された重みデータの行列と、内部メモリ１２に配置された当該列または行ベクトルデータとの行列積を演算する（Ｓ６４）。本実施の形態では、演算システム１は、内部メモリ１２に配置された重みデータの行列と、当該列ベクトルデータをサンプリングにより重みデータの行列の行成分数に合わせるようにデータ変換した列ベクトルデータとの行列積を演算している。次いで、演算システム１は、外部メモリ２０に配置した入力データの全てに対して、重みデータの行列との行列積を演算済みか否か判定する（Ｓ６５）。ステップＳ６５において、入力データの全てに対して演算済みの場合（Ｓ６５でＹｅｓ）、演算システム１は、ステップＳ６の処理を終了する。一方、ステップＳ６５において、入力データの全てに対して演算済みでない場合（Ｓ６５でＮｏ）、演算システム１は、ステップＳ６３に戻る。そして、ステップＳ６３において、外部メモリ２０から、先ほど読み出した入力データの一部と異なる入力データの一部を、列または行ベクトルデータとして内部メモリ１２に読み出し、ステップＳ６４の処理を行う。
【００５８】
以下図５に戻って説明を続ける。
【００５９】
ステップＳ３またはステップＳ６の処理が終了すると、演算システム１は、出力データを出力する（Ｓ７）。より具体的には、演算システム１は、演算処理対象の畳み込み層における畳み込み演算を実行することにより得られた結果である出力データを、内部メモリ１２または外部メモリ２０に当該畳み込み層の後段の層への入力データとして配置する。
【００６０】
［効果等］
図８及び図９は、実施の形態に係る第１の演算モードでの演算方法の効果を説明するための図である。図１０は、実施の形態に係る第２の演算モードでの演算方法の効果を説明するための図である。図８〜図１０において、同様の要素には同一の符号を付している。
【００６１】
本実施の形態の演算方法によれば、演算処理対象となる畳み込み層への入力データが内部メモリ１２に収まる場合と収まらない場合とで、制御を切り替えて入力データと重みデータのアクセス方法を逆にする。すなわち、本実施の形態の演算方法によれば、演算処理対象となる畳み込み層への入力データが内部メモリ１２に収まる場合には、第１の演算モードで畳み込み演算を実行する制御を行う。一方、演算処理対象となる畳み込み層への入力データが内部メモリ１２に収まらない場合には、第２の演算モードで畳み込み演算を実行する制御を行う。
【００６２】
ここで、図８に示すように、第１の演算モードでの演算方法では、入力データが内部メモリ１２に収まるので、入力データ全部を内部メモリ１２に配置し、重みデータを外部メモリ２０に配置する。入力データ全部と重みデータ全部とを同時に内部メモリ１２に配置することができないからである。そして、入力データ全体を内部メモリ１２から繰り返し読み出して積和演算部１１１に供給する。重みデータを、外部メモリ２０から一部読み出して内部メモリ１２の一部領域であるバッファに格納し、このバッファから積和演算部１１１へ繰り返し供給する。このようにして、重みデータ全体は、外部メモリ２０から１回だけ読み出されるようにする。換言すれば、内部メモリ１２に配置される入力データは全体を何回もループしながら読み出して使われる。一方、外部メモリ２０に配置される重みデータは、全体を外部メモリ２０から１回だけ読み出すことになるように、一部ずつ内部メモリ１２のバッファに格納され、バッファを何回もループしながら使われることになる。なお、図８及び図９では、入力データ全体を内部メモリ１２から繰り返し読み出したときに、読み出した入力データをサンプリングにより行列の形式にデータ変換して積和演算部１１１に供給している。内部メモリ１２のバッファに格納された一部の重みデータとの行列積を演算するためである。
【００６３】
また、図８に示す第１の演算モードでの演算方法では、内部メモリ１２のバッファに、重みデータの一部が１以上の行ベクトルデータとして格納されて、行列積が演算されることから、出力データは横方向に生成されながら内部メモリ１２に格納されている。なお、出力データが内部メモリ１２に収まらない場合には、図９に示すように、外部メモリ２０に出力すればよい。
【００６４】
これにより、限られた容量の内部メモリ１２であっても、消費電力の大きい外部メモリからの重みデータの読み出し回数を最小にすることができるので、消費電力をより抑制しながら畳み込み演算を行うことができる。
【００６５】
また、図１０に示すように、第２の演算モードでの演算方法では、入力データが内部メモリ１２に収まらないので、入力データを外部メモリ２０に配置し、重みデータの全部を内部メモリ１２に配置する。入力データ全部と重みデータ全部とを同時に内部メモリ１２に配置することができないからである。そして、入力データを、外部メモリ２０から一部読み出して内部メモリ１２の一部領域であるバッファに格納し、このバッファから積和演算部１１１へ繰り返し供給する。重みデータ全体を内部メモリ１２から繰り返し読み出して積和演算部１１１に供給する。このようにして、入力データ全体は、外部メモリ２０から１回だけ読み出されるようにする。換言すれば、内部メモリ１２に配置される重みデータは全体を何回もループしながら読み出して使われる。一方、外部メモリ２０に配置される入力データは、全体を外部メモリ２０から１回だけ読み出すことになるように、一部ずつ内部メモリ１２のバッファに格納され、バッファを何回もループしながら使われることになる。
【００６６】
また、図１０に示す第２の演算モードでの演算方法では、内部メモリ１２のバッファに、入力データの一部が１以上の列ベクトルデータとして格納されて、行列積が演算されるので、出力データは縦方向に生成されながら内部メモリ１２に格納されている。なお、出力データが内部メモリ１２に収まらない場合には、外部メモリ２０に出力すればよい。
【００６７】
これにより、限られた容量の内部メモリ１２であっても、消費電力の大きい外部メモリからの入力データの読み出し回数を最小にすることができるので、消費電力をより抑制しながら畳み込み演算を行うことができる。
【００６８】
このように、入力データ及び出力データのサイズに制約を設けることなく、限られた容量の内部メモリ１２で畳み込み演算を行うことができるので、大容量の内部メモリ１２を備える場合と比較してコストダウンを図ることができる。
【００６９】
以上のように本実施の形態の演算方法によれば、例えば数Ｍバイト以下といった限られた容量の内部メモリであっても、消費電力をより抑制しながら畳み込み演算を行うことができる。
【００７０】
（変形例）
上記の実施の形態では、入力データが内部メモリ１２に収まらない場合、入力データを外部メモリ２０に配置し、重みデータの全部を内部メモリ１２に配置するとして説明したが、これに限らない。内部メモリ１２の容量（サイズ）によっては、重みデータの全部が配置できない場合も考えられる。以下の変形例では、実施の形態と同じ点は説明を省略し、異なる点を中心に説明する。
【００７１】
本変形例の演算システム１では、上記の実施の形態の演算システム１と比較して、第２の演算モードにおいて重みデータの全部を内部メモリ１２に配置することができないとする。これにより、制御部４０の第２の演算モードの詳細動作が異なることになる。その他は、上記の実施の形態と同様である。
【００７２】
［制御部４０］
本変形例の制御部４０は、上記の実施の形態と同様に、判定部３０により入力データが所定のデータ量より大きいと判定された場合、第２の演算モードを選択して、第２の演算モードで畳み込み演算を実行する。
【００７３】
より詳細には、制御部４０は、まず、第２の演算モードを選択した場合、当該畳み込み層の入力データ及び重みデータを、回路１０外部にある外部メモリ２０に配置する。
【００７４】
次に、制御部４０は、外部メモリ２０から、重みデータの一部を、１以上の行または列ベクトルデータである第１ベクトルデータとして内部メモリ１２に配置する。そして、制御部４０は、外部メモリ２０から、入力データを、一部ずつ、１以上の列または行ベクトルデータとして内部メモリ１２に読み出して、内部メモリ１２に配置された第１ベクトルデータとの行列積演算を積和演算部１１１に行わせる。
【００７５】
次に、制御部４０は、外部メモリ２０から、重みデータの当該一部と異なる一部を、１以上の行または列ベクトルデータである第２ベクトルデータとして内部メモリ１２に配置する。続いて、制御部４０は、外部メモリ２０から、入力データを、一部ずつ、１以上の列または行ベクトルデータとして内部メモリ１２に読み出して、内部メモリ１２に配置された第２ベクトルデータとの行列積演算を積和演算部１１１に行わせる。
【００７６】
なお、重みデータの全部を一旦外部メモリ２０に配置する場合に限らない。重みデータの一部を内部メモリ１２に配置し、重みデータの残りを外部メモリ２０に配置してもよい。この場合、重みデータの一部のサイズ（容量）は、内部メモリ１２に格納可能な最大限のサイズであればよい。
【００７７】
これにより、制御部４０は、重みデータを、全体として、外部メモリ２０から内部メモリ１２に一度だけ読み出すようにして、上記のような行列積演算を、重みデータの全てに対して行うことができる。
【００７８】
［演算システム１の動作］
以上のように構成された本変形例の演算システム１の動作について説明する。本変形例に係る演算システム１の動作概要は、図５で説明した通りであるので説明を省略する。
【００７９】
本変形例の演算システム１では、上記の実施の形態の演算システム１と比較して、図５のステップＳ６の詳細が異なる。以下、図１１を用いて、本変形例に係るステップＳ６について説明する。
【００８０】
図１１は、変形例に係るステップＳ６の動作詳細を示すフローチャートである。
【００８１】
ステップＳ６において、図１１に示すように、本変形例に係る演算システム１は、まず、演算処理対象となる畳み込み層への入力データと重みデータとを外部メモリ２０に配置する（Ｓ６０１）。
【００８２】
次いで、本変形例に係る演算システム１は、外部メモリ２０から、重みデータの一部を、１以上の行ベクトルデータとして内部メモリ１２に読み出す（Ｓ６０２）。
【００８３】
次いで、本変形例に係る演算システム１は、外部メモリ２０から、入力データの一部を、１以上の列ベクトルデータとして内部メモリ１２に読み出す（Ｓ６０３）。
【００８４】
次いで、本変形例に係る演算システム１は、内部メモリ１２に読み出した重みデータの一部である当該行ベクトルデータと、内部メモリ１２に読み出した入力データの一部である当該列ベクトルデータとの行列積を演算する（Ｓ６０４）。本変形例では、演算システム１は、内部メモリ１２に読み出した当該行ベクトルデータと、当該列ベクトルデータをサンプリングにより当該行ベクトルデータの行成分数に合わせるようにデータ変換した列ベクトルデータとの行列積を演算する。
【００８５】
次いで、本変形例に係る演算システム１は、内部メモリ１２に読み出した重みデータの一部である当該行ベクトルデータに対して、外部メモリ２０に配置された全ての入力データで行列積を演算済みか否か判定する（Ｓ６０５）。
【００８６】
ステップＳ６０５において演算済みでない場合（Ｓ６０５でＮｏ）、本変形例に係る演算システム１は、ステップＳ６０３に戻り、外部メモリ２０から、入力データの当該一部と異なる一部を、１以上の列ベクトルデータとして内部メモリ１２に読み出す。そして、ステップＳ６０４の処理を行う。
【００８７】
一方、ステップＳ６０５において演算済みの場合（Ｓ６０５でＹｅｓ）、本変形例に係る演算システム１は、外部メモリ２０に配置する全ての重みデータで行列積を演算済みか否か判定する（Ｓ６０６）。
【００８８】
ステップＳ６０６において演算済みでない場合（Ｓ６０６でＮｏ）、本変形例に係る演算システム１は、ステップＳ６０２に戻り、外部メモリ２０から、重みデータの当該一部と異なる一部を、１以上の行ベクトルデータとして内部メモリ１２に読み出す。そして、ステップＳ６０３以降の処理を行う。
【００８９】
一方、ステップＳ６０６において演算済みの場合（Ｓ６０６でＹｅｓ）、本変形例に係る演算システム１は、ステップＳ６の処理を終了する。
【００９０】
このようにして、本変形例に係る演算システム１は、重みデータを、全体として、外部メモリ２０から内部メモリ１２に一度だけ読み出して、第２の演算モードでの畳み込み演算を実行する。
【００９１】
なお、図１１を用いて、重みデータを全体として内部メモリ１２に一度だけ読み出して、第２の演算モードでの畳み込み演算を実行する場合の処理について説明したが、これに限らない。入力データを、全体として、外部メモリ２０から内部メモリ１２に一度だけ読み出して、第２の演算モードでの畳み込み演算を実行するとしてもよい。この場合、ステップＳ６０２で入力データの一部を列ベクトルデータとして読み出し、ステップＳ６０３で重みデータの一部を行ベクトルデータとして読み出せばよい。そして、ステップＳ６０５では列ベクトルデータに対して全ての重みデータで演算済みか否かを判定し、ステップＳ６０６では全ての入力データに対して演算済みか否かを判定すればよい。
【００９２】
［効果等］
図１２は、変形例に係る第２の演算モードでの演算方法の効果を説明するための図である。図１０と同様の要素には同一の符号を付している。
【００９３】
図１２に示すように、第２の演算モードでの演算方法では、入力データが内部メモリ１２に収まらないので、入力データを外部メモリ２０に配置する。また、本変形例では、重みデータの全部も内部メモリ１２に配置できないので、重みデータの一部を内部メモリ１２に配置し、残りを外部メモリ２０に配置する。このため、入力データを、外部メモリ２０から一部読み出して内部メモリ１２の一部領域であるバッファに格納し、このバッファから積和演算部１１１へ繰り返し供給する。同様に、重みデータの一部を、内部メモリ１２から繰り返し読み出して積和演算部１１１に供給する。このようにして、入力データ全体または重みデータ全体が、外部メモリ２０から１回だけ読み出されるようにすることができる。
【００９４】
例えば、内部メモリ１２と外部メモリ２０に跨って配置される重みデータは全体を何回もループしながら読み出して使われてもよい。この場合、外部メモリ２０に配置される入力データは、全体を外部メモリ２０から１回だけ読み出すことになるように、一部ずつ内部メモリ１２のバッファに格納され、バッファを何回もループしながら使われることになる。
【００９５】
また、例えば、上述したように、内部メモリ１２と外部メモリ２０に跨って配置される入力データの全体を何回もループしながら読み出して使ってもよい。この場合、外部メモリ２０に配置される重みデータは、全体を外部メモリ２０から１回だけ読み出すことになるように、一部ずつ内部メモリ１２のバッファに格納され、バッファを何回もループしながら使われることになる。
【００９６】
図１２に示す第２の演算モードでの演算方法では、内部メモリ１２のバッファに、入力データの一部が１以上の列ベクトルデータとして格納されて、行列積が演算されるので、出力データは縦方向に生成されながら内部メモリ１２に格納されている。なお、出力データが内部メモリ１２に収まらない場合には、外部メモリ２０に出力すればよい。
【００９７】
これにより、限られた容量の内部メモリ１２であっても、消費電力の大きい外部メモリからの入力データまたは重みデータの読み出し回数を最小にすることができるので、消費電力をより抑制しながら畳み込み演算を行うことができる。
【００９８】
［その他の実施の形態等］
以上、本開示の態様に係る演算方法について、実施の形態に基づいて説明したが、本開示は、この実施の形態に限定されるものではない。例えば、本明細書において記載した構成要素を任意に組み合わせて、また、構成要素のいくつかを除外して実現される別の実施の形態を本開示の実施の形態としてもよい。また、上記実施の形態に対して本開示の主旨、すなわち、請求の範囲に記載される文言が示す意味を逸脱しない範囲で当業者が思いつく各種変形を施して得られる変形例も本開示に含まれる。
【００９９】
また、以下に示す形態も、本開示の一つまたは複数の態様の範囲内に含まれてもよい。
【０１００】
（１）上記の演算システムを構成する構成要素の一部は、マイクロプロセッサ、ＲＯＭ、ＲＡＭ、ハードディスクユニット、ディスプレイユニット、キーボード、マウスなどから構成されるコンピュータシステムであってもよい。前記ＲＡＭまたはハードディスクユニットには、コンピュータプログラムが記憶されている。前記マイクロプロセッサが、前記コンピュータプログラムにしたがって動作することにより、その機能を達成する。ここでコンピュータプログラムは、所定の機能を達成するために、コンピュータに対する指令を示す命令コードが複数個組み合わされて構成されたものである。
【０１０１】
（２）上記の演算システムを構成する構成要素の一部は、１個のシステムＬＳＩ（Ｌａｒｇｅ  Ｓｃａｌｅ  Ｉｎｔｅｇｒａｔｉｏｎ：大規模集積回路）から構成されているとしてもよい。システムＬＳＩは、複数の構成部を１個のチップ上に集積して製造された超多機能ＬＳＩであり、具体的には、マイクロプロセッサ、ＲＯＭ、ＲＡＭなどを含んで構成されるコンピュータシステムである。前記ＲＡＭには、コンピュータプログラムが記憶されている。前記マイクロプロセッサが、前記コンピュータプログラムにしたがって動作することにより、システムＬＳＩは、その機能を達成する。
【０１０２】
（３）上記の演算システムを構成する構成要素の一部は、各装置に脱着可能なＩＣカードまたは単体のモジュールから構成されているとしてもよい。前記ＩＣカードまたは前記モジュールは、マイクロプロセッサ、ＲＯＭ、ＲＡＭなどから構成されるコンピュータシステムである。前記ＩＣカードまたは前記モジュールは、上記の超多機能ＬＳＩを含むとしてもよい。マイクロプロセッサが、コンピュータプログラムにしたがって動作することにより、前記ＩＣカードまたは前記モジュールは、その機能を達成する。このＩＣカードまたはこのモジュールは、耐タンパ性を有するとしてもよい。
【０１０３】
（４）また、上記の演算システムを構成する構成要素の一部は、前記コンピュータプログラムまたは前記デジタル信号をコンピュータで読み取り可能な記録媒体、例えば、フレキシブルディスク、ハードディスク、ＣＤ−ＲＯＭ、ＭＯ、ＤＶＤ、ＤＶＤ−ＲＯＭ、ＤＶＤ−ＲＡＭ、ＢＤ（Ｂｌｕ−ｒａｙ（登録商標）  Ｄｉｓｃ）、半導体メモリなどに記録したものとしてもよい。また、これらの記録媒体に記録されている前記デジタル信号であるとしてもよい。
【０１０４】
また、上記の演算システムを構成する構成要素の一部は、前記コンピュータプログラムまたは前記デジタル信号を、電気通信回線、無線または有線通信回線、インターネットを代表とするネットワーク、データ放送等を経由して伝送するものとしてもよい。
【０１０５】
（５）本開示は、上記に示す方法であるとしてもよい。また、これらの方法をコンピュータにより実現するコンピュータプログラムであるとしてもよいし、前記コンピュータプログラムからなるデジタル信号であるとしてもよい。
【０１０６】
（６）また、本開示は、マイクロプロセッサとメモリを備えたコンピュータシステムであって、前記メモリは、上記コンピュータプログラムを記憶しており、前記マイクロプロセッサは、前記コンピュータプログラムにしたがって動作するとしてもよい。
【０１０７】
（７）また、前記プログラムまたは前記デジタル信号を前記記録媒体に記録して移送することにより、または前記プログラムまたは前記デジタル信号を、前記ネットワーク等を経由して移送することにより、独立した他のコンピュータシステムにより実施するとしてもよい。
【０１０８】
（８）上記実施の形態及び上記変形例をそれぞれ組み合わせるとしてもよい。
【産業上の利用可能性】
【０１０９】
本開示は、演算方法に利用でき、特に、画像認識を行う大規模な畳み込みニューラルネットワークの畳み込み層の畳み込み演算を低消費電力で処理する方法及び回路技術として用いられる演算方法に利用できる。
【符号の説明】
【０１１０】
１    演算システム
１０    回路
１１    演算器
１２    内部メモリ
２０    外部メモリ
３０    判定部
４０    制御部
５０    出力部
６０    畳み込みニューラルネットワーク
１１１    積和演算部
１１２    データ変換部
【図１】
2019234794.tif 000003
【図２】
2019234794.tif 000004
【図３Ａ】
2019234794.tif 000005
【図３Ｂ】
2019234794.tif 000006
【図４Ａ】
2019234794.tif 000007
【図４Ｂ】
2019234794.tif 000008
【図５】
2019234794.tif 000009
【図６】
2019234794.tif 000010
【図７】
2019234794.tif 000011
【図８】
2019234794.tif 000012
【図９】
2019234794.tif 000013
【図１０】
2019234794.tif 000014
【図１１】
2019234794.tif 000015
【図１２】
2019234794.tif 000016
【国際調査報告】
2019234794.tif 000017
2019234794.tif 000018