本発明の実施形態を説明する前に、本発明に至った経緯について説明する。
まず、複数の処理層の畳み込みニューラルネットワーク(Convolutional Neural Network)を実現する従来の演算処理装置の一例の概要を図1および図2を参照して説明する。この演算処理装置は、記憶装置100と、記憶装置200と、記憶装置300と、処理層400と、処理層500と、を備えている。記憶装置100は、7組のアレイA1〜A7を有し、各アレイAi(i=1,・・・,7)は、11行×11列に配置されたメモリ素子を有している。アレイA1〜A7は、各アレイが配置された面内方向に交差する方向(深さ方向)に、7個配置されている。各アレイAi(i=1,・・・,7)の第j(j=1,・・・,11)行第k(k=1,・・・、11)列のメモリ素子をAi(j,k)と表す。このAi(j,k)はアレイAi(i=1,・・・,7)の第j行第k列のメモリ素子に格納される数値も表す。記憶装置200は、10組のアレイB1〜B10を有し、各アレイBi(i=1,・・・,10)は、8行×8列に配置されたメモリ素子を有している。各アレイBi(i=1,・・・,10)の第j(j=1,・・・8)行第k(k=1,・・・,8)列のメモリ素子をBi(j,k)と表す。このBi(j,k)は、アレイBi(i=1,・・・,10)の第j行第k列のメモリ素子に格納される数値も表す。記憶装置300は、10組のアレイC1〜C10を有し、各アレイCi(i=1,・・・,10)は、6行×6列に配置されたメモリ素子を有している。各アレイCi(i=1,・・・,10)の第j(j=1,・・・,6)行第k(k=1,・・・,6)列のメモリ素子をCi(j,k)と表す。このCi(j,k)は、アレイCi(i=1,・・・,10)の第j行第k列のメモリ素子に格納される数値も表す。またこの例では、処理層400は、例えば畳み込み処理を行う層であり、処理層500は、例えばプーリング(pooling)処理を行う層である。なお、本明細書において、以降では、積和演算処理を畳み込み処理と呼ぶ。畳み込み処理の対象の数値がどの次元方向に配置されているかは問わない。例えば第1方向を1次元、第1方向に第2方向を加えて2次元、更に第3方向(奥行き、深さ方向)を加えて3次元と呼ぶ。そして、畳み込み処理の対象が何次元に配置されているかも問わない。
処理層400は、例えば4行4列のアレイに配列されメモリ素子からなる図示しない第1乃至第10の核(kernel)を用いて、記憶装置100の4行4列のメモリ素子のメモリ素子同士に格納されている数値の積を演算し、これらの積の和を記憶装置200の対応するアレイの対応するメモリ素子に格納する。なお、第1乃至第10のそれぞれの核は、A1〜A7と同様に、各アレイが配置された面内方向に交差する方向(深さ方向)に、7個配置されている。すなわち第1乃至第10の核のそれぞれは、4行4列のアレイが7個存在する。上記第1乃至第10の核をそれぞれ用いた積和演算を行う。例えば、第1の核を用いた積和演算は以下のように行われる。第1の核における深さ1のメモリ素子に格納された数値と、斜線で示すメモリ素子A1(4,2)〜A1(7,5)との対応するメモリ素子同士に格納されている数値の積を演算し、これらの積の和を記憶装置200の対応するアレイの対応する斜線で示すメモリ素子B1(4,2)に格納する。例えば、第1の核における深さ1の第1行第1列のメモリ素子に格納された数値とメモリ素子A1(4,2)に格納された数値との積、第1の核の第2行第1列のメモリ素子に格納された数値とメモリ素子A1(5,2)に格納された数値との積、第1の核の第3行第1列のメモリ素子に格納された数値とメモリ素子A1(6,2)に格納された数値との積、第1の核の第4行第1列のメモリ素子に格納された数値とメモリ素子A1(7,2)に格納された数値との積とをそれぞれ演算する。同様に、第1の核の第2列のメモリ素子にそれぞれ格納された数値とアレイA1の第4行第3列〜第7行第3列の対応するメモリ素子に格納された数値との積を演算し、第1の核の第3列のメモリ素子にそれぞれ格納された数値とアレイA1の第4行第4列〜第7行第4列の対応するメモリ素子に格納された数値との積を演算し、第1の核の第1行第4列のメモリ素子にそれぞれ格納された数値とアレイA1の第4行第5列〜第7行第5列の対応するメモリ素子に格納された数値との積を演算する。その後、それらの積の和、すなわち積和を求める。このような積和演算を第1の核における深さi(i=1,・・・,7)のアレイと、アレイAiとの積和を演算し、各々のiに対する積和を求める。この様にして求めた積和の総和をアレイB1のメモリ素子に格納する。このような積和演算を第1乃至第10の核に対してそれぞれ行い、畳み込み処理が完了する。すなわち、第2の核を用いた畳み込み演算の結果をアレイB2に格納され、第i(i=3,・・・、10)の核を用いた畳み込み演算はアレイBiに格納される。
また、処理装層500は、例えば記憶装置200の3行3列のメモリ素子、例えば斜線で示すメモリ素子B1(5,4)〜B1(7,6)からなる部分アレイに格納されている数値から1つの代表値を演算し、この代表値を記憶装置300の対応するアレイの対応する斜線で示すメモリ素子C1(5,4)に格納する。代表値として、最大値または平均値等が用いられる。処理層500は、記憶装置200の各アレイBi(i=1,・・・,10)における任意の3行3列のメモリ素子に対して同様の演算を行い、演算結果を記憶装置300の対応するアレイCiの対応するメモリ素子に格納する。
このように、従来の演算処理装置においては、各処理層に対応してこの処理層の全ての出力を格納する記憶装置を備えている。そして、各処理層の処理を全て行い、その全ての出力を上記記憶装置に格納する。その後、上記記憶装置に格納されている数値を用いて次の処理層が処理を行っている。このため、処理層毎にその出力の全てを格納する容量を有する記憶装置が存在することが好ましい。それ故に大きな占有面積が必要となり、その結果として製造コストの増大を惹き起こしてしまうという問題点があった。
また、従来の演算処理装置においては、図2に示すように、演算処理装置の外部にある記憶装置すなわち外部記憶装置600に記憶されている数値を複数の処理に用いる場合、その度ごとに外部記憶装置600より読み出していた。図2では外部記憶装置600より読み出した数値に対して処理層650によって畳み込み処理を行う場合を例に示している。すなわち、外部記憶装置600に格納されている数値を読み出して畳み込み処理を施すことに依り得られた結果を、演算処理装置に内蔵されている記憶装置(内部記憶装置)700のアレイD1に格納し、再び外部記憶装置600に格納されている数値を読み出して畳み込み処理を施すことに依り得られた結果を内部記憶装置700の次の深さのアレイD2に格納し、再び外部記憶装置600に格納されている数値を読み出して畳み込み処理を施すことに依り得られた結果を内部記憶装置700の次の深さのアレイD3に格納し、という操作を必要な回数に渡って繰り返している。
このように、従来の演算処理装置は、外部記憶装置に格納されている数値を複数の処理に用いる場合すなわち複数回に渡って用いる場合にその度ごとに外部記憶装置より読み出していた。外部記憶装置に格納されている数値を読み出すことは、内部記憶装置に記憶されている数値を読み出すことと比べると読出し時間が長い。それ故に処理に長い時間を要することとなるために速い動作速度が得られず、例えば動体の認識等の速い動作速度の必要となる用途への適用が困難という問題点があった。それを回避するために多数の処理装置を設けて並列処理を行うことは可能ではあるが、それは大きな回路面積が必要となるために製造コストの増大を惹き起こしてしまうという問題点があった。
そこで、本発明者達は、鋭意研究に努めた結果、処理層の出力の一部があれば次の処理の少なくとも一部を開始することが可能な処理層においては、その出力を格納する記憶装置として、その出力の個数よりも少ない個数の記憶装置であれば良いと考えた。また、外部記憶装置の数値を用いて複数の処理を行う処理層においては、外部記憶装置の数値を一時的に格納する記憶装置を設け、処理を行う際にはその一時的に記憶する記憶装置から読出しを行うことにより、外部記憶装置の数値を読み出すことに伴う処理時間を削減して全体としての処理時間を短縮し、動作速度の高速化を図ることができると考えた。
以下に、図面を参照して本発明の実施形態を詳細に説明する。図面に示される数値の配列は説明の為に特定の並び方としているが、その並び方は本質ではなく他の並び方であってもよい。また本発明は以下の実施形態に限定されるものではなく、種々変更して用いることができる。
(第1実施形態)
第1実施形態による演算処理装置を図3および図4に示す。この実施形態の演算処理装置1は、図3に示すように、畳み込みニューラルネットワークを実現する装置であって、読み取り置10と、記憶装置20と、処理層30と、記憶装置40と、記憶装置50と、処理層60と、記憶装置65と、記憶装置70と、出力装置80と、を備えている。読み取り装置10は、外部記憶装置600からデータを読み出し、記憶装置20に格納する。
記憶装置20は、図4に示すように、7個のアレイA1〜A7を有し、各アレイAi(i=1,・・・,7)は、11行×11列に配置されたメモリ素子を有している。すなわち、記憶装置20は図4における面内方向の大きさが11×11で深さが7のメモリを有する。各アレイAi(i=1,・・・,7)の第j(j=1,・・・,11)行第k(k=1,・・・、11)列のメモリ素子に格納される数値をAi(j,k)と表す。
記憶装置40は、図4に示すように、畳み込み処理に用いられる第1乃至第10の核W1〜W10を記憶する。なお、図4においては、第1の核W1しか表示していない。第iの核Wi(i=1,・・・、10)はそれぞれ、第1乃至第7のアレイWi 1〜Wi 7を有し、各アレイWi j(i=1,・・・、10、j=1,・・・,7)は、4行×4列に配置されたメモリ素子を有している。すなわち、記憶装置40は図4における面内方向の大きさが4×4で深さが7のアレイWi j(i=1,・・・、10、j=1,・・・,7)を有する。各アレイWi j(i=1,・・・、10、j=1,・・・,7)は、4行×4列に配置されたメモリ素子を有している。すなわち、記憶装置40は図4における面内方向の大きさが4×4で深さが7のアレイを有する。各アレイWi j(i=1,・・・、10、j=1,・・・,7)の第m(m=1,・・・,4)行第n(n=1,・・・、4)列のメモリ素子に格納される数値をWi j(m,n)と表す。
記憶装置50は、図4に示すように、8行1列に配置されたメモリ素子M1〜M8を有している。
記憶装置65には、畳み込み処理またはプーリング処理に用いられる核が格納される。
記憶装置70は、図4に示すように、10個のアレイC1〜C10を有し、各アレイCi(i=1,・・・,10)は、6行×6列に配置されたメモリ素子を有している。すなわち、記憶装置70は図4における面内方向の大きさが6×6で深さが10のメモリを有する。各アレイCi(i=1,・・・,7)の第j(j=1,・・・,6)行第k(k=1,・・・、6)列のメモリ素子に格納される数値をCi(j,k)と表す。
処理層30は、記憶装置40の核と、記憶装置20のアレイとの畳み込み処理を行い、処理結果を記憶装置50に格納する。処理層60は、記憶装置50に格納されたデータに基づいてプーリング処理を行い、処理結果を記憶装置70に格納する。
(第1畳み込み処理)
次に、処理層30の第1畳み込み処理について説明する。
記憶装置20のアレイA1〜A7の第1列〜第4列に対する記憶装置40に格納された4行4列で深さが7の第1の核W1の第1のアレイW1 1を用いた畳み込み処理について図5A乃至図5Qを参照して説明する。
記憶装置20のアレイA1の第1列に対して、記憶装置40のアレイW1 1の第1列を用いた畳み込み処理について図5A乃至図5Hを参照して説明する。
図5Aに示す様に、記憶装置20のアレイA1の第1列のメモリ素子に格納されている斜線で示す数値A1(1,1)〜A1(4,1)のそれぞれと、記憶装置40のアレイW1 1の第1行第1列のメモリ素子に格納されている斜線で示す数値W1 1(1,1)との積を演算し、演算結果を記憶装置50のメモリ素子M1〜M4に格納する。すなわち、W1 1(1,1)とA1(1,1)との積を演算し、この積を記憶装置50のメモリ素子M1に格納する。続いてW1 1(1,1)とA1(2,1)との積を演算し、この積を記憶装置50のメモリ素子M2に格納する。次にW1 1(1,1)とA1(3,1)との積を演算し、この積を記憶装置50のメモリ素子M3に格納する。更にW1 1(1,1)とA1(4,1)との積を演算し、この積を記憶装置50のメモリ素子M4に格納する。これらの演算処理は並列に実行することも可能であり、それらを並列に実行すれば処理時間の短縮が図られるという利点が得られる。
次に図5Bに示す様に、記憶装置20のアレイA1の第1列のメモリ素子に格納されている斜線で示す数値A1(2,1)〜A1(5,1)のそれぞれと、記憶装置40のアレイW1 1の第2行第1列のメモリ素子に格納されている斜線で示す数値W1 1(2,1)との積を演算し、これらの積と記憶装置50のメモリ素子M1〜M4に格納されている数値との和をそれぞれ演算し、これらの和をメモリ素子M1〜M4に改めて格納する。すなわち、W1 1(2,1)とA1(2,1)との積を演算し、この積と記憶装置50のメモリ素子M1に格納されている数値との和を演算し、この和をメモリ素子M1に改めて格納する。続いてW1 1(2,1)とA1(3,1)との積を演算し、この積と記憶装置50のメモリ素子M2に格納されている数値との和を演算し、この和をメモリ素子M2に改めて格納する。次にW1 1(2,1)とA1(4,1)との積を演算し、この積と記憶装置50のメモリ素子M3に格納されている数値との和を演算し、この和をメモリ素子M3に改めて格納する。更にW1 1(2,1)とA1(5,1)との積を演算し、この積と記憶装置50のメモリ素子M4に格納されている数値との和を演算し、この和をメモリ素子M4に改めて格納する。これらの演算処理は並列に実行することも可能であり、それらを並列に実行すれば処理時間の短縮が図られるという利点が得られる。
次に図5Cに示す様に、記憶装置20のアレイA1の第1列のメモリ素子に格納されている斜線で示す数値A1(3,1)〜A1(6,1)のそれぞれと、記憶装置40のアレイW1 1の第3行第1列のメモリ素子に格納されている斜線で示す数値W1 1(3,1)との積を演算し、これらの積と記憶装置50のメモリ素子M1〜M4に格納されている数値との和をそれぞれ演算し、これらの和をメモリ素子M1〜M4に改めて格納する。すなわち、W1 1(3,1)とA1(3,1)との積を演算し、この積と記憶装置50のメモリ素子M1に格納されている数値との和を演算し、この和をメモリ素子M1に改めて格納する。続いてW1 1(3,1)とA1(4,1)との積を演算し、この積と記憶装置50のメモリ素子M2に格納されている数値との和を演算し、この和をメモリ素子M2に改めて格納する。次にW1 1(3,1)とA1(5,1)との積を演算し、この積と記憶装置50のメモリ素子M3に格納されている数値との和を演算し、この和をメモリ素子M3に改めて格納する。更にW1 1(3,1)とA1(6,1)との積を演算し、この積と記憶装置50のメモリ素子M4に格納されている数値との和を演算し、この和をメモリ素子M4に改めて格納する。これらの演算処理は並列に実行することも可能であり、それらを並列に実行すれば処理時間の短縮が図られるという利点が得られる。
次に図5Dに示す様に、記憶装置20のアレイA1の第1列のメモリ素子に格納されている斜線で示す数値A1(4,1)〜A1(7,1)のそれぞれと、記憶装置40のアレイW1 1の第4行第1列のメモリ素子に格納されている斜線で示す数値W1 1(4,1)との積を演算し、これらの積と記憶装置50のメモリ素子M1〜M4に格納されている数値との和をそれぞれ演算し、これらの和をメモリ素子M1〜M4に改めて格納する。すなわち、W1 1(4,1)とA1(4,1)との積を演算し、この積と記憶装置50のメモリ素子M1に格納されている数値との和を演算し、この和をメモリ素子M1に改めて格納する。続いてW1 1(4,1)とA1(5,1)との積を演算し、この積と記憶装置50のメモリ素子M2に格納されている数値との和を演算し、この和をメモリ素子M2に改めて格納する。次にW1 1(4,1)とA1(6,1)との積を演算し、この積と記憶装置50のメモリ素子M3に格納されている数値との和を演算し、この和をメモリ素子M3に改めて格納する。更にW1 1(4,1)とA1(7,1)との積を演算し、この積と記憶装置50のメモリ素子M4に格納されている数値との和を演算し、この和をメモリ素子M4に改めて格納する。これらの演算処理は並列に実行することも可能であり、それらを並列に実行すれば処理時間の短縮が図られるという利点が得られる。
次に図5Eに示す様に、記憶装置20のアレイA1の第1列のメモリ素子に格納されている斜線で示す数値A1(5,1)〜A1(8,1)のそれぞれと、記憶装置40のアレイW1 1の第1行第1列のメモリ素子に格納されている斜線で示す数値W1 1(1,1)との積を演算し、演算結果を記憶装置50のメモリ素子M5〜M8に格納する。すなわち、W1 1(1,1)とA1(5,1)との積を演算し、この積を記憶装置50のメモリ素子M5に格納する。続いてW1 1(1,1)とA1(6,1)との積を演算し、この積を記憶装置50のメモリ素子M6に格納する。次にW1 1(1,1)とA1(7,1)との積を演算し、この積を記憶装置50のメモリ素子M7に格納する。更にW1 1(1,1)とA1(8,1)との積を演算し、この積を記憶装置50のメモリ素子M8に格納する。これらの演算処理は並列に実行することも可能であり、それらを並列に実行すれば処理時間の短縮が図られるという利点が得られる。
次に図5Fに示す様に、記憶装置20のアレイA1の第1列のメモリ素子に格納されている斜線で示す数値A1(6,1)〜A1(9,1)のそれぞれと、記憶装置40のアレイW1 1の第2行第1列のメモリ素子に格納されている斜線で示す数値W1 1(2,1)との積を演算し、これらの積と記憶装置50のメモリ素子M5〜M8に格納されている数値との和をそれぞれ演算し、これらの和をメモリ素子M5〜M8に改めて格納する。すなわち、W1 1(2,1)とA1(6,1)との積を演算し、この積と記憶装置50のメモリ素子M5に格納されている数値との和を演算し、この和をメモリ素子M5に改めて格納する。続いてW1 1(2,1)とA1(7,1)との積を演算し、この積と記憶装置50のメモリ素子M6に格納されている数値との和を演算し、この和をメモリ素子M6に改めて格納する。次にW1 1(2,1)とA1(8,1)との積を演算し、この積と記憶装置50のメモリ素子M7に格納されている数値との和を演算し、この和をメモリ素子M7に改めて格納する。更にW1 1(2,1)とA1(9,1)との積を演算し、この積と記憶装置50のメモリ素子M8に格納されている数値との和を演算し、この和をメモリ素子M8に改めて格納する。これらの演算処理は並列に実行することも可能であり、それらを並列に実行すれば処理時間の短縮が図られるという利点が得られる。
次に図5Gに示す様に、記憶装置20のアレイA1の第1列のメモリ素子に格納されている斜線で示す数値A1(7,1)〜A1(10,1)のそれぞれと、記憶装置40のアレイW1 1の第3行第1列のメモリ素子に格納されている斜線で示す数値W1 1(3,1)との積を演算し、これらの積と記憶装置50のメモリ素子M5〜M8に格納されている数値との和をそれぞれ演算し、これらの和をメモリ素子M5〜M8に改めて格納する。すなわち、W1 1(3,1)とA1(7,1)との積を演算し、この積と記憶装置50のメモリ素子M5に格納されている数値との和を演算し、この和をメモリ素子M5に改めて格納する。続いてW1 1(3,1)とA1(8,1)との積を演算し、この積と記憶装置50のメモリ素子M6に格納されている数値との和を演算し、この和をメモリ素子M6に改めて格納する。次にW1 1(3,1)とA1(9,1)との積を演算し、この積と記憶装置50のメモリ素子M7に格納されている数値との和を演算し、この和をメモリ素子M7に改めて格納する。更にW1 1(3,1)とA1(10,1)との積を演算し、この積と記憶装置50のメモリ素子M8に格納されている数値との和を演算し、この和をメモリ素子M8に改めて格納する。これらの演算処理は並列に実行することも可能であり、それらを並列に実行すれば処理時間の短縮が図られるという利点が得られる。
次に図5Hに示す様に、記憶装置20のアレイA1の第1列のメモリ素子に格納されている斜線で示す数値A1(8,1)〜A1(11,1)のそれぞれと、記憶装置40のアレイW1 1の第4行第1列のメモリ素子に格納されている斜線で示す数値W1 1(4,1)との積を演算し、これらの積と記憶装置50のメモリ素子M5〜M8に格納されている数値との和をそれぞれ演算し、これらの和をメモリ素子M5〜M8に改めて格納する。すなわち、W1 1(4,1)とA1(8,1)との積を演算し、この積と記憶装置50のメモリ素子M5に格納されている数値との和を演算し、この和をメモリ素子M5に改めて格納する。続いてW1 1(4,1)とA1(9,1)との積を演算し、この積と記憶装置50のメモリ素子M6に格納されている数値との和を演算し、この和をメモリ素子M6に改めて格納する。次にW1 1(4,1)とA1(10,1)との積を演算し、この積と記憶装置50のメモリ素子M7に格納されている数値との和を演算し、この和をメモリ素子M7に改めて格納する。更にW1 1(4,1)とA1(11,1)との積を演算し、この積と記憶装置50のメモリ素子M8に格納されている数値との和を演算し、この和をメモリ素子M8に改めて格納する。これらの演算処理は並列に実行することも可能であり、それらを並列に実行すれば処理時間の短縮が図られるという利点が得られる。
次に、記憶装置20のアレイA1の第2列に対して、記憶装置40のアレイW1 1の第2列を用いた畳み込み処理について図5I乃至図5Pを参照して説明する。
まず、図5Iに示す様に、記憶装置20のアレイA1の第2列のメモリ素子に格納されている斜線で示す数値A1(1,2)〜A1(4,2)のそれぞれと、記憶装置40のアレイW1 1の第1行第2列のメモリ素子に格納されている斜線で示す数値W1 1(1,2)との積をそれぞれ演算し、これらの積と、記憶装置50のメモリ素子M1〜M4に格納されている数値との和をそれぞれ演算し、これらの和をそれぞれメモリ素子M1〜M4に格納する。すなわち、W1 1(1,2)とA1(1,2)との積を演算し、この積と記憶装置50のメモリ素子M1に格納されている数値との和を演算し、この和をメモリ素子M1に格納する。続いてW1 1(1,2)とA1(2,2)との積を演算し、この積と記憶装置50のメモリ素子M2に格納されている数値との和を演算し、この和をメモリ素子M2に格納する。次にW1 1(1,2)とA1(3,2)との積を演算し、この積と記憶装置50のメモリ素子M3に格納されている数値との和を演算し、この和をメモリ素子M3に格納する。更にW1 1(1,2)とA1(4,2)との積を演算し、この積と記憶装置50のメモリ素子M4に格納されている数値との和を演算し、この和をメモリ素子M4に格納する。これらの演算処理は並列に実行することも可能であり、それらを並列に実行すれば処理時間の短縮が図られるという利点が得られる。
次に、図5Jに示す様に、記憶装置20のアレイA1の第2列のメモリ素子に格納されている斜線で示す数値A1(2,2)〜A1(5,2)のそれぞれと、記憶装置40のアレイW1 1の第2行第2列のメモリ素子に格納されている斜線で示す数値W1 1(2,2)との積をそれぞれ演算し、これらの積と、記憶装置50のメモリ素子M1〜M4に格納されている数値との和をそれぞれ演算し、これらの和をそれぞれメモリ素子M1〜M4に格納する。すなわち、W1 1(2,2)とA1(2,2)との積を演算し、この積と記憶装置50のメモリ素子M1に格納されている数値との和を演算し、この和をメモリ素子M1に格納する。続いてW1 1(2,2)とA1(3,2)との積を演算し、この積と記憶装置50のメモリ素子M2に格納されている数値との和を演算し、この和をメモリ素子M2に格納する。次にW1 1(2,2)とA1(4,2)との積を演算し、この積と記憶装置50のメモリ素子M3に格納されている数値との和を演算し、この和をメモリ素子M3に格納する。更にW1 1(2,2)とA1(5,2)との積を演算し、この積と記憶装置50のメモリ素子M4に格納されている数値との和を演算し、この和をメモリ素子M4に格納する。これらの演算処理は並列に実行することも可能であり、それらを並列に実行すれば処理時間の短縮が図られるという利点が得られる。
次に、図5Kに示す様に、記憶装置20のアレイA1の第2列のメモリ素子に格納されている斜線で示す数値A1(3,2)〜A1(6,2)のそれぞれと、記憶装置40のアレイW1 1の第3行第2列のメモリ素子に格納されている斜線で示す数値W1 1(3,2)との積をそれぞれ演算し、これらの積と、記憶装置50のメモリ素子M1〜M4に格納されている数値との和をそれぞれ演算し、これらの和をそれぞれメモリ素子M1〜M4に格納する。すなわち、W1 1(3,2)とA1(3,2)との積を演算し、この積と記憶装置50のメモリ素子M1に格納されている数値との和を演算し、この和をメモリ素子M1に格納する。続いてW1 1(3,2)とA1(4,2)との積を演算し、この積と記憶装置50のメモリ素子M2に格納されている数値との和を演算し、この和をメモリ素子M2に格納する。次にW1 1(3,2)とA1(5,2)との積を演算し、この積と記憶装置50のメモリ素子M3に格納されている数値との和を演算し、この和をメモリ素子M3に格納する。更にW1 1(3,2)とA1(6,2)との積を演算し、この積と記憶装置50のメモリ素子M4に格納されている数値との和を演算し、この和をメモリ素子M4に格納する。これらの演算処理は並列に実行することも可能であり、それらを並列に実行すれば処理時間の短縮が図られるという利点が得られる。
次に、図5Lに示す様に、記憶装置20のアレイA1の第2列のメモリ素子に格納されている斜線で示す数値A1(4,2)〜A1(7,2)のそれぞれと、記憶装置40のアレイW1 1の第4行第2列のメモリ素子に格納されている斜線で示す数値W1 1(4,2)との積をそれぞれ演算し、これらの積と、記憶装置50のメモリ素子M1〜M4に格納されている数値との和をそれぞれ演算し、これらの和をそれぞれメモリ素子M1〜M4に格納する。すなわち、W1 1(4,2)とA1(4,2)との積を演算し、この積と記憶装置50のメモリ素子M1に格納されている数値との和を演算し、この和をメモリ素子M1に格納する。続いてW1 1(4,2)とA1(5,2)との積を演算し、この積と記憶装置50のメモリ素子M2に格納されている数値との和を演算し、この和をメモリ素子M2に格納する。次にW1 1(4,2)とA1(6,2)との積を演算し、この積と記憶装置50のメモリ素子M3に格納されている数値との和を演算し、この和をメモリ素子M3に格納する。更にW1 1(4,2)とA1(7,2)との積を演算し、この積と記憶装置50のメモリ素子M4に格納されている数値との和を演算し、この和をメモリ素子M4に格納する。これらの演算処理は並列に実行することも可能であり、それらを並列に実行すれば処理時間の短縮が図られるという利点が得られる。
次に、図5Mに示す様に、記憶装置20のアレイA1の第2列のメモリ素子に格納されている斜線で示す数値A1(5,2)〜A1(8,2)のそれぞれと、記憶装置40のアレイW1 1の第1行第2列のメモリ素子に格納されている斜線で示す数値W1 1(1,2)との積をそれぞれ演算し、これらの積と、記憶装置50のメモリ素子M5〜M8に格納されている数値との和をそれぞれ演算し、これらの和をそれぞれメモリ素子M5〜M8に格納する。すなわち、W1 1(1,2)とA1(5,2)との積を演算し、この積と記憶装置50のメモリ素子M5に格納されている数値との和を演算し、この和をメモリ素子M5に格納する。続いてW1 1(1,2)とA1(6,2)との積を演算し、この積と記憶装置50のメモリ素子M6に格納されている数値との和を演算し、この和をメモリ素子M6に格納する。次にW1 1(1,2)とA1(7,2)との積を演算し、この積と記憶装置50のメモリ素子M7に格納されている数値との和を演算し、この和をメモリ素子M7に格納する。更にW1 1(1,2)とA1(8,2)との積を演算し、この積と記憶装置50のメモリ素子M8に格納されている数値との和を演算し、この和をメモリ素子M8に格納する。これらの演算処理は並列に実行することも可能であり、それらを並列に実行すれば処理時間の短縮が図られるという利点が得られる。
次に、図5Nに示す様に、記憶装置20のアレイA1の第2列のメモリ素子に格納されている斜線で示す数値A1(6,2)〜A1(9,2)のそれぞれと、記憶装置40のアレイW1 1の第2行第2列のメモリ素子に格納されている斜線で示す数値W1 1(2,2)との積をそれぞれ演算し、これらの積と、記憶装置50のメモリ素子M5〜M8に格納されている数値との和をそれぞれ演算し、これらの和をそれぞれメモリ素子M5〜M8に格納する。すなわち、W1 1(2,2)とA1(6,2)との積を演算し、この積と記憶装置50のメモリ素子M5に格納されている数値との和を演算し、この和をメモリ素子M5に格納する。続いてW1 1(2,2)とA1(7,2)との積を演算し、この積と記憶装置50のメモリ素子M6に格納されている数値との和を演算し、この和をメモリ素子M6に格納する。次にW1 1(2,2)とA1(8,2)との積を演算し、この積と記憶装置50のメモリ素子M7に格納されている数値との和を演算し、この和をメモリ素子M7に格納する。更にW1 1(2,2)とA1(9,2)との積を演算し、この積と記憶装置50のメモリ素子M8に格納されている数値との和を演算し、この和をメモリ素子M8に格納する。これらの演算処理は並列に実行することも可能であり、それらを並列に実行すれば処理時間の短縮が図られるという利点が得られる。
次に、図5Oに示す様に、記憶装置20のアレイA1の第2列のメモリ素子に格納されている斜線で示す数値A1(7,2)〜A1(10,2)のそれぞれと、記憶装置40のアレイW1 1の第3行第2列のメモリ素子に格納されている斜線で示す数値W1 1(3,2)との積をそれぞれ演算し、これらの積と、記憶装置50のメモリ素子M5〜M8に格納されている数値との和をそれぞれ演算し、これらの和をそれぞれメモリ素子M5〜M8に格納する。すなわち、W1 1(3,2)とA1(7,2)との積を演算し、この積と記憶装置50のメモリ素子M5に格納されている数値との和を演算し、この和をメモリ素子M5に格納する。続いてW1 1(3,2)とA1(8,2)との積を演算し、この積と記憶装置50のメモリ素子M6に格納されている数値との和を演算し、この和をメモリ素子M6に格納する。次にW1 1(3,2)とA1(9,2)との積を演算し、この積と記憶装置50のメモリ素子M7に格納されている数値との和を演算し、この和をメモリ素子M7に格納する。更にW1 1(3,2)とA1(10,2)との積を演算し、この積と記憶装置50のメモリ素子M8に格納されている数値との和を演算し、この和をメモリ素子M8に格納する。これらの演算処理は並列に実行することも可能であり、それらを並列に実行すれば処理時間の短縮が図られるという利点が得られる。
次に、図5Pに示す様に、記憶装置20のアレイA1の第2列のメモリ素子に格納されている斜線で示す数値A1(8,2)〜A1(11,2)のそれぞれと、記憶装置40のアレイW1 1の第4行第2列のメモリ素子に格納されている斜線で示す数値W1 1(4,2)との積をそれぞれ演算し、これらの積と、記憶装置50のメモリ素子M5〜M8に格納されている数値との和をそれぞれ演算し、これらの和をそれぞれメモリ素子M5〜M8に格納する。すなわち、W1 1(4,2)とA1(8,2)との積を演算し、この積と記憶装置50のメモリ素子M5に格納されている数値との和を演算し、この和をメモリ素子M5に格納する。続いてW1 1(4,2)とA1(9,2)との積を演算し、この積と記憶装置50のメモリ素子M6に格納されている数値との和を演算し、この和をメモリ素子M6に格納する。次にW1 1(4,2)とA1(10,2)との積を演算し、この積と記憶装置50のメモリ素子M7に格納されている数値との和を演算し、この和をメモリ素子M7に格納する。更にW1 1(4,2)とA1(11,2)との積を演算し、この積と記憶装置50のメモリ素子M8に格納されている数値との和を演算し、この和をメモリ素子M8に格納する。これらの演算処理は並列に実行することも可能であり、それらを並列に実行すれば処理時間の短縮が図られるという利点が得られる。
次に、記憶装置20のアレイA1の第3列に対して記憶装置40のアレイW1 1の第3列を用いた畳み込み処理を、図5I乃至図5Pで説明した場合と同様に行う。この場合、例えば、記憶装置20のアレイA1の第3列のメモリ素子に格納されている数値A1(1,3)〜A1(4,3)のそれぞれと、記憶装置40のアレイW1の第1行第3列のメモリ素子に格納されている数値W1 1(1,3)との積をそれぞれ演算し、これらの積と、記憶装置50のメモリ素子M1〜M4に格納されている数値との和をそれぞれ演算し、これらの和をそれぞれメモリ素子M1〜M4に格納する。また、例えば、記憶装置20のアレイA1の第3列のメモリ素子に格納されている数値A1(5,3)〜A1(8,3)のそれぞれと、記憶装置40のアレイW1 1の第1行第3列のメモリ素子に格納されている数値W1 1(1,3)との積をそれぞれ演算し、これらの積と、記憶装置50のメモリ素子M5〜M8に格納されている数値との和をそれぞれ演算し、これらの和をそれぞれメモリ素子M5〜M8に格納する。
次に、記憶装置20のアレイA1の第4列に対して記憶装置40のアレイW1 1の第4列を用いた畳み込み処理を、図5I乃至図5Pで説明した場合と同様に行う。この場合、例えば、記憶装置20のアレイA1の第4列のメモリ素子に格納されている数値A1(1,4)〜A1(4,4)のそれぞれと、記憶装置40のアレイW1 1の第1行第4列のメモリ素子に格納されている数値W1 1(1,4)との積をそれぞれ演算し、これらの積と、記憶装置50のメモリ素子M1〜M4に格納されている数値との和をそれぞれ演算し、これらの和をそれぞれメモリ素子M1〜M4に格納する。また、例えば、記憶装置20のアレイA1の第4列のメモリ素子に格納されている数値A1(5,4)〜A1(8,4)のそれぞれと、記憶装置40のアレイW1 1の第1行第4列のメモリ素子に格納されている数値W1 1(1,4)との積をそれぞれ演算し、これらの積と、記憶装置50のメモリ素子M5〜M8に格納されている数値との和をそれぞれ演算し、これらの和をそれぞれメモリ素子M5〜M8に格納する。
以上説明した処理は、記憶装置20のアレイA1の第1列〜第4列に対して記憶装置40のアレイW1 1を用いた畳み込み処理である。
次に、記憶装置20のアレイA2の第1列〜第4列に対する記憶装置40のアレイW1 2を用いた畳み込み処理について説明する。
まず、記憶装置20のアレイA2の第1列に対して記憶装置40のアレイW1 2の第1列を用いた畳み込み処理を、図5A乃至図5Hで説明した場合と同様に行う。この場合、例えば、図5Qに示すように、記憶装置20のアレイA2の第1列のメモリ素子に格納されている数値A1(1,1)〜A1(4,1)のそれぞれと、記憶装置40のアレイW1 2の第1行第1列のメモリ素子に格納されている数値W1 2(1,1)との積をそれぞれ演算し、これらの積と、記憶装置50のメモリ素子M1〜M4に格納されている数値との和をそれぞれ演算し、これらの和をそれぞれメモリ素子M1〜M4に格納する。また、例えば、記憶装置20のアレイA2の第1列のメモリ素子に格納されている数値A2(5,1)〜A2(8,1)のそれぞれと、記憶装置40のアレイW2の第1行第1列のメモリ素子に格納されている数値W1 2(1,1)との積をそれぞれ演算し、これらの積と、記憶装置50のメモリ素子M5〜M8に格納されている数値との和をそれぞれ演算し、これらの和をそれぞれメモリ素子M5〜M8に格納する。
次に、記憶装置20のアレイA2の第2列に対して記憶装置40のアレイW1 2の第2列を用いた畳み込み処理を、図5I乃至図5Pで説明した場合と同様に行う。その後、記憶装置20のアレイA2の第3列に対して記憶装置40のアレイW1 2の第3列を用いた畳み込み処理を、図5I乃至図5Pで説明した場合と同様に行う。続いて、記憶装置20のアレイA2の第4列に対して記憶装置40のアレイW1 2の第4列を用いた畳み込み処理を、図5I乃至図5Pで説明した場合と同様に行う。
次に、記憶装置20のアレイA3の第1列〜第4列に対する記憶装置40のアレイW1 3を用いた畳み込み処理も、記憶装置20のアレイA2の第1列〜第4列に対する記憶装置40のアレイW2を用いた畳み込み処理と同様に行う。
次に、記憶装置20のアレイA4の第1列〜第4列に対する記憶装置40のアレイW1 4を用いた畳み込み処理も、記憶装置20のアレイA2の第1列〜第4列に対する記憶装置40のアレイW1 2を用いた畳み込み処理と同様に行う。
次に、記憶装置20のアレイA5の第1列〜第4列に対する記憶装置40のアレイW1 5を用いた畳み込み処理も、記憶装置20のアレイA2の第1列〜第4列に対する記憶装置40のアレイW1 2を用いた畳み込み処理と同様に行う。
次に、記憶装置20のアレイA6の第1列〜第4列に対する記憶装置40のアレイW1 6を用いた畳み込み処理も、記憶装置20のアレイA2の第1列〜第4列に対する記憶装置40のアレイW1 2を用いた畳み込み処理と同様に行う。
次に、記憶装置20のアレイA7の第1列〜第4列に対する記憶装置40のアレイW1 7を用いた畳み込み処理も、記憶装置20のアレイA2の第1列〜第4列に対する記憶装置40のアレイW1 2を用いた畳み込み処理と同様に行う。
続いて、処理層30によって、メモリ素子Mk(1≦k≦8)に格納されている数値の各々にバイアスB1を加え、例えばReLU関数(Rectified Linear Unit)等の発火関数処理を必要に応じて施し、改めてメモリ素子Mkに格納する。
この様にして、アレイA1〜A7の第1列〜第4列に対する記憶装置40に格納された4行4列で深さが7の第1の核W1を用いた第1畳み込み処理が完了する。
(第1プーリング処理)
次に、処理層60の第1プーリング処理について図6A乃至図6Fを参照して説明する。この処理層60は、例えばプーリング処理を行う。なお、以下のプーリング処理は、図1で説明した場合と同様に、3行3列のアレイからなる核を用いて行う。この核は記憶装置65に格納されている。
まず、図6Aに示す様に、記憶装置50の斜線で示すメモリ素子M1、メモリ素子M2、メモリ素子M3に格納されている数値のなから最大値を代表値とし、この代表値を記憶装置70のアレイC1のメモリ素子C1(1,1)に格納する。なお、プーリング処理の代表値として平均値を用いる場合には、メモリ素子M1、メモリ素子M2、メモリ素子M3に格納されている数値の和を演算し、この和をアレイC1の斜線で示すメモリ素子C1(1,1)に格納する。
続いて、図6Bに示す様に、斜線で示すメモリ素子M2、メモリ素子M3、メモリ素子M4に格納されている数値から代表値を演算し、この代表値をアレイC1の斜線で示すメモリ素子C1(2,1)に格納する。
図6Cに示す様に、斜線で示すメモリ素子M3、メモリ素子M4、メモリ素子M5に格納されている数値から代表値を演算し、この代表値をアレイC1の斜線で示すメモリ素子C1(3,1)に格納する。
図6Dに示す様に、斜線で示すメモリ素子M4、メモリ素子M5、メモリ素子M6に格納されている数値から代表値を演算し、この代表値をアレイC1の斜線で示すメモリ素子C1(4,1)に格納する。
図6Eに示す様に、斜線で示すメモリ素子M5、メモリ素子M6、メモリ素子M7に格納されている数値から代表値を演算し、この代表値をアレイC1の斜線で示すメモリ素子C1(5,1)に格納する。
図6Fに示す様に、斜線で示すメモリ素子M6、メモリ素子M7、メモリ素子M8に格納されている数値から代表値を演算し、この代表値をアレイC1の斜線で示すメモリ素子C1(6,1)に格納する。
以上により、記憶装置20のアレイA1〜A7の第1列〜第4列に対する記憶装置40に格納された4行4列で深さが7の核Wを用いた畳み込み処理が行われたデータに関する第1プーリング処理が完了する。
(第2畳み込み処理)
次に、記憶装置20のアレイA1〜A7の第2列〜第5列に対する記憶装置40に格納された4行4列で深さが7の第1の核W1を用いた第2畳み込み処理を、図5Aで説明した処理から図6Aで説明した第1プーリング処理の直前までを第1畳み込み処理と同様に行う。
この第2畳み込み処理は、処理層30によって行われる。例えば、まず図7に示すように、、記憶装置20のアレイA1の第2列のメモリ素子に格納されている斜線で示す数値A1(1,2)〜A1(4,2)のそれぞれと、記憶装置40のアレイW1 1の第1行第1列のメモリ素子に格納されている斜線で示す数値W1 1(1,1)との積を演算し、演算結果を記憶装置50のメモリ素子M1〜M4に格納する。すなわち、W1 1(1,1)とA1(1,2)との積を演算し、この積を記憶装置50のメモリ素子M1に格納する。続いてW1 1(1,1)とA1(2,2)との積を演算し、この積を記憶装置50のメモリ素子M2に格納する。次にW1 1(1,1)とA1(3,2)との積を演算し、この積を記憶装置50のメモリ素子M3に格納する。更にW1 1(1,1)とA1(4,2)との積を演算し、この積を記憶装置50のメモリ素子M4に格納する。これらの演算処理は並列に実行することも可能であり、それらを並列に実行すれば処理時間の短縮が図られるという利点が得られる。
以下、図5Bで説明した処理から図6Aで説明したプーリング処理の直前の処理までと同様の処理を行い、記憶装置20のアレイA1〜A7の第2列〜第5列に対する記憶装置40に格納された4行4列で深さが7の第1の核W1を用いた畳み込み処理を完了する。この畳み込み処理が完了したデータは、記憶装置50のメモリ素子M1〜M8に格納される。
続いて、処理層30によって、メモリ素子Mk(1≦k≦8)に格納されている数値の各々にバイアスB1を加え、例えばReLU関数(Rectified Linear Unit)等の発火関数処理を必要に応じて施し、改めてメモリ素子Mkに格納する。
(第2プーリング処理)
次に、記憶装置20のアレイA1〜A7の第2列〜第5列に関する第2畳み込み処理が完了し、記憶装置50のメモリ素子M1〜M8に格納されたデータについて第2プーリング処理を行う。この第2プーリング処理は、処理層60によって行われる。
まず、図8Aに示すように、記憶装置50のメモリ素子M1に格納されている数値と、メモリ素子M2に格納されている数値と、メモリ素子M3に格納されている数値とから代表値を演算し、この代表値を記憶装置70のアレイC1の斜線で示すメモリ素子C1(1,2)に格納する。その後、メモリ素子M1に格納されている数値と、メモリ素子M2に格納されている数値と、メモリ素子M3に格納されている数値と、記憶装置70のアレイC1のメモリ素子C1(1,1)に格納されている数値とから代表値を演算し、この代表値をアレイC1のメモリ素子C1(1,1)に改めて格納する。なお、この場合、代表値として平均値を用いる場合は、メモリ素子M1に格納されている数値と、メモリ素子M2に格納されている数値と、メモリ素子M3に格納されている数値と、メモリ素子C1(1,1)に格納されている数値との和を演算し、この和をメモリ素子C1(1,1)に改めて格納する。
その後、図8Bに示すように、記憶装置50のメモリ素子M2に格納されている数値と、メモリ素子M3に格納されている数値と、メモリ素子M4に格納されている数値とから代表値を演算し、この代表値を記憶装置70のアレイC1の斜線で示すメモリ素子C1(2,2)に格納する。その後、メモリ素子M2に格納されている数値と、メモリ素子M3に格納されている数値と、メモリ素子M4に格納されている数値と、アレイC1のメモリ素子C1(2,1)に格納されている数値とから代表値を演算し、この代表値をアレイC1のメモリ素子C1(2,1)に改めて格納する。
続いて、図8Cに示すように、記憶装置50のメモリ素子M3に格納されている数値と、メモリ素子M4に格納されている数値と、メモリ素子M5に格納されている数値とから代表値を演算し、この代表値を記憶装置70のアレイC1の斜線で示すメモリ素子C1(3,2)に格納する。その後、メモリ素子M3に格納されている数値と、メモリ素子M4に格納されている数値と、メモリ素子M5に格納されている数値と、アレイC1のメモリ素子C1(3,1)に格納されている数値とから代表値を演算し、この代表値をアレイC1のメモリ素子C1(3,1)に改めて格納する。
次に、図8Dに示すように、記憶装置50のメモリ素子M4に格納されている数値と、メモリ素子M5に格納されている数値と、メモリ素子M6に格納されている数値とから代表値を演算し、この代表値を記憶装置70のアレイC1の斜線で示すメモリ素子C1(4,2)に格納する。その後、メモリ素子M4に格納されている数値と、メモリ素子M5に格納されている数値と、メモリ素子M6に格納されている数値と、アレイC1のメモリ素子C1(4,1)に格納されている数値とから代表値を演算し、この代表値をアレイC1のメモリ素子C1(4,1)に改めて格納する。
その後、図8Eに示すように、記憶装置50のメモリ素子M5に格納されている数値と、メモリ素子M6に格納されている数値と、メモリ素子M7に格納されている数値とから代表値を演算し、この代表値を記憶装置70のアレイC1の斜線で示すメモリ素子C1(5,2)に格納する。その後、メモリ素子M5に格納されている数値と、メモリ素子M6に格納されている数値と、メモリ素子M7に格納されている数値と、アレイC1のメモリ素子C1(5,1)に格納された数値とから代表値を演算し、この代表値をアレイC1のメモリ素子C1(5,1)に改めて格納する。
続いて、図8Fに示すように、記憶装置50のメモリ素子M6に格納されている数値と、メモリ素子M7に格納されている数値と、メモリ素子M8に格納されている数値とから代表値を演算し、この代表値を記憶装置70のアレイC1の斜線で示すメモリ素子C1(6,2)に格納する。その後、メモリ素子M6に格納されている数値と、メモリ素子M7に格納されている数値と、メモリ素子M8に格納されている数値と、アレイC1のメモリ素子C1(6,1)に格納された数値とから代表値を演算し、この代表値をアレイC1のメモリ素子C1(6,1)に改めて格納する。
(第3畳み込み処理)
次に、処理層30によって第3畳み込み処理を行う。この第3畳み込み処理は、記憶装置20のアレイA1〜A7の第3列〜第6列に対して記憶装置40に格納された4行4列で深さが7の第1の核W1を用いて、第2畳み込み処理と同様に行う。この第3畳み込み処理は、処理層30によって行われる。この第3畳み込み処理が完了したデータは、記憶装置50のメモリ素子M1〜M8に格納される。
続いて、処理層30によって、メモリ素子Mk(1≦k≦8)に格納されている数値の各々にバイアスB1を加え、例えばReLU関数(Rectified Linear Unit)等の発火関数処理を必要に応じて施し、改めてメモリ素子Mkに格納する。
(第3プーリング処理)
次に、処理層60による第3プーリング処理について図9A乃至図9Fを参照して説明する。この第3プーリング処理は、第3畳み込み処理が行われて記憶装置50のメモリ素子M1〜M8に格納されされたデータについて行う。
まず、図9Aに示す様に、記憶装置50のメモリ素子M1に格納されている数値と、メモリ素子M2に格納されている数値と、メモリ素子M3に格納されている数値とから代表値を演算し、この代表値を記憶装置70のアレイC1の斜線で示すメモリ素子C1(1,3)に格納する。続いて、メモリ素子M1に格納されている数値と、メモリ素子M2に格納されている数値と、メモリ素子M3に格納されている数値と、記憶装置70のアレイC1のメモリ素子C1(1,2)に格納されている数値とから代表値を演算し、この代表値をアレイC1のメモリ素子C1(1,2)に改めて格納する。その後、メモリ素子M1に格納されている数値と、メモリ素子M2に格納されている数値と、メモリ素子M3に格納されている数値と、記憶装置70のアレイC1のメモリ素子C1(1,1)に格納されている数値とから代表値を演算し、この代表値をアレイC1のメモリ素子C1(1,1)に改めて格納する。これにより、メモリ素子C1(1,1)には、第1畳み込み処理、第2畳み込み処理、および第3畳み込み処理のそれぞれによって、メモリ素子M1、メモリ素子M2、およびメモリ素子M3に格納された数値から演算された代表値のうちから求められた代表値が格納される。すなわち、第1畳み込み処理によってメモリ素子M1、メモリ素子M2、およびメモリ素子M3に格納された数値から演算された第1代表値と、第2畳み込み処理によってメモリ素子M1、メモリ素子M2、およびメモリ素子M3に格納された数値から演算された第2代表値と、第3畳み込み処理によってメモリ素子M1、メモリ素子M2、およびメモリ素子M3に格納された数値から演算された第3代表値と、から演算された代表値がメモリ素子C1(1,1)に格納される。また、メモリ素子C1(1,2)には、第2畳み込み処理、および第3畳み込み処理のそれぞれによって、メモリ素子M1、メモリ素子M2、およびメモリ素子M3に格納された数値から演算された代表値のうちから求められた代表値が格納される。すなわち、第2畳み込み処理によってメモリ素子M1、メモリ素子M2、およびメモリ素子M3に格納された数値から演算された第2代表値と、第3畳み込み処理によってメモリ素子M1、メモリ素子M2、およびメモリ素子M3に格納された数値から演算された第3代表値と、から演算された代表値がメモリ素子C1(1,2)に格納される。
続いて、図9Bに示す様に、記憶装置50のメモリ素子M2に格納されている数値と、メモリ素子M3に格納されている数値と、メモリ素子M4に格納されている数値とから代表値を演算し、この代表値を記憶装置70のアレイC1の斜線で示すメモリ素子C1(2,3)に格納する。続いて、メモリ素子M2に格納されている数値と、メモリ素子M3に格納されている数値と、メモリ素子M4に格納されている数値と、記憶装置70のアレイC1のメモリ素子C1(2,2)に格納されている数値とから代表値を演算し、この代表値をアレイC1のメモリ素子C1(2,2)に改めて格納する。その後、メモリ素子M2に格納されている数値と、メモリ素子M3に格納されている数値と、メモリ素子M4に格納されている数値と、記憶装置70のアレイC1のメモリ素子C1(2,1)に格納されている数値とから代表値を演算し、この代表値をアレイC1のメモリ素子C1(2,1)に改めて格納する。
その後、図9Cに示す様に、記憶装置50のメモリ素子M3に格納されている数値と、メモリ素子M4に格納されている数値と、メモリ素子M5に格納されている数値とから代表値を演算し、この代表値を記憶装置70のアレイC1の斜線で示すメモリ素子C1(3,3)に格納する。続いて、メモリ素子M3に格納されている数値と、メモリ素子M4に格納されている数値と、メモリ素子M5に格納されている数値と、記憶装置70のアレイC1のメモリ素子C1(3,2)に格納されている数値とから代表値を演算し、この代表値をアレイC1のメモリ素子C1(3,2)に改めて格納する。その後、メモリ素子M3に格納されている数値と、メモリ素子M4に格納されている数値と、メモリ素子M5に格納されている数値と、記憶装置70のアレイC1のメモリ素子C1(3,1)に格納されている数値とから代表値を演算し、この代表値をアレイC1のメモリ素子C1(3,1)に改めて格納する。
次に、図9Dに示す様に、記憶装置50のメモリ素子M4に格納されている数値と、メモリ素子M5に格納されている数値と、メモリ素子M6に格納されている数値とから代表値を演算し、この代表値を記憶装置70のアレイC1の斜線で示すメモリ素子C1(4,3)に格納する。続いて、メモリ素子M4に格納されている数値と、メモリ素子M5に格納されている数値と、メモリ素子M6に格納されている数値と、記憶装置70のアレイC1のメモリ素子C1(4,2)に格納されている数値とから代表値を演算し、この代表値をアレイC1のメモリ素子C1(4,2)に改めて格納する。その後、メモリ素子M4に格納されている数値と、メモリ素子M5に格納されている数値と、メモリ素子M6に格納されている数値と、記憶装置70のアレイC1のメモリ素子C1(4,1)に格納されている数値とから代表値を演算し、この代表値をアレイC1のメモリ素子C1(4,1)に改めて格納する。
続いて、図9Eに示す様に、記憶装置50のメモリ素子M5に格納されている数値と、メモリ素子M6に格納されている数値と、メモリ素子M7に格納されている数値とから代表値を演算し、この代表値を記憶装置70のアレイC1の斜線で示すメモリ素子C1(5,3)に格納する。続いて、メモリ素子M5に格納されている数値と、メモリ素子M6に格納されている数値と、メモリ素子M7に格納されている数値と、記憶装置70のアレイC1のメモリ素子C1(5,2)に格納されている数値とから代表値を演算し、この代表値をアレイC1のメモリ素子C1(5,2)に改めて格納する。その後、メモリ素子M5に格納されている数値と、メモリ素子M6に格納されている数値と、メモリ素子M7に格納されている数値と、記憶装置70のアレイC1のメモリ素子C1(5,1)に格納されている数値とから代表値を演算し、この代表値をアレイC1のメモリ素子C1(5,1)に改めて格納する。
その後、図9Fに示す様に、記憶装置50のメモリ素子M6に格納されている数値と、メモリ素子M7に格納されている数値と、メモリ素子M8に格納されている数値とから代表値を演算し、この代表値を記憶装置70のアレイC1の斜線で示すメモリ素子C1(6,3)に格納する。続いて、メモリ素子M6に格納されている数値と、メモリ素子M7に格納されている数値と、メモリ素子M8に格納されている数値と、記憶装置70のアレイC1のメモリ素子C1(6,2)に格納されている数値とから代表値を演算し、この代表値をアレイC1のメモリ素子C1(6,2)に改めて格納する。その後、メモリ素子M6に格納されている数値と、メモリ素子M7に格納されている数値と、メモリ素子M8に格納されている数値と、記憶装置70のアレイC1のメモリ素子C1(6,1)に格納されている数値とから代表値を演算し、この代表値をアレイC1のメモリ素子C1(6,1)に改めて格納する。
以上により、第3プーリング処理が完了する。このとき、記憶装置70のアレイC1の第3列には、第3畳み込み処理によって得られ記憶装置50に格納されたデータから演算された第3代表値が格納される。また、記憶装置70のアレイC1の第2列には、第2畳み込み処理によって得られたデータから演算された第2代表値と、上記第3代表値とから演算された新たな第2代表値が格納される。この新たな第2代表値は、同一の行同士における第2代表値と第3代表値とから演算される。更に、記憶装置70のアレイC1の第1列には、第1畳み込み処理によって得られたデータから演算された第1代表値と、第2畳み込み処理によって得られたデータから演算された第2代表値と、上記第3代表値とから演算された新たな第1代表値が格納される。
(第4畳み込み処理)
次に、処理層30によって第4畳み込み処理を行う。この第4畳み込み処理は、記憶装置20のアレイA1〜A7の第4列〜第7列に対して記憶装置40に格納された4行4列で深さが7の第1の核W1を用いて、第3畳み込み処理と同様に行う。この第4畳み込み処理は、処理層30によって行われる。この第4畳み込み処理が完了したデータは、記憶装置50のメモリ素子M1〜M8に格納される。
続いて、処理層30によって、メモリ素子Mk(1≦k≦8)に格納されている数値の各々にバイアスB1を加え、例えばReLU関数(Rectified Linear Unit)等の発火関数処理を必要に応じて施し、改めてメモリ素子Mkに格納する。
(第4プーリング処理)
次に、処理層60によって第4プーリング処理を行う。この第4プーリング処理は、前述した第3プーリング処理と同様に行う。第4プーリング処理によって、記憶装置70のアレイC1の第4列には、第4畳み込み処理によって得られ記憶装置50に格納されたデータから演算された第4代表値が格納される。また、記憶装置70のアレイC1の第3列には、第3畳み込み処理によって得られたデータから演算された第3代表値と、上記第4代表値とから演算された新たな第3代表値が格納される。更に、記憶装置70のアレイC1の第2列には、第2畳み込み処理によって得られたデータから演算された第2代表値と、第2畳み込み処理によって得られたデータから演算された第3代表値と、上記第4代表値とから演算された新たな第2代表値が格納される。
(第5畳み込み処理)
次に、処理層30によって第5畳み込み処理を行う。この第5畳み込み処理は、記憶装置20のアレイA1〜A7の第5列〜第8列に対して記憶装置40に格納された4行4列で深さが7の第1の核W1を用いて、第4畳み込み処理と同様に行う。この第5畳み込み処理は、処理層30によって行われる。この第5畳み込み処理が完了したデータは、記憶装置50のメモリ素子M1〜M8に格納される。
続いて、処理層30によって、メモリ素子Mk(1≦k≦8)に格納されている数値の各々にバイアスB1を加え、例えばReLU関数(Rectified Linear Unit)等の発火関数処理を必要に応じて施し、改めてメモリ素子Mkに格納する。
(第5プーリング処理)
次に、処理層60によって第5プーリング処理を行う。この第5プーリング処理は、前述した第4プーリング処理と同様に行う。第5プーリング処理によって、記憶装置70のアレイC1の第5列には、第5畳み込み処理によって得られ記憶装置50に格納されたデータから演算された第5代表値が格納される。また、記憶装置70のアレイC1の第4列には、第4畳み込み処理によって得られたデータから演算された第4代表値と、上記第5代表値とから演算された新たな第4代表値が格納される。更に、記憶装置70のアレイC1の第3列には、第3畳み込み処理によって得られたデータから演算された第3代表値と、第4畳み込み処理によって得られたデータから演算された第4代表値と、上記第5代表値とから演算された新たな第3代表値が格納される。
(第6畳み込み処理)
次に、処理層30によって第6畳み込み処理を行う。この第6畳み込み処理は、記憶装置20のアレイA1〜A7の第6列〜第9列に対して記憶装置40に格納された4行4列で深さが7の第1の核W1を用いて、第5畳み込み処理と同様に行う。この第6畳み込み処理は、処理層30によって行われる。この第6畳み込み処理が完了したデータは、記憶装置50のメモリ素子M1〜M8に格納される。
続いて、処理層30によって、メモリ素子Mk(1≦k≦8)に格納されている数値の各々にバイアスB1を加え、例えばReLU関数(Rectified Linear Unit)等の発火関数処理を必要に応じて施し、改めてメモリ素子Mkに格納する。
(第6プーリング処理)
次に、処理層60によって第6プーリング処理を行う。第6プーリング処理によって、記憶装置70のアレイC1の第6列には、第6畳み込み処理によって得られ記憶装置50に格納されたデータから演算された第6代表値が格納される。また、記憶装置70のアレイC1の第5列には、第5畳み込み処理によって得られたデータから演算された第5代表値と、上記第6代表値とから演算された新たな第5代表値が格納される。更に、記憶装置70のアレイC1の第4列には、第4畳み込み処理によって得られたデータから演算された第4代表値と、第5畳み込み処理によって得られたデータから演算された第5代表値と、上記第6代表値とから演算された新たな第6代表値が格納される。この状態を図10に示す。なお、図10において、アレイC1の斜線で示す第1列〜第4列は、全てのプーリング処理が完了した状態を示し、第5列および第6列は、プーリング処理が途中まで行われた状態となっている。
(第7畳み込み処理)
次に、処理層30によって第7畳み込み処理を行う。この第7畳み込み処理は、記憶装置20のアレイA1〜A7の第7列〜第10列に対して記憶装置40に格納された4行4列で深さが7の第1の核W1を用いて、第6畳み込み処理と同様に行う。この第7畳み込み処理は、処理層30によって行われる。この第7畳み込み処理が完了したデータは、記憶装置50のメモリ素子M1〜M8に格納される。
続いて、処理層30によって、メモリ素子Mk(1≦k≦8)に格納されている数値の各々にバイアスB1を加え、例えばReLU関数(Rectified Linear Unit)等の発火関数処理を必要に応じて施し、改めてメモリ素子Mkに格納する。
(第7プーリング処理)
次に、処理層60によって第7プーリング処理を行う。記憶装置70のアレイC1の容量を節約するために、この第7プーリング処理は、第6プーリング処理とは若干異なっている。第7プーリング処理によって、記憶装置70のアレイC1の第5列には、第7畳み込み処理によって得られた第7代表値と、第5畳み込み処理によって得られたデータから演算された第5代表値と、第6畳み込み処理によって得られた第6代表値とから演算された新たな第7代表値が格納される。また、記憶装置70のアレイC1の第6列には、第7畳み込み処理によって得られた第7代表値と、第6畳み込み処理によって得られた第6代表値とから演算された新たな第6代表値が格納される。この第7プーリング処理が完了すると、記憶装置70のアレイC1の第5列は、全てのプーリング処理が完了した状態となり、第6列は、プーリング処理が途中まで行われた状態となっている。
(第8畳み込み処理)
次に、処理層30によって第8畳み込み処理を行う。この第8畳み込み処理は、記憶装置20のアレイA1〜A7の第8列〜第11列に対して記憶装置40に格納された4行4列で深さが7の第1の核W1を用いて、第7畳み込み処理と同様に行う。この第8畳み込み処理は、処理層30によって行われる。この第8畳み込み処理が完了したデータは、記憶装置50のメモリ素子M1〜M8に格納される。
続いて、処理層30によって、メモリ素子Mk(1≦k≦8)に格納されている数値の各々にバイアスB1を加え、例えばReLU関数(Rectified Linear Unit)等の発火関数処理を必要に応じて施し、改めてメモリ素子Mkに格納する。
(第8プーリング処理)
次に、処理層60によって第8プーリング処理を行う。記憶装置70のアレイC1の容量を節約するために、この第8プーリング処理は、第6プーリング処理とは若干異なっている。第8プーリング処理によって、記憶装置70のアレイC1の第6列には、第8畳み込み処理によって得られた第8代表値と、第7畳み込み処理によって得られた第7代表値と、第6畳み込み処理によって得られたデータから演算された第6代表値とから演算された新たな第6代表値が格納される。これにより、記憶装置70のアレイC1の第6列は、全てのプーリング処理が完了した状態となる。この状態を図11に示す。すなわち、記憶装置70のアレイC1の第1〜第6列は斜線で表示されている。この第8プーリング処理が完了した状態で、代表値として最大値を用いた場合は、これで、第1の核W1を用いた畳み込み処理と全てのプーリング処理が完了する。しかし、代表値として平均値を用いた場合は、アレイC1の各メモリ素子に格納された数値を、プーリング処理に用いた核のアレイに含まれるメモリ素子の個数で除算した値をアレイC1の各メモリ素子に改めて格納する。すなわち本実施形態では、プーリング処理に用いた核は3行3列のアレイであるから、アレイC1の各メモリ素子に格納された数値を、9で除算した値をアレイC1の各メモリ素子に改めて格納する。
以上説明したことにより、アレイA1〜A7に対する第1の核W1を用いた畳み込み処理と、この畳み込み処理に続くプーリング処理が完了し、完了したデータは、記憶装置70のアレイC1に格納される。なお、本実施形態では、バイアスB1をメモリ素子Mk(1≦k≦8)に格納されている数値に加える処理と、例えばReLU関数(Rectified Linear Unit)等の発火関数処理とは、各畳み込み処理が終了した直後に行ったが、発火関数処理がReLU関数(Rectified Linear Unit)であり且つプーリング処理の代表値として最大値を用いる場合には、図11に示す処理が完了した後に行ってもよい。
次に、アレイA1〜A7に対する第iの核Wiを(i=2,・・・,10)を用いた畳み込み処理と、それぞれの畳み込み処理に続くプーリング処理を、第1の核W1を用いた場合と同様に行い、完了したデータは、記憶装置70のアレイCiに格納される。なお、このとき、各畳み込み処理が完了し、この畳み込み処理に対応するプーリング処理を行う前に、処理層30によって、メモリ素子Mk(1≦k≦8)に格納されている数値の各々にバイアスBiを(i=2・・・,10)を加え、例えばReLU関数(Rectified Linear Unit)等の発火関数処理を必要に応じて施し、改めてメモリ素子Mkに格納する。
以上により、アレイA1〜A7に対する第1乃至第10の核W1〜W10のそれぞれを用いた畳み込み処理と、それぞれの畳み込み処理に続くプーリング処理が完了し、畳み込みニューラルネットワークを実現することができる。すなわち、本実施形態においては、記憶装置50の容量が8行1列のメモリ素子で済み、占有面積が小さい演算処理装置を提供することができる。
なお、各畳み込み処理において、並列処理を行うことにより、処理時間の短縮を図ることができる。
また、第1乃至第10の核W1〜W10を用いた畳み込み処理は、記憶装置50の容量を8行10列にすることにより、それらの処理を並列に処理することが可能になるので処理時間の短縮を図ることができる。
以上説明したように、第1実施形態によれば、記憶装置50の容量が従来の場合に比べて小さくすることが可能となり、占有面積が小さい演算処理装置を提供することができる。
(第2実施形態)
次に、第2実施形態による演算処理装置について図12乃至図14Mを参照して説明する。第1実施形態においては、処理層60は、プーリング処理を行った。処理層60が行う処理はプーリング処理に限るものではなく、例えば畳み込み処理であったとしても同様の効果が得られる。この第2実施形態は、処理層60の処理が畳み込み処理であるとして説明する。
この第2実施形態の演算処理装置を図12に示す。この第2実施形態の演算処理装置は、第1実施形態の演算処理装置において、記憶装置65には、畳み込み処理に用いられる核が格納されている。この第2実施形態の演算処理装置においては、処理層60によって行われる畳み込み処理は、図12に示すように、記憶装置65に格納された第1乃至第10の核X1〜X10が用いられ、各核Xi(i=1,・・・,10)は10個の第3行第3列のアレイXi 1〜Xi 10を有している。なお、図12においては、第1の核X1のみを表示している。アレイXi j(i=1.・・・,10、j=1,・・・,10)の第m(m=1,・・・,3)行、第n(n=1,・・・.3)列のメモリ素子をXi j(m、n)と表し、このメモリ素子に格納されている数値もXi j(m、n)と表す。
以下に、第2実施形態の演算処理装置の処理動作について説明する。
(処理層30による第1畳み込み処理)
まず、処理層30によって第1実施形態で説明した第1畳み込み処理を行う。すなわち、図4に示す記憶装置40に格納されている第1の核W1を用いて、記憶装置20に格納されているアレイA1〜A7の第1乃至第4列のメモリ素子に対して畳み込み処理を行い、処理結果を記憶装置50のメモリ素子M1〜M8に格納する。
続いて、処理層30によって、メモリ素子Mk(1≦k≦8)に格納されている数値の各々にバイアスB1を加え、例えばReLU関数(Rectified Linear Unit)等の発火関数処理を必要に応じて施し、改めてメモリ素子Mkに格納する。
(処理層60による第1畳み込み処理)
次に、図13Aに示す様に、第1の核X1のアレイX1 1の第1行第1列のメモリ素子に格納されている数値X1 1(1,1)と、メモリ素子M1に格納されている数値との積を記憶装置70のアレイC1の第1行第1列のメモリ素子C1(1,1)に格納する。続いて、数値X1 1(1,1)と、メモリ素子M2に格納されている数値との積をアレイC1のメモリ素子C1(2,1)に格納する。その後、数値X1 1(1,1)と、メモリ素子M3に格納されている数値との積をアレイC1のメモリ素子C1(3,1)に格納する。これらの処理を並列に実行することも可能であり、それらを並列に実行すれば処理時間の短縮が図られるという利点が得られる。
次に、図13Bに示す様に、アレイX1 1の第2行第1列のメモリ素子に格納されている数値X1 1(2,1)とメモリ素子M2に格納されている数値との積を演算するとともに、この積と、記憶装置70のアレイC1のメモリ素子C1(1,1)に格納されている数値との和を改めてメモリ素子C1(1,1)に格納する。続いて、数値X1 1(2,1)とメモリ素子M3に格納されている数値との積を演算するとともに、この積と記憶装置70のアレイC1のメモリ素子C1(2,1)に格納されている数値との和を改めてメモリ素子C1(2,1)に格納する。その後、数値X1 1(2,1)とメモリ素子M4に格納されている数値との積を演算するとともに、この積とアレイC1のメモリ素子C1(3,1)に格納されている数値との和を改めてメモリ素子C1(3,1)に格納する。これらの処理を並列に実行することも可能であり、それらを並列に実行すれば処理時間の短縮が図られるという利点が得られる。
次に、図13Cに示す様に、アレイX1 1の第3行第1列のメモリ素子に格納されている数値X1 1(3,1)とメモリ素子M3に格納されている数値との積を演算し、この積とアレイC1のメモリ素子C1(1,1)に格納されている数値との和を改めてメモリ素子C1(1,1)に格納する。続いて、数値X1 1(3,1)とメモリ素子M4に格納されている数値との積を演算するとともに、この積と記憶装置70のアレイC1のメモリ素子C1(2,1)に格納されている数値との和を改めてメモリ素子C1(2,1)に格納する。その後、数値X1 1(3,1)とメモリ素子M5に格納されている数値との積を演算するとともに、この積とアレイC1のメモリ素子C1(3,1)に格納されている数値との和を改めてメモリ素子C1(3,1)に格納する。これらの処理を並列に実行することも可能であり、それらを並列に実行すれば処理時間の短縮が図られるという利点が得られる。
次に、図13Dに示す様に、アレイX1 1の第1行第1列のメモリ素子に格納されている数値X1 1(1,1)とメモリ素子M4に格納されている数値との積を演算し、この積をメモリ素子C1(4,1)に格納する。続いて、数値X1 1(1,1)とメモリ素子M5に格納されている数値との積を演算し、この積をメモリ素子C1(5,1)に格納する。その後、数値X1 1(1,1)とメモリ素子M6に格納されている数値との積を演算し、この積をメモリ素子C1(6,1)に格納する。これらの処理を並列に実行することも可能であり、それらを並列に実行すれば処理時間の短縮が図られるという利点が得られる。
次に、図13Eに示す様に、アレイX1 1の第2行第1列のメモリ素子に格納されている数値X1 1(2,1)とメモリ素子M5に格納されている数値との積を演算し、この積とアレイC1のメモリ素子C1(4,1)に格納されている数値との和を改めてメモリ素子C1(4,1)に格納する。続いて、数値X1 1(2,1)とメモリ素子M6に格納されている数値との積を演算し、この積とアレイC1のメモリ素子C1(5,1)に格納されている数値との和を改めてメモリ素子C1(5,1)に格納する。その後、数値X1 1(2,1)とメモリ素子M7に格納されている数値との積を演算し、この積とアレイC1のメモリ素子C1(6,1)に格納されている数値との和を改めてメモリ素子C1(6,1)に格納する。これらの処理を並列に実行することも可能であり、それらを並列に実行すれば処理時間の短縮が図られるという利点が得られる。
次に、図13Fに示すように、アレイX1 1の第3行第1列のメモリ素子に格納されている数値X1 1(3,1)とメモリ素子M6に格納されている数値との積を演算し、この積とアレイC1のメモリ素子C1(4,1)に格納されている数値との和を改めてメモリ素子C1(4,1)に格納する。続いて、数値X1 1(3,1)とメモリ素子M7に格納されている数値との積を演算し、この積とアレイC1のメモリ素子C1(5,1)に格納されている数値との和を改めてメモリ素子C1(5,1)に格納する。その後、数値X1 1(3,1)とメモリ素子M8に格納されている数値との積を演算し、この積とアレイC1のメモリ素子C1(6,1)に格納されている数値との和を改めてメモリ素子C1(6,1)に格納する。これらの処理を並列に実行することも可能であり、それらを並列に実行すれば処理時間の短縮が図られるという利点が得られる。
以上の処理に依り、図13Gに示す様に、第1の核X1のアレイX1 1の第1列を用いた記憶装置50のメモリ素子M1〜M8に対する畳み込み処理が完了し、この処理結果が記憶装置70のアレイC1の第1列のメモリ素子C1(1,1)〜C1(6,1)に格納される。
次に、第1の核X1のアレイX1 1の代わりに第2の核X2のアレイX2 1の第1列を用いた記憶装置50のメモリ素子M1〜M8に対する畳み込み処理を行い、この処理結果を記憶装置70のアレイC2の第1列のメモリ素子C2(1,1)〜C2(6,1)に格納する。この畳み込み処理は、図13A乃至図13Gで説明した処理において、第1の核X1のアレイX1 1〜X1 10の第1列を第2の核X2のアレイX2 1〜X2 10の第1列にそれぞれ換えて行う。
以下、同様に、第1の核X1を第iの核Xi(i=3,・・・,10)にそれぞれ換えて記憶装置50のメモリ素子M1〜M8の畳み込み処理を行い、この処理結果を記憶装置70のアレイCiの第1列のメモリ素子Ci(1,1)〜Ci(6,1)に格納する。
以上により、第1の核W1を用いた処理層30によるアレイA1〜A7の第1列〜第4列に関する畳み込み処理と、第1乃至第10の核X1〜X10のそれぞれの第1列を用いた処理層60によるメモリ素子M1〜M8に対する畳み込み処理が完了し、処理された結果が記憶装置70のアレイC1〜C10のそれぞれの第1列に格納される。この状態を図13Hに示す。
なお、図13A乃至図13Hで説明した処理において、異なる核Xm(m=1,・・・,10)に対する処理を並列に実行することも可能であり、それらを並列に実行すれば処理時間の短縮が図られるという利点が得られる。
(処理層30による第2畳み込み処理)
次に、第2の核W2を用いた処理層30によるアレイA1〜A7の第1列〜第4列に関する畳み込み処理を図12で説明した場合と同様に行い、この畳み込み処理の結果を記憶装置50のメモリ素子M1〜M8に格納する。この畳み込み処理は、図12に説明する畳み込み処理において、核W1を核W2に置き換えて行われる。
続いて、処理層30によって、メモリ素子Mk(1≦k≦8)に格納されている数値の各々にバイアスB2を加え、例えばReLU関数(Rectified Linear Unit)等の発火関数処理を必要に応じて施し、改めてメモリ素子Mkに格納する。
(処理層60による第2畳み込み処理)
次に、この第2畳み込み処理は、第2の核W2を用いたアレイA1〜A7の第1列〜第4列に関する畳み込み処理の結果に対して、第1乃至第10の核X1〜X10を用いて行う。
まず、図13Iに示す様に、記憶装置65に格納されている第1の核X1のアレイX1 2の第1行第1列に格納されている数値X1 2(1,1)とメモリ素子M1に格納されている数値との積を演算し、この積と記憶装置70のアレイC1のメモリ素子C1(1,1)に格納されている数値との和を改めてメモリ素子C1(1,1)に格納する。続いて、数値X1 2(1,1)とメモリ素子M2に格納されている数値との積を演算し、この積と記憶装置70のアレイC1のメモリ素子C1(2,1)に格納されている数値との和を改めてメモリ素子C1(2,1)に格納する。その後、数値X1 2(1,1)とメモリ素子M3に格納されている数値との積を演算し、この積と記憶装置70のアレイC1のメモリ素子C1(3,1)に格納されている数値との和を改めてメモリ素子C1(3,1)に格納する。これらの処理は、並列に実行することも可能であり、それらを並列に実行すれば処理時間の短縮が図られるという利点が得られる。
続いて、図13Bで説明した処理において、数値X1 1(2,1)を数値X1 2(2、1)に置き換えて行う。すなわち、アレイX1 2の第2行第1列に格納されている数値X1 2(2,1)とメモリ素子M2に格納されている数値との積を演算し、この積と記憶装置70のアレイC1のメモリ素子C1(1,1)に格納されている数値との和を改めてメモリ素子C1(1,1)に格納する。続いて、数値X1 2(2,1)とメモリ素子M3に格納されている数値との積を演算し、この積と記憶装置70のアレイC1のメモリ素子C1(2,1)に格納されている数値との和を改めてメモリ素子C1(2,1)に格納する。その後、数値X1 2(2,1)とメモリ素子M4に格納されている数値との積を演算し、この積と記憶装置70のアレイC1のメモリ素子C1(3,1)に格納されている数値との和を改めてメモリ素子C1(3,1)に格納する。
その後、図13Cで説明した処理において、数値X1 1(3,1)を数値X1 2(3、1)に置き換えて行う。
次に、図13Dで説明した処理において、数値X1 1(1,1)を数値X1 2(1、1)に置き換えて行う。すなわち、図13Jに示す様に、数値X1 2(1、1)とメモリ素子M4に格納されている数値との積を演算し、この積と記憶装置70のアレイC1のメモリ素子C1(4,1)に格納されている数値との和を改めてメモリ素子C1(4,1)に格納する。続いて、数値X1 2(1,1)とメモリ素子M5に格納されている数値との積を演算し、この積と記憶装置70のアレイC1のメモリ素子C1(5,1)に格納されている数値との和を改めてメモリ素子C1(5,1)に格納する。その後、数値X1 2(1,1)とメモリ素子M6に格納されている数値との積を演算し、この積と記憶装置70のアレイC1のメモリ素子C1(6,1)に格納されている数値との和を改めてメモリ素子C1(6,1)に格納する。これらの処理は、並列に実行することも可能であり、それらを並列に実行すれば処理時間の短縮が図られるという利点が得られる。
続いて、図13Eで説明した処理において、数値X1 1(2,1)を数値X1 2(2、1)に置き換えて行う。
その後、図13Fで説明した処理において、数値X1 1(3,1)を数値X1 2(3、1)に置き換えて行う。
以上により、メモリ素子M1〜M8に対する核X1のアレイX1 2の第1列を用いた畳み込み処理が完了する。
次に、メモリ素子M1〜M8に対する第m(m=2,・・・,10)の核XmのアレイXm 2の第1列を用いた畳み込み処理を図13A乃至図13Hで説明した場合と同様に行う。
以上の処理結果は、記憶装置70のアレイCi(i=1,・・・,10)の第1列のメモリ素子Ci(1,1)〜Ci(6,1)(i=1,・・・,10)に格納される。すなわち、第2の核W2を用いた処理層30によるアレイA1〜A7の第1列〜第4列に関する畳み込み処理と、第1乃至第10の核X1〜X10のアレイX1 2〜X10 2のそれぞれの第1列を用いた処理層60によるメモリ素子M1〜M8に対する畳み込み処理が完了し、処理された結果が記憶装置70のアレイCi(i=1,・・・,10)の第1列のメモリ素子Ci(1,1)〜Ci(6,1)(i=1,・・・,10)に格納される。
なお、上記処理において、アレイXm 2(m=1,・・・,10)を用いた畳み込み処理は、異なるアレイを用いた処理において、並列に実行することも可能であり、それらを並列に実行すれば処理時間の短縮が図られるという利点が得られる。
(処理層30による第3畳み込み処理)
次に、第3の核W3を用いた処理層30によるアレイA1〜A7の第1列〜第4列に関する畳み込み処理を図12で説明した場合と同様に行い、この畳み込み処理の結果を記憶装置50のメモリ素子M1〜M8に格納する。この畳み込み処理は、図12に説明する畳み込み処理において、核W1を核W3に置き換えて行われる。
続いて、処理層30によって、メモリ素子Mk(1≦k≦8)に格納されている数値の各々にバイアスB3を加え、例えばReLU関数(Rectified Linear Unit)等の発火関数処理を必要に応じて施し、改めてメモリ素子Mkに格納する。
(処理層60による第3畳み込み処理)
続いて、第3の核W3を用いたアレイA1〜A7の第1列〜第4列に関する畳み込み処理の結果に対する第1乃至第10の核X1〜X10のアレイX1 3〜X10 3のそれぞれの第1列を用いた第3畳み込み処理を図13Iおよび図13Jで説明した処理層60による第2畳み込み処理と同様に行う。
第3の核W3を用いた処理層30によるアレイA1〜A7の第1列〜第4列に関する畳み込み処理と、第1乃至第10の核X1〜X10のアレイX1 3〜X10 3のそれぞれの第1列を用いた処理層60によるメモリ素子M1〜M8に対する畳み込み処理が完了し、この畳み込み処理された結果が図13Kに示すように、記憶装置70のアレイCi(i=1,・・・,10)の第1列のメモリ素子Ci(1,1)〜Ci(6,1)(i=1,・・・,10)に格納される。
(処理層30の畳み込み処理および処理層60による畳み込み処理)
同様にして、第iの核Wi(i=4,・・・,10)を用いた処理層30によるアレイA1〜A7の第1列〜第4列に関する畳み込み処理を図12に示す場合と同様に行い、この畳み込み処理の結果がメモリ素子M1〜M8に記憶される。このとき、処理層30によって、メモリ素子Mk(1≦k≦8)に格納されている数値の各々にバイアスBiが(i=1,・・・,10)を加えられ、例えばReLU関数(Rectified Linear Unit)等の発火関数処理を必要に応じて施し、改めてメモリ素子Mkに格納される。
続いて、メモリ素子M1〜M8に対する第1乃至第10の核X1〜X10のアレイX1 i〜X10 iのそれぞれの第1列を用いた第3畳み込み処理を、図13Iおよび図13Jで説明した処理層60による第2畳み込み処理と同様に行う。
これらの処理をi=4,・・・,10の各々に対して順次、行う。
以上により、第iの核Wi(i=1,・・・,10)を用いた処理層30によるアレイA1〜A7の第1列〜第4列に関するそれぞれの畳み込み処理と、これらの畳み込み処理のそれぞれに対する第1乃至第10の核X1〜X10のアレイX1 i〜X10 iのそれぞれの第1列を用いた処理層60によるメモリ素子M1〜M8に対する畳み込み処理が完了し、この結果が図13Lに示すように、記憶装置70のアレイC1〜C10のそれぞれの第1列に格納される。
(処理層30による畳み込み処理)
次に、図4に示す記憶装置40に格納されている第1の核W1を用いて、記憶装置20におけるアレイA1〜A7の第2乃至第5列のメモリ素子の畳み込み処理を処理層30によって行い、処理結果を記憶装置50のメモリ素子M1〜M8に格納する。
続いて、処理層30によって、メモリ素子Mk(1≦k≦8)に格納されている数値の各々にバイアスB1を加え、例えばReLU関数(Rectified Linear Unit)等の発火関数処理を必要に応じて施し、改めてメモリ素子Mkに格納する。
(処理層60による畳み込み処理)
次に、核X1のアレイX1 1のメモリ素子X1 1(i,1)(i=1,・・・,6)を用いて、図13A乃至図13Fで説明した処理と同様に、処理層60による畳み込み処理を行い、処理結果を記憶装置のアレイC1の第2列のメモリ素子C1(1,2)〜C1(6,2)にそれぞれ格納する。続いてX1 1(i,2)(i=1,・・・,6)を用いて、図13A乃至図13Fで説明した処理と同様に、処理層60による畳み込み処理を行い、処理結果をメモリ素子C1(i、1)に格納されている数値に加算し、この加算された数値をメモリ素子C1(i、1)に改めて格納する。
以上により、メモリ素子M1〜M8に対する第1の核X1のアレイX1 1の第2列を用いた畳み込み処理が完了する。この処理結果を図14Aに示す。
次に、第i(i=2,・・・,10)の核XiのアレイXi 1の第2列を用いた畳み込み処理を、アレイX1 1の第2列を用いて説明した場合と同様に行い、処理結果をそれぞれ記憶装置70のアレイCiの第1列のメモリ素子Ci(1,1)〜Ci(6,1)に格納されている数値に加算しこれらの和をメモリ素子Ci(1,1)〜Ci(6,1)に改めて格納する。そしてアレイXi 1の第1列を用いた畳み込み処理を、アレイX1 1の第1列を用いて説明した場合と同様に行い、処理結果を記憶装置のアレイCiの第2列のメモリ素子Ci(1,2)〜Ci(6,2)に格納する。この処理結果を図14Bに示す。図14Bは、核W1を用いてアレイA1〜A7の第2行乃至第5列に関して畳み込み処理を行い、これらの畳み込み処理に対して核Xi(i=2,・・・,10)のアレイXi 1の第1列と第2列とを用いた畳み込み処理の結果を示す。図14Aおよび図14Bで説明した処理の内の相異なる核に対する処理は並列に実行することも可能であり、それらを並列に実行すれば処理時間の短縮が図られるという利点が得られる。
(処理層30による畳み込み処理)
次に、第2の核W2を用いて記憶装置20におけるアレイA1〜A7の第2乃至第5列のメモリ素子に対する畳み込み処理を処理層30によって行い、処理結果を記憶装置50のメモリ素子M1〜M8に格納する。続いて、処理層30によって、メモリ素子Mk(1≦k≦8)に格納されている数値の各々にバイアスB2を加え、例えばReLU関数(Rectified Linear Unit)等の発火関数処理を必要に応じて施し、改めてメモリ素子Mkに格納する。
(処理層60による畳み込み処理)
次に、第1の核X1のアレイX1 2の第1列を用いてメモリ素子M1〜M8に対して畳み込みを行い、処理結果を記憶装置70のアレイC1の第2列のメモリ素子C1(1,2)〜C1(6、2)に格納されている数値との和をそれぞれ演算し第2列のメモリ素子C1(1,2)〜C1(6、2)に改めて格納する。続いてアレイX1 2の第2列を用いてメモリ素子M1〜M8に対して畳み込みを行い、処理結果と対応するアレイC1の第1列のメモリ素子に格納されている値との和を演算し、それらの和を対応するアレイC1の第1列のメモリ素子に改めて格納する。
同様に、第i(i=2,・・・,10)の核XiのアレイXi 2の第1列と第2列とを用いてメモリ素子M1〜M8に対して畳み込みを行い、上記処理結果とアレイCiの第2列のメモリ素子Ci(1,2)〜Ci(6、2)に格納されている数値との和をそれぞれ演算し、それらの和を対応するアレイCiの第2列のメモリ素子に改めて格納するとともに、上記処理結果とアレイCiの第1列のメモリ素子Ci(1,1)〜Ci(6、1)に格納されている数値との和をそれぞれ演算し、それらの和を対応するアレイCiの第1列のメモリ素子に改めて格納する。
以上により、第1の核W1を用いたアレイA1〜A7の第2乃至第5列のメモリ素子に対する畳み込み処理の結果がメモリ素子M1〜M8に格納され、これらのメモリ素子M1〜M8に対する第i(i=2,・・・,10)の核XiのアレイXi 2の第1列と第2列とを用いた畳み込み処理が完了する。
(処理層30および処理層60による畳み込み処理)
次に、第i(i=2,・・・,10)の核Wiを用いてアレイA1〜A7の第2乃至第5列のメモリ素子に対する畳み込み処理を同様に行い、これらの畳み込み処理のそれぞれに対して第jの核Xjの(j=1,・・・,10)アレイXj iの第1列と第2列とを用いて畳み込み処理を処理層60によって行い、これらの処理結果は、記憶装置70のアレイCiの第1列および第2列に格納される。この処理結果を図14Cに示す。
(処理層30による畳み込み処理)
次に、図4に示す記憶装置40に格納されている第1の核W1を用いて、記憶装置20に格納されているアレイA1〜A7の第3乃至第6列のメモリ素子に対して畳み込み処理を処理層30によって行い、処理結果を記憶装置50のメモリ素子M1〜M8に格納する。
続いて、処理層30によって、メモリ素子Mk(1≦k≦8)に格納されている数値の各々にバイアスB1を加え、例えばReLU関数(Rectified Linear Unit)等の発火関数処理を必要に応じて施し、改めてメモリ素子Mkに格納する。
(処理層60による畳み込み処理)
次に、メモリ素子M1〜M8に対する第1の核X1のアレイX1 1の第3列を用いた畳み込み処理を図13A乃至図13Fで説明した処理と同様に行う。この処理結果は、図14Dに示すように、記憶装置70に格納されたアレイC1の第3列、第2列、第1列に格納される。なお、このアレイC1の第3列には、第1の核X1のアレイX1 1の第1列を用いた畳み込み処理が格納され、第2列のメモリ素子C1(1,2)〜C1(6,2)に記憶された数値と第1の核X1のアレイX1 1の第2列を用いた畳み込み処理の結果との和が改めて第2列のメモリ素子C1(1,2)〜C1(6,2)に格納され、アレイC1の第3列のメモリ素子C1(1,3)〜C1(6,3)に格納された数値と第1の核X1のアレイX1 1の第3列を用いた畳み込み処理の結果との和が改めてアレイC1の第3列のメモリ素子C1(1,3)〜C1(6,3)に格納される。
続いて、メモリ素子M1〜M8に対して第1の核X1のアレイX1 1を第i(i=2,・・・,10)の核XiのアレイXi 1の第1列から第3列に置き換えた畳み込み処理を図14Dで説明した場合と同様に行う。この処理結果を図14Eに示す。なお、図14D、14Eで説明した処理の内の相異なるアレイXm 1(m=1,・・・,10)に対する処理は並列に実行することも可能であり、それらを並列に実行すれば処理時間の短縮が図られるという利点が得られる。
(処理層30および処理層60による畳み込み)
次に、記憶装置40に格納されている第i(i=2、・・・,10)の核Wiを用いて、記憶装置20に格納されているアレイA1〜A7の第3乃至第6列のメモリ素子に対して畳み込み処理を処理層30によって行い、処理結果を記憶装置50のメモリ素子M1〜M8に格納する。続いて、処理層30によって、メモリ素子Mk(1≦k≦8)に格納されている数値の各々にバイアスBiを加え、例えばReLU関数(Rectified Linear Unit)等の発火関数処理を必要に応じて施し、改めてメモリ素子Mkに格納する。続いて、第iの核Wi(i=2、・・・,10)を用いて行われた畳み込み処理のそれぞれに対して、第j(j=2,・・・,10)の核XjのアレイXj iの第1列から第3列を用いた畳み込み処理を図14Dおよび図14Eで説明した場合と同様に行い、処理結果をアレイCiの第3列、第2列、第1列に格納する。この処理結果を図14Fに示す。このとき、アレイCi(i=1,・・・,10)の第1列の各メモリ素子Ci(1,1)〜Ci(6、1)に対してバイアス値Yiを加算し、必要に応じて発火関数の処理を施した値を改めてCi(1,1)〜Ci(6、1)に格納する。
以上により、第iの核Wi(i=1、・・・,10)を用いて行われた畳み込み処理のそれぞれに対して、第j(j=1,・・・,10)の核XjのアレイXj iの第1列から第3列を用いた畳み込み処理が図14Dおよび図14Eで説明した場合と同様に行われ、処理結果がアレイCiの第3列、第2列、第1列に格納される。
次に、記憶装置40に格納されている第i(i=1,・・・,10)の核Wiを用いて、記憶装置20に格納されているアレイA1〜A7の第4乃至第7列のメモリ素子に対して畳み込み処理を処理層30によって行い、処理結果を記憶装置50のメモリ素子M1〜M8に格納する。続いて、処理層30によって、メモリ素子Mk(1≦k≦8)に格納されている数値の各々にバイアスBiを加え、例えばReLU関数(Rectified Linear Unit)等の発火関数処理を必要に応じて施し、改めてメモリ素子Mkに格納する。その後、図14D乃至図14Fで説明した場合と同様に、第i(i=1,・・・,10)の核Wiを用いたアレイA1〜A7の第4乃至第7のメモリ素子に対して行われた畳み込み処理の結果それぞれに対して第jの核Xj(j=1,・・・,10)を用いて畳み込み処理を処理層60によって行い、これらの処理結果は、記憶装置70のアレイCjの第4列、第3列、および第2列に格納される。
次に、記憶装置40に格納されている第i(i=1,・・・,10)の核Wiを用いて、記憶装置20に格納されているアレイA1〜A7の第5乃至第8列のメモリ素子に対して畳み込み処理を処理層30によって行い、処理結果を記憶装置50のメモリ素子M1〜M8に格納する。続いて、処理層30によって、メモリ素子Mk(1≦k≦8)に格納されている数値の各々にバイアスBiを加え、例えばReLU関数(Rectified Linear Unit)等の発火関数処理を必要に応じて施し、改めてメモリ素子Mkに格納する。その後、図14D乃至図14Fで説明した場合と同様に、第i(i=1,・・・,10)の核Wiを用いたアレイA1〜A7の第5乃至第8のメモリ素子に対して行われた畳み込み処理の結果それぞれに対して第jの核Xj(j=1,・・・,10)を用いて畳み込み処理を処理層60によって行い、これらの処理結果は、記憶装置70のアレイCjの第5列、第4列、および第3列に格納される。
次に、記憶装置40に格納されている第i(i=1,・・・,10)の核Wiを用いて、記憶装置20に格納されているアレイA1〜A7の第6乃至第9列のメモリ素子に対して畳み込み処理を処理層30によって行い、処理結果を記憶装置50のメモリ素子M1〜M8に格納する。続いて、処理層30によって、メモリ素子Mk(1≦k≦8)に格納されている数値の各々にバイアスBiを加え、例えばReLU関数(Rectified Linear Unit)等の発火関数処理を必要に応じて施し、改めてメモリ素子Mkに格納する。その後、図14D乃至図14Fで説明した場合と同様に、第i(i=1,・・・,10)の核Wiを用いたアレイA1〜A7の第6乃至第9のメモリ素子に対して行われた畳み込み処理の結果それぞれに対して第jの核Xj(j=1,・・・,10)を用いて畳み込み処理を処理層60によって行い、これらの処理結果は、記憶装置70のアレイCjの第6列、第5列、および第4列に格納される。ここまでの処理の結果を図14Gに示す。
次に、記憶装置40に格納されている第i(i=1,・・・,10)の核Wiを用いて、記憶装置20に格納されているアレイA1〜A7の第7乃至第10列のメモリ素子に対して畳み込み処理を処理層30によって行い、処理結果を記憶装置50のメモリ素子M1〜M8に格納する。続いて、処理層30によって、メモリ素子Mk(1≦k≦8)に格納されている数値の各々にバイアスiを加え、例えばReLU関数(Rectified Linear Unit)等の発火関数処理を必要に応じて施し、改めてメモリ素子Mkに格納する。その後、図14D乃至図14Fで説明した場合と同様に、アレイA1〜A7の第7乃至第10列のメモリ素子に対して行われた畳み込み処理の結果それぞれに対して第jの核Xj(j=1,・・・,10)を用いて畳み込み処理を処理層60によって行い、これらの処理結果は、記憶装置70のアレイCjの第6列および第5列に格納される。このとき、アレイC1の第6列および第5列にはそれぞれ、処理層60による畳み込み処理結果が加算され、その加算結果がアレイC1の第6列および第5列に改めて格納される。この処理結果を図14Hに示す。
次に、図14Hで説明した処理において、第1の核X1を第i(i=2,・・・,10)の核Xiに置き換えた処理を行う。この処理結果を図14Iに示す。すなわち、アレイCm(m=2,・・・,10)の第5列および第6列には、新たな数値が格納される。なお、図14Hおよび図14Iで説明した処理の内、相異なる核Xi(i=1,・・・,10)に対する処理は並列に実行することも可能であり、それらを並列に実行すれば処理時間の短縮が図られるという利点が得られる。
以上の処理により、図14Jに示す様にCi(i=1,・・・,10)の第5列および第6列に新たな数値が格納される。
次に、記憶装置40に格納されている第i(i=1,・・・,10)の核Wiを用いて、記憶装置20に格納されているアレイA1〜A7の第8乃至第11列のメモリ素子に対して畳み込み処理を処理層30によって行い、処理結果を記憶装置50のメモリ素子M1〜M8に格納する。続いて、処理層30によって、メモリ素子Mk(1≦k≦8)に格納されている数値の各々にバイアスBiを加え、例えばReLU関数(Rectified Linear Unit)等の発火関数処理を必要に応じて施し、改めてメモリ素子Mkに格納する。その後、第i(i=1,・・・,10)の核Wiを用いたアレイA1〜A7の第8乃至第11のメモリ素子に対して行われた畳み込み処理の結果それぞれに対して、図13A乃至図13Fで説明した処理において、第1の核X1のアレイX1 1を第1の核X1のアレイX1 iに置き換えて畳み込み処理を行う。この畳み込み処理は、この畳み込み処理の結果がアレイC1の第6列のメモリ素子に格納された数値に加えられ、この和がアレイC1の第6列のメモリ素子に改めて格納される。この処理の結果を図14Kに示す。
次に、図14Kで説明した処理において、第1の核X1のアレイX1 i(i=1,・・・,10)の第3列を第m(m=2,・・・,10)の核XmのアレイXm iの第3列に置き換えて畳み込み処理を行い、処理結果がアレイCmの第6列のアレイC1の第6列のメモリ素子に格納された数値に加えられ、この和がアレイC1の第6列のメモリ素子に改めて格納される。この処理の結果を図14Lに示す。
図14Kおよび図14Lで説明した処理の内、相異なる核Xi(i=1,・・・,10)に対する処理は並列に実行することも可能であり、それらを並列に実行すれば処理時間の短縮が図られるという利点が得られる。
次に、図14Jで説明した処理に続く処理において、第1の核W1のアレイW1 h(h=1,・・・,10)を第nの核Wn(n=2,・・・,10)のアレイWn hに置き換えて畳み込み処理を行い、この畳み込み処理のそれぞれの結果に対して第mの核XmのアレイXm nを用いた畳み込みを処理層60によって行う。この処理結果をアレイCm(m=2,・・・,10)の第6列のメモリ素子に格納されている数値に加えられ、この和がアレイCm(m=2,・・・,10)の第6列のメモリ素子に改めて格納される。そして、アレイCm(m=1,・・・,10)の第6列のメモリ素子に格納されている数値にバイアス値Ymを加算し、必要に応じて例えばRectified Linear Unit等の発火関数の処理を施した値を改めてアレイCm(m=1,・・・,10)の第6列のメモリ素子に改めて格納する。この処理結果を図14Mに示す。
以上により、処理層30による畳み込み処理と、この畳み込み処理のそれぞれに対する処理層60による畳み込み処理が施された数値がアレイCm(m=1,・・・,10)のメモリ素子Cm(i,j)(i,j=1,・・・,6)に格納される。
また、第1または第2実施形態においては、畳み込み処理の施されるアレイの大きさが11×11で深さが7、畳み込み処理の核のアレイの大きさが4×4であり、続くプーリング処理ないし畳み込み処理に用いられる核のアレイの大きさが3×3の場合を例に取って説明したが、これらのサイズに必然性はなく、これらとは異なるサイズの場合にも同様の効果が得られることは無論である。畳み込み処理の核の深さに関しても同様である。
また、第1または第2実施形態においては、畳み込み処理に於いてもプーリング処理においても、それらの処理を施す核の移動(stride)は数値一つ分ずつ、すなわち移動が1の場合を例に取って説明したが、移動が1であることに必然性はなく移動が2以上の場合にも同様の効果が得られることは無論である。
また、第1または第2実施形態においては、発火関数の処理を図6Aを用いて説明した処理の直前に行っているが、例えば発火関数処理がRectified Linear Unit処理であり且つプーリング処理が最大値の抽出である場合等、発火関数処理をプーリング処理の後に行っても等価な結果の得られる処理の場合には、プーリング処理の後に行っても同様の効果が得られることは無論である。
また、第1または第2実施形態においては、発火関数の処理としてRectified Linear Unit処理を施す場合を例に取って説明したが、Rectified Linear Unit処理に限るものではなく、例えばsigmoid関数処理等の他の処理を施した場合にも同様の効果が得られることは無論である。
また、第1または第2実施形態においてはパッディング(padding)処理、すなわちアレイに於いて既存の数値の周囲にゼロを補う処理、には言及していないが、パッディング処理を行った場合にも同様の効果が得られることは無論である。
また、第1または第2本実施形態においては、特定の層の出力を格納する記憶装置の個数(アレイの個数)は、その層の出力(アレイ)の一列分の個数に等しい場合を例に取って説明したが、その個数がその層の出力(アレイ)の一列分の個数に等しい場合に限るものではく、その層の出力の一列分の個数以上であれば同様の効果が得られることは無論である。但し、その層の出力の一列分の個数に等しい場合には記憶装置の個数の削減の効果が最も大きくなるという利点が得られる。
また、第1または第2実施形態においては、処理層30の出力を格納する記憶装置として、処理層30の出力の1列分を格納する個数のアレイを備えた記憶装置を有するとしているが、例えば図15に示す様に処理層30の出力(アレイ)の1列分の個数に、2以上の整数を乗じた個数の記憶装置50Aを有していてもよい。その様にすると第2実施形態において図6Aを用いて説明した処理より前に説明した処理ないしそれに於いて必要な置き換えを行った処理、ないし第2実施形態における処理の内、相異なる核を持つ処理の、乗じた整数個までの処理を並列に行うことが可能となるので処理時間の短縮が図られるという利点が得られる。
図15には乗ずる整数として、処理層30の出力(アレイ)の個数を取った場合が例示してあるが、乗ずる整数として処理層30の出力(アレイ)の個数を取る必然性はなく、それとは異なる整数を取ったとしても同様の効果が得られることは無論である。但し、乗ずる整数として処理層30の出力(アレイ)の個数以上の整数を取ると全深さに渡る処理を並列に行うことが可能であるために処理時間の短縮が図られるので好ましい。また、乗ずる整数として処理層30の出力(アレイ)の個数のある約数以上の整数を取ると、上記個数の約数分だけの並列処理を行うことが可能であり且つその並列処理の全てに渡って無駄なく処理を行うことが可能であるので好ましい。
また、第1または第2実施形態においては核のアレイの大きさが、その層(アレイ)に対する処理結果が出力される層のアレイの大きさの約数である場合が示されているが、このことは本質ではなく核のアレイの大きさとその層に対する処理結果の出力される層のアレイの大きさとの間に倍数または約数関係が存在しない場合でも同様の効果が得られることは無論である。
第1または第2実施形態においては処理層30の出力を格納する記憶装置の個数は、処理層30の出力の1列分と等しい個数の記憶装置を有するとしており、それは図の縦の方向に並んでいるとしているが、その配置は本質ではなく例えば図16に示す様にそれが横に並んだ記憶装置50Bを用いたとしても同様の効果が得られることは無論である。その場合には図5A〜図14Mを用いて説明した処理において図中の行方向と列方向とを入れ替えた処理を施せばよい。
また、図15には1列のアレイが縦(図面の奥行き方向)に並んだ記憶装置50Aが用いられたが、図17に示す様にアレイが横に並んだ記憶装置50Cを用いても同様の効果が得られることは無論である。
以上説明したように、第2実施形態によれば、記憶装置50の容量が従来の場合に比べて小さくすることが可能となり、占有面積が小さい演算処理装置を提供することができる。
(第3実施形態)
第3実施形態による演算処理装置を図18に示す。この第3実施形態の演算処理装置は、外部記憶装置600からデータを読み出し、演算処理装置内の記憶装置700に格納する。この記憶装置700に格納されたデータ(数値)に対して、第1実施形態で説明した畳み込み処理を行い、処理結果を演算処理装置内の記憶装置800に格納する。すなわち、第1または第2実施形態において、記憶装置20を記憶装置700に置き換えた構成を有している。
外部記憶装置600は、図18に示すように、アレイE1〜E3を備え、各アレイEi(i=1,2.3)は15行15列のメモリ素子を有する。畳み込み処理に用いられる核Wi(i=1,・・・.7)は、アレイWi 1〜Wi 3を有し、各アレイWi j(j=1,2,3)は5行5列のメモリ素子を有する。
記憶装置700は、外部記憶装置600と同じサイズのアレイF1〜F3を有し、各アレイFi(i=1,2.3)は15行15列のメモリ素子を有する。また、記憶装置800は、アレイG1〜G7を有し、各アレイGi(i=1,・・・.7)は11行11列のメモリ素子を有する。
一方、アレイE1〜E3を有する外部記憶装置600の配列に対して核Wを用いて図2で説明した従来の畳み込み処理を行うと、外部記憶装置600に格納されている数値の配列を7回、読み出す必要がある。
これに対して、第3実施形態では、外部記憶装置600に格納されている数値の配列を先ず記憶装置700にアレイF1〜F3として格納し、アレイG1〜G7を有する記憶装置800に格納するための畳み込み処理は、記憶装置700に格納されているアレイF1〜F3に対して行われる。それ故、7回の数値の配列の読み出しは記憶装置700に格納されているF1〜F3に対して行われる。
一般に、記憶装置からの読み出し時間は、外部記憶装置からの読み出し時間に比べて短い。それ故、第3実施形態においては、従来の場合と比較して処理時間が短縮され、その結果として高速動作が実現される。
第3実施形態においては、外部記憶装置600に格納された数値のアレイE1〜E3を改めて格納するための記憶装置700はアレイE1〜E3と等しいサイズを持つとしたが、このことに限るものではなく、アレイE1〜E3と異なるサイズを持つとしてもよい。アレイE1〜E3と同じかそれ以上のサイズを持つとしても同様の効果が得られることは無論である。但し、アレイE1〜E3と同じサイズを持つとした場合には、記憶装置の容量が少なくて済むという他の利点が得られる。
(第1変形例)
この第1変形例による演算処理装置を図19に示す。この第1変形例の演算処理装置は、図18に示す第3実施形態の演算処理装置において、記憶装置700がアレイF1〜F3を備え、各アレイFi(i=1,2,3)は15行5列のメモリ素子を有している。また、畳み込み処理に用いられる核は、第1乃至第7の核W1〜W7を有している。第i(i=1,・・・,7)の核WiはアレイWi 1、Wi 2、Wi 3を有し、各アレイWi jは(j=1,・・・,3)は、5行5列のメモリ素子を有する。特に図19に示す様に、図中に示す行方向ないし奥行き方向にはアレイE1〜E3と等しいサイズないし深さ(図19では3)を持ち且つ列方向には畳み込み処理に用いる核のサイズと等しい大きさを持つとしてもよい。この様にすると記憶装置の数が削減されるので回路面積の削減が図られるという他の利点が得られる。
次に、第1変形例の演算処理装置における畳み込み処理の動作について図20乃至図22Kを参照して説明する。以下の説明においては、各アレイEi(i=1,2,3)の第m行第n列のメモリ素子は、Ei(m,n)と表される。また各アレイFi(i=1,2,3)の第m行第n列のメモリ素子は、Fi(m,n)と表される。各アレイGi(i=1,・・・,7)の第m行第n列のメモリ素子は、Gi(m,n)と表される。第i(i=1,・・・,7)の核Wiは、アレイWi 1〜Wi 3を有し、各アレイWi j(j=1,2,3)のメモリ素子第m行第n列のメモリ素子は、Wi j(m,n)と表される。
まず、図20に示す様に、外部記憶装置600のアレイEi(i=1,2,3)の第1行〜第15行かつ第1列〜第5列のメモリ素子Ei(1、1)〜Ei(15,1)、Ei(1、2)〜Ei(15,2)、Ei(1,3)〜Ei(15,3)、Ei(1、4)〜Ei(15,4)、Ei(1,5)〜Ei(15,5)に格納されている数値を読み出し、記憶装置700のアレイFiの第1行〜第15行かつ第1列〜第5列のメモリ素子Fi(1、1)〜Fi(15,1)、Fi(1、2)〜Fi(15,2)、Fi(1,3)〜Fi(15,3)、Fi(1、4)〜Fi(15,4)、Fi(1,5)〜Fi(15,5)に格納する。なお、以下の説明においては、例えば、メモリ素子Ei(1、1)は、このメモリ素子に格納されている数値をも表す。他のメモリ素子も同様である。
次に、図21Aに示すように、第1の核W1におけるアレイW1 1の第1行第1列のメモリ素子W1 1(1,1)に格納されている数値と、記憶装置700のアレイF1の第1行第1列のメモリ素子F1 1(1,1)との積を演算し、この積を記憶装置800のアレイG1の第1行第1列のメモリ素子G1 1(1,1)に格納する。続いて、アレイW1 1のメモリ素子W1 1(1,1)に格納されている数値と、アレイF1の第2行第1列のメモリ素子F1 1(2,1)との積を演算し、この積をアレイG1の第2行第1列のメモリ素子G1 1(2,1)に格納する。続いて、アレイW1 1のメモリ素子W1 1(1,1)に格納されている数値と、アレイF1の第3行第1列のメモリ素子F1 1(3,1)との積を演算し、この積をアレイG1の第3行第1列のメモリ素子G1 1(3,1)に格納する。また、アレイW1 1のメモリ素子W1 1(1,1)に格納されている数値と、アレイF1の第4行第1列のメモリ素子F1 1(4,1)に格納されている数値との積を演算し、この積をアレイG1の第4行のメモリ素子G1 1(4、1)に格納する。引き続き、アレイW1 1のメモリ素子W1 1(1,1)に格納されている数値と、アレイF1の第5行第1列のメモリ素子F1 1(5、1)に格納されいる数値との積を演算し、この積をアレイG1の第5行第1列のメモリ素子G1 1(5,1)に格納する。以上の処理を並列に実行することも可能であり、それらを並列に実行すれば処理時間の短縮が図られるという利点が得られる。
次に、図21Bに示すように、核W1におけるアレイW1 1の第2行第1列のメモリ素子W1 1(2,1)に格納されている数値と、記憶装置700のアレイF1の第2行第1列のメモリ素子F1 1(2,1)との積を演算し、この積と、記憶装置800のアレイG1の第1行第1列のメモリ素子G1 1(1,1)に格納されている数値との和を演算し、この和を改めてメモリ素子G1 1(1,1)に格納する。続いて、アレイW1 1のメモリ素子W1 1(2,1)に記憶されている数値と、アレイF1の第3行第1列のメモリ素子F1 1(3,1)との積を演算し、この積と、記憶装置800のアレイG1の第2行第1列のメモリ素子G1 1(2,1)に格納されている数値との和を演算し、この和を改めてメモリ素子G1 1(2,1)に格納する。その後、アレイW1 1の第2行第1列のメモリ素子W1 1(2,1)に格納されている数値と、アレイF1の第4行第1列のメモリ素子F1 1(4,1)との積を演算し、この積と、記憶装置800のアレイG1の第3行第1列のメモリ素子G1 1(3,1)に格納されている数値との和を演算し、この和を改めてメモリ素子G1 1(3,1)に格納する。また、アレイW1 1の第2行第1列のメモリ素子W1 1(2,1)に格納されている数値と、アレイF1の第5行第1列のメモリ素子F1 1(5,1)との積を演算し、この積と、記憶装置800のアレイG1の第4行第1列のメモリ素子G1 1(4,1)に格納されている数値との和を演算し、この和を改めてメモリ素子G1 1(4,1)に格納する。引き続き、アレイW1 1の第2行第1列のメモリ素子W1 1(2,1)に格納されている数値と、と、アレイF1の第6行第1列のメモリ素子F1 1(6,1)との積を演算し、この積と、記憶装置800のアレイG1の第5行第1列のメモリ素子G1 1(5,1)に格納されている数値との和を演算し、この和を改めてメモリ素子G1 1(5,1)に格納する。以上の処理を並列に実行することも可能であり、それらを並列に実行すれば処理時間の短縮が図られるという利点が得られる。
以下、第1実施形態において図5A〜5Qで説明した処理と同様に、記憶装置700のアレイF1〜F3に対する第1の核W1におけるアレイW1 1〜W1 3を用いた畳み込み処理を行う。その後、アレイG1の第1列のメモリ素子G1(1,1)〜G1(11,1)にそれぞれバイアス値B1を加え、例えばRectified Linear Unit等の発火関数処理を必要に応じて施し、改めてアレイG1の第1列のメモリ素子G1(1,1)〜G1(11,1)にそれぞれ格納する。これにより、図21Cに示すように、記憶装置800のアレイG1の第1列のメモリ素子G1(1,1)〜G1(11,1)には、第1の核W1を用いた外部記憶装置600のアレイE1〜E3の第1乃至第5列に対する畳み込み処理が完了したデータが格納される。
次に、図21A乃至21Cで説明した処理において、第1の核W1を第2の核W2に置き換えて畳み込み処理を行う。これにより、畳み込み処理結果が記憶装置800のアレイG2の第1列のメモリ素子G2(1,1)〜G2(11,1)に格納される。その後、アレイG2の第1列のメモリ素子G2(1,1)〜G2(11,1)にそれぞれバイアス値B2を加え、例えばRectified Linear Unit等の発火関数処理を必要に応じて施し、改めてアレイG2の第1列のメモリ素子G2(1,1)〜G2(11,1)にそれぞれ格納する。これにより、図21Dに示すように、記憶装置800のアレイG2の第1列のメモリ素子G2(1,1)〜G2(11、1)には、第2の核W2を用いた外部記憶装置600のアレイE1〜E3の第1乃至第5列に対する畳み込み処理が完了したデータが格納される。
続いて図21A乃至21Cで説明した処理において、第1の核W1を第i(i=3,・・・,7)の核Wiに置き換えて畳み込み処理を行う。これにより、畳み込み処理結果が記憶装置800の第i(i=3,・・・,7)のアレイGiの第1列のメモリ素子Gi(1,1)〜Gi(11,1)に格納される。その後、アレイGiの第1列のメモリ素子Gi(1,1)〜Gi(11,1)にそれぞれバイアス値Biを加え、例えばRectified Linear Unit等の発火関数処理を必要に応じて施し、改めてアレイGiの第1列のメモリ素子Gi(1,1)〜Gi(11,1)にそれぞれ格納する。これにより、図21Eに示すように、記憶装置800の第i(i=1,・・・,7)のアレイGiの第1列のメモリ素子Gi(1,1)〜Gi(11、1)には、第1乃至第7の核W1〜W7を用いた外部記憶装置600のアレイE1〜E3の第1乃至第5列に対する畳み込み処理が完了したデータが格納される。
次に、図22Aに示すように、外部記憶装置600のアレイE1〜E3のそれぞれの第6列のデータを読み出し、記憶装置700のアレイF1〜F3の第1列のメモリ素子に格納されているデータと置き換える。このとき、記憶装置700のアレイF1〜F3の第2乃至第5列のメモリ素子には、前の処理によって外部記憶装置600のアレイE1〜E3の第2列乃至第5列から読み出されたデータが格納されている。
続いて、図21A乃至21Dで説明した処理において、アレイF1〜F3のそれぞれのデータに対して、第1乃至第7の核W1〜W7のアレイを用いて、畳み込み処理を行い、処理結果を記憶装置800のアレイG1〜G7の第2列のメモリ素子に格納する。なお、この畳み込み処理においては、図22Bに示すように、第i(i=1,・・・,7)の核WiのアレイWi jの(j=1,2,3)の第1列のメモリ素子と記憶装置のアレイFjの第2列の対応するメモリ素子との積和が演算され、アレイWi jの(j=1,2,3)の第2列のメモリ素子と記憶装置のアレイFjの第3列の対応するメモリ素子との積和が演算され、アレイWi jの(j=1,2,3)の第3列のメモリ素子と記憶装置のアレイFjの第4列の対応するメモリ素子との積和が演算され、アレイWi jの(j=1,2,3)の第4列のメモリ素子と記憶装置のアレイFjの第5列の対応するメモリ素子との積和が演算され、アレイWi jの(j=1,2,3)の第5列のメモリ素子と記憶装置のアレイFjの第1列の対応するメモリ素子との積和が演算される。第i(i=1,・・・,7)の核Wiと記憶装置700のアレイFj(j=1,2,3)との積和は記憶装置800のアレイGiの第2列のメモリ素子に格納される。
その後、各アレイGi(i=1,・・・,7)の第2列のメモリ素子Gi(1,2)〜Gi(11,2)に格納されている数値にバイアス値Biを加算し、例えばRectified Linear Unit等の発火関数処理を必要に応じて施し、改めてアレイGiの第2列のメモリ素子Gi(1,2)〜Gi(11,2)にそれぞれ格納する。これにより、図22Bに示すように、記憶装置800の第i(i=1,・・・,7)のアレイGiの第2列のメモリ素子Gi(1,2)〜Gi(11、2)には、第1乃至第7の核W1〜W7を用いた外部記憶装置600のアレイE1〜E3の第2乃至第6列に対する畳み込み処理が完了したデータが格納される。
次に、図22Cに示すように、外部記憶装置600のアレイE1〜E3のそれぞれの第7列のデータを読み出し、記憶装置700のアレイF1〜F3の第2列のメモリ素子に格納されているデータと置き換える。このとき、記憶装置700のアレイF1〜F3の第3乃至第5列のメモリ素子には、外部記憶装置600のアレイE1〜E3の第3列乃至第5列から読み出されたデータが格納され、記憶装置700のアレイF1〜F3の第1および第2列のメモリ素子には、外部記憶装置600のアレイE1〜E3の第6列および第7列から読み出されたデータが格納される。
続いて、図21A乃至21Dで説明した処理において、アレイF1〜F3のそれぞれのデータに対して、第1乃至第7の核W1〜W7のアレイを用いて、畳み込み処理を行い、処理結果を記憶装置800のアレイG1〜G7の第3列のメモリ素子に格納する。なお、この畳み込み処理においては、図22Dに示すように、第i(i=1,・・・,7)の核WiのアレイWi jの(j=1,2,3)の第1列のメモリ素子と記憶装置のアレイFjの第3列の対応するメモリ素子との積和が演算され、アレイWi jの(j=1,2,3)の第2列のメモリ素子と記憶装置のアレイFjの第4列の対応するメモリ素子との積和が演算され、アレイWi jの(j=1,2,3)の第3列のメモリ素子と記憶装置のアレイFjの第5列の対応するメモリ素子との積和が演算され、アレイWi jの(j=1,2,3)の第4列のメモリ素子と記憶装置のアレイFjの第1列の対応するメモリ素子との積和が演算され、アレイWi jの(j=1,2,3)の第5列のメモリ素子と記憶装置のアレイFjの第2列の対応するメモリ素子との積和が演算される。第i(i=1,・・・,7)の核Wiと記憶装置700のアレイFj(j=1,2,3)との積和は記憶装置800のアレイGiの第3列のメモリ素子に格納される。
その後、各アレイGi(i=1,・・・,7)の第3列のメモリ素子Gi(1,3)〜Gi(11,3)に格納されている数値にバイアス値Biを加算し、例えばRectified Linear Unit等の発火関数処理を必要に応じて施し、改めてアレイGiの第3列のメモリ素子Gi(1,3)〜Gi(11,3)にそれぞれ格納する。これにより、図22Dに示すように、記憶装置800の第i(i=1,・・・,7)のアレイGiの第3列のメモリ素子Gi(1,3)〜Gi(11、3)には、第1乃至第7の核W1〜W7を用いた外部記憶装置600のアレイE1〜E3の第3乃至第7列に対する畳み込み処理が完了したデータが格納される。
次に、図22Eに示すように、外部記憶装置600のアレイE1〜E3のそれぞれの第8列のデータを読み出し、記憶装置700のアレイF1〜F3の第3列のメモリ素子に格納されているデータと置き換える。このとき、記憶装置700のアレイF1〜F3の第4および第5列のメモリ素子には、外部記憶装置600のアレイE1〜E3の第4列および第5列から読み出されたデータが格納され、記憶装置700のアレイF1〜F3の第1乃至第3列のメモリ素子には、外部記憶装置600のアレイE1〜E3の第6乃至第8列から読み出されたデータが格納される。
続いて、図21A乃至21Dで説明した処理において、アレイF1〜F3のそれぞれのデータに対して、第1乃至第7の核W1〜W7のアレイを用いて、畳み込み処理を行い、処理結果を記憶装置800のアレイG1〜G7の第4列のメモリ素子に格納する。なお、この畳み込み処理においては、図22Fに示すように、第i(i=1,・・・,7)の核WiのアレイWi jの(j=1,2,3)の第1列のメモリ素子と記憶装置のアレイFjの第4列の対応するメモリ素子との積和が演算され、アレイWi jの(j=1,2,3)の第2列のメモリ素子と記憶装置のアレイFjの第5列の対応するメモリ素子との積和が演算され、アレイWi jの(j=1,2,3)の第3列のメモリ素子と記憶装置のアレイFjの第1列の対応するメモリ素子との積和が演算され、アレイWi jの(j=1,2,3)の第4列のメモリ素子と記憶装置のアレイFjの第2列の対応するメモリ素子との積和が演算され、アレイWi jの(j=1,2,3)の第5列のメモリ素子と記憶装置のアレイFjの第3列の対応するメモリ素子との積和が演算される。第i(i=1,・・・,7)の核Wiと記憶装置700のアレイFj(j=1,2,3)との積和は記憶装置800のアレイGiの第4列のメモリ素子に格納される。
その後、各アレイGi(i=1,・・・,7)の第4列のメモリ素子Gi(1,4)〜Gi(11,4)に格納されている数値にバイアス値Biを加算し、例えばRectified Linear Unit等の発火関数処理を必要に応じて施し、改めてアレイGiの第4列のメモリ素子Gi(1,4)〜Gi(11,4)にそれぞれ格納する。これにより、図22Fに示すように、記憶装置800の第i(i=1,・・・,7)のアレイGiの第4列のメモリ素子Gi(1,4)〜Gi(11、4)には、第1乃至第7の核W1〜W7を用いた外部記憶装置600のアレイE1〜E3の第4乃至第8列に対する畳み込み処理が完了したデータが格納される。
次に、図22Gに示すように、外部記憶装置600のアレイE1〜E3のそれぞれの第9列のデータを読み出し、記憶装置700のアレイF1〜F3の第4列のメモリ素子に格納されているデータと置き換える。このとき、記憶装置700のアレイF1〜F3の第5列のメモリ素子には、外部記憶装置600のアレイE1〜E3の第5列から読み出されたデータが格納され、記憶装置700のアレイF1〜F3の第1乃至第4列のメモリ素子には、外部記憶装置600のアレイE1〜E3の第6乃至第9列から読み出されたデータが格納される。
続いて、図21A乃至21Dで説明した処理において、アレイF1〜F3のそれぞれのデータに対して、第1乃至第7の核W1〜W7のアレイを用いて、畳み込み処理を行い、処理結果を記憶装置800のアレイG1〜G7の第5列のメモリ素子に格納する。なお、この畳み込み処理においては、図22Hに示すように、第i(i=1,・・・,7)の核WiのアレイWi jの(j=1,2,3)の第1列のメモリ素子と記憶装置のアレイFjの第5列の対応するメモリ素子との積和が演算され、アレイWi jの(j=1,2,3)の第2列のメモリ素子と記憶装置のアレイFjの第1列の対応するメモリ素子との積和が演算され、アレイWi jの(j=1,2,3)の第3列のメモリ素子と記憶装置のアレイFjの第2列の対応するメモリ素子との積和が演算され、アレイWi jの(j=1,2,3)の第4列のメモリ素子と記憶装置のアレイFjの第3列の対応するメモリ素子との積和が演算され、アレイWi jの(j=1,2,3)の第5列のメモリ素子と記憶装置のアレイFjの第4列の対応するメモリ素子との積和が演算される。第i(i=1,・・・,7)の核Wiと記憶装置700のアレイFj(j=1,2,3)との積和は記憶装置800のアレイGiの第5列のメモリ素子に格納される。
その後、各アレイGi(i=1,・・・,7)の第5列のメモリ素子Gi(1,5)〜Gi(11,5)に格納されている数値にバイアス値Biを加算し、例えばRectified Linear Unit等の発火関数処理を必要に応じて施し、改めてアレイGiの第5列のメモリ素子Gi(1,5)〜Gi(11,5)にそれぞれ格納する。これにより、図22Hに示すように、記憶装置800の第i(i=1,・・・,7)のアレイGiの第5列のメモリ素子Gi(1,5)〜Gi(11、5)には、第1乃至第7の核W1〜W7を用いた外部記憶装置600のアレイE1〜E3の第5乃至第9列に対する畳み込み処理が完了したデータが格納される。
次に、図22Iに示すように、外部記憶装置600のアレイE1〜E3のそれぞれの第10列のデータを読み出し、記憶装置700のアレイF1〜F3の第5列のメモリ素子に格納されているデータと置き換える。このとき、記憶装置700のアレイF1〜F3の第1乃至第4列のメモリ素子には、外部記憶装置600のアレイE1〜E3の第5乃至第9列から読み出されたデータが格納される。
続いて、図21A乃至21Dで説明した処理において、アレイF1〜F3のそれぞれのデータに対して、第1乃至第7の核W1〜W7のアレイを用いて、畳み込み処理を行い、処理結果を記憶装置800のアレイG1〜G7の第6列のメモリ素子に格納する。なお、この畳み込み処理においては、図22Jに示すように、第i(i=1,・・・,7)の核WiのアレイWi jの(j=1,2,3)の第1列のメモリ素子と記憶装置のアレイFjの第1列の対応するメモリ素子との積和が演算され、アレイWi jの(j=1,2,3)の第2列のメモリ素子と記憶装置のアレイFjの第2列の対応するメモリ素子との積和が演算され、アレイWi jの(j=1,2,3)の第3列のメモリ素子と記憶装置のアレイFjの第3列の対応するメモリ素子との積和が演算され、アレイWi jの(j=1,2,3)の第4列のメモリ素子と記憶装置のアレイFjの第4列の対応するメモリ素子との積和が演算され、アレイWi jの(j=1,2,3)の第5列のメモリ素子と記憶装置のアレイFjの第5列の対応するメモリ素子との積和が演算される。第i(i=1,・・・,7)の核Wiと記憶装置700のアレイFj(j=1,2,3)との積和は記憶装置800のアレイGiの第6列のメモリ素子に格納される。
その後、各アレイGi(i=1,・・・,7)の第6列のメモリ素子Gi(1,6)〜Gi(11,6)に格納されている数値にバイアス値Biを加算し、例えばRectified Linear Unit等の発火関数処理を必要に応じて施し、改めてアレイGiの第6列のメモリ素子Gi(1,6)〜Gi(11,6)にそれぞれ格納する。これにより、図22Jに示すように、記憶装置800の第i(i=1,・・・,7)のアレイGiの第6列のメモリ素子Gi(1,6)〜Gi(11、6)には、第1乃至第7の核W1〜W7を用いた外部記憶装置600のアレイE1〜E3の第6乃至第10列に対する畳み込み処理が完了したデータが格納される。
次に、図22Aで説明した場合と同様に、外部記憶装置600のアレイE1〜E3の第11列のメモリ素子からデータを読み出し、記憶装置の700のアレイF1〜F3の第1列のメモリ素子に格納する。その後、図22Bで説明した同様の畳み込み処理を行い、この畳み込み処理結果を記憶装置800のアレイGi(i=1,・・・,7)の第7列のメモリ素子に格納する。
続いて、図22Cで説明した場合と同様に、外部記憶装置600のアレイE1〜E3の第12列のメモリ素子からデータを読み出し、記憶装置の700のアレイF1〜F3の第2列のメモリ素子に格納する。その後、図22Dで説明した同様の畳み込み処理を行い、この畳み込み処理結果を記憶装置800のアレイGi(i=1,・・・,7)の第8列のメモリ素子に格納する。
図22Eで説明した場合と同様に、外部記憶装置600のアレイE1〜E3の第13列のメモリ素子からデータを読み出し、記憶装置の700のアレイF1〜F3の第3列のメモリ素子に格納する。その後、図22Fで説明した同様の畳み込み処理を行い、この畳み込み処理結果を記憶装置800のアレイGi(i=1,・・・,7)の第9列のメモリ素子に格納する。
図22Gで説明した場合と同様に、外部記憶装置600のアレイE1〜E3の第14列のメモリ素子からデータを読み出し、記憶装置の700のアレイF1〜F3の第4列のメモリ素子に格納する。その後、図22Hで説明した同様の畳み込み処理を行い、この畳み込み処理結果を記憶装置800のアレイGi(i=1,・・・,7)の第10列のメモリ素子に格納する。
図22Iで説明した場合と同様に、外部記憶装置600のアレイE1〜E3の第15列のメモリ素子からデータを読み出し、記憶装置の700のアレイF1〜F3の第5列のメモリ素子に格納する。その後、図22Jで説明した同様の畳み込み処理を行い、この畳み込み処理結果を記憶装置800のアレイGi(i=1,・・・,7)の第11列のメモリ素子に格納する。
次に、各アレイGi(i=1,・・・,7)の各メモリ素子に格納されている数値にバイアス値Biを加算し、例えばRectified Linear Unit等の発火関数処理を必要に応じて施し、改めてアレイGiの各メモリ素子にそれぞれ格納する。これにより、図22Kに示すように、記憶装置800のアレイG1〜G7の第7列乃至第11列のメモリ素子には、第1乃至第7の核W1〜W7を用いた外部記憶装置600のアレイE1〜E3の第7乃至第15列に対する畳み込み処理が完了したデータが格納される。
以上の手続きにより、外部記憶装置600のアレイE1〜E3のメモリ素子に対して、第1乃至第7の核W1〜W7を用いて畳み込み処理を行った結果が記憶装置800を構成するアレイG1〜G7のメモリ素子に格納される。
なお、上記の処理の記憶装置800のアレイG1〜G7のメモリ素子にデータ(数値)を格納する処理において、異なるアレイGm(m=1,・・・,7)に対する処理は並列に行うことも可能であり、並列に行えば処理時間の短縮が図られるという利点が得られる。
第1変形例においては、行方向および奥行き方向がアレイE1〜E3と同じサイズおよび深さを持つ記憶装置を用いたが、これに限るものではなく、列方向ないし奥行き方向がアレイE1〜E3のそれらと異なる記憶装置を用いても同様の効果が得られる。特に、行方向ないし奥行き方向がアレイE1〜E3と同じサイズおよび深さを持つ核を用いれば、記憶装置700の容量の削減の効果が最も大きくなるという利点が得られる。
また、第1変形例による演算処理装置おいては図19に示した様に、行方向および深さ方向が外部記憶装置600のアレイE1〜E3と同じ記憶装置を用いたが、例えば、図23に示すように、奥行き方向および列方向がアレイE1〜E3と同じで且つ行方向が核と同じ行を有するアレイH1〜H3を有する記憶装置700Aを用いても同様の効果を得ることができる。この場合には、図20乃至図22Kで説明した処理において、図中に示す列方向の座標と行方向の座標とを入れ替えた処理を施すことにより、記憶装置800を構成する全ての記憶装置に必要な処理の為された数値が格納される。なお、図中に示す奥行き(深さ)方向ないし列方向には外部記憶装置のアレイと等しい図の面内方向の大きさないし深さを持ち且つ行方向には畳み込み処理に用いる核の図の面内方向の大きさと等しい大きさを持つとしたが、これに限るものではなく、図中に示す奥行き方向ないし列方向には外部記憶装置600のアレイ以上の面内方向の深さないし大きさを持ち且つ行方向には畳み込み処理に用いる核の図の面内方向の大きさ以上の大きさを持つとしても同様の効果が得られる。特に図中に示す奥行き方向ないし列方向には外部記憶装置600と等しい深さないし図の面内方向の大きさを持ち且つ行方向には畳み込み処理に用いる核の図の面内方向の大きさと等しい大きさを持つとすると記憶装置の個数の削減の効果が最も大きくなるという利点が得られる。
(第2変形例)
次に、第3実施形態の第2変形例による演算処理装置を図24に示す。この第2変形例の演算処理装置は、図18に示す第3実施形態の演算処理装置において、記憶装置700を記憶装置700Bに置き換えた構成を有している。
この記憶装置700Bは、記憶装置600の各アレイE1〜E3のそれぞれと同じ大きさの1枚のアレイIを有する。すなわち、アレイIは、15行15列に配置されたメモリ素子を有している。なお、この第2変形例では、アレイIが1枚である場合を例示してあるが、その深さが1であることは本質ではなく他の深さであっても同様の効果が得られることは無論である。
(動作)
次に、第2変形例の演算処理装置に動作について図25乃至図28を参照して説明する。
まず、図25に示す様に、外部記憶装置600のアレイE1のメモリ素子に格納されているデータを読み出し、記憶装置700BのアレイIの対応するメモリ素子に格納する。すなわち、アレイE1のm行n列のメモリ素子E1(m,n)に格納されているデータは、アレイIの対応するメモリ素子I(m,n)に格納する。
続いて、第1の核W1のアレイW1 1の第1列のメモリ素子W1 1(1,1)〜W1 1(5,1)に格納されているデータと、アレイIの第1列のメモリ素子I(1,1)〜I(15,1)に格納されているデータとの畳み込み処理を行う。この畳み込み処理は以下のように行われる。
まず、図26Aに示す様に、第1の核W1のアレイW1 1の第1行第1列のメモリ素子W1 1(1,1)に格納されているデータと、アレイIの第1行第1列のメモリ素子I(1,1)に格納されているデータとの積を演算し、この積を記憶装置800のアレイG1の第1行第1列のメモリ素子G1(1,1)に格納する。その後、アレイW1 1の第1行第1列のメモリ素子W1 1(1,1)に格納されているデータと、アレイIの第2行第1列のメモリ素子I(2,1)に格納されているデータとの積を演算し、この積を記憶装置800のアレイG1の第2行第1列のメモリ素子G1(2,1)に格納する。アレイW1 1の第1行第1列のメモリ素子W1 1(1,1)に格納されているデータと、アレイIの第3行第1列のメモリ素子I(3,1)に格納されているデータとの積を演算し、この積を記憶装置800のアレイG1の第3行第1列のメモリ素子G1(3,1)に格納する。引き続き、アレイW1 1の第1行第1列のメモリ素子W1 1(1,1)に格納されているデータと、アレイIの第4行第1列のメモリ素子I(4,1)に格納されているデータとの積を演算し、この積を記憶装置800のアレイG1の第4行第1列のメモリ素子G1(4,1)に格納する。その後、アレイW1 1の第1行第1列のメモリ素子W1 1(1,1)に格納されているデータと、アレイIの第5行第1列のメモリ素子I(5,1)に格納されているデータとの積を演算し、この積を記憶装置800のアレイG1の第5行第1列のメモリ素子G1(5,1)に格納する。これらの処理結果を図26Aに示す。これらの処理は、並列に実行することも可能であり、それらを並列に実行すれば処理時間の短縮が図られるという利点が得られる。
次に、図26Bに示す様に、第1の核W1のアレイW1 1の第2行第1列のメモリ素子W1 1(2,1)に格納されているデータと、アレイIの第2行第1列のメモリ素子I(2,1)に格納されているデータとの積を演算し、この積とアレイG1の第1行第1列のメモリ素子G1(1,1)に格納されているデータとの和を演算し、この和をアレイG1の第1行第1列のメモリ素子G1(1,1)に改めて格納する。続いて、アレイW1 1の第2行第1列のメモリ素子W1 1(2,1)に格納されているデータと、アレイIの第3行第1列のメモリ素子I(3,1)に格納されているデータとの積を演算し、この積とアレイG1の第2行第1列のメモリ素子G1(2,1)に格納されているデータとの和を演算し、この和をアレイG1の第2行第1列のメモリ素子G1(2,1)に改めて格納する。その後、アレイW1 1の第2行第1列のメモリ素子W1 1(2,1)に格納されているデータと、アレイIの第4行第1列のメモリ素子I(4,1)に格納されているデータとの積を演算し、この積とアレイG1の第3行第1列のメモリ素子G1(3,1)に格納されているデータとの和を演算し、この和をアレイG1の第3行第1列のメモリ素子G1(3,1)に改めて格納する。引き続いて、アレイW1 1の第2行第1列のメモリ素子W1 1(2,1)に格納されているデータと、アレイIの第5行第1列のメモリ素子I(5,1)に格納されているデータとの積を演算し、この積とアレイG1の第4行第1列のメモリ素子G1(4,1)に格納されているデータとの和を演算し、この和をアレイG1の第4行第1列のメモリ素子G1(4,1)に改めて格納する。その後、アレイW1 1の第2行第1列のメモリ素子W1 1(2,1)に格納されているデータと、アレイIの第6行第1列のメモリ素子I(6,1)に格納されているデータとの積を演算し、この積とアレイG1の第5行第1列のメモリ素子G1(5,1)に格納されているデータとの和を演算し、この和をアレイG1の第5行第1列のメモリ素子G1(5,1)に改めて格納する。これらの処理結果を図26Bに示す。これらの処理は、並列に実行することも可能であり、それらを並列に実行すれば処理時間の短縮が図られるという利点が得られる。
次に、第1の核W1のアレイW1 1の第3行第1列のメモリ素子W1 1(3,1)に格納されているデータと、アレイIの第3行第1列のメモリ素子I(3,1)に格納されているデータとの積を演算し、この積とアレイG1の第1行第1列のメモリ素子G1(1,1)に格納されているデータとの和を演算し、この和をアレイG1の第1行第1列のメモリ素子G1(1,1)に改めて格納する。続いて、アレイW1 1の第3行第1列のメモリ素子W1 1(3,1)に格納されているデータと、アレイIの第4行第1列のメモリ素子I(4,1)に格納されているデータとの積を演算し、この積とアレイG1の第2行第1列のメモリ素子G1(2,1)に格納されているデータとの和を演算し、この和をアレイG1の第2行第1列のメモリ素子G1(2,1)に改めて格納する。その後、アレイW1 1の第3行第1列のメモリ素子W1 1(3,1)に格納されているデータと、アレイIの第5行第1列のメモリ素子I(5,1)に格納されているデータとの積を演算し、この積とアレイG1の第3行第1列のメモリ素子G1(3,1)に格納されているデータとの和を演算し、この和をアレイG1の第3行第1列のメモリ素子G1(3,1)に改めて格納する。引き続いて、アレイW1 1の第3行第1列のメモリ素子W1 1(3,1)に格納されているデータと、アレイIの第6行第1列のメモリ素子I(6,1)に格納されているデータとの積を演算し、この積とアレイG1の第4行第1列のメモリ素子G1(4,1)に格納されているデータとの和を演算し、この和をアレイG1の第4行第1列のメモリ素子G1(4,1)に改めて格納する。その後、アレイW1 1の第3行第1列のメモリ素子W1 1(3,1)に格納されているデータと、アレイIの第7行第1列のメモリ素子I(7,1)に格納されているデータとの積を演算し、この積とアレイG1の第5行第1列のメモリ素子G1(5,1)に格納されているデータとの和を演算し、この和をアレイG1の第5行第1列のメモリ素子G1(5,1)に改めて格納する。これらの処理は、並列に実行することも可能であり、それらを並列に実行すれば処理時間の短縮が図られるという利点が得られる。
次に、第1の核W1のアレイW1 1の第4行第1列のメモリ素子W1 1(4,1)に格納されているデータと、アレイIの第4行第1列のメモリ素子I(4,1)に格納されているデータとの積を演算し、この積とアレイG1の第1行第1列のメモリ素子G1(1,1)に格納されているデータとの和を演算し、この和をアレイG1の第1行第1列のメモリ素子G1(1,1)に改めて格納する。続いて、アレイW1 1の第4行第1列のメモリ素子W1 1(4,1)に格納されているデータと、アレイIの第5行第1列のメモリ素子I(5,1)に格納されているデータとの積を演算し、この積とアレイG1の第2行第1列のメモリ素子G1(2,1)に格納されているデータとの和を演算し、この和をアレイG1の第2行第1列のメモリ素子G1(2,1)に改めて格納する。その後、アレイW1 1の第4行第1列のメモリ素子W1 1(4,1)に格納されているデータと、アレイIの第6行第1列のメモリ素子I(6,1)に格納されているデータとの積を演算し、この積とアレイG1の第3行第1列のメモリ素子G1(3,1)に格納されているデータとの和を演算し、この和をアレイG1の第3行第1列のメモリ素子G1(3,1)に改めて格納する。引き続いて、アレイW1 1の第4行第1列のメモリ素子W1 1(4,1)に格納されているデータと、アレイIの第7行第1列のメモリ素子I(7,1)に格納されているデータとの積を演算し、この積とアレイG1の第4行第1列のメモリ素子G1(4,1)に格納されているデータとの和を演算し、この和をアレイG1の第4行第1列のメモリ素子G1(4,1)に改めて格納する。その後、アレイW1 1の第4行第1列のメモリ素子W1 1(4,1)に格納されているデータと、アレイIの第8行第1列のメモリ素子I(8,1)に格納されているデータとの積を演算し、この積とアレイG1の第5行第1列のメモリ素子G1(5,1)に格納されているデータとの和を演算し、この和をアレイG1の第5行第1列のメモリ素子G1(5,1)に改めて格納する。これらの処理は、並列に実行することも可能であり、それらを並列に実行すれば処理時間の短縮が図られるという利点が得られる。
次に、第1の核W1のアレイW1 1の第5行第1列のメモリ素子W1 1(5,1)に格納されているデータと、アレイIの第5行第1列のメモリ素子I(5,1)に格納されているデータとの積を演算し、この積とアレイG1の第1行第1列のメモリ素子G1(1,1)に格納されているデータとの和を演算し、この和をアレイG1の第1行第1列のメモリ素子G1(1,1)に改めて格納する。続いて、アレイW1 1の第5行第1列のメモリ素子W1 1(5,1)に格納されているデータと、アレイIの第6行第1列のメモリ素子I(6,1)に格納されているデータとの積を演算し、この積とアレイG1の第2行第1列のメモリ素子G1(2,1)に格納されているデータとの和を演算し、この和をアレイG1の第2行第1列のメモリ素子G1(2,1)に改めて格納する。その後、アレイW1 1の第5行第1列のメモリ素子W1 1(5,1)に格納されているデータと、アレイIの第7行第1列のメモリ素子I(7,1)に格納されているデータとの積を演算し、この積とアレイG1の第3行第1列のメモリ素子G1(3,1)に格納されているデータとの和を演算し、この和をアレイG1の第3行第1列のメモリ素子G1(3,1)に改めて格納する。引き続いて、アレイW1 1の第5行第1列のメモリ素子W1 1(5,1)に格納されているデータと、アレイIの第8行第1列のメモリ素子I(8,1)に格納されているデータとの積を演算し、この積とアレイG1の第4行第1列のメモリ素子G1(4,1)に格納されているデータとの和を演算し、この和をアレイG1の第4行第1列のメモリ素子G1(4,1)に改めて格納する。その後、アレイW1 1の第5行第1列のメモリ素子W1 1(5,1)に格納されているデータと、アレイIの第9行第1列のメモリ素子I(9,1)に格納されているデータとの積を演算し、この積とアレイG1の第5行第1列のメモリ素子G1(5,1)に格納されているデータとの和を演算し、この和をアレイG1の第5行第1列のメモリ素子G1(5,1)に改めて格納する。これらの処理は、並列に実行することも可能であり、それらを並列に実行すれば処理時間の短縮が図られるという利点が得られる。以上の処理結果を図26Cに示す。
次に、図26Dに示すように、第1の核W1のアレイW1 1の第1行第1列のメモリ素子W1 1(1,1)に格納されているデータと、アレイIの第6行第1列のメモリ素子I(6,1)に格納されているデータとの積を演算し、この積をアレイG1の第6行第1列のメモリ素子G1(6,1)に格納する。続いて、アレイW1 1の第1行第1列のメモリ素子W1 1(1,1)に格納されているデータと、アレイIの第7行第1列のメモリ素子I(7,1)に格納されているデータとの積を演算し、この積をアレイG1の第7行第1列のメモリ素子G1(7,1)に格納する。その後、アレイW1 1の第1行第1列のメモリ素子W1 1(1,1)に格納されているデータと、アレイIの第8行第1列のメモリ素子I(8,1)に格納されているデータとの積を演算し、この積をアレイG1の第8行第1列のメモリ素子G1(8,1)に格納する。引き続き、アレイW1 1の第1行第1列のメモリ素子W1 1(1,1)に格納されているデータと、アレイIの第9行第1列のメモリ素子I(9,1)に格納されているデータとの積を演算し、この積をアレイG1の第9行第1列のメモリ素子G1(9,1)に格納する。その後、アレイW1 1の第1行第1列のメモリ素子W1 1(1,1)に格納されているデータと、アレイIの第10行第1列のメモリ素子I(10,1)に格納されているデータとの積を演算し、この積をアレイG1の第10行第1列のメモリ素子G1(10,1)に格納する。これらの処理は、並列に実行することも可能であり、それらを並列に実行すれば処理時間の短縮が図られるという利点が得られる。
次に、アレイIにおける第7行第1列〜第14行第1列のメモリ素子I(7,1)〜I(14,1)に格納されたデータに対して、第1の核W1のアレイW1 1の第1列に格納されたデータW1 1(1,1)〜W1 1(5,1)を用いて、図26Bおよび図26Cで説明した場合と同様の畳み込み処理を行い、これらの畳み込み処理結果をアレイG1の第7行第1列〜第10行第1列のメモリ素子G1(7,1)〜G1(10,1)に格納する。これらの処理結果を図26Eに示す。
次に、図26Fに示すように、第1の核W1のアレイW1 1の第1列のデータW1 1(1,1)〜W1 1(5,1)を用いて、アレイIの第11行第1列〜第15行第1列のデータI(11,1)〜I(15,1)に対して畳み込み処理を行い、処理結果をアレイG1の第15行第1列のメモリ素子G1(15,1)に格納する。
以上により、アレイW1 1の第1列のメモリ素子W1 1(1,1)〜W1 1(5,1)に格納されているデータと、アレイIの第1列のメモリ素子I(1,1)〜I(15,1)に格納されているデータとの畳み込み処理が完了する。
次に、第1の核W1のアレイW1 1の第2列のメモリ素子W1 1(1,2)〜W1 1(5,2)に格納されてデータを用いて、アレイIの第2列のメモリ素子I(1,2)〜I(15,2)に格納されたデータとの畳み込み処理を行う。この畳み込み処理は、以下のように行われる。
まず、図26Gに示す様に、アレイW1 1の第1行第2列のメモリ素子W1 1(1,2)に格納されているデータと、アレイIの第1行第2列のメモリ素子I(1,2)に格納されているデータとの積を演算し、この積と、アレイG1の第1行第1列のメモリ素子G1(1,1)に格納されているデータとの和を演算し、この和を記憶装置800のアレイG1の第1行第1列のメモリ素子G1(1,1)に改めて格納する。その後、アレイW1 1の第1行第2列のメモリ素子W1 1(1,2)に格納されているデータと、アレイIの第2行第2列のメモリ素子I(2,2)に格納されているデータとの積を演算し、この積とアレイG1の第2行第1列のメモリ素子G1(2,1)に格納されているデータとの和を演算し、この和を記憶装置800のアレイG1の第2行第1列のメモリ素子G1(2,1)に改めて格納する。アレイW1 1の第1行第2列のメモリ素子W1 1(1,2)に格納されているデータと、アレイIの第3行第2列のメモリ素子I(3,2)に格納されているデータとの積を演算し、この積とアレイG1の第3行第1列のメモリ素子G1(3,1)に格納されているデータとの和を演算し、この和をアレイG1の第3行第1列のメモリ素子G1(3,1)に改めて格納する。引き続き、アレイW1 1の第1行第2列のメモリ素子W1 1(1,2)に格納されているデータと、アレイIの第4行第2列のメモリ素子I(4,2)に格納されているデータとの積を演算し、この積とアレイG1の第4行第1列のメモリ素子G1(4,1)に格納されているデータとの和を演算し、この和をアレイG1の第4行第1列のメモリ素子G1(4,1)に改めて格納する。その後、アレイW1 1の第1行第2列のメモリ素子W1 1(1,2)に格納されているデータと、アレイIの第5行第2列のメモリ素子I(5,2)に格納されているデータとの積を演算し、この積とアレイG1の第5行第1列のメモリ素子G1(5,1)に格納されているデータとの和を演算し、この和をアレイG1の第5行第1列のメモリ素子G1(5,1)に改めて格納する。これらの処理結果を図26Gに示す。これらの処理は、並列に実行することも可能であり、それらを並列に実行すれば処理時間の短縮が図られるという利点が得られる。
次に、図26B乃至図26Fで説明した場合と同様にして、アレイW1 1の第2列のメモリ素子W1 1(1,2)〜W1 1(5,2)に格納されてデータを用いて、アレイIの第2列のメモリ素子I(1,2)〜I(15,2)に格納されたデータに対する畳み込み処理を行う。この畳み込み処理の結果は、アレイG1の第1行第1列乃至第11行第1列のメモリ素子G1(1,1)〜G1(11,1)に格納される。
次に、図26Gで説明した場合と同様にして、レイW1 1の第3列のメモリ素子W1 1(1,3)〜W1 1(5,3)に格納されてデータを用いて、アレイIの第3列のメモリ素子I(1,3)〜I(15,3)に格納されたデータに対する畳み込み処理を行う。この畳み込み処理の結果は、アレイG1の第1行第1列乃至第11行第1列のメモリ素子G1(1,1)〜G1(11,1)に格納される。その後、図26Gで説明した場合と同様にして、レイW1 1の第4列のメモリ素子W1 1(1,4)〜W1 1(5,4)に格納されてデータを用いて、アレイIの第4列のメモリ素子I(1,4)〜I(15,4)に格納されたデータに対する畳み込み処理を行う。この畳み込み処理の結果は、アレイG1の第1行第1列乃至第11行第1列のメモリ素子G1(1,1)〜G1(11,1)に格納される。引き続き、図26Gで説明した場合と同様にして、レイW1 1の第5列のメモリ素子W1 1(1,5)〜W1 1(5,5)に格納されてデータを用いて、アレイIの第5列のメモリ素子I(1,5)〜I(15,5)に格納されたデータに対する畳み込み処理を行う。この畳み込み処理の結果は、アレイG1の第1行第1列乃至第11行第1列のメモリ素子G1(1,1)〜G1(11,1)に格納される。
以上により、第1の核W1のアレイW1 1を用いて、アレイIの第1列〜第5列のメモリ素子I(1,1)〜I(15,5)に格納されたデータに対する畳み込み処理が完了する。この処理結果を図26Hに示す。
次に、第1の核W1のアレイW1 1を用いて、アレイIの第2列〜第6列のメモリ素子I(1,2)〜I(15,6)に格納されたデータに対する畳み込み処理を、図26A乃至図26Hで説明した場合と同様にして行う。この処理結果は図26Iに示すように、アレイG1の第2列のメモリ素子G1(1、2)〜G1(11,2)に格納される。
続いて、アレイW1 1を用いて、アレイIの第3列〜第7列のメモリ素子I(1,3)〜I(15,7)に格納されたデータに対する畳み込み処理を、図26A乃至図26Hで説明した場合と同様にして行う。処理結果は、アレイG1の第3列のメモリ素子G1(1、3)〜G1(11,3)に格納される。その後、アレイW1 1を用いて、アレイIの第4列〜第8列のメモリ素子I(1,4)〜I(15,8)に格納されたデータに対する畳み込み処理を、図26A乃至図26Hで説明した場合と同様にして行う。処理結果は、アレイG1の第4列のメモリ素子G1(1、4)〜G1(11,4)に格納される。引き続き、アレイW1 1を用いて、アレイIの第5列〜第9列のメモリ素子I(1,5)〜I(15,9)に格納されたデータに対する畳み込み処理を、図26A乃至図26Hで説明した場合と同様にして行う。処理結果は、アレイG1の第5列のメモリ素子G1(1、5)〜G1(11,5)に格納される。続いて、アレイW1 1を用いて、アレイIの第6列〜第10列のメモリ素子I(1,6)〜I(15,10)に格納されたデータに対する畳み込み処理を、図26A乃至図26Hで説明した場合と同様にして行う。処理結果は、アレイG1の第6列のメモリ素子G1(1、6)〜G1(11,6)に格納される。その後、アレイW1 1を用いて、アレイIの第7列〜第11列のメモリ素子I(1,7)〜I(15,11)に格納されたデータに対する畳み込み処理を、図26A乃至図26Hで説明した場合と同様にして行う。処理結果は、アレイG1の第7列のメモリ素子G1(1、7)〜G1(11,7)に格納される。続いて、アレイW1 1を用いて、アレイIの第8列〜第12列のメモリ素子I(1,8)〜I(15,12)に格納されたデータに対する畳み込み処理を、図26A乃至図26Hで説明した場合と同様にして行う。処理結果は、アレイG1の第8列のメモリ素子G1(1、8)〜G1(11,8)に格納される。その後、アレイW1 1を用いて、アレイIの第9列〜第13列のメモリ素子I(1,9)〜I(15,13)に格納されたデータに対する畳み込み処理を、図26A乃至図26Hで説明した場合と同様にして行う。処理結果は、アレイG1の第9列のメモリ素子G1(1、9)〜G1(11,9)に格納される。引き続き、アレイW1 1を用いて、アレイIの第10列〜第14列のメモリ素子I(1,10)〜I(15,14)に格納されたデータに対する畳み込み処理を、図26A乃至図26Hで説明した場合と同様にして行う。処理結果は、アレイG1の第10列のメモリ素子G1(1、10)〜G1(11,10)に格納される。続いて、アレイW1 1を用いて、アレイIの第11列〜第15列のメモリ素子I(1,11)〜I(15,15)に格納されたデータに対する畳み込み処理を、図26A乃至図26Hで説明した場合と同様にして行う。処理結果は、アレイG1の第11列のメモリ素子G1(1、11)〜G1(11,11)に格納される。これらの処理結果を図26Jに示す。
以上により、第1の核W1のアレイW1 1を用いて、アレイIのメモリ素子I(1,1)〜I(15,15)に格納されたデータに対する畳み込み処理が完了する。
次に、第2の核W2のアレイW2 1を用いてアレイIのメモリ素子I(1,1)〜I(15,15)に格納されたデータに対する畳み込み処理を、図26A乃至図26Jで説明した場合と同様に行う。この畳み込み処理の結果はアレイG2のメモリ素子G2(1,1)〜G2(11,11)に格納される。続いて、第3の核W3のアレイW3 1を用いてアレイIのメモリ素子I(1,1)〜I(15,15)に格納されたデータに対する畳み込み処理を、図26A乃至図26Jで説明した場合と同様に行う。この畳み込み処理の結果はアレイG3のメモリ素子G3(1,1)〜G3(11,11)に格納される。その後、第4の核W4のアレイW4 1を用いてアレイIのメモリ素子I(1,1)〜I(15,15)に格納されたデータに対する畳み込み処理を、図26A乃至図26Jで説明した場合と同様に行う。この畳み込み処理の結果はアレイG4のメモリ素子G4(1,1)〜G4(11,11)に格納される。引き続き、第5の核W5のアレイW5 1を用いてアレイIのメモリ素子I(1,1)〜I(15,15)に格納されたデータに対する畳み込み処理を、図26A乃至図26Jで説明した場合と同様に行う。この畳み込み処理の結果はアレイG5のメモリ素子G5(1,1)〜G5(11,11)に格納される。その後、第6の核W6のアレイW6 1を用いてアレイIのメモリ素子I(1,1)〜I(15,15)に格納されたデータに対する畳み込み処理を、図26A乃至図26Jで説明した場合と同様に行う。この畳み込み処理の結果はアレイG6のメモリ素子G6(1,1)〜G6(11,11)に格納される。続いて、第7の核W7のアレイW7 1を用いてアレイIのメモリ素子I(1,1)〜I(15,15)に格納されたデータに対する畳み込み処理を、図26A乃至図26Jで説明した場合と同様に行う。この畳み込み処理の結果はアレイG7のメモリ素子G7(1,1)〜G7(11,11)に格納される。これらの処理結果を図26Kに示す。
これまでの処理に依り、第1乃至第7の核W1〜W7のそれぞれの第1アレイW1 1〜W7 1を用いてアレイIのメモリ素子I(1,1)〜I(15,15)に格納されたデータに対する畳み込み処理が完了する。なお、記憶装置800のアレイG1〜G7のそれぞれのメモリ素子にデータを格納する処理において、記憶装置800の異なるアレイに格納する処理を並列に行うことが可能である。並列に処理を行えば処理時間の短縮が図られるという利点が得られる。
次に、図27に示すように、外部記憶装置600におけるアレイE2のそれぞれのメモリ素子からデータを読み出し、アレイIの対応するメモリ素子に格納する。すなわち、アレイIにはアレイE2と同じデータが格納される。
続いて、図26A乃至図26Kで説明した場合と同様に、第1乃至第7の核W1〜W7のそれぞれの第2のアレイW1 2〜W7 2を用いてアレイIのメモリ素子I(1,1)〜I(15,15)に格納されたデータに対する畳み込み処理を行う。この畳み込み処理の結果は、アレイG1〜G7のメモリ素子に格納される。この場合、第i(i=1,・・・,7)のアレイWi 2のメモリ素子とアレイIのメモリ素子との積は、この積が格納されるアレイGiのメモリ素子のデータと上記積との和が演算され、この和がアレイGiのメモリ素子に改めて格納されるように処理される。なお、記憶装置800のアレイG1〜G7のそれぞれのメモリ素子にデータを格納する処理において、記憶装置800の異なるアレイに格納する処理を並列に行うことが可能である。並列に処理を行えば処理時間の短縮が図られるという利点が得られる。
次に、図28に示すように、外部記憶装置600におけるアレイE3のそれぞれのメモリ素子からデータを読み出し、アレイIの対応するメモリ素子に格納する。すなわち、アレイIにはアレイE3と同じデータが格納される。
続いて、図26A乃至図26Kで説明した場合と同様に、第1乃至第7の核W1〜W7のそれぞれの第3のアレイW1 3〜W7 3を用いてアレイIのメモリ素子I(1,1)〜I(15,15)に格納されたデータに対する畳み込み処理を行う。この畳み込み処理の結果は、アレイG1〜G7のメモリ素子に格納される。この場合、第i(i=1,・・・,7)のアレイWi 3のメモリ素子とアレイIのメモリ素子との積は、この積が格納されるアレイGiのメモリ素子のデータと上記積との和が演算され、この和がアレイGiのメモリ素子に改めて格納されるように処理される。なお、記憶装置800のアレイG1〜G7のそれぞれのメモリ素子にデータを格納する処理において、記憶装置800の異なるアレイに格納する処理を並列に行うことが可能である。並列に処理を行えば処理時間の短縮が図られるという利点が得られる。
次に、記憶装置800のアレイGi(i=1,・・・,7)のメモリ素子Gi(1,1)〜Gi(11,11)のそれぞれに対して、上記メモリ素子に格納されているデータと、バイアス値Biとの和を求め、例えばRectified Linear Unit等の発火関数処理等を必要に応じて施した数値を改めて上記メモリ素子に格納する。なお、この処理において、記憶装置800の異なるアレイに格納する処理は、並列に処理を行うことが可能である。並列に処理を行えば処理時間の短縮が図られるという利点が得られる。
以上の処理により、第1乃至第7の核W1〜W7を用いた、外部記憶装置600に格納されたデータと同じデータに対する畳み込み処理が完了する。
本変形例に於いては、記憶装置700Bは、行方向乃至列方向には外部記憶装置600のアレイE1〜E3のそれぞれと同じ大きさのアレイIを有していたが、これに限るものではない。例えば、行方向乃至列方向には外部記憶装置600のアレイE1〜E3のそれぞれよりも大きなサイズのアレイを有していてもよい。但し、行方向乃至列方向には外部記憶装置600のアレイE1〜E3のそれぞれと同じ大きさのアレイIを有している場合は、記憶装置700Bの容量の削減の効果が最も大きくなるという利点が得られる。
(第3変形例)
図24に示す第2変形例においては、記憶装置700Bは、行方向および列方向には外部記憶装置のアレイと等しい大きさを持ち、深さ方向は、外部記憶装置600のアレイE1〜E3よりも枚数の少ないアレイIを有していたが、図29に示すように、行方向がアレイE1〜E3のそれぞれと同じ大きさで、列方向が畳み込み処理に用いる核と同じ大きさを有し、アレイE1〜E3よりも枚数の少ないアレイJを有していてもよい。この場合は、更に記憶装置が削減されるので回路面積の更なる縮小が可能となる。この例を第3実施形態の第3変形例として説明する。
この第3変形例による演算処理装置を図29に示す。この第3変形例の演算処理装置は、図24に示す第2変形例において、記憶装置700Bを記憶装置700Cに置き換えた構成を有している。記憶装置700Cは、15行5列のメモリ素子を有するアレイJを備えている。記憶装置700Cは、複数枚のアレイを備えていてもよい。
(動作)
次に、第3変形例の動作について図30乃至図32Jを参照して説明する。
まず、図30に示す様に、記憶装置600のアレイE1の第1列〜第5列のメモリ素子E1(1,1)〜E1(15,5)に格納されているデータを読み出し、記憶装置700CのアレイJに格納する。これにより、mを1以上15以下の整数、nを1以上5以下の整数とすると、アレイE1の第m行第n列のメモリ素子E1(m,n)に格納されたデータは、アレイJの第m行第n列のメモリ素子J(m,n)に格納される。
次に、図21A乃至図21Cで説明した処理と同様の処理を施すことに依り、第1の核W1のアレイW1 1のデータW1 1(1,1)〜W1 1(5,5)を用いてアレイJの第1列乃至第5列のデータJ(1,1)〜J(15,5)に対する畳み込み処理を行う。アレイW1 1を用いた畳み込み処理の結果が図31Aに示すように、記憶装置800のアレイG1の第1列のメモリ素子G1(1,1)〜G1(15,1)に格納される。
次に、第i(i=2,・・・,7)の核Wiにおける第1のアレイWi 1のデータWi 1(1,1)〜Wi 1(5,5)を用いてアレイJの第1列乃至第5列のデータJ(1,1)〜J(15,5)に対する畳み込み処理を行う。第i(i=2,・・・,7)の核WiにおけるアレイWi 1を用いた畳み込み処理の結果が図31Bに示すように、記憶装置800のアレイGiの第1列のメモリ素子に格納される。
以上の処理により、第1乃至第7の核W1〜W7のそれぞれの第1のアレイW1 1〜W7 1のそれぞれを用いたアレイJの第1列乃至第5列のデータJ(1,1)〜J(15,5)に対する畳み込み処理が完了する。記憶装置800のアレイG1〜G7のそれぞれの第1列に格納する処理において、異なるアレイの第1列に格納する処理は並列に行うことも可能である。並列に処理を行うことにより処理時間の短縮が図られるという利点が得られる。
次に、図32Aに示すように、アレイE1における第6列のメモリ素子E1(1,6)〜E(15,6)のデータを読み出し、アレイJの第1列のメモリ素子J(1,1)〜J(15,1)に格納する。このとき、アレイJの第2列のメモリ素子にはアレイE1における第2列のメモリ素子のデータが格納されており、アレイJの第3列のメモリ素子にはアレイE1における第3列のメモリ素子のデータが格納されており、アレイJの第4列のメモリ素子にはアレイE1における第4列のメモリ素子のデータが格納されており、アレイJの第5列のメモリ素子にはアレイE1における第5列のメモリ素子のデータが格納されている。
続いて、図31Aおよび図31Bで説明した処理と同様に、第i(i=1,・・・,7)の核Wiに格納されているデータを用いて、アレイJに格納されているデータに対して畳み込み処理を行い、この畳み込み処理の結果をアレイGiの第2列のメモリ素子Gi(1,2)〜Gi(11,2)に格納する。なお、この畳み込み処理は、図32Bに示すように、第i(i=1,・・・,7)の核Wiにおける第1のアレイWi 1の第1列のデータとアレイJの第2列のデータとの畳み込み処理が行われ、アレイWi 1の第2列のデータとアレイJの第3列のデータとの畳み込み処理が行われ、アレイWi 1の第3列のデータとアレイJの第4列のデータとの畳み込み処理が行われ、アレイWi 1の第4列のデータとアレイJの第5列のデータとの畳み込み処理が行われ、アレイWi 1の第5列のデータとアレイJの第1列のデータとの畳み込み処理が行われる。記憶装置800のアレイG1〜G7のそれぞれの第2列に格納する処理において、異なるアレイの第2列に格納する処理は並列に並列に行うことも可能である。並列に処理を行うことにより処理時間の短縮が図られるという利点が得られる。
次に、図32Cに示すように、アレイE1における第7列のメモリ素子E1(1,7)〜E(15,7)のデータを読み出し、アレイJの第2列のメモリ素子J(1,2)〜J(15,2)に格納する。このとき、アレイJの第1列のメモリ素子にはアレイE1における第6列のメモリ素子のデータが格納されており、アレイJの第3列のメモリ素子にはアレイE1における第3列のメモリ素子のデータが格納されており、アレイJの第4列のメモリ素子にはアレイE1における第4列のメモリ素子のデータが格納されており、アレイJの第5列のメモリ素子にはアレイE1における第5列のメモリ素子のデータが格納されている。
続いて、図31Aおよび図31Bで説明した処理と同様に、第i(i=1,・・・,7)の核Wiに格納されているデータを用いて、アレイJに格納されているデータに対して畳み込み処理を行い、この畳み込み処理の結果をアレイGiの第3列のメモリ素子Gi(1,3)〜Gi(11,3)に格納する。なお、この畳み込み処理は、図32Dに示すように、第i(i=1,・・・,7)の核Wiにおける第1のアレイWi 1の第1列のデータとアレイJの第3列のデータとの畳み込み処理が行われ、アレイWi 1の第2列のデータとアレイJの第4列のデータとの畳み込み処理が行われ、アレイWi 1の第3列のデータとアレイJの第5列のデータとの畳み込み処理が行われ、アレイWi 1の第4列のデータとアレイJの第1列のデータとの畳み込み処理が行われ、アレイWi 1の第5列のデータとアレイJの第2列のデータとの畳み込み処理が行われる。記憶装置800のアレイG1〜G7のそれぞれの第3列に格納する処理において、異なるアレイの第3列に格納する処理は並列に並列に行うことも可能である。並列に処理を行うことにより処理時間の短縮が図られるという利点が得られる。
次に、図32Eに示すように、アレイE1における第8列のメモリ素子E1(1,8)〜E(15,8)のデータを読み出し、アレイJの第3列のメモリ素子J(1,3)〜J(15,3)に格納する。このとき、アレイJの第1列のメモリ素子にはアレイE1における第6列のメモリ素子のデータが格納されており、アレイJの第2列のメモリ素子にはアレイE1における第7列のメモリ素子のデータが格納されており、アレイJの第4列のメモリ素子にはアレイE1における第4列のメモリ素子のデータが格納されており、アレイJの第5列のメモリ素子にはアレイE1における第5列のメモリ素子のデータが格納されている。
続いて、図31Aおよび図31Bで説明した処理と同様に、第i(i=1,・・・,7)の核Wiに格納されているデータを用いて、アレイJに格納されているデータに対して畳み込み処理を行い、この畳み込み処理の結果をアレイGiの第4列のメモリ素子Gi(1,4)〜Gi(11,4)に格納する。なお、この畳み込み処理は、図32Fに示すように、第i(i=1,・・・,7)の核Wiにおける第1のアレイWi 1の第1列のデータとアレイJの第4列のデータとの畳み込み処理が行われ、アレイWi 1の第2列のデータとアレイJの第5列のデータとの畳み込み処理が行われ、アレイWi 1の第3列のデータとアレイJの第1列のデータとの畳み込み処理が行われ、アレイWi 1の第4列のデータとアレイJの第2列のデータとの畳み込み処理が行われ、アレイWi 1の第5列のデータとアレイJの第3列のデータとの畳み込み処理が行われる。記憶装置800のアレイG1〜G7のそれぞれの第4列に格納する処理において、異なるアレイの第4列に格納する処理は並列に並列に行うことも可能である。並列に処理を行うことにより処理時間の短縮が図られるという利点が得られる。
次に、図32Gに示すように、アレイE1における第9列のメモリ素子E1(1,9)〜E(15,9)のデータを読み出し、アレイJの第4列のメモリ素子J(1,4)〜J(15,4)に格納する。このとき、アレイJの第1列のメモリ素子にはアレイE1における第6列のメモリ素子のデータが格納されており、アレイJの第2列のメモリ素子にはアレイE1における第7列のメモリ素子のデータが格納されており、アレイJの第3列のメモリ素子にはアレイE1における第8列のメモリ素子のデータが格納されており、アレイJの第5列のメモリ素子にはアレイE1における第5列のメモリ素子のデータが格納されている。
続いて、図31Aおよび図31Bで説明した処理と同様に、第i(i=1,・・・,7)の核Wiに格納されているデータを用いて、アレイJに格納されているデータに対して畳み込み処理を行い、この畳み込み処理の結果をアレイGiの第5列のメモリ素子Gi(1,5)〜Gi(11,5)に格納する。なお、この畳み込み処理は、図32Hに示すように、第i(i=1,・・・,7)の核Wiにおける第1のアレイWi 1の第1列のデータとアレイJの第5列のデータとの畳み込み処理が行われ、アレイWi 1の第2列のデータとアレイJの第1列のデータとの畳み込み処理が行われ、アレイWi 1の第3列のデータとアレイJの第2列のデータとの畳み込み処理が行われ、アレイWi 1の第4列のデータとアレイJの第3列のデータとの畳み込み処理が行われ、アレイWi 1の第5列のデータとアレイJの第4列のデータとの畳み込み処理が行われる。記憶装置800のアレイG1〜G7のそれぞれの第5列に格納する処理において、異なるアレイの第5列に格納する処理は並列に並列に行うことも可能である。並列に処理を行うことにより処理時間の短縮が図られるという利点が得られる。
次に、図32Iに示すように、アレイE1における第10列のメモリ素子E1(1,10)〜E(15,10)のデータを読み出し、アレイJの第5列のメモリ素子J(1,5)〜J(15,5)に格納する。このとき、アレイJの第1列のメモリ素子にはアレイE1における第6列のメモリ素子のデータが格納されており、アレイJの第2列のメモリ素子にはアレイE1における第7列のメモリ素子のデータが格納されており、アレイJの第3列のメモリ素子にはアレイE1における第8列のメモリ素子のデータが格納されており、アレイJの第4列のメモリ素子にはアレイE1における第9列のメモリ素子のデータが格納されている。
続いて、図31Aおよび図31Bで説明した処理と同様に、第i(i=1,・・・,7)の核Wiに格納されているデータを用いて、アレイJに格納されているデータに対して畳み込み処理を行い、この畳み込み処理の結果をアレイGiの第6列のメモリ素子Gi(1,6)〜Gi(11,6)に格納する。なお、この畳み込み処理は、図32Jに示すように、第i(i=1,・・・,7)の核Wiにおける第1のアレイWi 1の第1列のデータとアレイJの第1列のデータとの畳み込み処理が行われ、アレイWi 1の第2列のデータとアレイJの第2列のデータとの畳み込み処理が行われ、アレイWi 1の第3列のデータとアレイJの第3列のデータとの畳み込み処理が行われ、アレイWi 1の第4列のデータとアレイJの第4列のデータとの畳み込み処理が行われ、アレイWi 1の第5列のデータとアレイJの第5列のデータとの畳み込み処理が行われる。記憶装置800のアレイG1〜G7のそれぞれの第6列に格納する処理において、異なるアレイの第6列に格納する処理は並列に並列に行うことも可能である。並列に処理を行うことにより処理時間の短縮が図られるという利点が得られる。
以上により、第1乃至第7の核W1〜W7のそれぞれの第1のアレイW1 1〜W1 7を用い、外部記憶装置600のアレイE1の第1乃至第10列のメモリ素子に格納されたデータに対する畳み込み処理が完了する。
次に、外部記憶装置600のアレイE1の第11列のメモリ素子に格納されたデータを読み出し、この読み出しデータを図32Aに示すように、記憶装置700CのアレイJの第1列のメモリ素子に格納する。続いて、図32Bで説明した場合と同様に、第i(i=1,・・・,7)の核Wiにおける第1のアレイWi 1を用いてアレイJのメモリ素子J(1,1)〜J(15,5)に格納されているデータに対する畳み込み処理を行い、アレイGiの第7列のメモリ素子Gi(1,7)〜Gi(11,7)に格納する。続いて、アレイE1の第12列のメモリ素子に格納されたデータを読み出し、この読み出しデータを図32Cに示すように、記憶装置700CのアレイJの第2列のメモリ素子に格納する。続いて、図32Dで説明した場合と同様に、第i(i=1,・・・,7)の核Wiにおける第1のアレイWi 1を用いてアレイJのメモリ素子J(1,1)〜J(15,5)に格納されているデータに対する畳み込み処理を行い、アレイGiの第8列のメモリ素子Gi(1,8)〜Gi(11,8)に格納する。その後、アレイE1の第13列のメモリ素子に格納されたデータを読み出し、この読み出しデータを図32Eに示すように、記憶装置700CのアレイJの第3列のメモリ素子に格納する。続いて、図32Fで説明した場合と同様に、第i(i=1,・・・,7)の核Wiにおける第1のアレイWi 1を用いてアレイJのメモリ素子J(1,1)〜J(15,5)に格納されているデータに対する畳み込み処理を行い、アレイGiの第9列のメモリ素子Gi(1,9)〜Gi(11,9)に格納する。引き続き、アレイE1の第14列のメモリ素子に格納されたデータを読み出し、この読み出しデータを図32Gに示すように、記憶装置700CのアレイJの第4列のメモリ素子に格納する。続いて、図32Hで説明した場合と同様に、第i(i=1,・・・,7)の核Wiにおける第1のアレイWi 1を用いてアレイJのメモリ素子J(1,1)〜J(15,5)に格納されているデータに対する畳み込み処理を行い、アレイGiの第10列のメモリ素子Gi(1,10)〜Gi(11,10)に格納する。その後、アレイE1の第15列のメモリ素子に格納されたデータを読み出し、この読み出しデータを図32Iに示すように、記憶装置700CのアレイJの第5列のメモリ素子に格納する。続いて、図32Jで説明した場合と同様に、第i(i=1,・・・,7)の核Wiにおける第1のアレイWi 1を用いてアレイJのメモリ素子J(1,1)〜J(15,5)に格納されているデータに対する畳み込み処理を行い、アレイGiの第11列のメモリ素子Gi(1,11)〜Gi(11,11)に格納する。
以上により、第1乃至第7の核W1〜W7のそれぞれの第1のアレイW1 1〜W7 1を用いた、外部記憶装置600のアレイE1に格納されたデータと同じデータに対する畳み込み処理が完了する。
次に、第1乃至第7の核W1〜W7のそれぞれの第j(j=2、3)のアレイW1 j〜W7 jを用いた、外部記憶装置600のアレイEj(j=2、3)に格納されたデータと同じデータに対する畳み込み処理を図31A乃至図32Jで説明した処理および図32Jで説明した以降の処理と同様に行う。この処理において演算された積は、この積が格納されるべきアレイG1〜G7のメモリ素子に格納されたデータとの和が演算され。この和が上記格納されるべきアレイG1〜G7のメモリ素子に改めて格納されるように処理される。
以上の処理により、第1乃至第7の核W1〜W7を用いた、外部記憶装置600のアレイE1〜E3に格納されたデータと同じデータに対する畳み込み処理が完了する。
次に、m、nを1以上11以下の整数とした場合、アレイGi(i=1,・・・,7)のm行n列のメモリ素子Gi(m,n)に対して、バイアス値Biとの和を求め、例えばRectified Linear Unit等の発火関数処理等を必要に応じて施した数値を改めて上記メモリ素子Gi(m,n)に改めて格納する。これらの処理において、記憶装置800の異なるアレイに格納する場合の処理を並列に行うことも可能である。並列に処理を行うことにより処理時間の短縮が図られるという利点が得られる。
第3変形例においては、記憶装置700Cは、行方向が外部記憶装置600のアレイE1〜E3のそれぞれと同じ大きさを有し、列方向が畳み込み処理に用いる核と同じ大きさを有するアレイJを備えていたが、これに限るものではない。例えば、行方向はアレイE1〜E3のそれぞれよりも大きく、列方向は畳み込み処理に用いる核の列方向の大きさよりも大きいアレイを用いてもよい。但し、第3変形例のように、行方向はアレイE1〜E3のそれぞれと同じ大きさを有し、列方向は畳み込み処理に用いる核の列方向大きさと同じであるアレイJを用いた場合は、記憶装置の個数の削減の効果が最も大きくなるという利点が得られる。
第3変形例においては、記憶装置700Cは、行方向がアレイE1〜E3のそれぞれと同じ大きさを持ち、列方向が畳み込み処理に用いる核の列方向と同じ大きさを持ち、アレイE1〜E3よりも少ない枚数のアレイを備えていたが、これに限るものではない。例えば、図33に示すように、列方向がアレイE1〜E3のそれぞれの列方向と同じ大きさを有し、行方向が畳み込み処理に用いる核の行方向の大きさと同じ大きさを持ち、アレイE1〜E3よりも少ない枚数のアレイを備えていても良い。この場合には図30乃至図32Jを用いて説明した処理において行方向の座標と列方向の座標とを入れ替えた処理を施すことに依り、記憶装置800を構成する全ての記憶装置に、アレイE1〜E3に対して必要な畳み込み処理の為された数値が格納される。
以上説明したように、第3実施形態およびその変形例によれば、記憶装置の容量が従来の場合に比べて小さくすることが可能となり、占有面積が小さい演算処理装置を提供することができる。
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これらの実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これらの実施形態やその変形は、発明の範囲や要旨に含まれると同様に、特許請求の範囲に記載された発明とその均等の範囲に含まれるものである。