(57)【要約】  本発明は、ゼロではない値となりやすい活性化関数を用いるＤＮＮシステムにおいて、各層の演算を高速に処理する情報処理装置を提供する。情報処理装置は、スパース要素検出部と、スパース位置重み加算部と、乗算部と、非スパースデータ演算部と、加算部と、を備える。スパース要素検出部は、入力データから予め定められたスパース要素を検出し、スパース要素に関する情報を出力する。スパース位置重み加算部は、スパース要素に対応する第１の重み要素同士を加算する。乗算部は、スパース位置重み加算部の出力にスパース要素を乗算する。非スパースデータ演算部は、入力データのうちスパース要素以外の要素である非スパース要素に関する演算を行う。加算部は、乗算部の出力と非スパースデータ演算部の出力を加算する。
2019088072.tif 000002
【特許請求の範囲】
【請求項１】
入力データから予め定められたスパース要素を検出し、前記スパース要素に関する情報を出力する、スパース要素検出部と、
前記スパース要素に対応する第１の重み要素同士を加算する、スパース位置重み加算部と、
前記スパース位置重み加算部の出力に前記スパース要素を乗算する、乗算部と、
前記入力データのうち前記スパース要素以外の要素である非スパース要素に関する演算を行う、非スパースデータ演算部と、
前記乗算部の出力と前記非スパースデータ演算部の出力を加算する、加算部と、
を備える、情報処理装置。
【請求項２】
前記第１の重み要素を含む重みから前記第１の重み要素を取得する、スパース位置重み取得部をさらに備える、請求項１の情報処理装置。
【請求項３】
前記スパース位置重み加算部は、前記スパース位置重み取得部が出力する前記第１の重み要素同士の和を計算する、請求項２の情報処理装置。
【請求項４】
前記第１の重み要素と前記非スパース要素に対応する第２の重み要素を含む重みから前記第２の重み要素を取得する、非スパース位置重み取得部をさらに備える、請求項１の情報処理装置。
【請求項５】
前記スパース位置重み加算部は、
前記非スパース位置重み取得部が出力する前記第２の重み要素同士の和を計算する、重み加算部と、
前記第１及び第２の重み要素の総和値から前記重み加算部の出力を減算する、減算部と、
を備える、請求項４の情報処理装置。
【請求項６】
前記第１の重み要素と前記非スパース要素に対応する第２の重み要素を含む重みから前記第１の重み要素を取得する、スパース位置重み取得部と、
前記重みから前記第２の重み要素を取得する、非スパース位置重み取得部と、
をさらに備える、請求項１の情報処理装置。
【請求項７】
前記スパース位置重み加算部は、
前記入力データに占める前記スパース要素の割合をスパース度として算出する、スパース度算出部と、
前記スパース度に基づいて、前記スパース位置重み取得部が出力する前記第１の重み要素か、前記非スパース位置重み取得部が出力する前記第２の重み要素か、のいずれかを選択して出力する、重み選択部と、
前記重み選択部が出力する前記第１及び第２の重み要素のいずれか同士の和を計算する、重み加算部と、
前記第１及び第２の重み要素の総和値から前記重み加算部の出力を減算する、減算部と、
前記スパース度に基づき、前記重み加算部の出力及び前記減算部の出力のいずれかを出力する、結果選択部と、
を備える、請求項６の情報処理装置。
【請求項８】
前記非スパースデータ演算部は、
前記非スパース要素と前記非スパース要素に対応する重み要素の乗算を、前記入力データに含まれる前記非スパース要素について繰り返し、前記乗算の繰り返しにより得られた結果を加算する、請求項１乃至７のいずれか一項に記載の情報処理装置。
【請求項９】
入力データから予め定められたスパース要素を検出し、前記スパース要素に関する情報を出力するステップと、
前記スパース要素に対応する第１の重み要素同士を加算するステップと、
前記第１の重み要素同士の加算結果に前記スパース要素を乗算するステップと、
前記入力データのうち前記スパース要素以外の要素である非スパース要素に関する演算を行うステップと、
前記第１の重み要素同士の加算結果と前記スパース要素の乗算結果と前記非スパース要素に関する演算結果を加算するステップと、
を含む、情報処理方法。
【請求項１０】
入力データから予め定められたスパース要素を検出し、前記スパース要素に関する情報を出力する処理と、
前記スパース要素に対応する第１の重み要素同士を加算する処理と、
前記第１の重み要素同士の加算結果に前記スパース要素を乗算する処理と、
前記入力データのうち前記スパース要素以外の要素である非スパース要素に関する演算を行う処理と、
前記第１の重み要素同士の加算結果と前記スパース要素の乗算結果と前記非スパース要素に関する演算結果を加算する処理と、
をコンピュータに実行させるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
（関連出願についての記載）
本発明は、日本国特許出願：特願２０１７−２１１７６１号（２０１７年１１月１日出願）の優先権主張に基づくものであり、同出願の全記載内容は引用をもって本書に組み込み記載されているものとする。
本発明は、情報処理装置、情報処理方法及びプログラムに関する。
【背景技術】
【０００２】
近年、深層学習（ディープラーニング）に関する技術開発が活発に行われている。深層学習では、深層ニューラルネットワーク（ＤＮＮ；Deep Neural Network）が用いられる。深層ニューラルネットワークを用いたＤＮＮシステムには複数の層（レイヤ）が含まれる。各層では、入力データに対する行列演算を大量に処理する（行列演算を大量に適用する）。【０００３】
例えば、ＤＮＮシステムの一例である畳み込み深層ニューラルネットワーク（ＣＮＮ；Convolutional Neural Network）における行列演算適用を考える。この場合、行列演算適用とは、フィルタ処理適用であり、下記の式（１）に示す畳み込み演算を示す。
Ａ  ＝  Σ（Ｗ（ｉ、ｊ）×Ｘ（ｉ、ｊ））  ・・・（１）
なお、Ｗ（ｉ、ｊ）はフィルタを構成する重みである。Ｘ（ｉ、ｊ）は各層への入力データである。上述のようにＤＮＮシステムには複数の層が含まれ、各層は縦続接続されている。そのため、ある層への入力データは前段の層の出力データとなる。ＤＮＮシステムにおける前層の出力データはアクティベーションとも称される。式（１）におけるＡは出力データである。即ち、Ａがアクティベーションである。式（１）におけるｉ、ｊは共に正の整数であり、重みや入力データを特定するサフィックス（インデックス）である。式（１）から分かるように、ＣＮＮにおける畳み込み演算は、行列の要素ごとの乗算結果の合計である。【０００４】
ＤＮＮシステムやＣＮＮシステムを構成する層の一例として、全結合層（ＦＣ層；Fully Connect Layer）が挙げられる。全結合層では、入力値のベクトルと重みベクトルとの内積が行われる。【０００５】
このように、ＤＮＮシステム等では、上記畳み込み演算やベクトル内積処理を行う必要がある。当該畳み込み演算等では、大量の乗加算（ｄ＝（ａ×ｂ）＋ｃ）を必要とし、ＤＮＮでは計算処理時間が膨大になるといった問題がある。【０００６】
このような問題を解決するための１つの手段として、アクティベーションのスパース性（スパーシティ）を利用した技術が存在する。なお、アクティベーションスパーシティとは、現実のＤＮＮシステムにおいて、各層の出力値であるアクティベーションにはゼロが含まれることが多い、という特性である。つまり、アクティベーションスパーシティとは、ある層の出力値は、次の層の入力値になることから、上記畳み込み演算においては、入力データＸ（ｉ、ｊ）がゼロであることが多いことを意味する。【０００７】
入力データＸ（ｉ、ｊ）がゼロであるとき、当該データを用いた乗算処理（Ｗ（ｉ、ｊ）×Ｘ（ｉ、ｊ））の結果もゼロとなる。従って、乗算処理の前に入力データＸ（ｉ、ｊ）がゼロであることを検出することで乗算処理を省略することができ、ＤＮＮシステムの処理時間を削減できる。このようなアクティベーションのスパース性（スパーシティ）を利用して高速処理を行うＤＮＮシステム（以降、このようなＤＮＮシステムをスパースＤＮＮシステムと表記する）の一例が、非特許文献１に記載されている。【０００８】
図１２は、非特許文献１に開示された技術を説明するための図である。非特許文献１に開示されたスパースＤＮＮシステムを簡略化すると図１２に示すような構成となる。図１２を参照すると、当該スパースＤＮＮシステムは、ゼロ検出部９１と、非ゼロ値演算部９２と、を含んで構成される。【０００９】
図１２の構成を有するスパースＤＮＮシステムの動作概略を図示すると図１３に示すフローチャートのようになる。【００１０】
初めに、ゼロ検出部９１が、前層の出力値（即ち、アクティベーション）を入力データとして取得する（ステップＳ４０１）。その後、ゼロ検出部９１が、アクティベーションの中でゼロである箇所（位置、インデックス）を検出する（入力データのゼロ要素を検出する；ステップＳ４０２）。次に、非ゼロ値演算部９２は、ゼロ検出部９１の出力を用いて非ゼロのアクティベーションに限って乗加算演算を行う（入力データの非ゼロ値と非ゼロ位置に対応する重み要素の乗加算を行う；ステップＳ４０３）。その後、非ゼロ値演算部９２は、演算結果を出力する（ステップＳ４０４）。【００１１】
図１２のスパースＤＮＮシステムでは、非ゼロのアクティベーションに限って上記乗加算演算を行うため、全アクティベーションに対して乗加算を行う場合と比較し、演算回数を削減できる。また、当該スパースＤＮＮシステムでは、高速に演算結果を得ることもできる。
【先行技術文献】
【非特許文献】
【００１２】
【非特許文献１】Song Han, et. al., “EIE: Efficient Inference Engine on Compressed Deep Neural Network”, International Symposium on Computer Architecture (ISCA) 2016.
【発明の概要】
【発明が解決しようとする課題】
【００１３】
なお、上記先行技術文献の開示を、本書に引用をもって繰り込むものとする。以下の分析は、本発明者らによってなされたものである。【００１４】
上述のように、非特許文献１等のスパースＤＮＮシステムには、演算回数の削減が可能という利点があるが、以下のような問題点もある。【００１５】
具体的には、上記スパースＤＮＮシステムには、適用範囲に厳しい制限がある。その理由は、上記スパース性を活用した高速化が十分に機能するのは、ＤＮＮの各層における内部演算結果に適用される活性化関数として特定の関数の使用を前提としているためである。より詳細には、上記スパースＤＮＮシステムでは、出力がゼロになりやすい特性を持つ活性化関数の使用を前提としている。従って、出力がゼロ以外の値になりやすい活性化関数を用いるＤＮＮシステムでは、スパース性を有効に活用することができない。換言すれば、ゼロ以外の値になりやすい活性化関数を用いるＤＮＮシステムに対しては、非特許文献１等の技術では、スパース性を活用した高速化が実現できない。【００１６】
ここで、種々の活性化関数について説明する。図１４は、各種の活性化関数を説明するための図である。図１４（ａ）は、ＲｅＬＵ（Rectified Linear Unit）関数の一例を示す図である。図１４（ｂ）は、ＥＬＵ（Exponential Linear Unit）関数の一例を示す図である。図１４（ｃ）は、ｔａｎｈ（hyperbolic tangent）関数の一例を示す図である。【００１７】
図１４（ａ）に示すＲｅＬＵ関数は、入力値（ｘ軸）が負数の場合、出力（ｙ軸）がゼロになる関数である。つまり、ＲｅＬＵ関数は、出力がゼロになりやすい特性を持つ活性化関数の一例である。一方、図１４（ｂ）に示すＥＬＵ関数や図１４（ｃ）に示すｔａｎｈ関数は、入力値が負数の場合、入力値の絶対値が大きくなるほど「−１」に漸近する関数である。つまり、ＥＬＵ関数やｔａｎｈ関数は、出力値はゼロではなく、「−１」になりやすい。【００１８】
なお、数学的な観点では、ＥＬＵ関数やｔａｎｈ関数の出力値が「−１」になることはなく、漸近するだけである。しかしながら、コンピュータプログラムやハードウェア回路としてこれらの関数を実装する場合には、出力値を有限のビット数で表現する必要がある。そのため、結果的に、上記関数の出力値は「−１」となり得る。あるいは、実装によっては、入力値の絶対値が一定の閾値以上になった場合に出力値を「−１」にする等の処理により「−１」が出力されやすくなる。【００１９】
本発明は、ゼロではない値となりやすい活性化関数を用いるＤＮＮシステムにおいて、各層の演算を高速に処理する、情報処理装置、情報処理方法及びプログラムを提供することを目的とする。
【課題を解決するための手段】
【００２０】
本発明乃至開示の第１の視点によれば、入力データから予め定められたスパース要素を検出し、前記スパース要素に関する情報を出力する、スパース要素検出部と、前記スパース要素に対応する第１の重み要素同士を加算する、スパース位置重み加算部と、前記スパース位置重み加算部の出力に前記スパース要素を乗算する、乗算部と、前記入力データのうち前記スパース要素以外の要素である非スパース要素に関する演算を行う、非スパースデータ演算部と、前記乗算部の出力と前記非スパースデータ演算部の出力を加算する、加算部と、を備える、情報処理装置が提供される。【００２１】
本発明乃至開示の第２の視点によれば、入力データから予め定められたスパース要素を検出し、前記スパース要素に関する情報を出力するステップと、前記スパース要素に対応する第１の重み要素同士を加算するステップと、前記第１の重み要素同士の加算結果に前記スパース要素を乗算するステップと、前記入力データのうち前記スパース要素以外の要素である非スパース要素に関する演算を行うステップと、前記第１の重み要素同士の加算結果と前記スパース要素の乗算結果と前記非スパース要素に関する演算結果を加算するステップと、を含む、情報処理方法が提供される。【００２２】
本発明乃至開示の第３の視点によれば、入力データから予め定められたスパース要素を検出し、前記スパース要素に関する情報を出力する処理と、前記スパース要素に対応する第１の重み要素同士を加算する処理と、前記第１の重み要素同士の加算結果に前記スパース要素を乗算する処理と、前記入力データのうち前記スパース要素以外の要素である非スパース要素に関する演算を行う処理と、前記第１の重み要素同士の加算結果と前記スパース要素の乗算結果と前記非スパース要素に関する演算結果を加算する処理と、をコンピュータに実行させるプログラムが提供される。
なお、このプログラムは、コンピュータが読み取り可能な記憶媒体に記録することができる。記憶媒体は、半導体メモリ、ハードディスク、磁気記録媒体、光記録媒体等の非トランジェント（non-transient）なものとすることができる。本発明は、コンピュータプログラム製品として具現することも可能である。
【発明の効果】
【００２３】
本発明乃至開示の各視点によれば、ゼロではない値となりやすい活性化関数を用いるＤＮＮシステムにおいて、各層の演算を高速に処理する、情報処理装置、情報処理方法及びプログラムが、提供される。
【図面の簡単な説明】
【００２４】
【図１】一実施形態の概要を説明するための図である。
【図２】第１の実施形態に係る推論装置に含まれる乗加算演算部の内部構成の一例を示す図である。
【図３】第１の実施形態に係る乗加算演算部の動作を説明するための図である。
【図４】第１の実施形態に係る乗加算演算部の動作の一例を示すフローチャートである。
【図５】第１の実施形態に係る推論装置に含まれる乗加算演算部の内部構成の他の一例を示す図である。
【図６】第１の実施形態に係る推論装置に含まれる乗加算演算部の内部構成の他の一例を示す図である。
【図７】第２の実施形態に係る推論装置に含まれる乗加算演算部の内部構成の一例を示す図である。
【図８】第２の実施形態に係る乗加算演算部の動作の一例を示すフローチャートである。
【図９】第３の実施形態に係る推論装置に含まれる乗加算演算部の内部構成の一例を示す図である。
【図１０】第３の実施形態に係る乗加算演算部の動作の一例を示すフローチャートである。
【図１１】推論装置のハードウェア構成の一例を示す図である。
【図１２】非特許文献１に開示された技術を説明するための図である。
【図１３】非特許文献１に開示された技術の動作を説明するためのフローチャートである。
【図１４】各種の活性化関数を説明するための図である。
【発明を実施するための形態】
【００２５】
初めに、一実施形態の概要について説明する。なお、この概要に付記した図面参照符号は、理解を助けるための一例として各要素に便宜上付記したものであり、この概要の記載はなんらの限定を意図するものではない。また、各図におけるブロック間の接続線は、双方向及び単方向の双方を含む。一方向矢印については、主たる信号（データ）の流れを模式的に示すものであり、双方向性を排除するものではない。
【００２６】
一実施形態に係る情報処理装置１００は、スパース要素検出部１０１と、スパース位置重み加算部１０２と、乗算部１０３と、非スパースデータ演算部１０４と、加算部１０５と、を備える（図１参照）。スパース要素検出部１０１は、入力データから予め定められたスパース要素を検出し、スパース要素に関する情報を出力する。スパース位置重み加算部１０２は、スパース要素に対応する第１の重み要素同士を加算する。乗算部１０３は、スパース位置重み加算部の出力にスパース要素を乗算する。非スパースデータ演算部１０４は、入力データのうちスパース要素以外の要素である非スパース要素に関する演算を行う。加算部１０５は、乗算部１０３の出力と非スパースデータ演算部１０４の出力を加算する。
【００２７】
情報処理装置１００は、予め指定されたゼロでない値を持つスパース要素を検出し、当該スパース要素に関しては対応する重み要素の和を計算し、当該和にスパース要素を乗算する。対して、情報処理装置１００は、入力データのうちスパース要素以外の要素に関しては、通常の演算（入力データと重みの乗加算）を実施する。その結果、ゼロ以外が多く出力される活性化関数を用いるＤＮＮシステムにおいても、当該多く出力される値をスパース要素に設定することで、演算処理が高速なスパースＤＮＮシステムを提供できる。
【００２８】
以下に具体的な実施の形態について、図面を参照してさらに詳しく説明する。なお、各実施形態において同一構成要素には同一の符号を付し、その説明を省略する。
【００２９】
［第１の実施形態］
第１の実施形態について、図面を用いてより詳細に説明する。
【００３０】
図２は、第１の実施形態に係る推論装置に含まれる乗加算演算部１０の内部構成の一例を示す図である。乗加算演算部１０は、入力データと重みを取得し、当該入力データ及び重みを用いた乗加算処理を実行する手段（モジュール）である。より具体的には、乗加算演算部１０は、畳み込み演算やベクトル内積処理を実行する。
【００３１】
図２を参照すると、乗加算演算部１０には、スパース要素検出部２０１と、スパース位置重み加算部２０２と、乗算部２０３と、加算部２０４と、非スパースデータ演算部２０５と、を含んで構成される。さらに、乗加算演算部１０は、スパース位置重み加算部２０２の内部に重み加算部３０１を備える。
【００３２】
上記各部（各種サブモジュール）は、概略以下のように動作する。
【００３３】
スパース要素検出部２０１は、入力データから予め定められたスパース要素を検出し、当該スパース要素に関する情報を出力する手段である。例えば、予め定められたスパース要素には「−１」等の特定の値が該当する。なお、スパース要素は「−１」に限定されず、他の値であってもよい。即ち、スパース要素の候補にはゼロも含まれる。さらに、予め定められたスパース要素は１つでも良いし、複数であっても良い。なお、スパース要素検出部２０１が出力する情報には、入力データそのものも含まれる。
【００３４】
スパース要素検出部２０１によるスパース要素の検出とは、複数の値から構成される入力データのうち、スパース要素と一致する値である要素の位置（以降、スパース要素位置と表記する）を特定し出力することを含む。あるいは、スパース要素検出部２０１によるスパース要素の検出は、スパース要素と一致しない値である要素の位置（以降、非スパース要素位置と表記する）を特定し出力する動作であってもよい。さらに、スパース要素検出部２０１による検出には、スパース要素位置と非スパース要素位置の双方を特定し、出力することであってもよい。
【００３５】
スパース位置重み加算部２０２は、重みとスパース要素検出部２０１が出力する情報（例えば、スパース要素位置に関する情報）を入力する。スパース位置重み加算部２０２は、スパース要素検出部２０１が出力する情報に基づき、取得した重みからスパース要素位置に対応する重み要素を導出する。さらに、スパース位置重み加算部２０２は、導出した重み要素同士を、内部の重み加算部３０１を用いて加算し、加算結果を出力する。このように、スパース位置重み加算部は、スパース要素に対応する重み要素同士を加算する機能を備える。換言するならば、スパース位置重み加算部２０２は、スパース要素位置のデータと乗算されることが予定された重み要素（以降、スパース位置重み要素と表記する）を取得し、当該重み要素の和を出力する。
【００３６】
スパース位置重み加算部２０２の動作を具体的に説明する。
【００３７】
畳み込み演算の例でいえば、入力データＸ（ｉｓ、ｊｓ）がスパース要素と一致する値の場合、スパース要素位置は（ｉｓ、ｊｓ）であり、スパース位置重み要素はＷ（ｉｓ、ｊｓ）で表す事ができる。この例において、スパース位置重み加算部２０２の出力は、ΣＷ（ｉｓ、ｊｓ）（但し、（ｉｓ、ｊｓ）はスパース要素位置を示す）となる。
【００３８】
より具体的には、図３（ａ）に示す入力データと図３（ｂ）に示す重みを用いた畳み込み演算を考える。この場合、スパース要素を「−１」とすれば、入力データの１行目（ｉｓ＝１）、１列目（ｊｓ＝１）と、２行目（ｉｓ＝２）、３列目（ｊｓ＝３）と、がスパース要素位置となる。また、これらのスパース要素位置に対応する重み要素は、図３（ｂ）の１行目、１列目の「２」と２行目、３列目の「１」となる。この場合、スパース位置重み加算部２０２の出力は、２＋１＝３となる。
【００３９】
図２に説明を戻すと、乗算部２０３は、スパース位置重み加算部２０２の出力値にスパース要素を乗算する手段である。上述の畳み込み演算の例では、（ａ×ΣＷ（ｉｓ、ｊｓ））を計算する。なお、「ａ」はスパース要素である。上述の図３の例では、スパース要素が「−１」であり、重み要素の加算結果が「３」であるので、乗算部２０３の出力は「−３」となる。
【００４０】
非スパースデータ演算部２０５は、重みのうち、スパース要素位置に対応しない重み（以降、非スパース位置重み要素と表記する）を用いて、非スパース要素に限り、スパーシティを利用しないＤＮＮシステムと同様の乗加算演算を実行し、その結果を出力する。即ち、非スパースデータ演算部２０５は、入力データのうちスパース要素以外の要素である非スパース要素に関する演算を行う。より具体的には、非スパースデータ演算部２０５は、非スパース要素と非スパース要素に対応する重み要素の乗算を、入力データに含まれる非スパース要素について繰り返し、乗算の繰り返しにより得られた結果を加算する。
【００４１】
非スパースデータ演算部２０５の動作を具体的に説明する。
【００４２】
上記畳み込み演算の例では、非スパースデータ演算部２０５は、Σ（Ｗ（ｉｎｓ、ｊｎｓ）×Ｘ（ｉｎｓ、ｊｎｓ））（但し、（ｉｎｓ、ｊｎｓ）は非スパース要素位置）を計算し出力する。図３の例では、スパース要素位置（１行目、１列目；２行目、３列目）以外の位置にある値と対応する重み要素の乗算加算結果が非スパースデータ演算部２０５の出力となる。具体的には、０×２＋０×０＋２×０＋０×０＋０×１＋２×２＋１×０＝４が非スパースデータ演算部２０５の出力となる。
【００４３】
図２に説明を戻すと、加算部２０４は、乗算部２０３の出力と非スパースデータ演算部２０５の出力を加算し、出力する手段である。上述の畳み込み演算の例では、加算部２０４は、（ａ×ΣＷ（ｉｓ、ｊｓ））＋Σ（Ｗ（ｉｎｓ、ｊｎｓ）×Ｘ（ｉｎｓ、ｊｎｓ））を出力する。ａ＝Ｘ（ｉｓ、ｊｓ）であることを考慮すれば、上記値は、スパーシティを利用する以前の畳み込み演算であるΣ（Ｗ（ｉ、ｊ）×Ｘ（ｉ、ｊ））と等価である。図３の例では、乗算部２０３の出力が「−３」、非スパースデータ演算部２０５の出力が「４」であるため、加算部２０４の出力（乗加算演算部１０の出力）は「１」となる。当該結果は、図３に示す２つの行列において対応する要素同士を乗算し、且つ、乗算結果を加算したものと同値である。
【００４４】
ここで、スパース位置重み加算部２０２と非スパースデータ演算部２０５は並行して動作が可能である。その際、非スパースデータ演算部２０５が行うべき乗加算演算の数は非スパース要素の数に限られ、スパース要素がゼロである場合と同様の乗算数削減効果が保たれる。また、スパース位置重み加算部２０２は、その内部で加算だけを行う手段（モジュール）である。即ち、コンピュータ及び回路において演算時間及び回路面積の大きい乗算を行わないため、その計算量は非スパースデータ演算部２０５よりも少ない。
【００４５】
乗算部２０３は乗算を行うが、例えば、１回の畳み込み演算において１回に限り乗算が行われるため、計算量は少ない。例えば、上記畳み込み演算Σ（Ｘ（ｉ、ｊ）×Ｗ（ｉ、ｊ））において、ｉ＝３、ｊ＝３とし、入力データＸ（ｉ、ｊ）のすべてがスパース要素ａに等しい場合を考える。この場合、本来であれば、９回の乗加算が必要になるが、第１の実施形態では、スパース位置重み加算部２０２と乗算部２０３を用いてａ×ΣＷ（ｉｓ、ｊｓ）として計算可能であるため、９回の加算と１回の乗算により畳み込み演算を完了できる。
【００４６】
次に、図４に示すフローチャートを参照して第１の実施形態に係る乗加算演算部１０の動作について説明する。
【００４７】
ステップＳ１０１において、スパース要素検出部２０１は、入力データを取得する。
【００４８】
その後、スパース要素検出部２０１は、入力データ中のスパース要素を検出する（ステップＳ１０２）。
【００４９】
その後、当該検出により得られた非スパース要素位置及びスパース要素位置を用いて、２つの処理が並列に実行される。
【００５０】
具体的には、非スパースデータ演算部２０５は、非スパース要素位置を用いて、非スパース要素位置に対応する重み要素（非スパース位置重み要素）を得る（ステップＳ１０３）。
【００５１】
その後、非スパースデータ演算部２０５は、非スパース要素と非スパース位置重み要素の乗加算演算を行う（ステップＳ１０４）。
【００５２】
スパース位置重み加算部２０２は、スパース要素位置を用いてスパース位置重み要素を取得する（ステップＳ１０５）。
【００５３】
その後、スパース位置重み加算部２０２の重み加算部３０１は、スパース位置重み要素の和を計算する（ステップＳ１０６）。
【００５４】
その後、乗算部２０３は、上記和にスパース要素を乗算する（ステップＳ１０７）。最後に、並行して行われた２つの計算結果が加算され、出力される。つまり、加算部２０４は、並行して行われた上記２つの結果を加算し、出力する（ステップＳ１０８、Ｓ１０９）。
【００５５】
［変形例］
図２に示す乗加算演算部１０は一例であって、その構成を限定する趣旨ではない。例えば、図５に示すように、乗加算演算部１０は、スパース位置重み取得部２０６と、非スパース位置重み取得部２０７と、をさらに備えていてもよい。スパース位置重み取得部２０６は、スパース位置重み要素及び非スパース位置重み要素を含む重みから当該重み要素を取得する手段である。非スパース位置重み取得部２０７は、スパース位置重み要素及び非スパース位置重み要素を含む重みから非スパース位置重み要素を取得する手段である。
【００５６】
より具体的には、スパース位置重み取得部２０６は、スパース要素検出部２０１が出力する情報（例えば、スパース要素位置）を用いて、重みからスパース位置重み要素を取得し、当該取得した重み要素をスパース位置重み加算部２０２に出力する。非スパース位置重み取得部２０７は、スパース要素検出部２０１が出力する情報（例えば、非スパース要素位置）を用いて、重みから非スパース位置重み要素を取得し、当該取得した重み要素を非スパースデータ演算部２０５に出力する。スパース位置重み加算部２０２及び非スパースデータ演算部２０５は、それぞれ取得した重み要素を用いて上記説明した演算を実行すればよい。
【００５７】
あるいは、図６に示すように、乗加算演算部１０は、非スパース位置重み取得部２０７を備えず、スパース位置重み取得部２０６だけを備えていてもよい。つまり、非スパースデータ演算部２０５に、非スパース位置重み取得部２０７の機能が含まれていてもよい。
【００５８】
第１の実施形態では、ゼロでないスパース要素を用いるＤＮＮシステムにおいて、非スパース要素に関する乗加算演算数を、例えば、非特許文献１等に開示されたスパース要素（即ち、要素値がゼロ）を用いるＤＮＮシステムと同様に削減する。さらに、第１の実施形態では、上記削減に加え、非特許文献１等では考慮していないゼロではないスパース要素に対する乗加算演算について、少ない乗算回数により実現するように構成されている。そのため、必要な乗加算演算の総数が削減でき、且つ、演算にかかる時間及び回路面積を削減できる。
【００５９】
［第２の実施形態］
続いて、第２の実施形態について図面を参照して詳細に説明する。
【００６０】
図７は、第２の実施形態に係る推論装置に含まれる乗加算演算部１０の内部構成の一例を示す図である。図７を参照すると、第２の実施形態に係る乗加算演算部１０は、スパース要素検出部２０１と、スパース位置重み加算部２０２と、乗算部２０３と、加算部２０４と、非スパースデータ演算部２０５と、非スパース位置重み取得部２０７と、を含んで構成される。また、スパース位置重み加算部２０２は、その内部に重み加算部３０１と減算部３０２を備える。
【００６１】
図２及び図７を比較すると明らかなように、第１及び第２の実施形態では、スパース位置重み加算部２０２の内部構成が異なる。なお、図７に図示した非スパース位置重み取得部２０７に関しては、図５を用いて説明した内容と相違する点はないので説明を省略する。
【００６２】
第２の実施形態に係るスパース位置重み加算部２０２は、概略以下の様に動作する。
【００６３】
重み加算部３０１は、非スパース位置重み取得部２０７が出力する非スパース位置重み要素同士の和を計算する手段である。より具体的には、重み加算部３０１は、非スパース位置重み取得部２０７の出力を入力とし、当該入力値の合計値を計算する。即ち、上記畳み込み演算の例でいえば、重み加算部３０１は、ΣＷ（ｉｎｓ、ｊｎｓ）（ただし（ｉｎｓ、ｊｎｓ）は非スパース位置を示す）を計算する。
【００６４】
減算部３０２は、スパース位置重み要素と非スパース位置重み要素の総和値から重み加算部３０１の出力を減算する手段である。より具体的には、減算部３０２は、外部から入力される重み和から、重み加算部３０１の出力値を減算する。ここで、重み和は、以下の式（２）により表せる。
Ｗｓｕｍ  ＝  ΣＷ（ｉ、ｊ）  ・・・（２）
式（２）における（ｉ、ｊ）はスパース位置（ｉｓ、ｊｓ）及び非スパース位置（ｉｎｓ、ｊｎｓ）の双方を含む。
【００６５】
上記式（２）によれば、減算部３０２は、（Ｗｓｕｍ−ΣＷ（ｉns、ｊns））を計算する。当該減算部３０２の結果は、第１の実施形態に係る乗加算演算部１０のスパース位置重み加算部２０２の出力値と一致する。第１の実施形態では、スパース位置対応重みの和を直接計算している。一方、第２の実施形態では、重みの総和から、非スパース位置対応重みの和を減ずることで、スパース位置対応重みの和を間接的に計算している。
【００６６】
次に、図８に示すフローチャートを参照しつつ第２の実施形態に係る動作について説明する。
【００６７】
ステップＳ２０１において、スパース要素検出部２０１は入力データを取得する。
【００６８】
次に、スパース要素検出部２０１は、入力データ中のスパース要素を検出する（ステップＳ２０２）。
【００６９】
その後、非スパース位置重み取得部２０７は、前段の検出により得られた非スパース要素位置に基づき、非スパース位置重み要素を取得する（ステップＳ２０３）。
【００７０】
その後、２つの処理が並行して実行される。
【００７１】
ステップＳ２０４において、非スパースデータ演算部２０５は、非スパース要素と非スパース位置重み要素の乗加算演算を行う。
【００７２】
ステップＳ２０５において、スパース位置重み加算部２０２の重み加算部３０１は、非スパース位置重み要素の和を計算する。
【００７３】
ステップＳ２０６において、スパース位置重み加算部２０２の減算部３０２は、取得した重み和から上記加算結果を減算する。
【００７４】
その後、ステップＳ２０７において、乗算部２０３は、スパース位置重み加算部２０２の出力値とスパース要素の乗算を行う。
【００７５】
加算部２０４は、並行して行われた上記２つの計算の結果を加算（ステップＳ２０８）し、出力する（ステップＳ２０９）。
【００７６】
第２の実施形態では、スパース位置重み加算部２０２において、スパース位置重み要素の取得を行わないように構成されている。そのため、重み要素取得にかかる時間を削減できる。例えば、ハードウェア回路実現において、重みはメモリ等記憶素子に保存され、重み要素取得の際にはメモリからの読み出しとして実現されることがある。例えば、重み値を１個ずつ逐次的に読み出すことしかできないメモリを使用し、かつ、非スパースデータ演算部２０５及びスパース位置重み加算部２０２が十分高速に処理可能な場合を考える。この場合、非スパース位置重み要素が読み出されている間は、スパース位置重み加算部２０２は入力となる重みを得ることができず待機することになる。一方、スパース位置重み要素が読み出されている間は、非スパースデータ演算部２０５は入力となる重みを得ることができず待機することになる。
【００７７】
このように、２つの処理部のいずれかで、入力データ待ちが発生し十分な高速化効果が発揮されない可能性がある。このようなメモリ読み出しに起因する問題に対して、第２の実施形態では、非スパースデータ演算部２０５及びスパース位置重み加算部２０２の双方が、共通の非スパース位置重み要素を用いて計算を行うことができるため、入力データ待ちが発生しない。即ち、メモリ読み出しに起因する上記問題を解決することができ、高速化効果を得ることができる。
【００７８】
さらに、第２の実施形態では、ゼロでないスパース要素を用いる場合であっても、ゼロであるスパース要素を用いるときと同等の処理高速化が実現できる。スパース要素がゼロでない場合に発生するスパース要素に対応する重みを用いた計算について、予め重みの全和を取得しておくことにより上記計算を省略できるためである。
【００７９】
［第３の実施形態］
続いて、第３の実施形態について図面を参照して詳細に説明する。
【００８０】
図９は、第３の実施形態に係る推論装置に含まれる乗加算演算部１０の内部構成の一例を示す図である。図９を参照すると、第３の実施形態に係る乗加算演算部１０は、スパース要素検出部２０１と、スパース位置重み加算部２０２と、乗算部２０３と、加算部２０４と、非スパースデータ演算部２０５と、を含む。さらに、第３の実施形態に係る乗加算演算部１０は、スパース位置重み取得部２０６と、非スパース位置重み取得部２０７と、をさらに含んで構成される。また、スパース位置重み加算部２０２は、その内部に、スパース度算出部３１１と、重み選択部３１２と、結果選択部３１３と、重み加算部３０１と、減算部３０２と、を備える。
【００８１】
図２、図７及び図９を比較すると明らかなように、第３の実施形態は、第１及び第２の実施形態とはスパース位置重み加算部２０２の内部構成が異なる。なお、図９に図示したスパース位置重み取得部２０６及び非スパース位置重み取得部２０７に関しては、図５を用いて説明した内容と相違する点はないので説明を省略する。
【００８２】
第３の実施形態に係るスパース位置重み加算部２０２は、概略以下の様に動作する。
【００８３】
スパース度算出部３１１は、入力データに占めるスパース要素の割合をスパース度として算出する手段である。より具体的には、スパース度算出部３１１は、スパース要素検出部２０１の出力を用いて、ひとつの入力データにおけるスパース要素の割合（即ち、スパース度）を計算する。例えば、上述の畳み込み演算の例でいえば、ｉ＝３、ｊ＝３の場合、９個の入力データ値に対するスパース要素の割合を計算する。
【００８４】
重み選択部３１２は、計算されたスパース度に基づいて、スパース位置重み取得部２０６が出力するスパース位置重み要素か、非スパース位置重み取得部２０７が出力する非スパース位置重み要素か、のいずれかを選択して出力する手段である。より具体的には、重み選択部３１２は、上記スパース度が所定の値（閾値）より大きいか否かを判断基準として、非スパース位置重み要素と、スパース位置重み要素のいずれかを重み加算部３０１に入力するか選択する。なお、上記所定の値には、例えば、０．５（スパース度５０％）などが用いられる。
【００８５】
重み加算部３０１は、重み選択部３１２による出力を加算し和を求める手段である。つまり、重み加算部３０１は、重み選択部３１２が出力するスパース位置重み要素及び非スパース位置重み要素のいずれか同士の和を計算する。
【００８６】
減算部３０２は、第２の実施形態と同様に、重み和から重み加算部３０１の出力を減算する。
【００８７】
結果選択部３１３は、上記スパース度に基づき、重み加算部３０１の出力及び減算部３０２の出力のいずれかを出力する。つまり、結果選択部３１３は、重み選択部３１２と同じ値を用いて、スパース度により結果を選択し出力する。
【００８８】
次に、図１０に示すフローチャートを参照しつつ第３の実施形態に係る動作について説明する。
【００８９】
ステップＳ３０１において、スパース要素検出部２０１は、入力データを取得する。
【００９０】
その後、スパース要素検出部２０１は、入力データ中のスパース要素を検出する（ステップＳ３０２）。
【００９１】
非スパース位置重み取得部２０７は、前段の検知により得られた非スパース要素位置を用いて非スパース位置重み要素を取得する（ステップＳ３０３）。非スパース位置重み要素は、非スパースデータ演算部２０５に出力される。
【００９２】
その後、非スパースデータ演算部２０５は、非スパース要素と、非スパース位置重み要素との乗加算を行う（ステップＳ３０４）。
【００９３】
当該処理と並行して、スパース位置重み加算部２０２のスパース度算出部３１１は、入力データのスパース度を算出する（ステップＳ３０５）。
【００９４】
重み選択部３１２は、算出されたスパース度に基づき、スパース度が所定の値（例えば、０．５；スパース度５０％）より大きければスパース位置重み要素を取得する（ステップＳ３０６、Ｙｅｓ分岐；ステップＳ３０７）。
【００９５】
その後、重み加算部３０１は、スパース位置重み要素の加算を行う（ステップＳ３０８）。
【００９６】
スパース度が所定の値以下であれば（ステップＳ３０６、Ｎｏ分岐）、重み加算部３０１は、非スパース位置重み要素の加算を行う（ステップＳ３０９）。
【００９７】
その後、減算部３０２は、重み和から上記加算結果を減算する（ステップＳ３１０）。
【００９８】
乗算部２０３は、スパース位置重み加算部２０２による出力値にスパース要素を乗算する（ステップＳ３１１）。
【００９９】
加算部２０４は、並行して行われた上記２つの計算の結果を加算（ステップＳ３１２）し、出力する（ステップＳ３１３）。
【０１００】
第３の実施形態では、スパース位置重み加算部２０２は、スパース度に応じて、スパース位置重み要素を用いる計算と非スパース位置重み要素を用いる計算を使い分けることができるように構成されている。その結果、入力データにおける非スパース要素の数が多い場合のスパース位置重み加算部２０２が必要とする加算回数の上限を削減できる。例えば、上記所定の値を０．５とした場合、重み加算部３０１が行う加算の回数は、全重み個数の半分（全重み個数が奇数の場合には半分＋１）にすることができる。
【０１０１】
続いて、第１乃至第３の実施形態に係る推論装置のハードウェア構成について説明する。
【０１０２】
図１１は、推論装置のハードウェア構成の一例を示す図である。推論装置は、所謂、情報処理装置（コンピュータ）により構成可能であり、図１１に例示する構成を備える。例えば、推論装置は、内部バスにより相互に接続される、ＣＰＵ（Central Processing Unit）１１、メモリ１２、入出力インターフェイス１３及び通信手段であるＮＩＣ（Network Interface Card）１４等を備える。
【０１０３】
なお、図１１に示す構成は、推論装置のハードウェア構成を限定する趣旨ではない。推論装置は、図示しないハードウェアを含んでもよいし、必要に応じてＮＩＣ１４を備えていなくともよい。あるいは、推論装置に含まれるＣＰＵ等の数も図１１の例示に限定する趣旨ではなく、例えば、複数のＣＰＵが推論装置に含まれていてもよい。
【０１０４】
メモリ１２は、ＲＡＭ（Random Access Memory）、ＲＯＭ（Read Only Memory）、補助記憶装置（ハードディスク等）である。
【０１０５】
入出力インターフェイス１３は、図示しない表示装置や入力装置のインターフェイスとなる手段である。表示装置は、例えば、液晶ディスプレイ等である。入力装置は、例えば、キーボードやマウス等のユーザ操作を受け付ける装置である。
【０１０６】
推論装置の機能は、上述の処理モジュールにより実現される。当該処理モジュールは、例えば、メモリ１２に格納されたプログラムをＣＰＵ１１が実行することで実現される。また、そのプログラムは、ネットワークを介してダウンロードするか、あるいは、プログラムを記憶した記憶媒体を用いて、更新できる。さらに、上記処理モジュールは、半導体チップにより実現されてもよい。即ち、上記処理モジュールが行う機能は、何らかのハードウェアにおいてソフトウェアが実行されることによって実現できればよい。
【０１０７】
上記の説明により、本発明の産業上の利用可能性は明らかであるが、本発明は、深層学習を用いた画像識別や文字認識、言語認識といった技術分野に好適に適用可能である。
【０１０８】
上記の実施形態の一部又は全部は、以下の形態のようにも記載され得るが、以下には限られない。
［形態１］
上述の第１の視点に係る情報処理装置のとおりである。
［形態２］
前記第１の重み要素を含む重みから前記第１の重み要素を取得する、スパース位置重み取得部をさらに備える、好ましくは形態１の情報処理装置。
［形態３］
前記スパース位置重み加算部は、前記スパース位置重み取得部が出力する前記第１の重み要素同士の和を計算する、好ましくは形態２の情報処理装置。
［形態４］
前記第１の重み要素と前記非スパース要素に対応する第２の重み要素を含む重みから前記第２の重み要素を取得する、非スパース位置重み取得部をさらに備える、好ましくは形態１の情報処理装置。
［形態５］
前記スパース位置重み加算部は、
前記非スパース位置重み取得部が出力する前記第２の重み要素同士の和を計算する、重み加算部と、
前記第１及び第２の重み要素の総和値から前記重み加算部の出力を減算する、減算部と、
を備える、好ましくは形態４の情報処理装置。
［形態６］
前記第１の重み要素と前記非スパース要素に対応する第２の重み要素を含む重みから前記第１の重み要素を取得する、スパース位置重み取得部と、
前記重みから前記第２の重み要素を取得する、非スパース位置重み取得部と、
をさらに備える、好ましくは形態１の情報処理装置。
［形態７］
前記スパース位置重み加算部は、
前記入力データに占める前記スパース要素の割合をスパース度として算出する、スパース度算出部と、
前記スパース度に基づいて、前記スパース位置重み取得部が出力する前記第１の重み要素か、前記非スパース位置重み取得部が出力する前記第２の重み要素か、のいずれかを選択して出力する、重み選択部と、
前記重み選択部が出力する前記第１及び第２の重み要素のいずれか同士の和を計算する、重み加算部と、
前記第１及び第２の重み要素の総和値から前記重み加算部の出力を減算する、減算部と、
前記スパース度に基づき、前記重み加算部の出力及び前記減算部の出力のいずれかを出力する、結果選択部と、
を備える、好ましくは形態６の情報処理装置。
［形態８］
前記非スパースデータ演算部は、
前記非スパース要素と前記非スパース要素に対応する重み要素の乗算を、前記入力データに含まれる前記非スパース要素について繰り返し、前記乗算の繰り返しにより得られた結果を加算する、好ましくは形態１乃至７のいずれか一に記載の情報処理装置。
［形態９］
上述の第２の視点に係る情報処理方法のとおりである。
［形態１０］
上述の第３の視点に係るプログラムのとおりである。
なお、形態９及び形態１０は、形態１と同様に、形態２〜形態８のように展開することが可能である。
【０１０９】
なお、引用した上記の先行技術文献の開示は、本書に引用をもって繰り込むものとする。本発明の全開示（請求の範囲を含む）の枠内において、さらにその基本的技術思想に基づいて、実施形態ないし実施例の変更・調整が可能である。また、本発明の全開示の枠内において種々の開示要素（各請求項の各要素、各実施形態ないし実施例の各要素、各図面の各要素等を含む）の多様な組み合わせ、ないし、選択が可能である。すなわち、本発明は、請求の範囲を含む全開示、技術的思想にしたがって当業者であればなし得るであろう各種変形、修正を含むことは勿論である。特に、本書に記載した数値範囲については、当該範囲内に含まれる任意の数値ないし小範囲が、別段の記載のない場合でも具体的に記載されているものと解釈されるべきである。
【符号の説明】
【０１１０】
１０  乗加算演算部
１１  ＣＰＵ（Central Processing Unit）
１２  メモリ
１３  入出力インターフェイス
１４  ＮＩＣ（Network Interface Card）
９１  ゼロ検出部
９２  非ゼロ値演算部
１００  情報処理装置
１０１、２０１  スパース要素検出部
１０２、２０２  スパース位置重み加算部
１０３、２０３  乗算部
１０４、２０５  非スパースデータ演算部
１０５、２０４  加算部
２０６  スパース位置重み取得部
２０７  非スパース位置重み取得部
３０１  重み加算部
３０２  減算部
３１１  スパース度算出部
３１２  重み選択部
３１３  結果選択部
【図１】
2019088072.tif 000003
【図２】
2019088072.tif 000004
【図３】
2019088072.tif 000005
【図４】
2019088072.tif 000006
【図５】
2019088072.tif 000007
【図６】
2019088072.tif 000008
【図７】
2019088072.tif 000009
【図８】
2019088072.tif 000010
【図９】
2019088072.tif 000011
【図１０】
2019088072.tif 000012
【図１１】
2019088072.tif 000013
【図１２】
2019088072.tif 000014
【図１３】
2019088072.tif 000015
【図１４】
2019088072.tif 000016
【国際調査報告】
2019088072.tif 000017
2019088072.tif 000018