(57)【要約】      （修正有）【課題】畳み込みニューラルネットワークの実行効率を改善する方法及び装置を提供する。【解決手段】畳み込みニューラルネットワークにおいて演算を実行する方法は、畳み込みニューラルネットワークにおける選択された層の重みパラメータを分割することによって複数の演算パラメータを含む演算パラメータ配列を得るステップＳ１０１と、演算パラメータ配列の中の各演算パラメータを使用し、選択された層における演算を実行することによって複数の部分演算結果を含む部分演算結果配列を得るステップＳ１０５と、部分演算結果配列に基づいて選択された層の１つまたは複数の出力データを生成するステップＳ１１０とを含む。【選択図】図１
2019082996.tif 000002
【特許請求の範囲】
【請求項１】
畳み込みニューラルネットワークにおける選択された層の重みパラメータを、深さの次元およびカーネル数の次元の少なくとも一方において分割することによって複数の演算パラメータを含む演算パラメータ配列を得るステップと、
前記演算パラメータ配列の中の各演算パラメータを使用し、前記選択された層の入力データのうち、使用される前記演算パラメータのチャンネルに対応するデータに対して、前記選択された層の演算を実行することによって複数の部分演算結果を含む部分演算結果配列を得るステップと、
前記部分演算結果配列に基づいて、前記選択された層の１つまたは複数の出力データを生成するステップと、
を含み、
前記演算パラメータ配列の各行におけるそれぞれの演算パラメータは、前記重みパラメータのカーネルのセットの同じサブセットであり、かつ、それぞれ異なるチャンネルを有し、
前記演算パラメータ配列の各列におけるそれぞれの演算パラメータは、前記重みパラメータのカーネルの前記セットのそれぞれ異なるサブセットであり、かつ、同じ１つまたは複数のチャンネルを有する、
畳み込みニューラルネットワークにおいて演算を実行する方法。
【請求項２】
前記重みパラメータのサイズが第１のしきい値を超える場合、前記分割によって得られる前記演算パラメータ配列の中の各演算パラメータが前記第１のしきい値以下のサイズを有するように、前記重みパラメータを分割する、
を含む、
請求項１に記載の畳み込みニューラルネットワークにおいて演算を実行する方法。
【請求項３】
前記重みパラメータのカーネル数が第２のしきい値を超える場合、前記分割によって得られる前記演算パラメータ配列の中の各演算パラメータが前記第２のしきい値以下の数のカーネルを有するように、前記重みパラメータを分割する、
請求項１に記載の畳み込みニューラルネットワークにおいて演算を実行する方法。
【請求項４】
前記重みパラメータが第１の所定の数以上の数のカーネルを有する場合、前記分割によって得られる前記演算パラメータ配列が前記第１の所定の数の倍数に等しい数の行を有するように、前記重みパラメータを分割する、
請求項１に記載の畳み込みニューラルネットワークにおいて演算を実行する方法。
【請求項５】
前記重みパラメータが第３のしきい値を超える数のチャンネルを有する場合、前記分割によって得られる前記演算パラメータ配列の中の各演算パラメータが前記第３のしきい値以下の数のチャンネルを有するように、前記重みパラメータを分割する、
請求項１に記載の畳み込みニューラルネットワークにおいて演算を実行する方法。
【請求項６】
前記重みパラメータが第２の所定の数以上の数のチャンネルを有する場合、前記分割によって得られる前記演算パラメータ配列が前記第２の所定の数の倍数に等しい数の列を有するように、前記重みパラメータを分割する、
請求項１に記載の畳み込みニューラルネットワークにおいて演算を実行する方法。
【請求項７】
前記選択された層が複数の部分入力データを受け取り、
前記複数の部分入力データの任意の２つが同じチャンネルを有しておらず、かつ前記複数の部分入力データが、全体として、前記選択された層の完全な入力データに対応している場合、前記分割によって得られる前記演算パラメータ配列が、前記受け取った複数の部分入力データの数に等しい数の列を有し、かつ各列におけるすべての前記演算パラメータが、前記複数の部分入力データの１つと同じ１つまたは複数のチャンネルに対応するように、各部分入力データに従って前記重みパラメータを分割する、
を含む、
請求項１に記載の畳み込みニューラルネットワークにおいて演算を実行する方法。
【請求項８】
前記行および／または前記列が、前記第１のしきい値を超えるサイズを有する演算パラメータを含む場合、さらに分割することによって得られる前記演算パラメータ配列の中の各演算パラメータが、前記第１のしきい値以下のサイズを有するように、前記演算パラメータ配列の少なくとも行および／または列を、深さの次元およびカーネル数の次元の少なくとも一方においてさらに分割するステップ、
をさらに含む、
請求項１に記載の畳み込みニューラルネットワークにおいて演算を実行する方法。
【請求項９】
前記部分演算結果配列の中の各部分演算結果は、前記選択された層の１つの出力データに対応する、
請求項１に記載の畳み込みニューラルネットワークにおいて演算を実行する方法。
【請求項１０】
前記部分演算結果配列が複数の列を含む場合、前記部分演算結果配列の各行におけるすべての前記部分演算結果を、対応する部分ごとに加算することによって、前記部分演算結果配列を１列に圧縮し、
前記圧縮された部分演算結果配列の中の各部分演算結果は、前記選択された層の出力データに対応する、
請求項１に記載の畳み込みニューラルネットワークにおいて演算を実行する方法。
【請求項１１】
前記部分演算結果配列が複数の行を含む場合、前記部分演算結果配列の各列におけるすべての前記部分演算結果を深さ方向において結合することによって、前記部分演算結果配列を１行に圧縮し、
前記圧縮された部分演算結果配列の中の各部分演算結果は、前記選択された層の出力データに対応する、
請求項１に記載の畳み込みニューラルネットワークにおいて演算を実行する方法。
【請求項１２】
前記部分演算結果配列が複数の行および複数の列を含む場合、
前記部分演算結果配列の各行におけるすべての前記部分演算結果を、対応する部分ごとに加算した後、前記加算によって圧縮された前記部分演算結果配列の各列におけるすべての前記部分演算結果を、深さ方向において結合することによって、または、
前記部分演算結果配列の各列におけるすべての部分演算結果を前記深さ方向において結合した後、前記結合によって圧縮された前記部分演算結果配列の各行におけるすべての部分演算結果配列を、対応する部分ごとに加算することによって、
前記選択された層の出力データを生成する、
請求項１に記載の畳み込みニューラルネットワークにおいて演算を実行する方法。
【請求項１３】
１つまたは複数のプロセッサと、
命令を記憶するメモリと、
を備え、
前記命令が前記１つまたは複数のプロセッサによって実行された場合、前記１つまたは複数のプロセッサは、
畳み込みニューラルネットワークにおける選択された層の重みパラメータを、深さの次元およびカーネル数の次元の少なくとも一方において分割することによって複数の演算パラメータを含む演算パラメータ配列を得るステップと、
前記演算パラメータ配列の中の各演算パラメータを使用し、前記選択された層の入力データのうち、使用される前記演算パラメータのチャンネルに対応するデータに対して、前記選択された層の演算を実行することによって複数の部分演算結果を含む部分演算結果配列を得るステップと、
前記部分演算結果配列に基づいて、前記選択された層の１つまたは複数の出力データを生成するステップと、
を実行し、
前記演算パラメータ配列の各行におけるそれぞれの演算パラメータは、前記重みパラメータのカーネルのセットの同じサブセットであり、かつ、それぞれ異なるチャンネルを有し、
前記演算パラメータ配列の各列におけるそれぞれの演算パラメータは、前記重みパラメータのカーネルの前記セットのそれぞれ異なるサブセットであり、かつ、同じ１つまたは複数のチャンネルを有する、
畳み込みニューラルネットワークにおいて演算を実行する装置。
【請求項１４】
畳み込みニューラルネットワークにおける選択された層の重みパラメータを、深さの次元およびカーネル数の次元の少なくとも一方において分割することによって複数の演算パラメータを含む演算パラメータ配列を得るように構成されている分割器と、
前記演算パラメータ配列の中の各演算パラメータを使用し、前記選択された層の入力データのうち、使用される前記演算パラメータの前記チャンネルに対応するデータに対して、前記選択された層の演算を実行することによって複数の部分演算結果を含む部分演算結果配列を得るように構成されている演算器と、
前記部分演算結果配列に基づいて、前記選択された層の１つまたは複数の出力データを生成するように構成されている生成器と、
を備え、
前記演算パラメータ配列の各行におけるそれぞれの演算パラメータは、前記重みパラメータのカーネルのセットの同じサブセットであり、かつ、それぞれ異なるチャンネルを有し、
前記演算パラメータ配列の各列におけるそれぞれの演算パラメータは、前記重みパラメータのカーネルの前記セットのそれぞれ異なるサブセットであり、かつ、同じ１つまたは複数のチャンネルを有する、
畳み込みニューラルネットワークにおいて演算を実行する装置。
【請求項１５】
命令を記憶する非一時的な記憶媒体であって、
前記命令が、畳み込みニューラルネットワークにおいて演算を実行するように構成されているプロセッサによって実行された場合、前記プロセッサは、
前記畳み込みニューラルネットワークにおける選択された層の重みパラメータを、深さの次元およびカーネル数の次元の少なくとも一方において分割することによって複数の演算パラメータを含む演算パラメータ配列を得るステップと、
前記演算パラメータ配列の中の各演算パラメータを使用し、前記選択された層の入力データのうち、使用される前記演算パラメータのチャンネルに対応するデータに対して、前記選択された層の演算を実行することによって複数の部分演算結果を含む部分演算結果配列を得るステップと、
前記部分演算結果配列に基づいて、前記選択された層の１つまたは複数の出力データを生成するステップと、
を実行し、
前記演算パラメータ配列の各行におけるそれぞれの演算パラメータは、前記重みパラメータのカーネルのセットの同じサブセットであり、かつ、それぞれ異なるチャンネルを有し、
前記演算パラメータ配列の各列におけるそれぞれの演算パラメータは、前記重みパラメータのカーネルの前記セットのそれぞれ異なるサブセットであり、かつ、同じ１つまたは複数のチャンネルを有する、
非一時的な記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、人工的な畳み込みニューラルネットワークに関し、より詳細には、畳み込みニューラルネットワークにおいて演算を実行する方法および装置並びに非一時的な記憶媒体に関する。
【背景技術】
【０００２】
畳み込みニューラルネットワークに基づく深層学習技術は、画像認識、映像解析、自然言語処理、運転補助などのさまざまな分野において幅広く使用されてきた。
【０００３】
畳み込みニューラルネットワークは、多数の層を含むことができる。各層において、層の入力データ（入力特徴データとも称する）に対する層の畳み込み演算が、その層の重みパラメータを使用して実行され、対応する出力データ（活性化値（activation value）または出力特徴データとも称される）を得る。
【０００４】
畳み込みニューラルネットワークにおいては、各特徴データは、特定の幅および高さを有することができ、さらに、１つまたは複数のチャンネルを有することができる。各チャンネルは、特徴データの１種類の情報を伝えることができる。各層の重みパラメータは、１つまたは複数のカーネル（畳み込みカーネルとも称される）を含むことができ、すべてのカーネルが、同じ幅、同じ高さ、および同じ深さ（チャンネル数とも称される）を有することができる。言い換えれば、各層の重みパラメータは、例えば幅、高さ、深さ、およびカーネル数などの次元を有することができる。
【０００５】
畳み込みニューラルネットワークにおける演算は、汎用の中央処理装置（ＣＰＵ）もしくは汎用のグラフィック処理装置（ＧＰＵ）、または専用アクセラレータなどのハードウェアを使用することによって、効率的に実行できることが望ましい。しかしながら、畳み込みニューラルネットワークにおいて前向き推論プロセスが進むにつれて、各層の重みパラメータのサイズが次第に大きくなりうる。例えば重みパラメータは、より大きい数のチャンネル、および／または、より大きい数のカーネルを有しうる。ニューラルネットワークにおいて演算を実行するために使用されるプロセッサに関連付けられる高速メモリ（例えばプロセッサ内のキャッシュ、またはプロセッサに関連付けられるキャッシュ）に全体をバッファリングするには、特定の層の重みパラメータが大きすぎる場合、その層の演算を、正確に、および／または効率的に実行することができない。
【発明の概要】
【課題を解決するための手段】
【０００６】
本開示の一態様は、
畳み込みニューラルネットワークにおける選択された層の重みパラメータを、深さの次元およびカーネル数の次元の少なくとも一方において分割することによって複数の演算パラメータを含む演算パラメータ配列を得るステップと、
演算パラメータ配列の中の各演算パラメータを使用し、選択された層の入力データのうち、使用される演算パラメータのチャンネルに対応するデータに対して、選択された層の演算を実行することによって複数の部分演算結果を含む部分演算結果配列を得るステップと、
部分演算結果配列に基づいて、選択された層の１つまたは複数の出力データを生成するステップと、
を含み、
演算パラメータ配列の各行におけるそれぞれの演算パラメータは、重みパラメータのカーネルのセットの同じサブセットであり、かつ、それぞれ異なるチャンネルを有し、
演算パラメータ配列の各列におけるそれぞれの演算パラメータは、重みパラメータのカーネルのセットのそれぞれ異なるサブセットであり、かつ、同じ１つまたは複数のチャンネルを有する、
畳み込みニューラルネットワークにおいて演算を実行する方法に関する。
【０００７】
本開示の別の態様は、
１つまたは複数のプロセッサと、
命令を記憶するメモリと、
を備え、
命令が１つまたは複数のプロセッサによって実行された場合、１つまたは複数のプロセッサは、
畳み込みニューラルネットワークにおける選択された層の重みパラメータを、深さの次元およびカーネル数の次元の少なくとも一方において分割することによって複数の演算パラメータを含む演算パラメータ配列を得るステップと、
演算パラメータ配列の中の各演算パラメータを使用し、選択された層の入力データのうち、使用される演算パラメータのチャンネルに対応するデータに対して、選択された層の演算を実行することによって複数の部分演算結果を含む部分演算結果配列を得るステップと、
部分演算結果配列に基づいて、選択された層の１つまたは複数の出力データを生成するステップと、
を実行し、
演算パラメータ配列の各行におけるそれぞれの演算パラメータは、重みパラメータのカーネルのセットの同じサブセットであり、かつ、それぞれ異なるチャンネルを有し、
演算パラメータ配列の各列におけるそれぞれの演算パラメータは、重みパラメータのカーネルのセットのそれぞれ異なるサブセットであり、かつ、同じ１つまたは複数のチャンネルを有する、
畳み込みニューラルネットワークにおいて演算を実行する装置、に関する。
【０００８】
本開示の別の態様は、
畳み込みニューラルネットワークにおける選択された層の重みパラメータを、深さの次元およびカーネル数の次元の少なくとも一方において分割することによって複数の演算パラメータを含む演算パラメータ配列を得るように構成されている分割器と、
演算パラメータ配列の中の各演算パラメータを使用し、選択された層の入力データのうち、使用される演算パラメータのチャンネルに対応するデータに対して、選択された層の演算を実行することによって複数の部分演算結果を含む部分演算結果配列を得るように構成されている演算器と、
部分演算結果配列に基づいて、選択された層の１つまたは複数の出力データを生成するように構成されている生成器と、
を備え、
演算パラメータ配列の各行におけるそれぞれの演算パラメータは、重みパラメータのカーネルのセットの同じサブセットであり、かつ、それぞれ異なるチャンネルを有し、
演算パラメータ配列の各列におけるそれぞれの演算パラメータは、重みパラメータのカーネルのセットのそれぞれ異なるサブセットであり、かつ、同じ１つまたは複数のチャンネルを有する、
畳み込みニューラルネットワークにおいて演算を実行する装置、に関する。
【０００９】
本開示の別の態様は、
命令を記憶する非一時的な記憶媒体であって、
命令が、畳み込みニューラルネットワークにおいて演算を実行するように構成されているプロセッサによって実行された場合、プロセッサは、
畳み込みニューラルネットワークにおける選択された層の重みパラメータを、深さの次元およびカーネル数の次元の少なくとも一方において分割することによって複数の演算パラメータを含む演算パラメータ配列を得るステップと、
演算パラメータ配列の中の各演算パラメータを使用し、選択された層の入力データのうち、使用される演算パラメータのチャンネルに対応するデータに対して、選択された層の演算を実行することによって複数の部分演算結果を含む部分演算結果配列を得るステップと、
部分演算結果配列に基づいて、選択された層の１つまたは複数の出力データを生成するステップと、
を実行し、
演算パラメータ配列の各行におけるそれぞれの演算パラメータは、重みパラメータのカーネルのセットの同じサブセットであり、かつ、それぞれ異なるチャンネルを有し、
演算パラメータ配列の各列におけるそれぞれの演算パラメータは、重みパラメータのカーネルのセットのそれぞれ異なるサブセットであり、かつ、同じ１つまたは複数のチャンネルを有する非一時的な記憶媒体、に関する。
【００１０】
本開示の実施形態に係る方法を使用すると、ハードウェアの動作効率または利用率を改善することができ、さらに、パラメータのサイズに対してハードウェアが限定されることを回避することもできる。
【図面の簡単な説明】
【００１１】
【図１】本開示の実施形態に係る例示的な方法のフローを示している。
【図２】本開示の実施形態に係る、重みパラメータおよび対応する配列表現の例を示している。
【図３】本開示の実施形態に係る、重みパラメータを分割する例示的な方法を示している。
【図４】本開示の実施形態に係る、入力データに従って重みパラメータを分割する例を示している。
【図５】本開示の実施形態に係る、分割された演算パラメータを使用して演算を実行する例を示している。
【図６】本開示の実施形態に係る、出力データを生成する例を示している。
【図７】本開示の実施形態に係る、出力データを生成する例を示している。
【図８】本開示の実施形態に係る、出力データを生成する例を示している。
【図９】本開示の実施形態に係る、出力データを生成する例を示している。
【図１０】本開示の実施形態に係る、出力データを生成する例を示している。
【図１１】本開示の実施形態に係る方法を実施する、本開示の実施形態に係る装置のブロック図を示している。
【図１２】本開示の実施形態に係る方法を実施する、本開示の実施形態に係る装置のブロック図を示している。
【発明を実施するための形態】
【００１２】
図１は、本開示の実施形態に係る例示的な方法のフローを示している。図１に示したように、畳み込みニューラルネットワークにおける選択された層において、ステップＳ１０１で、畳み込みニューラルネットワークにおける選択された層の重みパラメータを、深さの次元およびカーネル数の次元の少なくとも一方において分割して、複数の演算パラメータを含む演算パラメータ配列を得る。次いで、ステップＳ１０５においては、ステップＳ１０１で得られた演算パラメータ配列の中の各演算パラメータを使用して、選択された層の入力データのうち、使用される演算パラメータのチャンネルに対応する、チャンネル内のデータに対して、選択された層の演算を実行し、複数の部分演算結果を含む部分演算結果配列を得る。次いで、ステップＳ１１０においては、ステップＳ１０５で得られた部分演算結果配列に基づいて、選択された層の１つまたは複数の出力データを生成することができる。
【００１３】
一実施形態においては、畳み込みニューラルネットワークの各層において実行される演算と、各層において使用される重みパラメータのサイズおよび各次元の大きさを、畳み込みニューラルネットワークが設計されるときに事前に決定する、または既知とすることができ、また、畳み込みニューラルネットワークを実行するときに、それぞれの層における重みパラメータをキャッシュするための高速メモリの容量、または、各層の重みパラメータ用もしくは複数の層の重みパラメータ用に高速メモリ内に確保される容量を、事前に決定する、または既知とすることができ、あるいは、畳み込みニューラルネットワークにおける乗算演算および加算演算をサポートするハードウェア回路内の乗算器および加算器の配置が既知である場合には、より良好な、または所望のハードウェア利用率または実行効率を得るため、カーネル演算のいくつのセットまたはチャンネル演算のいくつのセットを同時に処理する必要があるかを、事前に決定する、または既知とすることができる。
【００１４】
したがって、畳み込みニューラルネットワークにおけるどの層の重みパラメータを分割する必要があるか、すなわち言い換えれば、畳み込みニューラルネットワークにおけるどの層を、ステップＳ１０１における選択される層として選択する必要があるかを、１つまたは複数の側面、例えば、高速メモリの容量、重みパラメータ用に確保される高速メモリにおける容量、乗算器および加算器の配置、演算の並列処理に関する要件、畳み込みニューラルネットワークの設計、畳み込みニューラルネットワークの演算を実行するためのプロセスまたはスレッドの上限または下限、（１つまたは複数の）特定の適用シナリオにおける経験的データなどに従って、事前に決定することができる。
【００１５】
いくつかの別の実施形態においては、特定の中間層の重みパラメータを分割する必要があるかを、畳み込みニューラルネットワークの演算中に（例えばその中間層の演算を実際に実行する前に）、１つまたは複数の側面、例えば、高速メモリの容量、重みパラメータ用に確保される高速メモリにおける容量、その層の重みパラメータ用に現在利用可能な高速メモリにおける容量、乗算器および加算器の配置、演算の並列処理に関する要件、畳み込みニューラルネットワークの設計、プロセッサおよび／またはオペレーティングシステムの現在の動作性能などに従って、決定することができる。必要な場合、その層を、ステップＳ１０１において選択される層とみなすことができる。
【００１６】
いくつかの別の実施形態においては、特定の中間層から始まる複数の層における（１つまたは複数の）どの層の重みパラメータを分割する必要があるかと、（１つまたは複数の）どの層を選択される層としてみなすことができるかとを、畳み込みニューラルネットワークの演算中に（例えばその中間層の演算を実際に実行する前に）、１つまたは複数の側面、例えば、高速メモリの容量、（１つまたは複数の）重みパラメータ用に確保される高速メモリにおける容量、（１つまたは複数の）層の（１つまたは複数の）重みパラメータ用に現在利用可能な高速メモリにおける容量、乗算器および加算器の配置、演算の並列処理に関する要件、畳み込みニューラルネットワークの設計、プロセッサおよび／またはオペレーティングシステムの現在の動作性能などに従って、決定することができる。
【００１７】
畳み込みニューラルネットワークでは、通常、順序が後ろの方の１つまたは複数の層がより大きい重みパラメータを有し、したがっていくつかの別の実施形態においては、畳み込みニューラルネットワークにおけるこれら１つまたは複数の順序が後ろの方の層を、畳み込みニューラルネットワークの設計時に、ステップＳ１０１における選択される層とみなすことができる。
【００１８】
いくつかの別の実施形態においては、畳み込みニューラルネットワークの特定の層が、全体として完全な入力データを構成する複数の部分入力データを受け取り、かつ、これらの部分入力データの任意の２つが同じチャンネルを共有しない、すなわち言い換えれば、入力特徴データが深さ方向において複数の部分入力データに分割されており、かつこれら複数の部分入力データそれぞれがその層に提供されるならば、この特定の層を、ステップＳ１０１における選択される層とみなすことができる。
【００１９】
いくつかの別の実施形態においては、畳み込みニューラルネットワークにおける各層の重みパラメータを、上述した事前の決定またはリアルタイムでの決定なしに、分割することができる。言い換えれば、畳み込みニューラルネットワークにおける各層を、ステップＳ１０１における選択される層とみなすことができる。
【００２０】
さらには、畳み込みニューラルネットワークにおける（１つまたは複数の）特定の層を、選択される層とみなすことができるかを、ステップＳ１０１において判定することができる。
【００２１】
分割する場合と分割しない場合とで演算結果の一貫性を維持する目的で、選択された層の重みパラメータを、深さ（すなわちチャンネル方向）の次元およびカーネル数の次元の少なくとも一方において分割することができる。重みパラメータが、深さの次元およびカーネル数の次元における配列とみなされる（各行が各カーネルの複数の異なるチャンネルに対応し、各列が同じチャンネルにおけるそれぞれのカーネルの部分に対応する）場合、選択された層の重みパラメータを、深さの次元およびカーネル数の次元の少なくとも一方において分割することは、その配列を、行方向および／または列方向においていくつかの部分に分割することと考えることができる。
【００２２】
図２は、本開示の実施形態に係る、重みパラメータおよび対応する配列表現の例を示している。
【００２３】
図２で矢印の左側には、３つのカーネルＫ１〜Ｋ３を有する重みパラメータを示してあり、各カーネル（Ｋ１またはＫ２またはＫ３）は、３つのチャンネルＣ１〜Ｃ３を有する。カーネルＫ１の３つのチャンネルを、それぞれＫ１＿Ｃ１、Ｋ１＿Ｃ２、Ｋ１＿Ｃ３と表してあり、カーネルＫ２の３つのチャンネルを、それぞれＫ２＿Ｃ１、Ｋ２＿Ｃ２、Ｋ２＿Ｃ３と表してあり、カーネルＫ３の３つのチャンネルを、それぞれＫ３＿Ｃ１、Ｋ３＿Ｃ２、Ｋ３＿Ｃ３と表してある。
【００２４】
図２で矢印の右側には、深さおよびカーネル数の２つの次元における配列表現を示してある。この配列は、３行３列を有する。カーネルＫ１の３つのチャンネルＫ１＿Ｃ１、Ｋ１＿Ｃ２、Ｋ１＿Ｃ３は、配列の第１行に対応しており、カーネルＫ２の３つのチャンネルＫ２＿Ｃ１、Ｋ２＿Ｃ２、Ｋ２＿Ｃ３は、配列の第２行に対応しており、カーネルＫ３の３つのチャンネルＫ３＿Ｃ１、Ｋ３＿Ｃ２、Ｋ３＿Ｃ３は、配列の第３行に対応している。チャンネルＣ１に対応する、カーネルＫ１〜Ｋ３の部分Ｋ１＿Ｃ１、Ｋ２＿Ｃ１、Ｋ３＿Ｃ１は、配列の第１列に対応しており、チャンネルＣ２に対応する、カーネルＫ１〜Ｋ３の部分Ｋ１＿Ｃ２、Ｋ２＿Ｃ２、Ｋ３＿Ｃ２は、配列の第２列に対応しており、チャンネルＣ３に対応する、カーネルＫ１〜Ｋ３の部分Ｋ１＿Ｃ３、Ｋ２＿Ｃ３、Ｋ３＿Ｃ３は、配列の第３列に対応している。
【００２５】
なお、畳み込みニューラルネットワークにおける重みパラメータは図２に示した例に限定されず、任意の数のカーネルおよび任意の数のチャンネルを有することができることを理解されたい。
【００２６】
したがって、上述したように、選択された層の重みパラメータを深さおよびカーネル数の次元の少なくとも一方において分割することは、対応する配列を行方向および／または列方向において分割することと考えることができる。
【００２７】
図３は、本開示の実施形態に係る、重みパラメータを分割する例示的な方法を示している。
【００２８】
一例においては、図２における配列を、図３（ａ）に示したように、列に従って３つの部分に分割することができ（すなわち重みパラメータが深さ方向において３つの部分に分割される）、したがって１行３列を有する演算パラメータの配列が形成される。この配列は、チャンネルＣ１に対応する、カーネルＫ１〜Ｋ３の部分と、チャンネルＣ２に対応する、カーネルＫ１〜Ｋ３の部分と、チャンネルＣ３に対応する、カーネルＫ１〜Ｋ３の部分とに、それぞれ対応する３つの演算パラメータを含む。
【００２９】
いくつかの別の例においては、図２における配列を、図３（ｂ）に示したように、行に従って３つの部分に分割することができ（すなわち重みパラメータがカーネル数の次元において３つの部分に分割される）、したがって３行１列を有する演算パラメータの配列が形成され、この配列は、カーネルＫ１〜Ｋ３にそれぞれ対応する３つの演算パラメータを含む。
【００３０】
いくつかの別の例においては、図２における配列を、図３（ｃ）に示したように、３行３列に分割することができ（すなわち重みパラメータが、深さおよびカーネル数の両方の次元において９つの部分に分割される）、したがって３行３列を有する演算パラメータの配列が形成され、この配列は、各カーネルの各チャンネルにそれぞれ対応する９つの演算パラメータを含む。
【００３１】
いくつかの別の例においては、図２における配列を、図３（ｄ）に示したように１行２列を有する演算パラメータの配列が形成されるように分割することができ（すなわち重みパラメータが、深さの次元において２つの部分に分割される）、この配列は２つの演算パラメータを含む。第１列における演算パラメータは、チャンネルＣ１におけるカーネルＫ１〜Ｋ３の部分に対応しており（図３ではＫ１＿Ｃ１、Ｋ２＿Ｃ１、Ｋ３＿Ｃ１として表してある）、第２列における演算パラメータは、チャンネルＣ２およびＣ３におけるカーネルＫ１〜Ｋ３の部分に対応している（図３ではＫ１＿（Ｃ２−Ｃ３）、Ｋ２＿（Ｃ２−Ｃ３）、Ｋ３＿（Ｃ２−Ｃ３）として表してある）。
【００３２】
いくつかの別の例においては、図２における配列を、図３（ｅ）に示したように２行３列を有する演算パラメータの配列が形成されるように分割することができ（すなわち重みパラメータが、深さおよびカーネル数の両方の次元において６つの部分に分割される）、この配列は６つの演算パラメータを含む。第１行における演算パラメータは、チャンネルＣ１，Ｃ２，Ｃ３におけるカーネルＫ１およびＫ２の部分にそれぞれ対応しており、第２行における演算パラメータは、チャンネルＣ１，Ｃ２，Ｃ３におけるカーネルＫ３の部分にそれぞれ対応している。
【００３３】
いくつかの別の例においては、図２における配列を、図３（ｆ）に示したように２行２列を有する演算パラメータの配列が形成されるように分割することができ（すなわち重みパラメータが、深さおよびカーネル数の両方の次元において４つの部分に分割される）、この配列は４つの演算パラメータを含む。第１行第１列の演算パラメータは、チャンネルＣ１およびＣ２におけるカーネルＫ１の部分に対応しており（図３ではＫ１＿（Ｃ１−Ｃ２）として表してある）、第１行第２列の演算パラメータは、チャンネルＣ３におけるカーネルＫ１の部分に対応しており、第２行第１列における演算パラメータは、チャンネルＣ１およびＣ２におけるカーネルＫ２およびＫ３の部分に対応しており（図３ではＫ２＿（Ｃ１−Ｃ２）およびＫ３＿（Ｃ１−Ｃ２）として表してある）、第２行第２列の演算パラメータは、チャンネルＣ３におけるカーネルＫ２およびＫ３の部分に対応している。
【００３４】
なお、重みパラメータを深さの次元およびカーネル数の次元の少なくとも一方において分割することは、図３に示した例に限定されないことを理解されたい。演算パラメータ配列の各行におけるそれぞれの演算パラメータが、重みパラメータのカーネルのセットの同じサブセットからであり、かつそれぞれ異なるチャンネルを有し、かつ、演算パラメータ配列の各列におけるそれぞれの演算パラメータが、重みパラメータのカーネルのセットのそれぞれ異なるサブセットからであり、かつ同じ１つまたは複数のチャンネルを有するように、重みパラメータを深さの次元およびカーネル数の次元の少なくとも一方において任意の適切な方法で分割して、複数の演算パラメータを含む演算パラメータの配列を得ることができる。
【００３５】
上述したように、ステップＳ１０１においては、選択された層の重みパラメータを分割するかを、さまざまな基準に従って決定することができ、したがって、分割によって得られる演算パラメータ配列が、関連する要件を満たすかを、そのような基準に従って判定することができる。
【００３６】
実施形態においては、ステップＳ１０１において、重みパラメータのサイズが第１のしきい値を超えるときに、分割によって得られる演算パラメータ配列の中の各演算パラメータのサイズが第１のしきい値より小さいかまたは等しいように、その重みパラメータを分割することができる。
【００３７】
一例においては、第１のしきい値は、重みパラメータをキャッシュするための高速メモリの容量、または重みパラメータを記憶するために利用可能な高速メモリの容量に従って、設定することができる。
【００３８】
いくつかの別の例においては、第１のしきい値を、高速メモリの容量の１／５、１／２、２／３として設定することができ、または、第１のしきい値を、高速メモリの容量に等しいように設定することができる。
【００３９】
いくつかの別の例においては、第１のしきい値は、畳み込みニューラルネットワークの設計手順において、その畳み込みニューラルネットワークを適用するシナリオに関連する経験的データまたは統計的データと考慮事項との組合せに基づいて、畳み込みニューラルネットワークの設計者によって設定することができる。例えば、第１のしきい値を、３２ｋｂ、６４ｋｂ、１２８ｋｂなどとして設定することができる。
【００４０】
なお、第１のしきい値の設定は、上述した例に限定されないことを理解されたい。第１のしきい値は、必要な場合に任意の適切な値または任意の望ましい値として設定することができる。さらには、畳み込みニューラルネットワーク全体に対して第１のしきい値を設定することができ、それを各層に適用することができる。または、それぞれの選択された層に対して、第１のしきい値を設定することができる。さらには、第１のしきい値は固定値を有することができる、または第１のしきい値を、畳み込みニューラルネットワークの前向き推論プロセスにおいて、システム（ハードウェアおよび／またはソフトウェアを含む）の条件（例えば動作性能、利用可能なリソースなど）、および／または、学習の条件に従って、更新することができる（例えば畳み込みニューラルネットワークにおける各層のパラメータも、前向き推論プロセスにおける学習によって動的に調整することができる）。
【００４１】
いくつかの別の実施形態においては、ステップＳ１０１において、重みパラメータのカーネル数が第２のしきい値を超えるときに、分割によって得られる演算パラメータ配列の中の各演算パラメータのカーネル数が第２のしきい値より小さいかまたは等しいように、その重みパラメータを分割することができる。
【００４２】
一例においては、第２のしきい値は、畳み込みニューラルネットワークの設計手順において、その畳み込みニューラルネットワークを適用するシナリオに関連する経験的データまたは統計的データと考慮事項との組合せに基づいて、畳み込みニューラルネットワークの設計者によって設定することができる。例えば、第２のしきい値を、８、３２、６４などとして設定することができる。
【００４３】
いくつかの別の例においては、第２のしきい値は、高速メモリの容量と、各カーネルのサイズとに従って設定することができる。例えば、各カーネルのサイズに対する、重みパラメータを記憶するために利用可能な高速メモリの容量の比率よりも小さいかまたは等しい値として、第２のしきい値を設定することができる。
【００４４】
いくつかの別の例においては、ソフトウェアおよび／またはハードウェアのコストおよび動作性能が、Ｎ個の畳み込みカーネルの場合に比較的良好である（例えば、加算器のための選択／イネーブル回路を省くことができる、または比較的良好な並列処理を達成することができる）ことが、ニューラルネットワークの演算をサポートするハードウェアに関連するパラメータに基づいて判断される場合、第２のしきい値をＮとして設定することができる。例えば、重みパラメータのカーネル数がＫであり、第２のしきい値がＮであると想定すると、演算パラメータ配列を、Ｋ／Ｎ個の行を有し、かつ、各行における各演算パラメータがＮ個以下のカーネルを有するように、形成することができ、このことは、各演算パラメータの演算を並列モードにおいて実行するときの並列処理またはリソース利用率を改善するうえで有利であり得る。
【００４５】
なお、第２のしきい値の設定は、上記の例に限定されないことを理解されたい。第２のしきい値は、必要な場合に任意の適切な値または任意の望ましい値として設定することができる。さらには、畳み込みニューラルネットワーク全体に対して第２のしきい値を設定することができ、その第２のしきい値を各層に適用することができる。または、それぞれの選択された層に対して、第２のしきい値を設定することができる。さらには、第２のしきい値は固定値を有することができる、または第２のしきい値を、畳み込みニューラルネットワークの前向き推論プロセスにおいて、システム（ハードウェアおよび／またはソフトウェアを含む）の条件（例えば動作性能、利用可能なリソースなど）、および／または、学習の条件に従って、更新することができる（例えば畳み込みニューラルネットワークにおける各層のパラメータも、前向き推論プロセスにおける学習によって動的に調整することができる）。
【００４６】
いくつかの別の実施形態においては、ステップＳ１０１において、重みパラメータのカーネル数が第１の所定の数より大きいかまたは等しい場合に、分割によって得られる演算パラメータ配列の行の数が第１の所定の数の倍数に等しいように、その重みパラメータを分割することができる。
【００４７】
一例においては、第１の所定の数は、畳み込みニューラルネットワークにおいて演算を処理するために使用されるプロセッサ（ＣＰＵ、ＧＰＵ、または専用アクセラレータなど）またはプロセッサコアの数に従って、設定することができる。
【００４８】
いくつかの別の例においては、第１の所定の数は、畳み込みニューラルネットワークにおける特定の重みパラメータ（例えば、最も大きいサイズの重みパラメータまたは最も小さいサイズの重みパラメータ）のカーネルのサイズに対する、高速メモリの容量（例えば、合計容量、または重みパラメータを記憶するために確保される容量）の比率に従って、設定することができる。
【００４９】
いくつかの別の例においては、ソフトウェアおよび／またはハードウェアのコストおよび動作性能が、Ｎ個の畳み込みカーネルの場合に比較的良好である（例えば、加算器のための選択／イネーブル回路を省くことができる、または比較的良好な並列処理を達成することができる）ことが、ニューラルネットワークの演算をサポートするハードウェアに関連するパラメータに基づいて判断される場合、第１の所定の数をＮとして設定することができる。このような設定は、各演算パラメータの演算を並列モードにおいて実行するときの並列処理またはリソース利用率を改善するうえで有利であり得る。
【００５０】
なお、第１の所定の数の設定は、上記の例に限定されないことを理解されたい。第１の所定の数は、必要な場合に任意の適切な値または任意の望ましい値として設定することができる。さらには、畳み込みニューラルネットワーク全体に対して第１の所定の数を設定することができ、その第１の所定の数を各層に適用することができる。または、それぞれの選択された層に対して、第１の所定の数を設定することができる。さらには、第１の所定の数は固定値を有することができる、または第１の所定の数を、畳み込みニューラルネットワークの前向き推論プロセスにおいて、システム（ハードウェアおよび／またはソフトウェアを含む）の条件（例えば動作性能、利用可能なリソースなど）、および／または、学習の条件に従って、更新することができる（例えば畳み込みニューラルネットワークにおける各層のパラメータも、前向き推論プロセスにおける学習によって動的に調整することができる）。
【００５１】
いくつかの別の実施形態においては、ステップＳ１０１において、重みパラメータのチャンネルの数が第３のしきい値を超える場合に、分割によって得られる演算パラメータ配列の中の各演算パラメータが第３のしきい値以下の数のチャンネルを有するように、その重みパラメータを分割することができる。
【００５２】
一例においては、第３のしきい値は、畳み込みニューラルネットワークの設計手順において、その畳み込みニューラルネットワークを適用するシナリオに関連する経験的データまたは統計的データと考慮事項との組合せに基づいて、畳み込みニューラルネットワークの設計者によって設定することができる。例えば、第３のしきい値を、８、３２、６４などとして設定することができる。
【００５３】
いくつかの別の例においては、第３のしきい値は、畳み込みニューラルネットワークにおける特定の重みパラメータ（例えば、最も大きいサイズの重みパラメータまたは最も小さいサイズの重みパラメータ）の１つのチャンネルにおけるサイズに対する、高速メモリの容量（例えば、合計容量、または重みパラメータを記憶するために確保される容量）の比率に従って、設定することができる。
【００５４】
いくつかの別の例においては、ニューラルネットワークの乗算演算および加算演算をサポートするハードウェア回路は、乗算器および加算器の１つまたは複数のグループの配置を含むことができ、乗算器および加算器の各グループの配置が、１つまたは複数の乗算器と、１つまたは複数の加算器とを含むことができる。重みパラメータが深さＭを有するときに、乗算器および加算器が最も高い（または比較的高い）利用率を有し、例えば選択／イネーブル回路の設計／配置を省くことができることが、乗算器および加算器の各グループの配置に基づいて判断される場合、第３のしきい値をＭとして設定することができる。例えば、重みパラメータが深さＤを有し、第３のしきい値がＭであると想定すると、演算パラメータ配列を、Ｄ／Ｍ個の列を有しかつ各列における各演算パラメータがＭより小さいかまたは等しい深さを有するように形成することができ、このことは、各演算パラメータの演算を並列モードにおいて実行するときの並列処理またはリソース利用率を改善するうえで有利であり得る。
【００５５】
なお、第３のしきい値の設定は、上記の例に限定されないことを理解されたい。第３のしきい値は、必要な場合に任意の適切な値または任意の望ましい値として設定することができる。さらには、畳み込みニューラルネットワーク全体に対して第３のしきい値を設定することができ、その第３のしきい値を各層に適用することができる。または、それぞれの選択された層に対して、第３のしきい値を設定することができる。さらには、第３のしきい値は固定値を有することができる、または第３のしきい値を、畳み込みニューラルネットワークの前向き推論プロセスにおいて、システム（ハードウェアおよび／またはソフトウェアを含む）の条件（例えば動作性能、利用可能なリソースなど）、および／または、学習の条件に従って、更新することができる（例えば畳み込みニューラルネットワークにおける各層のパラメータも、前向き推論プロセスにおける学習によって動的に調整することができる）。
【００５６】
いくつかの別の実施形態においては、ステップＳ１０１において、重みパラメータのチャンネルの数が第２の所定の数より大きいかまたは等しいときに、分割によって得られる演算パラメータ配列の列の数が第２の所定の数の倍数に等しいように、その重みパラメータを分割することができる。
【００５７】
一例においては、第２の所定の数は、畳み込みニューラルネットワークにおいて演算を処理するために使用されるプロセッサ（ＣＰＵ、ＧＰＵ、または専用アクセラレータなど）またはプロセッサコアの数に従って、設定することができる。
【００５８】
いくつかの別の例においては、第２の所定の数は、畳み込みニューラルネットワークにおける特定の重みパラメータ（例えば、最も大きいサイズの重みパラメータまたは最も小さいサイズの重みパラメータ）の深さに対する、高速メモリの容量（例えば、合計容量、または重みパラメータを記憶するために確保される容量）の比率に従って、設定することができる。
【００５９】
いくつかの別の例においては、ニューラルネットワークの乗算演算および加算演算をサポートするハードウェア回路は、乗算器および加算器の１つまたは複数のグループの配置を含むことができ、乗算器および加算器の各グループの配置が、１つまたは複数の乗算器と、１つまたは複数の加算器とを含むことができる。重みパラメータが深さＭを有するときに、乗算器および加算器が最も高い（または比較的高い）利用率を有し、例えば選択／イネーブル回路の設計／配置を省くことができることが、乗算器および加算器の各グループの配置に基づいて判断される場合、第２の所定の数をＭとして設定することができる。このような設定は、各演算パラメータの演算を並列モードにおいて実行するときの並列処理またはリソース利用率を改善するうえで有利であり得る。
【００６０】
なお、第２の所定の数の設定は、上記の例に限定されないことを理解されたい。第２の所定の数は、必要な場合に任意の適切な値または任意の望ましい値として設定することができる。さらには、畳み込みニューラルネットワーク全体に対して第２の所定の数を設定することができ、その第２の所定の数を各層に適用することができる。または、それぞれの選択された層に対して、第２の所定の数を設定することができる。さらには、第２の所定の数は固定値を有することができる、または第２の所定の数を、畳み込みニューラルネットワークの前向き推論プロセスにおいて、システム（ハードウェアおよび／またはソフトウェアを含む）の条件（例えば動作性能、利用可能なリソースなど）、および／または、学習の条件に従って、更新することができる（例えば畳み込みニューラルネットワークにおける各層のパラメータも、前向き推論プロセスにおける学習によって動的に調整することができる）。
【００６１】
いくつかの別の実施形態においては、畳み込みニューラルネットワークの特定の層が、全体として完全な入力データを構成する複数の部分入力データを受け取り、かつ、これらの部分入力データの任意の２つが同じチャンネルを共有しない、すなわち言い換えれば、入力特徴データが深さ方向において複数の部分入力データに分割されており、かつこれらの複数の部分入力データそれぞれがその層に提供されるならば、ステップＳ１０１において、分割によって得られる演算パラメータ配列が、受け取った複数の部分入力データの数に等しい数の列を有し、かつ各列におけるすべての演算パラメータが、受け取った複数の部分入力データの１つと同じ１つまたは複数のチャンネルに対応するように、この層の重みパラメータを各部分入力データに従って分割することができる。
【００６２】
例えば、図４に示したように、畳み込みニューラルネットワークにおける特定の層が２つの入力データＦＤ１およびＦＤ２を受け取り、これらの入力データＦＤ１およびＦＤ２が、（図４で矢印Ａ１によって示したように）実際には完全な特徴データＦＤの２つの部分に対応しているものと判定できるものと想定する。入力データＦＤ１は、特徴データＦＤのうちチャンネルＣ１およびＣ２における部分（図４にはそれぞれＦＤ＿Ｃ１およびＦＤ＿Ｃ２として示してある）に対応しており、入力データＦＤ２は、特徴データＦＤのうちチャンネルＣ３〜Ｃ５における部分（図４にはそれぞれＦＤ＿Ｃ３、ＦＤ＿Ｃ４、ＦＤ＿Ｃ５として示してある）に対応している。上述したように、この層をステップＳ１０１における選択される層として使用することができる、すなわち上記の判定を実行して、この層をステップＳ１０１における選択される層とみなすことができる。
【００６３】
このような場合、この層の２つのカーネル（Ｋ１およびＫ２）を含む重みパラメータを、受け取った入力データＦＤ１およびＦＤ２に従って、（図４で矢印Ａ２によって示したように）深さの次元において２つの部分に分割することができ、一方の部分は入力データＦＤ１に対応しており、かつ部分カーネルＦＤ１＿Ｋ１（カーネルＫ１のチャンネルＣ１およびＣ２を含む）および部分カーネルＦＤ１＿Ｋ２（カーネルＫ２のチャンネルＣ１およびＣ２を含む）を含み、他方の部分は入力データＦＤ２に対応しており、かつ部分カーネルＦＤ２＿Ｋ１（カーネルＫ１のチャンネルＣ３〜Ｃ５を含む）および部分カーネルＦＤ２＿Ｋ２（カーネルＫ２のチャンネルＣ３〜Ｃ５を含む）を含む。すなわち、この重みパラメータに対応する配列が、（図４で矢印Ａ３によって示したように）縦方向に２つの部分に分割され、これによって、１行２列（すなわち２つの演算パラメータ）を有する演算パラメータ配列（図４で矢印Ａ４が指している部分）が生成される。第１行第１列の演算パラメータは、入力データＦＤ１と同じ複数のチャンネル（すなわちＣ１およびＣ２）に対応しており、第１行第２列の演算パラメータは、入力データＦＤ２と同じ複数のチャンネル（すなわちＣ３〜Ｃ５）に対応している。
【００６４】
いくつかの別の実施形態においては、ステップＳ１０１において、重みパラメータを分割するかを、複数の基準に従って決定することができ、得られる演算パラメータの配列は、複数の条件を同時に満たすことができる。
【００６５】
一例においては、得られる演算パラメータ配列の中の各演算パラメータが、第１のしきい値より小さいかまたは等しいサイズを有し、かつ、第２のしきい値より小さいかまたは等しい数のカーネルを含むように、重みパラメータを分割することができる。
【００６６】
いくつかの別の例においては、得られる演算パラメータ配列が、第１の所定の数の倍数に等しい数の行を有し、かつ、演算パラメータ配列の中の各演算パラメータが、第３のしきい値より小さいかまたは等しい数のチャンネルを有するように、重みパラメータを分割することができる。
【００６７】
いくつかの別の例においては、得られる演算パラメータ配列が、第１の所定の数の倍数に等しい数の行と、第２の所定の数の倍数に等しい数の列とを有するように、重みパラメータを分割することができる。
【００６８】
いくつかの別の例においては、得られた演算パラメータ配列が、第１のしきい値を超えるサイズを有する演算パラメータを含む場合、第１のしきい値を超えるサイズを有する演算パラメータが位置する少なくとも行および／または列を、深さの次元およびカーネル数の次元の少なくとも一方においてさらに分割し、この場合、さらに分割された演算パラメータ配列の中の各演算パラメータが、第１のしきい値より小さいかまたは等しいサイズを有するように分割することができる。
【００６９】
ステップＳ１０１において、複数の演算パラメータを含む演算パラメータ配列を得た後、方法１００はステップＳ１０５に進むことができ、ステップＳ１０５においては、得られた演算パラメータ配列の中の各演算パラメータをそれぞれ使用して、選択された層の入力データのうち、使用される演算パラメータの（１つまたは複数の）チャンネルに対応する、（１つまたは複数の）チャンネル内であるデータに対して、選択された層の演算を実行することができ、結果として、複数の部分演算結果を含む部分演算結果配列が得られる。
【００７０】
図５は、本開示の実施形態に係る、分割された演算パラメータを使用して演算を実行する例を示している。図５に示したように、入力データＦＤに対して畳み込み演算を実行するために３つのカーネルＫ１〜Ｋ３が使用され、入力データＦＤが５つのチャンネルＦＤ＿Ｃ１〜ＦＤ＿Ｃ５を有し、各カーネルＫ１〜Ｋ３も５つのチャンネル（すなわちそれぞれＫ１＿Ｃ１〜Ｋ１＿Ｃ５、Ｋ２＿Ｃ１〜Ｋ２＿Ｃ５、Ｋ３＿Ｃ１〜Ｋ３＿Ｃ５）を有するものと想定する。
【００７１】
図５を参照し、重みパラメータがステップＳ１０１において深さおよびカーネル数の両方の次元において４つの部分に分割されており、したがって２行２列を有する演算パラメータ配列が得られているものと想定する。この演算パラメータ配列の第１行第１列の演算パラメータは、チャンネルＣ１およびＣ２におけるカーネルＫ１およびＫ２の部分に対応しており、第１行第２列の演算パラメータは、チャンネルＣ３〜Ｃ５におけるカーネルＫ１およびＫ２の部分に対応しており、第２行第１列の演算パラメータは、チャンネルＣ１およびＣ２におけるカーネルＫ３〜Ｋ５の部分に対応しており、第２行第２列の演算パラメータは、チャンネルＣ３〜Ｃ５におけるカーネルＫ３〜Ｋ５の部分に対応している。
【００７２】
ステップＳ１０５においては、演算パラメータ配列の第１行第１列の演算パラメータを使用して、入力データＦＤのうちチャンネルＣ１およびＣ２における部分に対して畳み込み演算を実行し、これによって部分演算結果ＦＤ’＿（Ｃ１−Ｃ２）＿１が生成される。さらに演算パラメータ配列の第１行第２列の演算パラメータを使用して、入力データＦＤのうちチャンネルＣ３〜Ｃ５における部分に対して畳み込み演算を実行し、これによって部分演算結果ＦＤ’＿（Ｃ３−Ｃ５）＿１が生成される。さらに演算パラメータ配列の第２行第１列の演算パラメータを使用して、入力データＦＤのうちチャンネルＣ１およびＣ２における部分に対して畳み込み演算を実行し、これによって部分演算結果ＦＤ’＿（Ｃ１−Ｃ２）＿２が生成される。さらに演算パラメータ配列の第２行第２列の演算パラメータを使用して、入力データＦＤのうちチャンネルＣ３〜Ｃ５における部分に対して畳み込み演算を実行し、これによって部分演算結果ＦＤ’＿（Ｃ３−Ｃ５）＿２が生成される。
【００７３】
図５に示したように、生成された４つの部分演算結果は、２行２列を有する部分演算結果配列を形成することができる。生成された部分演算結果配列は、図５における両方向矢印の下に示してあり、部分演算結果配列の中の各部分演算結果のさらに分かりやすい表現が、図５における両方向矢印の上に示してある。
【００７４】
図５は、畳み込み層の一例を示している。しかしながら、本開示の実施形態に係る本方法の原理は、畳み込みニューラルネットワークにおける別のタイプの層にも適用することができる。例えば、図５における特徴データＦＤが、残余層（residual layer）の入力データの役割を果たす場合、この残余層の重みパラメータを、ステップＳ１０１において深さの次元およびカーネル数の次元の少なくとも一方において分割して、複数の演算パラメータを含む演算パラメータ配列を得ることができる。次いでステップＳ１０５において、演算パラメータ配列の中の各演算パラメータをそれぞれ使用して、残余層の入力データのうち、使用される演算パラメータの（１つまたは複数の）チャンネルに対応する、（１つまたは複数の）チャンネル内のデータに対して演算を実行することができ、このステップは、各演算パラメータと、入力データのうち対応する（１つまたは複数の）チャンネル内のデータとを使用することによって計算された部分結果に対して、対応する部分ごとの加算演算（point-to-point add operations）を実行するステップを含む。したがって、複数の部分演算結果を含む部分演算結果配列を得ることができる。
【００７５】
ステップＳ１０５は、複数の演算パラメータに対して連続的に、または並行して実行することができる、あるいは、演算パラメータの行または列に対して並行して実行することができる。
【００７６】
部分演算結果配列を得た後、方法１００はステップＳ１１０に進み、得られた部分演算結果配列に基づいて１つまたは複数の出力データを生成することができる。選択された層が畳み込みニューラルネットワークの最後の出力層である場合、出力データは、得られた部分演算結果配列に基づいて、畳み込みニューラルネットワーク全体の最終出力として生成することができる。選択された層が畳み込みニューラルネットワークの入力層または中間層（隠れ層）である場合、出力データは、必要に応じて以下の方法のいずれかにおいて生成することができ、生成された出力データを次の層に提供することができる。
−  部分演算結果配列の中の各部分演算結果を、選択された層の出力データとして次の層に提供する。
−  得られた部分演算結果配列に基づいて出力データを生成し、生成された出力データを次の層に提供する。
−  部分演算結果配列を、より少ない行および／またはより少ない列を有する部分演算結果配列に圧縮するため、部分演算結果配列の隣接する行および／または列におけるいくつかの部分演算結果を結合し、次いで、圧縮された部分演算結果配列の中の各部分演算結果を、選択された層の出力データとして次の層に提供する。
【００７７】
実施形態においては、部分演算結果配列の各行におけるすべての部分演算結果に対して、対応する部分ごとの加算演算を実行することによって、複数の列を有する部分演算結果配列を１列に圧縮することができ、次いで、圧縮された部分演算結果配列の中の各部分演算結果を、選択された層の１つの出力データとして次の層に提供することができる。
【００７８】
例えば、図５における部分演算結果配列ＦＤ’の場合、図６に示したように、部分演算結果配列ＦＤ’の第１行におけるすべての部分演算結果（ＦＤ’＿（Ｃ１−Ｃ２）＿１およびＦＤ’＿（Ｃ１−Ｃ２）＿２）を、対応する部分ごとに加算することができ、部分演算結果配列ＦＤ’の第２行におけるすべての部分演算結果（ＦＤ’＿（Ｃ３−Ｃ５）＿１、ＦＤ’＿（Ｃ３−Ｃ５）＿２）を、対応する部分ごとに加算することができ、これによって、圧縮された部分演算結果配列ＦＤ’’が生成される。圧縮された部分演算結果配列ＦＤ’’は、２行１列を有し、第１行における部分演算結果ＦＤ’＿（Ｃ１−Ｃ２）は、チャンネルＣ１およびＣ２における部分演算結果に対応しており、第２行における部分演算結果ＦＤ’＿（Ｃ３−Ｃ５）は、チャンネルＣ３〜Ｃ５における部分演算結果に対応している。次いで、ＦＤ’＿（Ｃ１−Ｃ２）およびＦＤ’＿（Ｃ３−Ｃ５）を、２つの出力データとして次の層に提供することができる。
【００７９】
次いで、次の層において方法１００を再び適用することができる。例えば、上述したように、ステップＳ１０１においては、複数の部分入力データを受け取ると、それに応えて、その層の重みパラメータを、各部分入力データに従って分割することができ、この場合、分割によって得られる演算パラメータ配列が、その層が受け取った複数の部分入力データの数に等しい数の列を有し、かつ、各列におけるすべての演算パラメータが、その層が受け取った複数の部分入力データの１つと同じ１つまたは複数のチャンネルに対応するように、分割する。
【００８０】
いくつかの別の実施形態においては、部分演算結果配列の各列におけるすべての部分演算結果を深さ方向において一緒に結合することによって、複数の行を有する部分演算結果配列を、１行に圧縮することができ、次いで、圧縮された部分演算結果配列の中の各部分演算結果を、選択された層の１つの出力データとしてそれぞれ次の層に提供することができる。
【００８１】
例えば、図５における部分演算結果配列ＦＤ’の場合、図７に示したように、部分演算結果配列ＦＤ’の第１列におけるすべての部分演算結果（ＦＤ’＿（Ｃ１−Ｃ２）＿１およびＦＤ’＿（Ｃ３−Ｃ５）＿１）は、深さ方向において一緒に結合されたそれぞれのチャンネルを有することができ、部分演算結果配列ＦＤ’の第２列におけるすべての部分演算結果（ＦＤ’＿（Ｃ１−Ｃ２）＿２およびＦＤ’＿（Ｃ３−Ｃ５）＿２）は、深さ方向において一緒に結合されたそれぞれのチャンネルを有することができ、したがって、圧縮された部分演算結果配列ＦＤ’’が生成される。圧縮された部分演算結果配列ＦＤ’’は、１行２列を有し、第１列における部分演算結果ＦＤ’＿１および第２列における部分演算結果ＦＤ’＿２それぞれが、チャンネルＣ１〜Ｃ５を有する。次いで、部分演算結果ＦＤ’＿１およびＦＤ’＿２を、２つの出力データとして次の層に提供することができる。
【００８２】
次いで、次の層において、例えば、その層の重みパラメータを使用して、各部分入力データに対して演算を実行することができ、演算によって得られた結果を、対応する部分ごとに加算することができる。例えば図８に示したように、図７に示した２つの部分入力データＦＤ’＿１およびＦＤ’＿２を次の層が受け取り、次の層の重みパラメータは３つのカーネルＫ１〜Ｋ３を有し、各カーネルが５つのチャンネルＣ１〜Ｃ５を含む。次いで、２つの部分出力データＦＤ’’＿１およびＦＤ’’＿２を得るために、この重みパラメータを使用して、部分入力データＦＤ’＿１およびＦＤ’＿２それぞれに対して演算を実行することができ、２つの部分出力データＦＤ’’＿１およびＦＤ’’＿２を、対応する部分ごとに互いに加算することができ、最終的に次の層の出力データＦＤ’’’が得られる。図８に示した例においては、２つの部分出力データＦＤ’’＿１およびＦＤ’’＿２を、対応する部分ごとの加算演算を行わずに、さらに次の層に直接提供してもよい。いくつかの別の例においては、次の層が受け取る２つの部分入力データを、最初に対応する部分ごとに加算して完全な入力データを得ることができ、次いで、この完全な入力データに対して従来の演算を実行することができる、または本開示の実施形態に係る方法を使用することによって演算を実行することができる。別の例においては、次の層において、本開示の実施形態に係る方法を直接適用することができ、次の層の重みパラメータを最初に分割することができる。
【００８３】
いくつかの別の実施形態においては、複数の行および複数の列を含む部分演算結果配列の場合、部分演算結果配列の各行における部分演算結果を、対応する部分ごとに加算し、圧縮された部分演算結果配列の各列におけるすべての部分演算結果を深さ方向に一緒に結合することによって、出力データを生成することができる、または、部分演算結果配列の各列におけるすべての部分演算結果を深さ方向に一緒に結合し、圧縮された部分演算結果配列の各行における部分演算結果を、対応する部分ごとに加算することによって、出力データを生成することができる。
【００８４】
例えば、図６および図７に示した例を、図９または図１０に示したように組み合わせて、出力データＦＤ’を生成することができる。最終的な出力データは、図９に示した例と図１０に示した例とで同じであることがわかる。
【００８５】
いくつかの別の実施形態においては、複数の行および複数の列を含む部分演算結果配列を、上述した圧縮方法に類似する方法で、行および／または列において圧縮し、より少ない行および／またはより少ない列を有する部分演算結果配列を得ることができ、次いで、圧縮された部分演算結果配列の中の各部分演算結果を、それぞれ出力データとして次の層に提供することができる。
【００８６】
例えば、３行３列を有する部分演算結果配列の場合、第１列のすべての部分演算結果と、第２列のすべての部分演算結果を、対応する部分ごとに加算して、結果として３行２列を有する部分演算結果配列を得ることができる。次いで、圧縮された部分演算結果配列の第２行のすべての部分演算結果と、第３行のすべての部分演算結果のそれぞれのチャンネルを深さ方向において一緒に結合して、２行２列を有するさらに小さい部分演算結果配列を得ることができる。次いで、２行２列を有する、このさらに小さい部分演算結果配列の中の各部分演算結果を、出力データとして次の層に提供することができる。
【００８７】
図１１および図１２は、上記の方法を実行する、本開示の実施形態に係る装置のブロック図を示している。
【００８８】
図１１に示したように、例示的な装置１１００は、１つまたは複数のプロセッサ１１１０を含むことができる。プロセッサ１１１０は、データを処理する、および／または、命令を実行することのできる任意の処理装置（汎用ＣＰＵ、ＧＰＵ、またはニューラルネットワーク専用プロセッサもしくはアクセラレータなど）とすることができる。例えば、プロセッサ１１１０は、本開示の実施形態に係る方法を実行することができる。これに加えて、プロセッサ１１１０は、装置１１００の中の別の構成要素を、所望の機能を実行するように制御することもできる。
【００８９】
プロセッサ１１１０は、バスシステムおよび／または別の相互接続機構（図示していない）を通じて、メモリ１１２０およびＩ／Ｏインタフェース１１３０に接続することができる。
【００９０】
メモリ１１２０は、さまざまな形態におけるコンピュータ読み取り可能かつ書き込み可能記憶媒体（例えば揮発性メモリおよび／または不揮発性メモリ）を含むことができる。揮発性メモリとしては、例えば、ランダムアクセスメモリ（ＲＡＭ）、キャッシュなどが挙げられる。不揮発性メモリとしては、例えば、読み出し専用メモリ（ＲＯＭ）、ハードディスク、フラッシュメモリなどが挙げられる。読み取り可能かつ書き込み可能記憶媒体としては、以下に限定されないが、電気、磁気、光学、電磁気、赤外、または半導体の、システム、装置、またはデバイス、あるいはこれらの任意の組合せが挙げられる。例えば、ニューラルネットワーク専用のプロセッサと一緒に使用される場合、メモリ１１２０を、その専用プロセッサを担持するチップ上のＲＡＭとすることもできる。メモリ１１２０は、ニューラルネットワークの特徴データを適合させる、本開示の実施形態に係る方法を実行するように、装置１１００に命令するプログラム命令を含むことができる。
【００９１】
Ｉ／Ｏインタフェース１１３０は、パラメータまたはデータをプロセッサ１１１０に提供するようにと、プロセッサ１１１０によって処理された結果データを出力するように構成することができる。
【００９２】
さらに、図１２に示したように、例示的な装置１２００は、分割器１２１０と、演算器１２２０と、生成器１２３０とを含むことができる。
【００９３】
分割器１２１０は、複数の演算パラメータを含む演算パラメータ配列を得るために、畳み込みニューラルネットワークにおける選択された層の重みパラメータを、深さの次元およびカーネル数の次元の少なくとも一方において分割するように構成することができる。演算パラメータ配列の各行におけるすべての演算パラメータは、重みパラメータのカーネルのセットの同じサブセットからであり、かつ異なるチャンネルを有し、各列における各演算パラメータは、重みパラメータのカーネルのセットの異なるサブセットからであり、かつ同じ１つまたは複数のチャンネルを有する。一実施形態においては、分割器１２１０は、例えば例示的な方法１００におけるステップＳ１０１を実行するように構成することができる。
【００９４】
演算器１２２０は、複数の部分演算結果を含む部分演算結果配列を得るために、演算パラメータ配列の中の各演算パラメータを使用して、選択された層の入力データのうち、使用される演算パラメータの（１つまたは複数の）チャンネルに対応する、（１つまたは複数の）チャンネル内であるデータに対して、選択された層の演算を実行するように構成することができる。一実施形態においては、演算器１２２０は、例えば例示的な方法１００におけるステップＳ１０５を実行するように構成することができる。
【００９５】
生成器１２３０は、選択された層の１つまたは複数の出力データを、部分演算結果配列に基づいて生成するように構成することができる。一実施形態においては、生成器１２３０は、例えば例示的な方法１００におけるステップＳ１１０を実行するように構成することができる。
【００９６】
なお、図１１に示した装置１１００および図１２に示した装置１２００は、単なる例であり、本発明の範囲をいかようにも制限しないことを理解されたい。本開示に実施形態に係る装置は、必要な場合に別の構成要素および／または別の構造を有することができる。
【００９７】
本開示の実施形態に係る方法および／または装置によって、畳み込みニューラルネットワークにおける大きなパラメータの畳み込み演算を、より小さいいくつかの畳み込み演算に分割することができ、かつ分割前と分割後とで結果の一貫性が維持され、このことは、演算の並列処理および／または実行効率を改善するうえで有利である。これに加えて、ハードウェアが限定されること（専用のハードウェアアクセラレータなど）を回避することができ、したがって、ハードウェアを任意のサイズの重みパラメータの畳み込み演算用に使用することができる。さらには、大きな重みパラメータを、より小さいいくつかの重みパラメータに分割することによって、各演算の重みパラメータ全体を高速メモリにキャッシュすることができ、これによって演算の正確さを確保することができ、また、データの受渡しを小さくすることができ、これらは、ハードウェアの実行効率を改善するうえで有利である。
【００９８】
文脈において明らかに求められない限り、説明および請求項全体を通じて、「〜を備えている」および「〜を含む」などの語は、記載されていない要素は含まない、またはすべての要素を網羅している意味ではなく、記載されていない要素も含みうるように（すなわち「〜を含み、ただしそれらに限定されない」という意味として）解釈されるものとする。さらには、語「ここで」、「上に」、「下に」、および類似する語は、本開示の中で使用されているとき、本開示のいずれかの特定の部分ではなく、本開示を全体として指すものとする。上の説明において使用されている単数形の語または複数形の語は、文脈において許容されるとき、それぞれ複数の要素または単数の要素を含みうる。２つ以上の項目のリスト（羅列）に関連する語「または」は、この語の次の解釈、すなわち、リストの中の項目のいずれか、リストの中の項目すべて、リストの中の項目の任意の組合せ、のすべてをカバーする。
【００９９】
本開示の実施形態の上の詳細な説明は、本開示のあらゆる形態を網羅すること、または本開示を上に開示した特定の形態に限定することを意図していない。上記には、実例を目的として本開示の特定の実施形態および例を説明したが、当業者に理解されるように、本開示の範囲内で、さまざまな同等の変形形態が可能である。例えば、プロセスやブロックは特定の順序で提示してあるが、代替実施形態では、これらのステップを別の順序で含むプロセスを実行する、またはこれらのブロックを別の順序で含むシステムを採用することができ、また、いくつかのプロセスまたはブロックを、削除する、移動する、加える、分割する、組み合わせる、および／または修正することができる。これらのプロセスまたはブロックのそれぞれは、さまざまな異なる方法で実施することができる。さらに、場合によってはこれらのプロセスまたはブロックが連続して実行されるものとして示してあるが、これらのプロセスまたはブロックを並列に実行する、または異なるタイミングで実行してもよい。
【０１００】
本明細書に提供されている本開示の教示内容は、必ずしも上述したシステムではなく、別のシステムに適用することができる。上述したさまざまな実施形態の要素および動作を組み合わせて、さらなる実施形態を提供することができる。
【０１０１】
本開示のいくつかの実施形態を説明してきたが、これらの実施形態は一例として提示されているにすぎず、本開示の範囲を制限するようには意図されていない。本明細書に記載されている新規の方法およびシステムは、実際にはさまざまな別の形態に具体化することができる。さらには、本明細書に記載されている方法およびシステムの形態において、本開示の趣旨から逸脱することなく、さまざまな省略、置き換え、および変更を行うことができる。
【図１】
2019082996.tif 000003
【図２】
2019082996.tif 000004
【図３】
2019082996.tif 000005
【図４】
2019082996.tif 000006
【図５】
2019082996.tif 000007
【図６】
2019082996.tif 000008
【図７】
2019082996.tif 000009
【図８】
2019082996.tif 000010
【図９】
2019082996.tif 000011
【図１０】
2019082996.tif 000012
【図１１】
2019082996.tif 000013
【図１２】
2019082996.tif 000014
【外国語明細書】
2019082996000001.pdf