(57)【要約】      （修正有）【課題】ニューラルネットワークのコンボルーション演算を効率的に処理する方法及び装置を提供する。【解決手段】ニューラルネットワーク装置１００は、少なくとも１つのプログラムが保存されたメモリ１２０と、少なくとも１つのプログラムを実行することによりニューラルネットワークのコンボルーション演算を処理するプロセッサ１１０と、を含む。プロセッサは、カーネルのウェイトそれぞれと入力フィーチャマップとの演算を実行して出力値を生成し、ウェイトのカーネル内位置を基に設定された出力フィーチャマップ内位置において、出力値を累算して出力フィーチャマップを生成する。【選択図】図３
2020107338.tif 000002
【特許請求の範囲】
【請求項１】
ニューラルネットワーク装置であって、
少なくとも１つのプログラムが保存されたメモリと、
前記少なくとも１つのプログラムを実行することにより、ニューラルネットワークのコンボルーション演算を処理するプロセッサと、を含み、
前記プロセッサは、
カーネルのウェイトそれぞれと入力フィーチャマップとの演算を行い、出力値を生成し、
前記ウェイトの前記カーネル内位置を基に設定された出力フィーチャマップ内位置において、前記出力値を累算し、前記出力フィーチャマップを生成する、
ように構成されている、ニューラルネットワーク装置。
【請求項２】
前記プロセッサは、
前記入力フィーチャマップと、前記カーネルの第１ウェイトとの演算を行い、第１出力値を生成し、
前記第１ウェイトの前記カーネル内位置を基に設定された前記出力フィーチャマップ内第１位置において、前記第１出力値を累算し、
前記入力フィーチャマップと、前記カーネルの第２ウェイトとの演算を行い、第２出力値を生成し、
前記第２ウェイトの前記カーネル内位置を基に設定された前記出力フィーチャマップ内第２位置において、前記第２出力値を累算する、
ように構成されている、請求項１に記載のニューラルネットワーク装置。
【請求項３】
前記プロセッサは、
前記入力フィーチャマップの第１領域と、前記カーネルのウェイトそれぞれとの演算を行い、第１出力値を生成し、
前記ウェイトの前記カーネル内位置を基に設定された第１部分出力フィーチャマップ内位置において、前記第１出力値を累算し、前記第１部分出力フィーチャマップを生成し、
前記出力フィーチャマップ上において、前記第１部分出力フィーチャマップを累算する、
ように構成されている、請求項１に記載のニューラルネットワーク装置。
【請求項４】
前記プロセッサは、
前記第１領域とは異なる領域である前記入力フィーチャマップの第２領域と、前記カーネル内ウェイトそれぞれとの演算を行い、第２出力値を生成し、
前記ウェイトの前記カーネル内位置を基に設定された第２部分出力フィーチャマップ内位置において、前記第２出力値を累算し、前記第２部分出力フィーチャマップを生成し、
前記出力フィーチャマップ上において、前記第２部分出力フィーチャマップを累算する、
ように構成されている、請求項３に記載のニューラルネットワーク装置。
【請求項５】
記第１領域は、前記入力フィーチャマップ内においてｎピクセル、（ｎ×ｍ）ピクセル、（ｎ×ｍ×ｌ）ピクセルのうち少なくとも一つによって構成された領域であり、
ｎ、ｍ、及びｌは、１以上の自然数である、
ことを特徴とする請求項３に記載のニューラルネットワーク装置。
【請求項６】
前記プロセッサは、
前記カーネル内第１ウェイトがゼロである場合、前記入力フィーチャマップと前記第１ウェイトとの演算を省略する、
ように構成されている、請求項１に記載のニューラルネットワーク装置。
【請求項７】
前記プロセッサは、
前記メモリから圧縮された入力フィーチャマップを、ストリームのように連続的に読み取り、前記カーネルのウェイトそれぞれと、前記圧縮された入力フィーチャマップとの演算を行う、
ように構成されている、請求項１に記載のニューラルネットワーク装置。
【請求項８】
前記プロセッサは、
前記入力フィーチャマップの複数領域のうち互いに異なる領域と、前記カーネルとの演算を行い、部分出力フィーチャマップを生成する複数の演算ユニットと、
前記部分出力フィーチャマップのうち、必要とする部分出力フィーチャマップを累算し、前記出力フィーチャマップの複数領域それぞれを生成する複数の出力ユニットと、を含む、
ことを特徴とする請求項１に記載のニューラルネットワーク装置。
【請求項９】
前記複数の演算ユニットそれぞれは、
互いに独立して並列的に、前記カーネルと前記互いに異なる領域との演算を行うことを特徴とする請求項８に記載のニューラルネットワーク装置。
【請求項１０】
前記ニューラルネットワーク装置は、さらに、
バス、を含み、
前記複数の出力ユニットは、
前記バスを介して、前記複数の演算ユニットから、必要とする出力フィーチャマップを受信する、
ことを特徴とする請求項８に記載のニューラルネットワーク装置。
【請求項１１】
前記複数の演算ユニットそれぞれは、
前記複数の領域における１領域と、複数のカーネルそれぞれとの演算を行い、部分出力フィーチャマップを生成する複数のプロセッシングユニットを含む、
ことを特徴とする請求項８に記載のニューラルネットワーク装置。
【請求項１２】
前記複数のプロセッシングユニットは、
前記１領域と第１カーネルとの演算を行う第１プロセッシングユニットと、
前記１領域と第２カーネルとの演算を行う第２プロセッシングユニットと、を含み、
前記第１プロセッシングユニットは、前記１領域と前記１カーネルとの演算を完了した後で、前記１領域と前記第２カーネルとの演算のうち一部を、前記第２プロセッシングユニットの代わりに遂行する、
ことを特徴とする請求項１１に記載のニューラルネットワーク装置。
【請求項１３】
ニューラルネットワークのコンボルーション演算を処理する方法であって、
カーネルのウェイトそれぞれと入力フィーチャマップとの演算を行い、出力値を生成する段階と、
前記ウェイトの前記カーネル内位置を基に設定された出力フィーチャマップ内位置において、前記出力値を累算し、前記出力フィーチャマップを生成する段階と、
を含む、方法。
【請求項１４】
前記出力値を生成する段階は、
前記入力フィーチャマップと、前記カーネルの第１ウェイトとの演算を行い、第１出力値を生成する段階と、
前記入力フィーチャマップと、前記カーネルの第２ウェイトとの演算を行い、第２出力値を生成する段階と、を含み、
前記出力フィーチャマップを生成する段階は、
前記第１ウェイトの前記カーネル内位置を基に設定された前記出力フィーチャマップ内第１位置において、前記第１出力値を累算する段階と、
前記第２ウェイトの前記カーネル内位置を基に設定された前記出力フィーチャマップ内第２位置において、前記第２出力値を累算する段階と、
を含む、ことを特徴とする請求項１３に記載の方法。
【請求項１５】
前記出力値を生成する段階は、
前記入力フィーチャマップの第１領域と、前記カーネルのウェイトそれぞれとの演算を行い、第１出力値を生成する段階と、
前記第１領域とは異なる領域である前記入力フィーチャマップの第２領域と、前記カーネル内ウェイトそれぞれとの演算を行い、第２出力値を生成する段階と、を含み、
前記出力フィーチャマップを生成する段階は、
前記ウェイトの前記カーネル内位置を基に設定された第１部分出力フィーチャマップ内位置において、前記第１出力値を累算し、前記第１部分出力フィーチャマップを生成し、前記出力フィーチャマップ上において、前記第１部分出力フィーチャマップを累算する段階と、
前記ウェイトの前記カーネル内位置を基に設定された第２部分出力フィーチャマップ内位置において、前記第２出力値を累算し、前記第２部分出力フィーチャマップを生成し、前記出力フィーチャマップ上において、前記第２部分出力フィーチャマップを累算する段階と、
を含む、ことを特徴とする請求項１３に記載の方法。
【請求項１６】
前記出力値を生成する段階は、
前記カーネル内第１ウェイトがゼロである場合に、前記入力フィーチャマップと前記第１ウェイトとの演算を省略する、
ことを特徴とする請求項１３に記載の方法。
【請求項１７】
前記出力値を生成する段階は、
圧縮された入力フィーチャマップを、ストリームのように連続的に読み取り、前記カーネルのウェイトそれぞれと、前記圧縮された入力フィーチャマップとの演算を行う段階、
を含む、ことを特徴とする請求項１３に記載の方法。
【請求項１８】
前記入力フィーチャマップの複数領域のうち互いに異なる領域と、前記カーネルとの演算を行い、部分出力フィーチャマップを生成する段階と、
前記部分出力フィーチャマップのうち、必要とする部分出力フィーチャマップを累算し、前記出力フィーチャマップの複数領域それぞれを生成する段階と、
を含む、ことを特徴とする請求項１３に記載の方法。
【請求項１９】
前記部分出力フィーチャマップを生成する段階は、
前記複数の領域における１領域と、複数のカーネルそれぞれとの演算を行い、部分出力フィーチャマップを生成する段階、
を含む、ことを特徴とする請求項１８に記載の方法。
【請求項２０】
記録媒体請求項
請求項１３ないし１９のうちいずれか一項に記載の方法をコンピュータで実行させるためのプログラムを記録したコンピュータで読み取り可能な記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ニューラルネットワークのコンボルーション演算を処理する方法及びその装置に関する。
【背景技術】
【０００２】
ニューラルネットワーク（neural  network）は、生物学的脳をモデリングしたコンピュータ科学的アーキテクチャ（computational  architecture）を参照する。最近、ニューラルネットワーク技術の発展により、多様な種類の電子システムにおいて、ニューラルネットワーク装置を使用し、入力データを分析して有効な情報を抽出している。
【０００３】
ニューラルネットワーク装置は、入力データに対する多量の演算を行う。そのようなニューラルネットワーク演算を効率的に処理することができる技術が研究されている。
【発明の概要】
【発明が解決しようとする課題】
【０００４】
本発明が解決しようとする課題は、ニューラルネットワークのコンボルーション演算を処理する方法及びその装置を提供するところにある。本実施形態がなすべき技術的課題は、前述のような技術的課題に限定されるものではなく、以下の実施形態から他の技術的課題が類推されもする。
【課題を解決するための手段】
【０００５】
一側面により、ニューラルネットワーク装置は、少なくとも１つのプログラムが保存されたメモリと、少なくとも１つのプログラムを実行することにより、ニューラルネットワークのコンボルーション演算を処理するプロセッサと、を含み、該プロセッサは、カーネルのウェイトそれぞれと入力フィーチャマップとの演算を実行して出力値を生成し、ウェイトのカーネル内位置を基に設定された出力フィーチャマップ内位置において、出力値を累算して出力フィーチャマップを生成することができる。
【０００６】
他の側面により、ニューラルネットワークのコンボルーション演算を処理する方法は、カーネルのウェイトそれぞれと入力フィーチャマップとの演算を実行して出力値を生成する段階と、ウェイトのカーネル内位置を基に設定された出力フィーチャマップ内位置において、出力値を累算して出力フィーチャマップを生成することができる。
【０００７】
さらに他の側面により、ニューラルネットワークのコンボルーション演算を処理する方法を具現化するためのプログラムが記録されたコンピュータで読み取り可能な記録媒体が提供される。
【発明の効果】
【０００８】
本実施形態によれば、メモリから読み取った入力フィーチャマップを再使用して出力フィーチャマップを生成するが、効率的なコンボルーション演算を行うことができ、特に、カーネルサイズと関係なく、入力フィーチャマップをメモリから読み取る回数を１回に最小化させることができる。また、入力フィーチャマップとカーネルそれぞれとの演算が行われるが、ゼロスキッピング（zero  skipping）を介して、ゼロ値を有するウェイトの個数のサイクル（cycle）だけ入力ピッチャーマップとカーネルとの演算時間を短縮させることができる。
【０００９】
また、本実施形態によれば、プロセッサは、入力フィーチャマップだけではなく、圧縮された入力フィーチャマップ、または圧縮された入力フィーチャマップの一領域も、連続したストリーム（stream）のように読み出し、コンボルーション演算を行うことができるが、コンボルーション演算速度を速めることができる。特に、圧縮された入力フィーチャマップは、非ゼロ（non-zero）値を有するピクセルによっても構成されるが、本実施形態によれば、圧縮された入力フィーチャマップとカーネルとの演算を行い、ゼロスキッピングを具現化することができ、結果として、メモリ帯域幅を狭めることができる。
【００１０】
また、本実施形態によれば、複数の演算ユニットそれぞれが、入力フィーチャマップの複数領域のうち互いに異なる領域について、互いに独立して並列的な演算を行うが、ニューラルネットワークのコンボルーション演算を効率的に処理することができる。
【図面の簡単な説明】
【００１１】
【図１】一実施形態によるニューラルネットワークのアーキテクチャについて説明するための図面である。
【図２Ａ】ニューラルネットワークのコンボルーション演算の例示について説明するための図面である。
【図２Ｂ】ニューラルネットワークのコンボルーション演算の例示について説明するための図面である。
【図２Ｃ】ニューラルネットワークのコンボルーション演算の例示について説明するための図面である。
【図３】一実施形態によるニューラルネットワーク装置のハードウェア構成を図示したブロック図である。
【図４】プロセッサが入力フィーチャマップを再使用して出力フィーチャマップを生成する実施形態を示す図面である。
【図５】プロセッサが入力フィーチャマップの一領域を再使用し、部分出力フィーチャマップを生成する実施形態を示す図面である。
【図６】プロセッサが部分出力フィーチャマップを生成する具体的な実施形態を示す図面である。
【図７】カーネルとの演算のための入力フィーチャマップの多様な形態の領域の実施形態を示す図面である。
【図８】プロセッサが入力フィーチャマップの一領域を再使用し、部分出力フィーチャマップを生成する他の実施形態を示す図面である。
【図９】プロセッサがカーネルの一部のみを利用し、部分出力フィーチャマップを生成する実施形態を示す図面である。
【図１０】プロセッサが、圧縮された入力フィーチャマップを、ストリームのように読み出し、コンボルーション演算を行う実施形態を示す図面である。
【図１１】プロセッサのハードウェア構成を図示した一実施形態を示す図面である。
【図１２】プロセッサのハードウェア構成を図示した他の実施形態を示す図面である。
【図１３】プロセッサのハードウェア構成を図示したさらに他の実施形態を示す図面である。
【図１４】プロセッサの演算ユニットが、カーネルと、入力フィーチャマップの領域それぞれとの演算を行う実施形態を示す図面である。
【図１５】プロセッサの演算ユニットが、カーネルと、入力フィーチャマップの領域それぞれとの演算を行う他の実施形態を示す図面である。
【図１６】一実施形態により、ニューラルネットワーク装置の動作方法について説明するための図面である。
【発明を実施するための形態】
【００１２】
本実施形態で使用される用語は、可能な限り、現在汎用される一般的な用語を選択したが、それは、当分野の当業者の意図、判例、または新たな技術の出現などによっても異なる。また、特定の場合、出願人が任意に選定した用語もあり、その場合、当該説明部分において、詳細にその意味を記載する。従って、明細書で使用される用語は、単なる用語の名称ではなく、その用語が有する意味と、明細書の全般にわたる内容とを基に定義されなければならない。
【００１３】
明細書全体において、ある部分がある構成要素を「含む」とするとき、それは、特に明記しない限り、他の構成要素を除くものではなく、他の構成要素をさらに含んでもよいということを意味する。また、明細書に記載された「…部」、「…モジュール」というような用語は、少なくとも１つの機能や動作を処理する単位を意味し、それは、ハードウェアまたはソフトウェアによっても具現化され、ハードウェアとソフトウェアとの結合によっても具現化される。
【００１４】
本実施形態は、ニューラルネットワークのコンボルーション演算を処理する方法及びその装置に係わるものであり、以下の実施形態が属する技術分野において当業者に広く知られている事項については、詳細な説明を省略する。
図１は、一実施形態によるニューラルネットワークのアーキテクチャについて説明するための図面である。
【００１５】
図１を参照すると、ニューラルネットワーク１は、ディープニューラルネットワーク（ＤＮＮ：deep  neural  network）またはｎ階層ニューラルネットワーク（n-layers  neural  networks）のアーキテクチャでもある。ＤＮＮまたはｎ階層ニューラルネットワークは、コンボルーションニューラルネットワーク（ＣＮＮ：convolutional  neural  networks、ＣＮＮ）、リカレントニューラルネットワーク（ＲＮＮ：recurrent  neural  networks）、Deep  Belief  Networks、Restricted  Boltzman  Machines、フリコネクティッドニューラルネットワーク（ＦＣＮ：fully-connected  network、ＦＣＮ）、デープコンボルーションネットワーク（deep  convolutional  network）、ＬＳＴＭ（long  short-term  memory）ネットワーク、ＧＲＵ（grated  recurrent  unit）などに該当する。例えば、ニューラルネットワーク１は、コンボルーションニューラルネットワーク（ＣＮＮ）によっても具現化されるが、それに制限されるものではない。図１においては、ニューラルネットワーク１の例示に該当するコンボルーションニューラルネットワークにおける一部のコンボルーションレイヤが図示されているが、該コンボルーションニューラルネットワークは、図示されたコンボルーションレイヤ以外にも、プーリングレイヤ（pooling  layer）、フリコネクティッド（fully  connected）レイヤなどをさらに含んでもよい。
【００１６】
ニューラルネットワーク１は、入力イメージ、フィーチャマップ（feature  maps）、及び出力を含む複数レイヤを有するアーキテクチャによっても具現化される。ニューラルネットワーク１において入力イメージは、カーネル（kernel）と呼ばれるフィルタとのコンボルーション演算が行われ、その結果、フィーチャマップが出力される。このとき、生成された出力フィーチャマップは、入力フィーチャマップとして、さらにカーネルとのコンボルーション演算が行われ、新たなフィーチャマップが出力される。そのようなコンボルーション演算が反復的に行われた結果、最終的には、ニューラルネットワーク１を介した入力イメージの特徴に係わる認識結果が出力される。
【００１７】
例えば、図１のニューラルネットワーク１に、２４×２４ピクセルサイズのイメージが入力された場合、該入力イメージは、カーネルとのコンボルーション演算を介して、２０×２０ピクセルサイズを有する４チャネルのフィーチャマップとしても出力される。その後にも、２０×２０フィーチャマップは、カーネルとの反復的なコンボルーション演算を介してサイズが小さくなりながら、最終的には、１×１ピクセルサイズの特徴が出力される。ニューラルネットワーク１は、多くのレイヤにおいて、コンボルーション演算及びサブサンプリング（または、プーリング）演算を反復的に行うことにより、入力イメージから、イメージ全体を代表することができる強靭な特徴をフィルタリングして出力し、出力された最終特徴を介して、入力イメージの認識結果を導き出すことができる。
他の例として、ニューラルネットワーク１は、入力イメージの代わりに、入力ソース文章（input  source  sentence）（例えば、音声入力）を受信することができる。そのような例において、カーネルと共に、入力ソース文章に対して、コンボルーション演算が行われ、その結果、フィーチャマップが出力される。このとき、生成された出力フィーチャマップは、入力フィーチャマップとして、さらにカーネルとのコンボルーション演算が行われ、新たなフィーチャマップが出力される。そのように、コンボルーション動作が反復して遂行される結果、ニューラルネットワーク１を介して、入力ソース文章の特徴に係わる認識結果が出力される。
【００１８】
図２Ａ、図２Ｂ及び図２Ｃは、ニューラルネットワークのコンボルーション演算の例示について説明するための図面である。
【００１９】
図２Ａの例示において、入力フィーチャマップ２１０は、６×６ピクセルサイズであり、カーネル２２０は、３×３ピクセルサイズであり、出力フィーチャマップ２３０は、４×４ピクセルサイズであると仮定するが、それらに制限されるものではなく、ニューラルネットワークは、多様なサイズのフィーチャマップ及びカーネルによっても具現化される。また、入力フィーチャマップ２１０、カーネル２２０及び出力フィーチャマップ２３０によって定義された値は、いずれも例示的な値であるだけであって、本実施形態は、それらに制限されるものではない。
【００２０】
カーネル２２０は、入力フィーチャマップ２１０において、３×３ピクセルサイズの領域（または、タイル）単位でスライディングしながら、コンボルーション演算を行う。該コンボルーション演算は、入力フィーチャマップ２１０のある領域の各ピクセル値と、カーネル２２０において対応する位置の各エレメントのウェイト（weight）との乗算を実行して獲得された値をいずれも合算し、出力フィーチャマップ２３０の各ピクセル値を求める演算を意味する。具体的には、カーネル２２０は、まず、入力フィーチャマップ２１０の第１領域２１１とコンボルーション演算を行う。すなわち、第１領域２１１の各ピクセル値１，２，３，４，５，６，７，８，９は、それぞれカーネル２２０の各エレメントのウェイト−１，−３，＋４，＋７，−２，−１，−５，＋３，＋１とそれぞれ乗じられ、その結果として、−１、−６、１２、２８、−１０、−６、−３５、２４、９が獲得される。次に、獲得された値１，−６，１２，２８，−１０，−６，−３５，２４，９をいずれも加えた結果である１５が計算され、出力フィーチャマップ２３０の１行１列のピクセル値２３１は、１５に決定される。ここで、出力フィーチャマップ２３０の１行１列のピクセル値２３１は、第１領域２１１に対応する。同じ方式により、入力フィーチャマップ２１０の第２領域２１２とカーネル２２０とのコンボルーション演算が行われることにより、出力フィーチャマップ２３０の１行２列のピクセル値２３２である４が決定される。最終的に、入力フィーチャマップ２１０の最後のウィンドウである第１６領域２１３とカーネル２２０とのコンボルーション演算が行われることにより、出力フィーチャマップ２３０の４行４列のピクセル値２３３である１１が決定される。
【００２１】
すなわち、１つの入力フィーチャマップ２１０と１つのカーネル２２０とのコンボルーション演算は、入力フィーチャマップ２１０及びカーネル２２０で互いに対応する各エレメント値の乗算、及び乗算結果の合算を反復的に行うことによっても処理され、コンボルーション演算の結果として、出力フィーチャマップ２３０が生成される。
【００２２】
図２Ｂの例示において、入力フィーチャマップ２５０は、１×１ピクセルサイズであり、カーネル２６０は、３×３ピクセルサイズであり、出力フィーチャマップ２７０は、３×３ピクセルサイズであると仮定するが、それらに制限されるものではなく、ニューラルネットワークは、多様な値を有する多様なサイズのフィーチャマップ及びカーネルによっても具現化されることができる。
【００２３】
カーネル２６０は、入力フィーチャマップ２５０において、３×３ピクセルサイズの領域（または、タイル）単位でスライディングしながら、コンボルーション演算を行う。具体的には、カーネル２６０は、入力フィーチャマップ２５０の第１領域２５１とコンボルーション演算を行う。すなわち、第１領域２５１の唯一のピクセル値９と、カーネル２６０のウェイト＋１とが乗ぜられ、その結果値９が、出力フィーチャマップ２７０の第１行第１列のピクセル値２７１に決定される。
【００２４】
同様に、入力フィーチャマップ２５０の第２領域２５２と、カーネル２６０とのコンボルーション演算が行われ、出力フィーチャマップ２７０の第１行第２列のピクセル値２７２が２７に決定される。最終的に、入力フィーチャマップ２５０の最後の領域である第９領域２５３と、カーネル２６０とのコンボルーション演算が行われ、出力フィーチャマップ２７０の第３行第３列のピクセル値２７３が−９に決定される。
一方、図２Ａ及び図２Ｂにおいては、二次元コンボルーション演算について説明されたが、コンボルーション演算は、複数チャネルの入力フィーチャマップ、カーネル、出力フィーチャマップが存在する三次元コンボルーション演算に該当する。それについては、図２Ｃを参照して説明する。
【００２５】
図２Ｃを参照すると、入力フィーチャマップ２０１は、Ｘ個のチャネルが存在し、各チャネルの入力フィーチャマップは、Ｈ行Ｗ列のサイズを有することができる（Ｘ、Ｗ、Ｈは、自然数）。カーネル２０２それぞれは、Ｒ行Ｓ列のサイズを有し、カーネル２０２は、入力フィーチャマップ２０１のチャネル数（Ｘ）、及び出力フィーチャマップ２０３のチャネル数（Ｙ）に対応する個数のチャネルを有することができる（Ｒ、Ｓ、Ｙは、自然数）。出力フィーチャマップ２０３は、入力フィーチャマップ２０１とカーネル２０２との三次元コンボルーション演算を介して生成され、該コンボルーション演算により、Ｙ個のチャネルが存在することができる。
【００２６】
１つの入力フィーチャマップと、１つのカーネルとのコンボルーション演算を介して、出力フィーチャマップが生成される過程は、先に図２Ａで説明された通りであり、図２Ａで説明された二次元コンボルーション演算が、全体チャネルの入力フィーチャマップ２０１と、全体チャネルのカーネル２０２との間で反復的に行われることにより、全体チャネルの出力フィーチャマップ２０３が生成される。
図３は、一実施形態によるニューラルネットワーク装置のハードウェア構成を図示したブロック図である。
【００２７】
ニューラルネットワーク装置１００は、例えば、サーバ、モバイル装置、スマートフォン、埋め込み装置、ウェアラブルスマート装置（例えば、指輪、時計、めがね、めがねタイプの装置、腕輪、足首ブラケット（ankle  bracket）、ベルト、ネックレス、イヤリング、鉢巻き、ヘルメット、服に内蔵した装置またはめがねディスプレイ（ＥＧＤ））、コンピュータ装置（例えば、サーバ、ラップトップ、ノート型パソコン、サブノート型パソコン、ネットブック、ウルトラモバイルＰＣ（ＵＭＰＣ）、タブレット個人用コンピュータ、ファブレット（phablet）、携帯インターネット機器（ＭＩＤ）、個人携帯情報端末（ＰＤＡ）、企業情報端末機（ＥＤＡ）、ウルトラモバイル個人コンピュータ（ＵＭＰＣ）、携帯ラップトップＰＣ）、電子製品（例えば、ロボット、デジタルカメラ、デジタルビデオカメラ、携帯用ゲームコンソール、ＭＰ３プレイヤ、携帯用／個人マルチメディアプレイヤ（ＰＭＰ）、携帯用電子書籍、衛星位置確認システム（ＧＰＳ）ナビゲーション、個人ナビゲーション装置、携帯用ナビゲーション装置（ＰＮＤ）、携帯用ゲームコンソール、電子書籍、テレビ（ＴＶ）、高画質テレビ（ＨＤＴＶ）、スマートＴＶ、スマート機器、スマートホーム機器、または保安音声認識を遂行するゲート制御・音声認証システム、拡張現実（ＡＲ）装置、ＩＯＴ装置）、自律走行車両、ロボット装置または医療機器など、ニューラルネットワークを利用し、音声認識、映像認識及び映像分類を行う装置でもあるが、それらに制限されるものではない。本明細書に記載された例は、例えば、自律走行車、自動または自律の走行システム、知能型車両、ＡＤＡＳ（advanced  driver  assistance  system）、車両を補助するナビゲーションシステムのような車両、及び車両が走行する車線を安全に維持させる車量管理システムに適用することができる。本明細書に記載された例は、例えば、拡張現実ヘッドアップディスプレイ（ＡＲ  ３Ｄ  ＨＵＤ）のような車両ナビゲーション装置において、道路案内情報のためにも使用される。また、ニューラルネットワーク装置１００は、前述のようなデバイスに搭載される専用ハードウェアアクセラレータ（ＨＷ  accelerator）に該当する。また、ニューラルネットワーク装置１００は、ニューラルネットワークを駆動するための専用モジュールであるＮＰＵ（neural  processing  unit）、ＴＰＵ（tensor  processing  unit）、Neural  Engineのようなハードウェアアクセラレータでもあるが、それらに限定されるものではない。前述の例は、非制限的なものであり、例えば、訓練、ゲーム、健康管理、公共安全、観光及びマーケティングでの応用のような他の例は、本開示の範囲内にあるものと見なされる。そのような装置は、例えば、音声認識、イメージ認識及びイメージ分類のような１以上の機能を遂行する。
【００２８】
図３を参照すると、ニューラルネットワーク装置１００は、プロセッサ１１０、メモリ１２０及びユーザインターフェース１３０を含む。プロセッサ１１０、メモリ１２０及びユーザインターフェース１３０は、システムバス（system  bus）、または他の適切な回路を介しても互いに連結される。図３に図示されたニューラルネットワーク装置１００には、本実施形態と係わる構成要素だけが図示されている。従って、ニューラルネットワーク装置１００には、図３に図示された構成要素以外に、他の汎用的な構成要素がさらに含まれてもよいことが、当該技術分野の通常の技術者に自明である。
【００２９】
プロセッサ１１０は、ニューラルネットワーク装置１００において、ニューラルネットワークを駆動するための全般的な機能を制御する役割を行う。例えば、プロセッサ１１０は、ニューラルネットワーク装置１００内のメモリ１２０に保存されたプログラムを実行することにより、ニューラルネットワーク装置１００を全般的に制御する。プロセッサ１１０は、図４ないし図６、及び図８ないし図１５を参照して説明する装置のうち少なくとも一つに含まれるか、あるいはそれらを含む。また、プロセッサ１１０は、図１６を参照して説明する方法のうち少なくとも一つを遂行する。プロセッサ１１０は、所望の動作を行うための物理的構造の回路を有するハードウェアによって構成されたデータ処理装置を指す。例えば、前述の所望の動作は、プログラムに含まれたコードまたは命令を含んでもよい。例えば、プロセッサ１１０は、ニューラルネットワーク装置１００内に具備されたＣＰＵ（central  processing  unit）、ＧＰＵ（graphics  processing  unit）、ＡＰ（application  processor）、ＡＳＩＣ（application-specific  integrated  circuit）、ＦＰＧＡ（field  programmable  gate  array）などによっても具現化されるが、それらに制限されるものではない。
【００３０】
メモリ１２０は、ニューラルネットワーク装置１００内で処理される各種データを保存するハードウェアであり、メモリ１２０は、ニューラルネットワーク装置１００で処理されたデータ、及び処理されるデータを保存することができる。また、メモリ１２０は、ニューラルネットワーク装置１００によって駆動されるアプリケーション、ドライバなどを保存することができる。メモリ１２０は、ＤＲＡＭ（dynamic  random  access  memory）・ＳＲＡＭ（static  random  access  memory）のようなＲＡＭ（random  access  memory）、ＲＯＭ（read-only  memory）、ＥＥＰＲＯＭ（electrically  erasable  programmable  read-only  memory）、ＣＤ−ＲＯＭ（compact  disc  read  only  memory）、ブルーレイ、または他の光学ディスクストレージ、ＨＤＤ（hard  disk  drive）、ＳＳＤ（solid  state  drive）、あるいはフラッシュメモリを含んでもよい。
【００３１】
ユーザインターフェース１３０は、ユーザインターフェースのレンダリング、ディスプレイのレンダリング、情報の出力及び／又はユーザ入力の受信を提供する１以上のハードウェア構成要素を含む物理的構造である。ユーザインターフェース１３０は、ニューラルネットワーク装置１００から受信した結果を出力する。ユーザインターフェース１３０は、コンピュータモニタ、ＥＧＤ（eye  glass  display）のように、ニューラルネットワーク装置１００に動作自在に連結されるものであるならば、制限なしに含まれてもよい。
プロセッサ１１０は、コンボルーション演算のための演算ユニットと、キャッシュ（cache）機能を担当するオンチップ（on-chip）メモリを含んでもよい。
【００３２】
プロセッサ１１０は、メモリ１２０から、オンチップメモリに保存された（または、バッファリングされた）入力フィーチャマップのピクセル値、カーネルのウェイトなどを利用し、入力フィーチャマップとカーネルとのコンボルーション演算を処理する。プロセッサ１１０内において、演算ユニット及びオンチップメモリそれぞれは、１以上ずつ具備され、１以上の演算ユニット及びオンチップメモリそれぞれは、並列的に、独立的にコンボルーション演算を処理するのに利用されることにより、コンボルーション演算が効率的に処理される。
【００３３】
プロセッサ１１０の演算ユニット内には、コンボルーション演算のためのロジック回路が具備される。言い換えれば、プロセッサ１１０の演算ユニットは、乗算器（multiplier）、加算器（adder）及び累算器（accumulator）の組み合わせによって具現化された演算器を含んでもよい。また、該乗算器は、多数のサブ乗算器の組み合わせによっても具現化され、また加算器も、多数のサブ加算器の組み合わせによっても具現化される。
【００３４】
プロセッサ１１０の演算ユニットは、入力フィーチャマップのピクセル値、カーネルのウェイトのような多様なオペランド（operand）をディスパッチするためのディスパッチャ（dispatcher）を具備することができる。該ディスパッチャは、メモリ１２０に保存されている入力フィーチャマップのピクセル値、カーネルのウェイトなどのデータから、演算ユニットが行うコンボルーション演算に必要なピクセル値、ウェイトなどのオペランドを、オンチップメモリにディスパッチする。その後、該ディスパッチャは、オンチップメモリにディスパッチされたオペランドを、コンボルーション演算のために演算ユニット内プロセッシングユニットにさらにディスパッチする。
【００３５】
プロセッサ１１０は、入力フィーチャマップとカーネルとのコンボルーション演算を行い、出力フィーチャマップを生成することができる。効率的なコンボルーション演算のために、まず、プロセッサ１１０は、カーネルのウェイトそれぞれと入力フィーチャマップとの演算を行い、出力値を生成することができる。プロセッサ１１０は、入力フィーチャマップとカーネルのウェイトそれぞれとの演算を行うが、入力フィーチャマップを再使用し、演算を行うことができる。具体的には、プロセッサ１１０は、入力フィーチャマップのピクセル値それぞれに対して、カーネルの第１ウェイトを乗じる演算を行い、第１出力値を生成することができ、プロセッサ１１０は、入力フィーチャマップのピクセル値それぞれに対して、カーネルの第２ウェイトを乗じる演算を行い、第２ウェイトに対応する第２出力値を生成することができる。
【００３６】
次に、プロセッサ１１０は、ウェイトのカーネル内位置を基に設定された出力フィーチャマップ内位置において、出力値を累算し（accumulate）、出力フィーチャマップを生成することができる。言い換えれば、プロセッサ１１０は、設定された出力フィーチャマップ内位置で出力値を累算し、出力値が充填された出力フィーチャマップを生成することができる。プロセッサ１１０は、ウェイトそれぞれのカーネル内位置に基づいて、出力フィーチャマップ内で出力値を累算する位置を設定することができる。具体的には、プロセッサ１１０は、第１ウェイトのカーネル内位置を基に、出力フィーチャマップ内で第１出力値を累算する位置を設定することができ、第２ウェイトのカーネル内位置を基に、出力フィーチャマップ内において、第２出力値を累算する位置を設定することができる。また、入力フィーチャマップとカーネルとの演算が行われる以前に、あらかじめ出力フィーチャマップ内で出力値が累算される位置が設定される。従って、プロセッサ１１０は、第１ウェイトを基に設定された出力フィーチャマップ内位置において、第１出力値を累算し、第２ウェイトを基に設定された出力フィーチャマップ内位置において、第２出力値を累算し、出力フィーチャマップを生成することができる。
【００３７】
従って、プロセッサ１１０は、コンボルーション演算時、メモリ１２０から読み取った入力フィーチャマップを、毎サイクル（cycle）ごとに再使用し、出力フィーチャマップを生成するが、カーネルサイズと関係なく、入力フィーチャマップをメモリ１２０から読み取る回数を、１回に最小化させることができる。
【００３８】
また、プロセッサ１１０は、カーネルの第１ウェイトがゼロ（zero）である場合、入力フィーチャマップと第１ウェイトとの演算は、省略（skip）することができる。具体的には、プロセッサ１１０が毎サイクル（cycle）ごとに、カーネルのウェイトそれぞれと入力フィーチャマップとの演算を順次に行う間、ゼロ値を有する第１ウェイトと、入力フィーチャマップとの演算は、省略することができる。従って、プロセッサ１１０は、ゼロ値を有するウェイトの個数のサイクルだけ入力ピッチャーマップとカーネルとのコンボルーション演算時間を短縮させることができる。
【００３９】
図４は、プロセッサが入力フィーチャマップを再使用し、出力フィーチャマップを生成する実施形態を示す。図４では、説明の便宜上、入力フィーチャマップ４１０は、１×１ピクセル領域でもって図示され、カーネル４２０は、３×３ピクセル領域として図示されているが、それらに制限されるものではなく、入力フィーチャマップ及びカーネルは、互いに異なるサイズを有する領域でもある。
【００４０】
まず、１番目サイクル（cycle）において、プロセッサ１１０は、入力フィーチャマップ４１０と、カーネル４２０の第１ウェイト４２２との演算を行い、第１出力値を生成することができる。具体的には、プロセッサ１１０は、入力フィーチャマップ４１０のピクセル値と、カーネル４２０の第１ウェイト４２２との乗算演算を行い、第１出力値を生成することができる。次に、プロセッサ１１０は、カーネル４２０内第１ウェイト４２２の位置を基に設定された出力フィーチャマップ４３０内位置において、第１出力値を累算することができる。具体的には、カーネル４２０内第１ウェイト４２２の位置に対応する出力フィーチャマップ４３０内位置は、出力フィーチャマップ４３０の３行３列にも設定される。従って、プロセッサ１１０は、第１出力値を出力フィーチャマップ４３０の３行３列において累算することができる。
【００４１】
次に、２番目サイクルにおいて、プロセッサ１１０は、入力フィーチャマップ４１０と、カーネル４２０の第２ウェイト４２４との演算を行い、第２出力値を生成することができる。次に、プロセッサ１１０は、カーネル４２０内第２ウェイト４２４の位置を基に設定された出力フィーチャマップ４３０内位置において、第２出力値を累算することができる。具体的には、カーネル４２０内第２ウェイト４２４の位置に対応する出力フィーチャマップ４３０内位置は、出力フィーチャマップ４３０の３行２列にも設定される。言い換えれば、被演算子であるウェイトが、第１ウェイト４２２から第２ウェイト４２４に右側に１ブロックだけ変更されることにより、出力値を累算するための出力フィーチャマップ４３０内位置が、３行３列から３行２列に、左に１ブロックだけ変更される。従って、プロセッサ１１０は、第２出力値を出力フィーチャマップ４３０の３行２列において累算することができる。
【００４２】
次に、プロセッサ１１０は、３番目サイクルにおいて、入力フィーチャマップ４１０と、カーネル４２０の第３ウェイト４２６との演算を行い、第３出力値を生成することができ、出力フィーチャマップ４３０の３行１列において、第３出力値を累算することができる。また、プロセッサ１１０は、４番目サイクルにおいて、入力フィーチャマップ４１０と、カーネル４２０の第４ウェイト４２８との演算を行い、第４出力値を生成することができ、出力フィーチャマップ４３０の２行３列において、第４出力値を累算することができる。同様に、プロセッサ１１０は、５番目サイクルないし９番目サイクルにおいても、カーネル４２０のウェイトそれぞれと入力フィーチャマップ４１０との演算を行い、出力値を生成することができる。プロセッサ１１０は、カーネル４２０内ウェイト位置と対応する出力フィーチャマップ４３０内位置で出力値を累算し、結果として、出力値が充填された出力フィーチャマップ４３０を生成することができる。
【００４３】
また、図４においては、説明の便宜上、計９回のサイクル間、カーネル４２０のウェイトそれぞれと入力フィーチャマップ４１０との演算が行われるように図示されているが、ゼロ値を有するウェイトと、入力フィーチャマップ４１０との演算は、省略されてもよい。言い換えれば、プロセッサ１１０は、カーネル４２０内において、非ゼロ（non-zero）値を有するウェイトの個数だけ、カーネル４２０のウェイトそれぞれと、入力フィーチャマップ４１０との演算を行うことができる。
【００４４】
従って、プロセッサ１１０は、図２Ａ及び図２Ｂに図示されているように、入力フィーチャマップ内で重複される領域が存在しながら、何回か入力フィーチャマップを読み取り、コンボルーション演算を行う方式ではない、ウェイトのカーネル内位置に基づき、出力フィーチャマップ上で出力値を累算する位置をあらかじめ設定しながら、入力フィーチャマップを毎サイクル（cycle）ごとに再使用する方式を介して、コンボルーション演算を行うが、さらに効率的なコンボルーション演算を行うことができる。
【００４５】
再び図３を参照すると、プロセッサ１１０は、入力フィーチャマップ内第１領域の再使用を基に、カーネル内ウェイトそれぞれと第１領域との演算を行い、第１出力値を生成することができる。次に、プロセッサ１１０は、ウェイトのカーネル内位置を基に設定された第１部分出力フィーチャマップ内位置において、第１出力値を累算し、第１部分出力フィーチャマップを生成することができる。次に、プロセッサ１１０は、出力フィーチャマップ上において、第１部分出力フィーチャマップを累算することができる。具体的には、プロセッサ１１０は、第１領域の入力フィーチャマップ内位置に基づいて、第１部分出力フィーチャマップを累算する出力フィーチャマップ内位置を設定することができ、設定された位置において、第１部分出力フィーチャマップを累算することができる。
【００４６】
また、プロセッサ１１０は、第１領域とは異なる領域である入力フィーチャマップ内第２領域の再使用を基に、カーネル内ウェイトそれぞれと第２領域との演算を行い、第２出力値を生成することができる。次に、プロセッサ１１０は、ウェイトのカーネル内位置を基に設定された第２部分出力フィーチャマップ内位置において、第２出力値を累算し、第２部分出力フィーチャマップを生成することができる。次に、プロセッサ１１０は、出力フィーチャマップ上において、第１部分出力フィーチャマップを累算することができる。具体的には、プロセッサ１１０は、第２領域の入力フィーチャマップ内位置に基づいて、第２部分出力フィーチャマップを累算する出力フィーチャマップ内位置を設定することができ、設定された位置において、第２部分出力フィーチャマップを累算することができる。
同様に、プロセッサ１１０は、第１領域及び第２領域とは異なる領域である入力フィーチャマップ内第Ｎ領域（Ｎは、３以上の自然数）の再使用を基に、カーネル内ウェイトそれぞれと第Ｎ領域との演算を行い、第Ｎ部分出力フィーチャマップを生成することができる。従って、プロセッサ１１０は、出力フィーチャマップ上において、第１部分出力フィーチャマップないし第Ｎ部分出力フィーチャマップを累算し、出力フィーチャマップを生成することができる。
【００４７】
プロセッサ１１０は、部分出力フィーチャマップを生成するために、入力フィーチャマップの１領域内ピクセルそれぞれに対応する乗算器（ＭＵＬ：multiplier）を含み、部分出力フィーチャマップのピクセルそれぞれに対応するマルチプレクサ（ＭＵＸ：multiplexer）、加算器（adder）、及び累算演算器（Acc.  Register：accumulator&register）を含んでもよい。
【００４８】
プロセッサ１１０は、入力フィーチャマップ内の多様な形態の領域を設定することができ、設定された領域と、カーネルとの演算を行い、部分出力フィーチャマップを生成することができる。多様な形態の領域は、ｎピクセル、（ｎ×ｍ）ピクセルまたは（ｎ×ｍ×ｌ）ピクセル（ここで、ｎ、ｍ、ｌは、１以上の自然数である）にもなる。また、該入力フィーチャマップは、二次元の入力フィーチャマップ、または三次元の入力フィーチャマップにもなり、該入力フィーチャマップの領域も、二次元の領域または三次元の領域にもなる。
プロセッサ１１０は、カーネルの一部領域に限定し、入力フィーチャマップの１領域と、カーネルの一部領域との演算を行い、部分出力フィーチャマップを生成することができる。プロセッサ１１０は、カーネルの一部領域に限定して演算を進めるために、部分出力フィーチャマップのサイズを小さくすることができ、結果として、部分出力フィーチャマップに対するバッファサイズを小さくすることができる。例えば、入力フィーチャマップの１領域のサイズが１×１０ピクセル領域であり、カーネルのサイズが３×３ピクセル領域である場合、演算結果である部分出力フィーチャマップは、３×１２ピクセル領域を有さなければならない。その場合、プロセッサ１１０は、カーネルのサイズを１×３ピクセル領域に限定し、コンボルーション演算を進めることができ、その結果、部分出力フィーチャマップは、１×１２ピクセル領域を有するが、部分出力フィーチャマップに対するバッファサイズを小さくすることができる。
【００４９】
図５は、プロセッサが入力フィーチャマップの１領域を再使用し、部分出力フィーチャマップを生成する一実施形態を示す。図５においては、説明の便宜上、入力フィーチャマップ５０１の第１領域５１０は、４×４ピクセル領域として図示され、カーネル５２０は、３×３ピクセル領域として図示されているが、それらに制限されるものではなく、入力フィーチャマップの第１領域及びカーネルは、互いに異なるサイズを有する領域でもある。
【００５０】
まず、１番目サイクルにおいて、プロセッサ１１０は、第１領域５１０と、カーネル５２０の第１ウェイト５２２との演算を行い、第１出力値を生成することができる。具体的には、プロセッサ１１０は、第１領域５１０内ピクセル値それぞれと第１ウェイト５２２との乗算演算を行い、第１出力値を生成することができる。言い換えれば、プロセッサ１１０は、第１領域５１０の１６個のピクセル値それぞれに第１ウェイト５２２を乗じ、１６個の第１出力値を生成することができる。次に、プロセッサ１１０は、カーネル５２０内第１ウェイト５２２の位置を基に設定された第１部分出力フィーチャマップ５３０内位置において、第１出力値を累算することができる。具体的には、カーネル５２０内第１ウェイト５２２の位置に対応する第１部分出力フィーチャマップ５３０内位置は、第１部分出力フィーチャマップ５３０の領域５３２にもなる。従って、プロセッサ１１０は、第１部分出力フィーチャマップ５３０内領域５３２において、第１出力値を累算することができる。言い換えれば、プロセッサ１１０は、第１領域５１０のｎ行ｍ列（ここで、ｎ及びｍは、自然数である）のピクセル値に第１ウェイト５２２を乗じた結果値を、第１部分出力フィーチャマップ５３０内領域５３２のｎ行ｍ列において累算することができる。
【００５１】
次に、２番目サイクルにおいて、プロセッサ１１０は、第１領域５１０と、カーネル５２０の第２ウェイト５２４との演算を行い、第２出力値を生成することができる。次に、プロセッサ１１０は、カーネル５２０内第２ウェイト５２４の位置を基に設定された第１部分出力フィーチャマップ５３０内位置において、第２出力値を累算することができる。具体的には、カーネル５２０内第２ウェイト５２４の位置に対応する第１部分出力フィーチャマップ５３０内位置は、第１部分出力フィーチャマップ５３０の領域５３４にもなる。言い換えれば、被演算子であるウェイトが、第１ウェイト５２２から第２ウェイト５２４に、右側に１ブロックだけ変更されることにより、出力値を累算するための第１部分出力フィーチャマップ５３０内領域が、領域５３２から領域５３４に左に１ブロックだけ変更される。従って、プロセッサ１１０は、第１部分出力フィーチャマップ５３０の領域５３４において、第２出力値を累算することができる。
【００５２】
同様に、プロセッサ１１０は、３番目サイクルないし９番目サイクルにおいても、カーネル５２０のウェイトそれぞれと、第１領域５１０との演算を行い、出力値を生成することができる。プロセッサ１１０は、カーネル５２０内ウェイト位置と対応する第１部分出力フィーチャマップ５３０内領域において出力値を累算し、結果として、第１部分出力フィーチャマップ５３０を生成することができる。
【００５３】
プロセッサ１１０は、生成された第１部分出力フィーチャマップ５３０を出力フィーチャマップ５３１上で累算することができる。具体的には、プロセッサ１１０は、第１領域５１０の入力フィーチャマップ５０１内位置に基づいて設定された出力フィーチャマップ５３１の位置において、第１部分出力フィーチャマップ５３０を累算することができる。
また、プロセッサ１１０は、第１領域５１０とは異なる入力フィーチャマップ５０１内第Ｎ領域（Ｎは、２以上の自然数である）についても、第Ｎ領域の再使用を基に、カーネル５２０内ウェイトそれぞれと第Ｎ領域との演算を行い、出力値を生成することができ、ウェイトのカーネル５２０内位置を基に設定された第Ｎ部分出力フィーチャマップ内位置において、出力値を累算し、第Ｎ部分出力フィーチャマップを生成することができる。次に、プロセッサ１１０は、生成された第Ｎ部分出力フィーチャマップを出力フィーチャマップ５３１上で累算することができる。結果として、プロセッサ１１０は、第１部分出力フィーチャマップないし第Ｎ部分出力フィーチャマップを、出力フィーチャマップ５３１上で累算し、出力フィーチャマップ５３１を生成することができる。言い換えれば、プロセッサ１１０は、第１部分出力フィーチャマップないし第Ｎ部分出力フィーチャマップの出力値が充填された出力フィーチャマップ５３１を生成することができる。また、図５においては、説明の便宜上、計９回のサイクル間カーネル５２０のウェイトそれぞれと、第１領域５１０との演算が行われるように図示されているが、ゼロ値を有するウェイトと、第１領域５１０との演算は、省略される。言い換えれば、プロセッサ１１０は、カーネル５２０内において、非ゼロ（non-zero）値を有するウェイトの個数だけカーネル５２０のウェイトそれぞれと、第１領域５１０との演算を行うことができる。
【００５４】
図６は、プロセッサが部分出力フィーチャマップを生成する具体的な実施形態を示す。図６において、プロセッサ１１０は、図５の第１部分出力フィーチャマップ５３０を生成するために、１６個の乗算器（ＭＵＬ）、３６個のマルチプレクサ（ＭＵＸ）、３６個の加算器（Adder）、及び３６個の累算演算器（Acc.  Register）を含んでもよい。
【００５５】
１６個の乗算器それぞれは、図５の第１領域５１０のピクセルそれぞれに対応する。１６個の乗算器それぞれに、カーネル５２０のウェイトと、第１領域５１０のピクセルそれぞれとが入力される。例えば、第１乗算器には、カーネル５２０の第１ウェイトと、第１領域５１０の第１ピクセルとが入力され、第２乗算器には、カーネル５２０の第１ウェイトと、第１領域５１０の第２ピクセルとが入力され、第１６乗算器には、カーネル５２０の第１ウェイトと、第１領域１５０の第１６ピクセルとが入力される。また、９回のサイクルそれぞれごとに、１６個の乗算器それぞれに、カーネル５２０のウェイトが、第１ウェイトから第９ウェイトまで順次に入力され、第１領域５１０のピクセルそれぞれが反復的に入力される。従って、１６個の乗算器は、９回のサイクルそれぞれごとに、カーネル５２０のウェイトそれぞれと、第１領域５１０との乗算演算を行うことができ、その結果出力値を出力することができる。
【００５６】
当該の３６個のマルチプレクサ、加算器、及び累算演算器それぞれは、第１部分出力フィーチャマップ５３０の３６個のピクセルそれぞれに対応する。言い換えれば、１セットのマルチプレクサ、加算器及び累算演算器が３６個のピクセルのうちいずれか１つのピクセルに対応する。３６個のマルチプレクサそれぞれは、１６個の乗算器の出力値のうち既設定個数の出力値を入力される。
【００５７】
図６の図面（６１０）は、第１部分出力フィーチャマップ５３０の３６個ピクセルそれぞれごとに累算された出力値の個数を示す。例えば、第１部分出力フィーチャマップ５３０の１行１列のピクセル値は、１個の出力値が累算されるが、第１部分出力フィーチャマップ５３０の３行３列のピクセル値は、９個の出力値が累算される。また、第１部分出力フィーチャマップ５３０の３６個ピクセルそれぞれごとに累算された出力値の個数は、マルチプレクサの入力の個数を意味する。例えば、第１部分出力フィーチャマップ５３０の３行３列のピクセルに対応するマルチプレクサは、９個の乗算器から出力される出力値を入力として受信することができる。
【００５８】
３６個のマルチプレクサそれぞれは、１６個の乗算器の出力値のうち既設定個数の出力値を入力され、既設定個数の出力値のうち１つの出力値を選択することができる。具体的には、３６個のマルチプレクサそれぞれは、図面（６１０）のように、第１部分出力フィーチャマップ５３０の各ピクセルに対応する個数の出力値を入力され、カーネル５２０内ウェイトの位置に基づいて、１つの出力値を選択することができる。例えば、第１部分出力フィーチャマップ５３０の３行３列のピクセルに対応するマルチプレクサは、第１領域５１０と、カーネル５２０内ウェイトとの演算結果として出力される領域の１行１列から３行３列までの９個の出力値を入力される。ここで、該マルチプレクサは、第１領域５１０と、カーネル５２０内第１ウェイト５２２との演算時、第１ウェイト５２２のカーネル５２０内位置に基づいて、領域５３２内９個の出力値のうち１行１列の出力値を選択することができる。次に、該マルチプレクサは、第１領域５１０と、カーネル５２０内第２ウェイト５２４との演算時、第１ウェイト５２２のカーネル５２０内位置に基づいて、領域５３４内９個の出力値のうち１行２列の出力値を選択することができる。
３６個の加算器及び累算演算器のそれぞれは、３６個のマルチプレクサそれぞれから選択される出力値を累算することができる。従って、３６個の累算演算器それぞれは、計９回のサイクル間出力値を累算した結果、３６個のピクセル値で構成された第１部分出力フィーチャマップ５３０を生成することができる。
【００５９】
図７は、カーネルとの演算のための入力フィーチャマップの多様な形態の領域の実施形態を示す。
【００６０】
プロセッサ１１０は、入力フィーチャマップ７１０内の多様な形態の領域を設定することができ、設定された領域とカーネルとの演算を行い、部分出力フィーチャマップを生成することができる。
【００６１】
一例により、プロセッサ１１０は、入力フィーチャマップ７１０内において、（ｎ×ｎ）ピクセルからなる領域７２０を設定し、カーネルとの演算を介して、領域７２０に係わる部分出力フィーチャマップを生成することができ、該部分出力フィーチャマップを出力フィーチャマップ上で累算することができる。
【００６２】
他の例により、プロセッサ１１０は、入力フィーチャマップ７１０内において、（１×ｎ）ピクセルからなる領域７３０を設定し、カーネルとの演算を介して、領域７３０に係わる部分出力フィーチャマップを生成することができ、部分出力フィーチャマップを、出力フィーチャマップ上において累算することができる。言い換えれば、プロセッサ１１０は、入力フィーチャマップ７１０内において、正方形状の領域７２０ではない、領域７３０のように、一方向だけに入力される領域も設定することができる。
【００６３】
さらに他の例により、プロセッサ１１０は、入力フィーチャマップ７１０内において、（１×１×ｎ）ピクセルからなる領域７４０を設定し、カーネルとの演算を介して、領域７４０に係わる部分出力フィーチャマップを生成することができ、部分出力フィーチャマップを出力フィーチャマップ上において累算することができる。
【００６４】
図８は、プロセッサが入力フィーチャマップの１領域を再使用し、部分出力フィーチャマップを生成する他の実施形態を示す。図８においては、説明の便宜上、入力フィーチャマップの第１領域８１０は、１×１０ピクセル領域として図示され、カーネル８２０は、３×３ピクセル領域として図示されているが、それらに制限されるものではなく、入力フィーチャマップの第１領域及びカーネルは、互いに異なるサイズを有する領域でもある。
１番目サイクルにおいて、プロセッサ１１０は、第１領域８１０と、カーネル８２０の第１ウェイト８２２との演算を行い、第１出力値を生成することができ、カーネル８２０内第１ウェイト８２２の位置を基に設定された第１部分出力フィーチャマップ８３０内位置において、第１出力値を累算することができる。言い換えれば、プロセッサ１１０は、第１出力値を、第１部分出力フィーチャマップ８３０内領域８３２において累算することができる。
【００６５】
次に、プロセッサ１１０は、２番目サイクルないし９番目サイクルにおいて、第１領域８１０の再使用を基に、カーネル８２０のウェイトそれぞれと、第１領域８１０との演算を行い、第１部分出力フィーチャマップ８３０を生成することができる。
【００６６】
図９は、プロセッサがカーネルの一部のみを利用し、部分出力フィーチャマップを生成する実施形態を示す。
【００６７】
プロセッサ１１０は、図８のカーネル８２０の一部領域９２０に限定して、図８の入力フィーチャマップの第１領域８１０と、カーネルの一部領域９２０との演算を行い、部分出力フィーチャマップ９３０を生成することができる。
【００６８】
具体的には、プロセッサ１１０は、一部領域９２０の第１ウェイト９２２と、第１領域８１０との演算を介して、第１出力値を生成することができ、第１出力値を、部分出力フィーチャマップ９３０内領域９３２において累算することができる。次に、プロセッサ１１０は、一部領域９２０の第２ウェイト９２４と、第１領域８１０との演算を介して、第２出力値を生成することができ、第２出力値を、部分出力フィーチャマップ９３０内領域９３４において累算することができる。最後に、プロセッサ１１０は、一部領域９２０の第３ウェイトと、第１領域８１０との演算を介して、第３出力値を生成することができ、第３出力値を、部分出力フィーチャマップ９３０内領域９３６において累算し、部分出力フィーチャマップ９３０を生成することができる。
【００６９】
また、プロセッサ１１０は、カーネル８２０の他の領域と、入力フィーチャマップの第１領域８１０との演算を行い、部分出力フィーチャマップを生成することができる。
従って、図８と比較するとき、図９においてプロセッサ１１０は、カーネルの一部領域に限定して演算を進めた結果、部分出力フィーチャマップのサイズを小さくすることができ、結果として、部分出力フィーチャマップを保存するためのバッファのサイズを小さくすることができる。
【００７０】
再び図３を参照すると、プロセッサ１１０は、入力フィーチャマップ、または入力フィーチャマップの１領域をストリーム（stream）の形態で、連続して読み取ることができ、読み出した入力フィーチャマップ、または入力フィーチャマップの１領域を基に、カーネルとのコンボルーション演算を行うことができる。具体的には、プロセッサ１１０は、入力フィーチャマップ、または入力フィーチャマップの１領域を再使用し、カーネルとのコンボルーション演算を行うが、入力フィーチャマップ、または入力フィーチャマップの１領域を１回読み取った後、さらに読み取る必要がないので、連続したストリームのように、入力フィーチャマップ、または入力フィーチャマップの領域を連続して読み取ることができる。
【００７１】
また、プロセッサ１１０は、圧縮された入力フィーチャマップを読み取って圧縮された入力フィーチャマップと、カーネルとのコンボルーション演算を行うことができる。具体的には、入力フィーチャマップ、及び圧縮された入力フィーチャマップは、メモリ１２０にも保存され、プロセッサ１１０は、メモリ１２０にアクセスして圧縮された入力フィーチャマップを読み取り、コンボルーション演算を行うことができる。例えば、プロセッサ１１０は、コンボルーション演算結果である出力フィーチャマップを、次のレイヤの入力フィーチャマップとして、メモリ１２０に保存することができる。また、プロセッサ１１０は、入力フィーチャマップを圧縮することができ、圧縮された入力フィーチャマップを、メモリ１２０に保存することができる。次に、プロセッサ１１０は、メモリ１２０から圧縮された入力フィーチャマップを読み取ることができ、圧縮された入力フィーチャマップに基づいて、コンボルーション演算を行うことができる。
【００７２】
従って、プロセッサ１１０は、入力フィーチャマップだけではなく、圧縮された入力フィーチャマップ、または圧縮された入力フィーチャマップの１領域も、連続したストリームのように読み取り、コンボルーション演算を行うことができるが、コンボルーション演算速度を速めることができる。
【００７３】
図１０は、プロセッサが、圧縮された入力フィーチャマップを、ストリームのように読み取り、コンボルーション演算を行う実施形態を示す。
【００７４】
メモリ１２０は、入力フィーチャマップを保存するだけではなく、圧縮された入力フィーチャマップ１０１０を共に保存することができる。圧縮された入力フィーチャマップ１０１０は、入力フィーチャマップの１領域単位でも圧縮される。例えば、圧縮された入力フィーチャマップ１０１０は、４×４領域単位でも圧縮される。プロセッサ１０１０は、圧縮された入力フィーチャマップ１０１０を、連続したストリームのように読み取り、コンボルーション演算を行うことができる。
【００７５】
また、圧縮された入力フィーチャマップ１０１０は、非ゼロ（non-zero）値を有するピクセルによっても構成されるが、プロセッサ１０１０が圧縮された入力フィーチャマップ１０１０と、カーネルとのコンボルーション演算を行い、ゼロスキッピング（zero  skipping）を具現化することができ、結果として、メモリ帯域幅を狭めることができる。
【００７６】
図１１は、プロセッサのハードウェア構成を図示した一実施形態を示す。
【００７７】
プロセッサ１１０は、複数の演算ユニット１１１２，１１１４，１１１６、及び複数の出力ユニット１１２２，１１２４，１１２６を含んでもよい。
【００７８】
複数の演算ユニット１１１２，１１１４，１１１６それぞれは、入力フィーチャマップの複数領域ＩＦＭ＿１，ＩＦＭ＿２ないしＩＦＭ＿Ｎにおいて、互いに異なる領域と、カーネルとの演算を行い、部分出力フィーチャマップを生成することができる。例えば、第１演算ユニット１１１２は、入力フィーチャマップの第１領域ＩＦＭ＿１の再使用を基に、カーネルと第１領域ＩＦＭ＿１との演算を行い、第１部分出力フィーチャマップを生成することができる。また、第Ｎ演算ユニット１１１６は、入力フィーチャマップの第Ｎ領域ＩＦＭ＿Ｎの再使用を基に、カーネルと第Ｎ領域ＩＦＭ＿Ｎとの演算を行い、第Ｎ部分出力フィーチャマップを生成することができる。
【００７９】
複数の演算ユニット１１１２，１１１４，１１１６それぞれは、フロントエンド（frontend）に位置したディスパッチャ（dispatcher）、プロセッシングユニット及び第１バッファを含んでもよい。具体的には、第１演算ユニット１１１２のディスパッチャは、メモリ１２０から入力フィーチャマップの第１領域ＩＦＭ＿１を読み取ることができ、それをプロセッシングユニットにディスパッチすることができる。次に、プロセッシングユニットは、第１領域ＩＦＭ＿１とカーネルとの演算を行い、出力値を生成することができる。例えば、プロセッシングユニットは、乗算器、加算器及び累算器など多様な演算器を含んでもよい。プロセッシングユニットは、第１領域ＩＦＭ＿１と第１カーネルとの演算を行い、第１出力値を生成することができ、第１領域ＩＦＭ＿１と第２カーネルとの演算を行い、第２出力値を生成することができ、第１領域ＩＦＭ＿１と第Ｎカーネルとの演算を行い、第Ｎ出力値を生成することができる。次に、第１バッファ１１１３は、出力値を累算し、第１部分出力フィーチャマップを生成することができる。例えば、第１バッファ１１１３内バッファ１は、プロセッシングユニットによって生成された第１出力値を累算し、第（１−１）部分出力フィーチャマップを生成することができ、第１バッファ１１１３内バッファ２は、プロセッシングユニットによって生成された第２出力値を累算し、第（１−２）部分出力フィーチャマップを生成することができ、第１バッファ１１１３内バッファＮは、プロセッシングユニットによって生成された第Ｎ出力値を累算し、第（１−Ｎ）部分出力フィーチャマップを生成することができる。
【００８０】
同様に、他の演算ユニット１１１４，１１１６は、ディスパッチャ、プロセッシングユニット及び第１バッファを介して、入力フィーチャマップの他領域ＩＦＭ＿２ないしＩＦＭ＿Ｎの再使用を基に、カーネルと、入力フィーチャマップの他領域ＩＦＭ＿２ないしＩＦＭ＿Ｎとの演算を行い、第２部分出力フィーチャマップないし第Ｎ部分出力フィーチャマップを生成することができる。
【００８１】
また、複数の演算ユニット１１１２，１１１４，１１１６それぞれに含まれるプロセッシングユニットは、並列化された複数個のプロセッシングユニットによっても構成される。例えば、第１演算ユニット１１１２のプロセッシングユニットは、入力フィーチャマップの第１領域ＩＦＭ＿１と第１カーネルとの演算を行う第１プロセッシングユニット、及び第１領域ＩＦＭ＿１と第２カーネルとの演算を行う第２プロセッシングユニットを含んでもよい。その場合、第１プロセッシングユニットは、入力フィーチャマップの第１領域ＩＦＭ＿１と第１カーネルとの演算を完了した後、入力フィーチャマップの第１領域ＩＦＭ＿１と第２カーネルとの演算のうち一部を第２プロセッシングユニットの代わりに遂行することができる。その結果、ロードバランシングがなされ、全体プロセッシング時間が短縮される。具体的な例は、図１５で説明する。
【００８２】
複数の出力ユニット１１２２，１１２４，１１２６は、複数の演算ユニット１１１２，１１１４，１１１６から生成される部分出力フィーチャマップのうち、必要とする部分出力フィーチャマップを累算し、出力フィーチャマップの複数領域ＯＦＭ＿０，ＯＦＭ＿１ないしＯＦＭ＿Ｎを生成することができる。また、複数の出力ユニット１１２２，１１２４，１１２６は、出力フィーチャマップの複数領域ＯＦＭ＿０，ＯＦＭ＿１ないしＯＦＭ＿Ｎを生成し、メモリ１２０に出力することができる。
【００８３】
複数の出力ユニット１１２２，１１２４，１１２６それぞれは、第２バッファ及びバックエンド（backend）に位置した出力処理器（output  handler）を含んでもよい。
具体的には、第１出力ユニット１１２２の第２バッファは、複数の演算ユニット１１１２，１１１４，１１１６それぞれから、必要とする部分出力フィーチャマップを受信することができ、受信された部分出力フィーチャマップを累算し、出力フィーチャマップの第１領域ＯＦＭ＿１を生成することができる。例えば、第１出力ユニット１１２２の第２バッファは、第１演算ユニット１１１２のバッファ１から第（１−１）部分出力フィーチャマップを受信することができ、第２演算ユニット１１１２のバッファ１から第（２−１）部分出力フィーチャマップを受信することができ、第Ｎ演算ユニット１１１６のバッファ１から、第（Ｎ−１）部分出力フィーチャマップを受信することができる。また、第１出力ユニット１１２２の第２バッファは、受信された第（１−１）部分出力フィーチャマップないし第（Ｎ−１）部分出力フィーチャマップを累算し、出力フィーチャマップの第１領域ＯＦＭ＿１を生成することができる。次に、第１出力ユニット１１２２の出力処理器は、出力フィーチャマップの第１領域ＯＦＭ＿１に対するピクセル処理を行うことができ、ピクセル処理された出力フィーチャマップの第１領域ＯＦＭ＿１をメモリ１２０に出力することができる。
【００８４】
同様に、他の出力ユニット１１２４，１１２６は、第２バッファ及び出力処理器を介して、複数の演算ユニット１１１２，１１１４，１１１６それぞれから、必要とする部分出力フィーチャマップを受信することができ、受信された部分出力フィーチャマップを累算し、出力フィーチャマップの第２領域ないし第Ｎ領域、ＯＦＭ＿２ないしＯＦＭ＿Ｎを生成することができる。
【００８５】
複数の演算ユニット１１１２，１１１４，１１１６それぞれは、入力フィーチャマップの互いに異なる領域を再使用し、カーネルとの演算を行うが、複数の演算ユニット１１１２，１１１４，１１１６それぞれは、互いに独立して並列的な演算を行うことができる。また、複数の演算ユニット１１１２，１１１４，１１１６それぞれにおいて、ディスパッチャは、同一演算ユニット上のプロセッシングユニットにおいて、入力フィーチャマップの１領域をディスパッチするだけで、他の演算ユニット上のプロセッシングユニットにおいて、入力フィーチャマップの１領域をディスパッチしないので、プロセッサ１１０のフロントエンド（frontend）での複雑度を低減させることができる。
【００８６】
図１１を参照すると、一例により、複数の演算ユニット１１１２，１１１４，１１１６と、複数の出力ユニット１１２２，１１２４，１１２６は、互いに完全連結（fully  connected）される。従って、プロセッサ１１０のフロントエンド（frontend）での複雑度が低減される代わりに、プロセッサ１１０のバックエンド（backend）での複雑度が上昇するように見えるが、複数の出力ユニット１１２２，１１２４，１１２６は、複数の演算ユニット１１１２，１１１４，１１１６それぞれから、必要とする部分出力フィーチャマップを選択的に累算する演算を行うが、複数の演算ユニット１１１２，１１１４，１１１６よりは、時間上スパースな（sparsely）演算を行うことになるので、複雑度が大きく上昇しない。
【００８７】
図１２は、プロセッサのハードウェア構成を図示した他の実施形態を示す。
【００８８】
プロセッサ１１０は、複数の演算ユニット１２１２，１２１４，１２１６、及び複数の出力ユニット１２２２，１２２４，１２２６を含んでもよい。図１２の複数演算ユニット１２１２，１２１４，１２１６、及び複数の出力ユニット１２２２，１２２４，１２２６は、図１１の複数演算ユニット１１１２，１１１４，１１１６、及び複数の出力ユニット１１２２，１１２４，１１２６と対応するが、重複内容については、説明を省略する。
【００８９】
図１２を参照すると、複数の演算ユニット１２１２，１２１４，１２１６と複数の出力ユニット１２２２，１２２４，１２２６は、バス１２１０を介して連結される。
【００９０】
複数の出力ユニット１２２２，１２２４，１２２６は、複数の演算ユニット１２１２，１２１４，１２１６それぞれから、必要とする部分出力フィーチャマップを選択的に累算する演算を行うことができるが、バス１２１０を介して、複数の演算ユニット１２１２，１２１４，１２１６から、必要とする部分出力フィーチャマップを受信することができる。
【００９１】
従って、プロセッサ１１０は、複数の演算ユニット１２１２，１２１４，１２１６と複数の出力ユニット１２２２，１２２４，１２２６との部分出力フィーチャマップの送受信経路を完全連結（fully  connected）ではないバス１２１０を介して具現化するが、ハードウェアオーバーヘッドを減らすことができる。
【００９２】
図１３は、プロセッサのハードウェア構成を図示したさらに他の実施形態を示す。
【００９３】
プロセッサ１１０は、複数の演算ユニット１３１２，１３１４，１３１６を含んでもよい。複数の演算ユニット１３１２，１３１４，１３１６それぞれは、入力フィーチャマップの複数領域のうち互いに異なる領域と、カーネルとの演算を行い、部分出力フィーチャマップを生成することができる。複数の演算ユニット１３１２，１３１４，１３１６それぞれは、ディスパッチャ（dispatcher）、プロセッシングユニット、及びバッファを含んでもよい。例えば、第１演算ユニット１３１２のディスパッチャは、メモリ１２０から入力フィーチャマップの第１領域を読み取ることができ、それをプロセッシングユニットにディスパッチすることができる。次に、プロセッシングユニットは、第１領域とカーネルとの演算を行い、出力値を生成することができ、該バッファは、出力値を累算し、第１部分出力フィーチャマップを生成することができる。
【００９４】
複数の演算ユニット１３１２，１３１４，１３１６それぞれは、他の演算ユニットから、必要とする部分出力フィーチャマップを累算し、出力フィーチャマップの複数領域それぞれを生成することができる。具体的には、互いに隣接する複数の演算ユニット間のバッファが互いに連結されるが、複数の演算ユニット１３１２，１３１４，１３１６それぞれのバッファは、必要とする部分出力フィーチャマップを、他の演算ユニットのバッファから伝達される。例えば、第１演算ユニット１３１２のバッファが第Ｎ演算ユニット１３１６から出力される部分出力フィーチャマップを必要とする場合、第１演算ユニット１３１２は、第Ｎ演算ユニット１３１６から出力される部分出力フィーチャマップを、第２演算ユニット１３１４のバッファを経て伝達される。
【００９５】
図１４は、プロセッサの演算ユニットが、カーネルと、入力フィーチャマップの領域それぞれとの演算を行う実施形態を示す。
【００９６】
プロセッサ１１０は、第１演算ユニット１４１２、第２演算ユニット１４１４、第３演算ユニット１４１６及び第４演算ユニット１４１８を含んでもよい。また、プロセッサ１１０は、第１出力ユニット１４２２、第２出力ユニット１４２４、第３出力ユニット１４２６及び第４出力ユニット１４２８を含んでもよい。また、プロセッサ１１０は、バス１４３０を含んでもよい。
【００９７】
第１演算ユニット１４１２は、入力フィーチャマップの第１領域ＩＦＭ０とカーネルとの演算を行い、第１部分出力フィーチャマップを生成することができる。具体的には、第１演算ユニット１４１２は、第１プロセッシングユニットを介して、第１領域ＩＦＭ０と第１カーネルとの演算を行い、第（１−１）部分出力フィーチャマップを生成することができ、第２プロセッシングユニットを介して、第１領域ＩＦＭ０と第２カーネルとの演算を行い、第（１−２）部分出力フィーチャマップを生成することができ、第３プロセッシングユニットを介して、第１領域ＩＦＭ０と第３カーネルとの演算を行い、第（１−３）部分出力フィーチャマップを生成することができ、第４プロセッシングユニットを介して、第１領域ＩＦＭ０と第４カーネルとの演算を行い、第（１−４）部分出力フィーチャマップを生成することができる。
【００９８】
同様に、第２演算ユニット１４１４、第３演算ユニット１４１６、及び第４演算ユニット１４１８は、４個のプロセッシングユニットを介して、入力フィーチャマップの第２領域ＩＦＭ１、第３領域ＩＦＭ２、及び第４領域ＩＦＭ３と、カーネルとの演算を行い、第（２−１）部分出力フィーチャマップないし第（２−４）部分出力フィーチャマップ、第（３−１）部分出力フィーチャマップないし第（３−４）部分出力フィーチャマップ、及び第（４−１）部分出力フィーチャマップないし第（４−４）部分出力フィーチャマップを生成することができる。
【００９９】
第１出力ユニット１４２２は、バス１４３０を介して、複数の演算ユニット１４１２，１４１４，１４１６，１４１８から、必要とする部分出力フィーチャマップを受信することができる。例えば、第１出力ユニット１４２２は、バス１４３０を介して、第（１−１）部分出力フィーチャマップ、第（２−１）部分出力フィーチャマップ、第（３−１）部分出力フィーチャマップ、及び第（４−１）部分出力フィーチャマップを受信することができ、第（１−１）部分出力フィーチャマップ、第（２−１）部分出力フィーチャマップ、第（３−１）部分出力フィーチャマップ、及び第（４−１）部分出力フィーチャマップを累算し、出力フィーチャマップの第１領域ＯＦＭ０を生成することができる。
【０１００】
同様に、第２出力ユニット１４２４、第３出力ユニット１４２６、及び第４出力ユニット１４２８は、バス１４３０を介して、必要とする部分出力フィーチャマップを受信して、出力フィーチャマップの第２領域ＯＦＭ１、第３領域ＯＦＭ２、及び第４領域ＯＦＭ３を生成することができる。
【０１０１】
図１５は、プロセッサの演算ユニットが、カーネルと、入力フィーチャマップの領域それぞれとの演算を行う他の実施形態を示す。
【０１０２】
複数の演算ユニット１４１２ないし１４１８それぞれが、入力フィーチャマップの１領域とカーネルとの演算を行う場合、複数の演算ユニット１４１２ないし１４１８内のプロセッシングユニットそれぞれの演算時間は、互いに異なり。具体的には、図面（１５１０）について述べれば、第１演算ユニット１４１２の第１プロセッシングユニットないし第４プロセッシングユニットの演算時間が互いに異なる。言い換えれば、第１プロセッシングユニットが入力フィーチャマップの第１領域ＩＦＭ０と第１カーネルとの演算を行う時間が、第２プロセッシングが第１領域ＩＦＭ０と第２カーネルとの演算を行う時間より短く、第４プロセッシングが第１領域ＩＦＭ０と第４カーネルとの演算を行う時間が最も長い。その結果、全体処理時間（total  processing  time）が長くなってしまう。
従って、複数の演算ユニット１４１２ないし１４１８それぞれは、入力フィーチャマップの１領域と、カーネルとの演算を行うとき、ロードバランシング（load  balancing）のために、まず演算を完了したプロセッシングユニットが、他のプロセッシングユニットの演算の代わりをするように制御することができる。具体的には、第１演算ユニット１４１２の第３プロセッシングユニットが、第１入力ＩＦＭ０と第３カーネルとの演算を介して、第（１−３）部分出力フィーチャマップを生成した後、第３プロセッシングユニットは、第４プロセッシングユニットが演算する第１入力ＩＦＭ０と第４カーネルとの演算のうち一部に対して、代わりに演算することができる。その結果、図面（１５３０）のように、全体処理時間が短縮される。
【０１０３】
また、演算ユニット内プロセッシングユニットが、他のプロセッシングユニットの演算の代わりをしても、出力演算ユニット側においては、必要とする部分出力フィーチャマップを選択的に持ってくることができるので、演算ユニット側でのロードバランシングと関係なく、出力演算ユニットは、出力フィーチャマップの領域を生成することができる。
【０１０４】
図１６は、一実施形態により、ニューラルネットワーク装置の動作方法について説明するための図面である。
【０１０５】
図１６に図示された方法は、図３ないし図１５のニューラルネットワーク装置１００の各構成要素によって遂行され、重複説明については、省略する。
【０１０６】
段階１６１０において、ニューラルネットワーク装置１００は、カーネルのウェイトそれぞれと入力フィーチャマップとの演算を行い、出力値を生成することができる。具体的には、ニューラルネットワーク装置１００は、入力フィーチャマップと、カーネルの第１ウェイトとの演算を行い、第１出力値を生成することができる。また、ニューラルネットワーク装置１００は、入力フィーチャマップと、カーネルの第２ウェイトとの演算を行い、第２出力値を生成することができる。
【０１０７】
ニューラルネットワーク装置１００は、入力フィーチャマップの第１領域と、カーネルのウェイトそれぞれとの演算を行い、第１出力値を生成することができる。また、ニューラルネットワーク装置１００は、第１領域とは異なる領域である入力フィーチャマップの第２領域と、カーネル内ウェイトそれぞれとの演算を行い、第２出力値を生成することができる。
【０１０８】
ニューラルネットワーク装置１００は、カーネル内第１ウェイトがゼロ（zero）である場合、入力フィーチャマップと第１ウェイトとの演算を省略することができる。
【０１０９】
ニューラルネットワーク装置１００は、圧縮された入力フィーチャマップをストリームのように連続的に読み取り、カーネルのウェイトそれぞれと、圧縮された入力フィーチャマップとの演算を行うことができる。
【０１１０】
段階１６２０において、ニューラルネットワーク装置１００は、ウェイトのカーネル内位置を基に設定された出力フィーチャマップ内位置において、出力値を累算し、出力フィーチャマップを生成することができる。具体的には、ニューラルネットワーク装置１００は、第１ウェイトの前記カーネル内位置を基に設定された出力フィーチャマップ内第１位置において、第１出力値を累算することができる。また、ニューラルネットワーク装置１００は、第２ウェイトのカーネル内位置を基に設定された出力フィーチャマップ内第２位置において、第２出力値を累算することができる。
【０１１１】
ニューラルネットワーク装置１００は、ウェイトのカーネル内位置を基に設定された第１部分出力フィーチャマップ内位置において、第１出力値を累算し、第１部分出力フィーチャマップを生成し、出力フィーチャマップ上において、第１部分出力フィーチャマップを累算することができる。また、ニューラルネットワーク装置１００は、ウェイトのカーネル内位置を基に設定された第２部分出力フィーチャマップ内位置において、第２出力値を累算し、第２部分出力フィーチャマップを生成し、出力フィーチャマップ上で第２部分出力フィーチャマップを累算することができる。
【０１１２】
また、ニューラルネットワーク装置１００は、入力フィーチャマップの複数領域それぞれと、カーネルとの演算を行い、部分出力フィーチャマップを生成することができる。次に、ニューラルネットワーク装置１００は、部分出力フィーチャマップのうち、必要とする部分出力フィーチャマップを累算し、出力フィーチャマップの複数領域それぞれを生成することができる。また、ニューラルネットワーク装置１００は、複数の領域における１領域と、複数のカーネルそれぞれとの演算を行い、部分出力フィーチャマップを生成することができる。
【０１１３】
なお、前述の方法は、コンピュータで実行されるプログラムに作成可能であり、コンピュータで読み取り可能な記録媒体を利用し、前記プログラムを動作させる汎用デジタルコンピュータでも具現化される。また、前述の方法で使用されるデータの構造は、コンピュータで読み取り可能な記録媒体にも、多くの手段を介して記録される。前記コンピュータで読み取り可能な記録媒体は、磁気記録媒体（例えば、ＲＯＭ（read-only  memory）、ＲＡＭ（random  access  memory）、ＵＳＢ（universal  serial  bus）、フロッピーディスク、ハードディスクなど）、光学的判読媒体（例えば、ＣＤ−ＲＯＭ（compact  disc  read  only  memory）、ＤＶＤ（digital  versatile  disc）など）のような記録媒体を含む。
【０１１４】
本実施形態と係わる技術分野で当業者であれば、前述の本質的な特性から逸脱しない範囲で変形された形態にも具現化されるということを理解できるであろう。従って、開示された方法は、限定的な観点ではなく、説明的な観点から考慮されなければならず、権利範囲は、前述の説明ではなく、特許請求の範囲に示されており、それと同等な範囲内にある全ての差異を含むものであると解釈されなければならない。
【産業上の利用可能性】
【０１１５】
本発明に係るニューラルネットワークのコンボルーション演算を処理する方法及びその装置は、例えば、データ分析関連の技術分野に効果的に適用可能である。
【符号の説明】
【０１１６】
１        ニューラルネットワーク
１００    ニューラルネットワーク装置
１１０    プロセッサ
１２０    メモリ
【図１】
2020107338.tif 000003
【図２Ａ】
2020107338.tif 000004
【図２Ｂ】
2020107338.tif 000005
【図２Ｃ】
2020107338.tif 000006
【図３】
2020107338.tif 000007
【図４】
2020107338.tif 000008
【図５】
2020107338.tif 000009
【図６】
2020107338.tif 000010
【図７】
2020107338.tif 000011
【図８】
2020107338.tif 000012
【図９】
2020107338.tif 000013
【図１０】
2020107338.tif 000014
【図１１】
2020107338.tif 000015
【図１２】
2020107338.tif 000016
【図１３】
2020107338.tif 000017
【図１４】
2020107338.tif 000018
【図１５】
2020107338.tif 000019
【図１６】
2020107338.tif 000020