JP2022152208A - 畳み込み演算を行なう演算処理装置および演算処理方法 - Google Patents
畳み込み演算を行なう演算処理装置および演算処理方法 Download PDFInfo
- Publication number
- JP2022152208A JP2022152208A JP2021054895A JP2021054895A JP2022152208A JP 2022152208 A JP2022152208 A JP 2022152208A JP 2021054895 A JP2021054895 A JP 2021054895A JP 2021054895 A JP2021054895 A JP 2021054895A JP 2022152208 A JP2022152208 A JP 2022152208A
- Authority
- JP
- Japan
- Prior art keywords
- unit
- convolution
- processing
- input data
- convolution operation
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Landscapes
- Complex Calculations (AREA)
Abstract
【課題】コンボリューション演算において、複数の特徴量を並列的に計算する構成を採用する際、演算部の処理性能に見合った記憶部の構成を提案する。【解決手段】コンボリューション演算の対象となる入力データ及びコンボリューション演算のための重み付け係数を外部記憶装置に記憶し、コンボリューション演算の際に、入力データ及び重み付け係数の少なくとも一方を、外部記憶装置から、コンボリューション演算を行なうプロセッサが外部記憶装置より高速にアクセス可能な内部記憶部にロードし、コンボリューション演算を複数の処理単位に分けて行なう。その際、処理単位毎のコンボリューション演算を複数のステージに分け、各ステージにおいて、入力データ及び重み付け係数の少なくとも一方を内部記憶部から読み出して、Nより少ない個数のニューロンによりコンボリューション演算の一部を行ない、各ステージでの演算結果を合計して、特徴毎の演算結果とする。【選択図】図1
Description
本開示は、畳み込み演算を行なう演算技術に関する。
近年、画像認識などのパターン認識、各種予想・制御システムの分野で、ニューラルネットワークを用いた処理装置が用いられている。ニューラルネットワークでは、少なくとも入力層、中間層、出力層の三層の処理ユニットを備え、各ユニットの各層間を接続するニューロンを備える。層間の各ニューロンは、所定の重み係数でフィードフォワード結合される。
入力層から入力された信号は、この重み付け係数を介して次の層に伝達され、出力層の出力を決定する。こうした階層結合型ニューラルネットワークでは、バックプロパゲーションなどの学習により、この層間の重み付け係数を定めることで、例えば画像などの情報に対応する信号が入力層に入力されると、これに対する有意の出力、例えば画像に含まれるモノや意味、予測や判断結果などに対応する信号を出力することができる。この層間の重み付け係数を用いた演算は、基本的に網羅的なので、各層の基本ユニットの数の積和に対応する回数の演算と、その演算結果を保存可能な容量のメモリーが必要になる。例えば、層間の数が2、各層に含まれる基本ユニットの数がN個であれば、2×N2 の個数のメモリー領域が必要になる。
このような階層結合型ニューラルネットワークを、組み込み機器等へ、高性能のまま安価に実装する事を目的として、アナログハードウェアやディジタルハードウェアで階層結合型ニューラルネットワークを実現する各種手法が提案されている(例えば下記特許文献1、2参照)。
こうしたニューラルネットワークの中でも、Convolutional Neural Networks(以下CNNと略記する)は、前段のデータにコンボリューションフィルターの重み係数を演算するコンボリューション演算を行ない、その結果を非線形変換することで特徴量を求めると言う処理を層間で繰り返すことで、識別対象の変動に対して頑健なパターン認識を可能にする手法として知られている。例えば、特許文献3及び特許文献4では、画像中の対象物の識別や検出に適用した例が提案されている。
こうしたCNNでは、コンボリューションフィルターの大きさや係数は、特徴毎に相違するから、層数が増えるだけでなく、抽出する特徴量が増えると、層間では特徴量毎の重み付き演算を行ない、更にそれらを非線形変換する処理が必要になる。この結果、CNNでは、演算のために記憶しておくべきコンボリューションフィルターの重み係数の容量が増大してしまうという問題があった。実際、重み係数は量子化により8ビット程度の整数値とした場合であっても、CNN全体では、数十メガバイトから数百メガバイトに達することがある。重み係数を記憶する記憶部を、CNNとして動作するチップの内部メモリーに確保することは、チップ面積の増大を招き、装置コストの上昇を招いてしまう。かといって、重み係数を、チップの外に設けられた外部メモリーに配置すると、メモリーアクセスの帯域幅が動作速度のボトルネックとなってしまう。コンボリューション演算を高速化するために、重み係数をベクトル化し、一度に複数の特徴量を並列的に計算する構成を採用しても、メモリーの帯域幅が演算部の処理性能に見合っていないと、結局、演算が頻繁にウェイトし、システム全体の実行効率は低下してしまう。
本開示は、以下の形態又は適用例として実現することが可能である。第1の態様は、複数の処理ノードが階層的に接続されたニューラルネットワークを用いて演算処理を行なう演算処理装置としての態様である。この演算処理装置は、ニューラルネットワークの各処理ノードにおけるN個のニューロンからなるコンボリューション演算を、複数の処理単位に分けて行なうコンボリューション演算部と、コンボリューション演算部に外部バスを介して接続され、コンボリューション演算のための入力データ、コンボリューション演算のための重み付け係数、およびコンボリューション演算後の出力データを記憶する外部記憶装置と、コンボリューション演算部が外部バスを介することなく直接アクセスできる内部記憶部と、入力データと重み付け係数との少なくとも一方を、コンボリューション演算部によるコンボリューション演算の開始前に内部記憶部に準備し、コンボリューション演算部による演算結果を出力データとして内部記憶部から外部記憶装置に出力する演算制御部と、を備え、コンボリューション演算部は、処理単位毎に行なわれるコンボリューション演算を、複数のステージに分け、各ステージにおいて、入力データと重み付け係数との少なくとも一方を内部記憶部から読み出して、Nより少ない個数のニューロンによりコンボリューション演算の一部を行ない、複数のステージでの演算結果を合計して、処理単位毎の出力データとして、内部記憶部に記憶する。
また、第2の態様は、複数の処理ノードが階層的に接続されたニューラルネットワークを用いて演算処理を行なう演算処理方法としての態様である。この塩酸処理方法は、ニューラルネットワークの各処理ノードにおけるN個のニューロンからなるコンボリューション演算の対象となる入力データおよびコンボリューション演算のための重み付け係数を外部記憶装置に記憶し、コンボリューション演算の際に、入力データおよび重み付け係数の少なくとも一方を、外部記憶装置から、コンボリューション演算を行なうプロセッサが外部記憶装置より高速にアクセス可能な内部記憶部にロードし、コンボリューション演算を複数の処理単位に分けて行ない、処理単位に毎のコンボリューション演算を複数のステージに分け、各ステージにおいて、入力データおよび重み付け係数の少なくとも一方を内部記憶部から読み出して、Nより少ない個数のニューロンによりコンボリューション演算の一部を行ない、各ステージでの演算結果を合計して、特徴毎の演算結果として、内部記憶部に出力し、特徴毎の演算結果を、次の階層の処理ノードの入力データとして、内部記憶部から外部記憶装置を介して伝達する。
A.第1実施形態:
(A1)CNNのハードウェア構成:
第1実施形態の演算処理装置100は、図1に示すように、特徴抽出の対象OJである2次元形状の画像をスキャンして画素単位の色彩や階調値からなる入力データとして入力する入力装置11と、抽出した結果CHを出力するディスプレイ等の出力装置12とに接続されている。この演算処理装置100は、記憶容量の大きな外部記憶装置20、コンボリューション演算(畳み込み演算)を行なうコンボリューション演算部30、コンボリューション演算部30から高速で読み書き可能な内部記憶部40、演算制御部50などを備える。演算処理装置100は、階層化された複数の処理ノードを備えるのニューラルネットワークを形成しており、各処理ノードにおけるN個のニューロンからなるコンボリューション演算を行ない、かつその演算結果を階層的に積み上げて、所望の特徴抽出を行なう。この実施例では、画像に含まれる特徴を抽出するものとしたが、処理対象は画像に限らず、テキストや音声、その他のパラメーターなど、どのようなものであっても差し支えない。
(A1)CNNのハードウェア構成:
第1実施形態の演算処理装置100は、図1に示すように、特徴抽出の対象OJである2次元形状の画像をスキャンして画素単位の色彩や階調値からなる入力データとして入力する入力装置11と、抽出した結果CHを出力するディスプレイ等の出力装置12とに接続されている。この演算処理装置100は、記憶容量の大きな外部記憶装置20、コンボリューション演算(畳み込み演算)を行なうコンボリューション演算部30、コンボリューション演算部30から高速で読み書き可能な内部記憶部40、演算制御部50などを備える。演算処理装置100は、階層化された複数の処理ノードを備えるのニューラルネットワークを形成しており、各処理ノードにおけるN個のニューロンからなるコンボリューション演算を行ない、かつその演算結果を階層的に積み上げて、所望の特徴抽出を行なう。この実施例では、画像に含まれる特徴を抽出するものとしたが、処理対象は画像に限らず、テキストや音声、その他のパラメーターなど、どのようなものであっても差し支えない。
外部記憶装置20は、対象OJを入力装置11により読み取った入力データやコンボリューション演算における重み付け係数、更にはコンボリューション演算の演算結果などを記憶する。外部記憶装置20は、DRAMなどから構成された大容量の記憶装置である。コンボリューション演算部30は、後述するコンボリューション演算(畳み込み演算)を行なう専用の演算装置である。コンボリューション演算部30は、一度に多桁の積和演算を高速に実行する。内部記憶部40は、このコンボリューション演算部30から外部バスを経由することなく直接かつ高速にアクセス可能な半導体メモリーであり、内部に入力データを記憶する第1記憶領域と、重み付け係数を記憶する第2記憶領域と、出力データを記憶する第3記憶領域とを有する。演算制御部50は、この内部記憶部40に、コンボリューション演算部30が行なう演算のために必要なデータを準備し、あるいは内部記憶部40に書き込まれた出力データを、外部記憶装置20に書き出すなど、コンボリューション演算部30による演算に必要な制御を行なう。なお、演算処理装置100のうち、外部記憶装置20を除いた、コンボリューション演算に関わる部分は、本実施形態では、1チップ化されている。
コンボリューション演算部30により演算の様子を模式的に図2に示した。図は、3層の処理ノードからなる3階層CNNの構成例を示しており、対象画像OJの参照画像領域CH0を対象として、第1階層である第1処理ノードPN1が扱う特徴数が3、第2階層である第2処理ノードPN2が扱うの特徴数が2、第3階層である第3ノードPN3が扱う特徴数が1、としている。対象画像OJは、ラスタースキャンされた画像データである。対象画像OJの画像データが、第1処理ノードPN1への入力データである。符号CH11からCH13は、第1階層の第1処理ノードPN1が扱う特徴面を示す。特徴面とは、所定の特徴抽出フィルターを用いて前階層のデータを走査しながら演算して得られた処理結果を示す。特徴面はラスタースキャンされた画像データに対する検出結果であるため、検出結果もここでは画像データとして表される。特徴数は、チャンネル数ともいい、以下の説明では、前階層の特徴数をチャンネル数Ciとして表わし、処理された特徴面の数をチャンネル数Coとして表わすことがある。
特徴面CH11~CH13は、画像データOJから夫々対応する特徴抽出フィルターCF11~CF13により生成される。特徴フィルターは、コンボリューション演算の累積和及び非線形処理を意味する。例えば、特徴面CH11~CH13は、2次元のコンボリューションフィルターCF11~CF13の演算結果を非線形変換することにより生成される。例えば、特徴フィルターのカーネルサイズ(水平方向の画素数と垂直方向の画素数)が11×11のコンボリューションフィルター演算は、次式(1)に示すような積和演算として行なわれる。
input(x,y):座標(x、y)での参照画素の階調値、
output(x,y):座標(x、y)での演算結果、
weight(column,row):座標(x+column、y+row)での重み付け係数、
columnSize=11, rowSize=11:フィルターカーネルサイズ(フィルタータップ数)である。
コンボリューションフィルターCF11~CF13の係数は、それぞれ異なる。また、特徴面によってコンボリューションカーネルのサイズも異なる。CNN演算では複数のフィルターカーネルを画素単位で走査しながら積和演算を繰り返し、式(1)に示した積和演算の結果を非線形変換する事で特徴面が生成される。特徴面CH11を算出する場合は前階層(ここでは対象画像OJ)との結合数が1であるため、フィルターカーネルとして一つのコンボリューションフィルターCF11のみを用いて演算がなされる。一方、次の第2処理ノードPN2で特徴面CH21,CH22を求める場合、前階層との結合数は3であるため、コンボリューションフィルターCF21~CF23およびCF31~CF33に相当する3つのコンボリューションフィルターカーネルによる演算結果が、累積加算される。つまり、特徴面CH21であれば、コンボリューションフィルターCF21~CF23の出力を累積加算し、最後に非線形変換処理する。非線形処理としては、積和演算の結果を、ロジスティック関数や双曲正接関数(tanh関数)等により変換する処理が用いられる。もとより、これら以外の非線形変換であってもよい。
ここで、コンボリューションフィルターCF21~CF33は、何れも異なるフィルター係数を備えるコンボリューションカーネルである。またコンボリューションフィルターCF21~CF23とコンボリューションフィルターCF31~CF33は、カーネルサイズは同一ではなく、処理すべき座標サイズにより、そのサイズは決定される。各コンボリューションフィルターの累積加算は、式(1)に従い行なわれる。これは、第3階層である第3ノードPN3のコンボリューションフィルターCF42,CF43でも同様である。特徴面CH21,CH22の場合、複数の前階層特徴面CH11~CH13と結合される。この場合、複数のコンボリューションフィルターCF21~CF33を用いた演算の結果は、更に累積加算される。同様に、第3階層の特徴面CH5は、複数の前階層特徴面CH21、CH22と結合され、複数のコンボリューションフィルターCF42,CF43を用いた演算の結果は、更に累積加算器される。従って、各特徴面を演算する際のニューロンの総結合数は、コンボリューションカーネルサイズ×前階層の特徴数に相当する。特徴数は、以下の説明では、チャンネル数とも呼ぶ。
一つの特徴面が複数の前階層特徴面と結合されている場合、式(1)に示した積和演算を一つの演算器で実行するためには、コンボリューションフィルターの重み付け係数weight(column,row)を、結合されている前階層特徴面毎に切り替える必要がある。図3に、この重み付け係数の切換を伴う積和演算を行なう構成を示した。こうした積和演算は、処理ノードPNを構成する各ニューロン毎に行なわれる。各ニューロンは、積算器MPXと加算器SUMと非線形変換処理部NLPとを備え、更に、各ニューロンの積算器MPXで用いられる重み付け係数wを切り替える係数選択部SELが設けられている。
ニューロンの積算器MPXには、対象画像OJからの入力値または前階層特徴面からの出力された入力値NU1~NUnが入力データとして入力され、学習済みの重み付け係数w11~w1nとの積算が行なわれる。コンボリューションフィルターごとに、予め重み付け係数のセットW1~Wnが用意されている。コンボリューションフィルターのいずれかのカーネルの選択信号が係数選択部SELに入力されると、これらの重み付け係数のセットW1~Wnのいずれかひとつが選択される。例えば、重み付け係数のセットW1が選択されると、このセットW1に含まれる重み付け係数w11~w1nが、積算器MPXに出力され、入力値NU1~NUnとの積算に供される。重み付け係数の各セットに含まれる重み付け係数、例えば重み付け係数w11~w1nは、一般的に知られているバックプロパゲーション等の学習アルゴリズムを使用して、検出する対象物毎に決定されている。この結果、コンボリューション演算を行なう各ニューロンでは、上述した式(1)に従い、入力データと重み付け係数Wとが積算器MPXにより積算され、さらにその結果が加算器SUMにより合算される。その結果を、非線形変換処理部NLPにより非線形演算することにより、特徴データが生成される。非線形変換処理部NLPは、ロジスティック関数や双曲正接関数(tanh関数)等による非線形変換を行なう。
こうした階層化されたコンボリューション演算による特徴データの生成の様子を、図4に模式的に例示した。第1処理ノードPN1では、3種類の特徴CH11~CH13が抽出され、これらを用いて、第2処理ノードPN2では、前階層で抽出された特徴を含む2種類の特徴CH21,CH22が抽出される。そして、第3ノードPN3では、これらの特徴を含む特徴CH5が最終的に抽出される。
以上説明したコンボリューション演算を本実施形態では、演算処理装置100により実行する。以下、演算処理装置100が行なうコンボリューション演算について詳しく説明する。図5は、演算処理装置100の内部構成を示すブロック図である。図示するように、この演算処理装置100の外部記憶装置20は、入力データ,重み付け係数、出力データを記憶する。このうち、入力データは、外部から入力されるものであり、本実施形態では、対象画像OJの画像データである。画像データには、画素の座標値と各画素の階調値とが含まれる。重み付け係数は、上述したコンボリューションフィルターにおける演算に用いられる係数である。重み付け係数は、各特徴面を求めるコンボリューションフィルターに応じて用意され、予め外部記憶装置20に読み込まれる。出力データは、コンボリューション演算部30によるコンボリューション演算の結果として得られた特徴を表わすデータである。コンボリューション演算部30による演算は、内部記憶部40に記憶されたデータを用いて行なわれ、コンボリューションフィルターによる演算の結果は内部記憶部40に一時的に記憶されるが、最終的に得られた特徴を示す出力データは、外部記憶装置20に記憶され、出力装置12に出力される。内部メモリー43は、このほか、コンボリューション演算部30の作業領域としても使用される。
内部記憶部40は、記憶領域としては、図1に示したように、入力データを記憶する第1記憶領域、重み付け係数を記憶する第2記憶領域、出力データを記憶する第3記憶領域、に分かれる。このうち、第1記憶領域は入力データを記憶する入力データキャッシュ部41として,第2記憶領域は重み付け係数を記憶する重み付け係数キャッシュ部42として、それぞれ構成されている。第3記憶領域は、特にキャッシュ部としては構成されず、内部メモリー43の内部に確保される。このキャッシュ部41,42および内部メモリー43は、コンボリューション演算部30からみれば、直接アクセスでき、外部記憶装置20のように、メモリー制御部22を介してアクセスする必要がない。このため、コンボリューション演算を高速に行なうために、コンボリューション演算部30による演算は、入力データキャッシュ部41と重み付け係数キャッシュ部42に入力データおよび重み付け係数を予め読み込んでおいて行なう。
入力データキャッシュ部41への入力データの読み込みや重み付き係数キャッシュ部42への重み付け係数の読み込みは、演算制御部50が行なう。また、演算制御部50は、内部メモリー43に特徴の出力データが保存されると、これを読み出し、外部記憶装置20に出力する。なお、演算制御部50は、これら以外にも、バッチ正規化や活性化関数の演算など、コンボリューション演算以外の処理を行なう。演算処理装置100による各階層毎のコンボリューション演算は、複数の処理単位に分割して行なわれる。この処理単位の設定は種々可能である。ある階層のニューロンの形状の高さをHo、幅をWo、チャンネル数をCoとしたとき、例えば、h×Wo×Co(ここでhは、h<Hoである自然数)を処理単位とすることができる。もとより、この処理単位は、Ho×w×Co(ここでwは、w<Woである自然数)としてもよい、Ho×Wo×c(ここで、cはc<Coである自然数)などとすることができる。このように、コンボリューション演算を複数の処理単位に分割することにより、内部メモリー43のサイズを削減できる。以下の実施例では、説明を簡明なものとするために、h=1、すなわち処理単位をWo×Coとして説明する。また、hは、内部記憶部40の記憶容量に応じて設定してもよい。内部記憶部40の容量が大きければ、hを大きくできる。
コンボリューション演算部30による演算の様子について説明する。既に式(1)を用いて説明したように、コンボリューション演算部30は、入力データと重み付け係数との積和演算を行なう。このとき、コンボリューション演算を行なおうとする階層の処理ノードPNが、高さHi、幅Wi、チャンネル数Ciであるとし、コンボリューション演算の結果、高さHo、幅Wo、チャンネル数Coの形状のデータを得るものとする。以下、説明の簡略化を図って、コンボリューションフィルターカーネルが1×1で、間引きなし、つまり高さ方向および幅方向の畳み込みを行なわないものとする。この場合、Hi=Ho、Wi=Woとなる。コンボリューション演算部30が、例えば入力チャンネルCiが8、出力チャンネルCoが32のコンボリューション演算を行なう場合を想定する。このコンボリューション演算を処理単位毎に一度に行なおうとすると、コンボリューション演算部30の演算器やそのためのレジスターとして、8×32の演算を行ない得るものが必要になる。これに対して、本実施形態のコンボリューション演算部30は、4入力×8出力の構成を有し、必要なコンボリューション演算を8回に分けて行なう。
このコンボリューション演算を行なうコンボリューション演算部30の構成について説明する。図6は、コンボリューション演算部30の概要を例示するブロック図である。図示するように、コンボリューション演算部30は、入力データレジスター31,重み付け係数レジスター32,並列演算器33、加算器35に加えて、アキュムレーター入力レジスター34,アキュムレーターレジスター36,アキュムレーター出力レジスター37等を備える。入力データレジスター31は、入力データキャッシュ部41から、コンボリューション演算に必要な入力データの一部(m個)をラッチする。重み付け係数レジスター32は、重み付け係数キャッシュ部42から、コンボリューション演算に必要な重み付け係数の一部(n個)をラッチする。並列演算器33は、m入力×n出力のコンボリューション演算を行なうことができるように構成される。
並列演算器33の構成例を、図7に示した。並列演算器33は、m入力×n出力(m,nは2以上の整数)の構成を持ちうるが、説明の都合上、ここでは、4入力×8出力の構成を示す。またこれに合わせて、以下の説明でも、4入力×8出力の並列演算器33を例にとって処理について説明する。並列演算器33は、4つの積算器MPX0~MPX3と8つの加算器SUM0~SUM7とを備える。積算器MPX0~MPX3は、スカラー量である入力データDp ~Dp+3 のうちの一つとベクトル量である4つの重み付け係数Wtq [0-7] ~Wtq+3 [0-7] の内の一つとの積算を並列に行なう。加算器SUM0~SUM7は、積算器MPX0~MPX3のそれぞれからの8つの出力を加算する。8つの加算器SUM0~SUM7は、それぞれ出力データRr ~Rr+7 を出力する。
図7に示した構成では、並列演算器33の入力・出力であるm×nは、コンボリューション演算を行なおうとする入力チャンネル数M、出力チャンネル数Nより小さい。例えば、入力8チャンネル、出力32チャンネルのコンボリューション演算を、入出力が4×8の並列演算器33では、一度に処理できない。そこで、コンボリューション演算を、複数のステージに時分割して行なう。このために、コンボリューション演算部30は、図6に示した各種アキュムレーターレジスターを有する。アキュムレーター入力レジスター34は、先行して行なった4つの入力データに対する積和演算の結果を内部メモリー43から読み出して、これに、後続する演算の結果を継ぎ足していくために準備する。この継ぎ足し演算を、以下累和演算という。この累和演算を行なうのが、アキュムレーターレジスター36である。アキュムレーターレジスター36による累和演算の結果は、アキュムレーター出力レジスター37に一旦ラッチされ、その後、内部メモリー43に保存されて、次の累和演算に備える。つまり、コンボリューション演算部30では、複数のステージに分けて進行するコンボリューション演算において、内部メモリー43に格納されている途中までの積和演算の結果を、アキュムレーター入力レジスター34を介して、アキュムレーターレジスター36に再度セットできる。また、アキュムレーターレジスター36での累和演算の途中結果あるいは最終結果を、アキュムレーター出力レジスター37を介して、内部メモリー43に保存する。
時分割して行なわれるコンボリューション演算について説明する。例えば、8個のチャンネル入力Ciから、32個のチャンネル出力Coを出力する場合の第1ステージから第4ステージまでのコンボリューション演算を行なう場合、図7に示した並列演算器33では、添え字p,q,rは、ステージの番号Sおよび演算の番号Tに対して、以下の関係をとる。
S T p~p+m-1 q~q+m-1 r~r+n-1
1 1 0~3 0~3 0~7
2 4~7 4~7 0~7
2 3 0~3 8~11 8~15
4 4~7 12~15 8~15
3 5 0~3 16~19 16~23
6 4~7 20~23 16~23
4 7 0~3 24~27 24~31
8 4~7 28~31 24~31
ステージ番号S、演算番号Tを用いれば、q,rは、以下の通りである。
q=(T-1)×m、r=(S-1)×n
S T p~p+m-1 q~q+m-1 r~r+n-1
1 1 0~3 0~3 0~7
2 4~7 4~7 0~7
2 3 0~3 8~11 8~15
4 4~7 12~15 8~15
3 5 0~3 16~19 16~23
6 4~7 20~23 16~23
4 7 0~3 24~27 24~31
8 4~7 28~31 24~31
ステージ番号S、演算番号Tを用いれば、q,rは、以下の通りである。
q=(T-1)×m、r=(S-1)×n
4つのステージ、8回の演算に分けて行なわれる積和演算の様子を、図8から図11に例示する。ここで演算は、並列演算器33による1回の積和演算を意味魅し、ステージは、入力チャンネル全体、ここでは0~7の入力チャンネルについての積和演算の完了を意味する。図8は、1回目の演算と2回目の演算の様子を示す。両方の演算が第1ステージの演算に相当する。1回目の演算では、図8の上段に示したように、8つの入力データD0~D7のうち、入力データD0~D3と、重み付け係数Wt0~Wt3との積和演算が行なわれ、出力データR0~R7が出力される。この出力データR0~R7は、アキュムレーターレジスター36にラッチされる。次に、処理は2回目の演算に移行し、図8の下段に示したように、8つの入力データD0~D7のうち、入力データD4~D7と、重み付け係数Wt4~Wt7との積和演算が行なわれ、出力データR0~R7が出力される。この出力データR0~R7と、アキュムレーターレジスター36にラッチされていた前回の出力データR0~R7とは、加算器35により加算される。加算された結果は、アキュムレーターレジスター36からアキュムレーター出力レジスター37を介して、内部メモリー43の作業領域の所定のアドレスに保存される。以上で、一つの特徴面についての第1ステージの処理が完了する。
その後、処理は、3回目の演算に移行し、図9の上段に示したように、8つの入力データD0~D7のうち、入力データD0~D3と、重み付け係数Wt8~Wt11との積和演算が行なわれ、出力データR8~R15が出力される。この出力データR8~R15は、アキュムレーターレジスター36にラッチされる。次に、処理は4回目の演算に移行し、図9の下段に示したように、8つの入力データD0~D7のうち、入力データD4~D7と、重み付け係数Wt12~Wt15との積和演算が行なわれ、出力データR8~R15が出力される。この出力データR8~R15と、アキュムレーターレジスター36にラッチされていた前回の出力データR8~R15とは、加算器35により加算される。加算された結果は、アキュムレーターレジスター36からアキュムレーター出力レジスター37を介して、内部メモリー43の作業領域の所定のアドレスに保存される。以上で、一つの特徴面についての第2ステージの処理が完了する。
同様の処理が、5回目の演算から8回目の演算まで繰り返され、図10の上下段,図11の上下段に示したように、入力データD0~D3,D4~D7と重み付け係数Wt16~19,Wt20~23との積和演算および累和演算、入力データD0~D3,D4~D7と重み付け係数Wt24~7,Wt28~31との積和演算および累和演算が行なわれ、出力データR16~R31が出力される。この出力データは、アキュムレーターレジスター36からアキュムレーター出力レジスター37を介して、内部メモリー43の作業領域の所定のアドレスに保存される。これらが、第3ステージおよび第4ステージの処理に相当する。
以上、第1~第4ステージの処理により、内部メモリー43には、最終的な出力データR0~R31が保存されるので、演算制御部50は、これを内部メモリー43の所定のアドレスから読み出し、外部記憶装置20に出力する。
以上、並列演算器33の動作について説明したが、コンボリューション演算は、ここでは、h=1としているので、Wo×Coを処理単位として、並列演算器33を用いて、以下のように行なわれる。チャンネル方向のコンボリューション演算(各図には図示の都合上「畳み込み」として表記した)は、複数のステージに分けて行なわれ、このチャンネル方向の処理が、幅方向にWo個のニューロンについて実施される。この様子を、図12A,図12Bに示す。図12Aの上段に示したように、1回目の演算と2回目の演算により、第1ステージでは、M個(0~7の8つ)の入力チャンネルCiから、N個(0~31の32個)の出力チャンネルCoを出力するコンボリューション演算の一部(1/4)が実行される。1回目の演算と2回目の演算とを、合わせて図12Aの下段のように示すものとする。図12Aにおいて、入力チャンネルを示す一つの矩形は、並列演算器33による処理が可能なmチャンネル分(ここではm=4、したがってp~p+3)を示し、出力チャンネルを示す矩形の一つは、並列演算器33により処理されたnチャンネル分(ここではn=8、したがってr~r+7)を示す。また、図中の矢印は、m入力×n出力の並列演算器33による演算を示している。これは、他の図12B、図13、図14においても同様である。
この図12A下段の表示と同様にして、第1~第4ステージの処理を、図12Bに示した。図示するように、コンボリューションフィルターのカーネルが1×1という条件、つまりWi=Woという条件の下で、4つのステージに分けてコンボリューション演算を行ない、第1~第4ステージを行なうことで、M個(0~7の8つ)の入力チャンネルCiから、N個(0~31の32個)の出力チャンネルCoを出力するコンボリューション演算が完了する。第1ステージでは、出力のチャンネルの1/4を計算する。第2ステージの処理が完了すれば、出力チャンネルの2/4の演算が、第3ステージの処理が完了すれば、出力チャンネルの3/4の演算が、そして第4ステージの処理が完了すれば、チャンネル方向についての全て演算が完了する。同様のコンボリューション演算が、幅方向にWo個のニューロンについて繰り返される。各ステージのコンボリューション演算は共通の重み付け係数を用いるので、各ステージではその1/4の重み付け係数を重み付け係数キャッシュ部42に格納できればコンボリューション演算を行なうことができる。したがって、外部記憶装置20からロードする重み付け係数の読み込みは、各ステージの処理において1回だけにでき、外部記憶装置20のメモリー帯域を節約できる。1つのステージの畳み込みに必要な重み係数のサイズは、M×nで与えられる。したがって、重み付け係数キャッシュ部42のサイズは、次のステージのための先読み領域含めて、少なくともM×nの2倍あればよい。重み付け係数の先読みについて、後で詳しく説明する。
ステージの分割数は、並列演算器33の大きさm×nと、特徴面の大きさM×Nとの関係により定まる。上述した例では、M/m=2、N/n=2なので、必要なステージ数は、2×2=4であった。同じ並列演算器33、つまり4入力×8出力の積和演算が可能な並列演算器33を用いて、16個の入力チャンネルCiから、32個の出力チャンネルCoを出力する場合には、M/m=8/4=2、N/n=32/8=4、であり、必要なステージ数は、2×4=8である。この場合の第1ステージから第8ステージまでのコンボリューション演算を、図13および図14に示した。この場合、図7に示した並列演算器33では、添え字p,q,rは、ステージの番号Sに対して、以下の関係をとる。
S p~p+m-1,p+m~p+2m-1 q~q+m-1,q+m~q+2m-1 r~r+n-1
1 0~3,4~7 0~3,4~7 0~7
2 8~11,12~15 8~11,12~15 0~7
3 0~3,4~7 16~19,20~23 8~15
4 8~11,12~15 24~27,28~31 8~15
5 0~3,4~7 0~3,4~7 16~23
6 8~11,12~15 8~11,12~15 16~23
7 0~3,4~7 16~19,20~23 24~31
8 8~11,12~15 24~27,28~31 24~31
S p~p+m-1,p+m~p+2m-1 q~q+m-1,q+m~q+2m-1 r~r+n-1
1 0~3,4~7 0~3,4~7 0~7
2 8~11,12~15 8~11,12~15 0~7
3 0~3,4~7 16~19,20~23 8~15
4 8~11,12~15 24~27,28~31 8~15
5 0~3,4~7 0~3,4~7 16~23
6 8~11,12~15 8~11,12~15 16~23
7 0~3,4~7 16~19,20~23 24~31
8 8~11,12~15 24~27,28~31 24~31
特徴面の入力チャンネルCiの数Mと出力チャンネルCoの数Nとが、並列演算器33が一度に処理できる入力チャンネル数m、出力チャンネル数nを上回っていれば、同様に、複数のステージに分けて、処理を行なえばよい。
以上、各ステージでのコンボリューション演算処理について説明したが、本実施形態では、こうした複数のステージに分割してコンボリューション演算を行なう際に、演算に用いられる入力データや重み付け係数を、外部記憶装置20から、コンボリューション演算部30がメモリー制御部22を用いることなくアクセスできる入力データキャッシュ部41や重み付け係数キャッシュ部42に読み込んで、コンボリューション演算を行なっている。このため、複数のステージに分割して、何度も入力データや重み付け係数をレジスターに読み込んでも、その都度、外部記憶装置20へのアクセスが生じる訳ではないので、並列演算器33を用いた処理を高速に実施することができる。しかも本実施形態では、これらの入力データや重み付け係数の入力データキャッシュ部41や重み付け係数キャッシュ部42への読み込みを、いわゆる先読みしており、コンボリューション演算部30が入力データや重み付け係数が必要になったときには、入力データキャッシュ部41や重み付け係数キャッシュ部42に準備されているように制御している。
こうした重み付け係数の先読みを行なう回路例を、図15に例示する。図示するように、重み付け係数キャッシュ部42は、コンボリューション演算部30からの重み付け係数を読み出すアドレス信号(リードAdと略記)を受けて、アドレスを変換するアドレス変換部121、演算制御部50からの各種アドレス信号を受けて重み付け係数の転送(ロード)を行なうロード制御部123、アドレス変換部121およびロード制御部123からのアドレス信号を調停する調停部125、重み付け係数を記憶する重み付け係数キャッシュメモリー127を備える。
アドレス変換部121は、コンボリューション演算部30から重み付け係数を読み出すためのアドレス信号であるリードAdを入力し、これを重み付け係数キャッシュメモリー127の読出アドレスRAdに変換する。この変換を行なう際に、アドレス変換部121は、重み付け係数キャッシュメモリー127のどの領域gへのアクセスACgであるかを示す示す信号AACと先読みのリクエスト信号RQTを出力する。ロード制御部123は、求められた領域の先読みが完了したことを示す結果信号RESをアドレス変換部121に出力する。
他方、ロード制御部123は、演算制御部50から、重み付け係数が外部記憶装置20に記憶されている先頭アドレス(先頭Ad)と、その終端のアドレス(終端Ad)および/または重み付け係数の大きさM×nとを、初期化の処理において受け取る。ロード制御部123はこれらのアドレスやサイズを、内部レジスターに保存する。ロード制御部123、アドレス変換部121からのアクセス信号AACと先読のリクエストRQTを受け取ると、図16および図17に示すように、外部記憶装置20の先頭アドレスから順に配列された各領域gに記憶された重み付け係数を読み出し、係数キャッシュメモリー127のブロックAまたはBに書き込む。ブロックA,Bの大きさは、上述した様に、少なくともM×nあればよい。両ブロック合わせて、少なくとも2×M×nあればれよい。各ブロックへの囲みの際、ロード制御部123は係数キャッシュメモリー127の保存先アドレスである転送アドレスAAdを出力する。調停部125は、ロード制御部123からの転送アドレスAAdと、アドレス変換部121からの読出アドレスRAdとが競合しないように、アドレスバスの競合を調停する。一般には、演算速度を高めるために、調停部125は、バスの競合が起きた場合には、読出アドレスRAdを優先する。図15を用いて説明した重み付け係数キャッシュ部42により、図16および図17に示した外部記憶装置20から重み付け係数キャッシュ部42の係数キャッシュメモリー127への重み付け係数の先読みが実現される。
この先読み処理について、図16および図17を用いて説明する。まず、重み付け係数がキャッシュ部に対してどのように先読みされるかを説明する。図16に示すように、重み付け係数キャッシュ部42は、内部がブロックAとブロックBに分かれているものとする。他方、外部記憶装置20には、コンボリューション演算部30が用いる重み付け係数が、先頭アドレスから順に、記憶されているものとする。重み付け係数は、第1ステージで用いられる重み付け係数が領域1に、第2ステージで用いられる重み付け係数が第2領域に、というように、先頭アドレスから順に配列されて、外部記憶装置20に記憶されている。
この重み付け係数キャッシュ部42は、各階層、つまり処理ノードPN毎のコンボリューション演算が行なわれる際、初期化の処理を行なう。初期化の処理は上述したように、その階層で用いる重み付け係数が保存されている先頭アドレス(先頭Ad)などを、演算制御部50が、重み付け係数キャッシュ部42のロード制御部123に出力し、ロード制御部123がこれらを内部のレジスーに保存する処理である。この初期化の処理がなされると、コンボリューション演算部30が直接アクセスできる重み付け係数キャッシュメモリー127のブロックAに、最初に用いられる重み付け係数、つまり外部記憶装置20の領域1に保存されている重み付け係数が、転送される(図示LD0)。続いて、コンボリューション演算部30が、重み付け係数キャッシュメモリー127の領域1に対して、第1ステージで用いる重み付け係数を読み出す最初のアクセスAC1を行なうと、このアクセスAC1のためのリードAdを受け取ったアドレス変換部121は、これに対応するアクセス信号AACとリクエストRQTとをロード制御部123に出力する。これをトリガーとして、ロード制御部123が、外部記憶装置20の領域2に記憶した重み付け係数を読み出し、これを重み付け係数キャッシュメモリー127のブロックBに転送LD1する。以下、この処理を繰り返し、領域gに対するアクセスACgが行なわれると、外部記憶装置20の領域g+1 からのデータ転送LDg が行なわれる。転送先の重み付け係数キャッシュメモリー127のブロックA,Bは、交互に転送先となることで、先に転送された重み付け係数が、上書きされて消去されることはない。
こうした処理が繰り返されて、図17に示すように、外部記憶装置20に用意された最後の領域(ここでは領域5)からの重み付け係数キャッシュメモリー127への転送LD4が行なわれ、次にコンボリューション演算部30からの重み付け係数キャッシュメモリー127の領域5へのアクセスAC5が行なわれると、変数gはリセットされ、外部記憶装置20の領域1の重み付け係数の、重み付け係数キャッシュメモリー127への転送LD0が行なわれる。以下は、同様に、重み付け係数キャッシュメモリー127の領域gへのコンボリューション演算部30からのアクセスACgがある度に、外部記憶装置20の領域g+1 から、重み付け係数の転送LDg が行なわれる。一つの処理ノードPNについてのコンボリューション演算が全て完了すると、次の階層の処理ノードPNのコンボリューション演算が行なうため、重み付け係数の先頭アドレスなどは、コンボリューション演算が行なわれる階層に合わせて初期化される。
次に、入力データの先読みについて説明する。図18は、入力データキャッシュ部41の構成を示すブロック図である。入力データキャッシュ部41は、重み付け係数キャッシュ部42と同様、アドレス変換部111、ロード制御部113、調停部115、入力データキャッシュメモリー117を備える。各部の入出力信号も、ロード制御部113を除いて、重み付け係数キャッシュ部42とほぼ同一なので、詳細な説明は省略する。ロード制御部113は、ロード制御部123が演算制御部50から、重み付け係数の大きさを示すM×nの信号を受け取っていたのに対して、コンボリューション演算を行なおうとする階層の処理ノードPNの高さHi、幅Wi、チャンネル数Ciを受け取っている点で相違する。また、入力データキャッシュメモリー117の内部のブロック数なども相違している。
この入力データキャッシュ部41の動作について、図19および図20を用いて説明する。図19は、入力データキャッシュ部41の内部に用意された入力データキャッシュメモリーの初期化の様子を示す説明図である。入力データキャッシュメモリーのブロックサイズは、処理単位に基づき階層毎に設定する。例えば、処理単位が、出力幅Wo×出力チャンネル数Coであれば、ブロックスサイズは入力する階層の処理ノードPNの幅Wi×入力チャンネル数Ciであり、ブロックの数Bnは、キャッシュメモリーに物理的に割り当てられたメモリーサイズをMsとすると、Bn=Ms/(Wi×Ci)として与えられる。
理解の便を図って、以下、このブロック数Bn=4として説明する。まず、入力データが入力データキャッシュメモリー117に対してどのように先読みされるかを説明する。図20に示すように、入力データキャッシュ部41の入力データキャッシュメモリー117は、内部がブロック1~4の4つのブロックに分かれているものとする。他方、外部記憶装置20には、コンボリューション演算部30が用いる入力データが、先頭アドレスから順に、記憶されているものとする。入力データは、第1ステージで用いられる入力データ領域1に、第2ステージで用いられる入力データが第2領域に、というように、先頭アドレスから順に配列されて、外部記憶装置20に記憶されている。
この入力データキャッシュ部41は、各階層、つまり処理ノードPN毎のコンボリューション演算が行なわれる際、初期化の処理を行なう。初期化の処理は上述したように、その階層で用いる入力データが保存されている先頭アドレス(先頭Ad)などを、演算制御部50が、入力データキャッシュ部41のロード制御部113に出力し、ロード制御部113がこれらを内部のレジスターに保存する処理である。この初期化の処理がなされると、コンボリューション演算部30が直接アクセスできる入力データキャッシュメモリー117のブロック1に、最初に用いられる入力データ、つまり外部記憶装置20の領域1に保存されている入力データが、転送される(図示LE0)。続いて、コンボリューション演算部30が、入力データキャッシュメモリー117の領域1に対して、第1ステージで用いる入力データを読み出す最初のアクセスAD1を行なうと、このアクセスAD1のためのリードAdを受け取ったアドレス変換部111は、これに対応するアクセス信号AACとリクエストRQTとをロード制御部113に出力する。これをトリガーとして、ロード制御部113が、外部記憶装置20の領域2に記憶した入力データを読み出し、これを入力データキャッシュメモリー117のブロック2に転送LE1する。図20では、この関係を、○矢印付きの破線で示している。以下、この処理を繰り返し、領域gに対するアクセスADgが行なわれると、外部記憶装置20の領域g+1 からのデータ転送LEg が行なわれる。転送先の入力データキャッシュメモリー117のブロック1~4は、この順に繰り返し転送先となることで、先に転送された入力データが、上書きされて消去されることはない。
こうした処理が繰り返されて、図20に示すように、外部記憶装置20に用意された最後の領域(ここでは領域P)からの入力データキャッシュメモリー117への転送LEpが行なわれ、次にコンボリューション演算部30からの入力データキャッシュメモリー117の領域PへのアクセスADpが行なわれると、入力データの読み込みは完了する。本実施形態での複数のステージへの分割の場合、一つの階層におけるコンボリューション演算が完了すれば、入力データが再度読み込まれることはない。一つの階層に対応した処理ノードPNについてのコンボリューション演算が全て完了すると、次の階層の処理ノードPNのコンボリューション演算を行なうため、入力データの先頭アドレスなどは、コンボリューション演算が行なわれる階層に合わせて初期化される。
以上説明した本実施形態の演算処理装置100によれば、コンボリューション演算部30は、コンボリューション演算を、複数のステージに分け、各ステージにおいて、入力データと重み付け係数とを、入力データキャッシュメモリー117や重み付け係数キャッシュメモリー127から読み出して、Nより少ない個数のニューロンによりコンボリューション演算の一部を行ない、第1~第4(または第8)ステージまでの演算結果を合計して、特徴毎の出力データとして、内部メモリー43に記憶する。したがって、入力データキャッシュ部41および重み付け係数キャッシュ部42を含む内部記憶部40の容量の増大を招くことなく、コンボリューション演算部30の稼働率を高めることができ、結果的に、コンボリューション演算の高速化を図ることができる。これは、以下の理由による。
外部記憶装置20は、通常のバス幅が32ビット程度であり、また汎用化のためにメモリー制御部22を介してアクセスするため、コンボリューション演算部30から見て、高速なアクセスができない。そこで、上記実施形態では、コンボリューション演算部30の稼働率を低下させない十分なデータを供給するために、内部記憶部40を設け、コンボリューション演算部30から見たデータアクセスの高速化を図っている。とはいえ、入力データキャッシュ部41や重み付けキャッシュ部42のメモリー容量が小さいと外部記憶装置20とのデータのやり取りが頻発し、結果的に、コンボリューション演算部30の要求に対するデータ供給が滞り、演算速度の低下を招来する。これを防ぐために、徒にキャッシュメモリーの容量を大きくすると、1チップ上の内部記憶部40の面積が大きくなり、演算用チップの製造の難易度が上がり、チップコストも増大する。本実施形態では、畳み込み演算処理を複数のステージに分割することによって、内部記憶部40のメモリーサイズの徒な増加を招くことなく並列演算器33の稼働値を高くすることができる。また、この結果、外部記憶装置20と間のデータのやり取りが減少して、演算処理装置100に要求される処理速度を実現するのに必要な外部記憶装置20のアクセス速度を低くでき、装置構成の省資源やコスト低減に寄与する。更に、低速でも電力消費の少ないメモリーを利用できる可能性が生じ、演算処理装置100全体の省電力化を図ることも可能になる。
具体的には、コンボリューション演算部30は、コンボリューション演算に用いる入力データおよび重み付け係数を、入力データキャッシュ部41の入力データキャッシュメモリー117や重み付け係数キャッシュ部42の重み付け係数キャッシュメモリー127から読み出して、コンボリューション演算を行なうことができる。このため、入力データや重み付け係数を用いるのに、いちいちメモリー制御部22や外部バスを介する必要がなく、コンボリューション演算を高速に実行できる。しかも、コンボリューション演算を複数のステージに分け、各ステージにおいて、コンボリューション演算の一部を行ない、複数のステージでの演算結果を合計して、特徴毎の出力データとして、内部メモリー43に記憶する。したがって、コンボリューション演算における積和演算器の入出力数を、特徴面大きさの数分の1程度に小さくでき、結果的に上述した様に、内部記憶部40の容量を小さくすることが可能となる。更に、コンボリューション演算を行なっている間に、入力データや重み付け係数をそれぞれのキャッシュに読み込むので、並列演算器33の稼働率を高めることもできる。
このように、コンボリューション演算を複数のステージに分けることで、並列演算器33の入出力を小さくでき、演算器の構成を簡略化できるだけでなく、演算時に必要となるキャッシュメモリーのサイズも小さくできる。並列演算器33の入力数mと入力チャンネルの数Mとが等しいと、係数キャッシュメモリー127のサイズは小さくできるが、内部メモリー43のメモリー帯域を占有してしまうので、入力チャンネルの数Mは、並列演算器33の入力数mより何倍か、例えば4倍程度大きくしておくことが望ましい。並列演算器33が、M×Nのコンボリューション演算を1サイクルで実行できるようにした場合、1サイクル毎に、アキュムレーター出力レジスター37の内容を、内部メモリー43に退避することになり、演算制御部50がコンボリューション演算の結果を取得しようとするアクセスと競合する。結果的に、並列演算器33を待たせることになれば、演算の効率が低下する。そこで、入力チャンネルの数Mに対して、並列演算器33の入力数mを、1/4程度にし、アキュムレーター出力レジスター37の内容を内部メモリー43に格納するインターバルを確保することが望ましい。また、そうすることで、複数のステージに分割することによる上記メリットと、内部メモリー43への競合を回避して効率よく出力データを取り出すというメリットとを両立できる。
上記実施形態では、ニューラルネットワークの階層は、第1処理ノードPN1~第3処理ノードPN3の3層としたが、4層以上でも差し支えない。また、並列演算器33としては、4入力×8出力のものを例示したが、入出力数は更に大きなものであってよい。ステージ数も、4や8に限らず、いくつであっても差し支えない。コンボリューション演算の処理単位は、本実施形態では、h×Wo×Coとし、更にh=1としたが、hは、Ho未満であれば、2以上であっても差し支えない。
上記実施形態では、入力データや重み付け係数の先読みは、演算制御部50のCPUによるプログラムによる実施したが、他の手法によってもよい。例えば、図21に示すようなDMA転送によってもよい。この場合、重み付け係数キャッシュ部42および入力データキャッシュ部41は、図示するように、ダイレクトメモリーアクセスコントローラ(DMAC)62と、リングバッファーメモリー63と、それらを制御するマイクロコントローラー61とを備える。図21では、マイクロコントローラー61は演算制御部50とは別に設け、演算制御部50から制御パラメーターやコマンドを受けて、DMAC62に先頭アドレスや終端アドレスなどを出力するものとしたが、マイクロコントローラー61と演算制御部50とを一体にしても差し支えない。
DMAC62は、コンボリューション演算に先立って、入力データや重み付け係数の先頭アドレスや終端アドレスなどの設定を受けると、ダイレクトメモリーアクセスにより、外部記憶装置20からメモリー制御部22を介して、入力データや重み付け係数を、リングバッファーメモリー63に転送する。コンボリューション演算部30は、リングバッファーメモリー63に対してリードアドレスを出力し、リングバッファーメモリー63によるデータ出力として、入力データや重み付け係数を読み込んで、上述したコンボリューション演算を行なう。この構成例では、リングバッファーメモリー63が内部記憶部に相当するが、リングバッファーメモリーとしているのは、入力データや重み付け係数が、先読みされ利用された後に更新されるので、その記憶容量を小さくして、リングバッファーメモリーとすることで、効率的にメモリーを利用できるからである。
B.他の態様:
(1)上記以外にも、複数の処理ノードが階層的に接続されたニューラルネットワークを用いて演算処理を行なう演算処理装置は、様々な態様で実施できる。例えば、演算処理装置は、ニューラルネットワークの各処理ノードにおけるN個(Nは2以上の整数)のニューロンからなるコンボリューション演算を、複数の処理単位に分けて行なうコンボリューション演算部と、コンボリューション演算部に外部バスを介して接続され、コンボリューション演算のための入力データ、コンボリューション演算のための重み付け係数、およびコンボリューション演算後の出力データを記憶する外部記憶装置と、コンボリューション演算部が外部バスを介することなく直接アクセスできる内部記憶部と、入力データと重み付け係数との少なくとも一方を、コンボリューション演算部によるコンボリューション演算の開始前に内部記憶部に準備し、コンボリューション演算部による演算結果を出力データとして内部記憶部から外部記憶装置に出力する演算制御部と、を備える構成を採用できる。
(1)上記以外にも、複数の処理ノードが階層的に接続されたニューラルネットワークを用いて演算処理を行なう演算処理装置は、様々な態様で実施できる。例えば、演算処理装置は、ニューラルネットワークの各処理ノードにおけるN個(Nは2以上の整数)のニューロンからなるコンボリューション演算を、複数の処理単位に分けて行なうコンボリューション演算部と、コンボリューション演算部に外部バスを介して接続され、コンボリューション演算のための入力データ、コンボリューション演算のための重み付け係数、およびコンボリューション演算後の出力データを記憶する外部記憶装置と、コンボリューション演算部が外部バスを介することなく直接アクセスできる内部記憶部と、入力データと重み付け係数との少なくとも一方を、コンボリューション演算部によるコンボリューション演算の開始前に内部記憶部に準備し、コンボリューション演算部による演算結果を出力データとして内部記憶部から外部記憶装置に出力する演算制御部と、を備える構成を採用できる。
この構成において、コンボリューション演算部は、処理単位毎に行なわれるコンボリューション演算を、複数のステージに分け、各ステージにおいて、入力データと重み付け係数との少なくとも一方を内部記憶部から読み出して、Nより少ない個数のニューロンによりコンボリューション演算の一部を行ない、複数のステージでの演算結果を合計して、処理単位毎の出力データとして、内部記憶部に記憶するものとしてよい。こうすれば、コンボリューション演算部は、コンボリューション演算に用いる入力データおよび重み付け係数の少なくとも一方を、外部バスを介すること無く直接アクセスできる内部記憶部から読み出して、コンボリューション演算を行なうことができ、コンボリューション演算を高速に実行できる。しかも、N個のニューロンからなるコンボリューション演算を複数のステージに分け、各ステージにおいてNより少ない個数のニューロンによりコンボリューション演算の一部を行ない、複数のステージでの演算結果を合計して、処理単位毎の出力データとして、内部記憶部に記憶する。したがって、コンボリューション演算において一度に積和演算を行なう演算器の入出力数を、コンボリューション演算に必要な全入出力数より小さくすることもできる。
ここで、内部記憶部は、入力データを記憶する第1記憶領域と、重み付け係数を記憶する第2記憶領域と、出力データを記憶する第3記憶領域とを有するものとしてもよい。この場合、入力データおよび重み付け係数の両方が、内部記憶部に記憶される。したがって、コンボリューション演算部の演算速度を、入力データおよび重み付け係数の一方が内部記憶部に記憶されている場合より、一層高速化できる。また、第1~第3記憶領域は、物理的に分離されていてもよいし、論理的に分離されていてもよい。
(2)こうした構成において、前記コンボリューション演算を行なう際のニューロンの数Nが、Ho,Woを、演算対象の2次元の各サイズ、Coをチャンネル数として、N=Ho×Wo×Co、であるとき、前記処理単位を、h×Wo×Co(但し、h<Hoの自然数)としてもよい。こうすれば、コンボリューション演算を複数のステージに分けやすい。
(3)こうした構成において、hは、内部記憶部の容量に応じて設定されるものとしてよい。こうすれば、コンボリューション演算部において利用できる内部記憶部の容量に適したステージに分割でき、内部記憶部を効率的に利用できる。
(4)こうした構成において、演算制御部は、複数のステージに分割して実行するコンボリューション演算のうち、先に実行されるステージでのコンボリューション演算の実行中に、後に実行されるステージでのコンボリューション演算に用いられる入力データの少なくとも一部を、外部記憶装置から第1記憶領域へロードする第1先読処理を行なうものとしてよい。こうすれば、コンボリューション演算に用いる際には、必要な入力データが、内部記憶部の第1記憶領域に用意されていることになり、内部記憶部の容量を増加することなく、コンボリューション演算の速度を高めることができる。
(5)こうした構成において、演算処理の対象のデータを入力する処理ノードにおけるコンボリューション演算を行なう際のニューロンの数Nが、Hi,Wiを、演算対象の2次元の各サイズ、Ciをチャンネル数として、N=Hi×Wi×Ci、であるとき、入力データを第1記憶領域へロードする転送単位を、Wi×Ciとしてよい。この場合も、コンボリューション演算を複数のステージに分けやすい。
(6)こうした構成において、演算制御部は、演算部が、先に実行されるステージのための入力データを、内部記憶部の第1記憶領域から、少なくとも1回読み取ったとき、第1先読処理を実行するものとしてよい。こうすれば、次のステージのコンボリューション演算で必要になる入力データを、簡易な構成で、内部記憶部の第1記憶領域に確実に用意できる。
(7)こうした構成において 演算制御部は、第1先読処理における入力データのロードが、コンボリューション演算を行なっている処理ノードで用いる入力データの終端に達したとき、第1先読処理を終了するものとしてよい。こうすれば、先読処理の制御が簡略化できる。
(8)こうした構成において、演算制御部は、複数のステージに分割して実行するコンボリューション演算のうち、先に実行されるステージでのコンボリューション演算の実行中に、後に実行されるステージでのコンボリューション演算に用いる重み付け係数の少なくとも一部を、外部記憶装置から第2領域へロードする第2先読処理を行なうものとしてよい。こうすれば、コンボリューション演算を行なう際には、必要な重み付け係数が、内部記憶部の第2記憶領域に用意されていることになり、内部記憶部の容量を増加することなく、コンボリューション演算の速度を高めることができる。
(9)こうした構成において、演算制御部は、演算部が、先に実行されるステージのための重み付け係数を、内部記憶部の第2記憶領域から、少なくとも1回読み取ったとき、第2先読処理を実行するものとしてよい。こうすれば、次のステージのコンボリューション演算で必要になる重み付け係数を、簡易な構成で、内部記憶部の第2記憶領域に確実に用意できる。
(10)こうした構成において、演算制御部が、複数のステージのうちの最後のステージについてのコンボリューション演算が実行中に、第2先読処理として、最初のステージについての重み付け係数のロードを行なうものとしてよい。こうすれば、重み付け係数が繰り返し用いられる場合に容易に対応できる。
(11)こうした構成において、複数の処理ノードが階層的に接続されたニューラルネットワークを用いて演算処理を行なう演算処理方法であって、ニューラルネットワークの各処理ノードにおけるN個のニューロンからなるコンボリューション演算の対象となる入力データおよびコンボリューション演算のための重み付け係数を外部記憶装置に記憶し、コンボリューション演算の際に、入力データおよび重み付け係数の少なくとも一方を、外部記憶装置から、コンボリューション演算を行なうプロセッサが外部記憶装置より高速にアクセス可能な内部記憶部にロードし、コンボリューション演算を複数の処理単位に分けて行ない、処理単位毎のコンボリューション演算を複数のステージに分け、各ステージにおいて、入力データおよび重み付け係数の少なくとも一方を内部記憶部から読み出して、Nより少ない個数のニューロンによりコンボリューション演算の一部を行ない、各ステージでの演算結果を合計して、特徴毎の演算結果として、内部記憶部に出力し、特徴毎の演算結果を、次の階層の処理ノードの入力データとして、内部記憶部から外部記憶装置を介して伝達する。
こうすれば、コンボリューション演算部は、コンボリューション演算に用いる入力データおよび重み付け係数の少なくとも一方を、外部バスを介すること無く直接アクセスできる内部記憶部から読み出して、コンボリューション演算を行なうことができ、コンボリューション演算を高速に実行できる。しかも、N個のニューロンからなるコンボリューション演算を複数のステージに分け、各ステージにおいてNより少ない個数のニューロンによりコンボリューション演算の一部を行ない、複数のステージでの演算結果を合計して、特徴毎の出力データとして、内部記憶部に記憶出力し、特徴毎の演算結果を、次の階層の処理ノードの入力データとして、内部記憶部から外部記憶装置を介して伝達できる。したがって、コンボリューション演算における積和演算器の入出力数を小さくすることもできる。
(12)上記各実施形態において、ハードウェアによって実現されていた構成の一部をソフトウェアに置き換えるようにしてもよい。ソフトウェアによって実現されていた構成の少なくとも一部は、ディスクリートな回路構成により実現することも可能である。また、本開示の機能の一部または全部がソフトウェアで実現される場合には、そのソフトウェア(コンピュータープログラム)は、コンピューター読み取り可能な非一時的な記録媒体に格納された形で提供することができる。「コンピューター読み取り可能な非一時的な記録媒体」とは、フレキシブルディスクやCD-ROMのような携帯型の記録媒体に限らず、各種のRAMやROM等のコンピューター内の内部記憶装置や、ハードディスク等のコンピューターに固定されている外部記憶装置も含んでいる。すなわち、「コンピューター読み取り可能な非一時的な記録媒体」とは、データパケットを一時的ではなく固定可能な任意の記録媒体を含む広い意味を有している。
本開示は、上述の実施形態に限られるものではなく、その趣旨を逸脱しない範囲において種々の構成で実現することができる。例えば、発明の概要の欄に記載した各形態中の技術的特徴に対応する実施形態中の技術的特徴は、上述の課題の一部又は全部を解決するために、あるいは、上述の効果の一部又は全部を達成するために、適宜、差し替えや、組み合わせを行うことが可能である。また、その技術的特徴が本明細書中に必須なものとして説明されていなければ、適宜、削除することが可能である。
11…入力装置、12…出力装置、20…外部記憶装置、22…メモリー制御部、30…コンボリューション演算部、31…入力データレジスター、32…重み付け係数レジスター、33…並列演算器、34…アキュムレーター入力レジスター、35…加算器、36…アキュムレーターレジスター、37…アキュムレーター出力レジスター、40…内部記憶部、41…入力データキャッシュ部、42…重み付け係数キャッシュ部、43…内部メモリー、50…演算制御部、61…マイクロコントローラー、63…リングバッファーメモリー、100…演算処理装置、111…アドレス変換部、113…ロード制御部、115…調停部、117…入力データキャッシュメモリー、121…アドレス変換部、123…ロード制御部、125…調停部、127…係数キャッシュメモリー、MPX…積算器、NLP…非線形変換処理部、SEL…係数選択部、SUM…加算器
Claims (12)
- 複数の処理ノードが階層的に接続されたニューラルネットワークを用いて演算処理を行なう演算処理装置であって、
前記ニューラルネットワークの各処理ノードにおけるN個(Nは2以上の整数)のニューロンからなるコンボリューション演算を、複数の処理単位に分けて行なうコンボリューション演算部と、
前記コンボリューション演算部に外部バスを介して接続され、前記コンボリューション演算のための入力データ、前記コンボリューション演算のための重み付け係数、および前記コンボリューション演算後の出力データを記憶する外部記憶装置と、
前記コンボリューション演算部が前記外部バスを介することなく直接アクセスできる内部記憶部と、
前記入力データと前記重み付け係数との少なくとも一方を、前記コンボリューション演算部による前記コンボリューション演算の開始前に前記内部記憶部に準備し、前記コンボリューション演算部による演算結果を前記出力データとして前記内部記憶部から前記外部記憶装置に出力する演算制御部と、
を備え、
前記コンボリューション演算部は、
前記処理単位毎に行なわれる前記コンボリューション演算を、複数のステージに分け、各ステージにおいて、前記入力データと前記重み付け係数との少なくとも一方を前記内部記憶部から読み出して、前記Nより少ない個数のニューロンにより前記コンボリューション演算の一部を行ない、
前記複数のステージでの演算結果を合計して、前記処理単位毎の出力データとして、前記内部記憶部に記憶する、
演算処理装置。 - 前記内部記憶部は、前記入力データを記憶する第1記憶領域と、前記重み付け係数を記憶する第2記憶領域と、前記出力データを記憶する第3記憶領域とを有する、請求項1記載の演算処理装置。
- 前記コンボリューション演算を行なう際のニューロンの数Nが、Ho,Woを、演算対象を処理した2次元形状の各サイズ、Coを出力チャンネル数として、
N=Ho×Wo×Co
であるとき、
前記処理単位が、h×Wo×Co(但し、h<Hoの自然数)である、
請求項2に記載の演算処理装置。 - 前記hが、前記内部記憶部の容量に応じて設定される、請求項3に記載の演算処理装置。
- 前記演算制御部は、前記複数のステージに分割して実行する前記コンボリューション演算のうち、先に実行されるステージでのコンボリューション演算の実行中に、後に実行されるステージでの前記コンボリューション演算に用いられる前記入力データの少なくとも一部を、前記外部記憶装置から前記内部記憶部の前記第1記憶領域にロードする第1先読処理を行なう、請求項2から請求項4のいずれか一項に記載の演算処理装置。
- 演算処理の対象のデータを入力する処理ノードにおける前記コンボリューション演算を行なう際のニューロンの数Nが、Hi,Wiを、演算対象の2次元の各サイズ、Ciを入力チャンネル数として、
N=Hi×Wi×Ci
であるとき、
前記入力データを前記内部記憶部の前記第1記憶領域にロードする転送単位が、Wi×Ciである、請求項5に記載の演算処理装置。 - 前記演算制御部は、前記コンボリューション演算部が、先に実行されるステージのための前記入力データを、前記内部記憶部の前記第1記憶領域から、少なくとも1回読み取ったとき、前記第1先読処理を実行する、請求項5または請求項6に記載の演算処理装置。
- 前記演算制御部は、前記第1先読処理における前記入力データの前記ロードが、前記コンボリューション演算を行なっている前記処理ノードで用いる入力データの終端に達したとき、前記第1先読処理を終了する、請求項7に記載の演算処理装置。
- 前記演算制御部は、前記複数のステージに分割して実行する前記コンボリューション演算のうち、先に実行されるステージでのコンボリューション演算の実行中に、後に実行されるステージでの前記コンボリューション演算に用いる前記重み付け係数の少なくとも一部を、前記外部記憶装置から前記第2記憶領域へロードする第2先読処理を行なう、請求項2から請求項8のいずれか一項に記載の演算処理装置。
- 前記演算制御部は、前記コンボリューション演算部が、先に実行されるステージのための前記重み付け係数を、前記内部記憶部の前記第2記憶領域から、少なくとも1回読み取ったとき、前記第2先読処理を実行する、請求項9に記載の演算処理装置。
- 前記演算制御部が、前記複数のステージのうちの最後のステージについての前記コンボリューション演算が実行中に、前記第2先読処理として、最初のステージについての重み付け係数のロードを行なう、請求項9または請求項10に記載の演算処理装置。
- 複数の処理ノードが階層的に接続されたニューラルネットワークを用いて演算処理を行なう演算処理方法であって、
前記ニューラルネットワークの各処理ノードにおけるN個のニューロンからなるコンボリューション演算の対象となる入力データおよび前記コンボリューション演算のための重み付け係数を外部記憶装置に記憶し、
前記コンボリューション演算の際に、前記入力データおよび前記重み付け係数の少なくとも一方を、前記外部記憶装置から、前記コンボリューション演算を行なうプロセッサが前記外部記憶装置より高速にアクセス可能な内部記憶部にロードし、
前記コンボリューション演算を複数の処理単位に分けて行ない、
前記処理単位毎のコンボリューション演算を複数のステージに分け、各ステージにおいて、前記入力データおよび前記重み付け係数の少なくとも一方を前記内部記憶部から読み出して、前記Nより少ない個数のニューロンにより前記コンボリューション演算の一部を行ない、
前記各ステージでの演算結果を合計して、前記処理単位毎の演算結果として、前記内部記憶部に出力し、
前記特徴毎の演算結果を、次の階層の処理ノードの入力データとして、前記内部記憶部から前記外部記憶装置を介して伝達する
演算処理方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2021054895A JP2022152208A (ja) | 2021-03-29 | 2021-03-29 | 畳み込み演算を行なう演算処理装置および演算処理方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2021054895A JP2022152208A (ja) | 2021-03-29 | 2021-03-29 | 畳み込み演算を行なう演算処理装置および演算処理方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2022152208A true JP2022152208A (ja) | 2022-10-12 |
Family
ID=83556042
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2021054895A Pending JP2022152208A (ja) | 2021-03-29 | 2021-03-29 | 畳み込み演算を行なう演算処理装置および演算処理方法 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2022152208A (ja) |
-
2021
- 2021-03-29 JP JP2021054895A patent/JP2022152208A/ja active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108304923B (zh) | 卷积运算处理方法及相关产品 | |
JP7329533B2 (ja) | 演算を加速するための方法および加速器装置 | |
CN112214726B (zh) | 运算加速器 | |
JP7277449B2 (ja) | 汎用化画像処理の画像前処理 | |
JP7358382B2 (ja) | 演算を加速するための加速器及びシステム | |
JP6987860B2 (ja) | ハードウェアにおけるカーネルストライドの実行 | |
CN112840356B (zh) | 运算加速器、处理方法及相关设备 | |
JP6700712B2 (ja) | 畳み込み演算装置 | |
JP5376920B2 (ja) | コンボリューション演算回路、階層的コンボリューション演算回路及び物体認識装置 | |
JP6936592B2 (ja) | 演算処理装置およびその制御方法 | |
CN101681449B (zh) | 计算处理装置及方法 | |
US9411726B2 (en) | Low power computation architecture | |
US9076254B2 (en) | Texture unit for general purpose computing | |
CN108573305B (zh) | 一种数据处理方法、设备及装置 | |
CN110766127B (zh) | 神经网络计算专用电路及其相关计算平台与实现方法 | |
CN111984189B (zh) | 神经网络计算装置和数据读取、数据存储方法及相关设备 | |
JP2021516382A (ja) | 機械学習のための画像変換 | |
EP3093757B1 (en) | Multi-dimensional sliding window operation for a vector processor | |
CN113222102B (zh) | 用于神经网络模型量化的优化方法 | |
CN110874628A (zh) | 人工神经网络及其中控制定点的方法 | |
EP3663938A1 (en) | Signal processing method and apparatus | |
CN110377874B (zh) | 卷积运算方法及*** | |
WO2020042771A9 (zh) | 图像识别处理方法和装置 | |
JP7410961B2 (ja) | 演算処理装置 | |
JP7308674B2 (ja) | 演算処理装置及び演算処理方法 |