JP6839641B2 - 演算処理装置 - Google Patents

演算処理装置 Download PDF

Info

Publication number
JP6839641B2
JP6839641B2 JP2017222293A JP2017222293A JP6839641B2 JP 6839641 B2 JP6839641 B2 JP 6839641B2 JP 2017222293 A JP2017222293 A JP 2017222293A JP 2017222293 A JP2017222293 A JP 2017222293A JP 6839641 B2 JP6839641 B2 JP 6839641B2
Authority
JP
Japan
Prior art keywords
array
stored
column
storage device
memory element
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.)
Active
Application number
JP2017222293A
Other languages
English (en)
Other versions
JP2019095862A (ja
Inventor
小野 瑞城
瑞城 小野
光介 辰村
光介 辰村
雅也 山崎
雅也 山崎
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Toshiba Corp
Original Assignee
Toshiba Corp
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Toshiba Corp filed Critical Toshiba Corp
Priority to JP2017222293A priority Critical patent/JP6839641B2/ja
Priority to US15/917,076 priority patent/US20190156188A1/en
Publication of JP2019095862A publication Critical patent/JP2019095862A/ja
Application granted granted Critical
Publication of JP6839641B2 publication Critical patent/JP6839641B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/06Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
    • G06N3/063Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • G06F17/15Correlation function computation including computation of convolution operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • G06N3/045Combinations of networks

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Data Mining & Analysis (AREA)
  • Mathematical Physics (AREA)
  • Computing Systems (AREA)
  • Health & Medical Sciences (AREA)
  • Biophysics (AREA)
  • Software Systems (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • General Engineering & Computer Science (AREA)
  • Biomedical Technology (AREA)
  • Pure & Applied Mathematics (AREA)
  • Mathematical Optimization (AREA)
  • Mathematical Analysis (AREA)
  • Computational Mathematics (AREA)
  • Computational Linguistics (AREA)
  • Artificial Intelligence (AREA)
  • Evolutionary Computation (AREA)
  • Molecular Biology (AREA)
  • General Health & Medical Sciences (AREA)
  • Neurology (AREA)
  • Algebra (AREA)
  • Databases & Information Systems (AREA)
  • Complex Calculations (AREA)
  • Advance Control (AREA)

Description

本発明の実施形態は、演算処理装置に関する。
従来、複数の処理層の畳み込みニューラルネットワークを実現する演算処理装置は、処理層ごとにその出力の全てを格納する記憶装置を有しており、各処理層の処理を全て行ってその全ての出力をその記憶装置に格納し、その格納されている数値を用いて次の処理層の処理を行っている。
また、複数の処理層の畳み込みニューラルネットワークを実現する演算処理装置は、外部にある記憶装置(外部記憶装置とも云う)に記憶されている数値を複数の処理に用いる場合、すなわち複数回に渡って用いる場合にその度ごとに外部記憶装置より読み出していた。
従来の演算処理装置は、後述するように、チップ占有面積が大きく、かつ動作速度が遅いという問題があった。
特開2015−210709号公報
本実施形態は、占有面積が小さい演算処理装置を提供する。
本実施形態による演算処理装置は、第1方向および前記第1方向に交差する第2方向に配列されたメモリ素子を有する第1アレイを少なくとも1つ備えた第1記憶装置と、前記第1方向に配列されたメモリ素子を有する第2アレイを少なくとも1つ備える第2記憶装置と、前記第1方向および前記第2方向に配列されたメモリ素子を有する第3アレイを少なくとも1つ備え、前記第3アレイは、前記第1方向に配列されたメモリ素子が前記第1アレイの前記第1方向に配列されたメモリ素子の個数よりも少なくかつ前記第2方向に配列されたメモリ素子の個数が前記第1アレイの前記第2方向に配列されたメモリ素子の個数よりも少ない第3記憶装置と、前記第3アレイの前記メモリ素子に格納されたデータを用いて、前記第1アレイの前記メモリ素子に格納されたデータに対して畳み込み処理を行い、前記畳み込み処理の結果を前記第2アレイのメモリ素子に格納する第1処理層と、を備えている。
従来の演算処理装置の問題点を説明する模式図。 従来の演算処理装置の問題点を説明する模式図。 第1実施形態による演算処理装置を示すブロック図。 第1実施形態の演算処理装置を説明する図。 図5A乃至図5Qは、第1実施形態における畳み込み処理を説明する図。 図6A乃至図6Fは、第1実施形態におけるプーリング処理を説明する図。 第1実施形態における畳み込み処理の一部を説明する図。 図8A乃至図8Fは、第1実施形態におけるプーリング処理の一部を説明する図。 図9A乃至図9Fは、第1実施形態におけるプーリング処理の一部を説明する図。 第1実施形態におけるプーリング処理の一部を説明する図。 第1実施形態におけるプーリング処理の一部を説明する図。 第2実施形態による演算処理装置を示す図。 図13A乃至図13Lは、第2実施形態における畳み込みの一部を説明する図。 図14A乃至図14Mは、第2実施形態における畳み込みの一部を説明する図。 第1または第2実施形態の第1変形例による演算処理装置を示す図。 第1または第2実施形態の第2変形例による演算処理装置を示す図。 第1または第2実施形態の第3変形例による演算処理装置を示す図。 第3実施形態による演算処理装置を示す図。 第3実施形態の第1変形例による演算処理装置を示す図。 第3実施形態の第1変形例の動作を説明する図。 図21A乃至図21Eは、第3実施形態の第1変形例の動作を説明する図。 図22A乃至図22Kは、第3実施形態の第1変形例の動作を説明する図。 第3実施形態の第1変形例の他の例による演算処理装置を示す図。 第3実施形態の第2変形例による演算処理装置を示す図。 第3実施形態の第2変形例の動作を説明する図。 図26A乃至図26Kは、第3実施形態の第2変形例の動作を説明する図。 第3実施形態の第2変形例の動作を説明する図。 第3実施形態の第2変形例の動作を説明する図。 第3実施形態の第3変形例による演算処理装置を示す図。 第3実施形態の第3変形例の動作を説明する図。 図31Aおよび図31Bは、第3実施形態の第3変形例の動作を説明する図。 図32A乃至図32Jは、第3実施形態の第3変形例の動作を説明する図。 第3実施形態の第3変形例の他の例による演算処理装置を示す図。
本発明の実施形態を説明する前に、本発明に至った経緯について説明する。
まず、複数の処理層の畳み込みニューラルネットワーク(Convolutional Neural Network)を実現する従来の演算処理装置の一例の概要を図1および図2を参照して説明する。この演算処理装置は、記憶装置100と、記憶装置200と、記憶装置300と、処理層400と、処理層500と、を備えている。記憶装置100は、7組のアレイA〜Aを有し、各アレイA(i=1,・・・,7)は、11行×11列に配置されたメモリ素子を有している。アレイA〜Aは、各アレイが配置された面内方向に交差する方向(深さ方向)に、7個配置されている。各アレイA(i=1,・・・,7)の第j(j=1,・・・,11)行第k(k=1,・・・、11)列のメモリ素子をA(j,k)と表す。このA(j,k)はアレイA(i=1,・・・,7)の第j行第k列のメモリ素子に格納される数値も表す。記憶装置200は、10組のアレイB〜B10を有し、各アレイB(i=1,・・・,10)は、8行×8列に配置されたメモリ素子を有している。各アレイB(i=1,・・・,10)の第j(j=1,・・・8)行第k(k=1,・・・,8)列のメモリ素子をB(j,k)と表す。このB(j,k)は、アレイB(i=1,・・・,10)の第j行第k列のメモリ素子に格納される数値も表す。記憶装置300は、10組のアレイC〜C10を有し、各アレイC(i=1,・・・,10)は、6行×6列に配置されたメモリ素子を有している。各アレイC(i=1,・・・,10)の第j(j=1,・・・,6)行第k(k=1,・・・,6)列のメモリ素子をC(j,k)と表す。このC(j,k)は、アレイC(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のそれぞれの核は、A〜Aと同様に、各アレイが配置された面内方向に交差する方向(深さ方向)に、7個配置されている。すなわち第1乃至第10の核のそれぞれは、4行4列のアレイが7個存在する。上記第1乃至第10の核をそれぞれ用いた積和演算を行う。例えば、第1の核を用いた積和演算は以下のように行われる。第1の核における深さ1のメモリ素子に格納された数値と、斜線で示すメモリ素子A(4,2)〜A(7,5)との対応するメモリ素子同士に格納されている数値の積を演算し、これらの積の和を記憶装置200の対応するアレイの対応する斜線で示すメモリ素子B(4,2)に格納する。例えば、第1の核における深さ1の第1行第1列のメモリ素子に格納された数値とメモリ素子A(4,2)に格納された数値との積、第1の核の第2行第1列のメモリ素子に格納された数値とメモリ素子A(5,2)に格納された数値との積、第1の核の第3行第1列のメモリ素子に格納された数値とメモリ素子A(6,2)に格納された数値との積、第1の核の第4行第1列のメモリ素子に格納された数値とメモリ素子A(7,2)に格納された数値との積とをそれぞれ演算する。同様に、第1の核の第2列のメモリ素子にそれぞれ格納された数値とアレイAの第4行第3列〜第7行第3列の対応するメモリ素子に格納された数値との積を演算し、第1の核の第3列のメモリ素子にそれぞれ格納された数値とアレイAの第4行第4列〜第7行第4列の対応するメモリ素子に格納された数値との積を演算し、第1の核の第1行第4列のメモリ素子にそれぞれ格納された数値とアレイAの第4行第5列〜第7行第5列の対応するメモリ素子に格納された数値との積を演算する。その後、それらの積の和、すなわち積和を求める。このような積和演算を第1の核における深さi(i=1,・・・,7)のアレイと、アレイAとの積和を演算し、各々のiに対する積和を求める。この様にして求めた積和の総和をアレイBのメモリ素子に格納する。このような積和演算を第1乃至第10の核に対してそれぞれ行い、畳み込み処理が完了する。すなわち、第2の核を用いた畳み込み演算の結果をアレイBに格納され、第i(i=3,・・・、10)の核を用いた畳み込み演算はアレイBに格納される。
また、処理装層500は、例えば記憶装置200の3行3列のメモリ素子、例えば斜線で示すメモリ素子B(5,4)〜B(7,6)からなる部分アレイに格納されている数値から1つの代表値を演算し、この代表値を記憶装置300の対応するアレイの対応する斜線で示すメモリ素子C(5,4)に格納する。代表値として、最大値または平均値等が用いられる。処理層500は、記憶装置200の各アレイB(i=1,・・・,10)における任意の3行3列のメモリ素子に対して同様の演算を行い、演算結果を記憶装置300の対応するアレイCの対応するメモリ素子に格納する。
このように、従来の演算処理装置においては、各処理層に対応してこの処理層の全ての出力を格納する記憶装置を備えている。そして、各処理層の処理を全て行い、その全ての出力を上記記憶装置に格納する。その後、上記記憶装置に格納されている数値を用いて次の処理層が処理を行っている。このため、処理層毎にその出力の全てを格納する容量を有する記憶装置が存在することが好ましい。それ故に大きな占有面積が必要となり、その結果として製造コストの増大を惹き起こしてしまうという問題点があった。
また、従来の演算処理装置においては、図2に示すように、演算処理装置の外部にある記憶装置すなわち外部記憶装置600に記憶されている数値を複数の処理に用いる場合、その度ごとに外部記憶装置600より読み出していた。図2では外部記憶装置600より読み出した数値に対して処理層650によって畳み込み処理を行う場合を例に示している。すなわち、外部記憶装置600に格納されている数値を読み出して畳み込み処理を施すことに依り得られた結果を、演算処理装置に内蔵されている記憶装置(内部記憶装置)700のアレイDに格納し、再び外部記憶装置600に格納されている数値を読み出して畳み込み処理を施すことに依り得られた結果を内部記憶装置700の次の深さのアレイDに格納し、再び外部記憶装置600に格納されている数値を読み出して畳み込み処理を施すことに依り得られた結果を内部記憶装置700の次の深さのアレイDに格納し、という操作を必要な回数に渡って繰り返している。
このように、従来の演算処理装置は、外部記憶装置に格納されている数値を複数の処理に用いる場合すなわち複数回に渡って用いる場合にその度ごとに外部記憶装置より読み出していた。外部記憶装置に格納されている数値を読み出すことは、内部記憶装置に記憶されている数値を読み出すことと比べると読出し時間が長い。それ故に処理に長い時間を要することとなるために速い動作速度が得られず、例えば動体の認識等の速い動作速度の必要となる用途への適用が困難という問題点があった。それを回避するために多数の処理装置を設けて並列処理を行うことは可能ではあるが、それは大きな回路面積が必要となるために製造コストの増大を惹き起こしてしまうという問題点があった。
そこで、本発明者達は、鋭意研究に努めた結果、処理層の出力の一部があれば次の処理の少なくとも一部を開始することが可能な処理層においては、その出力を格納する記憶装置として、その出力の個数よりも少ない個数の記憶装置であれば良いと考えた。また、外部記憶装置の数値を用いて複数の処理を行う処理層においては、外部記憶装置の数値を一時的に格納する記憶装置を設け、処理を行う際にはその一時的に記憶する記憶装置から読出しを行うことにより、外部記憶装置の数値を読み出すことに伴う処理時間を削減して全体としての処理時間を短縮し、動作速度の高速化を図ることができると考えた。
以下に、図面を参照して本発明の実施形態を詳細に説明する。図面に示される数値の配列は説明の為に特定の並び方としているが、その並び方は本質ではなく他の並び方であってもよい。また本発明は以下の実施形態に限定されるものではなく、種々変更して用いることができる。
(第1実施形態)
第1実施形態による演算処理装置を図3および図4に示す。この実施形態の演算処理装置1は、図3に示すように、畳み込みニューラルネットワークを実現する装置であって、読み取り置10と、記憶装置20と、処理層30と、記憶装置40と、記憶装置50と、処理層60と、記憶装置65と、記憶装置70と、出力装置80と、を備えている。読み取り装置10は、外部記憶装置600からデータを読み出し、記憶装置20に格納する。
記憶装置20は、図4に示すように、7個のアレイA〜Aを有し、各アレイA(i=1,・・・,7)は、11行×11列に配置されたメモリ素子を有している。すなわち、記憶装置20は図4における面内方向の大きさが11×11で深さが7のメモリを有する。各アレイA(i=1,・・・,7)の第j(j=1,・・・,11)行第k(k=1,・・・、11)列のメモリ素子に格納される数値をA(j,k)と表す。
記憶装置40は、図4に示すように、畳み込み処理に用いられる第1乃至第10の核W〜W10を記憶する。なお、図4においては、第1の核Wしか表示していない。第iの核W(i=1,・・・、10)はそれぞれ、第1乃至第7のアレイW 〜W を有し、各アレイW (i=1,・・・、10、j=1,・・・,7)は、4行×4列に配置されたメモリ素子を有している。すなわち、記憶装置40は図4における面内方向の大きさが4×4で深さが7のアレイW (i=1,・・・、10、j=1,・・・,7)を有する。各アレイW (i=1,・・・、10、j=1,・・・,7)は、4行×4列に配置されたメモリ素子を有している。すなわち、記憶装置40は図4における面内方向の大きさが4×4で深さが7のアレイを有する。各アレイW (i=1,・・・、10、j=1,・・・,7)の第m(m=1,・・・,4)行第n(n=1,・・・、4)列のメモリ素子に格納される数値をW (m,n)と表す。
記憶装置50は、図4に示すように、8行1列に配置されたメモリ素子M〜Mを有している。
記憶装置65には、畳み込み処理またはプーリング処理に用いられる核が格納される。
記憶装置70は、図4に示すように、10個のアレイC〜C10を有し、各アレイC(i=1,・・・,10)は、6行×6列に配置されたメモリ素子を有している。すなわち、記憶装置70は図4における面内方向の大きさが6×6で深さが10のメモリを有する。各アレイC(i=1,・・・,7)の第j(j=1,・・・,6)行第k(k=1,・・・、6)列のメモリ素子に格納される数値をC(j,k)と表す。
処理層30は、記憶装置40の核と、記憶装置20のアレイとの畳み込み処理を行い、処理結果を記憶装置50に格納する。処理層60は、記憶装置50に格納されたデータに基づいてプーリング処理を行い、処理結果を記憶装置70に格納する。
(第1畳み込み処理)
次に、処理層30の第1畳み込み処理について説明する。
記憶装置20のアレイA〜Aの第1列〜第4列に対する記憶装置40に格納された4行4列で深さが7の第1の核Wの第1のアレイW を用いた畳み込み処理について図5A乃至図5Qを参照して説明する。
記憶装置20のアレイAの第1列に対して、記憶装置40のアレイW の第1列を用いた畳み込み処理について図5A乃至図5Hを参照して説明する。
図5Aに示す様に、記憶装置20のアレイAの第1列のメモリ素子に格納されている斜線で示す数値A(1,1)〜A(4,1)のそれぞれと、記憶装置40のアレイW の第1行第1列のメモリ素子に格納されている斜線で示す数値W (1,1)との積を演算し、演算結果を記憶装置50のメモリ素子M〜Mに格納する。すなわち、W (1,1)とA(1,1)との積を演算し、この積を記憶装置50のメモリ素子Mに格納する。続いてW (1,1)とA(2,1)との積を演算し、この積を記憶装置50のメモリ素子Mに格納する。次にW (1,1)とA(3,1)との積を演算し、この積を記憶装置50のメモリ素子Mに格納する。更にW (1,1)とA(4,1)との積を演算し、この積を記憶装置50のメモリ素子Mに格納する。これらの演算処理は並列に実行することも可能であり、それらを並列に実行すれば処理時間の短縮が図られるという利点が得られる。
次に図5Bに示す様に、記憶装置20のアレイAの第1列のメモリ素子に格納されている斜線で示す数値A(2,1)〜A(5,1)のそれぞれと、記憶装置40のアレイW の第2行第1列のメモリ素子に格納されている斜線で示す数値W (2,1)との積を演算し、これらの積と記憶装置50のメモリ素子M〜Mに格納されている数値との和をそれぞれ演算し、これらの和をメモリ素子M〜Mに改めて格納する。すなわち、W (2,1)とA(2,1)との積を演算し、この積と記憶装置50のメモリ素子Mに格納されている数値との和を演算し、この和をメモリ素子Mに改めて格納する。続いてW (2,1)とA(3,1)との積を演算し、この積と記憶装置50のメモリ素子Mに格納されている数値との和を演算し、この和をメモリ素子Mに改めて格納する。次にW (2,1)とA(4,1)との積を演算し、この積と記憶装置50のメモリ素子Mに格納されている数値との和を演算し、この和をメモリ素子Mに改めて格納する。更にW (2,1)とA(5,1)との積を演算し、この積と記憶装置50のメモリ素子Mに格納されている数値との和を演算し、この和をメモリ素子Mに改めて格納する。これらの演算処理は並列に実行することも可能であり、それらを並列に実行すれば処理時間の短縮が図られるという利点が得られる。
次に図5Cに示す様に、記憶装置20のアレイAの第1列のメモリ素子に格納されている斜線で示す数値A(3,1)〜A(6,1)のそれぞれと、記憶装置40のアレイW の第3行第1列のメモリ素子に格納されている斜線で示す数値W (3,1)との積を演算し、これらの積と記憶装置50のメモリ素子M〜Mに格納されている数値との和をそれぞれ演算し、これらの和をメモリ素子M〜Mに改めて格納する。すなわち、W (3,1)とA(3,1)との積を演算し、この積と記憶装置50のメモリ素子Mに格納されている数値との和を演算し、この和をメモリ素子Mに改めて格納する。続いてW (3,1)とA(4,1)との積を演算し、この積と記憶装置50のメモリ素子Mに格納されている数値との和を演算し、この和をメモリ素子Mに改めて格納する。次にW (3,1)とA(5,1)との積を演算し、この積と記憶装置50のメモリ素子Mに格納されている数値との和を演算し、この和をメモリ素子Mに改めて格納する。更にW (3,1)とA(6,1)との積を演算し、この積と記憶装置50のメモリ素子Mに格納されている数値との和を演算し、この和をメモリ素子Mに改めて格納する。これらの演算処理は並列に実行することも可能であり、それらを並列に実行すれば処理時間の短縮が図られるという利点が得られる。
次に図5Dに示す様に、記憶装置20のアレイAの第1列のメモリ素子に格納されている斜線で示す数値A(4,1)〜A(7,1)のそれぞれと、記憶装置40のアレイW の第4行第1列のメモリ素子に格納されている斜線で示す数値W (4,1)との積を演算し、これらの積と記憶装置50のメモリ素子M〜Mに格納されている数値との和をそれぞれ演算し、これらの和をメモリ素子M〜Mに改めて格納する。すなわち、W (4,1)とA(4,1)との積を演算し、この積と記憶装置50のメモリ素子Mに格納されている数値との和を演算し、この和をメモリ素子Mに改めて格納する。続いてW (4,1)とA(5,1)との積を演算し、この積と記憶装置50のメモリ素子Mに格納されている数値との和を演算し、この和をメモリ素子Mに改めて格納する。次にW (4,1)とA(6,1)との積を演算し、この積と記憶装置50のメモリ素子Mに格納されている数値との和を演算し、この和をメモリ素子Mに改めて格納する。更にW (4,1)とA(7,1)との積を演算し、この積と記憶装置50のメモリ素子Mに格納されている数値との和を演算し、この和をメモリ素子Mに改めて格納する。これらの演算処理は並列に実行することも可能であり、それらを並列に実行すれば処理時間の短縮が図られるという利点が得られる。
次に図5Eに示す様に、記憶装置20のアレイAの第1列のメモリ素子に格納されている斜線で示す数値A(5,1)〜A(8,1)のそれぞれと、記憶装置40のアレイW の第1行第1列のメモリ素子に格納されている斜線で示す数値W (1,1)との積を演算し、演算結果を記憶装置50のメモリ素子M〜Mに格納する。すなわち、W (1,1)とA(5,1)との積を演算し、この積を記憶装置50のメモリ素子Mに格納する。続いてW (1,1)とA(6,1)との積を演算し、この積を記憶装置50のメモリ素子Mに格納する。次にW (1,1)とA(7,1)との積を演算し、この積を記憶装置50のメモリ素子Mに格納する。更にW (1,1)とA(8,1)との積を演算し、この積を記憶装置50のメモリ素子Mに格納する。これらの演算処理は並列に実行することも可能であり、それらを並列に実行すれば処理時間の短縮が図られるという利点が得られる。
次に図5Fに示す様に、記憶装置20のアレイAの第1列のメモリ素子に格納されている斜線で示す数値A(6,1)〜A(9,1)のそれぞれと、記憶装置40のアレイW の第2行第1列のメモリ素子に格納されている斜線で示す数値W (2,1)との積を演算し、これらの積と記憶装置50のメモリ素子M〜Mに格納されている数値との和をそれぞれ演算し、これらの和をメモリ素子M〜Mに改めて格納する。すなわち、W (2,1)とA(6,1)との積を演算し、この積と記憶装置50のメモリ素子Mに格納されている数値との和を演算し、この和をメモリ素子Mに改めて格納する。続いてW (2,1)とA(7,1)との積を演算し、この積と記憶装置50のメモリ素子Mに格納されている数値との和を演算し、この和をメモリ素子Mに改めて格納する。次にW (2,1)とA(8,1)との積を演算し、この積と記憶装置50のメモリ素子Mに格納されている数値との和を演算し、この和をメモリ素子Mに改めて格納する。更にW (2,1)とA(9,1)との積を演算し、この積と記憶装置50のメモリ素子Mに格納されている数値との和を演算し、この和をメモリ素子Mに改めて格納する。これらの演算処理は並列に実行することも可能であり、それらを並列に実行すれば処理時間の短縮が図られるという利点が得られる。
次に図5Gに示す様に、記憶装置20のアレイAの第1列のメモリ素子に格納されている斜線で示す数値A(7,1)〜A(10,1)のそれぞれと、記憶装置40のアレイW の第3行第1列のメモリ素子に格納されている斜線で示す数値W (3,1)との積を演算し、これらの積と記憶装置50のメモリ素子M〜Mに格納されている数値との和をそれぞれ演算し、これらの和をメモリ素子M〜Mに改めて格納する。すなわち、W (3,1)とA(7,1)との積を演算し、この積と記憶装置50のメモリ素子Mに格納されている数値との和を演算し、この和をメモリ素子Mに改めて格納する。続いてW (3,1)とA(8,1)との積を演算し、この積と記憶装置50のメモリ素子Mに格納されている数値との和を演算し、この和をメモリ素子Mに改めて格納する。次にW (3,1)とA(9,1)との積を演算し、この積と記憶装置50のメモリ素子Mに格納されている数値との和を演算し、この和をメモリ素子Mに改めて格納する。更にW (3,1)とA(10,1)との積を演算し、この積と記憶装置50のメモリ素子Mに格納されている数値との和を演算し、この和をメモリ素子Mに改めて格納する。これらの演算処理は並列に実行することも可能であり、それらを並列に実行すれば処理時間の短縮が図られるという利点が得られる。
次に図5Hに示す様に、記憶装置20のアレイAの第1列のメモリ素子に格納されている斜線で示す数値A(8,1)〜A(11,1)のそれぞれと、記憶装置40のアレイW の第4行第1列のメモリ素子に格納されている斜線で示す数値W (4,1)との積を演算し、これらの積と記憶装置50のメモリ素子M〜Mに格納されている数値との和をそれぞれ演算し、これらの和をメモリ素子M〜Mに改めて格納する。すなわち、W (4,1)とA(8,1)との積を演算し、この積と記憶装置50のメモリ素子Mに格納されている数値との和を演算し、この和をメモリ素子Mに改めて格納する。続いてW (4,1)とA(9,1)との積を演算し、この積と記憶装置50のメモリ素子Mに格納されている数値との和を演算し、この和をメモリ素子Mに改めて格納する。次にW (4,1)とA(10,1)との積を演算し、この積と記憶装置50のメモリ素子Mに格納されている数値との和を演算し、この和をメモリ素子Mに改めて格納する。更にW (4,1)とA(11,1)との積を演算し、この積と記憶装置50のメモリ素子Mに格納されている数値との和を演算し、この和をメモリ素子Mに改めて格納する。これらの演算処理は並列に実行することも可能であり、それらを並列に実行すれば処理時間の短縮が図られるという利点が得られる。
次に、記憶装置20のアレイAの第2列に対して、記憶装置40のアレイW の第2列を用いた畳み込み処理について図5I乃至図5Pを参照して説明する。
まず、図5Iに示す様に、記憶装置20のアレイAの第2列のメモリ素子に格納されている斜線で示す数値A(1,2)〜A(4,2)のそれぞれと、記憶装置40のアレイW の第1行第2列のメモリ素子に格納されている斜線で示す数値W (1,2)との積をそれぞれ演算し、これらの積と、記憶装置50のメモリ素子M〜Mに格納されている数値との和をそれぞれ演算し、これらの和をそれぞれメモリ素子M〜Mに格納する。すなわち、W (1,2)とA(1,2)との積を演算し、この積と記憶装置50のメモリ素子Mに格納されている数値との和を演算し、この和をメモリ素子Mに格納する。続いてW (1,2)とA(2,2)との積を演算し、この積と記憶装置50のメモリ素子Mに格納されている数値との和を演算し、この和をメモリ素子Mに格納する。次にW (1,2)とA(3,2)との積を演算し、この積と記憶装置50のメモリ素子Mに格納されている数値との和を演算し、この和をメモリ素子Mに格納する。更にW (1,2)とA(4,2)との積を演算し、この積と記憶装置50のメモリ素子Mに格納されている数値との和を演算し、この和をメモリ素子Mに格納する。これらの演算処理は並列に実行することも可能であり、それらを並列に実行すれば処理時間の短縮が図られるという利点が得られる。
次に、図5Jに示す様に、記憶装置20のアレイAの第2列のメモリ素子に格納されている斜線で示す数値A(2,2)〜A(5,2)のそれぞれと、記憶装置40のアレイW の第2行第2列のメモリ素子に格納されている斜線で示す数値W (2,2)との積をそれぞれ演算し、これらの積と、記憶装置50のメモリ素子M〜Mに格納されている数値との和をそれぞれ演算し、これらの和をそれぞれメモリ素子M〜Mに格納する。すなわち、W (2,2)とA(2,2)との積を演算し、この積と記憶装置50のメモリ素子Mに格納されている数値との和を演算し、この和をメモリ素子Mに格納する。続いてW (2,2)とA(3,2)との積を演算し、この積と記憶装置50のメモリ素子Mに格納されている数値との和を演算し、この和をメモリ素子Mに格納する。次にW (2,2)とA(4,2)との積を演算し、この積と記憶装置50のメモリ素子Mに格納されている数値との和を演算し、この和をメモリ素子Mに格納する。更にW (2,2)とA(5,2)との積を演算し、この積と記憶装置50のメモリ素子Mに格納されている数値との和を演算し、この和をメモリ素子Mに格納する。これらの演算処理は並列に実行することも可能であり、それらを並列に実行すれば処理時間の短縮が図られるという利点が得られる。
次に、図5Kに示す様に、記憶装置20のアレイAの第2列のメモリ素子に格納されている斜線で示す数値A(3,2)〜A(6,2)のそれぞれと、記憶装置40のアレイW の第3行第2列のメモリ素子に格納されている斜線で示す数値W (3,2)との積をそれぞれ演算し、これらの積と、記憶装置50のメモリ素子M〜Mに格納されている数値との和をそれぞれ演算し、これらの和をそれぞれメモリ素子M〜Mに格納する。すなわち、W (3,2)とA(3,2)との積を演算し、この積と記憶装置50のメモリ素子Mに格納されている数値との和を演算し、この和をメモリ素子Mに格納する。続いてW (3,2)とA(4,2)との積を演算し、この積と記憶装置50のメモリ素子Mに格納されている数値との和を演算し、この和をメモリ素子Mに格納する。次にW (3,2)とA(5,2)との積を演算し、この積と記憶装置50のメモリ素子Mに格納されている数値との和を演算し、この和をメモリ素子Mに格納する。更にW (3,2)とA(6,2)との積を演算し、この積と記憶装置50のメモリ素子Mに格納されている数値との和を演算し、この和をメモリ素子Mに格納する。これらの演算処理は並列に実行することも可能であり、それらを並列に実行すれば処理時間の短縮が図られるという利点が得られる。
次に、図5Lに示す様に、記憶装置20のアレイAの第2列のメモリ素子に格納されている斜線で示す数値A(4,2)〜A(7,2)のそれぞれと、記憶装置40のアレイW の第4行第2列のメモリ素子に格納されている斜線で示す数値W (4,2)との積をそれぞれ演算し、これらの積と、記憶装置50のメモリ素子M〜Mに格納されている数値との和をそれぞれ演算し、これらの和をそれぞれメモリ素子M〜Mに格納する。すなわち、W (4,2)とA(4,2)との積を演算し、この積と記憶装置50のメモリ素子Mに格納されている数値との和を演算し、この和をメモリ素子Mに格納する。続いてW (4,2)とA(5,2)との積を演算し、この積と記憶装置50のメモリ素子Mに格納されている数値との和を演算し、この和をメモリ素子Mに格納する。次にW (4,2)とA(6,2)との積を演算し、この積と記憶装置50のメモリ素子Mに格納されている数値との和を演算し、この和をメモリ素子Mに格納する。更にW (4,2)とA(7,2)との積を演算し、この積と記憶装置50のメモリ素子Mに格納されている数値との和を演算し、この和をメモリ素子Mに格納する。これらの演算処理は並列に実行することも可能であり、それらを並列に実行すれば処理時間の短縮が図られるという利点が得られる。
次に、図5Mに示す様に、記憶装置20のアレイAの第2列のメモリ素子に格納されている斜線で示す数値A(5,2)〜A(8,2)のそれぞれと、記憶装置40のアレイW の第1行第2列のメモリ素子に格納されている斜線で示す数値W (1,2)との積をそれぞれ演算し、これらの積と、記憶装置50のメモリ素子M〜Mに格納されている数値との和をそれぞれ演算し、これらの和をそれぞれメモリ素子M〜Mに格納する。すなわち、W (1,2)とA(5,2)との積を演算し、この積と記憶装置50のメモリ素子Mに格納されている数値との和を演算し、この和をメモリ素子Mに格納する。続いてW (1,2)とA(6,2)との積を演算し、この積と記憶装置50のメモリ素子Mに格納されている数値との和を演算し、この和をメモリ素子Mに格納する。次にW (1,2)とA(7,2)との積を演算し、この積と記憶装置50のメモリ素子Mに格納されている数値との和を演算し、この和をメモリ素子Mに格納する。更にW (1,2)とA(8,2)との積を演算し、この積と記憶装置50のメモリ素子Mに格納されている数値との和を演算し、この和をメモリ素子Mに格納する。これらの演算処理は並列に実行することも可能であり、それらを並列に実行すれば処理時間の短縮が図られるという利点が得られる。
次に、図5Nに示す様に、記憶装置20のアレイAの第2列のメモリ素子に格納されている斜線で示す数値A(6,2)〜A(9,2)のそれぞれと、記憶装置40のアレイW の第2行第2列のメモリ素子に格納されている斜線で示す数値W (2,2)との積をそれぞれ演算し、これらの積と、記憶装置50のメモリ素子M〜Mに格納されている数値との和をそれぞれ演算し、これらの和をそれぞれメモリ素子M〜Mに格納する。すなわち、W (2,2)とA(6,2)との積を演算し、この積と記憶装置50のメモリ素子Mに格納されている数値との和を演算し、この和をメモリ素子Mに格納する。続いてW (2,2)とA(7,2)との積を演算し、この積と記憶装置50のメモリ素子Mに格納されている数値との和を演算し、この和をメモリ素子Mに格納する。次にW (2,2)とA(8,2)との積を演算し、この積と記憶装置50のメモリ素子Mに格納されている数値との和を演算し、この和をメモリ素子Mに格納する。更にW (2,2)とA(9,2)との積を演算し、この積と記憶装置50のメモリ素子Mに格納されている数値との和を演算し、この和をメモリ素子Mに格納する。これらの演算処理は並列に実行することも可能であり、それらを並列に実行すれば処理時間の短縮が図られるという利点が得られる。
次に、図5Oに示す様に、記憶装置20のアレイAの第2列のメモリ素子に格納されている斜線で示す数値A(7,2)〜A(10,2)のそれぞれと、記憶装置40のアレイW の第3行第2列のメモリ素子に格納されている斜線で示す数値W (3,2)との積をそれぞれ演算し、これらの積と、記憶装置50のメモリ素子M〜Mに格納されている数値との和をそれぞれ演算し、これらの和をそれぞれメモリ素子M〜Mに格納する。すなわち、W (3,2)とA(7,2)との積を演算し、この積と記憶装置50のメモリ素子Mに格納されている数値との和を演算し、この和をメモリ素子Mに格納する。続いてW (3,2)とA(8,2)との積を演算し、この積と記憶装置50のメモリ素子Mに格納されている数値との和を演算し、この和をメモリ素子Mに格納する。次にW (3,2)とA(9,2)との積を演算し、この積と記憶装置50のメモリ素子Mに格納されている数値との和を演算し、この和をメモリ素子Mに格納する。更にW (3,2)とA(10,2)との積を演算し、この積と記憶装置50のメモリ素子Mに格納されている数値との和を演算し、この和をメモリ素子Mに格納する。これらの演算処理は並列に実行することも可能であり、それらを並列に実行すれば処理時間の短縮が図られるという利点が得られる。
次に、図5Pに示す様に、記憶装置20のアレイAの第2列のメモリ素子に格納されている斜線で示す数値A(8,2)〜A(11,2)のそれぞれと、記憶装置40のアレイW の第4行第2列のメモリ素子に格納されている斜線で示す数値W (4,2)との積をそれぞれ演算し、これらの積と、記憶装置50のメモリ素子M〜Mに格納されている数値との和をそれぞれ演算し、これらの和をそれぞれメモリ素子M〜Mに格納する。すなわち、W (4,2)とA(8,2)との積を演算し、この積と記憶装置50のメモリ素子Mに格納されている数値との和を演算し、この和をメモリ素子Mに格納する。続いてW (4,2)とA(9,2)との積を演算し、この積と記憶装置50のメモリ素子Mに格納されている数値との和を演算し、この和をメモリ素子Mに格納する。次にW (4,2)とA(10,2)との積を演算し、この積と記憶装置50のメモリ素子Mに格納されている数値との和を演算し、この和をメモリ素子Mに格納する。更にW (4,2)とA(11,2)との積を演算し、この積と記憶装置50のメモリ素子Mに格納されている数値との和を演算し、この和をメモリ素子Mに格納する。これらの演算処理は並列に実行することも可能であり、それらを並列に実行すれば処理時間の短縮が図られるという利点が得られる。
次に、記憶装置20のアレイAの第3列に対して記憶装置40のアレイW の第3列を用いた畳み込み処理を、図5I乃至図5Pで説明した場合と同様に行う。この場合、例えば、記憶装置20のアレイAの第3列のメモリ素子に格納されている数値A(1,3)〜A(4,3)のそれぞれと、記憶装置40のアレイWの第1行第3列のメモリ素子に格納されている数値W (1,3)との積をそれぞれ演算し、これらの積と、記憶装置50のメモリ素子M〜Mに格納されている数値との和をそれぞれ演算し、これらの和をそれぞれメモリ素子M〜Mに格納する。また、例えば、記憶装置20のアレイAの第3列のメモリ素子に格納されている数値A(5,3)〜A(8,3)のそれぞれと、記憶装置40のアレイW の第1行第3列のメモリ素子に格納されている数値W (1,3)との積をそれぞれ演算し、これらの積と、記憶装置50のメモリ素子M〜Mに格納されている数値との和をそれぞれ演算し、これらの和をそれぞれメモリ素子M〜Mに格納する。
次に、記憶装置20のアレイAの第4列に対して記憶装置40のアレイW の第4列を用いた畳み込み処理を、図5I乃至図5Pで説明した場合と同様に行う。この場合、例えば、記憶装置20のアレイAの第4列のメモリ素子に格納されている数値A(1,4)〜A(4,4)のそれぞれと、記憶装置40のアレイW の第1行第4列のメモリ素子に格納されている数値W (1,4)との積をそれぞれ演算し、これらの積と、記憶装置50のメモリ素子M〜Mに格納されている数値との和をそれぞれ演算し、これらの和をそれぞれメモリ素子M〜Mに格納する。また、例えば、記憶装置20のアレイAの第4列のメモリ素子に格納されている数値A(5,4)〜A(8,4)のそれぞれと、記憶装置40のアレイW の第1行第4列のメモリ素子に格納されている数値W (1,4)との積をそれぞれ演算し、これらの積と、記憶装置50のメモリ素子M〜Mに格納されている数値との和をそれぞれ演算し、これらの和をそれぞれメモリ素子M〜Mに格納する。
以上説明した処理は、記憶装置20のアレイAの第1列〜第4列に対して記憶装置40のアレイW を用いた畳み込み処理である。
次に、記憶装置20のアレイAの第1列〜第4列に対する記憶装置40のアレイW を用いた畳み込み処理について説明する。
まず、記憶装置20のアレイAの第1列に対して記憶装置40のアレイW の第1列を用いた畳み込み処理を、図5A乃至図5Hで説明した場合と同様に行う。この場合、例えば、図5Qに示すように、記憶装置20のアレイAの第1列のメモリ素子に格納されている数値A(1,1)〜A(4,1)のそれぞれと、記憶装置40のアレイW の第1行第1列のメモリ素子に格納されている数値W (1,1)との積をそれぞれ演算し、これらの積と、記憶装置50のメモリ素子M〜Mに格納されている数値との和をそれぞれ演算し、これらの和をそれぞれメモリ素子M〜Mに格納する。また、例えば、記憶装置20のアレイAの第1列のメモリ素子に格納されている数値A(5,1)〜A(8,1)のそれぞれと、記憶装置40のアレイWの第1行第1列のメモリ素子に格納されている数値W (1,1)との積をそれぞれ演算し、これらの積と、記憶装置50のメモリ素子M〜Mに格納されている数値との和をそれぞれ演算し、これらの和をそれぞれメモリ素子M〜Mに格納する。
次に、記憶装置20のアレイAの第2列に対して記憶装置40のアレイW の第2列を用いた畳み込み処理を、図5I乃至図5Pで説明した場合と同様に行う。その後、記憶装置20のアレイAの第3列に対して記憶装置40のアレイW の第3列を用いた畳み込み処理を、図5I乃至図5Pで説明した場合と同様に行う。続いて、記憶装置20のアレイAの第4列に対して記憶装置40のアレイW の第4列を用いた畳み込み処理を、図5I乃至図5Pで説明した場合と同様に行う。
次に、記憶装置20のアレイAの第1列〜第4列に対する記憶装置40のアレイW を用いた畳み込み処理も、記憶装置20のアレイAの第1列〜第4列に対する記憶装置40のアレイWを用いた畳み込み処理と同様に行う。
次に、記憶装置20のアレイAの第1列〜第4列に対する記憶装置40のアレイW を用いた畳み込み処理も、記憶装置20のアレイAの第1列〜第4列に対する記憶装置40のアレイW を用いた畳み込み処理と同様に行う。
次に、記憶装置20のアレイAの第1列〜第4列に対する記憶装置40のアレイW を用いた畳み込み処理も、記憶装置20のアレイAの第1列〜第4列に対する記憶装置40のアレイW を用いた畳み込み処理と同様に行う。
次に、記憶装置20のアレイAの第1列〜第4列に対する記憶装置40のアレイW を用いた畳み込み処理も、記憶装置20のアレイAの第1列〜第4列に対する記憶装置40のアレイW を用いた畳み込み処理と同様に行う。
次に、記憶装置20のアレイAの第1列〜第4列に対する記憶装置40のアレイW を用いた畳み込み処理も、記憶装置20のアレイAの第1列〜第4列に対する記憶装置40のアレイW を用いた畳み込み処理と同様に行う。
続いて、処理層30によって、メモリ素子M(1≦k≦8)に格納されている数値の各々にバイアスBを加え、例えばReLU関数(Rectified Linear Unit)等の発火関数処理を必要に応じて施し、改めてメモリ素子Mに格納する。
この様にして、アレイA〜Aの第1列〜第4列に対する記憶装置40に格納された4行4列で深さが7の第1の核Wを用いた第1畳み込み処理が完了する。
(第1プーリング処理)
次に、処理層60の第1プーリング処理について図6A乃至図6Fを参照して説明する。この処理層60は、例えばプーリング処理を行う。なお、以下のプーリング処理は、図1で説明した場合と同様に、列のアレイからなる核を用いて行う。この核は記憶装置65に格納されている。
まず、図6Aに示す様に、記憶装置50の斜線で示すメモリ素子M、メモリ素子M、メモリ素子Mに格納されている数値のなから最大値を代表値とし、この代表値を記憶装置70のアレイCのメモリ素子C(1,1)に格納する。なお、プーリング処理の代表値として平均値を用いる場合には、メモリ素子M、メモリ素子M、メモリ素子Mに格納されている数値の和を演算し、この和をアレイCの斜線で示すメモリ素子C(1,1)に格納する。
続いて、図6Bに示す様に、斜線で示すメモリ素子M、メモリ素子M、メモリ素子Mに格納されている数値から代表値を演算し、この代表値をアレイCの斜線で示すメモリ素子C(2,1)に格納する。
図6Cに示す様に、斜線で示すメモリ素子M、メモリ素子M、メモリ素子Mに格納されている数値から代表値を演算し、この代表値をアレイCの斜線で示すメモリ素子C(3,1)に格納する。
図6Dに示す様に、斜線で示すメモリ素子M、メモリ素子M、メモリ素子Mに格納されている数値から代表値を演算し、この代表値をアレイCの斜線で示すメモリ素子C(4,1)に格納する。
図6Eに示す様に、斜線で示すメモリ素子M、メモリ素子M、メモリ素子Mに格納されている数値から代表値を演算し、この代表値をアレイCの斜線で示すメモリ素子C(5,1)に格納する。
図6Fに示す様に、斜線で示すメモリ素子M、メモリ素子M、メモリ素子Mに格納されている数値から代表値を演算し、この代表値をアレイCの斜線で示すメモリ素子C(6,1)に格納する。
以上により、記憶装置20のアレイA〜Aの第1列〜第4列に対する記憶装置40に格納された4行4列で深さが7の核Wを用いた畳み込み処理が行われたデータに関する第1プーリング処理が完了する。
(第2畳み込み処理)
次に、記憶装置20のアレイA〜Aの第2列〜第5列に対する記憶装置40に格納された4行4列で深さが7の第1の核Wを用いた第2畳み込み処理を、図5Aで説明した処理から図6Aで説明した第1プーリング処理の直前までを第1畳み込み処理と同様に行う。
この第2畳み込み処理は、処理層30によって行われる。例えば、まず図7に示すように、、記憶装置20のアレイAの第2列のメモリ素子に格納されている斜線で示す数値A(1,2)〜A(4,2)のそれぞれと、記憶装置40のアレイW の第1行第1列のメモリ素子に格納されている斜線で示す数値W (1,1)との積を演算し、演算結果を記憶装置50のメモリ素子M〜Mに格納する。すなわち、W (1,1)とA(1,2)との積を演算し、この積を記憶装置50のメモリ素子Mに格納する。続いてW (1,1)とA(2,2)との積を演算し、この積を記憶装置50のメモリ素子Mに格納する。次にW (1,1)とA(3,2)との積を演算し、この積を記憶装置50のメモリ素子Mに格納する。更にW (1,1)とA(4,2)との積を演算し、この積を記憶装置50のメモリ素子Mに格納する。これらの演算処理は並列に実行することも可能であり、それらを並列に実行すれば処理時間の短縮が図られるという利点が得られる。
以下、図5Bで説明した処理から図6Aで説明したプーリング処理の直前の処理までと同様の処理を行い、記憶装置20のアレイA〜Aの第2列〜第5列に対する記憶装置40に格納された4行4列で深さが7の第1の核Wを用いた畳み込み処理を完了する。この畳み込み処理が完了したデータは、記憶装置50のメモリ素子M〜Mに格納される。
続いて、処理層30によって、メモリ素子M(1≦k≦8)に格納されている数値の各々にバイアスBを加え、例えばReLU関数(Rectified Linear Unit)等の発火関数処理を必要に応じて施し、改めてメモリ素子Mに格納する。
(第2プーリング処理)
次に、記憶装置20のアレイA〜Aの第2列〜第5列に関する第2畳み込み処理が完了し、記憶装置50のメモリ素子M〜Mに格納されたデータについて第2プーリング処理を行う。この第2プーリング処理は、処理層60によって行われる。
まず、図8Aに示すように、記憶装置50のメモリ素子Mに格納されている数値と、メモリ素子Mに格納されている数値と、メモリ素子Mに格納されている数値とから代表値を演算し、この代表値を記憶装置70のアレイCの斜線で示すメモリ素子C(1,2)に格納する。その後、メモリ素子Mに格納されている数値と、メモリ素子Mに格納されている数値と、メモリ素子Mに格納されている数値と、記憶装置70のアレイCのメモリ素子C(1,1)に格納されている数値とから代表値を演算し、この代表値をアレイCのメモリ素子C(1,1)に改めて格納する。なお、この場合、代表値として平均値を用いる場合は、メモリ素子Mに格納されている数値と、メモリ素子Mに格納されている数値と、メモリ素子Mに格納されている数値と、メモリ素子C(1,1)に格納されている数値との和を演算し、この和をメモリ素子C(1,1)に改めて格納する。
その後、図8Bに示すように、記憶装置50のメモリ素子Mに格納されている数値と、メモリ素子Mに格納されている数値と、メモリ素子Mに格納されている数値とから代表値を演算し、この代表値を記憶装置70のアレイCの斜線で示すメモリ素子C(2,2)に格納する。その後、メモリ素子Mに格納されている数値と、メモリ素子Mに格納されている数値と、メモリ素子Mに格納されている数値と、アレイCのメモリ素子C(2,1)に格納されている数値とから代表値を演算し、この代表値をアレイCのメモリ素子C(2,1)に改めて格納する。
続いて、図8Cに示すように、記憶装置50のメモリ素子Mに格納されている数値と、メモリ素子Mに格納されている数値と、メモリ素子Mに格納されている数値とから代表値を演算し、この代表値を記憶装置70のアレイCの斜線で示すメモリ素子C(3,2)に格納する。その後、メモリ素子Mに格納されている数値と、メモリ素子Mに格納されている数値と、メモリ素子Mに格納されている数値と、アレイCのメモリ素子C(3,1)に格納されている数値とから代表値を演算し、この代表値をアレイCのメモリ素子C(3,1)に改めて格納する。
次に、図8Dに示すように、記憶装置50のメモリ素子Mに格納されている数値と、メモリ素子Mに格納されている数値と、メモリ素子Mに格納されている数値とから代表値を演算し、この代表値を記憶装置70のアレイCの斜線で示すメモリ素子C(4,2)に格納する。その後、メモリ素子Mに格納されている数値と、メモリ素子Mに格納されている数値と、メモリ素子Mに格納されている数値と、アレイCのメモリ素子C(4,1)に格納されている数値とから代表値を演算し、この代表値をアレイCのメモリ素子C(4,1)に改めて格納する。
その後、図8Eに示すように、記憶装置50のメモリ素子Mに格納されている数値と、メモリ素子Mに格納されている数値と、メモリ素子Mに格納されている数値とから代表値を演算し、この代表値を記憶装置70のアレイCの斜線で示すメモリ素子C(5,2)に格納する。その後、メモリ素子Mに格納されている数値と、メモリ素子Mに格納されている数値と、メモリ素子Mに格納されている数値と、アレイCのメモリ素子C(5,1)に格納された数値とから代表値を演算し、この代表値をアレイCのメモリ素子C(5,1)に改めて格納する。
続いて、図8Fに示すように、記憶装置50のメモリ素子Mに格納されている数値と、メモリ素子Mに格納されている数値と、メモリ素子Mに格納されている数値とから代表値を演算し、この代表値を記憶装置70のアレイCの斜線で示すメモリ素子C(6,2)に格納する。その後、メモリ素子Mに格納されている数値と、メモリ素子Mに格納されている数値と、メモリ素子Mに格納されている数値と、アレイCのメモリ素子C(6,1)に格納された数値とから代表値を演算し、この代表値をアレイCのメモリ素子C(6,1)に改めて格納する。
(第3畳み込み処理)
次に、処理層30によって第3畳み込み処理を行う。この第3畳み込み処理は、記憶装置20のアレイA〜Aの第3列〜第6列に対して記憶装置40に格納された4行4列で深さが7の第1の核Wを用いて、第2畳み込み処理と同様に行う。この第3畳み込み処理は、処理層30によって行われる。この第3畳み込み処理が完了したデータは、記憶装置50のメモリ素子M〜Mに格納される。
続いて、処理層30によって、メモリ素子M(1≦k≦8)に格納されている数値の各々にバイアスBを加え、例えばReLU関数(Rectified Linear Unit)等の発火関数処理を必要に応じて施し、改めてメモリ素子Mに格納する。
(第3プーリング処理)
次に、処理層60による第3プーリング処理について図9A乃至図9Fを参照して説明する。この第3プーリング処理は、第3畳み込み処理が行われて記憶装置50のメモリ素子M1〜M8に格納されされたデータについて行う。
まず、図9Aに示す様に、記憶装置50のメモリ素子Mに格納されている数値と、メモリ素子Mに格納されている数値と、メモリ素子Mに格納されている数値とから代表値を演算し、この代表値を記憶装置70のアレイCの斜線で示すメモリ素子C(1,3)に格納する。続いて、メモリ素子Mに格納されている数値と、メモリ素子Mに格納されている数値と、メモリ素子Mに格納されている数値と、記憶装置70のアレイCのメモリ素子C(1,2)に格納されている数値とから代表値を演算し、この代表値をアレイCのメモリ素子C(1,2)に改めて格納する。その後、メモリ素子Mに格納されている数値と、メモリ素子Mに格納されている数値と、メモリ素子Mに格納されている数値と、記憶装置70のアレイCのメモリ素子C(1,1)に格納されている数値とから代表値を演算し、この代表値をアレイCのメモリ素子C(1,1)に改めて格納する。これにより、メモリ素子C(1,1)には、第1畳み込み処理、第2畳み込み処理、および第3畳み込み処理のそれぞれによって、メモリ素子M、メモリ素子M、およびメモリ素子Mに格納された数値から演算された代表値のうちから求められた代表値が格納される。すなわち、第1畳み込み処理によってメモリ素子M、メモリ素子M、およびメモリ素子Mに格納された数値から演算された第1代表値と、第2畳み込み処理によってメモリ素子M、メモリ素子M、およびメモリ素子Mに格納された数値から演算された第2代表値と、第3畳み込み処理によってメモリ素子M、メモリ素子M、およびメモリ素子Mに格納された数値から演算された第3代表値と、から演算された代表値がメモリ素子C(1,1)に格納される。また、メモリ素子C(1,2)には、第2畳み込み処理、および第3畳み込み処理のそれぞれによって、メモリ素子M、メモリ素子M、およびメモリ素子Mに格納された数値から演算された代表値のうちから求められた代表値が格納される。すなわち、第2畳み込み処理によってメモリ素子M、メモリ素子M、およびメモリ素子Mに格納された数値から演算された第2代表値と、第3畳み込み処理によってメモリ素子M、メモリ素子M、およびメモリ素子Mに格納された数値から演算された第3代表値と、から演算された代表値がメモリ素子C(1,2)に格納される。
続いて、図9Bに示す様に、記憶装置50のメモリ素子Mに格納されている数値と、メモリ素子Mに格納されている数値と、メモリ素子Mに格納されている数値とから代表値を演算し、この代表値を記憶装置70のアレイCの斜線で示すメモリ素子C(2,3)に格納する。続いて、メモリ素子Mに格納されている数値と、メモリ素子Mに格納されている数値と、メモリ素子Mに格納されている数値と、記憶装置70のアレイCのメモリ素子C(2,2)に格納されている数値とから代表値を演算し、この代表値をアレイCのメモリ素子C(2,2)に改めて格納する。その後、メモリ素子Mに格納されている数値と、メモリ素子Mに格納されている数値と、メモリ素子Mに格納されている数値と、記憶装置70のアレイCのメモリ素子C(2,1)に格納されている数値とから代表値を演算し、この代表値をアレイCのメモリ素子C(2,1)に改めて格納する。
その後、図9Cに示す様に、記憶装置50のメモリ素子Mに格納されている数値と、メモリ素子Mに格納されている数値と、メモリ素子Mに格納されている数値とから代表値を演算し、この代表値を記憶装置70のアレイCの斜線で示すメモリ素子C(3,3)に格納する。続いて、メモリ素子Mに格納されている数値と、メモリ素子Mに格納されている数値と、メモリ素子Mに格納されている数値と、記憶装置70のアレイCのメモリ素子C(3,2)に格納されている数値とから代表値を演算し、この代表値をアレイCのメモリ素子C(3,2)に改めて格納する。その後、メモリ素子Mに格納されている数値と、メモリ素子Mに格納されている数値と、メモリ素子Mに格納されている数値と、記憶装置70のアレイCのメモリ素子C(3,1)に格納されている数値とから代表値を演算し、この代表値をアレイCのメモリ素子C(3,1)に改めて格納する。
次に、図9Dに示す様に、記憶装置50のメモリ素子Mに格納されている数値と、メモリ素子Mに格納されている数値と、メモリ素子Mに格納されている数値とから代表値を演算し、この代表値を記憶装置70のアレイCの斜線で示すメモリ素子C(4,3)に格納する。続いて、メモリ素子Mに格納されている数値と、メモリ素子Mに格納されている数値と、メモリ素子Mに格納されている数値と、記憶装置70のアレイCのメモリ素子C(4,2)に格納されている数値とから代表値を演算し、この代表値をアレイCのメモリ素子C(4,2)に改めて格納する。その後、メモリ素子Mに格納されている数値と、メモリ素子Mに格納されている数値と、メモリ素子Mに格納されている数値と、記憶装置70のアレイCのメモリ素子C(4,1)に格納されている数値とから代表値を演算し、この代表値をアレイCのメモリ素子C(4,1)に改めて格納する。
続いて、図9Eに示す様に、記憶装置50のメモリ素子Mに格納されている数値と、メモリ素子Mに格納されている数値と、メモリ素子Mに格納されている数値とから代表値を演算し、この代表値を記憶装置70のアレイCの斜線で示すメモリ素子C(5,3)に格納する。続いて、メモリ素子Mに格納されている数値と、メモリ素子Mに格納されている数値と、メモリ素子Mに格納されている数値と、記憶装置70のアレイCのメモリ素子C(5,2)に格納されている数値とから代表値を演算し、この代表値をアレイCのメモリ素子C(5,2)に改めて格納する。その後、メモリ素子Mに格納されている数値と、メモリ素子Mに格納されている数値と、メモリ素子Mに格納されている数値と、記憶装置70のアレイCのメモリ素子C(5,1)に格納されている数値とから代表値を演算し、この代表値をアレイCのメモリ素子C(5,1)に改めて格納する。
その後、図9Fに示す様に、記憶装置50のメモリ素子Mに格納されている数値と、メモリ素子Mに格納されている数値と、メモリ素子Mに格納されている数値とから代表値を演算し、この代表値を記憶装置70のアレイCの斜線で示すメモリ素子C(6,3)に格納する。続いて、メモリ素子Mに格納されている数値と、メモリ素子Mに格納されている数値と、メモリ素子Mに格納されている数値と、記憶装置70のアレイCのメモリ素子C(6,2)に格納されている数値とから代表値を演算し、この代表値をアレイCのメモリ素子C(6,2)に改めて格納する。その後、メモリ素子Mに格納されている数値と、メモリ素子Mに格納されている数値と、メモリ素子Mに格納されている数値と、記憶装置70のアレイCのメモリ素子C(6,1)に格納されている数値とから代表値を演算し、この代表値をアレイCのメモリ素子C(6,1)に改めて格納する。
以上により、第3プーリング処理が完了する。このとき、記憶装置70のアレイCの第3列には、第3畳み込み処理によって得られ記憶装置50に格納されたデータから演算された第3代表値が格納される。また、記憶装置70のアレイCの第2列には、第2畳み込み処理によって得られたデータから演算された第2代表値と、上記第3代表値とから演算された新たな第2代表値が格納される。この新たな第2代表値は、同一の行同士における第2代表値と第3代表値とから演算される。更に、記憶装置70のアレイCの第1列には、第1畳み込み処理によって得られたデータから演算された第1代表値と、第2畳み込み処理によって得られたデータから演算された第2代表値と、上記第3代表値とから演算された新たな第1代表値が格納される。
(第4畳み込み処理)
次に、処理層30によって第4畳み込み処理を行う。この第4畳み込み処理は、記憶装置20のアレイA〜Aの第4列〜第7列に対して記憶装置40に格納された4行4列で深さが7の第1の核Wを用いて、第3畳み込み処理と同様に行う。この第4畳み込み処理は、処理層30によって行われる。この第4畳み込み処理が完了したデータは、記憶装置50のメモリ素子M〜Mに格納される。
続いて、処理層30によって、メモリ素子M(1≦k≦8)に格納されている数値の各々にバイアスBを加え、例えばReLU関数(Rectified Linear Unit)等の発火関数処理を必要に応じて施し、改めてメモリ素子Mに格納する。
(第4プーリング処理)
次に、処理層60によって第4プーリング処理を行う。この第4プーリング処理は、前述した第3プーリング処理と同様に行う。第4プーリング処理によって、記憶装置70のアレイCの第4列には、第4畳み込み処理によって得られ記憶装置50に格納されたデータから演算された第4代表値が格納される。また、記憶装置70のアレイCの第3列には、第3畳み込み処理によって得られたデータから演算された第3代表値と、上記第4代表値とから演算された新たな第3代表値が格納される。更に、記憶装置70のアレイCの第2列には、第2畳み込み処理によって得られたデータから演算された第2代表値と、第2畳み込み処理によって得られたデータから演算された第3代表値と、上記第4代表値とから演算された新たな第2代表値が格納される。
(第5畳み込み処理)
次に、処理層30によって第5畳み込み処理を行う。この第5畳み込み処理は、記憶装置20のアレイA〜Aの第5列〜第8列に対して記憶装置40に格納された4行4列で深さが7の第1の核Wを用いて、第4畳み込み処理と同様に行う。この第5畳み込み処理は、処理層30によって行われる。この第5畳み込み処理が完了したデータは、記憶装置50のメモリ素子M〜Mに格納される。
続いて、処理層30によって、メモリ素子M(1≦k≦8)に格納されている数値の各々にバイアスBを加え、例えばReLU関数(Rectified Linear Unit)等の発火関数処理を必要に応じて施し、改めてメモリ素子Mに格納する。
(第5プーリング処理)
次に、処理層60によって第5プーリング処理を行う。この第5プーリング処理は、前述した第4プーリング処理と同様に行う。第5プーリング処理によって、記憶装置70のアレイCの第5列には、第5畳み込み処理によって得られ記憶装置50に格納されたデータから演算された第5代表値が格納される。また、記憶装置70のアレイCの第4列には、第4畳み込み処理によって得られたデータから演算された第4代表値と、上記第5代表値とから演算された新たな第4代表値が格納される。更に、記憶装置70のアレイCの第3列には、第3畳み込み処理によって得られたデータから演算された第3代表値と、第4畳み込み処理によって得られたデータから演算された第4代表値と、上記第5代表値とから演算された新たな第3代表値が格納される。
(第6畳み込み処理)
次に、処理層30によって第6畳み込み処理を行う。この第6畳み込み処理は、記憶装置20のアレイA〜Aの第6列〜第9列に対して記憶装置40に格納された4行4列で深さが7の第1の核Wを用いて、第5畳み込み処理と同様に行う。この第6畳み込み処理は、処理層30によって行われる。この第6畳み込み処理が完了したデータは、記憶装置50のメモリ素子M〜Mに格納される。
続いて、処理層30によって、メモリ素子M(1≦k≦8)に格納されている数値の各々にバイアスBを加え、例えばReLU関数(Rectified Linear Unit)等の発火関数処理を必要に応じて施し、改めてメモリ素子Mに格納する。
(第6プーリング処理)
次に、処理層60によって第6プーリング処理を行う。第6プーリング処理によって、記憶装置70のアレイCの第6列には、第6畳み込み処理によって得られ記憶装置50に格納されたデータから演算された第6代表値が格納される。また、記憶装置70のアレイCの第5列には、第5畳み込み処理によって得られたデータから演算された第5代表値と、上記第6代表値とから演算された新たな第5代表値が格納される。更に、記憶装置70のアレイCの第4列には、第4畳み込み処理によって得られたデータから演算された第4代表値と、第5畳み込み処理によって得られたデータから演算された第5代表値と、上記第6代表値とから演算された新たな第6代表値が格納される。この状態を図10に示す。なお、図10において、アレイCの斜線で示す第1列〜第4列は、全てのプーリング処理が完了した状態を示し、第5列および第6列は、プーリング処理が途中まで行われた状態となっている。
(第7畳み込み処理)
次に、処理層30によって第7畳み込み処理を行う。この第7畳み込み処理は、記憶装置20のアレイA〜Aの第7列〜第10列に対して記憶装置40に格納された4行4列で深さが7の第1の核Wを用いて、第6畳み込み処理と同様に行う。この第7畳み込み処理は、処理層30によって行われる。この第7畳み込み処理が完了したデータは、記憶装置50のメモリ素子M〜Mに格納される。
続いて、処理層30によって、メモリ素子M(1≦k≦8)に格納されている数値の各々にバイアスBを加え、例えばReLU関数(Rectified Linear Unit)等の発火関数処理を必要に応じて施し、改めてメモリ素子Mに格納する。
(第7プーリング処理)
次に、処理層60によって第7プーリング処理を行う。記憶装置70のアレイCの容量を節約するために、この第7プーリング処理は、第6プーリング処理とは若干異なっている。第7プーリング処理によって、記憶装置70のアレイCの第5列には、第7畳み込み処理によって得られた第7代表値と、第5畳み込み処理によって得られたデータから演算された第5代表値と、第6畳み込み処理によって得られた第6代表値とから演算された新たな第7代表値が格納される。また、記憶装置70のアレイCの第6列には、第7畳み込み処理によって得られた第7代表値と、第6畳み込み処理によって得られた第6代表値とから演算された新たな第6代表値が格納される。この第7プーリング処理が完了すると、記憶装置70のアレイCの第5列は、全てのプーリング処理が完了した状態となり、第6列は、プーリング処理が途中まで行われた状態となっている。
(第8畳み込み処理)
次に、処理層30によって第8畳み込み処理を行う。この第8畳み込み処理は、記憶装置20のアレイA〜Aの第8列〜第11列に対して記憶装置40に格納された4行4列で深さが7の第1の核Wを用いて、第7畳み込み処理と同様に行う。この第8畳み込み処理は、処理層30によって行われる。この第8畳み込み処理が完了したデータは、記憶装置50のメモリ素子M〜Mに格納される。
続いて、処理層30によって、メモリ素子M(1≦k≦8)に格納されている数値の各々にバイアスBを加え、例えばReLU関数(Rectified Linear Unit)等の発火関数処理を必要に応じて施し、改めてメモリ素子Mに格納する。
(第8プーリング処理)
次に、処理層60によって第8プーリング処理を行う。記憶装置70のアレイCの容量を節約するために、この第8プーリング処理は、第6プーリング処理とは若干異なっている。第8プーリング処理によって、記憶装置70のアレイCの第6列には、第8畳み込み処理によって得られた第8代表値と、第7畳み込み処理によって得られた第7代表値と、第6畳み込み処理によって得られたデータから演算された第6代表値とから演算された新たな第6代表値が格納される。これにより、記憶装置70のアレイCの第6列は、全てのプーリング処理が完了した状態となる。この状態を図11に示す。すなわち、記憶装置70のアレイCの第1〜第6列は斜線で表示されている。この第8プーリング処理が完了した状態で、代表値として最大値を用いた場合は、これで、第1の核Wを用いた畳み込み処理と全てのプーリング処理が完了する。しかし、代表値として平均値を用いた場合は、アレイCの各メモリ素子に格納された数値を、プーリング処理に用いた核のアレイに含まれるメモリ素子の個数で除算した値をアレイCの各メモリ素子に改めて格納する。すなわち本実施形態では、プーリング処理に用いた核は列のアレイであるから、アレイCの各メモリ素子に格納された数値を、9で除算した値をアレイCの各メモリ素子に改めて格納する。
以上説明したことにより、アレイA〜Aに対する第1の核Wを用いた畳み込み処理と、この畳み込み処理に続くプーリング処理が完了し、完了したデータは、記憶装置70のアレイCに格納される。なお、本実施形態では、バイアスBをメモリ素子M(1≦k≦8)に格納されている数値に加える処理と、例えばReLU関数(Rectified Linear Unit)等の発火関数処理とは、各畳み込み処理が終了した直後に行ったが、発火関数処理がReLU関数(Rectified Linear Unit)であり且つプーリング処理の代表値として最大値を用いる場合には、図11に示す処理が完了した後に行ってもよい。
次に、アレイA〜Aに対する第iの核Wを(i=2,・・・,10)を用いた畳み込み処理と、それぞれの畳み込み処理に続くプーリング処理を、第1の核Wを用いた場合と同様に行い、完了したデータは、記憶装置70のアレイCに格納される。なお、このとき、各畳み込み処理が完了し、この畳み込み処理に対応するプーリング処理を行う前に、処理層30によって、メモリ素子M(1≦k≦8)に格納されている数値の各々にバイアスBiを(i=2・・・,10)を加え、例えばReLU関数(Rectified Linear Unit)等の発火関数処理を必要に応じて施し、改めてメモリ素子Mに格納する。
以上により、アレイA〜Aに対する第1乃至第10の核W〜W10のそれぞれを用いた畳み込み処理と、それぞれの畳み込み処理に続くプーリング処理が完了し、畳み込みニューラルネットワークを実現することができる。すなわち、本実施形態においては、記憶装置50の容量が列のメモリ素子で済み、占有面積が小さい演算処理装置を提供することができる。
なお、各畳み込み処理において、並列処理を行うことにより、処理時間の短縮を図ることができる。
また、第1乃至第10の核W〜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の核X〜X10が用いられ、各核X(i=1,・・・,10)は10個の第3行第3列のアレイX 〜X 10を有している。なお、図12においては、第1の核Xのみを表示している。アレイX (i=1.・・・,10、j=1,・・・,10)の第m(m=1,・・・,3)行、第n(n=1,・・・.3)列のメモリ素子をX (m、n)と表し、このメモリ素子に格納されている数値もX (m、n)と表す。
以下に、第2実施形態の演算処理装置の処理動作について説明する。
(処理層30による第1畳み込み処理)
まず、処理層30によって第1実施形態で説明した第1畳み込み処理を行う。すなわち、図4に示す記憶装置40に格納されている第1の核Wを用いて、記憶装置20に格納されているアレイA〜Aの第1乃至第4列のメモリ素子に対して畳み込み処理を行い、処理結果を記憶装置50のメモリ素子M〜Mに格納する。
続いて、処理層30によって、メモリ素子M(1≦k≦8)に格納されている数値の各々にバイアスBを加え、例えばReLU関数(Rectified Linear Unit)等の発火関数処理を必要に応じて施し、改めてメモリ素子Mに格納する。
(処理層60による第1畳み込み処理)
次に、図13Aに示す様に、第1の核XのアレイX の第1行第1列のメモリ素子に格納されている数値X (1,1)と、メモリ素子Mに格納されている数値との積を記憶装置70のアレイCの第1行第1列のメモリ素子C(1,1)に格納する。続いて、数値X (1,1)と、メモリ素子Mに格納されている数値との積をアレイCのメモリ素子C(2,1)に格納する。その後、数値X (1,1)と、メモリ素子Mに格納されている数値との積をアレイCのメモリ素子C(3,1)に格納する。これらの処理を並列に実行することも可能であり、それらを並列に実行すれば処理時間の短縮が図られるという利点が得られる。
次に、図13Bに示す様に、アレイX の第2行第1列のメモリ素子に格納されている数値X (2,1)とメモリ素子Mに格納されている数値との積を演算するとともに、この積と、記憶装置70のアレイCのメモリ素子C(1,1)に格納されている数値との和を改めてメモリ素子C(1,1)に格納する。続いて、数値X (2,1)とメモリ素子Mに格納されている数値との積を演算するとともに、この積と記憶装置70のアレイCのメモリ素子C(2,1)に格納されている数値との和を改めてメモリ素子C(2,1)に格納する。その後、数値X (2,1)とメモリ素子Mに格納されている数値との積を演算するとともに、この積とアレイCのメモリ素子C(3,1)に格納されている数値との和を改めてメモリ素子C(3,1)に格納する。これらの処理を並列に実行することも可能であり、それらを並列に実行すれば処理時間の短縮が図られるという利点が得られる。
次に、図13Cに示す様に、アレイX の第3行第1列のメモリ素子に格納されている数値X (3,1)とメモリ素子Mに格納されている数値との積を演算し、この積とアレイCのメモリ素子C(1,1)に格納されている数値との和を改めてメモリ素子C(1,1)に格納する。続いて、数値X (3,1)とメモリ素子Mに格納されている数値との積を演算するとともに、この積と記憶装置70のアレイCのメモリ素子C(2,1)に格納されている数値との和を改めてメモリ素子C(2,1)に格納する。その後、数値X (3,1)とメモリ素子Mに格納されている数値との積を演算するとともに、この積とアレイCのメモリ素子C(3,1)に格納されている数値との和を改めてメモリ素子C(3,1)に格納する。これらの処理を並列に実行することも可能であり、それらを並列に実行すれば処理時間の短縮が図られるという利点が得られる。
次に、図13Dに示す様に、アレイX の第1行第1列のメモリ素子に格納されている数値X (1,1)とメモリ素子Mに格納されている数値との積を演算し、この積をメモリ素子C(4,1)に格納する。続いて、数値X (1,1)とメモリ素子Mに格納されている数値との積を演算し、この積をメモリ素子C(5,1)に格納する。その後、数値X (1,1)とメモリ素子Mに格納されている数値との積を演算し、この積をメモリ素子C(6,1)に格納する。これらの処理を並列に実行することも可能であり、それらを並列に実行すれば処理時間の短縮が図られるという利点が得られる。
次に、図13Eに示す様に、アレイX の第2行第1列のメモリ素子に格納されている数値X (2,1)とメモリ素子Mに格納されている数値との積を演算し、この積とアレイCのメモリ素子C(4,1)に格納されている数値との和を改めてメモリ素子C(4,1)に格納する。続いて、数値X (2,1)とメモリ素子Mに格納されている数値との積を演算し、この積とアレイCのメモリ素子C(5,1)に格納されている数値との和を改めてメモリ素子C(5,1)に格納する。その後、数値X (2,1)とメモリ素子Mに格納されている数値との積を演算し、この積とアレイCのメモリ素子C(6,1)に格納されている数値との和を改めてメモリ素子C(6,1)に格納する。これらの処理を並列に実行することも可能であり、それらを並列に実行すれば処理時間の短縮が図られるという利点が得られる。
次に、図13Fに示すように、アレイX の第3行第1列のメモリ素子に格納されている数値X (3,1)とメモリ素子Mに格納されている数値との積を演算し、この積とアレイCのメモリ素子C(4,1)に格納されている数値との和を改めてメモリ素子C(4,1)に格納する。続いて、数値X (3,1)とメモリ素子Mに格納されている数値との積を演算し、この積とアレイCのメモリ素子C(5,1)に格納されている数値との和を改めてメモリ素子C(5,1)に格納する。その後、数値X (3,1)とメモリ素子Mに格納されている数値との積を演算し、この積とアレイCのメモリ素子C(6,1)に格納されている数値との和を改めてメモリ素子C(6,1)に格納する。これらの処理を並列に実行することも可能であり、それらを並列に実行すれば処理時間の短縮が図られるという利点が得られる。
以上の処理に依り、図13Gに示す様に、第1の核XのアレイX の第1列を用いた記憶装置50のメモリ素子M〜Mに対する畳み込み処理が完了し、この処理結果が記憶装置70のアレイCの第1列のメモリ素子C(1,1)〜C(6,1)に格納される。
次に、第1の核XのアレイX の代わりに第2の核XのアレイX の第1列を用いた記憶装置50のメモリ素子M〜Mに対する畳み込み処理を行い、この処理結果を記憶装置70のアレイCの第1列のメモリ素子C(1,1)〜C(6,1)に格納する。この畳み込み処理は、図13A乃至図13Gで説明した処理において、第1の核XのアレイX 〜X 10の第1列を第2の核XのアレイX 〜X 10の第1列にそれぞれ換えて行う。
以下、同様に、第1の核Xを第iの核X(i=3,・・・,10)にそれぞれ換えて記憶装置50のメモリ素子M〜Mの畳み込み処理を行い、この処理結果を記憶装置70のアレイCの第1列のメモリ素子C(1,1)〜C(6,1)に格納する。
以上により、第1の核Wを用いた処理層30によるアレイA〜Aの第1列〜第4列に関する畳み込み処理と、第1乃至第10の核X〜X10のそれぞれの第1列を用いた処理層60によるメモリ素子M〜Mに対する畳み込み処理が完了し、処理された結果が記憶装置70のアレイC〜C10のそれぞれの第1列に格納される。この状態を図13Hに示す。
なお、図13A乃至図13Hで説明した処理において、異なる核X(m=1,・・・,10)に対する処理を並列に実行することも可能であり、それらを並列に実行すれば処理時間の短縮が図られるという利点が得られる。
(処理層30による第2畳み込み処理)
次に、第2の核Wを用いた処理層30によるアレイA〜Aの第1列〜第4列に関する畳み込み処理を図12で説明した場合と同様に行い、この畳み込み処理の結果を記憶装置50のメモリ素子M〜Mに格納する。この畳み込み処理は、図12に説明する畳み込み処理において、核Wを核Wに置き換えて行われる。
続いて、処理層30によって、メモリ素子M(1≦k≦8)に格納されている数値の各々にバイアスBを加え、例えばReLU関数(Rectified Linear Unit)等の発火関数処理を必要に応じて施し、改めてメモリ素子Mに格納する。
(処理層60による第2畳み込み処理)
次に、この第2畳み込み処理は、第2の核Wを用いたアレイA〜Aの第1列〜第4列に関する畳み込み処理の結果に対して、第1乃至第10の核X〜X10を用いて行う。
まず、図13Iに示す様に、記憶装置65に格納されている第1の核XのアレイX の第1行第1列に格納されている数値X (1,1)とメモリ素子Mに格納されている数値との積を演算し、この積と記憶装置70のアレイCのメモリ素子C(1,1)に格納されている数値との和を改めてメモリ素子C(1,1)に格納する。続いて、数値X (1,1)とメモリ素子Mに格納されている数値との積を演算し、この積と記憶装置70のアレイCのメモリ素子C(2,1)に格納されている数値との和を改めてメモリ素子C(2,1)に格納する。その後、数値X (1,1)とメモリ素子Mに格納されている数値との積を演算し、この積と記憶装置70のアレイCのメモリ素子C(3,1)に格納されている数値との和を改めてメモリ素子C(3,1)に格納する。これらの処理は、並列に実行することも可能であり、それらを並列に実行すれば処理時間の短縮が図られるという利点が得られる。
続いて、図13Bで説明した処理において、数値X (2,1)を数値X (2、1)に置き換えて行う。すなわち、アレイX の第2行第1列に格納されている数値X (2,1)とメモリ素子Mに格納されている数値との積を演算し、この積と記憶装置70のアレイCのメモリ素子C(1,1)に格納されている数値との和を改めてメモリ素子C(1,1)に格納する。続いて、数値X (2,1)とメモリ素子Mに格納されている数値との積を演算し、この積と記憶装置70のアレイCのメモリ素子C(2,1)に格納されている数値との和を改めてメモリ素子C(2,1)に格納する。その後、数値X (2,1)とメモリ素子Mに格納されている数値との積を演算し、この積と記憶装置70のアレイCのメモリ素子C(3,1)に格納されている数値との和を改めてメモリ素子C(3,1)に格納する。
その後、図13Cで説明した処理において、数値X (3,1)を数値X (3、1)に置き換えて行う。
次に、図13Dで説明した処理において、数値X (1,1)を数値X (1、1)に置き換えて行う。すなわち、図13Jに示す様に、数値X (1、1)とメモリ素子Mに格納されている数値との積を演算し、この積と記憶装置70のアレイCのメモリ素子C(4,1)に格納されている数値との和を改めてメモリ素子C(4,1)に格納する。続いて、数値X (1,1)とメモリ素子Mに格納されている数値との積を演算し、この積と記憶装置70のアレイCのメモリ素子C(5,1)に格納されている数値との和を改めてメモリ素子C(5,1)に格納する。その後、数値X (1,1)とメモリ素子Mに格納されている数値との積を演算し、この積と記憶装置70のアレイCのメモリ素子C(6,1)に格納されている数値との和を改めてメモリ素子C(6,1)に格納する。これらの処理は、並列に実行することも可能であり、それらを並列に実行すれば処理時間の短縮が図られるという利点が得られる。
続いて、図13Eで説明した処理において、数値X (2,1)を数値X (2、1)に置き換えて行う。
その後、図13Fで説明した処理において、数値X (3,1)を数値X (3、1)に置き換えて行う。
以上により、メモリ素子M〜Mに対する核XのアレイX の第1列を用いた畳み込み処理が完了する。
次に、メモリ素子M〜Mに対する第m(m=2,・・・,10)の核XのアレイX の第1列を用いた畳み込み処理を図13A乃至図13Hで説明した場合と同様に行う。
以上の処理結果は、記憶装置70のアレイC(i=1,・・・,10)の第1列のメモリ素子C(1,1)〜C(6,1)(i=1,・・・,10)に格納される。すなわち、第2の核Wを用いた処理層30によるアレイA〜Aの第1列〜第4列に関する畳み込み処理と、第1乃至第10の核X〜X10のアレイX 〜X10 のそれぞれの第1列を用いた処理層60によるメモリ素子M〜Mに対する畳み込み処理が完了し、処理された結果が記憶装置70のアレイC(i=1,・・・,10)の第1列のメモリ素子C(1,1)〜C(6,1)(i=1,・・・,10)に格納される。
なお、上記処理において、アレイX (m=1,・・・,10)を用いた畳み込み処理は、異なるアレイを用いた処理において、並列に実行することも可能であり、それらを並列に実行すれば処理時間の短縮が図られるという利点が得られる。
(処理層30による第3畳み込み処理)
次に、第3の核Wを用いた処理層30によるアレイA〜Aの第1列〜第4列に関する畳み込み処理を図12で説明した場合と同様に行い、この畳み込み処理の結果を記憶装置50のメモリ素子M〜Mに格納する。この畳み込み処理は、図12に説明する畳み込み処理において、核Wを核Wに置き換えて行われる。
続いて、処理層30によって、メモリ素子M(1≦k≦8)に格納されている数値の各々にバイアスBを加え、例えばReLU関数(Rectified Linear Unit)等の発火関数処理を必要に応じて施し、改めてメモリ素子Mに格納する。
(処理層60による第3畳み込み処理)
続いて、第3の核Wを用いたアレイA〜Aの第1列〜第4列に関する畳み込み処理の結果に対する第1乃至第10の核X〜X10のアレイX 〜X10 のそれぞれの第1列を用いた第3畳み込み処理を図13Iおよび図13Jで説明した処理層60による第2畳み込み処理と同様に行う。
第3の核Wを用いた処理層30によるアレイA〜Aの第1列〜第4列に関する畳み込み処理と、第1乃至第10の核X〜X10のアレイX 〜X10 のそれぞれの第1列を用いた処理層60によるメモリ素子M〜Mに対する畳み込み処理が完了し、この畳み込み処理された結果が図13Kに示すように、記憶装置70のアレイC(i=1,・・・,10)の第1列のメモリ素子C(1,1)〜C(6,1)(i=1,・・・,10)に格納される。
(処理層30の畳み込み処理および処理層60による畳み込み処理)
同様にして、第iの核W(i=4,・・・,10)を用いた処理層30によるアレイA〜Aの第1列〜第4列に関する畳み込み処理を図12に示す場合と同様に行い、この畳み込み処理の結果がメモリ素子M〜Mに記憶される。このとき、処理層30によって、メモリ素子M(1≦k≦8)に格納されている数値の各々にバイアスBが(i=1,・・・,10)を加えられ、例えばReLU関数(Rectified Linear Unit)等の発火関数処理を必要に応じて施し、改めてメモリ素子Mに格納される。
続いて、メモリ素子M〜Mに対する第1乃至第10の核X〜X10のアレイX 〜X10 のそれぞれの第1列を用いた第3畳み込み処理を、図13Iおよび図13Jで説明した処理層60による第2畳み込み処理と同様に行う。
これらの処理をi=4,・・・,10の各々に対して順次、行う。
以上により、第iの核W(i=1,・・・,10)を用いた処理層30によるアレイA〜Aの第1列〜第4列に関するそれぞれの畳み込み処理と、これらの畳み込み処理のそれぞれに対する第1乃至第10の核X〜X10のアレイX 〜X10 のそれぞれの第1列を用いた処理層60によるメモリ素子M〜Mに対する畳み込み処理が完了し、この結果が図13Lに示すように、記憶装置70のアレイC〜C10のそれぞれの第1列に格納される。
(処理層30による畳み込み処理)
次に、図4に示す記憶装置40に格納されている第1の核Wを用いて、記憶装置20におけるアレイA〜Aの第2乃至第5列のメモリ素子の畳み込み処理を処理層30によって行い、処理結果を記憶装置50のメモリ素子M〜Mに格納する。
続いて、処理層30によって、メモリ素子M(1≦k≦8)に格納されている数値の各々にバイアスBを加え、例えばReLU関数(Rectified Linear Unit)等の発火関数処理を必要に応じて施し、改めてメモリ素子Mに格納する。
(処理層60による畳み込み処理)
次に、核XのアレイX のメモリ素子X (i,1)(i=1,・・・,6)を用いて、図13A乃至図13Fで説明した処理と同様に、処理層60による畳み込み処理を行い、処理結果を記憶装置のアレイCの第2列のメモリ素子C(1,2)〜C(6,2)にそれぞれ格納する。続いてX (i,2)(i=1,・・・,6)を用いて、図13A乃至図13Fで説明した処理と同様に、処理層60による畳み込み処理を行い、処理結果をメモリ素子C(i、1)に格納されている数値に加算し、この加算された数値をメモリ素子C(i、1)に改めて格納する。
以上により、メモリ素子M〜Mに対する第1の核XのアレイX の第2列を用いた畳み込み処理が完了する。この処理結果を図14Aに示す。
次に、第i(i=2,・・・,10)の核XのアレイX の第2列を用いた畳み込み処理を、アレイX の第2列を用いて説明した場合と同様に行い、処理結果をそれぞれ記憶装置70のアレイCの第1列のメモリ素子C(1,1)〜C(6,1)に格納されている数値に加算しこれらの和をメモリ素子C(1,1)〜C(6,1)に改めて格納する。そしてアレイX の第1列を用いた畳み込み処理を、アレイX の第1列を用いて説明した場合と同様に行い、処理結果を記憶装置のアレイCの第2列のメモリ素子C(1,2)〜C(6,2)に格納する。この処理結果を図14Bに示す。図14Bは、核Wを用いてアレイA〜Aの第2行乃至第5列に関して畳み込み処理を行い、これらの畳み込み処理に対して核X(i=2,・・・,10)のアレイX の第1列と第2列とを用いた畳み込み処理の結果を示す。図14Aおよび図14Bで説明した処理の内の相異なる核に対する処理は並列に実行することも可能であり、それらを並列に実行すれば処理時間の短縮が図られるという利点が得られる。
(処理層30による畳み込み処理)
次に、第2の核Wを用いて記憶装置20におけるアレイA〜Aの第2乃至第5列のメモリ素子に対する畳み込み処理を処理層30によって行い、処理結果を記憶装置50のメモリ素子M〜Mに格納する。続いて、処理層30によって、メモリ素子M(1≦k≦8)に格納されている数値の各々にバイアスBを加え、例えばReLU関数(Rectified Linear Unit)等の発火関数処理を必要に応じて施し、改めてメモリ素子Mに格納する。
(処理層60による畳み込み処理)
次に、第1の核XのアレイX の第1列を用いてメモリ素子M〜Mに対して畳み込みを行い、処理結果を記憶装置70のアレイCの第2列のメモリ素子C(1,2)〜C(6、2)に格納されている数値との和をそれぞれ演算し第2列のメモリ素子C(1,2)〜C(6、2)に改めて格納する。続いてアレイX の第2列を用いてメモリ素子M〜Mに対して畳み込みを行い、処理結果と対応するアレイCの第1列のメモリ素子に格納されている値との和を演算し、それらの和を対応するアレイCの第1列のメモリ素子に改めて格納する。
同様に、第i(i=2,・・・,10)の核XのアレイX の第1列と第2列とを用いてメモリ素子M〜Mに対して畳み込みを行い、上記処理結果とアレイCの第2列のメモリ素子C(1,2)〜C(6、2)に格納されている数値との和をそれぞれ演算し、それらの和を対応するアレイCの第2列のメモリ素子に改めて格納するとともに、上記処理結果とアレイCの第1列のメモリ素子C(1,1)〜C(6、1)に格納されている数値との和をそれぞれ演算し、それらの和を対応するアレイCの第1列のメモリ素子に改めて格納する。
以上により、第1の核Wを用いたアレイA〜Aの第2乃至第5列のメモリ素子に対する畳み込み処理の結果がメモリ素子M〜Mに格納され、これらのメモリ素子M〜Mに対する第i(i=2,・・・,10)の核XのアレイX の第1列と第2列とを用いた畳み込み処理が完了する。
(処理層30および処理層60による畳み込み処理)
次に、第i(i=2,・・・,10)の核Wを用いてアレイA〜Aの第2乃至第5列のメモリ素子に対する畳み込み処理を同様に行い、これらの畳み込み処理のそれぞれに対して第jの核Xの(j=1,・・・,10)アレイX の第1列と第2列とを用いて畳み込み処理を処理層60によって行い、これらの処理結果は、記憶装置70のアレイCの第1列および第2列に格納される。この処理結果を図14Cに示す。
(処理層30による畳み込み処理)
次に、図4に示す記憶装置40に格納されている第1の核Wを用いて、記憶装置20に格納されているアレイA〜Aの第3乃至第6列のメモリ素子に対して畳み込み処理を処理層30によって行い、処理結果を記憶装置50のメモリ素子M〜Mに格納する。
続いて、処理層30によって、メモリ素子M(1≦k≦8)に格納されている数値の各々にバイアスBを加え、例えばReLU関数(Rectified Linear Unit)等の発火関数処理を必要に応じて施し、改めてメモリ素子Mに格納する。
(処理層60による畳み込み処理)
次に、メモリ素子M〜Mに対する第1の核XのアレイX の第3列を用いた畳み込み処理を図13A乃至図13Fで説明した処理と同様に行う。この処理結果は、図14Dに示すように、記憶装置70に格納されたアレイCの第3列、第2列、第1列に格納される。なお、このアレイCの第3列には、第1の核XのアレイX の第1列を用いた畳み込み処理が格納され、第2列のメモリ素子C(1,2)〜C(6,2)に記憶された数値と第1の核XのアレイX の第2列を用いた畳み込み処理の結果との和が改めて第2列のメモリ素子C(1,2)〜C(6,2)に格納され、アレイCの第3列のメモリ素子C(1,3)〜C(6,3)に格納された数値と第1の核XのアレイX の第3列を用いた畳み込み処理の結果との和が改めてアレイCの第3列のメモリ素子C(1,3)〜C(6,3)に格納される。
続いて、メモリ素子M〜Mに対して第1の核XのアレイX を第i(i=2,・・・,10)の核XのアレイX の第1列から第3列に置き換えた畳み込み処理を図14Dで説明した場合と同様に行う。この処理結果を図14Eに示す。なお、図14D、14Eで説明した処理の内の相異なるアレイX (m=1,・・・,10)に対する処理は並列に実行することも可能であり、それらを並列に実行すれば処理時間の短縮が図られるという利点が得られる。
(処理層30および処理層60による畳み込み)
次に、記憶装置40に格納されている第i(i=2、・・・,10)の核Wを用いて、記憶装置20に格納されているアレイA〜Aの第3乃至第6列のメモリ素子に対して畳み込み処理を処理層30によって行い、処理結果を記憶装置50のメモリ素子M〜Mに格納する。続いて、処理層30によって、メモリ素子M(1≦k≦8)に格納されている数値の各々にバイアスBを加え、例えばReLU関数(Rectified Linear Unit)等の発火関数処理を必要に応じて施し、改めてメモリ素子Mに格納する。続いて、第iの核W(i=2、・・・,10)を用いて行われた畳み込み処理のそれぞれに対して、第j(j=2,・・・,10)の核XのアレイX の第1列から第3列を用いた畳み込み処理を図14Dおよび図14Eで説明した場合と同様に行い、処理結果をアレイCの第3列、第2列、第1列に格納する。この処理結果を図14Fに示す。このとき、アレイC(i=1,・・・,10)の第1列の各メモリ素子C(1,1)〜Ci(6、1)に対してバイアス値Yを加算し、必要に応じて発火関数の処理を施した値を改めてC(1,1)〜C(6、1)に格納する。
以上により、第iの核W(i=1、・・・,10)を用いて行われた畳み込み処理のそれぞれに対して、第j(j=1,・・・,10)の核XのアレイX の第1列から第3列を用いた畳み込み処理が図14Dおよび図14Eで説明した場合と同様に行われ、処理結果がアレイCの第3列、第2列、第1列に格納される。
次に、記憶装置40に格納されている第i(i=1,・・・,10)の核Wを用いて、記憶装置20に格納されているアレイA〜Aの第4乃至第7列のメモリ素子に対して畳み込み処理を処理層30によって行い、処理結果を記憶装置50のメモリ素子M〜Mに格納する。続いて、処理層30によって、メモリ素子M(1≦k≦8)に格納されている数値の各々にバイアスBを加え、例えばReLU関数(Rectified Linear Unit)等の発火関数処理を必要に応じて施し、改めてメモリ素子Mに格納する。その後、図14D乃至図14Fで説明した場合と同様に、第i(i=1,・・・,10)の核Wを用いたアレイA〜Aの第4乃至第7のメモリ素子に対して行われた畳み込み処理の結果それぞれに対して第jの核X(j=1,・・・,10)を用いて畳み込み処理を処理層60によって行い、これらの処理結果は、記憶装置70のアレイCの第4列、第3列、および第2列に格納される。
次に、記憶装置40に格納されている第i(i=1,・・・,10)の核Wを用いて、記憶装置20に格納されているアレイA〜Aの第5乃至第8列のメモリ素子に対して畳み込み処理を処理層30によって行い、処理結果を記憶装置50のメモリ素子M〜Mに格納する。続いて、処理層30によって、メモリ素子M(1≦k≦8)に格納されている数値の各々にバイアスBを加え、例えばReLU関数(Rectified Linear Unit)等の発火関数処理を必要に応じて施し、改めてメモリ素子Mに格納する。その後、図14D乃至図14Fで説明した場合と同様に、第i(i=1,・・・,10)の核Wを用いたアレイA〜Aの第5乃至第8のメモリ素子に対して行われた畳み込み処理の結果それぞれに対して第jの核X(j=1,・・・,10)を用いて畳み込み処理を処理層60によって行い、これらの処理結果は、記憶装置70のアレイCの第5列、第4列、および第3列に格納される。
次に、記憶装置40に格納されている第i(i=1,・・・,10)の核Wを用いて、記憶装置20に格納されているアレイA〜Aの第6乃至第9列のメモリ素子に対して畳み込み処理を処理層30によって行い、処理結果を記憶装置50のメモリ素子M〜Mに格納する。続いて、処理層30によって、メモリ素子M(1≦k≦8)に格納されている数値の各々にバイアスBを加え、例えばReLU関数(Rectified Linear Unit)等の発火関数処理を必要に応じて施し、改めてメモリ素子Mに格納する。その後、図14D乃至図14Fで説明した場合と同様に、第i(i=1,・・・,10)の核Wを用いたアレイA〜Aの第6乃至第9のメモリ素子に対して行われた畳み込み処理の結果それぞれに対して第jの核X(j=1,・・・,10)を用いて畳み込み処理を処理層60によって行い、これらの処理結果は、記憶装置70のアレイCの第6列、第5列、および第4列に格納される。ここまでの処理の結果を図14Gに示す。
次に、記憶装置40に格納されている第i(i=1,・・・,10)の核Wを用いて、記憶装置20に格納されているアレイA〜Aの第7乃至第10列のメモリ素子に対して畳み込み処理を処理層30によって行い、処理結果を記憶装置50のメモリ素子M〜Mに格納する。続いて、処理層30によって、メモリ素子M(1≦k≦8)に格納されている数値の各々にバイアスを加え、例えばReLU関数(Rectified Linear Unit)等の発火関数処理を必要に応じて施し、改めてメモリ素子Mに格納する。その後、図14D乃至図14Fで説明した場合と同様に、アレイA〜Aの第7乃至第10列のメモリ素子に対して行われた畳み込み処理の結果それぞれに対して第jの核X(j=1,・・・,10)を用いて畳み込み処理を処理層60によって行い、これらの処理結果は、記憶装置70のアレイCの第6列および第5列に格納される。このとき、アレイCの第6列および第5列にはそれぞれ、処理層60による畳み込み処理結果が加算され、その加算結果がアレイCの第6列および第5列に改めて格納される。この処理結果を図14Hに示す。
次に、図14Hで説明した処理において、第1の核Xを第i(i=2,・・・,10)の核Xに置き換えた処理を行う。この処理結果を図14Iに示す。すなわち、アレイC(m=2,・・・,10)の第5列および第6列には、新たな数値が格納される。なお、図14Hおよび図14Iで説明した処理の内、相異なる核X(i=1,・・・,10)に対する処理は並列に実行することも可能であり、それらを並列に実行すれば処理時間の短縮が図られるという利点が得られる。
以上の処理により、図14Jに示す様にC(i=1,・・・,10)の第5列および第6列に新たな数値が格納される。
次に、記憶装置40に格納されている第i(i=1,・・・,10)の核Wを用いて、記憶装置20に格納されているアレイA〜Aの第8乃至第11列のメモリ素子に対して畳み込み処理を処理層30によって行い、処理結果を記憶装置50のメモリ素子M〜Mに格納する。続いて、処理層30によって、メモリ素子M(1≦k≦8)に格納されている数値の各々にバイアスBを加え、例えばReLU関数(Rectified Linear Unit)等の発火関数処理を必要に応じて施し、改めてメモリ素子Mに格納する。その後、第i(i=1,・・・,10)の核Wを用いたアレイA〜Aの第8乃至第11のメモリ素子に対して行われた畳み込み処理の結果それぞれに対して、図13A乃至図13Fで説明した処理において、第1の核XのアレイX を第1の核XのアレイX に置き換えて畳み込み処理を行う。この畳み込み処理は、この畳み込み処理の結果がアレイCの第6列のメモリ素子に格納された数値に加えられ、この和がアレイCの第6列のメモリ素子に改めて格納される。この処理の結果を図14Kに示す。
次に、図14Kで説明した処理において、第1の核XのアレイX (i=1,・・・,10)の第3列を第m(m=2,・・・,10)の核XのアレイX の第3列に置き換えて畳み込み処理を行い、処理結果がアレイCの第6列のアレイCの第6列のメモリ素子に格納された数値に加えられ、この和がアレイCの第6列のメモリ素子に改めて格納される。この処理の結果を図14Lに示す。
図14Kおよび図14Lで説明した処理の内、相異なる核X(i=1,・・・,10)に対する処理は並列に実行することも可能であり、それらを並列に実行すれば処理時間の短縮が図られるという利点が得られる。
次に、図14Jで説明した処理に続く処理において、第1の核WのアレイW (h=1,・・・,10)を第nの核W(n=2,・・・,10)のアレイW に置き換えて畳み込み処理を行い、この畳み込み処理のそれぞれの結果に対して第mの核XのアレイX を用いた畳み込みを処理層60によって行う。この処理結果をアレイC(m=2,・・・,10)の第6列のメモリ素子に格納されている数値に加えられ、この和がアレイC(m=2,・・・,10)の第6列のメモリ素子に改めて格納される。そして、アレイC(m=1,・・・,10)の第6列のメモリ素子に格納されている数値にバイアス値Yを加算し、必要に応じて例えばRectified Linear Unit等の発火関数の処理を施した値を改めてアレイC(m=1,・・・,10)の第6列のメモリ素子に改めて格納する。この処理結果を図14Mに示す。
以上により、処理層30による畳み込み処理と、この畳み込み処理のそれぞれに対する処理層60による畳み込み処理が施された数値がアレイC(m=1,・・・,10)のメモリ素子C(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に示すように、アレイE〜Eを備え、各アレイE(i=1,2.3)は15行15列のメモリ素子を有する。畳み込み処理に用いられる核W(i=1,・・・.7)は、アレイW 〜W を有し、各アレイW (j=1,2,3)は5行5列のメモリ素子を有する。
記憶装置700は、外部記憶装置600と同じサイズのアレイF〜Fを有し、各アレイF(i=1,2.3)は15行15列のメモリ素子を有する。また、記憶装置800は、アレイG〜Gを有し、各アレイG(i=1,・・・.7)は11行11列のメモリ素子を有する。
一方、アレイE〜Eを有する外部記憶装置600の配列に対して核Wを用いて図2で説明した従来の畳み込み処理を行うと、外部記憶装置600に格納されている数値の配列を7回、読み出す必要がある。
これに対して、第3実施形態では、外部記憶装置600に格納されている数値の配列を先ず記憶装置700にアレイF〜Fとして格納し、アレイG〜Gを有する記憶装置800に格納するための畳み込み処理は、記憶装置700に格納されているアレイF〜Fに対して行われる。それ故、7回の数値の配列の読み出しは記憶装置700に格納されているF〜Fに対して行われる。
一般に、記憶装置からの読み出し時間は、外部記憶装置からの読み出し時間に比べて短い。それ故、第3実施形態においては、従来の場合と比較して処理時間が短縮され、その結果として高速動作が実現される。
第3実施形態においては、外部記憶装置600に格納された数値のアレイE〜Eを改めて格納するための記憶装置700はアレイE〜Eと等しいサイズを持つとしたが、このことに限るものではなく、アレイE〜Eと異なるサイズを持つとしてもよい。アレイE〜Eと同じかそれ以上のサイズを持つとしても同様の効果が得られることは無論である。但し、アレイE〜Eと同じサイズを持つとした場合には、記憶装置の容量が少なくて済むという他の利点が得られる。
(第1変形例)
この第1変形例による演算処理装置を図19に示す。この第1変形例の演算処理装置は、図18に示す第3実施形態の演算処理装置において、記憶装置700がアレイF〜Fを備え、各アレイF(i=1,2,3)は15行5列のメモリ素子を有している。また、畳み込み処理に用いられる核は、第1乃至第7の核W〜Wを有している。第i(i=1,・・・,7)の核WはアレイW 、W 、W を有し、各アレイW は(j=1,・・・,3)は、5行5列のメモリ素子を有する。特に図19に示す様に、図中に示す行方向ないし奥行き方向にはアレイE〜Eと等しいサイズないし深さ(図19では3)を持ち且つ列方向には畳み込み処理に用いる核のサイズと等しい大きさを持つとしてもよい。この様にすると記憶装置の数が削減されるので回路面積の削減が図られるという他の利点が得られる。
次に、第1変形例の演算処理装置における畳み込み処理の動作について図20乃至図22Kを参照して説明する。以下の説明においては、各アレイE(i=1,2,3)の第m行第n列のメモリ素子は、E(m,n)と表される。また各アレイF(i=1,2,3)の第m行第n列のメモリ素子は、F(m,n)と表される。各アレイG(i=1,・・・,7)の第m行第n列のメモリ素子は、G(m,n)と表される。第i(i=1,・・・,7)の核Wは、アレイW 〜W を有し、各アレイW (j=1,2,3)のメモリ素子第m行第n列のメモリ素子は、W (m,n)と表される。
まず、図20に示す様に、外部記憶装置600のアレイE(i=1,2,3)の第1行〜第15行かつ第1列〜第5列のメモリ素子E(1、1)〜E(15,1)、E(1、2)〜E(15,2)、E(1,3)〜E(15,3)、E(1、4)〜E(15,4)、E(1,5)〜E(15,5)に格納されている数値を読み出し、記憶装置700のアレイFの第1行〜第15行かつ第1列〜第5列のメモリ素子F(1、1)〜F(15,1)、F(1、2)〜F(15,2)、F(1,3)〜F(15,3)、F(1、4)〜F(15,4)、F(1,5)〜F(15,5)に格納する。なお、以下の説明においては、例えば、メモリ素子E(1、1)は、このメモリ素子に格納されている数値をも表す。他のメモリ素子も同様である。
次に、図21Aに示すように、第1の核WにおけるアレイW の第1行第1列のメモリ素子W (1,1)に格納されている数値と、記憶装置700のアレイFの第1行第1列のメモリ素子F (1,1)との積を演算し、この積を記憶装置800のアレイGの第1行第1列のメモリ素子G (1,1)に格納する。続いて、アレイW のメモリ素子W (1,1)に格納されている数値と、アレイFの第2行第1列のメモリ素子F (2,1)との積を演算し、この積をアレイGの第2行第1列のメモリ素子G (2,1)に格納する。続いて、アレイW のメモリ素子W (1,1)に格納されている数値と、アレイFの第3行第1列のメモリ素子F (3,1)との積を演算し、この積をアレイGの第3行第1列のメモリ素子G (3,1)に格納する。また、アレイW のメモリ素子W (1,1)に格納されている数値と、アレイFの第4行第1列のメモリ素子F (4,1)に格納されている数値との積を演算し、この積をアレイGの第4行のメモリ素子G (4、1)に格納する。引き続き、アレイW のメモリ素子W (1,1)に格納されている数値と、アレイFの第5行第1列のメモリ素子F (5、1)に格納されいる数値との積を演算し、この積をアレイGの第5行第1列のメモリ素子G (5,1)に格納する。以上の処理を並列に実行することも可能であり、それらを並列に実行すれば処理時間の短縮が図られるという利点が得られる。
次に、図21Bに示すように、核WにおけるアレイW の第2行第1列のメモリ素子W (2,1)に格納されている数値と、記憶装置700のアレイFの第2行第1列のメモリ素子F (2,1)との積を演算し、この積と、記憶装置800のアレイGの第1行第1列のメモリ素子G (1,1)に格納されている数値との和を演算し、この和を改めてメモリ素子G (1,1)に格納する。続いて、アレイW のメモリ素子W (2,1)に記憶されている数値と、アレイFの第3行第1列のメモリ素子F (3,1)との積を演算し、この積と、記憶装置800のアレイGの第2行第1列のメモリ素子G (2,1)に格納されている数値との和を演算し、この和を改めてメモリ素子G (2,1)に格納する。その後、アレイW の第2行第1列のメモリ素子W (2,1)に格納されている数値と、アレイFの第4行第1列のメモリ素子F (4,1)との積を演算し、この積と、記憶装置800のアレイGの第3行第1列のメモリ素子G (3,1)に格納されている数値との和を演算し、この和を改めてメモリ素子G (3,1)に格納する。また、アレイW の第2行第1列のメモリ素子W (2,1)に格納されている数値と、アレイFの第5行第1列のメモリ素子F (5,1)との積を演算し、この積と、記憶装置800のアレイGの第4行第1列のメモリ素子G (4,1)に格納されている数値との和を演算し、この和を改めてメモリ素子G (4,1)に格納する。引き続き、アレイW の第2行第1列のメモリ素子W (2,1)に格納されている数値と、と、アレイFの第6行第1列のメモリ素子F (6,1)との積を演算し、この積と、記憶装置800のアレイGの第5行第1列のメモリ素子G (5,1)に格納されている数値との和を演算し、この和を改めてメモリ素子G (5,1)に格納する。以上の処理を並列に実行することも可能であり、それらを並列に実行すれば処理時間の短縮が図られるという利点が得られる。
以下、第1実施形態において図5A〜5Qで説明した処理と同様に、記憶装置700のアレイF〜Fに対する第1の核WにおけるアレイW 〜W を用いた畳み込み処理を行う。その後、アレイGの第1列のメモリ素子G(1,1)〜G(11,1)にそれぞれバイアス値Bを加え、例えばRectified Linear Unit等の発火関数処理を必要に応じて施し、改めてアレイGの第1列のメモリ素子G(1,1)〜G(11,1)にそれぞれ格納する。これにより、図21Cに示すように、記憶装置800のアレイGの第1列のメモリ素子G(1,1)〜G(11,1)には、第1の核Wを用いた外部記憶装置600のアレイE〜Eの第1乃至第5列に対する畳み込み処理が完了したデータが格納される。
次に、図21A乃至21Cで説明した処理において、第1の核Wを第2の核Wに置き換えて畳み込み処理を行う。これにより、畳み込み処理結果が記憶装置800のアレイGの第1列のメモリ素子G(1,1)〜G(11,1)に格納される。その後、アレイGの第1列のメモリ素子G(1,1)〜G(11,1)にそれぞれバイアス値Bを加え、例えばRectified Linear Unit等の発火関数処理を必要に応じて施し、改めてアレイGの第1列のメモリ素子G(1,1)〜G(11,1)にそれぞれ格納する。これにより、図21Dに示すように、記憶装置800のアレイGの第1列のメモリ素子G(1,1)〜G(11、1)には、第2の核Wを用いた外部記憶装置600のアレイE〜Eの第1乃至第5列に対する畳み込み処理が完了したデータが格納される。
続いて図21A乃至21Cで説明した処理において、第1の核Wを第i(i=3,・・・,7)の核Wに置き換えて畳み込み処理を行う。これにより、畳み込み処理結果が記憶装置800の第i(i=3,・・・,7)のアレイGの第1列のメモリ素子G(1,1)〜G(11,1)に格納される。その後、アレイGの第1列のメモリ素子G(1,1)〜G(11,1)にそれぞれバイアス値Bを加え、例えばRectified Linear Unit等の発火関数処理を必要に応じて施し、改めてアレイGの第1列のメモリ素子G(1,1)〜G(11,1)にそれぞれ格納する。これにより、図21Eに示すように、記憶装置800の第i(i=1,・・・,7)のアレイGの第1列のメモリ素子G(1,1)〜G(11、1)には、第1乃至第7の核W〜Wを用いた外部記憶装置600のアレイE〜Eの第1乃至第5列に対する畳み込み処理が完了したデータが格納される。
次に、図22Aに示すように、外部記憶装置600のアレイE〜Eのそれぞれの第6列のデータを読み出し、記憶装置700のアレイF〜Fの第1列のメモリ素子に格納されているデータと置き換える。このとき、記憶装置700のアレイF〜Fの第2乃至第5列のメモリ素子には、前の処理によって外部記憶装置600のアレイE〜Eの第2列乃至第5列から読み出されたデータが格納されている。
続いて、図21A乃至21Dで説明した処理において、アレイF〜Fのそれぞれのデータに対して、第1乃至第7の核W〜Wのアレイを用いて、畳み込み処理を行い、処理結果を記憶装置800のアレイG〜Gの第2列のメモリ素子に格納する。なお、この畳み込み処理においては、図22Bに示すように、第i(i=1,・・・,7)の核WのアレイW の(j=1,2,3)の第1列のメモリ素子と記憶装置のアレイFの第2列の対応するメモリ素子との積和が演算され、アレイW の(j=1,2,3)の第2列のメモリ素子と記憶装置のアレイFの第3列の対応するメモリ素子との積和が演算され、アレイW の(j=1,2,3)の第3列のメモリ素子と記憶装置のアレイFの第4列の対応するメモリ素子との積和が演算され、アレイW の(j=1,2,3)の第4列のメモリ素子と記憶装置のアレイFの第5列の対応するメモリ素子との積和が演算され、アレイW の(j=1,2,3)の第5列のメモリ素子と記憶装置のアレイFの第1列の対応するメモリ素子との積和が演算される。第i(i=1,・・・,7)の核Wと記憶装置700のアレイF(j=1,2,3)との積和は記憶装置800のアレイGの第2列のメモリ素子に格納される。
その後、各アレイG(i=1,・・・,7)の第2列のメモリ素子G(1,2)〜G(11,2)に格納されている数値にバイアス値Bを加算し、例えばRectified Linear Unit等の発火関数処理を必要に応じて施し、改めてアレイGの第2列のメモリ素子G(1,2)〜G(11,2)にそれぞれ格納する。これにより、図22Bに示すように、記憶装置800の第i(i=1,・・・,7)のアレイGの第2列のメモリ素子G(1,2)〜G(11、2)には、第1乃至第7の核W〜Wを用いた外部記憶装置600のアレイE〜Eの第2乃至第6列に対する畳み込み処理が完了したデータが格納される。
次に、図22Cに示すように、外部記憶装置600のアレイE〜Eのそれぞれの第7列のデータを読み出し、記憶装置700のアレイF〜Fの第2列のメモリ素子に格納されているデータと置き換える。このとき、記憶装置700のアレイF〜Fの第3乃至第5列のメモリ素子には、外部記憶装置600のアレイE〜Eの第3列乃至第5列から読み出されたデータが格納され、記憶装置700のアレイF〜Fの第1および第2列のメモリ素子には、外部記憶装置600のアレイE〜Eの第6列および第7列から読み出されたデータが格納される。
続いて、図21A乃至21Dで説明した処理において、アレイF〜Fのそれぞれのデータに対して、第1乃至第7の核W〜Wのアレイを用いて、畳み込み処理を行い、処理結果を記憶装置800のアレイG〜Gの第3列のメモリ素子に格納する。なお、この畳み込み処理においては、図22Dに示すように、第i(i=1,・・・,7)の核WのアレイW の(j=1,2,3)の第1列のメモリ素子と記憶装置のアレイFの第3列の対応するメモリ素子との積和が演算され、アレイW の(j=1,2,3)の第2列のメモリ素子と記憶装置のアレイFの第4列の対応するメモリ素子との積和が演算され、アレイW の(j=1,2,3)の第3列のメモリ素子と記憶装置のアレイFの第5列の対応するメモリ素子との積和が演算され、アレイW の(j=1,2,3)の第4列のメモリ素子と記憶装置のアレイFの第1列の対応するメモリ素子との積和が演算され、アレイW の(j=1,2,3)の第5列のメモリ素子と記憶装置のアレイFの第2列の対応するメモリ素子との積和が演算される。第i(i=1,・・・,7)の核Wと記憶装置700のアレイF(j=1,2,3)との積和は記憶装置800のアレイGの第3列のメモリ素子に格納される。
その後、各アレイG(i=1,・・・,7)の第3列のメモリ素子G(1,3)〜G(11,3)に格納されている数値にバイアス値Bを加算し、例えばRectified Linear Unit等の発火関数処理を必要に応じて施し、改めてアレイGの第3列のメモリ素子G(1,3)〜G(11,3)にそれぞれ格納する。これにより、図22Dに示すように、記憶装置800の第i(i=1,・・・,7)のアレイGの第3列のメモリ素子G(1,3)〜G(11、3)には、第1乃至第7の核W〜Wを用いた外部記憶装置600のアレイE〜Eの第3乃至第7列に対する畳み込み処理が完了したデータが格納される。
次に、図22Eに示すように、外部記憶装置600のアレイE〜Eのそれぞれの第8列のデータを読み出し、記憶装置700のアレイF〜Fの第3列のメモリ素子に格納されているデータと置き換える。このとき、記憶装置700のアレイF〜Fの第4および第5列のメモリ素子には、外部記憶装置600のアレイE〜Eの第4列および第5列から読み出されたデータが格納され、記憶装置700のアレイF〜Fの第1乃至第3列のメモリ素子には、外部記憶装置600のアレイE〜Eの第6乃至第8列から読み出されたデータが格納される。
続いて、図21A乃至21Dで説明した処理において、アレイF〜Fのそれぞれのデータに対して、第1乃至第7の核W〜Wのアレイを用いて、畳み込み処理を行い、処理結果を記憶装置800のアレイG〜Gの第4列のメモリ素子に格納する。なお、この畳み込み処理においては、図22Fに示すように、第i(i=1,・・・,7)の核WのアレイW の(j=1,2,3)の第1列のメモリ素子と記憶装置のアレイFの第4列の対応するメモリ素子との積和が演算され、アレイW の(j=1,2,3)の第2列のメモリ素子と記憶装置のアレイFの第5列の対応するメモリ素子との積和が演算され、アレイW の(j=1,2,3)の第3列のメモリ素子と記憶装置のアレイFの第1列の対応するメモリ素子との積和が演算され、アレイW の(j=1,2,3)の第4列のメモリ素子と記憶装置のアレイFの第2列の対応するメモリ素子との積和が演算され、アレイW の(j=1,2,3)の第5列のメモリ素子と記憶装置のアレイFの第3列の対応するメモリ素子との積和が演算される。第i(i=1,・・・,7)の核Wと記憶装置700のアレイF(j=1,2,3)との積和は記憶装置800のアレイGの第4列のメモリ素子に格納される。
その後、各アレイG(i=1,・・・,7)の第4列のメモリ素子G(1,4)〜G(11,4)に格納されている数値にバイアス値Bを加算し、例えばRectified Linear Unit等の発火関数処理を必要に応じて施し、改めてアレイGの第4列のメモリ素子G(1,4)〜G(11,4)にそれぞれ格納する。これにより、図22Fに示すように、記憶装置800の第i(i=1,・・・,7)のアレイGの第4列のメモリ素子G(1,4)〜G(11、4)には、第1乃至第7の核W〜Wを用いた外部記憶装置600のアレイE〜Eの第4乃至第8列に対する畳み込み処理が完了したデータが格納される。
次に、図22Gに示すように、外部記憶装置600のアレイE〜Eのそれぞれの第9列のデータを読み出し、記憶装置700のアレイF〜Fの第4列のメモリ素子に格納されているデータと置き換える。このとき、記憶装置700のアレイF〜Fの第5列のメモリ素子には、外部記憶装置600のアレイE〜Eの第5列から読み出されたデータが格納され、記憶装置700のアレイF〜Fの第1乃至第4列のメモリ素子には、外部記憶装置600のアレイE〜Eの第6乃至第9列から読み出されたデータが格納される。
続いて、図21A乃至21Dで説明した処理において、アレイF〜Fのそれぞれのデータに対して、第1乃至第7の核W〜Wのアレイを用いて、畳み込み処理を行い、処理結果を記憶装置800のアレイG〜Gの第5列のメモリ素子に格納する。なお、この畳み込み処理においては、図22Hに示すように、第i(i=1,・・・,7)の核WのアレイW の(j=1,2,3)の第1列のメモリ素子と記憶装置のアレイFの第5列の対応するメモリ素子との積和が演算され、アレイW の(j=1,2,3)の第2列のメモリ素子と記憶装置のアレイFの第1列の対応するメモリ素子との積和が演算され、アレイW の(j=1,2,3)の第3列のメモリ素子と記憶装置のアレイFの第2列の対応するメモリ素子との積和が演算され、アレイW の(j=1,2,3)の第4列のメモリ素子と記憶装置のアレイFの第3列の対応するメモリ素子との積和が演算され、アレイW の(j=1,2,3)の第5列のメモリ素子と記憶装置のアレイFの第4列の対応するメモリ素子との積和が演算される。第i(i=1,・・・,7)の核Wと記憶装置700のアレイF(j=1,2,3)との積和は記憶装置800のアレイGの第5列のメモリ素子に格納される。
その後、各アレイG(i=1,・・・,7)の第5列のメモリ素子G(1,5)〜G(11,5)に格納されている数値にバイアス値Bを加算し、例えばRectified Linear Unit等の発火関数処理を必要に応じて施し、改めてアレイGの第5列のメモリ素子G(1,5)〜G(11,5)にそれぞれ格納する。これにより、図22Hに示すように、記憶装置800の第i(i=1,・・・,7)のアレイGの第5列のメモリ素子G(1,5)〜G(11、5)には、第1乃至第7の核W〜Wを用いた外部記憶装置600のアレイE〜Eの第5乃至第9列に対する畳み込み処理が完了したデータが格納される。
次に、図22Iに示すように、外部記憶装置600のアレイE〜Eのそれぞれの第10列のデータを読み出し、記憶装置700のアレイF〜Fの第5列のメモリ素子に格納されているデータと置き換える。このとき、記憶装置700のアレイF〜Fの第1乃至第4列のメモリ素子には、外部記憶装置600のアレイE〜Eの第5乃至第9列から読み出されたデータが格納される。
続いて、図21A乃至21Dで説明した処理において、アレイF〜Fのそれぞれのデータに対して、第1乃至第7の核W〜Wのアレイを用いて、畳み込み処理を行い、処理結果を記憶装置800のアレイG〜Gの第6列のメモリ素子に格納する。なお、この畳み込み処理においては、図22Jに示すように、第i(i=1,・・・,7)の核WのアレイW の(j=1,2,3)の第1列のメモリ素子と記憶装置のアレイFの第1列の対応するメモリ素子との積和が演算され、アレイW の(j=1,2,3)の第2列のメモリ素子と記憶装置のアレイFの第2列の対応するメモリ素子との積和が演算され、アレイW の(j=1,2,3)の第3列のメモリ素子と記憶装置のアレイFの第3列の対応するメモリ素子との積和が演算され、アレイW の(j=1,2,3)の第4列のメモリ素子と記憶装置のアレイFの第4列の対応するメモリ素子との積和が演算され、アレイW の(j=1,2,3)の第5列のメモリ素子と記憶装置のアレイFの第5列の対応するメモリ素子との積和が演算される。第i(i=1,・・・,7)の核Wと記憶装置700のアレイF(j=1,2,3)との積和は記憶装置800のアレイGの第6列のメモリ素子に格納される。
その後、各アレイG(i=1,・・・,7)の第6列のメモリ素子G(1,6)〜G(11,6)に格納されている数値にバイアス値Bを加算し、例えばRectified Linear Unit等の発火関数処理を必要に応じて施し、改めてアレイGの第6列のメモリ素子G(1,6)〜G(11,6)にそれぞれ格納する。これにより、図22Jに示すように、記憶装置800の第i(i=1,・・・,7)のアレイGの第6列のメモリ素子G(1,6)〜G(11、6)には、第1乃至第7の核W〜Wを用いた外部記憶装置600のアレイE〜Eの第6乃至第10列に対する畳み込み処理が完了したデータが格納される。
次に、図22Aで説明した場合と同様に、外部記憶装置600のアレイE〜Eの第11列のメモリ素子からデータを読み出し、記憶装置の700のアレイF〜Fの第1列のメモリ素子に格納する。その後、図22Bで説明した同様の畳み込み処理を行い、この畳み込み処理結果を記憶装置800のアレイG(i=1,・・・,7)の第7列のメモリ素子に格納する。
続いて、図22Cで説明した場合と同様に、外部記憶装置600のアレイE〜Eの第12列のメモリ素子からデータを読み出し、記憶装置の700のアレイF〜Fの第2列のメモリ素子に格納する。その後、図22Dで説明した同様の畳み込み処理を行い、この畳み込み処理結果を記憶装置800のアレイG(i=1,・・・,7)の第8列のメモリ素子に格納する。
図22Eで説明した場合と同様に、外部記憶装置600のアレイE〜Eの第13列のメモリ素子からデータを読み出し、記憶装置の700のアレイF〜Fの第3列のメモリ素子に格納する。その後、図22Fで説明した同様の畳み込み処理を行い、この畳み込み処理結果を記憶装置800のアレイG(i=1,・・・,7)の第9列のメモリ素子に格納する。
図22Gで説明した場合と同様に、外部記憶装置600のアレイE〜Eの第14列のメモリ素子からデータを読み出し、記憶装置の700のアレイF〜Fの第4列のメモリ素子に格納する。その後、図22Hで説明した同様の畳み込み処理を行い、この畳み込み処理結果を記憶装置800のアレイG(i=1,・・・,7)の第10列のメモリ素子に格納する。
図22Iで説明した場合と同様に、外部記憶装置600のアレイE〜Eの第15列のメモリ素子からデータを読み出し、記憶装置の700のアレイF〜Fの第5列のメモリ素子に格納する。その後、図22Jで説明した同様の畳み込み処理を行い、この畳み込み処理結果を記憶装置800のアレイG(i=1,・・・,7)の第11列のメモリ素子に格納する。
次に、各アレイG(i=1,・・・,7)の各メモリ素子に格納されている数値にバイアス値Bを加算し、例えばRectified Linear Unit等の発火関数処理を必要に応じて施し、改めてアレイGの各メモリ素子にそれぞれ格納する。これにより、図22Kに示すように、記憶装置800のアレイG〜Gの第7列乃至第11列のメモリ素子には、第1乃至第7の核W〜Wを用いた外部記憶装置600のアレイE〜Eの第7乃至第15列に対する畳み込み処理が完了したデータが格納される。
以上の手続きにより、外部記憶装置600のアレイE〜Eのメモリ素子に対して、第1乃至第7の核W〜Wを用いて畳み込み処理を行った結果が記憶装置800を構成するアレイG〜Gのメモリ素子に格納される。
なお、上記の処理の記憶装置800のアレイG〜Gのメモリ素子にデータ(数値)を格納する処理において、異なるアレイG(m=1,・・・,7)に対する処理は並列に行うことも可能であり、並列に行えば処理時間の短縮が図られるという利点が得られる。
第1変形例においては、行方向および奥行き方向がアレイE〜Eと同じサイズおよび深さを持つ記憶装置を用いたが、これに限るものではなく、列方向ないし奥行き方向がアレイE〜Eのそれらと異なる記憶装置を用いても同様の効果が得られる。特に、行方向ないし奥行き方向がアレイE1〜Eと同じサイズおよび深さを持つ核を用いれば、記憶装置700の容量の削減の効果が最も大きくなるという利点が得られる。
また、第1変形例による演算処理装置おいては図19に示した様に、行方向および深さ方向が外部記憶装置600のアレイE〜Eと同じ記憶装置を用いたが、例えば、図23に示すように、奥行き方向および列方向がアレイE〜Eと同じで且つ行方向が核と同じ行を有するアレイH〜Hを有する記憶装置700Aを用いても同様の効果を得ることができる。この場合には、図20乃至図22Kで説明した処理において、図中に示す列方向の座標と行方向の座標とを入れ替えた処理を施すことにより、記憶装置800を構成する全ての記憶装置に必要な処理の為された数値が格納される。なお、図中に示す奥行き(深さ)方向ないし列方向には外部記憶装置のアレイと等しい図の面内方向の大きさないし深さを持ち且つ行方向には畳み込み処理に用いる核の図の面内方向の大きさと等しい大きさを持つとしたが、これに限るものではなく、図中に示す奥行き方向ないし列方向には外部記憶装置600のアレイ以上の面内方向の深さないし大きさを持ち且つ行方向には畳み込み処理に用いる核の図の面内方向の大きさ以上の大きさを持つとしても同様の効果が得られる。特に図中に示す奥行き方向ないし列方向には外部記憶装置600と等しい深さないし図の面内方向の大きさを持ち且つ行方向には畳み込み処理に用いる核の図の面内方向の大きさと等しい大きさを持つとすると記憶装置の個数の削減の効果が最も大きくなるという利点が得られる。
(第2変形例)
次に、第3実施形態の第2変形例による演算処理装置を図24に示す。この第2変形例の演算処理装置は、図18に示す第3実施形態の演算処理装置において、記憶装置700を記憶装置700Bに置き換えた構成を有している。
この記憶装置700Bは、記憶装置600の各アレイE〜Eのそれぞれと同じ大きさの1枚のアレイIを有する。すなわち、アレイIは、15行15列に配置されたメモリ素子を有している。なお、この第2変形例では、アレイIが1枚である場合を例示してあるが、その深さが1であることは本質ではなく他の深さであっても同様の効果が得られることは無論である。
(動作)
次に、第2変形例の演算処理装置に動作について図25乃至図28を参照して説明する。
まず、図25に示す様に、外部記憶装置600のアレイEのメモリ素子に格納されているデータを読み出し、記憶装置700BのアレイIの対応するメモリ素子に格納する。すなわち、アレイEのm行n列のメモリ素子E(m,n)に格納されているデータは、アレイIの対応するメモリ素子I(m,n)に格納する。
続いて、第1の核WのアレイW の第1列のメモリ素子W (1,1)〜W (5,1)に格納されているデータと、アレイIの第1列のメモリ素子I(1,1)〜I(15,1)に格納されているデータとの畳み込み処理を行う。この畳み込み処理は以下のように行われる。
まず、図26Aに示す様に、第1の核WのアレイW の第1行第1列のメモリ素子W (1,1)に格納されているデータと、アレイIの第1行第1列のメモリ素子I(1,1)に格納されているデータとの積を演算し、この積を記憶装置800のアレイGの第1行第1列のメモリ素子G(1,1)に格納する。その後、アレイW の第1行第1列のメモリ素子W (1,1)に格納されているデータと、アレイIの第2行第1列のメモリ素子I(2,1)に格納されているデータとの積を演算し、この積を記憶装置800のアレイGの第2行第1列のメモリ素子G(2,1)に格納する。アレイW の第1行第1列のメモリ素子W (1,1)に格納されているデータと、アレイIの第3行第1列のメモリ素子I(3,1)に格納されているデータとの積を演算し、この積を記憶装置800のアレイGの第3行第1列のメモリ素子G(3,1)に格納する。引き続き、アレイW の第1行第1列のメモリ素子W (1,1)に格納されているデータと、アレイIの第4行第1列のメモリ素子I(4,1)に格納されているデータとの積を演算し、この積を記憶装置800のアレイGの第4行第1列のメモリ素子G(4,1)に格納する。その後、アレイW の第1行第1列のメモリ素子W (1,1)に格納されているデータと、アレイIの第5行第1列のメモリ素子I(5,1)に格納されているデータとの積を演算し、この積を記憶装置800のアレイGの第5行第1列のメモリ素子G(5,1)に格納する。これらの処理結果を図26Aに示す。これらの処理は、並列に実行することも可能であり、それらを並列に実行すれば処理時間の短縮が図られるという利点が得られる。
次に、図26Bに示す様に、第1の核WのアレイW の第2行第1列のメモリ素子W (2,1)に格納されているデータと、アレイIの第2行第1列のメモリ素子I(2,1)に格納されているデータとの積を演算し、この積とアレイGの第1行第1列のメモリ素子G(1,1)に格納されているデータとの和を演算し、この和をアレイGの第1行第1列のメモリ素子G(1,1)に改めて格納する。続いて、アレイW の第2行第1列のメモリ素子W (2,1)に格納されているデータと、アレイIの第3行第1列のメモリ素子I(3,1)に格納されているデータとの積を演算し、この積とアレイGの第2行第1列のメモリ素子G(2,1)に格納されているデータとの和を演算し、この和をアレイGの第2行第1列のメモリ素子G(2,1)に改めて格納する。その後、アレイW の第2行第1列のメモリ素子W (2,1)に格納されているデータと、アレイIの第4行第1列のメモリ素子I(4,1)に格納されているデータとの積を演算し、この積とアレイGの第3行第1列のメモリ素子G(3,1)に格納されているデータとの和を演算し、この和をアレイGの第3行第1列のメモリ素子G(3,1)に改めて格納する。引き続いて、アレイW の第2行第1列のメモリ素子W (2,1)に格納されているデータと、アレイIの第5行第1列のメモリ素子I(5,1)に格納されているデータとの積を演算し、この積とアレイGの第4行第1列のメモリ素子G(4,1)に格納されているデータとの和を演算し、この和をアレイGの第4行第1列のメモリ素子G(4,1)に改めて格納する。その後、アレイW の第2行第1列のメモリ素子W (2,1)に格納されているデータと、アレイIの第6行第1列のメモリ素子I(6,1)に格納されているデータとの積を演算し、この積とアレイGの第5行第1列のメモリ素子G(5,1)に格納されているデータとの和を演算し、この和をアレイGの第5行第1列のメモリ素子G(5,1)に改めて格納する。これらの処理結果を図26Bに示す。これらの処理は、並列に実行することも可能であり、それらを並列に実行すれば処理時間の短縮が図られるという利点が得られる。
次に、第1の核WのアレイW の第3行第1列のメモリ素子W (3,1)に格納されているデータと、アレイIの第3行第1列のメモリ素子I(3,1)に格納されているデータとの積を演算し、この積とアレイGの第1行第1列のメモリ素子G(1,1)に格納されているデータとの和を演算し、この和をアレイGの第1行第1列のメモリ素子G(1,1)に改めて格納する。続いて、アレイW の第3行第1列のメモリ素子W (3,1)に格納されているデータと、アレイIの第4行第1列のメモリ素子I(4,1)に格納されているデータとの積を演算し、この積とアレイGの第2行第1列のメモリ素子G(2,1)に格納されているデータとの和を演算し、この和をアレイGの第2行第1列のメモリ素子G(2,1)に改めて格納する。その後、アレイW の第3行第1列のメモリ素子W (3,1)に格納されているデータと、アレイIの第5行第1列のメモリ素子I(5,1)に格納されているデータとの積を演算し、この積とアレイGの第3行第1列のメモリ素子G(3,1)に格納されているデータとの和を演算し、この和をアレイGの第3行第1列のメモリ素子G(3,1)に改めて格納する。引き続いて、アレイW の第3行第1列のメモリ素子W (3,1)に格納されているデータと、アレイIの第6行第1列のメモリ素子I(6,1)に格納されているデータとの積を演算し、この積とアレイGの第4行第1列のメモリ素子G(4,1)に格納されているデータとの和を演算し、この和をアレイGの第4行第1列のメモリ素子G(4,1)に改めて格納する。その後、アレイW の第3行第1列のメモリ素子W (3,1)に格納されているデータと、アレイIの第7行第1列のメモリ素子I(7,1)に格納されているデータとの積を演算し、この積とアレイGの第5行第1列のメモリ素子G(5,1)に格納されているデータとの和を演算し、この和をアレイGの第5行第1列のメモリ素子G(5,1)に改めて格納する。これらの処理は、並列に実行することも可能であり、それらを並列に実行すれば処理時間の短縮が図られるという利点が得られる。
次に、第1の核WのアレイW の第4行第1列のメモリ素子W (4,1)に格納されているデータと、アレイIの第4行第1列のメモリ素子I(4,1)に格納されているデータとの積を演算し、この積とアレイGの第1行第1列のメモリ素子G(1,1)に格納されているデータとの和を演算し、この和をアレイGの第1行第1列のメモリ素子G(1,1)に改めて格納する。続いて、アレイW の第4行第1列のメモリ素子W (4,1)に格納されているデータと、アレイIの第5行第1列のメモリ素子I(5,1)に格納されているデータとの積を演算し、この積とアレイGの第2行第1列のメモリ素子G(2,1)に格納されているデータとの和を演算し、この和をアレイGの第2行第1列のメモリ素子G(2,1)に改めて格納する。その後、アレイW の第4行第1列のメモリ素子W (4,1)に格納されているデータと、アレイIの第6行第1列のメモリ素子I(6,1)に格納されているデータとの積を演算し、この積とアレイGの第3行第1列のメモリ素子G(3,1)に格納されているデータとの和を演算し、この和をアレイGの第3行第1列のメモリ素子G(3,1)に改めて格納する。引き続いて、アレイW の第4行第1列のメモリ素子W (4,1)に格納されているデータと、アレイIの第7行第1列のメモリ素子I(7,1)に格納されているデータとの積を演算し、この積とアレイGの第4行第1列のメモリ素子G(4,1)に格納されているデータとの和を演算し、この和をアレイGの第4行第1列のメモリ素子G(4,1)に改めて格納する。その後、アレイW の第4行第1列のメモリ素子W (4,1)に格納されているデータと、アレイIの第8行第1列のメモリ素子I(8,1)に格納されているデータとの積を演算し、この積とアレイGの第5行第1列のメモリ素子G(5,1)に格納されているデータとの和を演算し、この和をアレイGの第5行第1列のメモリ素子G(5,1)に改めて格納する。これらの処理は、並列に実行することも可能であり、それらを並列に実行すれば処理時間の短縮が図られるという利点が得られる。
次に、第1の核WのアレイW の第5行第1列のメモリ素子W (5,1)に格納されているデータと、アレイIの第5行第1列のメモリ素子I(5,1)に格納されているデータとの積を演算し、この積とアレイGの第1行第1列のメモリ素子G(1,1)に格納されているデータとの和を演算し、この和をアレイGの第1行第1列のメモリ素子G(1,1)に改めて格納する。続いて、アレイW の第5行第1列のメモリ素子W (5,1)に格納されているデータと、アレイIの第6行第1列のメモリ素子I(6,1)に格納されているデータとの積を演算し、この積とアレイGの第2行第1列のメモリ素子G(2,1)に格納されているデータとの和を演算し、この和をアレイGの第2行第1列のメモリ素子G(2,1)に改めて格納する。その後、アレイW の第5行第1列のメモリ素子W (5,1)に格納されているデータと、アレイIの第7行第1列のメモリ素子I(7,1)に格納されているデータとの積を演算し、この積とアレイGの第3行第1列のメモリ素子G(3,1)に格納されているデータとの和を演算し、この和をアレイGの第3行第1列のメモリ素子G(3,1)に改めて格納する。引き続いて、アレイW の第5行第1列のメモリ素子W (5,1)に格納されているデータと、アレイIの第8行第1列のメモリ素子I(8,1)に格納されているデータとの積を演算し、この積とアレイGの第4行第1列のメモリ素子G(4,1)に格納されているデータとの和を演算し、この和をアレイGの第4行第1列のメモリ素子G(4,1)に改めて格納する。その後、アレイW の第5行第1列のメモリ素子W (5,1)に格納されているデータと、アレイIの第9行第1列のメモリ素子I(9,1)に格納されているデータとの積を演算し、この積とアレイGの第5行第1列のメモリ素子G(5,1)に格納されているデータとの和を演算し、この和をアレイGの第5行第1列のメモリ素子G(5,1)に改めて格納する。これらの処理は、並列に実行することも可能であり、それらを並列に実行すれば処理時間の短縮が図られるという利点が得られる。以上の処理結果を図26Cに示す。
次に、図26Dに示すように、第1の核WのアレイW の第1行第1列のメモリ素子W (1,1)に格納されているデータと、アレイIの第6行第1列のメモリ素子I(6,1)に格納されているデータとの積を演算し、この積をアレイGの第6行第1列のメモリ素子G(6,1)に格納する。続いて、アレイW の第1行第1列のメモリ素子W (1,1)に格納されているデータと、アレイIの第7行第1列のメモリ素子I(7,1)に格納されているデータとの積を演算し、この積をアレイGの第7行第1列のメモリ素子G(7,1)に格納する。その後、アレイW の第1行第1列のメモリ素子W (1,1)に格納されているデータと、アレイIの第8行第1列のメモリ素子I(8,1)に格納されているデータとの積を演算し、この積をアレイGの第8行第1列のメモリ素子G(8,1)に格納する。引き続き、アレイW の第1行第1列のメモリ素子W (1,1)に格納されているデータと、アレイIの第9行第1列のメモリ素子I(9,1)に格納されているデータとの積を演算し、この積をアレイGの第9行第1列のメモリ素子G(9,1)に格納する。その後、アレイW の第1行第1列のメモリ素子W (1,1)に格納されているデータと、アレイIの第10行第1列のメモリ素子I(10,1)に格納されているデータとの積を演算し、この積をアレイGの第10行第1列のメモリ素子G(10,1)に格納する。これらの処理は、並列に実行することも可能であり、それらを並列に実行すれば処理時間の短縮が図られるという利点が得られる。
次に、アレイIにおける第7行第1列〜第14行第1列のメモリ素子I(7,1)〜I(14,1)に格納されたデータに対して、第1の核WのアレイW の第1列に格納されたデータW (1,1)〜W (5,1)を用いて、図26Bおよび図26Cで説明した場合と同様の畳み込み処理を行い、これらの畳み込み処理結果をアレイGの第7行第1列〜第10行第1列のメモリ素子G(7,1)〜G(10,1)に格納する。これらの処理結果を図26Eに示す。
次に、図26Fに示すように、第1の核WのアレイW の第1列のデータW (1,1)〜W (5,1)を用いて、アレイIの第11行第1列〜第15行第1列のデータI(11,1)〜I(15,1)に対して畳み込み処理を行い、処理結果をアレイGの第15行第1列のメモリ素子G(15,1)に格納する。
以上により、アレイW の第1列のメモリ素子W (1,1)〜W (5,1)に格納されているデータと、アレイIの第1列のメモリ素子I(1,1)〜I(15,1)に格納されているデータとの畳み込み処理が完了する。
次に、第1の核WのアレイW の第2列のメモリ素子W (1,2)〜W (5,2)に格納されてデータを用いて、アレイIの第2列のメモリ素子I(1,2)〜I(15,2)に格納されたデータとの畳み込み処理を行う。この畳み込み処理は、以下のように行われる。
まず、図26Gに示す様に、アレイW の第1行第2列のメモリ素子W (1,2)に格納されているデータと、アレイIの第1行第2列のメモリ素子I(1,2)に格納されているデータとの積を演算し、この積と、アレイGの第1行第1列のメモリ素子G(1,1)に格納されているデータとの和を演算し、この和を記憶装置800のアレイGの第1行第1列のメモリ素子G(1,1)に改めて格納する。その後、アレイW の第1行第2列のメモリ素子W (1,2)に格納されているデータと、アレイIの第2行第2列のメモリ素子I(2,2)に格納されているデータとの積を演算し、この積とアレイGの第2行第1列のメモリ素子G(2,1)に格納されているデータとの和を演算し、この和を記憶装置800のアレイGの第2行第1列のメモリ素子G(2,1)に改めて格納する。アレイW の第1行第2列のメモリ素子W (1,2)に格納されているデータと、アレイIの第3行第2列のメモリ素子I(3,2)に格納されているデータとの積を演算し、この積とアレイGの第3行第1列のメモリ素子G(3,1)に格納されているデータとの和を演算し、この和をアレイGの第3行第1列のメモリ素子G(3,1)に改めて格納する。引き続き、アレイW の第1行第2列のメモリ素子W (1,2)に格納されているデータと、アレイIの第4行第2列のメモリ素子I(4,2)に格納されているデータとの積を演算し、この積とアレイGの第4行第1列のメモリ素子G(4,1)に格納されているデータとの和を演算し、この和をアレイGの第4行第1列のメモリ素子G(4,1)に改めて格納する。その後、アレイW の第1行第2列のメモリ素子W (1,2)に格納されているデータと、アレイIの第5行第2列のメモリ素子I(5,2)に格納されているデータとの積を演算し、この積とアレイGの第5行第1列のメモリ素子G(5,1)に格納されているデータとの和を演算し、この和をアレイGの第5行第1列のメモリ素子G(5,1)に改めて格納する。これらの処理結果を図26Gに示す。これらの処理は、並列に実行することも可能であり、それらを並列に実行すれば処理時間の短縮が図られるという利点が得られる。
次に、図26B乃至図26Fで説明した場合と同様にして、アレイW の第2列のメモリ素子W (1,2)〜W (5,2)に格納されてデータを用いて、アレイIの第2列のメモリ素子I(1,2)〜I(15,2)に格納されたデータに対する畳み込み処理を行う。この畳み込み処理の結果は、アレイGの第1行第1列乃至第11行第1列のメモリ素子G(1,1)〜G(11,1)に格納される。
次に、図26Gで説明した場合と同様にして、レイW の第3列のメモリ素子W (1,3)〜W (5,3)に格納されてデータを用いて、アレイIの第3列のメモリ素子I(1,3)〜I(15,3)に格納されたデータに対する畳み込み処理を行う。この畳み込み処理の結果は、アレイGの第1行第1列乃至第11行第1列のメモリ素子G(1,1)〜G(11,1)に格納される。その後、図26Gで説明した場合と同様にして、レイW の第4列のメモリ素子W (1,4)〜W (5,4)に格納されてデータを用いて、アレイIの第4列のメモリ素子I(1,4)〜I(15,4)に格納されたデータに対する畳み込み処理を行う。この畳み込み処理の結果は、アレイGの第1行第1列乃至第11行第1列のメモリ素子G(1,1)〜G(11,1)に格納される。引き続き、図26Gで説明した場合と同様にして、レイW の第5列のメモリ素子W (1,5)〜W (5,5)に格納されてデータを用いて、アレイIの第5列のメモリ素子I(1,5)〜I(15,5)に格納されたデータに対する畳み込み処理を行う。この畳み込み処理の結果は、アレイGの第1行第1列乃至第11行第1列のメモリ素子G(1,1)〜G(11,1)に格納される。
以上により、第1の核WのアレイW を用いて、アレイIの第1列〜第5列のメモリ素子I(1,1)〜I(15,5)に格納されたデータに対する畳み込み処理が完了する。この処理結果を図26Hに示す。
次に、第1の核WのアレイW を用いて、アレイIの第2列〜第6列のメモリ素子I(1,2)〜I(15,6)に格納されたデータに対する畳み込み処理を、図26A乃至図26Hで説明した場合と同様にして行う。この処理結果は図26Iに示すように、アレイGの第2列のメモリ素子G(1、2)〜G(11,2)に格納される。
続いて、アレイW を用いて、アレイIの第3列〜第7列のメモリ素子I(1,3)〜I(15,7)に格納されたデータに対する畳み込み処理を、図26A乃至図26Hで説明した場合と同様にして行う。処理結果は、アレイGの第3列のメモリ素子G(1、3)〜G(11,3)に格納される。その後、アレイW を用いて、アレイIの第4列〜第8列のメモリ素子I(1,4)〜I(15,8)に格納されたデータに対する畳み込み処理を、図26A乃至図26Hで説明した場合と同様にして行う。処理結果は、アレイGの第4列のメモリ素子G(1、4)〜G(11,4)に格納される。引き続き、アレイW を用いて、アレイIの第5列〜第9列のメモリ素子I(1,5)〜I(15,9)に格納されたデータに対する畳み込み処理を、図26A乃至図26Hで説明した場合と同様にして行う。処理結果は、アレイGの第5列のメモリ素子G(1、5)〜G(11,5)に格納される。続いて、アレイW を用いて、アレイIの第6列〜第10列のメモリ素子I(1,6)〜I(15,10)に格納されたデータに対する畳み込み処理を、図26A乃至図26Hで説明した場合と同様にして行う。処理結果は、アレイGの第6列のメモリ素子G(1、6)〜G(11,6)に格納される。その後、アレイW を用いて、アレイIの第7列〜第11列のメモリ素子I(1,7)〜I(15,11)に格納されたデータに対する畳み込み処理を、図26A乃至図26Hで説明した場合と同様にして行う。処理結果は、アレイGの第7列のメモリ素子G(1、7)〜G(11,7)に格納される。続いて、アレイW を用いて、アレイIの第8列〜第12列のメモリ素子I(1,8)〜I(15,12)に格納されたデータに対する畳み込み処理を、図26A乃至図26Hで説明した場合と同様にして行う。処理結果は、アレイGの第8列のメモリ素子G(1、8)〜G(11,8)に格納される。その後、アレイW を用いて、アレイIの第9列〜第13列のメモリ素子I(1,9)〜I(15,13)に格納されたデータに対する畳み込み処理を、図26A乃至図26Hで説明した場合と同様にして行う。処理結果は、アレイGの第9列のメモリ素子G(1、9)〜G(11,9)に格納される。引き続き、アレイW を用いて、アレイIの第10列〜第14列のメモリ素子I(1,10)〜I(15,14)に格納されたデータに対する畳み込み処理を、図26A乃至図26Hで説明した場合と同様にして行う。処理結果は、アレイGの第10列のメモリ素子G(1、10)〜G(11,10)に格納される。続いて、アレイW を用いて、アレイIの第11列〜第15列のメモリ素子I(1,11)〜I(15,15)に格納されたデータに対する畳み込み処理を、図26A乃至図26Hで説明した場合と同様にして行う。処理結果は、アレイGの第11列のメモリ素子G(1、11)〜G(11,11)に格納される。これらの処理結果を図26Jに示す。
以上により、第1の核WのアレイW を用いて、アレイIのメモリ素子I(1,1)〜I(15,15)に格納されたデータに対する畳み込み処理が完了する。
次に、第2の核WのアレイW を用いてアレイIのメモリ素子I(1,1)〜I(15,15)に格納されたデータに対する畳み込み処理を、図26A乃至図26Jで説明した場合と同様に行う。この畳み込み処理の結果はアレイGのメモリ素子G(1,1)〜G(11,11)に格納される。続いて、第3の核WのアレイW を用いてアレイIのメモリ素子I(1,1)〜I(15,15)に格納されたデータに対する畳み込み処理を、図26A乃至図26Jで説明した場合と同様に行う。この畳み込み処理の結果はアレイGのメモリ素子G(1,1)〜G(11,11)に格納される。その後、第4の核WのアレイW を用いてアレイIのメモリ素子I(1,1)〜I(15,15)に格納されたデータに対する畳み込み処理を、図26A乃至図26Jで説明した場合と同様に行う。この畳み込み処理の結果はアレイGのメモリ素子G(1,1)〜G(11,11)に格納される。引き続き、第5の核WのアレイW を用いてアレイIのメモリ素子I(1,1)〜I(15,15)に格納されたデータに対する畳み込み処理を、図26A乃至図26Jで説明した場合と同様に行う。この畳み込み処理の結果はアレイGのメモリ素子G(1,1)〜G(11,11)に格納される。その後、第6の核WのアレイW を用いてアレイIのメモリ素子I(1,1)〜I(15,15)に格納されたデータに対する畳み込み処理を、図26A乃至図26Jで説明した場合と同様に行う。この畳み込み処理の結果はアレイGのメモリ素子G(1,1)〜G(11,11)に格納される。続いて、第7の核WのアレイW を用いてアレイIのメモリ素子I(1,1)〜I(15,15)に格納されたデータに対する畳み込み処理を、図26A乃至図26Jで説明した場合と同様に行う。この畳み込み処理の結果はアレイGのメモリ素子G(1,1)〜G(11,11)に格納される。これらの処理結果を図26Kに示す。
これまでの処理に依り、第1乃至第7の核W〜Wのそれぞれの第1アレイW 〜W を用いてアレイIのメモリ素子I(1,1)〜I(15,15)に格納されたデータに対する畳み込み処理が完了する。なお、記憶装置800のアレイG〜Gのそれぞれのメモリ素子にデータを格納する処理において、記憶装置800の異なるアレイに格納する処理を並列に行うことが可能である。並列に処理を行えば処理時間の短縮が図られるという利点が得られる。
次に、図27に示すように、外部記憶装置600におけるアレイEのそれぞれのメモリ素子からデータを読み出し、アレイIの対応するメモリ素子に格納する。すなわち、アレイIにはアレイEと同じデータが格納される。
続いて、図26A乃至図26Kで説明した場合と同様に、第1乃至第7の核W〜Wのそれぞれの第2のアレイW 〜W を用いてアレイIのメモリ素子I(1,1)〜I(15,15)に格納されたデータに対する畳み込み処理を行う。この畳み込み処理の結果は、アレイG〜Gのメモリ素子に格納される。この場合、第i(i=1,・・・,7)のアレイW のメモリ素子とアレイIのメモリ素子との積は、この積が格納されるアレイGのメモリ素子のデータと上記積との和が演算され、この和がアレイGのメモリ素子に改めて格納されるように処理される。なお、記憶装置800のアレイG〜Gのそれぞれのメモリ素子にデータを格納する処理において、記憶装置800の異なるアレイに格納する処理を並列に行うことが可能である。並列に処理を行えば処理時間の短縮が図られるという利点が得られる。
次に、図28に示すように、外部記憶装置600におけるアレイEのそれぞれのメモリ素子からデータを読み出し、アレイIの対応するメモリ素子に格納する。すなわち、アレイIにはアレイEと同じデータが格納される。
続いて、図26A乃至図26Kで説明した場合と同様に、第1乃至第7の核W〜Wのそれぞれの第3のアレイW 〜W を用いてアレイIのメモリ素子I(1,1)〜I(15,15)に格納されたデータに対する畳み込み処理を行う。この畳み込み処理の結果は、アレイG〜Gのメモリ素子に格納される。この場合、第i(i=1,・・・,7)のアレイW のメモリ素子とアレイIのメモリ素子との積は、この積が格納されるアレイGのメモリ素子のデータと上記積との和が演算され、この和がアレイGのメモリ素子に改めて格納されるように処理される。なお、記憶装置800のアレイG〜Gのそれぞれのメモリ素子にデータを格納する処理において、記憶装置800の異なるアレイに格納する処理を並列に行うことが可能である。並列に処理を行えば処理時間の短縮が図られるという利点が得られる。
次に、記憶装置800のアレイG(i=1,・・・,7)のメモリ素子G(1,1)〜G(11,11)のそれぞれに対して、上記メモリ素子に格納されているデータと、バイアス値Bとの和を求め、例えばRectified Linear Unit等の発火関数処理等を必要に応じて施した数値を改めて上記メモリ素子に格納する。なお、この処理において、記憶装置800の異なるアレイに格納する処理は、並列に処理を行うことが可能である。並列に処理を行えば処理時間の短縮が図られるという利点が得られる。
以上の処理により、第1乃至第7の核W〜Wを用いた、外部記憶装置600に格納されたデータと同じデータに対する畳み込み処理が完了する。
本変形例に於いては、記憶装置700Bは、行方向乃至列方向には外部記憶装置600のアレイE〜Eのそれぞれと同じ大きさのアレイIを有していたが、これに限るものではない。例えば、行方向乃至列方向には外部記憶装置600のアレイE〜Eのそれぞれよりも大きなサイズのアレイを有していてもよい。但し、行方向乃至列方向には外部記憶装置600のアレイE〜Eのそれぞれと同じ大きさのアレイIを有している場合は、記憶装置700Bの容量の削減の効果が最も大きくなるという利点が得られる。
(第3変形例)
図24に示す第2変形例においては、記憶装置700Bは、行方向および列方向には外部記憶装置のアレイと等しい大きさを持ち、深さ方向は、外部記憶装置600のアレイE〜Eよりも枚数の少ないアレイIを有していたが、図29に示すように、行方向がアレイE〜Eのそれぞれと同じ大きさで、列方向が畳み込み処理に用いる核と同じ大きさを有し、アレイE〜Eよりも枚数の少ないアレイJを有していてもよい。この場合は、更に記憶装置が削減されるので回路面積の更なる縮小が可能となる。この例を第3実施形態の第3変形例として説明する。
この第3変形例による演算処理装置を図29に示す。この第3変形例の演算処理装置は、図24に示す第2変形例において、記憶装置700Bを記憶装置700Cに置き換えた構成を有している。記憶装置700Cは、15行5列のメモリ素子を有するアレイJを備えている。記憶装置700Cは、複数枚のアレイを備えていてもよい。
(動作)
次に、第3変形例の動作について図30乃至図32Jを参照して説明する。
まず、図30に示す様に、記憶装置600のアレイEの第1列〜第5列のメモリ素子E(1,1)〜E(15,5)に格納されているデータを読み出し、記憶装置700CのアレイJに格納する。これにより、mを1以上15以下の整数、nを1以上5以下の整数とすると、アレイEの第m行第n列のメモリ素子E(m,n)に格納されたデータは、アレイJの第m行第n列のメモリ素子J(m,n)に格納される。
次に、図21A乃至図21Cで説明した処理と同様の処理を施すことに依り、第1の核WのアレイW のデータW (1,1)〜W (5,5)を用いてアレイJの第1列乃至第5列のデータJ(1,1)〜J(15,5)に対する畳み込み処理を行う。アレイW を用いた畳み込み処理の結果が図31Aに示すように、記憶装置800のアレイGの第1列のメモリ素子G(1,1)〜G(15,1)に格納される。
次に、第i(i=2,・・・,7)の核Wにおける第1のアレイW のデータW (1,1)〜W (5,5)を用いてアレイJの第1列乃至第5列のデータJ(1,1)〜J(15,5)に対する畳み込み処理を行う。第i(i=2,・・・,7)の核WにおけるアレイW を用いた畳み込み処理の結果が図31Bに示すように、記憶装置800のアレイGの第1列のメモリ素子に格納される。
以上の処理により、第1乃至第7の核W〜Wのそれぞれの第1のアレイW 〜W のそれぞれを用いたアレイJの第1列乃至第5列のデータJ(1,1)〜J(15,5)に対する畳み込み処理が完了する。記憶装置800のアレイG〜Gのそれぞれの第1列に格納する処理において、異なるアレイの第1列に格納する処理は並列に行うことも可能である。並列に処理を行うことにより処理時間の短縮が図られるという利点が得られる。
次に、図32Aに示すように、アレイEにおける第6列のメモリ素子E(1,6)〜E(15,6)のデータを読み出し、アレイJの第1列のメモリ素子J(1,1)〜J(15,1)に格納する。このとき、アレイJの第2列のメモリ素子にはアレイEにおける第2列のメモリ素子のデータが格納されており、アレイJの第3列のメモリ素子にはアレイEにおける第3列のメモリ素子のデータが格納されており、アレイJの第4列のメモリ素子にはアレイEにおける第4列のメモリ素子のデータが格納されており、アレイJの第5列のメモリ素子にはアレイEにおける第5列のメモリ素子のデータが格納されている。
続いて、図31Aおよび図31Bで説明した処理と同様に、第i(i=1,・・・,7)の核Wに格納されているデータを用いて、アレイJに格納されているデータに対して畳み込み処理を行い、この畳み込み処理の結果をアレイGの第2列のメモリ素子G(1,2)〜G(11,2)に格納する。なお、この畳み込み処理は、図32Bに示すように、第i(i=1,・・・,7)の核Wにおける第1のアレイW の第1列のデータとアレイJの第2列のデータとの畳み込み処理が行われ、アレイW の第2列のデータとアレイJの第3列のデータとの畳み込み処理が行われ、アレイW の第3列のデータとアレイJの第4列のデータとの畳み込み処理が行われ、アレイW の第4列のデータとアレイJの第5列のデータとの畳み込み処理が行われ、アレイW の第5列のデータとアレイJの第1列のデータとの畳み込み処理が行われる。記憶装置800のアレイG〜Gのそれぞれの第2列に格納する処理において、異なるアレイの第2列に格納する処理は並列に並列に行うことも可能である。並列に処理を行うことにより処理時間の短縮が図られるという利点が得られる。
次に、図32Cに示すように、アレイEにおける第7列のメモリ素子E(1,7)〜E(15,7)のデータを読み出し、アレイJの第2列のメモリ素子J(1,2)〜J(15,2)に格納する。このとき、アレイJの第1列のメモリ素子にはアレイEにおける第6列のメモリ素子のデータが格納されており、アレイJの第3列のメモリ素子にはアレイEにおける第3列のメモリ素子のデータが格納されており、アレイJの第4列のメモリ素子にはアレイEにおける第4列のメモリ素子のデータが格納されており、アレイJの第5列のメモリ素子にはアレイEにおける第5列のメモリ素子のデータが格納されている。
続いて、図31Aおよび図31Bで説明した処理と同様に、第i(i=1,・・・,7)の核Wに格納されているデータを用いて、アレイJに格納されているデータに対して畳み込み処理を行い、この畳み込み処理の結果をアレイGの第3列のメモリ素子G(1,3)〜G(11,3)に格納する。なお、この畳み込み処理は、図32Dに示すように、第i(i=1,・・・,7)の核Wにおける第1のアレイW の第1列のデータとアレイJの第3列のデータとの畳み込み処理が行われ、アレイW の第2列のデータとアレイJの第4列のデータとの畳み込み処理が行われ、アレイW の第3列のデータとアレイJの第5列のデータとの畳み込み処理が行われ、アレイW の第4列のデータとアレイJの第1列のデータとの畳み込み処理が行われ、アレイW の第5列のデータとアレイJの第2列のデータとの畳み込み処理が行われる。記憶装置800のアレイG〜Gのそれぞれの第3列に格納する処理において、異なるアレイの第3列に格納する処理は並列に並列に行うことも可能である。並列に処理を行うことにより処理時間の短縮が図られるという利点が得られる。
次に、図32Eに示すように、アレイEにおける第8列のメモリ素子E(1,8)〜E(15,8)のデータを読み出し、アレイJの第3列のメモリ素子J(1,3)〜J(15,3)に格納する。このとき、アレイJの第1列のメモリ素子にはアレイEにおける第6列のメモリ素子のデータが格納されており、アレイJの第2列のメモリ素子にはアレイEにおける第7列のメモリ素子のデータが格納されており、アレイJの第4列のメモリ素子にはアレイEにおける第4列のメモリ素子のデータが格納されており、アレイJの第5列のメモリ素子にはアレイEにおける第5列のメモリ素子のデータが格納されている。
続いて、図31Aおよび図31Bで説明した処理と同様に、第i(i=1,・・・,7)の核Wに格納されているデータを用いて、アレイJに格納されているデータに対して畳み込み処理を行い、この畳み込み処理の結果をアレイGの第4列のメモリ素子G(1,4)〜G(11,4)に格納する。なお、この畳み込み処理は、図32Fに示すように、第i(i=1,・・・,7)の核Wにおける第1のアレイW の第1列のデータとアレイJの第4列のデータとの畳み込み処理が行われ、アレイW の第2列のデータとアレイJの第5列のデータとの畳み込み処理が行われ、アレイW の第3列のデータとアレイJの第1列のデータとの畳み込み処理が行われ、アレイW の第4列のデータとアレイJの第2列のデータとの畳み込み処理が行われ、アレイW の第5列のデータとアレイJの第3列のデータとの畳み込み処理が行われる。記憶装置800のアレイG〜Gのそれぞれの第4列に格納する処理において、異なるアレイの第4列に格納する処理は並列に並列に行うことも可能である。並列に処理を行うことにより処理時間の短縮が図られるという利点が得られる。
次に、図32Gに示すように、アレイEにおける第9列のメモリ素子E(1,9)〜E(15,9)のデータを読み出し、アレイJの第4列のメモリ素子J(1,4)〜J(15,4)に格納する。このとき、アレイJの第1列のメモリ素子にはアレイEにおける第6列のメモリ素子のデータが格納されており、アレイJの第2列のメモリ素子にはアレイEにおける第7列のメモリ素子のデータが格納されており、アレイJの第3列のメモリ素子にはアレイEにおける第8列のメモリ素子のデータが格納されており、アレイJの第5列のメモリ素子にはアレイEにおける第5列のメモリ素子のデータが格納されている。
続いて、図31Aおよび図31Bで説明した処理と同様に、第i(i=1,・・・,7)の核Wに格納されているデータを用いて、アレイJに格納されているデータに対して畳み込み処理を行い、この畳み込み処理の結果をアレイGの第5列のメモリ素子G(1,5)〜G(11,5)に格納する。なお、この畳み込み処理は、図32Hに示すように、第i(i=1,・・・,7)の核Wにおける第1のアレイW の第1列のデータとアレイJの第5列のデータとの畳み込み処理が行われ、アレイW の第2列のデータとアレイJの第1列のデータとの畳み込み処理が行われ、アレイW の第3列のデータとアレイJの第2列のデータとの畳み込み処理が行われ、アレイW の第4列のデータとアレイJの第3列のデータとの畳み込み処理が行われ、アレイW の第5列のデータとアレイJの第4列のデータとの畳み込み処理が行われる。記憶装置800のアレイG〜Gのそれぞれの第5列に格納する処理において、異なるアレイの第5列に格納する処理は並列に並列に行うことも可能である。並列に処理を行うことにより処理時間の短縮が図られるという利点が得られる。
次に、図32Iに示すように、アレイEにおける第10列のメモリ素子E(1,10)〜E(15,10)のデータを読み出し、アレイJの第5列のメモリ素子J(1,5)〜J(15,5)に格納する。このとき、アレイJの第1列のメモリ素子にはアレイEにおける第6列のメモリ素子のデータが格納されており、アレイJの第2列のメモリ素子にはアレイEにおける第7列のメモリ素子のデータが格納されており、アレイJの第3列のメモリ素子にはアレイEにおける第8列のメモリ素子のデータが格納されており、アレイJの第4列のメモリ素子にはアレイEにおける第9列のメモリ素子のデータが格納されている。
続いて、図31Aおよび図31Bで説明した処理と同様に、第i(i=1,・・・,7)の核Wに格納されているデータを用いて、アレイJに格納されているデータに対して畳み込み処理を行い、この畳み込み処理の結果をアレイGの第6列のメモリ素子G(1,6)〜G(11,6)に格納する。なお、この畳み込み処理は、図32Jに示すように、第i(i=1,・・・,7)の核Wにおける第1のアレイW の第1列のデータとアレイJの第1列のデータとの畳み込み処理が行われ、アレイW の第2列のデータとアレイJの第2列のデータとの畳み込み処理が行われ、アレイW の第3列のデータとアレイJの第3列のデータとの畳み込み処理が行われ、アレイW の第4列のデータとアレイJの第4列のデータとの畳み込み処理が行われ、アレイW の第5列のデータとアレイJの第5列のデータとの畳み込み処理が行われる。記憶装置800のアレイG〜Gのそれぞれの第6列に格納する処理において、異なるアレイの第6列に格納する処理は並列に並列に行うことも可能である。並列に処理を行うことにより処理時間の短縮が図られるという利点が得られる。
以上により、第1乃至第7の核W〜Wのそれぞれの第1のアレイW 〜W を用い、外部記憶装置600のアレイEの第1乃至第10列のメモリ素子に格納されたデータに対する畳み込み処理が完了する。
次に、外部記憶装置600のアレイEの第11列のメモリ素子に格納されたデータを読み出し、この読み出しデータを図32Aに示すように、記憶装置700CのアレイJの第1列のメモリ素子に格納する。続いて、図32Bで説明した場合と同様に、第i(i=1,・・・,7)の核Wにおける第1のアレイW を用いてアレイJのメモリ素子J(1,1)〜J(15,5)に格納されているデータに対する畳み込み処理を行い、アレイGの第7列のメモリ素子G(1,7)〜G(11,7)に格納する。続いて、アレイEの第12列のメモリ素子に格納されたデータを読み出し、この読み出しデータを図32Cに示すように、記憶装置700CのアレイJの第2列のメモリ素子に格納する。続いて、図32Dで説明した場合と同様に、第i(i=1,・・・,7)の核Wにおける第1のアレイW を用いてアレイJのメモリ素子J(1,1)〜J(15,5)に格納されているデータに対する畳み込み処理を行い、アレイGの第8列のメモリ素子G(1,8)〜G(11,8)に格納する。その後、アレイEの第13列のメモリ素子に格納されたデータを読み出し、この読み出しデータを図32Eに示すように、記憶装置700CのアレイJの第3列のメモリ素子に格納する。続いて、図32Fで説明した場合と同様に、第i(i=1,・・・,7)の核Wにおける第1のアレイW を用いてアレイJのメモリ素子J(1,1)〜J(15,5)に格納されているデータに対する畳み込み処理を行い、アレイGの第9列のメモリ素子G(1,9)〜G(11,9)に格納する。引き続き、アレイEの第14列のメモリ素子に格納されたデータを読み出し、この読み出しデータを図32Gに示すように、記憶装置700CのアレイJの第4列のメモリ素子に格納する。続いて、図32Hで説明した場合と同様に、第i(i=1,・・・,7)の核Wにおける第1のアレイW を用いてアレイJのメモリ素子J(1,1)〜J(15,5)に格納されているデータに対する畳み込み処理を行い、アレイGの第10列のメモリ素子G(1,10)〜G(11,10)に格納する。その後、アレイEの第15列のメモリ素子に格納されたデータを読み出し、この読み出しデータを図32Iに示すように、記憶装置700CのアレイJの第5列のメモリ素子に格納する。続いて、図32Jで説明した場合と同様に、第i(i=1,・・・,7)の核Wにおける第1のアレイW を用いてアレイJのメモリ素子J(1,1)〜J(15,5)に格納されているデータに対する畳み込み処理を行い、アレイGの第11列のメモリ素子G(1,11)〜G(11,11)に格納する。
以上により、第1乃至第7の核W〜Wのそれぞれの第1のアレイW 〜W を用いた、外部記憶装置600のアレイEに格納されたデータと同じデータに対する畳み込み処理が完了する。
次に、第1乃至第7の核W〜Wのそれぞれの第j(j=2、3)のアレイW 〜W を用いた、外部記憶装置600のアレイE(j=2、3)に格納されたデータと同じデータに対する畳み込み処理を図31A乃至図32Jで説明した処理および図32Jで説明した以降の処理と同様に行う。この処理において演算された積は、この積が格納されるべきアレイG〜Gのメモリ素子に格納されたデータとの和が演算され。この和が上記格納されるべきアレイG〜Gのメモリ素子に改めて格納されるように処理される。
以上の処理により、第1乃至第7の核W〜Wを用いた、外部記憶装置600のアレイE〜Eに格納されたデータと同じデータに対する畳み込み処理が完了する。
次に、m、nを1以上11以下の整数とした場合、アレイG(i=1,・・・,7)のm行n列のメモリ素子G(m,n)に対して、バイアス値Bとの和を求め、例えばRectified Linear Unit等の発火関数処理等を必要に応じて施した数値を改めて上記メモリ素子G(m,n)に改めて格納する。これらの処理において、記憶装置800の異なるアレイに格納する場合の処理を並列に行うことも可能である。並列に処理を行うことにより処理時間の短縮が図られるという利点が得られる。
第3変形例においては、記憶装置700Cは、行方向が外部記憶装置600のアレイE〜Eのそれぞれと同じ大きさを有し、列方向が畳み込み処理に用いる核と同じ大きさを有するアレイJを備えていたが、これに限るものではない。例えば、行方向はアレイE〜Eのそれぞれよりも大きく、列方向は畳み込み処理に用いる核の列方向の大きさよりも大きいアレイを用いてもよい。但し、第3変形例のように、行方向はアレイE〜Eのそれぞれと同じ大きさを有し、列方向は畳み込み処理に用いる核の列方向大きさと同じであるアレイJを用いた場合は、記憶装置の個数の削減の効果が最も大きくなるという利点が得られる。
第3変形例においては、記憶装置700Cは、行方向がアレイE〜Eのそれぞれと同じ大きさを持ち、列方向が畳み込み処理に用いる核の列方向と同じ大きさを持ち、アレイE〜Eよりも少ない枚数のアレイを備えていたが、これに限るものではない。例えば、図33に示すように、列方向がアレイE〜Eのそれぞれの列方向と同じ大きさを有し、行方向が畳み込み処理に用いる核の行方向の大きさと同じ大きさを持ち、アレイE〜Eよりも少ない枚数のアレイを備えていても良い。この場合には図30乃至図32Jを用いて説明した処理において行方向の座標と列方向の座標とを入れ替えた処理を施すことに依り、記憶装置800を構成する全ての記憶装置に、アレイE〜Eに対して必要な畳み込み処理の為された数値が格納される。
以上説明したように、第3実施形態およびその変形例によれば、記憶装置の容量が従来の場合に比べて小さくすることが可能となり、占有面積が小さい演算処理装置を提供することができる。
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これらの実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これらの実施形態やその変形は、発明の範囲や要旨に含まれると同様に、特許請求の範囲に記載された発明とその均等の範囲に含まれるものである。
1・・・演算処理装置、10・・・読み取り装置、20・・・記憶装置、30・・・処理層、40・・・記憶装置、50・・・記憶装置、60・・・処理層、65・・・記憶装置、70・・・記憶装置、80・・・出力装置、100・・・記憶装置、200・・・記憶装置、300・・・記憶装置、400・・・処理層、500・・・処理層、600・・・外部記憶装置、650・・・処理層、700,700B,700C・・・記憶装置、A〜A・・・アレイ、M〜M・・・メモリ素子、C〜C10・・・アレイ、E〜E・・・アレイ、F〜F・・・アレイ、G〜G・・・アレイ、H〜H・・・アレイ、I・・・アレイ、J・・・アレイ、K・・・アレイ、W・・・第1の核、W・・・第2の核、W・・・第3の核、W・・・第4の核、W・・・第5の核、W・・・第6の核、W・・第7の核

Claims (10)

  1. 第1方向および前記第1方向に交差する第2方向に配列されたメモリ素子を有する第1アレイを少なくとも1つ備えた第1記憶装置と、
    前記第1方向に配列されたメモリ素子を有する第2アレイを少なくとも1つ備える第2記憶装置と
    前記第1方向および前記第2方向に配列されたメモリ素子を有する第3アレイを少なくとも1つ備え、前記第3アレイは、前記第1方向に配列されたメモリ素子が前記第1アレイの前記第1方向に配列されたメモリ素子の個数よりも少なくかつ前記第2方向に配列されたメモリ素子の個数が前記第1アレイの前記第2方向に配列されたメモリ素子の個数よりも少ない第3記憶装置と、
    前記第3アレイの前記メモリ素子に格納されたデータを用いて、前記第1アレイの前記メモリ素子に格納されたデータに対して畳み込み処理を行い、前記畳み込み処理の結果を前記第2アレイのメモリ素子に格納する第1処理層と、
    を備え
    前記第1処理層は、前記第1アレイの前記第1方向に配列されたメモリ素子に格納されたデータに対して前記第3アレイの前記第1方向に配列されたメモリ素子に格納されたデータを用いて前記第1方向に沿って積和演算を行い、演算結果を前記第2アレイの前記第1方向に配列されたメモリ素子に格納する、演算処理装置。
  2. 前記第2アレイは、前記メモリ素子が前記第1方向にのみ一次元的に配列される請求項1記載の演算処理装置。
  3. 前記第2アレイは、前記第1アレイよりも前記第1方向に配列されたメモリ素子の個数が少ない請求項1または2記載の演算処理装置。
  4. 前記第2記憶装置は、複数の第2アレイを備えている請求項1乃至のいずれかに記載の演算処理装置。
  5. 前記第1記憶装置は、m(m≧1)個の第1アレイを有し、前記第3記憶装置は、m個の第3アレイを有する請求項1乃至のいずれかに記載の演算処理装置。
  6. 前記第3記憶装置は、前記第1方向および前記第2方向に配列されたメモリ素子を有する第4アレイを少なくとも1つ更に備え、前記第4アレイは前記第1方向および前記第2方向に配列されたメモリ素子の個数がそれぞれ前記第3アレイの前記第1方向および前記第2方向に配列されたメモリ素子の個数と同じであり、かつm(m≧1)個の第4アレイを備え、
    前記第2記憶装置は、2個の第2アレイを備え、
    前記第1処理層は、前記第3アレイを用いて畳み込み処理を行った結果を前記2個の前記第2アレイの一方に格納し、前記第4アレイを用いて畳み込み処理を行った結果を前記2個の前記第2アレイの他方に格納する請求項記載の演算処理装置。
  7. 前記第1方向および前記第2方向に配列されたメモリ素子を有する第5アレイを少なくとも1つ備える第4記憶装置と、
    前記第2アレイの前記メモリ素子に格納されたデータに対してプーリング処理を行い、処理結果を前記第5アレイのメモリ素子に格納する第2処理層と、
    を備えた請求項1乃至のいずれかに記載の演算処理装置。
  8. 前記第1方向および前記第2方向に配列されたメモリ素子を有する第5アレイを少なくとも1つ備える第4記憶装置と、
    前記第1方向および前記第2方向に配列されたメモリ素子を有する第6アレイを少なくとも1つ備える第5記憶装置と、
    前記第6アレイの前記メモリ素子に格納されたデータを用いて、前記第2アレイの前記メモリ素子に格納されたデータに対して畳み込み処理を行い、処理結果を前記第5アレイのメモリ素子に格納する第2処理層と、
    を備えた請求項1乃至のいずれかに記載の演算処理装置。
  9. 第1方向および前記第1方向に交差する第2方向に配列されたメモリ素子を有する第1アレイを少なくとも1つ備えた外部記憶装置からのデータの少なくとも1部を読み取る装置と、
    前記第1方向および前記第2方向に配列されたメモリ素子を有する第2アレイを少なくとも1つ備え、前記読み取装置によって読み取られた前記少なくとも1部のデータが前記第2アレイに格納される第1記憶装置と、
    前記第1方向および前記第2方向に配列されたメモリ素子を有する第3アレイを少なくとも1つ備える第記憶装置と、
    前記第1方向および前記第2方向に配列されたメモリ素子を有する第4アレイを少なくとも1つ備える第記憶装置と、
    前記第4アレイの前記メモリ素子に格納されたデータを用いて、前記第2アレイの前記メモリ素子に格納されたデータに対して畳み込み処理を行い、前記畳み込み処理の結果を前記第3アレイのメモリ素子に格納する処理層と、
    を備え
    前記処理層は、前記第2アレイの前記第1方向に配列されたメモリ素子に格納されたデータに対して前記第4アレイの前記第1方向に配列されたメモリ素子に格納されたデータを用いて前記第1方向に沿って積和演算を行い、演算結果を前記第3アレイの前記第1方向に配列されたメモリ素子に格納する、演算処理装置。
  10. 前記第2アレイは、前記第1方向に配列されたメモリ素子の個数が前記第1アレイの前記第1方向に配列されたメモリ素子の個数と同じであり、前記第2方向に配列されたメモリ素子の個数が前記第1アレイの前記第2方向に配列されたメモリ素子の個数と同じである請求項記載の演算処理装置。
JP2017222293A 2017-11-17 2017-11-17 演算処理装置 Active JP6839641B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2017222293A JP6839641B2 (ja) 2017-11-17 2017-11-17 演算処理装置
US15/917,076 US20190156188A1 (en) 2017-11-17 2018-03-09 Arithmetic processing device

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2017222293A JP6839641B2 (ja) 2017-11-17 2017-11-17 演算処理装置

Publications (2)

Publication Number Publication Date
JP2019095862A JP2019095862A (ja) 2019-06-20
JP6839641B2 true JP6839641B2 (ja) 2021-03-10

Family

ID=66533980

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2017222293A Active JP6839641B2 (ja) 2017-11-17 2017-11-17 演算処理装置

Country Status (2)

Country Link
US (1) US20190156188A1 (ja)
JP (1) JP6839641B2 (ja)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11037330B2 (en) * 2017-04-08 2021-06-15 Intel Corporation Low rank matrix compression
JP6749358B2 (ja) 2018-03-19 2020-09-02 株式会社東芝 演算処理装置
US11966583B2 (en) * 2018-08-28 2024-04-23 Cambricon Technologies Corporation Limited Data pre-processing method and device, and related computer device and storage medium
CN110377342B (zh) * 2019-06-10 2022-08-30 平安科技(深圳)有限公司 基于卷积神经网络的显存处理方法、装置及存储介质

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2010157118A (ja) * 2008-12-26 2010-07-15 Denso It Laboratory Inc パターン識別装置及びパターン識別装置の学習方法ならびにコンピュータプログラム
JP6314628B2 (ja) * 2014-04-28 2018-04-25 株式会社デンソー 演算処理装置
US9582726B2 (en) * 2015-06-24 2017-02-28 Qualcomm Incorporated Systems and methods for image processing in a deep convolution network
JP6532334B2 (ja) * 2015-07-21 2019-06-19 キヤノン株式会社 並列演算装置、画像処理装置及び並列演算方法
JP6611053B2 (ja) * 2015-09-17 2019-11-27 パナソニックIpマネジメント株式会社 主題推定システム、主題推定方法およびプログラム
JP6700712B2 (ja) * 2015-10-21 2020-05-27 キヤノン株式会社 畳み込み演算装置

Also Published As

Publication number Publication date
US20190156188A1 (en) 2019-05-23
JP2019095862A (ja) 2019-06-20

Similar Documents

Publication Publication Date Title
JP6839641B2 (ja) 演算処理装置
US11574031B2 (en) Method and electronic device for convolution calculation in neural network
CN107145939B (zh) 一种低计算能力处理设备的计算机视觉处理方法及装置
CN107844828B (zh) 神经网络中的卷积计算方法和电子设备
CN108416434A (zh) 针对神经网络的卷积层与全连接层进行加速的电路结构
CN111260047A (zh) 使用存储器内运算的卷积加速器
JP7234185B2 (ja) データを処理する方法及びその装置
DE102017113733A1 (de) Faltendes neuronales Netzwerk auf programmierbarem zweidimensionalem Bildprozessor
JP6955598B2 (ja) 複数の畳み込みウィンドウ内の画像データの並行抽出方法、装置、機器及びコンピュータ可読記憶媒体
CN109313663B (zh) 人工智能计算辅助处理装置、方法、存储介质、及终端
TW202123093A (zh) 實行卷積運算的系統及方法
CN107944545A (zh) 应用于神经网络的计算方法及计算装置
US11763131B1 (en) Systems and methods for reducing power consumption of convolution operations for artificial neural networks
US11164032B2 (en) Method of performing data processing operation
CN107516131A (zh) 卷积计算的加速方法和装置、电子设备和存储介质
CN111133457A (zh) 电子设备及其控制方法
CN114913094A (zh) 图像修复方法、装置、计算机设备、存储介质和程序产品
JP7251354B2 (ja) 情報処理装置、情報処理プログラム、及び情報処理方法
CN110533177B (zh) 一种数据读写装置、方法、设备、介质及卷积加速器
CN111221500B (zh) 大规模并行关联乘法器-累加器
JP6749358B2 (ja) 演算処理装置
CN117730328A (zh) 高效池化方法及其装置
CN115563443A (zh) 卷积运算方法及装置、卷积处理方法、设备与存储介质
CN117413280A (zh) 具有内核扩展和张量累积的卷积
CN114662647A (zh) 处理用于神经网络的层的数据

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20190820

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20200625

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20200911

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20201105

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20210115

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20210215

R151 Written notification of patent or utility model registration

Ref document number: 6839641

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R151