(57)【要約】      （修正有）【課題】特殊演算器の演算時間が原因となりニューラルネットワークの演算時間が長くなることを抑制する。【解決手段】情報処理装置は、乗算及び加算、論理演算、積和演算を実行可能な第１の演算器と、乗算、加算、論理演算及び積和演算と異なる特殊演算を実行可能な第２の演算器と、プロセッサと、を有する。プロセッサは、特殊演算を含む第１の演算を、第1の演算の特殊演算を第２の演算器で計算する第２の方法で実行した時の、第１の演算に要する第２の演算時間が、第１の演算のために行われるメモリとレジスタ間のメモリ転送に要するメモリ転送時間以下の場合、第1の演算を第２の方法で実行し、第２の演算時間がメモリ転送時間以下でない場合、第１の演算を、第1の演算の特殊演算を第1の演算器で近似計算する第1の方法で実行した時の、第１の演算に要する第1の演算時間が、メモリ転送時間以下の場合、第1の演算を第１の方法で実行する。【選択図】図１０
2020101991.tif 000002
【特許請求の範囲】
【請求項１】
メモリと、
前記メモリと接続され、少なくとも乗算及び加算、論理演算、積和演算を実行可能な第１の演算器と、前記乗算及び加算、論理演算、積和演算と異なる特殊演算を実行可能な第２の演算器と、レジスタとを有するプロセッサとを有し、
前記プロセッサは、
複数の層を有するニューラルネットワーク内の前記特殊演算を含む第１の演算を実行する第１の層の前記第１の演算を、前記第1の演算の特殊演算を第２の演算器で計算する第２の方法で実行した時の、前記第１の演算に要する第２の演算時間が、前記第１の演算のために行われる前記メモリと前記レジスタ間のメモリ転送に要するメモリ転送時間以下の場合、前記第1の演算を前記第２の方法で実行し、
前記第２の演算時間が前記メモリ転送時間以下でない場合、
前記第１の演算を、前記第1の演算の特殊演算を前記第1の演算器で近似計算する第１の方法で実行した時の、前記第１の演算に要する第１の演算時間が、前記メモリ転送時間以下の場合、前記第1の演算を前記第１の方法で実行する、情報処理装置。
【請求項２】
前記第1の演算を前記第1の方法で実行することは、
前記第1の方法の近似計算が複数有り、
前記第1の演算時間が前記メモリ転送時間以下である前記近似計算のうち、前記近似計算の誤差が最小の近似計算で前記第１の演算を前記第1の方法で実行する、請求項１に記載の情報処理装置。
【請求項３】
前記プロセッサは、
前記第２の演算時間が前記メモリ転送時間以下か否か判定し、前記判定が真の場合、前記第１の演算を前記第２の方法で実行すると決定し、前記判定が偽の場合、前記第１の演算時間が前記メモリ転送時間以下を満たす複数の近似計算のうち、前記近似計算の誤差が最小の近似計算を選択し、前記選択した近似計算で前記第１の演算を前記第１の方法で実行する、特殊演算実行方法の決定を実行する、請求項１に記載の情報処理装置。
【請求項４】
前記プロセッサは、
前記ニューラルネットワークの学習工程において、
（１）初回の学習工程で、前記特殊演算を前記第１の方法か第２の方法かを決定し、前記決定した第１の方法または第２の方法で前記第１の演算を実行し、
（２）前記初回後の繰り返し学習工程で、前記初回の学習工程で決定した第１の方法または第２の方法で前記第１の演算を実行する、請求項３に記載の情報処理装置。
【請求項５】
前記第２の演算時間は、前記第１の演算に含まれる前記特殊演算以外の非特殊演算を実行するための前記第１の演算器の命令実行回数に要する非特殊演算時間と前記第１の演算に含まれる前記特殊演算を実行するための前記第２の演算器の命令実行回数に要する特殊演算時間の和であり、
前記第１の演算時間は、前記第１の演算に含まれる前記特殊演算以外の非特殊演算を実行するための前記第１の演算器の命令実行回数に要する非特殊演算時間と、前記第１の演算に含まれる前記特殊演算の近似計算を実行するための前記第１の演算器の命令実行回数に要する近似計算時間の和である、請求項１に記載の情報処理装置。
【請求項６】
前記第１及び第２の演算時間は、前記命令実行回数に演算器が１つの命令を実行するために要する平均クロックサイクル数を乗じ、演算を実行する複数の演算器の単位時間当たりの総クロックサイクル数で除算した値である、請求項５に記載の情報処理装置。
【請求項７】
前記第１の演算器の数は、前記第２の演算器の数より多い、請求項１に記載の情報処理装置。
【請求項８】
メモリと接続され、少なくとも乗算及び加算、論理演算、積和演算を実行可能な第１の演算器と、前記乗算及び加算、論理演算、積和演算と異なる特殊演算を実行可能な第２の演算器と、レジスタとを有するプロセッサにニューラルネットワークの処理を実行させるニューラルネットワークプログラムであって、
前記処理は、
複数の層を有するニューラルネットワーク内の前記特殊演算を含む第１の演算を実行する第１の層の前記第１の演算を、前記第1の演算の特殊演算を第２の演算器で計算する第２の方法で実行した時の、前記第１の演算に要する第２の演算時間が、前記第１の演算のために行われる前記メモリと前記レジスタ間のメモリ転送に要するメモリ転送時間以下の場合、前記第1の演算を前記第２の方法で実行し、
前記第２の演算時間が前記メモリ転送時間以下でない場合、
前記第１の演算を、前記第1の演算の特殊演算を前記第1の演算器で近似計算する第１の方法で実行した時の、前記第１の演算に要する第1の演算時間が、前記メモリ転送時間以下の場合、前記第1の演算を前記第１の方法で実行する、プロセッサが実行可能なニューラルネットワークプログラム。
【請求項９】
メモリと接続され、少なくとも乗算及び加算、論理演算、積和演算を実行可能な第１の演算器と、前記乗算及び加算、論理演算、積和演算と異なる特殊演算を実行可能な第２の演算器と、レジスタとを有するプロセッサが、
複数の層を有するニューラルネットワーク内の前記特殊演算を含む第１の演算を実行する第１の層の前記第１の演算を、前記第1の演算の特殊演算を第２の演算器で計算する第２の方法で実行した時の、前記第１の演算に要する第２の演算時間が、前記第１の演算のために行われる前記メモリと前記レジスタ間のメモリ転送に要するメモリ転送時間以下の場合、前記第1の演算を前記第２の方法で実行し、
前記第２の演算時間が前記メモリ転送時間以下でない場合、
前記第１の演算を、前記第1の演算の特殊演算を前記第1の演算器で近似計算する第１の方法で実行した時の、前記第１の演算に要する第1の演算時間が、前記メモリ転送時間以下の場合、前記第1の演算を前記第１の方法で実行する、ニューラルネットワークの処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は，情報処理装置、ニューラルネットワークプログラム、ニューラルネットワークの処理方法に関する。
【背景技術】
【０００２】
深層学習（Deep Learning、以下DLと称する）は、多層のニューラルネットワーク（Neural Network、以下NNと称する）を用いた機械学習である。深層学習の一例であるディープニューラルネットワーク（Deep Neural Network、以下DNNと称する）は、入力層、複数の隠れ層、出力層が順番に並べられたネットワークである。各層は、１または複数のノードを持ち、各ノードは値を持つ。そして、ある層と次の層の間のノード同士はエッジで結ばれ、各エッジは重みやバイアスなどの変数（またはパラメータ）を持つ。
【０００３】
NNにおいて、各層のノードの値は、例えば、前段の層のノードの値とエッジの重み等に基づく所定の演算を実行して求められる。そして、入力データが入力層のノードに入力されると、次の層のノードの値が所定の演算により求められ、さらに、演算により求められたデータを入力として次の層のノードの値がその層の所定の演算により求められる。そして、最終層である出力層のノードの値が、入力データに対する出力データとなる。
【０００４】
NNの複数の層は、それぞれ、前層からの入力データと変数に基づいて様々な演算を実行する。複数の層の演算は、（１）加算、減算、乗算、除算の四則演算、（２）乗算と加算を一緒に行う積和演算、（３）論理演算、（４）累乗、除算（逆数を含む）、双曲線正接（ハイパボリックタンジェント、tanh）、平方根、シグモイド関数などの特殊演算などを含む。
【０００５】
プロセッサは、一般に、演算器として、積和演算器と特殊演算器を有する。積和演算器は、積和演算を行うために乗算器と加減算器に加えて、論理演算器を有する。一方、特殊演算器は、積和演算器が行う演算以外の特殊な演算を実行する複数の演算器を有する。本明細書では、一例として、除算は特殊演算器内の演算器により実行されるものとする。
【０００６】
NNは、例えば画像認識を行う場合、畳込み演算を行う畳込み層（Convolution Layer, Convolutional Neural Network）と、畳込み層の直後に挿入されるプーリング層とを有する。プーリング層は、例えば、畳込み層の出力の複数の要素（複数の画素）の最大値を選ぶマックスプーリング層である。更に、NNは、畳込み層とプーリング層以外に、チャネル間の画素の正規化を行う局所レスポンス正規化層（Local Response Normalization Layer LRN層）、チャネル内の画素の正規化を行うバッチ正規化層（Bach Normalization Layer BN層）、全結合層（Fully Connected Layer）、出力層の活性化関数として用いられるSoftmax層、非線形活性化関数であるReLU層、ネットワーク内の一部のノードを一時的に非活性化するDropout層などを有する。また、再帰型ニューラルネットワーク（Recurrent Neural Network RNN）内にはLSTM層（Long Short Term Memory Layer）が設けられる。
【０００７】
NNについては、例えば以下の文献に記載されている。
【０００８】
これらのNN内の各層の演算は、汎用的な演算器である積和演算器で実行される非特殊演算だけを含む場合と、各層の演算が非特殊演算に加えて特殊演算を含み、積和演算器で実行される演算と特殊演算器で実行される演算を含む場合がある。
【先行技術文献】
【特許文献】
【０００９】
【特許文献１】特開平６−２１５０２１号公報
【特許文献２】特開２００５−２７５６２６号公報
【非特許文献】
【００１０】
【非特許文献１】ImageNet Classification with Deep Convolutional Neural Networks, Alex Krishwvsky, Ilya Sutskever, Geoffrey E. Hinton,(https://papers.nips.cc/paper/4824-imagenet-classification-with-deep-convolutional-neural-networks.pdf)
【発明の概要】
【発明が解決しようとする課題】
【００１１】
しかしながら、NNの演算を実行するNNプロセッサは、NN全体の演算量を考慮して、第１の数の積和演算器と、第２の数の特殊演算器とを搭載する。そのため、第１の数が第２の数より多く、特殊演算を含む層の演算量が、特殊演算器による多くの演算量と積和演算器による比較的少ない演算量を含む場合、両演算器の演算量の割合と、両演算器の処理能力の割合とがアンバランスになる。その結果、特殊演算を含む層の特殊演算器による演算時間が極端に長くなり、NN全体の演算時間に対し特殊演算を含む層の演算時間がボトルネックになる。
【００１２】
そこで，本実施の形態の第1の側面の目的は，特殊演算器の演算時間が原因となりNNの演算時間が長くなることを抑制する情報処理装置、ニューラルネットワークプログラム、ニューラルネットワークの処理方法を提供することにある。
【課題を解決するための手段】
【００１３】
本実施の形態の第１の側面は，メモリと、前記メモリと接続され、少なくとも乗算及び加算、論理演算、積和演算を実行可能な第１の演算器と、前記乗算及び加算、論理演算、積和演算と異なる特殊演算を実行可能な第２の演算器と、レジスタとを有するプロセッサとを有し、
前記プロセッサは、
複数の層を有するニューラルネットワーク内の前記特殊演算を含む第１の演算を実行する第１の層の前記第１の演算を、前記第1の演算の特殊演算を第２の演算器で計算する第２の方法で実行した時の、前記第１の演算に要する第２の演算時間が、前記第１の演算のために行われる前記メモリと前記レジスタ間のメモリ転送に要するメモリ転送時間以下の場合、前記第1の演算を前記第２の方法で実行し、
前記第２の演算時間が前記メモリ転送時間以下でない場合、
前記第１の演算を、前記第1の演算の特殊演算を前記第1の演算器で近似計算する第1の方法で実行した時の、前記第１の演算に要する第1の演算時間が、前記メモリ転送時間以下の場合、前記第1の演算を前記第１の方法で実行する、情報処理装置である。
【発明の効果】
【００１４】
第１の側面によれば，特殊演算器の演算時間が原因となりNNの演算時間が長くなることを抑制する。
【図面の簡単な説明】
【００１５】
【図１】ニューラルネットワーク（以下NN）の一例を示す図である。
【図２】本実施の形態におけるNNの演算を実行する情報処理装置のシステムの構成例を示す図である。
【図３】ホストマシン３０の構成例を示す図である。
【図４】NN実行マシンの構成例を示す図である。
【図５】ホストマシンとNN実行マシンによる学習処理や本番処理の概略を示すシーケンスチャートの図である。
【図６】積和演算器MAの構成例を示す図である。
【図７】特殊演算器SPの構成例を示す図である。
【図８】NN内の複数の層の演算に含まれる特殊演算の例を示す図である。
【図９】NNの演算時間の一例を示す図である。
【図１０】ボトルネックとなっているNN内の特定の層の演算時間を短縮する方法を説明する図である。
【図１１】本実施の形態におけるNNプロセッサの学習時での処理を示すフローチャート図である。
【図１２】本実施の形態におけるNNプロセッサの本番時（推論時）での処理を示すフローチャート図である。
【図１３】特殊演算を特殊演算器で行うか近似計算により積和演算器で行うかの選択処理のフローチャート図である。
【図１４】特殊演算を特殊演算器で行う場合の層の演算時間とメモリ転送時間の比較処理S61のフローチャート図である。
【図１５】近似計算を選択する処理S63のフローチャートを示す図である。
【図１６】畳込み層の演算を説明する図である。
【図１７】畳込み層の演算内容、入力画像サイズ、パディング数、入力チャネル数、ストライド数、出力画像サイズ、演算回数、演算器の演算命令数及びデータ数などを示す図表である。
【図１８】マックスプーリング層の演算を説明する図である。
【図１９】マックスプーリング層の演算内容、入力サイズ、出力サイズ、演算回数、演算器の演算命令数及びデータ数などを示す図表である。
【図２０】活性化関数ReLU層の演算を説明する図である。
【図２１】活性化関数ReLU層の演算内容、入力サイズ、出力サイズ、演算回数、演算器の演算命令数及びデータ数などを示す図表である。
【図２２】全結合層FCの演算を説明する図である。
【図２３】全結合層FCの演算内容、入力サイズ、出力サイズ、演算回数、演算器の演算命令数及びデータ数などを示す図表である。
【図２４】Dropout層の演算を説明する図である。
【図２５】Dropout層の演算内容、入力サイズ、出力サイズ、演算回数、演算器の演算命令数及びデータ数などを示す図表である。
【図２６】Softmax層の演算を説明する図である。
【図２７】Softmax層の演算内容、入力サイズ、出力サイズ、演算回数、演算器の演算命令数及びデータ数などを示す図表である。
【図２８】Softmax層の演算のソースコードを示す図である。
【図２９】LRN層の演算を説明する図である。
【図３０】LRN層の演算のソースコードを示す図である。
【図３１】LRN層の演算内容、入力サイズ、出力サイズ、演算回数、演算器の演算命令数及びデータ数などを示す図表である。
【図３２】LRN層の演算内容、入力サイズ、出力サイズ、演算回数、演算器の演算命令数及びデータ数などを示す図表である。
【図３３】バッチ正規化層の演算内容の演算式を示す図である。
【図３４】バッチ正規化層の演算内容、入力サイズ、出力サイズ、演算回数、演算器の演算命令数及びデータ数などを示す図表である。
【図３５】バッチ正規化層の演算内容、入力サイズ、出力サイズ、演算回数、演算器の演算命令数及びデータ数などを示す図表である。
【図３６】LRN層の特殊演算（-3/4乗）と近似計算のテーブルを示す図である。
【図３７】LRN層における特殊演算を含む演算時間とメモリ転送時間の比較及び近似計算の選択の具体例を示すフローチャート図である。
【図３８】バッチ正規化層の特殊演算（-1/2乗）と近似計算のテーブルを示す図である。
【図３９】バッチ正規化層における特殊演算を含む演算時間とメモリ転送時間の比較及び近似計算の選択の具体例を示すフローチャート図である。
【発明を実施するための形態】
【００１６】
目次
１．NNの例
２．NNを実行する情報処理装置の構成例
３．NN実行プロセッサの演算器の例
４．NN実行プロセッサの問題点
５．本実施の形態におけるNNプロセッサの概略
６．特殊演算を特殊演算器により計算するか積和演算器により近似計算するかの選択
７．近似計算の選択
８．NNの各層の演算と演算回数、演算命令数、データ量の例
９．具体例に基づく選択方法
以下、上記の目次に沿って本実施の形態を説明する。
【００１７】
１．NNの例
図１は、ニューラルネットワーク（以下NN）の一例を示す図である。図１のNNは、非特許文献１のAlexNetであり、本実施の形態が適用されるNNがこのNNに限定されるわけではない。
【００１８】
図１のNNは、例えば、画像を入力し、入力画像の内容（例えば数字）に応じて有限個のカテゴリに分類する物体カテゴリ認識のモデルである。NNは、入力層INPUTと出力層であるソフトマックス層SOFTMAXとの間に、隠れ層として、畳込み層CONV、活性化関数層ReLU、局所レスポンス正規化層LRN、マックスプーリング層MAX_POOLING、全結合層FC、ドロップアウト層Dropoutなどを有する。
【００１９】
隠れ層は、上記以外に、バッチ正規化層が含まれることもある。また、再帰型ニューラルネットワークRNNの場合、隠れ層にLSTM層が含まれることもある。各層は、単数または複数のノードを有し、前後の層間のノードはリンクで結合される。
【００２０】
畳込み層CONVは、入力層INPUT内の複数のノードに入力された例えば画像の画素データに、ノード間のリンクに対応付けられた重みを乗算しそしてバイアスを加算する積和演算を実行し、畳込み層１１内の複数のノードに画像の特徴を有する出力画像の画素データをそれぞれ出力する。
【００２１】
活性化関数層ReLUは、畳込み層の出力を入力しReLU関数の値を出力する。LRN層は、チャネル間の画素の正規化を行う。マックスプーリング層MAX_POOLINGは、近傍の複数ノードの最大値を抽出して出力する。全結合層FCは、前層の全ノードの値にエッジの重みを乗算しバイアスを加算して全ノードの値を生成する。ソフトマックス層SOFTMAXは、画像内の物体が特定の物体に該当するか否かの確率を、複数の物体カテゴリに対応するノードに出力する。
【００２２】
また、ドロップアウト層は、複数のノードの一部を非活性状態にして、NNのロバスト性（堅牢性、強靭性、頑強性）を高める。バッチ正規化層は、畳込み層が畳込み演算して生成した出力画像の画素データを正規化し、例えば分布の偏りを抑制する。LSTM層は、再帰型ニューラルネットワークRNN内の設けられる一種のメモリ機能を有する。
【００２３】
２．NNを実行する情報処理装置の構成例
図２は、本実施の形態におけるNNの演算を実行する情報処理装置のシステムの構成例を示す図である。情報処理システムは、ホストマシン３０とNN実行マシン４０とを有し、例えば、専用インターフェース３２，４１を介して、ホストマシン３０とNN実行マシン４０とが接続される。また、ホストマシン３０には利用者端末５０がアクセス可能にされ、利用者は、利用者端末５０からホストマシン３０にアクセスし、NN実行マシン４０を操作し、NNに対する学習処理や本番処理（推論処理）を実行する。ホストマシン３０は、利用者端末からの指示に従い、NN実行マシンが実行するNNプログラムを作成し、NN実行マシンに送信する。そして、NN実行マシンは送信されたNNプログラムを実行し、学習処理や本番処理を実行する。
【００２４】
ホストマシン３０は、例えば、コンピュータであり、ホストプロセッサ３１、インターフェース３２、メインメモリ３３、補助記憶装置であるハードディスドライブHDDまたはソリッドステートドライブSSD３５を有する。HDDまたはSDDには、NNの演算を実行するNNプログラムや、学習処理で利用される教師データなどが格納される。
【００２５】
NN実行マシン４０は、インターフェース４１、NNプロセッサ４３、メインメモリ４５などを有する。NNプロセッサ４３は、複数の積和演算器MA_0〜MA_n-1と、単数または複数の特殊演算器SP_0〜SP_m-1と、レジスタ群REGを有する。好ましくは、積和演算器の数は、特殊演算器の数よりも多い。一般に、NNの演算は、積和演算器により実行される演算量が、特殊演算器により実行される演算量より多いので、それぞれの演算器の数も異なる場合がある。しかし、本実施の形態は、積和演算器の数が特殊演算器の数より多い場合に限定されない。
【００２６】
図３は、ホストマシン３０の構成例を示す図である。ホストマシン３０は、ホストプロセッサ３１と、NN実行マシン４０と接続するための高速入出力インターフェース３２と、メインメモリ３３と、内部バス３４とを有する。さらに、内部バス３４に接続された大容量のHDDまたはSSDなどの補助記憶装置３５と、利用者端末５０と接続するための低速入出力インターフェース３６を有する。
【００２７】
ホストマシン３０は、メインメモリ３３に展開された補助記憶装置３５内のプログラムを実行する。補助記憶装置３５には、図示されるとおり、NNの演算処理を実行するNNプログラムと、教師データが記憶される。ホストプロセッサ３１は、NNプログラムと教師データをNN実行マシンに送信し、NN実行マシンに実行させる。
【００２８】
高速入出力インターフェース３２は、例えば、PCI Expressなどのプロセッサ３１とNN実行マシンのハードウエアとを接続するインターフェースである。メインメモリ３３は、プロセッサが実行するプログラムやデータを記憶し、例えば、SDRAMである。
【００２９】
内部バス３４は、プロセッサより低速の周辺機器とプロセッサとを接続し、両者の通信を中継する。低速入出力インターフェース３６は、例えば、USBなど利用者端末のキーボードやマウスとの接続を行い、または、イーサネット（登録商標）のネットワークとの接続を行う。
【００３０】
図４は、NN実行マシンの構成例を示す図である。NN実行マシン４０は、ホストマシン３０との通信を中継する高速入出力インターフェース４１と、ホストマシン３０からの指令やデータに基づいて対応する処理を実行する制御部４２とを有する。また、NN実行マシン４０は、NNの演算を実行するNNプロセッサ４３と、メモリアクセスコントローラ４４と、内部のメモリ４５を有する。
【００３１】
NNプロセッサ４３は、ホストマシンから送信されたNNプログラムとデータに基づいて、NNプログラムを実行し、学習処理及び本番処理を実行する。高速入出力インターフェース４１は、例えば、PCI Expressであり、ホストマシン３０との通信を中継する。
【００３２】
制御部４２は、ホストマシンから送信されるプログラムやデータをメモリ４５に記憶し、ホストマシンからの指令に応答して、NNプロセッサによるプログラムの実行を指示する。メモリアクセスコントローラ４４は、制御部４２からのアクセス要求とNNプロセッサ４３からのアクセス要求に応答して、メモリ４５へのアクセス処理を制御する。
【００３３】
内部のメモリ４５は、NNプロセッサが実行するNNプログラム、NNのパラメータ、教師データ、処理対象データ、処理結果のデータなどを記憶する。例えば、SDRAMや、より高速のGDR5や広帯域のHBM2などである。
【００３４】
図５は、ホストマシンとNN実行マシンによる学習処理や本番処理の概略を示すシーケンスチャートの図である。ホストマシン３０は、NN実行マシン４０に、教師データや入力データを送信し（S30）、学習処理または本番処理を実行するNNプログラムを送信し（S31）、プログラム実行指示を送信する（S32）。
【００３５】
これらの送信に応答して、NN実行マシン４０は、教師データや入力データとNNプログラムを内部のメモリ４５に記憶し、プログラム実行指示に応答して、メモリ４５に記憶した教師データや入力データについてNNプログラムの実行を行う（S40）。この間、ホストマシン３０は、NN実行マシンによるNNプログラムの実行完了まで待機する（S33）。
【００３６】
NN実行マシン４０は、NNプログラムの実行が完了すると、プログラム実行終了の通知をホストマシン３０に送信し（S41）、出力データをホストマシン３０に送信する（S42）。この出力データがNNの出力データの場合、ホストマシン３０が出力データと正解データとの誤差を小さくするようにNNのパラメータ（重み等）を最適化する処理を実行する。または、NN実行マシン４０がNNのパラメータを最適化する処理を実行してもよい。NN実行マシンが送信する出力データが最適化されたNNのパラメータ（重みやバイアス等）の場合、ホストマシン３０は、最適化されたパラメータを記憶する。
【００３７】
３．NN実行プロセッサの演算器の例
図６は、積和演算器MAの構成例を示す図である。積和演算器MAは、乗算器MUL、加減算器ADD_1、論理演算器LGCと、複数のセレクタSEL_1, SEL_2, SEL_3を有する。また、積和演算器MAは、浮動小数点数の指数を減算する加減算器ADD_2を有する。論理演算器LGCは、入力値の論理和、論理積、排他的論理和など種々の論理演算を実行する。また、加減算器ADD_1は、加算と減算を実行する。
【００３８】
セレクタSEL_1は、レジスタ群REG内のメモリから転送されたデータを、所望の演算器MUL,LGC,ADD_1,ADD_2に入力する。加減算器ADD_2は、浮動小数点数の指数の減算を行い、仮数のビットのシフト量を出力する。このシフト量に基づいて、加減算器ADD_1などがデータの桁合わせを行う。セレクタSEL_2は、セレクタSEL_1で選択されたデータか乗算器MULの出力データのいずれかを選択し、加減算器ADD_1に入力する。乗算器MULのデータが選択されて加減算器ADD_1に入力されると、加減算器ADD_1は積和演算結果を出力する。セレクタSEL_3は、所望の演算器の出力データを選択し、レジスタ群内のレジスタに出力し、または、メモリ４５に出力する。
【００３９】
このように、積和演算器MAは、加減算、乗算、乗算器MULと加算器ADD_1による積和演算、乗算器MULと減算器ADD_1による積減演算、及び、論理演算など、特殊演算を除く非特殊演算を実行する。また、特殊演算に対する近似計算が加減算、乗算、積和演算、論理演算などで実行される場合、積和演算器MAがその近似計算を実行する。
【００４０】
図７は、特殊演算器SPの構成例を示す図である。特殊演算器SPは、入力側のセレクタSEL_11と出力側のセレクタSEL_12と、両セレクタの間に設けられた複数の特殊演算エレメントSP_Eを有する。複数の特殊演算エレメントSP_Eは、それぞれ異なる特殊演算または一部同じ特殊演算を実行する。入力側のセレクタSEL_11は、レジスタ群REG内の入力データを、所望の特殊演算エレメントSP_Eに入力し、出力側のセレクタSEL_12は、所望の特殊演算エレメントSP_Eの出力を選択して、例えばレジスタや図示しないメモリに出力する。このように、特殊演算器SPは、複数種類の特殊演算を実行する複数の特殊演算エレメントを有する。
【００４１】
４．NN実行プロセッサの問題点
図８は、NN内の複数の層の演算に含まれる特殊演算の例を示す図である。NN内の複数の層は、一般に、積和演算器により実行可能な多くの演算、特に積和演算、を有する。一方、特定の層は、積和演算器により実行可能な演算に加えて、特殊演算器により実行される特殊演算を有する。または、特定の層は、積和演算器により実行可能な演算を含まず、特殊演算器により実行される特殊演算を有する。
【００４２】
図８に示した９つの層の演算については後で詳述する。概略を述べると、畳込み層CONVは、例えば、多くの積和演算を有し特殊演算を有していない。マックスプーリング層MAX_POOLは、NN内のデータの比較を行う論理演算を有し特殊演算を有していない。活性化関数ReLU層は、比較を行う論理演算を有し特殊演算を有していない。全結合層FUL_CNCTは、多くの積和演算を有し特殊演算を有していない。そして、ドロップアウト層DROPOUTは、ビットマスクとの論理積演算や乗算を有し特殊演算を有していない。
【００４３】
一方、ソフトマックス層SOFTMAXは、積和演算器で実行される四則演算に加えて、指数演算ex（累乗）や対数演算などの特殊演算を有する。LRN層は、積和演算器の演算に加えて、-3/4乗の演算や除算などの特殊演算を有する。-3/4乗は、例えば、平方根と乗算と除算の組み合わせ（２回平方根の値と１回平方根の値を乗算し逆数をとる）で実行される。バッチ正規化層BATCH_NORMは、積和演算器の演算に加えて-1/2乗などの特殊演算を有する。さらに、LSTM層は、シグモイド関数sigmoidや、ハイパボリックタンジェントtanhなどの特殊演算を有する。
【００４４】
図９は、NNの演算時間の一例を示す図である。例えば、図１のNNが学習処理を実行したときの演算時間の各層の内訳を示す。横軸は時間軸である。
【００４５】
図９に示されたNNの演算時間例によれば、大量の積和演算からなる畳込み演算を行う畳込み層CONVの演算時間が全演算時間の約３０％を占める。そして、活性化関数層ReLU、マックスプーリング層MAX_POOL、全結合層FUL_CNCT、ソフトマックス層SOFTMAXなどの演算時間はそれほど大きくない、
それに対して、LRN層の演算時間が全体の演算時間の約５０％を占めている。その結果、全体の演算時間が長くなっている。このような場合、特殊演算を有するLRN層の演算時間が、全体の演算時間のボトルネックとなっている。この原因は、例えば、NNプロセッサが、積和演算器MAに比較して少数の特殊演算器SPしか搭載していないため、特殊演算の処理能力が低いからである。そのため、LRN層の特殊演算である累乗を特殊演算器SPで実行すると、図９に示すようにそのLRN層の実行時間が比較的長くなり、演算時間短縮のボトルネックとなる。
【００４６】
特に、学習処理では、大量の教師データについてNNの演算を実行するので、１つの学習データの対するNNの実行時間を短くすることが、学習処理を完了するまでの長い演算時間を短縮するためには必要である。また、学習処理後の推論処理（本番処理）でも、多数のユーザが入力データについてNNの演算による推論を要求する場合、NNの実行時間を短くすることが望まれる。
【００４７】
５．本実施の形態におけるNNプロセッサの概略
図１０は、ボトルネックとなっているNN内の特定の層の演算時間を短縮する方法を説明する図である。図１０の横軸は時間軸である。NN内の特定の層の演算を実行する場合、演算器による演算処理と、メモリ転送処理とが発生する。メモリ転送処理は、演算のための入力データをメモリからプロセッサ内のレジスタに転送し、演算結果である中間データや出力データをレジスタからメモリに転送する処理である。
【００４８】
図１０には、ある層の演算に必要なメモリ転送時間tmが示される。演算処理EX_0、EX_1は、ある層の演算に含まれる積和演算器で実行される非特殊演算と、特殊演算器で実行される特殊演算とを有する。演算処理EX_0の演算時間は、積和演算器により実行される非特殊演算の演算時間tcmaと、特殊演算器による演算時間tcs_0との和である合計演算時間tcma+tcs_0である。この演算処理EX_0では、特殊演算器による演算時間tcs_0が短く、演算時間tcma+tcs_0はメモリ転送時間tmより長くなっている。一方、演算処理EX_1の演算時間はtcma+tcs_1である。この演算処理EX_1では、特殊演算器による演算時間tcsが長くなり、演算時間tcma+tcs_1はメモリ転送時間tmより長くなっている。
【００４９】
メモリ転送と演算器による演算は、並列に実行される。したがって、演算処理EX_0のように、層の演算器の演算時間がメモリ転送時間以下の場合、演算器による演算時間がメモリ転送時間に隠蔽されるので、層の演算時間がNN全体の演算時間のボトルネックになることはない。この場合は、メモリ転送時間がボトルネックになる。
【００５０】
逆に、演算処理EX_1のように、層の演算器の演算時間がメモリ転送時間以下でない場合、演算器による演算時間がメモリ転送時間に隠蔽されず、層の演算中のメモリ転送時間がNN全体の演算時間のボトルネックになる。
【００５１】
一方、演算処理EX_2、EX_3では、層の特殊演算を特殊演算器で実行することに代えて、特殊演算の近似計算による積和演算器で実行する。演算処理EX_2は、近似計算１を積和演算器で実行し、演算処理EX_3は、近似計算２を積和演算器で実行する。
【００５２】
したがって、演算処理EX_2の演算時間は、積和演算器により実行される非特殊演算の演算時間tcmaと、積和演算器により実行される近似計算１の演算時間tca_1との和tcma+tca_1である。同様に、演算処理EX_3の演算時間は、積和演算器により実行される非特殊演算の演算時間tcmaと、積和演算器により実行される近似計算２の演算時間tca_2との和tcma+tca_2である。これらの演算時間tcma+tca_1、tcma+tca_2は、いずれもメモリ転送時間tmより短い。
【００５３】
本実施の形態におけるNNプロセッサは、NN内の特殊演算が含まれる層の演算を演算処理EX_0で行った場合の時間tcma+tcs_0がメモリ転送時間tm以下の場合、演算処理EX_0を演算方法として選択する。この場合、層の特殊演算は特殊演算器で演算される。
【００５４】
一方、NNプロセッサは、NN内の特殊演算が含まれる層の演算を演算処理EX_1で行った場合の時間tcma+tcs_1がメモリ転送時間tm以下でない場合、演算処理EX_2、EX_3のいずれかを演算方法として選択する。この場合、NNプロセッサは、選択した演算方法でその層の演算を実行し、特殊演算に特殊演算器を使用せず、汎用的な積和演算器を使用する。積和演算器は、一般に１つの命令を１クロックサイクルで完了することができ、また、積和演算器の数が大きいため、近似計算を積和演算器で実行した場合の実行時間tcaが、特殊演算を特殊演算器で実行した場合の実行時間tcsよりも短くなる。そのため、その層の合計演算時間tcma+tcaがメモリ転送時間tmより短くなり、演算実行時間をメモリ転送時間内に隠蔽することができる。
【００５５】
さらに、本実施の形態におけるNNプロセッサは、演算処理EX_2, EX_3のうち、近似計算の誤差が小さい演算処理EX_2を選択する。一般的に、近似計算は、演算回数を増やすほど誤差が小さくなる傾向にある。そこで、NNプロセッサは、できるだけ誤差が少ない近似計算で、演算時間tcma＋tcaがメモリ転送時間tmより短くなる演算処理を選択する。
【００５６】
上記のとおり、層の特殊演算を含む演算を特殊演算器で実行した場合の層の実行時間がメモリ転送時間以下の場合（メモリ転送がボトルネックの場合）、特殊演算は特殊演算器で演算したほうが積和演算器で近似計算するよりも高精度に演算できるので、NNプロセッサは、特殊演算器で演算する。
【００５７】
一方、層の特殊演算を含む演算を特殊演算器で実行した場合の層の実行時間がメモリ転送時間以下でない場合（演算器による演算時間がボトルネックの場合）、NNプロセッサは、特殊演算を近似計算により積和演算器で行う。これにより、NNプロセッサは、層の演算時間をメモリ転送時間以下にでき、NNの演算を高速化できる。
【００５８】
そして、好ましくは、層の演算時間をメモリ転送時間以下にできる近似計算のうち、できるだけ高精度の近似計算を選択する。
【００５９】
層の演算の演算器による実行時間は、NNの演算内容とデータ量及びプロセッサの性能に依存して異なる。また、メモリ転送時間は、NNのデータ量及びプロセッサとメモリのメモリ転送能力に依存して異なる。
【００６０】
また、NNプロセッサは、NNの学習時は、最初の学習処理を実行する工程内で、層の特殊演算を特殊演算器で実行するか、近似計算により積和演算器で実行するかを決定し、その後の学習処理では、再度決定処理をせず、最初に決定した方法で層の演算を実行する。また、NNプロセッサは、本番処理時（推論時）は、最初の本番処理工程で、層の特殊演算を特殊演算器で実行するか、近似計算により積和演算器で実行するかを決定し、その後の本番処理では、再度決定処理をせず、最初に決定した方法で層の演算を実行する。学習時と本番時で異なるプロセッサがNNの演算を実行する場合があるからである。
【００６１】
図１１は、本実施の形態におけるNNプロセッサの学習時での処理を示すフローチャート図である。NNプロセッサが学習処理を実行する前に、予め特殊演算と近似計算のテーブルが作成される（S0）。特殊演算と近似計算のテーブルは、後で詳述するが、特殊演算を特殊演算器で実行する場合の各特殊演算エレメントの命令数と各特殊演算エレメントのクロックサイクル数、特殊演算を近似計算により積和演算器で実行する場合の積和演算器の命令数と積和演算器のクロックサイクル数をそれぞれ有する。また、テーブルは、それぞれの近似計算の誤差も有すると好ましい。上記のクロックサイクル数はNNプロセッサの性能情報であるので、特殊演算と近似計算のテーブルとは別に、NNプロセッサの性能情報として予め準備されてもよい。
【００６２】
学習処理では、NNプロセッサは、最初の学習工程S1〜S11を実行し、２回目以降の学習の反復工程S20〜S32を実行する。最初の学習工程S1〜S11では、NNプロセッサは、NNの各層を順方向に伝播しながら（S1）、層の演算に特殊演算が含まれる場合、図１０で説明した方法で、特殊演算を特殊演算器で行うか、近似計算により積和演算器で行うかを選択する（S2）。そして、NNプロセッサは、選択した方法でその層の演算に含まれる特殊演算を実行する（S3）。NNプロセッサは、上記の処理が、全層が終わるまで繰り返す（S4）。
【００６３】
次に、NNプロセッサは、NNの各層を逆方向に伝播しながら（S5）、層の演算に特殊演算が含まれる場合、図１０で説明した方法で、特殊演算を特殊演算器で行うか、近似計算により積和演算器で行うかを選択する（S6）。そして、NNプロセッサは、選択した方法でその層の演算に含まれる特殊演算を実行する（S7）。NNプロセッサは、上記の処理が、全層が終わるまで繰り返す（S8）。なお、NN逆方向伝播では、出力値と教師データの差分（誤差）をNNの逆方向に伝播しながら、各層での誤差を小さくする更新後のパラメータと更新前のパラメータとの差分を求める。
【００６４】
そして、NNプロセッサは、NNの各層を順方向に伝播しながら（S9）、各層の重みやバイアスなどのパラメータを逆伝播で求めたパラメータの差分により更新する（S10）。このパラメータの更新処理も全層が終わるまで行われる（S11）。
【００６５】
２回目以降の学習の反復工程S20〜S32では、NNプロセッサは、順伝播しながら（S21）全層終了するまで（S24）、選択した方法で各層の演算を実行する（S23）。さらに、NNプロセッサは、逆伝播しながら（S25）全層終了するまで（S28）、選択した方法で各層の演算を実行する（S27）。そして、NNプロセッサは、NNの各層を順方向に伝播しながら（S29）全層終了するまで（S31）、各層の重みやバイアスなどのパラメータを逆伝播で求めたパラメータの差分により更新する（S30）。上記の処理が学習の反復が終了するまで繰り返される（S32）。
【００６６】
図１１の処理は、NNプロセッサがホストマシンから送信されたNNプログラムを実行することで行われる。NNプログラムは、層の演算の特殊演算を特殊演算器で行うか近似計算により積和演算器で行うかの判定コードと、層の演算の特殊演算を特殊演算器で行うためのコードと、近似計算により積和演算器で行うためのコードとを有する。判定コードは、初回の学習工程で実行され、次回の学習工程以降は実行されない。また、NNプロセッサが異なる度に、特殊演算と近似計算のテーブルが作成され、判定コードが実行され、特殊演算器で行うか、近似計算により積和演算器で行うかが判定される。
【００６７】
図１２は、本実施の形態におけるNNプロセッサの本番時（推論時）での処理を示すフローチャート図である。NNプロセッサが本番処理を実行する前に、予め特殊演算について近似計算のテーブルが作成される。本番時のNNプロセッサが学習時のNNプロセッサと異なる場合があるからである。
【００６８】
本番処理では、NNプロセッサは、最初の本番工程S41〜S44を実行し、２回目以降の本番工程S51〜S54を実行する。最初の本番工程S41〜S44では、NNプロセッサは、NNの各層を順方向に伝播しながら（S41）、層の演算に特殊演算が含まれる場合、図１０で説明した方法で、特殊演算を特殊演算器で行うか、近似計算により積和演算器で行うかを選択する（S42）。そして、NNプロセッサは、選択した方法でその層の演算に含まれる特殊演算を実行する（S43）。NNプロセッサは、上記の処理が、全層が終わるまで繰り返す（S44）。
【００６９】
２回目以降の本番工程S51〜S54では、NNプロセッサは、NNの各層を順方向に伝播しながら（S51）、層の演算に含まれる特殊演算を選択した方法で実行する（S53）。NNプロセッサは、上記の処理が、全層が終わるまで繰り返す（S54）。
【００７０】
６．特殊演算を特殊演算器で行うか近似計算により積和演算器で行うかの選択
図１３は、特殊演算を特殊演算器で行うか近似計算により積和演算器で行うかの選択処理のフローチャート図である。この選択処理は、図１１，図１２の工程S2,S6,S42の処理である。
【００７１】
NNプロセッサは、各層において特殊演算を含む層か否か判定し（S60）、特殊演算を含まない場合（S60のNO）、その層の演算を積和演算器で実行すると決定する（S66）。特殊演算を含む場合（S60のYES）、NNプロセッサは、層の演算に含まれる特殊演算を特殊演算器で実行した場合の層の演算時間と、層の演算に必要なデータのメモリ転送時間とを比較する（S61）。この比較については、図１４で説明する。NNプロセッサは、特殊演算を特殊演算器で実行した場合の層の演算時間がメモリ転送時間以下か否か判定し（S62）、以下の場合（S62のYES）、層の演算を特殊演算は特殊演算器で非特殊演算は積和演算器で実行すると決定する（S65）。以下でない場合（S62のNO）、NNプロセッサは、層の演算を特殊演算は近似計算により積和演算器で、非特殊演算は積和演算器でそれぞれ実行すると決定する（S64）。
【００７２】
さらに、望ましくは、NNプロセッサは、演算時間がメモリ転送時間以下を満たす近似計算のうち、誤差が最小の近似計算を選択する（S63）。
【００７３】
図１４は、特殊演算を特殊演算器で行う場合の層の演算時間とメモリ転送時間の比較処理S61のフローチャート図である。層の演算時間は、NNの演算内容とNNプロセッサの性能に依存する。NNプロセッサの性能は、積和演算器の性能である積和演算性能nmaと特殊演算器の性能である特殊演算性能nsである。また、NNの演算内容は、NNの演算に必要な四則演算の回数や特殊演算の回数であり、それらの演算回数を積和演算器や特殊演算器で実行した場合の演算命令数（演算器の命令実行回数）である。一方、メモリ転送時間は、データ転送量(byte)とメモリ帯域（メモリアクセスにおける単位時間当たりのデータ量（byte/sec））とに依存する。データ転送量はNNの演算内容に基づき、メモリ帯域はNNプロセッサの性能に基づく。
【００７４】
本実施の形態では、特殊演算器内の複数種類の特殊演算エレメントの１つの命令に要する平均クロックサイクル数Csが異なるので、積和演算性能nmaと特殊演算性能nsを、演算器の個数とクロック周波数の積と定義する。そして、積和演算器の演算時間tcmaと特殊演算器の演算時間tcsを、各演算器の演算命令数Xma, Xsに、（演算性能nma／１命令の平均クロックサイクル数（演算サイクル数）Cma）, (演算性能 ns／１命令の平均クロックサイクル数（演算サイクル数 Cs））をそれぞれ乗算して求める。
【００７５】
図１３に示されるとおり、NNプロセッサは、プロセッサの積和演算性能nmaと、特殊演算性能nsと、メモリ転送性能ｍを以下の通り求める（S70）。MACはメモリアクセスコントローラである。
積和演算性能nma = 積和演算器数 * クロック周波数
特殊演算性能ns = 特殊演算器数 * クロック周波数
メモリ転送性能ｍ = MAC数 * MAC当たりのデータ転送量
次に、NNプロセッサは、積和演算時間tcmaと、特殊演算時間tcsと、メモリ転送時間tmを以下のとおり求める（S71）。
積和演算時間tcma = 積和演算命令数Xma* 積和演算サイクル数Cma／積和演算性能nma
特殊演算時間tcs = Σ（特殊演算命令数Xs * 特殊演算サイクル数Cs）／特殊演算性能ns
メモリ転送時間tm = メモリ転送量y(=データ要素数 * １要素のデータサイズ)／メモリ転送性能ｍ
上記のΣ（特殊演算命令数Xs * 特殊演算サイクル数Cs）は、特殊演算が複数の特殊演算エレメントで実行される場合の、複数の演算エレメントそれぞれの（特殊演算命令数Xs * 特殊演算サイクル数Cs）の合計を意味する。
【００７６】
そして、NNプロセッサは、上記で求めた層の演算に要する演算時間（積和演算時間tcma + 特殊演算時間tcs）と、メモリ転送時間tmとを比較し、演算時間がメモリ転送時間以内か否か（tcma + tcs ≦ tm）を判定する（S72）。tcma + tcs ≦ tmが真（YES）の場合、層の演算の特殊演算を特殊演算器で実行し、偽（NO）の場合、層の演算の特殊演算を近似計算により積和演算器で実行すると決定する。
【００７７】
留意すべき点は、後で説明する具体例で説明するが、層の演算は、非特殊演算のみの場合、非特殊演算と特殊演算が混在する場合、などがある。
【００７８】
層の演算が非特殊演算と特殊演算が混在する場合、
（１）特殊演算を特殊演算器で実行する場合、層の演算に要する演算時間は、非特殊演算の積和演算時間tcma + 特殊演算の特殊演算時間tcsとなる。また、
（２）特殊演算を近似計算により積和演算器で実行する場合、層の演算に要する演算時間は、（非特殊演算の積和演算時間+ 近似計算の積和演算時間）tcmaとなる。
【００７９】
７．近似計算の選択
図１５は、近似計算を選択する処理S63のフローチャートを示す図である。特殊演算の近似計算は複数存在する。例えば、ニュートン法は、所定の演算で初期値を推定する初期値推定と、初期値に基づいて近似計算を繰り返し収束演算とにより、近似値を算出する。一般に収束演算の回数を増やすほど誤差が少なくなるが、その分演算時間が長くなる。
【００８０】
そこで、本実施の形態では、予め準備する特殊演算と近似計算のテーブルに、複数の近似計算をNNプロセッサで実行して得たそれぞれの積和演算命令数を格納する。このテーブルには、積和演算器の１命令の平均サイクル数（通常、１サイクル）、特殊演算エレメントの１命令の平均サイクル数、近似計算の誤差も格納する。近似計算の誤差も実験で得ておく。
【００８１】
図１５に示されるとおり、近似計算を選択する処理では、NNプロセッサは、特殊演算と近似計算のテーブルから、誤差が一番小さい近似計算を選択する（S75）。
【００８２】
次に、NNプロセッサは、特殊演算を選択した近似計算により積和演算で実行する場合の層の演算時間tcma + tcaを次の計算式で算出する（S76）。
tcma + tca = （非特殊演算の積和演算命令数Xma* 積和演算サイクル数Csa + 
特殊演算の近似計算による積和演算命令数Xma * 積和演算サイクル数Csa）／積和演算性能nma
上記の特殊演算の近似計算による積和演算命令数Xmaは、近似計算の初期値推定のための演算回数aと、収束演算の演算回数ｂと、収束演算の反復回数ｒとから、以下の式で求める。
Xma = a + r*b
近似計算の初期値推定は、例えば、クエイク(Quake)のアルゴリズムと同様の初期値推定で行う。この場合、入力の浮動小数点数の指数部分に関しては、ビット演算のみで正確な近似解が得られる。一方、仮数部（Kビット）は、前もって符号ビットを含めたK+1ビットの全通り（２K+1通り）をNNプロセッサで実験し、最も誤差が少ない初期値を決定する。この初期値を得るのに要した演算回数がａとなる。
詳細は、例えば、http://takashiijiri.com/study/miscs/fastsqrt.htmlを参照。
【００８３】
また、収束演算と反復回数の例は、例えば、３次Householder法を２回、Newton法を４回、３次Householder法と４次Householder法を１回などである。
【００８４】
次に、NNプロセッサは、近似計算により積和演算器で実行した場合の層の合計演算時間tcma + tcaと、メモリ転送時間tmとを比較する（S77）。tcma + tca ≦ tmが真の場合(YES)、選択した近似計算に決定し（S78）、偽の場合(NO)、特殊演算と近似計算のテーブルから次に誤差の小さい近似計算を選択し（S79）、工程S76, S77を繰り返す。
【００８５】
上記の近似計算を選択する処理は、近似計算の収束演算の繰り返し回数が多く演算時間が長いほど、近似計算の誤差が小さいことに基づく。tcma + tca ≦ tmが満たされれば、近似計算により積和演算器で実行した層の演算時間はメモリ転送時間に隠蔽され、演算時間がボトルネックになることはない。但し、近似計算の種類によって誤差が異なるので、上記の条件を満たす範囲で、最小誤差の近似計算を選択することが好ましい。
【００８６】
８．NNの各層の演算と演算回数、演算命令数、データ量の例
次に、図１のNNの具体例について、各層の演算、演算回数、演算命令数、データ量の例を示し、図８に示した各層の特殊演算の有無と、各層が特殊演算を含む場合の特殊演算を説明する。以下に説明する図１のNNの演算例は、非特許文献１のAlexNetのプログラムのソースコードに基づく。
【００８７】
［畳込み層CONV］
図１６は、畳込み層の演算を説明する図である。畳込み層は、Hin×Winの入力画像を入力チャネルCin数有する入力INPUTを入力する。入力画像の周囲にはフィルタサイズに基づく幅の画素がパディングされる。畳込み層は、Hin×Winの入力画像に、ｋH×ｋW（２×２）のフィルタFILTERをストライドSt間隔で移動させながら、畳込み演算する。各フィルタFILTERは、入力画像の入力チャネルCinと同じ数を有し、全フィルタは出力チャネルCout数分のフィルタを有する。畳込み層の演算は、入力チャネルCin分の入力画像に各フィルタFILTERを畳込み演算し、Hout×Woutの出力画像をフィルタの数Cout有するOUTPUTを出力する。
【００８８】
図１７は、畳込み層の演算内容、入力画像サイズ、パディング数、入力チャネル数、ストライド数、出力画像サイズ、演算回数、演算器の演算命令数及びデータ数などを示す図表である。図１７に示されるとおり、畳込み層の演算内容は、パディングされた入力画像の全入力チャネルCinの各要素I(i)にkH×kW×Cinのフィルタの重みwijを乗算し、それにバイアスbiasを加算した値（wij* I(i)+bias）を、累積加算する演算を、全出力チャネルCout分のフィルタについて実行することである。
【００８９】
入力画像サイズHin×Win、パディング数pad、入力チャネル数Cin、フィルタ画像サイズkH×kW×Cin、フィルタのストライドSt、出力画像サイズHout×Wout×Coutとすると、出力画像のサイズWout、Houtは、図１７に示されるとおり、以下である。
Wout = (Win+2pad-kW)/St - 1  or   Win = Wout×St + kW +St -2pad
Hout = (Hin+2pad-kH)/St - 1  or   Hin = Hout×St + kH +St -2pad
したがって、畳込み層の積の演算回数と和の演算回数は、それぞれ以下のとおりである。
演算回数(積) = (Hout×Wout×Cout÷Gr×kH×kW×Cin÷Gr)×Gr×MB
演算回数(和) = { (Hout×Wout×Cout÷Gr×kH×kW×Cin÷Gr×Gr+ Hout×Wout×Cout}×MB
但し、Grは入力INPUTと出力OUTPUTのグループ数、MBはミニバッチのデータ数である。具体例の畳込み層は、入力チャネルCinと出力チャネルCoutをグループ数Grに分け、各グループ内で畳込み演算を行い、その畳込み演算をグループ数Grだけ行い、これをミニバッチデータ数MB分行う。これにより演算回数を1/Gr回数に減らす。
【００９０】
上記の積の演算回数と和の演算回数の共通回数を積和演算器で実行し、共通回数に満たない積の演算回数または和の演算回数を積和演算器で実行する。その場合、NNプロセッサの積和演算器の積和命令数と、積和演算器の加算命令数と、積和演算器の乗算命令数は、図１７に示されるように、以下のとおりである。
命令数（積和） = (Hout×Wout×Cout÷Gr×kH×kW×Cin÷Gr)×Gr×MB
命令数（和） = 演算回数（和） - 命令数（積和） = Hout×Wout×Cout}×MB
命令数（積） = 演算回数（積） - 命令数（積和） = 0
上記から、畳込み層の演算は、全て積和演算器で実行され、特殊演算は含まれない。
【００９１】
次に、入力bottomと、出力topと、バイアスbiasと、重みweightのデータ数は、それぞれ以下のとおりである。
bottom = Hin×Win×Cin×MB
top = Hout×Wout×Cout × MB
bias = Cout
weight = kH×kW×Cin÷Gr×Cout÷Gr×Gr
［Max Pooling層］
図１８は、マックスプーリング層の演算を説明する図である。マックスプーリング層は、図１の具体例では、畳込み演算結果をLRN層で正規化した画像や畳込み演算された画像を入力し、近接する画素の最大値を選択して出力する。近傍の要素の最大値を選択するために、マックスプーリング層は、Hout * Wout * Cout * MB分、kH * kW回の比較演算（論理演算）を実行する。
【００９２】
図１９は、マックスプーリング層の演算内容、入力サイズ、出力サイズ、演算回数、演算器の演算命令数及びデータ数などを示す図表である。演算内容は、入力画像の最大値対象サイズkH×kWの入力I(i)の最大値を、kH×kW個の入力I(i)を互いに比較して得る演算である。
【００９３】
最大値対象サイズkH×kW、出力画像サイズHout×Wout×Cout、ミニバッチのデータ数MBとすると、比較の演算回数は、Hout×Wout×Cout×（kH×kW）×MBである。また、比較演算は論理演算であり、積和演算器で実行されるので、積和演算器の命令数は、比較演算回数と等しい。したがって、マックスプーリング層の演算は積和演算器で実行され、特殊演算はない。さらに、入力bottom、出力top、変数maskのデータ数は、図１９に示されるとおりである。
【００９４】
［活性化関数ReLU層］
図２０は、活性化関数ReLU層の演算を説明する図である。ReLU層は、Hin×Win×Cinの入力データI(i)がI(i)＜０か、I(i)≧０かの比較を行い、I(i)＜０なら出力O(i)=0とし、I(i)≧０なら出力O(i)=I(i)とする演算を行う。
【００９５】
図２１は、活性化関数ReLU層の演算内容、入力サイズ、出力サイズ、演算回数、演算器の演算命令数及びデータ数などを示す図表である。演算内容は、上記の通りである。入力画像サイズはHin×Win×Cin、出力画像サイズはHout×Wout×Coutであり、両者は等しいサイズである。また、ミニバッチのデータ数はMBである。この場合の演算回数は、入力I(i)とゼロ（０）との比較演算の回数であるので、Hin×Win×Cin×MBである。この比較演算は積和演算器の論理演算器で実行できるので、積和演算器の命令数は演算回数（比較）と等しい。したがって、活性化関数ReLU層は、積和演算器で実行され、特殊演算はない。入力borrowと出力topのデータ数は、入力画像サイズと出力画像サイズと同じである。
【００９６】
［全結合層FC］
図２２は、全結合層FCの演算を説明する図である。全結合層は、入力画像の全画素（全ニューロン）を並べたHin＊Win＊Cinサイズの入力I(i)それぞれに重みwijを乗算したものを累積し、累積値にバイアスbiasを加算した値O(i)を出力する。
【００９７】
図２３は、全結合層FCの演算内容、入力サイズ、出力サイズ、演算回数、演算器の演算命令数及びデータ数などを示す図表である。演算内容は、上記の通りである。入力画像サイズはHin×Win×Cin、出力画像サイズはHout×Wout×Coutである。両サイズは必ずしも等しくない。
【００９８】
入力サイズをI、出力サイズをO、ミニバッチデータの数をMBとすると、乗算の演算回数はI×O×MBであり、加算の演算回数は（I×O＋O）×MBである。加算は、ミニバッチの各データに対し、全入力に重みを乗算したものを累積加算する回数I×Oと、累積加算結果にバイアスbiasを加算する回数Oの和、I×O＋Oである。この加算が、ミニバッチの各データで発生するので、合計加算回数は、（I×O＋O）×MBである。
【００９９】
次に、加算と乗算は積和演算器で同時に実行可能であるので、加算の演算回数と乗算の演算回数の共通回数は、積和演算命令数I×O×MBとなる。そして、加算演算回数から積和演算命令数を減じた残りが加算演算命令数O×MBとなる。乗算演算命令数はゼロである。
【０１００】
更に、データ数については、入力bottomのデータ数、出力topのデータ数は、図２３に示されるとおり、それぞれ入力画像サイズにミニバッチのデータ数MBを乗じた数になる。
bottom = Hin × Win × Cin × MB
top = Hout × Wout × Cout × MB
そして、バイアスbiasのデータ数は出力チャネルCout分であるので、bias=Cout、重みweightのデータ数は、全入力数×全出力数であるので、weight = Hin×Win×Cin×Hout×Wout×Coutである。
【０１０１】
上記の通り、全結合層の演算は、全て積和演算器で実行され、特殊演算は含まれていない。
【０１０２】
［Dropout層］
図２４は、Dropout層の演算を説明する図である。Dropout層は、図１に示されるとおり、全結合層FCの出力のうち、ランダムに選択したノードを不活性化し、不活性化されなかったノードを強化する。Dropout層は、脳科学の知見に基づく手法であり、学習時に、ランダムに選択したノードを不活性化することでネットワークに負荷をかけ、不活性化されなかったノードに定数scaleを乗じて強化する。本番時（推論時）は、Dropout層の演算は行われない。
【０１０３】
図２５は、Dropout層の演算内容、入力サイズ、出力サイズ、演算回数、演算器の演算命令数及びデータ数などを示す図表である。演算内容は、上記したとおりであり、演算式は以下のとおりである。
O(i) = I(i) * mask(i) * scale
また、入力画像サイズはHin×Win×Cin、出力画像サイズはHout×Wout×Coutである。また、ミニバッチのデータ数はMBである。このことから、乗算の演算回数は、学習時に入力データそれぞれにマスクビットmask(i)を乗算し、更にスケールscaleを乗算するので、２×I×MBである。本番時の演算回数はゼロである。そして、学習時の乗算演算の命令数は、乗算の演算回数と等しく、２×I×MBである。
【０１０４】
入力borrow、出力top、マスクビットmaskのデータ数は、それぞれ以下のとおりである。
borrow = Hin×Win×Cin×MB
top = Hout×Wout×Cout×MB
mask = Hin×Win×Cin×MB
したがって、Dropout層の演算は、全て積和演算器で実行され、特殊演算は含まない。
【０１０５】
［Softmax層］
図２６は、Softmax層の演算を説明する図である。図２６のSoftmax層の演算は、合計が１になる確率を各出力のノード（ニューロン）に生成するとともに、逆方向伝播時に利用する各ノードの出力の誤差（クロスエントロピー誤差）を求める。
【０１０６】
図２７は、Softmax層の演算内容、入力サイズ、出力サイズ、演算回数、演算器の演算命令数及びデータ数などを示す図表である。さらに、図２８は、Softmax層の演算のソースコードを示す図である。AlexNetのソースコードは、オープンソースから抽出可能である。
【０１０７】
Softmax層の演算内容は、図２７の演算内容及び図２８のソースコードに示すように以下のとおりである。
（１）関数maxで入力bottom_xの最大値scaleを出力する。関数maxは比較演算である。
（２）全入力bottom_yそれぞれから最大値scaleを減じ、全入力ｘ−最大値maxを負にする。
（３）更に、x-max(<0)のexpを求め、その範囲を0〜1.0にする。
（４）そして、全ex-maxの和scaleを求める。
（５）各ex-maxを全ex-maxの和scaleで割り、和が１になる確率 = ex-max／(全ex-maxの和scale）を求める。
（６）そして、正解ベクトルt[mb][i]=1の場合に、上記確率のlogである、log(ex-max／Σex-max)（クロスエントロピー誤差）を求め、log(ex-max／Σex-max)が負であるので、(-1)倍して正の誤差eを求める。
【０１０８】
Softmax層の入力サイズ、出力サイズは以下のとおりである。
I = Hin×Win×Cin
O = Hout×Wout×Cout
そして、ミニバッチのデータ数をMBとすると、
上記の（１）〜（６）の比較、差、exp、和、商、比較、logの演算回数はそれぞれ以下のとおりである。入力サイズをI、ミニバッチのデータ数をMBとする。
演算回数（比較）＝ I × MB×２
演算回数（差）＝ I × MB×２
演算回数（exp）＝ I × MB
演算回数（和）＝ I × MB
演算回数（商）＝ I × MB
演算回数（log）＝ I × MB
これらの演算のうち、比較、差、和は積和演算器で実行され、exp、商、logは特殊演算器で実行される。それぞれの演算命令数は、演算回数と同じになる。このように、Softmax層は、非特殊演算を積和演算器で実行し特殊演算を特殊演算器で実行する。
【０１０９】
さらに、データ数は、入力bottom、誤差ｅに対応する出力topは、次の通りである。
bottom = Hin×Win×Cin×MB
top = Hout×Wout×Cout × MB（学習時のみ、本番時はゼロ）
［LRN層］
図２９は、LRN層の演算を説明する図である。LRN層は、図１に示されるとおり、畳込み層CONVの出力側に設けられ、畳込み層が生成した画像データのチャネル方向の局所的な数の画素データの正規化を行う。
【０１１０】
図３０は、LRN層の演算のソースコードを示す図である。図３１，図３２は、LRN層の演算内容、入力サイズ、出力サイズ、演算回数、演算器の演算命令数及びデータ数などを示す図表である。
【０１１１】
LRN層の演算内容は、図３０の演算内容及び図３１のソースコードに示すように以下のとおりである。
（１）畳込み層CONVの出力であるLRN層の入力X（bottom_data）の二乗X2をHin*Win*Cinの要素分求める。二乗X2は変数Padded_squareとなる。この演算は積である。
（２）Padded_squareのチャネルCin内のLocal_size=nの要素をそれぞれα倍しLocal_size=nで除算し（α/n倍）、padded_squareの各要素X2のチャネル方向の局所数Local_size分の平均scale_data[cin]（=scale_data[mb][0][i], Cin=0の平均）を求める。この演算は積と和である。
（３）チャネルCin内で移動しながら、残りのc=1〜Cinについてそれぞれの平均を求める。具体的には、（２）でc=0について求めた平均（scale_data[mb][c-1][i]）から、その平均の端tailを減じ先頭headを加算してc=1の平均を求める。c=2以降も同様に繰り返す。これらの平均はLocal_size=nの要素の移動平均である。この演算は、和、積を２回、差の演算である。
（４）（３）の出力を-3/4乗し、出力top_data[i]を求める。出力top_data[i]は、i=Cin*Hin*Win分求める。ここの演算は、累乗powであり、特殊演算である。
（５）（４）の出力top_data[i]に入力bottom_data[i]をそれぞれ乗算する。ここの演算は積である。
【０１１２】
そして、入力画像サイズIと出力画像サイズOは、次のとおりである。
I = Hin×Win×Cin  （Cinは入力チャネル数）
O = Hout×Wout×Cout    （Coutは入力チャネル数）
そして、ミニバッチのデータ数はMBである。
【０１１３】
次に演算回数は、上記の演算（１）〜（５）の回数及び同じ演算をまとめた回数は、それぞれ、以下のとおりである。
（１）積：Cin×Hin×Win
（２）積：local_size×Hin×Win  和：local_size×Hin×Win
（３）積：（Cin-1)×Hin×Win  ×２  和：（Cin-1)×Hin×Win  差：（Cin-1)×Hin×Win
（４）累乗：Cin×Hin×Win
（５）積：Cin×Hin×Win
よって、
演算回数(積): (4Cin + local_size - 2)×Win×Hin×MB
演算回数(和): (Cin + local_size - 1) ×Win×Hin×MB
演算回数(差): (Cin -1)×Win×Hin×MB
演算回数(Pow): Cin×Win×Hin×MB
次に、演算の命令数は、積和、積差でまとめると、次の通りである。
命令数(積和)： {lsize×Win×Hin + (Cin - 1)×Win×Hin}×MB
命令数(積差)： (Cin - 1)×Win×Hin×MB
命令数(和)： 演算回数(和) - 命令数(積和) = 0
命令数(差)： 演算回数(差) - 命令数(積差) = 0
命令数(積)： 演算回数(積) - 命令数(積和) - 命令数(積差) = Cin×Win×Hin×MB×4
命令数(pow)： 演算回数(pow) = Cin×Win×Hin×M
さらに、データ数は、以下のとおりである。
bottom = Hin×Win×Cin×MB
top = Hout×Wout×Cout × MB
scale = Hin×Win×Cin×MB
padded square = Win×Hin×Cin
上記の通り、LRN層の演算では、非特殊演算を積和演算器で実行し、特殊演算（累乗pow）を特殊演算器で実行される。
【０１１４】
［Bach Normalization（バッチ正規化）層］
図３３は、バッチ正規化層の演算内容の演算式を示す図である。図３４、図３５は、バッチ正規化層の演算内容、入力サイズ、出力サイズ、演算回数、演算器の演算命令数及びデータ数などを示す図表である。
【０１１５】
バッチ正規化層は、例えば、畳込み層の後ろに設けられ、ミニバッチの全入力画像について演算して求めた全出力画像をチャネルCout毎に正規化する。バッチ正規化層の入力は、畳込み層で演算したミニバッチのデータ分の出力画像であり、出力は正規化された出力画像である。
【０１１６】
図３４の演算内容にも示すが、バッチ正規化層の演算は、次の通りである。
（１）各ミニバッチ（MB）で算出した各チャネルCiの出力画像の平均、分散、正規化、スケール及びシフトを実行する。
（２）現MBで算出したチャネルCiの平均＋前MBで算出したチャネルCiの平均＊係数＝移動平均、の演算を、全チャネルC0-Cnに対して繰り返す。
（３）現MBで算出したチャネルCiの分散＊係数＋前MBで算出したチャネルCiの分散＊係数＝移動平均、の演算を、全チャネルC0-Cnに対して繰り返す。
【０１１７】
（２）（３）では、各MBにおいて、乗算＊３回、加算＊２回がチャネル数Cin回実行される。（２）（３）の移動平均は、本番工程のために学習工程で予め求めておく演算である。
【０１１８】
図３３には、上記の各チャネルCiの出力画像の平均、分散、正規化、スケール及びシフトの演算式が示される。ここで、正規化の演算は、t[ci]を求める演算式と、正規化された値temp[bi][ci][x][y]を求める演算式に分けることで、平方根と除算の演算回数を減らすことができる。スケール＆シフト演算は、正規化された値temp[bi][ci][x][y]を０〜２５５に線形変換する演算である。
【０１１９】
図３４において、入力画像サイズ、出力画像サイズは、次の通りである。
bottom = Hin×Win×Cin×MB
top = Hout×Wout×Cout×MB
ミニバッチのデータ数はMBである。
【０１２０】
そこで、図３３の演算式によれば、平均（mean）、分散（variance）、移動平均、正規化、スケール＆シフトの演算回数は、図３４に示すとおりである。
平均（mean）： 
演算回数(積) = 演算回数(和) = Hin×Win×Cin×MB
分散（variance）：
演算回数(差) = Hin×Win×Cin×MB
演算回数(積) = 2×Hin×Win×Cin×MB
演算回数(和) = Hin×Win×Cin×MB
移動平均：
演算回数(積) = 3×Cin
演算回数(和) = 2×Cin
正規化：
演算回数(和) = Cin
演算回数(平方根) = Cin
演算回数(商) = Hin×Win×Cin×MB
スケール＆シフト：
演算回数(積) = Hin×Win×Cin×MB、演算回数(和) = Hin×Win×Cin×MB
平均（mean）、分散（variance）、移動平均、正規化、スケール＆シフトの積和、積、和、差、商、平方根の演算の命令数は、図３５に示すとおりである。積と和、積と差は積和演算で一緒に演算できるので、積和演算の命令数でまとめられる。
平均（mean）： 
命令数(積和) = Hin×Win×Cin×MB
分散（variance）：
命令数(差) = Hin×Win×Cin×MB
命令数(積) = Hin×Win×Cin×MB
命令数(積和) = Hin×Win×Cin×MB
移動平均：
命令数(積) = Cin
命令数(積和) = 2×Cin
正規化：
命令数(和) = Cin
命令数(平方根) = Cin
命令数(商) = Hin×Win×Cin×MB
スケール＆シフト：
命令数(積和) = 演算回数(積) = Hin×Win×Cin×MB
さらに、データ数は、図３５に示すとおりである。
bottom = Hin×Win×Cin×MB
top = Hout×Wout×Cout × MB
deviation = Cin
bias (β) = Cout
bias(γ) = Cout
上記の通り、バッチ正規化層は、非特殊演算を積和演算器で行い、商、平方根の特殊演算を特殊演算器で行う。
【０１２１】
［LSTM層］
LSTM層の特殊演算はsigmoid関数の演算と、tanh関数の演算である。これらの具体例については省略する。
【０１２２】
９．具体例に基づく選択方法
次に、具体例に基づき、特殊演算を特殊演算器で実行するか近似計算により積和演算器で実行するかの判定と、どの近似計算により積和演算器で実行するかの選択について説明する。具体例は、特殊演算を有するLRN層とバッチ正規化層である。
【０１２３】
［LRN層の具体例］
図１１，図１２で示した、LRN層の特殊演算と近似計算のテーブルについて説明し、図１３〜図１５に示した、ある性能を有するNNプロセッサでLRN層の演算を実行する場合の上記判定及び選択について説明する。
【０１２４】
図３６は、LRN層の特殊演算（-3/4乗）と近似計算のテーブルを示す図である。このテーブルは、特殊演算（-3/4乗）の計算方法として、特殊演算器で実行するOriginalと、近似計算を積和演算器で実行する４つの例が示される。４つの近似計算は、（１）初期値推定（Magic numberの推定）のみ、（２）初期値推定と３次Householder法を２回転、（３）初期値推定とNewton法を４回転、（４）初期値推定と３次Householder法と４次Householder法である。テーブルには、特殊演算器で実行するケースと、４つの近似計算それぞれについて、初期値推定の命令数、収束演算の命令数、命令数の合計、クロックサイクル数、誤差が示される。
【０１２５】
第１に、特殊演算を特殊演算器で実行するケースは、収束演算（命令数）のコラムに示した通り、√ｘの演算fsqrtが２命令＋乗算fmulが１命令＋除算fdivが１命令となる。つまり、２回平方根の値（1/4乗）と１回平方根（2/4乗）の値を乗算し（1/4+2/4=3/4乗）逆数をとる(-3/4乗)演算である。fsqrtとfdivが特殊演算器により実行され、fmulは積和演算器により実行される。fsqrt, fmul, fdivはいずれも浮動小数点演算器の命令である。したがって、命令数の合計は、積和演算命令数が１，特殊演算命令数が３（fsqrt命令数が２，fdiv命令数が１）である。NNプロセッサの１命令の実行に要する平均クロックサイクル数が、積和演算器が１，fsqrtが２３、fdivが２２とすると、合計クロックサイクル数は、積和演算器が１、特殊演算器が６８となる。また、誤差（−１）は実質的にゼロを意味する。
【０１２６】
第２に、特殊演算を近似計算による積和演算器で実行する４つのケースについて説明する。
（１）初期値設定のみの演算は、実験の結果、右論理シフトisrlが２命令、減算isubが２命令である。命令isrl, isubは、いずれも固定小数点演算器の命令である。これらの命令の演算は積和演算器で実行可能であり、命令数の合計は積和演算命令数が４である。したがって、合計クロックサイクル数は４となる。
（２）初期値推定と３次Householder法を２回転の演算では、初期値推定の命令数が前述と同じ４であり、収束演算の命令数は積和演算fmaが5*2命令＋乗算fmuが5*2命令となる。したがって、命令数の合計は積和演算命令数が24である。したがって、合計クロックサイクルは24*1=24となる。誤差は19.53である。
（３）初期値推定とNewton法を４回転の演算は、初期値推定の命令数は前述と同じ４であり、収束演算の命令数は積和演算fmaが2*4命令＋乗算fmuが6*4命令となる。したがって、命令数の合計は積和演算命令数が36である。したがって、合計クロックサイクルは36*1=36となる。誤差は0.95である。
（４）初期値推定と３次Householder法と４次Householder法の演算は、初期値推定の命令数は前述と同じ４であり、収束演算の命令数は積和演算fmaが5+5命令＋乗算fmuが5+7命令となる。したがって、命令数の合計は積和演算命令数が26である。したがって、合計クロックサイクルは36*1=36となる。誤差は0.87である。
【０１２７】
図３７は、LRN層における特殊演算を含む演算時間とメモリ転送時間の比較及び近似計算の選択の具体例を示すフローチャート図である。まず、LRN層の演算命令数Xma+Xsと、メモリ転送量ｙは、以下のとおりである(S80)。
Xma +Xs = 1,200,000,000 (積和) + 300,000,000 (特殊)
ｙ = 300,000,000 * 4 [byte]
そして、NNプロセッサの性能は、以下のとおりである（S81）。
積和演算性能: nma = 2,000 GFLOPS, 特殊演算性能: ns = 125 GFLOPS
メモリ転送性能 (メモリ帯域） : m = 200 GB/s
そこで、LRN層の演算を非特殊演算と特殊演算の一部を積和演算器で実行する時間tcmaと特殊演算の残りを特殊演算器で実行する時間tcsは、特殊演算サイクル数の合計が68サイクルだったので、図３７に示すとおり、tcma + tcs= 163,950μsecとなる。
【０１２８】
一方、メモリ転送時間tmは、メモリ転送量ｙが入力bottom、変数scale_data、出力topそれぞれ300,000,000 * 4 [byte]故、図３７に示すとおり、tm = 18,000μsecとなる。その結果、tcma + tcs ≦ tmとならず、近似計算による積和演算器による実行を選択する（S82）。
【０１２９】
近似計算の選択処理では、最初に誤差が最小のテーブル最下段の近似法により積和演算器で実行する場合の演算時間tcma+tcaを計算すると、図３７に示されるとおり、tcma + tca = 3,900μsecとなる。その結果、tcma + tca ≦ tmを満たし、最下段の近似法が選択される。
【０１３０】
［バッチ正規化層の具体例］
図３８は、バッチ正規化層の特殊演算（-1/2乗）と近似計算のテーブルを示す図である。図３８と近似計算が異なる。減算fsubは浮動小数点演算器の命令である。特殊演算器による演算と、４種類の近似計算に対する、初期値推定の命令数、収束演算の命令数、合計命令数、合計命令数に必要なクロックサイクル数、誤差は、図３８に示されるとおりであり、それぞれの説明は省略する。
【０１３１】
図３９は、バッチ正規化層における特殊演算を含む演算時間とメモリ転送時間の比較及び近似計算の選択の具体例を示すフローチャート図である。バッチ正規化層の演算命令数Xma+Xsと、メモリ転送量ｙは、S90に示されるとおりである。また、NNプロセッサの性能S91は、図３７と同じである。
【０１３２】
そこで、バッチ正規化層の演算を非特殊演算を積和演算器で実行する時間tcmaと特殊演算を特殊演算器で実行する時間tcsは、特殊演算サイクル数の合計が45サイクルだったので、図３９に示すとおり、tcma + tcs = 350μsecとなる。
【０１３３】
一方、メモリ転送時間tmは、図示されるとおり、tm = 6,000μsec(>350)となり、特殊演算器で実行が選択される。なお、メモリ転送時間tmのbottomでメモリ転送量y=100,000,000*4を３倍したのは、入力bottom、中間データscale_data、出力topの３種類のデータが存在するからである。
【符号の説明】
【０１３４】
３０：ホストマシン
４０：ニューラルネットワーク（NN）実行マシン
４３：NNプロセッサ
MA_0〜MA_n-1：積和演算器
SP_0〜SP_m-1：特殊演算器
SP_E：特殊演算エレメント
tcma ：積和演算器の演算時間
tca  ：特殊演算器の演算時間
tcs  ：近似計算による積和演算器の演算時間
tm  ：メモリ転送時間
【図１】
2020101991.tif 000003
【図２】
2020101991.tif 000004
【図３】
2020101991.tif 000005
【図４】
2020101991.tif 000006
【図５】
2020101991.tif 000007
【図６】
2020101991.tif 000008
【図７】
2020101991.tif 000009
【図８】
2020101991.tif 000010
【図９】
2020101991.tif 000011
【図１０】
2020101991.tif 000012
【図１１】
2020101991.tif 000013
【図１２】
2020101991.tif 000014
【図１３】
2020101991.tif 000015
【図１４】
2020101991.tif 000016
【図１５】
2020101991.tif 000017
【図１６】
2020101991.tif 000018
【図１７】
2020101991.tif 000019
【図１８】
2020101991.tif 000020
【図１９】
2020101991.tif 000021
【図２０】
2020101991.tif 000022
【図２１】
2020101991.tif 000023
【図２２】
2020101991.tif 000024
【図２３】
2020101991.tif 000025
【図２４】
2020101991.tif 000026
【図２５】
2020101991.tif 000027
【図２６】
2020101991.tif 000028
【図２７】
2020101991.tif 000029
【図２８】
2020101991.tif 000030
【図２９】
2020101991.tif 000031
【図３０】
2020101991.tif 000032
【図３１】
2020101991.tif 000033
【図３２】
2020101991.tif 000034
【図３３】
2020101991.tif 000035
【図３４】
2020101991.tif 000036
【図３５】
2020101991.tif 000037
【図３６】
2020101991.tif 000038
【図３７】
2020101991.tif 000039
【図３８】
2020101991.tif 000040
【図３９】
2020101991.tif 000041