以下、実施の形態について図面を参照しながら説明する。但し、実施の形態は多くの異なる態様で実施することが可能であり、趣旨およびその範囲から逸脱することなくその形態および詳細を様々に変更し得ることは当業者であれば容易に理解される。従って、本発明は、以下の実施の形態の記載内容に限定して解釈されるものではない。
なお本明細書等において、「第1」、「第2」、「第3」という序数詞は、構成要素の混同を避けるために付したものである。従って、構成要素の数を限定するものではない。また、構成要素の順序を限定するものではない。また例えば、本明細書等の実施の形態の一において「第1」に言及された構成要素が、他の実施の形態、あるいは特許請求の範囲において「第2」に言及された構成要素とすることもありうる。また例えば、本明細書等の実施の形態の一において「第1」に言及された構成要素を、他の実施の形態、あるいは特許請求の範囲において省略することもありうる。
なお図面において、同一の要素または同様な機能を有する要素、同一の材質の要素、あるいは同時に形成される要素等には同一の符号を付す場合があり、その繰り返しの説明は省略する場合がある。
なお、本明細書においてニューラルネットワークとは、生物の神経回路網を模し、学習によってニューロンどうしの結合強度を決定し、問題解決能力を持たせるモデル全般を指す。ニューラルネットワークは入力層、中間層(隠れ層ともいう)、出力層を有する。ニューラルネットワークのうち、2層以上の中間層を有するものをディープニューラルネットワークと呼称する。ディープニューラルネットワークによる学習を「ディープラーニング」と呼称する。またニューラルネットワークをハードウェアで実行可能な回路をニューラルネットワーク回路という。
また、本明細書において、ニューラルネットワークについて述べる際に、既にある情報からニューロンとニューロンの結合強度(重み係数とも言う)を決定することを「学習」と呼ぶ場合がある。
また、本明細書において、学習によって得られた結合強度を用いてニューラルネットワークを構成し、そこから新たな結論を導くことを「推論」と呼ぶ場合がある。
(実施の形態1)
本実施の形態では、ニューラルネットワークの機能をハードウェアで実現可能なニューラルネットワーク回路の構成について説明する。本発明の一態様であるニューラルネットワーク回路は、積和演算を効率よく行うことができる。そのため、積和演算の頻度が高い畳み込みニューラルネットワークへの応用が非常に有効である。以下、具体的な構成例を示して説明する。なお積和演算は、乗算によって得られたデータ同士を加算して足し合わせる演算である。
図1は、ニューラルネットワーク回路を備えたデータ処理回路10のブロック図である。データ処理回路10は、インターフェース11、クロック生成回路12、マスターコントローラ13、データドライバ14、ワードドライバ15およびニューラルネットワーク回路20を有する。
ニューラルネットワーク回路20は、メモリコントローラ21、メモリ22、演算ユニット23、データ入出力回路24、および演算部30を有する。
演算部30は、レジスタ回路31および積和演算回路40を有する。積和演算回路40は、複数の演算回路50、および加算回路41を有する。なお図1では図示しないが、複数の演算回路間には、当該演算回路間の電気的な接続を切り替えるためのプログラマブルスイッチエレメント(PSE)が設けられる。
マスターコントローラ13は、データ処理回路10の外部より制御信号control signalを受信し、データ処理回路10の全体を制御する機能を有する。具体的には、データドライバ14およびワードドライバ15の動作制御、メモリコントローラ21の制御、ニューラルネットワーク回路20におけるコンテキスト切り替え等の制御を行う。
クロック生成回路12は、インターフェース11で受信した基準クロック信号clkをもとに、マスターコントローラ13等の回路動作に用いるクロック信号を生成する。
インターフェース11は、データ処理回路10の外部から、基準クロック信号clk、データ信号dataを受信する機能を有する。インターフェース11は、送受信に即した信号を変換する機能を有する。インターフェース11としては、LVDS(Low Voltage Differential Signaling)、MIPI(Mobile Industry Processor Interface)などのインターフェースを用いることができる。
データドライバ14は、演算回路50のメモリに書き込むためのデータ信号を生成する機能を有する。ワードドライバ15は、演算回路50のメモリにデータを書き込むための制御信号(例えばワード信号)を生成する機能を有する。
積和演算回路40は、積和演算を行う回路である。また、積和演算回路40はマスターコントローラ13の制御により複数種類の演算処理を切り替えることができる。そのため同じ回路リソースを用いながらも、入力データに応じた最適な演算処理を選択して演算することができる。積和演算回路40における演算処理の切り替えについては、図9乃至図26で詳細に説明する。
インターフェース11を介して入力されたデータ信号dataは、レジスタ回路31で保持される。レジスタ回路31に格納されたデータは、所望のタイミングにて、メモリ22に保存することができる。ニューラルネットワーク回路20における演算途中で得られたデータは、メモリ22に保存することができる。メモリ22は、一例として、SRAM(Static Random Access Memory)を用いることができる。
レジスタ回路31に格納されたデータは、所望のタイミングにて、ニューラルネットワーク回路20で演算に用いることができる。またレジスタ回路31に格納されたデータは、所望のタイミングにて、演算ユニット23にて、所望の処理を行うことができる。演算ユニット23は、畳み込みニューラルネットワークによる演算処理を行う場合、プーリング演算処理および活性化関数による演算を行う回路である。活性化関数には、例えばシグモイド(sigmoid)関数や、正規化線形関数(Rectified Linear Unit、以下、ReLU)、ハイパボリックタンジェント(tanh)関数、ステップ関数を適用することができる。
データ入出力回路24は、データ処理回路10での演算によって得られた演算結果をデータ処理回路10の外部にデータoutとして出力する回路である。
ニューラルネットワーク回路20が有する積和演算回路40の機能について説明する。
積和演算回路40が有する複数の演算回路50はそれぞれ、入力されるデータを保持するレジスタ回路を有する。また複数の演算回路はそれぞれ、結合強度(重み係数とも言う)に相当する重みデータを記憶するメモリを有する。重みデータは、コンテキストを切り替えるためのコンテキスト信号に応じて切り替えることができる。重みデータを記憶するメモリは、コンテキスト信号をデコードすることで対応する重みデータを出力することができる。積和演算回路40が有する複数の演算回路50はそれぞれ、重みデータと、入力データの積に応じた乗算データを生成する乗算回路を有する。乗算回路では乗算データが得られる。積和演算回路40が有する複数の演算回路50はそれぞれ、加算回路を有する。加算回路は、別の演算回路50で得られたデータに乗算回路で得られた乗算データを加算することで加算データを得ることができる。積和演算回路40が有する複数の演算回路50はそれぞれ、乗算データ、加算データを保持するためのレジスタを有する。当該レジスタに保持されたデータは、所定のタイミングで別の演算回路50に出力される。
積和演算回路40は、上述した演算回路間でのデータの入出力を切り替えることで、演算回路50毎に異なる重み係数と入力データの積を実行させるとともに、別の演算回路50で得られた加算データと、先に得られた乗算データとを足し合わせることで、積和演算を実行させることができる。そして演算回路50を複数直列に配置し、得られるデータを次々にシフトさせることで膨大な数の積和演算を効率よく行うことができる。演算回路50を有する積和演算回路40では、複数の演算回路50に保持された入力データにおいて、乗算データと加算データを、プロセッサのパイプライン処理のように演算回路50間で同時に処理するとともに、複数の演算回路50間で乗算データおよび加算データをシフトさせることで積和演算を実行することができる。そのため、限られたハードウェアで積和演算による演算処理を行う際、少ない回路リソースで超並列のデータ処理を効率よく実行することができる。
図2(A)は、積和演算回路40が有する演算回路50の一例を示すためのブロック図である。演算回路は、一例として、入力レジスタ51、メモリ52、乗算回路53、加算回路54、出力レジスタ55Aおよび出力レジスタ55Bを有する。
入力レジスタ51には、入力信号sinが入力される。入力レジスタ51は、出力信号soutを出力する。入力レジスタ51は、乗算回路53に入力データsdataを出力する。
メモリ52は、コンテキスト信号contextが入力される。メモリ52は、コンテキストに応じたデータセットを有する。データセットは、積和演算処理に用いる複数の重みデータに相当するデータである。メモリは、コンテキスト信号に応じてコンテキストに応じた複数の重みデータの中から一つの重みデータを重みデータcmoutとして出力する。メモリ52に格納した複数の重みデータは、例えば、畳み込み演算処理で用いるフィルタ数が多い場合などコンテキストを変更しながら演算する際に有効である。コンテキストを変更しながら演算することで、1つの乗算回路を使って様々な条件での乗算を行うことができる。
乗算回路53は、入力データsdataと重みデータcmoutとの乗算によって乗算データmoutを生成する。乗算データmoutは、加算回路54に出力される。出力レジスタ55Aに保持された乗算データmoutは、別の演算回路50に出力信号out1として出力される。出力レジスタ55Aを介して乗算データmoutを出力する構成とし、乗算を行った次のタイミングで、別の演算回路50に乗算データmoutを送信できる。また、信号の遅延によって演算結果に誤りがあることを防ぐことができる。
出力信号out1は、別の演算回路50で入力加算データainとして入力される。信号の入出力の切り替えは、演算回路50間にプログラマブルスイッチエレメントを配置することによって実現可能である。当該プログラマブルスイッチエレメントを制御することにより、所望のタイミングにて、所望の配線を接続し、演算回路間の信号の入出力を行うことができる。
加算回路54は、入力加算データainに乗算データmoutを加算することによって加算データaoutを生成する。加算データaoutは、出力レジスタ55Bに出力される。出力レジスタ55Bに保持された加算データaoutは、別の演算回路50に出力信号out2として出力される。出力レジスタ55Bを介して加算データaoutを出力する構成とすることで、信号の遅延によって演算結果に誤りがあることを防ぐことができる。
出力信号out2は、別の演算回路50で入力加算データainとして入力される。信号の入出力の切り替えは、演算回路50間にプログラマブルスイッチエレメントを配置することによって実現可能である。当該プログラマブルスイッチエレメントを制御することにより、所望のタイミングにて、所望の配線を接続し、演算回路間の信号の入出力を行うことができる。
メモリ52は不揮発性メモリを用いる。メモリ52としては、酸化物半導体(Oxide Semiconductor:OS)をチャネル形成領域に有するトランジスタ(OSトランジスタ)を用いたOSメモリが有効である。OSメモリの一例としては、DOSRAMおよびNOSRAMがある。メモリ52を演算回路50毎に設けることで、積和演算回路40外部に設ける場合と比べて、より高速且つ低消費電力に上記重みデータへのアクセス(読み出しおよび書き込み)をすることができる。
なお、DOSRAM(登録商標)とは、「Dynamic Oxide Semiconductor RAM」の略称であり、1T(トランジスタ)1C(容量)型のメモリセルを有するRAMを指す。DOSRAMは、OSトランジスタのオフ電流が低いことを利用したメモリである。DOSRAMは、OSトランジスタを用いて形成されたDRAMである。DOSRAMは、OSトランジスタを含むメモリセルと、Siトランジスタを含む読み出し回路部を有する。上記メモリセルと読み出し回路部は、積層された異なる層に設けることができるため、DOSRAMは、全体の回路面積を小さくすることができる。なお、DOSRAMの詳細は後述する実施の形態3で説明を行う。
ニューラルネットワークを用いた大規模並列計算は、入力データ数およびフィルタ数が1000を超えることがある。上記入力データをSRAMに格納する場合、SRAMはバス幅や回路面積に制限があり、記憶容量が小さいため、上記入力データを小分けにして格納せざるを得ない。DOSRAMは、限られた回路面積でも積層することが可能であるため、メモリセルを高集積に配置することが可能である。
また、NOSRAM(登録商標)とは「Nonvolatile Oxide Semiconductor RAM」の略称であり、ゲインセル型(2T型、3T型)のメモリセルを有するRAMを指す。NOSRAMは、OSトランジスタのオフ電流が低いことを利用したメモリである。
NOSRAMはOSトランジスタを用いたメモリである。NOSRAMは、フラッシュメモリや、ReRAM(Resistive Random Access Memory)、MRAM(Magnetoresistive Random Access Memory)などの他の不揮発性メモリと比べて、データを書き込む際の消費電力が小さい。また、フラッシュメモリやReRAMのように、データを書き込む際に素子が劣化することもなく、データの書き込み可能回数に制限が無い。また、フラッシュメモリやReRAMのように、素子が劣化することに伴うセル間のばらつきの問題もない。また、フラッシュメモリやReRAMのような2端子のメモリとは異なり、書き込みおよび読み出しのための回路が複雑にならない。なお、NOSRAMの詳細は後述する実施の形態3で説明を行う。
また、NOSRAMは、1ビットの2値データの他に、2ビット以上の多値データを保持することができる。NOSRAMは多値データを保持することで、1ビット当たりのメモリセル面積を小さくすることができる。また、NOSRAMは、デジタルデータの他にアナログデータを保持することができる。NOSRAMは、アナログデータのまま保持することができるため、D/A変換回路やA/D変換回路が不要である。そのため、NOSRAMは周辺回路の面積を小さくすることができる。
なお演算回路50は、図2(A)の構成に限らない。図2(B)の構成とすることもできる。図2(B)に図示する演算回路50は、図2(A)の構成において出力レジスタ55A、55Bを統合して出力レジスタ55としている。また、出力レジスタ55と、乗算回路53および加算回路54との間に、切り替え回路56(マルチプレクサともいう)を有する。図2(B)の構成とすることで、加算データaoutまたは乗算データmoutを切り替えて、出力信号outとして出力することができる。
図3(A)では、図2(A)、(B)で説明した演算回路50のブロック図についてさらに詳細に図示する。図3(A)に示す演算回路50では、図2(A)、(B)で説明した構成に加えて、切り替え回路56A、メモリ回路57A、切り替え回路56Bおよびメモリ回路57Bを図示している。
切り替え回路56Aは、入力データsdataとして、入力信号sinをそのまま乗算回路53として出力するか、入力レジスタ51に保持されたデータを出力するかを制御するための回路である。メモリ回路57Aは、コンテキスト信号contextの切り替えに応じて、切り替え回路56A内の電気的な接続を切り替える機能を有する。また切り替え回路56Bは、出力信号out1またはout2として、乗算データmout、加算データaout、あるいは入力加算データainを出力するかを制御するための回路である。メモリ回路57Bは、コンテキスト信号contextの切り替えに応じて、切り替え回路56B内の電気的な接続を切り替える機能を有する。
図3(A)では、入力レジスタ51、出力レジスタ55A、および出力レジスタ55Bを制御するセット信号setおよびリセット信号resetを図示している。セット信号setおよびリセット信号resetによる制御に応じて乗算データmoutまたは加算データaoutなどを所定のタイミングで出力する構成とするができるため、信号の遅延によって演算結果に誤りがあることを防ぐことができる。
また図3(A)では、メモリ52に保持する重みデータの書き込みを制御するコンフィギュレーションデータconfiguration dataおよびワード信号wordを図示している。コンフィギュレーションデータconfiguration dataおよびワード信号wordを演算回路50毎に別々に制御することで、演算回路50ごとに設定した重みデータを個別に書き換え可能な構成とすることができる。
図3(B)では、図3(A)で説明した演算回路50のブロック図についてさらに詳細に図示する。図3(B)に示す演算回路50では、図3(A)で説明した構成に加えて、パワースイッチ(PS)58、メモリ回路57Cを図示している。メモリ回路57Cはコンテキスト信号contextの切り替えに応じて、パワースイッチ58のオンまたはオフを切り替えることができる。演算処理に使用しない演算回路50でのパワースイッチ58をオフにできる構成とすることで、多数の演算回路50のうち、使用しない演算回路50に関しては、リーク電流による消費電力を削減することができる。
図4にメモリ回路57Aの構成例を示す。メモリ回路57Aは、メモリセル96_0、96_1、トランジスタ97_0、97_1、98を有する。メモリ回路57Aには、コンフィギュレーションデータ、切替え信号context_A0、context_A1、信号wordA0、wordB0、wordA1、wordB1が入力される。
メモリセル96_0、96_1は、それぞれ、NOSRAMとして機能する2個のメモリ回路で構成される。メモリセル96_0にコンフィギュレーションデータ“1”を書き込む場合は、信号wordA0を“H”にし、信号wordB0、wordA1およびwordB1を“L”にする。メモリセル96_1にコンフィギュレーションデータ“0”を書き込む場合は、信号wordB0を“H”にし、信号wordA0、wordA1、wordB1を“L”にする。
切り替え回路56Aへ制御信号を出力する間は、トランジスタ98はオフ状態である。切替え信号context_A0、context_A1により、トランジスタ97_0、97_1の何れか一方がオン状態になる。例えば、トランジスタ97_0がオンになると、メモリセル96_0の保持データに応じた論理の制御信号が、切り替え回路56Aに出力される。
メモリ回路57B、57Cは、メモリ回路57Aと同じ回路構成をもつ。
また図5(A)では、図2で説明した演算回路50のブロック図において図示した乗算データmoutを入力データsdataと重みデータcmoutとの乗算で得られるデータであることを明示するため、「sdata*cmout」として図示している。同様に、図5(A)では、図2で説明した演算回路50のブロック図において図示した加算データaoutを入力加算データainに乗算データmoutを加算して得られるデータであることを明示するため、「ain+(sdata*cmout)」として図示している。
また図5(B)には、演算回路50を略記して図示する場合のシンボルを図示している。図5(B)に図示するように演算回路50に向いた矢印は演算回路50に入力されるデータ、つまり入力信号sin(または入力データsdataでもよい)、入力加算データainを表している。また、図5(B)に図示するように演算回路50から逆に向いた矢印は演算回路50から出力されるデータ、つまり出力信号out1、out2(または乗算データmout、加算データaoutでもよい)、出力信号soutを表している。
図5(B)での表記について図6乃至図8を用いてさらに詳細に説明する。
図6(A)は、図5(B)のシンボルとして図示した演算回路50_1乃至50_n(nは2以上の自然数)を水平方向(行方向ともいう)に複数配置する場合を示す図である。また図6(B)は、図6(A)のように配置する場合を、図3(A)に図示した演算回路50の切り替え回路55A、55Bおよび出力レジスタ55A、55Bの構成を簡略化したものを用いて説明する図である。図6(A)、(B)で示す図は、乗算データの生成、および加算データの生成を、複数の演算回路50_1乃至50_n内で並列に処理する場合の動作を表している。
具体的には演算回路間を入出力されるデータを図6(B)の矢印のように表している。隣接する演算回路、例えば演算回路50_1と演算回路50_2との間では、演算回路50_1が出力する出力データは、演算回路50_2の入力加算データとして入力される。また演算回路50_2と演算回路50_3との間では、演算回路50_2が出力する出力データは、演算回路50_3の入力加算データとして入力される。また演算回路50_1と演算回路50_nとの間では、演算回路50_nが出力する出力データは、演算回路50_1の入力加算データとして入力される。つまり演算回路毎に異なる入力データと異なる重みデータとの乗算データを生成するとともに、前段の演算回路より入力される入力加算データに当該乗算データを加える演算処理を、複数の演算回路50_1乃至50_nで並列に処理することができる。
また図7(A)は、図5(B)のシンボルとして図示した演算回路50_1乃至50_3を垂直方向(列方向ともいう)に複数配置する場合を示す図である。また図7(B)は、図7(A)のように配置する場合を、図3(A)に図示した演算回路50の切り替え回路55A、55Bおよび出力レジスタ55A、55Bの構成を簡略化したものを用いて説明する図である。図7(A)、(B)で示す図は、各演算回路50_1乃至50_3の入力レジスタ回路への入力データの書き込みを、他の演算回路を介して行う場合の動作を表している。
具体的には演算回路間を入出力されるデータを図7(B)の矢印のように表している。隣接する演算回路、例えば演算回路50_1と演算回路50_2との間では、演算回路50_1が出力する出力信号soutは、演算回路50_2の入力信号sinとして入力される。また演算回路50_2と演算回路50_3との間では、演算回路50_2が出力する出力信号soutは、演算回路50_3の入力信号sinとして入力される。つまり演算回路を介して電気的に接続された演算回路に信号を入力することができる。
また図8(A)は、図7(A)と同様に、図5(B)のシンボルとして図示した演算回路50_1乃至50_3を垂直方向(列方向ともいう)に複数配置する場合を示す図である。また図8(B)は、図8(A)のように配置する場合を、図3(A)に図示した演算回路50の切り替え回路55A、55Bおよび出力レジスタ55A、55Bの構成を簡略化したものを用いて説明する図である。図8(A)、(B)で示す図は、図7(A)、(B)で図示した乗算データの生成および加算データの生成による積和演算データの加算回路41への出力を、他の演算回路を介して行う場合の動作を表している。
具体的には演算回路間を入出力されるデータを図8(B)の矢印のように表している。隣接する演算回路、例えば演算回路50_1と演算回路50_2との間では、演算回路50_1が出力する出力信号out1、out2は、切り替え回路56の切り替えによって加算回路54を介することなく、演算回路50_2の入力加算データ信号ainとして入力される。また演算回路50_2と演算回路50_3との間では、演算回路50_2が出力する出力信号out1、out2は、切り替え回路56の切り替えによって加算回路54を介することなく、演算回路50_3の入力加算データ信号ainとして入力される。つまり演算回路を介して電気的に接続された演算回路に信号を転送することができる。
次いで図9乃至図26では、上記ニューラルネットワーク回路の動作を説明する。具体的には、畳み込みニューラルネットワークの演算処理を行う際のニューラルネットワーク回路の動作、特に演算回路間での積和演算処理について詳述する。
まず以下の動作の説明で行う畳み込みニューラルネットワークの演算処理の流れについて説明する。図9(A)には、畳み込みニューラルネットワークの演算処理の流れを示す。
図9(A)では、入力層61、中間層62(隠れ層ともいう)、出力層63を図示している。入力層61では、入力データの入力処理70(図中、Inputと図示)を図示している。中間層62では、畳み込み演算処理72、73、75(図中、Convと図示)、複数のプーリング演算処理74、76(図中、Pool.と図示)を図示している。出力層63では、全結合演算処理77(図中、Fullと図示)を図示している。入力層61、中間層62、出力層63における演算処理の流れは一例であり、実際の畳み込みニューラルネットワークの演算処理では、ソフトマックス演算などの他の演算処理を行うことがあり得る。
図9(A)に図示する畳み込みニューラルネットワークを、図1のデータ処理回路10を用いて行う際の演算処理について図9(B)に可視化して図示する。
図9(B)に図示するように、図1のデータ処理回路10を用いて行う演算処理は、まず入力データ71をフィルタ82と積和演算して畳み込む(畳み込み演算処理72)を行う。
なお入力データ71は、20(縦方向)×20(横方向)でチャンネル方向(奥行き方向)が1のデータを一例として図示している。図1のデータ処理回路10を用いて行う際の演算処理は、入力データ71としてMNIST(Mixed National Institute of Standards and Technology database:手書きの数字「0乃至9」に正解ラベルが与えられているデータセット)を用いて行う、畳み込みニューラルネットワーク(CNN)を想定している。なお図中、シンボル81は積和演算、ここでは入力データ71とフィルタ82との積和演算を表している。また畳み込み演算処理72を行うためのフィルタ82は、3×3の9つのフィルタ(図中、3×3 Fil.9と図示)で構成され、ストライドは1とする。また、ゼロパディングは行わない。
入力データ71とフィルタ82との積和演算を行ったデータは、積和演算回路40の外部にある演算ユニット23にて、ReLUによる処理を行うことでデータ84を得る。データ84は、畳み込み演算処理72によって、18×18で9チャンネルのデータとなる。なお図中、シンボル83は活性化関数である正規化線形関数(Rectified Linear Unit)による処理、ここでは積和演算によって得られたデータに対してReLUによる処理を行うことを表している。
データ84は、フィルタ85と積和演算して畳み込み演算処理73を行う。畳み込み演算処理73を行うためのフィルタ85は、3×3の81のフィルタ(図中、3×3 Fil.81と図示)で構成される。データ84とフィルタ82との積和演算を行ったデータは、積和演算回路40の外部にある演算ユニット23にて、ReLUによる処理を行うことでデータ86を得る。データ86は、畳み込み演算処理73によって、16×16で9チャンネルのデータとなる。
データ86は、積和演算回路40の外部にある演算ユニット23にて、プーリング演算処理74を行う。プーリング演算処理74では、一例としてmax poolingを行う。プーリング演算処理74は、2×2のサイズのフィルタで行う。プーリング演算処理されたデータをデータ87とする。データ87は、プーリング演算処理74によって、8×8で9チャンネルのデータとなる。
データ87は、フィルタ88と積和演算して畳み込み演算処理75を行う。畳み込み演算処理75を行うためのフィルタ88は、3×3の81のフィルタ(図中、3×3 Fil.81と図示)で構成される。フィルタ88は入力の各チャンネルに対して、それぞれ9種類のフィルタを有するため、合計81の異なるフィルタとなる。データ87とフィルタ88との積和演算を行ったデータは、積和演算回路40の外部にある演算ユニット23にて、ReLUによる処理を行うことでデータ89を得る。データ89は、畳み込み演算処理75によって、6×6で9チャンネルのデータとなる。
データ89は、積和演算回路40の外部にある演算ユニット23にて、プーリング演算処理76を行う。プーリング演算処理76では、一例としてmax poolingを行う。プーリング演算処理76は、2×2のサイズのフィルタで行う。プーリング演算処理されたデータをデータ90とする。データ90は、プーリング演算処理76によって、3×3で9チャンネルのデータ、81個のデータとなる。
データ90は、重みパラメータ91と積和演算して全結合演算処理77を行う。全結合演算処理77を行うための重みパラメータ91は、入力数が81個、出力数は10個であることから、810種類ある。全結合演算処理77したデータをデータ92とする。データ92は、全結合演算処理77によって、10個のデータとなる。
次いで図10乃至図26を用いて、図1で示した、積和演算回路40を有するデータ処理回路10が図9(B)に図示する演算処理を行う際の動作について説明する。
図10(A)は、図1でも示した、積和演算回路40を図示している。図10(A)では、畳み込み演算処理72、73および75を行う際に必要な演算回路50をマトリクス状に図示している。また図10(A)は、加算回路41を併せて図示している。
なお演算回路50間の電気的な接続は、上述したようにプログラマブルスイッチエレメントによって切り替えることができる。図10(B)には、演算回路50間のプログラマブルスイッチエレメントPSEについて図示している。プログラマブルスイッチエレメントPSEは、コンフィギュレーションメモリおよびスイッチを組み合わせて構成すればよい。コンフィギュレーションメモリは、SRAMあるいはOSトランジスタを用いたメモリを用いることができる。OSトランジスタを用いたプログラマブルスイッチエレメントは、トランジスタ等の素子を積層して設けることができるため、集積化の点で有利である。
次いで図11(A)では、図9(B)で説明した畳み込み演算処理72を抜き出したものである。
図11(B)は、入力データ71を可視化した図である。D11乃至D1kを行方向(横方向)のデータ、D11乃至Dk
1を列方向(縦方向)のデータとして図示している。図11(B)中太線で囲ったデータD11乃至D33(つまり、D11,D12,D13,D21,D22,D23,D31,D32,D33の9つ)は、3×3のフィルタとの間で積和演算を行うデータを表している。
なお入力データ71に限らず、図9(B)で説明したデータ84、86、87および89等の入力データに畳み込み演算処理を行い得られるデータについても、図11(B)に表す入力データ71と同様に図示することができる。そのためデータ84、86、87および89を、入力データという場合もある。
また図11(C)は、フィルタ82で用いられるフィルタを可視化した図である。9つのチャンネルは、図11(C)のように3×3のフィルタである、フィルタ82_1乃至82_9(F1乃至F9)で表すことができる。例えばフィルタ82_1は、3×3で重みデータを有する。図11(C)では重みデータw1乃至w9を図示している。
なおフィルタ82に限らず、図9(B)で説明したフィルタ85、88および91等のその他の畳み込み演算処理および全結合演算処理等に用いられるフィルタについても、図11(C)に表すフィルタ82と同様に図示することができる。
図12乃至図15は、図10(A)で示した積和演算回路40による、図11(B)、(C)に示す入力データ71およびフィルタ82を用いた畳み込み演算処理72を行う際の動作を説明するための図である。
畳み込み演算処理72は、図12(A)に図示するように、図10(A)で示した積和演算回路40における9×9の演算回路50を用いて行う。図12(A)では、演算回路50を縦横に配置するとともに、行(row)方向および列(column)方向を併せて図示している。行方向は、入力データである画像データのシフト(pixel data shift)方向となる。また列方向は、入力データと重みデータとの乗算で得られる乗算データのシフト(multiply data shift)方向となる。
また図12(A)において、行方向の1行目の演算回路50には、それぞれフィルタF1、つまりフィルタ82_1の重みデータw1乃至w9を列毎にセットする。例えば1行1列目の演算回路50にw1、1行2列目の演算回路50にw2、1行3列目の演算回路50にw3のように順に重みデータをセットする。セットは、コンテキスト信号によるコンテキストの切り替えで行うことができる。
次いで、行方向の2行目の演算回路50には、フィルタF2をセットする。同様に行方向の3乃至9行目の演算回路50には、フィルタF3乃至F9の重みデータをセットする。
コンテキスト「1」で上記の重みデータのセットとなるようにする。1行1列の演算回路50にて、乗算結果であるD11×W1ができる。それを順に列方向にシフトしていく。また、1行1列目の入力データD11は、次のタイミングで行方向にシフトさせる。そして1行目と同様に列方向に乗算データをシフトさせる。2行目の演算回路50にはフィルタF2、つまりフィルタ82_2の重みデータがセットされており、フィルタF2の各重みデータと入力データの乗算データが列方向にシフトするようになる。
2行目以降にも入力データがシフトし、セットされたフィルタF3乃至F9、つまりフィルタ82_3乃至82_9の重みデータと入力データとの乗算データを生成し、列方向にシフトするようにする。1乃至9行目の9列目の演算回路50は、各フィルタ(F1乃至F9)のいずれか一つと入力データの積和演算に相当する出力データが得られる。1乃至9行目の9列目の端子は、out1乃至out9として図示している。
図12(A)の動作をまとめると、図12(B)のように表すことができる。畳み込み演算処理72を行う際、コンテキストで固定するため、コンテキスト信号contextは1である。時刻T0から開始して、時刻T8以降において、1行目の9列目の演算回路50で3×3の入力データD11乃至D33(図11(B)中太線で囲ったデータ)とフィルタF1との積和演算(In×F1)がout1で得られる。行方向にデータをシフトさせるため、1行目の9列目の演算回路50で3×3の入力データD11乃至D33(図11(B)中太線で囲ったデータ)とフィルタF2乃至F9のいずれか1つとの積和演算がout2乃至out9も得られる。入力データ71は、行方向に入力データD12乃至D14、入力データD22乃至D24、および入力データD22乃至D24(つまり、D12,D13,D14,D22,D23,D24,D32,D33,D34の9つ)としてシフトさせることで、フィルタF1乃至F9との乗算データを入力データ71の全座標との間で得ることができる。
より具体的な例について図13乃至図15で説明する。
図13(A)は時刻T0での演算回路50に保持された入力データを可視化した図である。行方向の矢印は、入力データのシフト方向を表している。列方向の矢印は、乗算データのシフト方向を表している。なお図中に付した「BL」は、入力データが入力された演算回路の入力データのシフト方向にある演算回路50を表している。なお図中、空白として図示している演算回路50は、前行の演算回路50からの入力データのシフトがない演算回路50であり、パワーゲーティング可能な演算回路50である。図13(A)に示すように時刻T0では、1行1列目の演算回路50に入力データであるD11が入力される。そして1行1列目の演算回路50では、コンテキスト切り替えによって保持される重みデータw1との乗算データを生成する。
図13(B)は時刻T1での演算回路50に保持された入力データを可視化した図である。図13(A)に示すように時刻T1では、1行1列目の入力データD11がシフトして2行1列目の演算回路50に入力される。また1行1列目および1行2列目の演算回路50に入力データD12が入力される。そして入力データD12とコンテキスト切り替えによって保持される重みデータw1との乗算データ、入力データD12とコンテキスト切り替えによって保持される重みデータw2との乗算データ、を生成する。同時に入力データD11とフィルタF2の重みデータとの乗算データの生成が行われる。なお時刻T1において、1行2列目の演算回路50では、時刻T0で生成された入力データD11と重みデータw1との乗算データに、時刻T1で得られた入力データD12と重みデータw1との乗算データが加算された加算データが列方向にシフトする。
図14(A)は時刻T2での演算回路50に保持された入力データを可視化した図である。図14(A)に示すように時刻T2では、2行1列目の入力データD11がシフトして3行1列目の演算回路50に入力される。また1行1列目の入力データD12、および1行2列目の入力データD12がシフトして2行1列目の演算回路50、2行2列目の演算回路50にそれぞれ入力される。また1行1列目、1行2列目、および1行3列目の演算回路50に入力データD13が入力される。そして入力データD13とコンテキスト切り替えによって保持される重みデータw1との乗算データ、入力データD13とコンテキスト切り替えによって保持される重みデータw2との乗算データ、および入力データD13とコンテキスト切り替えによって保持される重みデータw3との乗算データ、を生成する。同時に入力データD11とフィルタF3の重みデータとの乗算データの生成、入力データD12とフィルタF2の重みデータとの乗算データの生成が行われる。なお時刻T2において、1行3列目の演算回路50では、時刻T2で生成された加算データに、時刻T2で得られた入力データD13と重みデータw3との乗算データが加算された加算データが列方向にシフトする。
図14(B)は時刻T3での演算回路50に保持された入力データを可視化した図である。図14(B)に示すように時刻T3では、3行1列目の入力データD11がシフトして4行1列目の演算回路50に入力される。また2行1列目の入力データD12、および2行2列目の入力データD12がシフトして3行1列目の演算回路50、3行2列目の演算回路50にそれぞれ入力される。また1行1列目のD13、1行2列目の入力データD13、および1行3列目の入力データD13がシフトして2行1列目の演算回路50、2行2列目の演算回路50、2行3列目の演算回路50にそれぞれ入力される。また1行1列目、1行2列目、および1行3列目の演算回路50に入力データである入力データD14が、1行4列目の演算回路50にD21が入力される。そして入力データD14とコンテキスト切り替えによって保持される重みデータw1との乗算データ、入力データD14とコンテキスト切り替えによって保持される重みデータw2との乗算データ、入力データD14とコンテキスト切り替えによって保持される重みデータw3との乗算データ、および入力データD21とコンテキスト切り替えによって保持される重みデータw4との乗算データを生成する。同時に入力データD11とフィルタF4の重みデータとの乗算データの生成、入力データD12とフィルタF3の重みデータとの乗算データ、および入力データD13とフィルタF2の重みデータとの乗算データの生成が行われる。なお時刻T3において、1行4列目の演算回路50では、時刻T3で生成された加算データに、時刻T3で得られた入力データD21とw4との乗算データが加算された加算データが列方向にシフトする。
時刻T4乃至T7においても入力データのシフトおよび乗算データと加算データとを加算したデータのシフトによって図15(A)に図示する時刻T8の状態となる。
図15(A)に示す時刻T8では、入力データD11が9行1列目までシフトし、1行9列目に入力データD33が入力され、重みデータw9との乗算データが生成されるともに、1行8列目で生成された積和演算結果である加算データと加算して得られる加算データを生成する。この加算データは、out1から出力される。この加算データは、3×3の入力データD11乃至D33と、フィルタF1の重みデータw1乃至w9の積和演算、すなわちD11・w1+(略)+D33・w9である。この演算結果は、図11(B)の太線で囲った入力データと、フィルタF1との積和演算の一部に相当する。
図15(B)に示す時刻T9では、入力データD12が9行1列目までシフトし、2行9列目に入力データD33が入力され、重みデータw9との乗算データが生成されるともに、1行8列目で生成された積和演算結果である加算データと加算して得られる加算データを生成する。この加算データは、out2から出力される。この加算データは、入力データD11乃至D33とフィルタF2の重みデータの積和演算である。この演算結果は、図11(B)の太線で囲った入力データと、フィルタF2との積和演算に相当する。
本実施の形態のニューラルネットワーク回路の構成では、各演算回路において乗算データおよび加算データを効率よく生成し、積和演算を効率よく行うことができる。そのため、ニューラルネットワーク回路において入力データおよび重みデータ等の増大に伴って、回路規模の大型化が問題となるが、この問題を解消することができる。つまり、同じ回路を用いて異なる処理の積和演算を行う構成とすることができるため、回路リソースの有効活用を図ることができる。
図16乃至図21は、図11(B)、(C)に示す各データを用いて図10(A)で示した積和演算回路40による畳み込み演算処理73、75を行う際の動作を説明するための図である。
図16(A)、(B)は、図9(B)で説明した畳み込み演算処理73、75を抜き出したものである。畳み込み演算処理73、75は、図10で示した積和演算回路40における9×9の演算回路50を用いて行う。図16(C)では、図12(A)と同様に演算回路50を縦横に配置するとともに、行(row)方向および列(column)方向を図示している。列方向は、入力データ(データ84または87に相当)と重みデータ(フィルタ85またはフィルタ88が有する重みデータ)とによって得られる積和演算データのシフト(MAC data shift)方向となる。
図16(C)において、1列目の演算回路50には入力データD11(以下、D11のように略記)、2列目の演算回路50にはD12といったように入力データを列毎にセットする。この入力データのセットは、1行目からデータをシフトさせて全行に書き込んでセットしておく。その結果図16(C)に図示するように各列にD11乃至D33がセットされる。ただし、演算回路50は、行方向で各入力チャンネルにおける積和演算処理を行うとする。従って、1行目は入力チャンネル1に対応するデータ、2行目は入力チャンネル2に対応するデータとし、9行目は入力チャンネル9に対応するデータとする。また図16(C)において、行方向の1行目の演算回路50には、入力チャンネル1に対して演算するための9種類のフィルタF10乃至F18(以下、F10乃至F18のように略記))の重みデータを列毎にセットする。コンテキストのセット、つまりフィルタのセットと、先にセットされたD11乃至D33との乗算によって乗算データを得て、乗算結果を次列の演算回路50に加算データとして出力して、積和演算を実行する構成とする。例えばコンテキスト2で1行1列目の演算回路50にF10の重みデータ、1行2列目の演算回路50にF11の重みデータ、1行3列目の演算回路50にF12の重みデータのように重みデータをセットする。コンテキスト3以降は演算回路50に対応するフィルタを列方向にシフトさせる。9列目の演算回路50に対応していたフィルタは、1列目に戻る。例えばコンテキスト3で1行1列目の演算回路50にF18の重みデータ、1行2列目の演算回路50にF10の重みデータ、1行3列目の演算回路50にF11の重みデータのように重みデータをセットする。セットした重みデータは、コンテキストの切り替えで別のフィルタの重みデータに切り替えることができる。
同時に2行目以降の演算回路50でも、フィルタに応じた重みデータをセットする。例えばコンテキスト2で2行1列目の演算回路50にF19の重みデータ、2行2列目の演算回路50にF20の重みデータ、2行3列目の演算回路50にF21の重みデータのように重みデータをセットする。コンテキスト3以降は演算回路50に対応するフィルタを列方向にシフトさせる。9列目の演算回路50に対応していたフィルタは、1列目に戻る。例えばコンテキスト3で2行1列目の演算回路50にF27の重みデータ、2行2列目の演算回路50にF19の重みデータ、2行3列目の演算回路50にF20の重みデータのように重みデータをセットする。セットした重みデータは、コンテキストの切り替えで別のフィルタの重みデータに切り替えることができる。コンテキストの切り替えが、フィルタのシフトを演算回路9列分を一巡りするまで行う。つまりコンテキスト2からコンテキスト10まで切り替える。
積和演算結果のシフトによって得られた積和演算データは、加算回路41に読み出される。加算回路41では、同じ列での積和演算データを足しあわせる。そして得られるデータを、積和演算回路40の外部にある演算ユニット23にて、ReLUによる処理を行うことで得られるデータが畳み込み演算処理後のデータに相当する。
上述した図16(C)の動作をまとめると、図16(D)のように表すことができる。畳み込み演算処理73、75を行う際、D11乃至D33と異なるフィルタとの積和演算を実行するため、コンテキスト信号contextを2乃至10に切り替える。時刻Twrite1でD11乃至D33を演算回路50にセットした後、時刻T10乃至T18でコンテキスト信号を2乃至10を切り替える。3×3の入力データであるD11乃至D33と9つのフィルタとの積和演算が各行各列の演算回路50で得られた後、時刻Tread1で加算回路41に読み出し、畳み込み演算処理を行ったデータ(CH1-9 D11-D33)を得る。そして各演算回路50に次の入力データとしてD12乃至D34をセットし(時刻Twrite2)、コンテキスト2乃至10を切り替えて各行において積和演算を実行する。
より具体的な例について図17乃至図20で説明する。
図17(A)は時刻Twrite1での演算回路50に保持された入力データを可視化した図である。
図17(A)に図示するように、各列にD11乃至D33をセットする。なお演算回路50内のメモリ52には、重みデータのセットが書き込まれている。重みデータのセットは、コンテキストの切り替えに対応して切り替えられる。
図17(B)は時刻T10での演算回路50に保持された入力データを可視化した図である。
時刻T10では、コンテキスト信号の切り替えにより、コンテキスト「2」として、乗算するためのフィルタを図17(B)に図示するよう演算回路50にセットする。図17(B)において列方向の矢印は、乗算データ、あるいは乗算データに前列の加算データを加算した加算データのシフト方向を表している。同じ行にある演算回路50間に付した「F10」等は、フィルタF10との積和演算するためのフィルタである。演算で得られるデータは、前列の加算データを加算して、データのシフト方向にある演算回路50に加算データとして出力される。
例えば1行目の演算回路50での動作に着目して説明すると、D11が保持された1列目の演算回路50は、フィルタF10との演算を行う。得られたデータを2列目の演算回路50に出力する。同時に、D12が保持された2列目の演算回路50は、フィルタF11との演算を行う。得られたデータを3列目の演算回路50に出力する。3列目乃至8列目の演算回路50においても、それぞれフィルタF12乃至F17との演算を行い、得られたデータを演算回路50に出力する。同時に、D33が保持された9列目の演算回路50は、フィルタF18との演算を行う。得られたデータを1列目の演算回路50に出力する。2行目以降も保持している入力データとフィルタとの演算を行い、演算回路50に出力する。
図18(A)は時刻T11での演算回路50に保持された入力データを可視化した図である。
時刻T11では、コンテキスト信号の切り替えにより、コンテキスト「3」として、乗算するためのフィルタを図18(A)に図示するように演算回路50にセットする。例えば1行目の演算回路50での動作に着目して説明すると、D11が保持された1列目の演算回路50は、フィルタF18との演算を行う。得られたデータを9列目の演算回路50から出力されたデータに加算して2列目の演算回路50に出力する。同時に、D12が保持された2列目の演算回路50は、フィルタF10との演算を行う。得られたデータを1列目の演算回路50から出力されたデータに加算して3列目の演算回路50に出力する。3列目乃至8列目の演算回路50においても、それぞれフィルタF11乃至F16との演算を行い、得られたデータを演算回路50に出力する。同時に、D33が保持された9列目の演算回路50は、フィルタF17との演算を行う。得られたデータを8列目の演算回路50から出力されたデータに加算して1列目の演算回路50に出力する。2行目以降も保持しているデータとフィルタとの演算を行い、演算回路50に出力する。時刻T12乃至時刻T17においても、コンテキスト信号の切り替えにより、コンテキスト「3乃至9」として、下記演算回路50で乗算するための重みデータをセットし、保持している入力データとフィルタとの演算を行い、演算回路50に出力することを行う。
図18(B)は時刻T18での演算回路50に保持された入力データを可視化した図である。
時刻T18では、コンテキスト信号の切り替えにより、コンテキスト「10」として、下記演算回路50で乗算するためのフィルタを図18(B)に図示するようにセットする。例えば1行目の演算回路50での動作に着目して説明すると、D11が保持された1列目の演算回路50は、フィルタF11との演算を行う。得られたデータを9列目の演算回路50から出力されたデータに加算して2列目の演算回路50に出力する。ここで2列目の演算回路50に出力されるデータは、1列目、および3乃至9列目の演算回路50で乗算されたデータを加算して得られた積和演算のデータである。同時に、D12が保持された2列目の演算回路50は、フィルタF12との演算を行う。得られたデータを1列目の演算回路50から出力されたデータに加算して3列目の演算回路50に出力する。ここで3列目の演算回路50に出力されるデータは、1列目、2列目、および4乃至9列目の演算回路50で乗算されたデータを加算して得られた積和演算のデータである。3列目乃至8列目の演算回路50においても、それぞれフィルタF13乃至F18との演算を行い、得られたデータを演算回路50に出力する。同時に、D33が保持された9列目の演算回路50は、フィルタF10との演算を行う。得られたデータを8列目の演算回路50から出力されたデータに加算して1列目の演算回路50に出力する。ここで1列目の演算回路50に出力されるデータは、2乃至9列目の演算回路50で乗算されたデータを加算して得られた積和演算のデータである。2行目以降も保持している入力データとフィルタとの積和演算を行い、演算回路50に出力する。つまり時刻T18の状態で各演算回路50には、D11乃至D33と各行の複数のフィルタとの積和演算によるデータが保持されていることになる。
図19(A)は時刻Tread1での動作を可視化した図である。
行方向の矢印は、T10乃至T18で得られた積和演算によるデータのシフト方向を表している。図19(A)に示すように時刻Tread1では、1乃至9行目に保持された積和演算によるデータを順に加算回路41にシフトさせて、得られたデータの和を列毎に得る。加算回路41で得られたデータは、積和演算回路40の外部にある演算ユニット23にて、ReLUによる処理を行うことでD11乃至D33に畳み込み演算処理を行ったデータを得る。
図19(B)は時刻Twrite2での演算回路50に保持された入力データを可視化した図である。
図19(B)に図示するように、各列にD12乃至D34をセットする。
図20は時刻T19での演算回路50に保持された入力データを可視化した図である。
時刻T19では、コンテキスト信号の切り替えにより、コンテキスト「2」として、下記演算回路50で乗算するためのフィルタを図20に図示するようにセットする。例えば1行目の演算回路50での動作に着目して説明すると、D12が保持された1列目の演算回路50は、フィルタF10との演算を行う。得られたデータを2列目の演算回路50に出力する。同時に、D13が保持された2列目の演算回路50は、フィルタF11との演算を行う。得られたデータを3列目の演算回路50に出力する。3列目乃至8列目の演算回路50においても、それぞれフィルタF12乃至F17との演算を行い、得られたデータを演算回路50に出力する。同時に、D34が保持された9列目の演算回路50は、フィルタF18との演算を行う。得られたデータを1列目の演算回路50に出力する。2行目以降も保持している入力データとフィルタとの演算を行い、演算回路50に出力する。
以降演算回路50に保持する入力データ、コンテキストを切り替えて乗算データを加算していき、畳み込み演算処理に応じた演算を実行する。
本実施の形態のニューラルネットワーク回路の構成では、各演算回路において乗算データおよび加算データを効率よく生成し、コンテキストの切り替えと組み合わせることで、異なるフィルタを用いた演算処理に基づく積和演算を効率よく行うことができる。そのため、ニューラルネットワーク回路において入力データおよび重みデータ等の増大に伴って、回路規模の大型化が問題となるが、この問題を解消することができる。つまり、同じ回路を用いて異なる処理の積和演算を行う構成とすることができるため、回路リソースの有効活用を図ることができる。
ここで図16乃至図20で図示して説明した積和演算の演算モデルについて、図21(A)乃至(F)を用いて説明する。
図21(A)乃至(F)の説明では、異なる4種類の重みデータを有するフィルタ(W11,W12,W13,W14)、(W21,W22,W23,W24)、(W31,W32,W33,W34)、(W41,W42,W43,W44)と、入力データ(I1,I2,I3,I4)の積和演算を行う場合について説明する。上記図16乃至図20で説明した演算処理の手法を用いることで、複数の演算回路で得られたデータをループさせながら積和演算を並行して進めることが可能である。
複数のフィルタによる積和演算(畳み込み演算)は、式(1)に図示するように、行列-ベクトル積で表すことができる。
Wで構成される4×4の行列は、重みデータ(各行の要素が各フィルタの成分に相当)に相当する。Iで構成される1×4の行列は、入力データに相当する。Y(Y1乃至Y4)で構成される1×4の行列は、積和演算によって得られるデータに相当する。
式(1)の行列-ベクトル積は、上述した演算回路50を用いて積和演算を行う演算モデルに当てはめると、図21(A)のように図示することができる。つまり入力データI1乃至I4は、各演算回路50_Aの入力データ93として保持される。またフィルタ(W11,W12,W13,W14)、(W21,W22,W23,W24)、(W31,W32,W33,W34)、(W41,W42,W43,W44)の重みデータは、各演算回路50Aのメモリに書き込まれ、コンテキストの切り替えに応じて、異なる重みデータ94_1乃至94_4として用いて乗算データの生成を行うことができる。以下、1クロック(1clk)ごとに演算処理が進むものとして説明する。
演算回路50_Aに入力データを書き込んで1clk後、重みデータのセットから任意の重みデータがコンテキストの切り替えによって設定される。具体的には、図21(B)に図示する下線を付した重みデータ(W11,W22,W33,W44)が設定され、各演算回路50_Aでは保持している入力データ(I1,I2,I3,I4)との乗算データを生成する。各演算回路50_Aでは、入力データ93と重みデータ94_1との乗算データ(W11・I1,W22・I2,W33・I3,W44・I4)を生成する。
次いで図21(B)の状態から1clk後の図21(C)では、図21(B)とは異なるコンテキストの重みデータによって設定される。具体的には、図21(C)に図示する下線を付した重みデータ(W41,W12,W23,W34)が設定され、各演算回路50_Aでは保持している入力データ(I1,I2,I3,I4)との乗算データを生成する。各演算回路50_Aでは、入力データ93と重みデータ94_2との乗算データ(W41・I1,W12・I2,W23・I3,W34・I4)を生成する。さらに、各演算回路90_Aでは、図21(B)の状態で生成した乗算データ(W11・I1,W22・I2,W33・I3,W44・I4)を次列の加算データとして次列の演算回路50_Aに出力する。
次いで図21(C)の状態から1clk後の図21(D)では、図21(C)とは異なるコンテキストの重みデータによって設定される。具体的には、図21(D)に図示する下線を付した重みデータ(W31,W42,W13,W24)が設定され、各演算回路50_Aでは保持している入力データ(I1,I2,I3,I4)との乗算データを生成する。例えば、各演算回路50_Aでは、入力データ93と重みデータ94_3との乗算データ(W31・I1,W42・I2,W13・I3,W24・I4)を生成する。さらに、各演算回路90_Aでは、乗算データ(W41・I1,W12・I2,W23・I3,W34・I4)を、図21(C)で出力された加算データ(W11・I1,W22・I2,W33・I3,W44・I4)に加算した積和演算データ(W12・I2+W11・I1,W23・I3+W22・I2,W34・I4+W33・I3,W41・I1+W44・I4)を次列の加算データとして次列の演算回路50_Aに出力する。
次いで図21(D)の状態から1clk後の図21(E)では、図21(D)とは異なるコンテキストの重みデータによって設定される。具体的には、図21(E)に図示する下線を付した重みデータ(W21,W32,W43,W14)が設定され、各演算回路50_Aでは保持している入力データ(I1,I2,I3,I4)との乗算データを生成する。例えば、各演算回路50_Aでは、入力データ93と重みデータ94_4との乗算データ(W21・I1,W32・I2,W43・I3,W14・I4)を生成する。さらに、各演算回路90_Aでは、乗算データ(W31・I1,W42・I2,W13・I3,W24・I4)を、図21(D)で出力された加算データ(W12・I2+W11・I1,W23・I3+W22・I2,W34・I4+W33・I3,W41・I1+W44・I4)に加算した積和演算データ(W13・I3+W12・I2+W11・I1,W24・I4+W23・I3+W22・I2,W31・I1+W34・I4+W33・I3,W42・I2+W41・I1+W44・I4)を次列の加算データとして次列の演算回路50_Aに出力する。
次いで図21(D)の状態から1clk後の図21(E)において各演算回路90_Aでは、図21(E)で出力された加算データ(W13・I3+W12・I2+W11・I1,W24・I4+W23・I3+W22・I2,W31・I1+W34・I4+W33・I3,W42・I2+W41・I1+W44・I4)に乗算データ(W31・I1,W42・I2,W13・I3,W24・I4)を加算した積和演算データが得られる。図21(F)に示すように、各演算回路では、積和演算データ95_2(W21・I1+W24・I4+W23・I3+W22・I2,W31・I1)、積和演算データ95_3(W32・I2+W31・I1+W34・I4+W33・I3)、積和演算データ95_4(W43・I3+W42・I2+W41・I1+W44・I4)、積和演算データ95_1(W14・I4+W13・I3+W12・I2+W11・I1)を得ることができる。得られた積和演算データは、行列-ベクトル積で表したY(Y1乃至Y4)に相当する。
図21(A)乃至(F)の構成では、演算途中で外部メモリへのデータアクセスが必要なく、また、全ての演算回路でデータの受け渡しを並列に行いながら積和演算データを効率よく得ることができる。そのため、ニューラルネットワーク回路において入力データおよび重みデータ等の増大に伴って、回路規模の大型化が問題となるが、この問題を解消することができる。
次いで図22乃至図26は、図11(B)、(C)に示す各データを用いて図10で示した積和演算回路40による全結合演算処理77を行う際の動作を説明するための図である。
図22(A)は、図9(B)で説明した全結合演算処理77を抜き出したものである。また図22(B)では、全結合演算処理77ではデータ90の81個のデータが、判定するラベルの数、ここではチャンネル数が10のデータ92となる畳み込み演算処理を説明するための図である。
図22(B)では、データ92の一つのラベルに対して、81個のデータのそれぞれに対して重みパラメータとの積和演算を行い、さらに得られた値を足し合わせる演算処理を行う様子を図示している。全結合演算処理では、フィルタを用いないが、前述した畳み込み演算処理の回路リソースを利用して全結合演算処理を行うため、畳み込み演算処理と類似の回路規模にて演算を行う。従って、81個の入力データを9個ずつに分割し積和演算を行うことが有効である。また、9個の入力データ毎に積和演算を行うが、入力データの番号1乃至9(図22(B)中、データ90に付した番号)までの9個のデータと、出力データの番号1(図22(B)中、データ92に付した番号)との間で行われる積和演算に用いる重みパラメータ群をF91と呼ぶ。また、入力データの番号1乃至9までの9個のデータと、出力データの番号2乃至10(図22(B)中、データ92に付した番号)との間で行われる積和演算に用いる重みパラメータ群をそれぞれ、F92乃至F100と呼ぶ。同様にして、入力データの番号10乃至18(図22(B)中、データ90に付した番号)までの9個のデータと、出力データの番号1乃至10(図22(B)中、データ92に付した番号)との間で行われる積和演算に用いる重みパラメータ群をそれぞれ、F101乃至F110、F111乃至F120、F121乃至F130、F131乃至F140、F141乃至F150、F151乃至F160、F161乃至F170、F171乃至F180とする。
図22(A)、(B)に示す全結合演算処理77は、図10で示した積和演算回路40における9×10の演算回路50を用いて行う。図23(A)では、9×10の演算回路50を縦横に配置するとともに、行(row)方向および列(column)方向を図示している。列方向は、入力データと重みデータとによって得られる積和演算データのシフト(MAC data shift)方向となる。また図23(A)では、加算回路41を図示している。
図23(A)において、各演算回路50には、データ90の81個のデータを別々にセットする。つまり図23(A)において、9行目の各列の演算回路50にはデータ「1」乃至「9」、8行目の各列の演算回路50には「10」乃至「18」といったようにデータをセットする。各行の10列目の演算回路50にはデータをセットしない(「0」をセットするでもよい)。つまり、乗算データがゼロで、入力される加算データへの加算分もゼロである。
また図23(A)において、行方向の1行目の演算回路50には、それぞれF171乃至F180の重みデータ群を列毎にセットする。同様に図23(A)において、行方向の2行目の演算回路50には、それぞれF161乃至F170の重みデータ群を列毎にセットする。3行目以降の演算回路50においても、それぞれF161乃至F170の重みデータ群を列毎にセットする。10列目の演算回路50は、ブランクデータとしてデータ、フィルタともにデータを与えない。
なおF91乃至F180は、図22(B)に図示するように、全結合演算処理を行う際に1つのチャンネルにつき9つの重みデータ群(例えば、<F91、F101、(略)、F171>、<F92、F102、(略)、F172>、<F100、F110、(略)、F180>)が必要になる。図23(A)の構成では、複数の重みデータ群を用いて積和演算を行い、あとで得られたデータを加算することで全結合演算処理を行う構成とする。少ない演算回路数で、超並列の全結合演算処理を効率よく行うことができる。
例えばコンテキスト「11」で1行1列目の演算回路50にF171の重みデータ、1行2列目の演算回路50にF172の重みデータ、1行3列目の演算回路50にF173の重みデータのように重みデータ群をセットする。1行9列目の演算回路50にはF179の重みデータのように重みデータ群をセットし、1行10列目にはデータおよび重みデータ群をセットしないが、F180を対応させておく。コンテキスト「12」以降は演算回路50に対応する重みデータ群を列方向にシフトさせる。10列目の演算回路50に対応していた重みデータ群は、1列目に戻る。例えばコンテキスト「12」で1行1列目の演算回路50にF180の重みデータ、1行2列目の演算回路50にF171の重みデータ、1行3列目の演算回路50にF172の重みデータのように重みデータ群をセットする。1行9列目の演算回路50にはF178の重みデータのように重みデータ群をセットし、1行10列目にはデータおよび重みデータ群をセットしないが、F179を対応させておく。
セットした重みデータは、コンテキストの切り替えで別の重みデータ群の重みデータに切り替えることができる。コンテキストの切り替えは、演算回路10列分を重みデータ群のシフトが一巡りするまで行う。つまりコンテキストをコンテキスト「11」から「20」に順に切り替える。
演算結果のデータをシフトすることによって得られた積和演算データは、加算回路41に読み出される。加算回路41では、同じ列での積和演算データを足しあわせる。そして得られるデータが全結合演算処理後のデータに相当する。
上述した図23(A)の動作をまとめると、図23(B)のように表すことができる。
全結合演算処理77を行う際、81個のデータ「1」乃至「81」と異なる重みデータ群との積和演算を実行するため、コンテキスト信号contextはコンテキストをコンテキスト「11」から「20」に順に切り替える。時刻Twrit
e3でデータ「1」乃至「81」を演算回路50にセットした後、時刻T20乃至T29でコンテキストをコンテキスト「11」から「20」に順に切り替える。81個のデータ「1」乃至「81」と9つの重みデータ群との積和演算がそれぞれの演算回路50で得られた後、時刻Tread2で加算回路41に読み出し、積和演算処理を行ったデータ(CH10 1×1)を得る。
より具体的な例について図24乃至図26で説明する。
図24(A)は時刻Twrite3での演算回路50に保持された入力データを可視化した図である。図24(A)に図示するように、各行各列の演算回路50に81個のデータ「1」乃至「81」をセットする。各行10列目の演算回路50には、空のデータとして「0」を図示している。なお演算回路50内のメモリ52には、重みデータのセットが書き込まれている。重みデータのセットは、コンテキストの切り替えに対応して切り替えられる。
図24(B)は時刻T20での演算回路50に保持されたデータを可視化した図である。時刻T20では、コンテキスト信号の切り替えにより、コンテキスト「11」として、下記演算回路50で乗算するための重みデータ群を図24(B)に図示するようにセットする。列方向の矢印は、乗算データ、あるいは乗算データに前列の加算データを加算した加算データのシフト方向を表している。同じ行にある演算回路50間に付した「F171」等は、F171との積和演算するための重みデータ群である。演算で得られるデータは、前列の加算データを加算して、データのシフト方向にある演算回路50に加算データとして出力される。
例えば1行目の演算回路50での動作に着目して説明すると、データ「73」が保持された1列目の演算回路50は、F171との演算を行う。得られたデータを10列目の演算回路50から出力されたデータ(この場合0)に加算して2列目の演算回路50に出力する。同時に、データ「74」が保持された2列目の演算回路50は、F172との演算を行う。得られたデータを1列目の演算回路50から出力されたデータに加算して3列目の演算回路50に出力する。3列目乃至8列目の演算回路50においても、それぞれデータとF173乃至F178との演算を行い、得られたデータを演算回路50に出力する。同時に、データ「81」が保持された9列目の演算回路50は、F179との演算を行う。得られたデータを8列目の演算回路50から出力されたデータに加算して10列目の演算回路50に出力する。同時に、データが保持されていない10列目の演算回路50は、空のデータであるため乗算データが得られない。つまり10列目の演算回路50から出力される加算データは、9列目の演算回路50から出力された加算データのままとなる。
図25(A)は時刻T21での演算回路50に保持された入力データを可視化した図である。時刻T21では、コンテキスト信号の切り替えにより、コンテキスト「12」として、下記演算回路50で乗算するための重みデータ群を図25(A)に図示するようにセットする。
例えば1行目の演算回路50での動作に着目して説明すると、データ「73」が保持された1列目の演算回路50は、F180との演算を行う。得られたデータを10列目の演算回路50から出力されたデータ(この場合0)に加算して2列目の演算回路50に出力する。同時に、データ「74」が保持された2列目の演算回路50は、F171との演算を行う。得られたデータを1列目の演算回路50から出力されたデータ(この場合、時刻T21で行ったデータ「73」とF171の乗算データ)に加算して3列目の演算回路50に出力する。3列目乃至8列目の演算回路50においても、それぞれデータとF172乃至F177との演算を行い、得られたデータを演算回路50に出力する。同時に、データ「81」が保持された9列目の演算回路50は、F178との演算を行う。得られたデータを8列目の演算回路50から出力されたデータ(この場合、時刻T21で行ったデータ「80」とF178の乗算データ)に加算して10列目の演算回路50に出力する。同時に、データが保持されていない10列目の演算回路50は、空のデータであるため乗算データが得られない。つまり10列目の演算回路50から出力されるデータは、9列目の演算回路50から出力されたデータ(この場合、時刻T21で行ったデータ「81」とF179の乗算データ)のままとなる。
時刻T22乃至時刻T28においても、コンテキスト信号の切り替えにより、コンテキスト「13」乃至「19」として、下記演算回路50で乗算するための重みデータをセットし、保持しているデータと重みデータ群との演算を行い、演算回路50に出力することを行う。
図25(B)は時刻T29での演算回路50に保持された入力データを可視化した図である。時刻T29では、コンテキスト信号の切り替えにより、コンテキスト「20」として、下記演算回路50で乗算するための重みデータ群を図25(B)に図示するようにセットする。
例えば1行目の演算回路50での動作に着目して説明すると、データ「73」が保持された1列目の演算回路50は、F172との演算を行う。得られたデータを10列目の演算回路50から出力されたデータ(この場合データ「74」乃至「81」とF171、F173乃至F180との組み合わせの積和演算)に加算して2列目の演算回路50に出力する。同時に、データ「74」が保持された2列目の演算回路50は、F173との演算を行う。得られたデータを1列目の演算回路50から出力されたデータ(この場合、データ「73」、データ「75」乃至「81」とF171、F172、F174乃至F180との組み合わせの積和演算)に加算して3列目の演算回路50に出力する。3列目乃至8列目の演算回路50においても、それぞれデータと、F174乃至F178との演算を行い、得られたデータを演算回路50に出力する。同時に、データ「81」が保持された9列目の演算回路50は、F180との演算を行う。得られたデータを8列目の演算回路50から出力されたデータ(この場合、データ「73」乃至「80」とF171乃至F179との組み合わせの積和演算)に加算して10列目の演算回路50に出力する。同時に、データが保持されていない10列目の演算回路50は、空のデータであるため乗算データが得られない。つまり10列目の演算回路50から出力されるデータは、9列目の演算回路50から出力されたデータ(この場合、データ「73」乃至「81」とF171乃至F179との組み合わせの積和演算)のままとなる。
2行目乃至9列目の演算回路50においても、それぞれF91乃至F170との演算を行い、得られたデータを演算回路50に出力する。つまり時刻T29の状態で各演算回路50には、各行に保持したデータと、各行に保持してコンテキスト信号を切り替えることで得られた重みデータ群との積和演算の結果が保持されていることになる。
図26は時刻Tread2での動作を可視化した図である。行方向の矢印は、T20乃至T29で得られた積和演算によるデータのシフト方向を表している。図26に示すように時刻Tread2では、1乃至9行目に保持された積和演算によるデータを順に加算回路41にシフトさせて、得られたデータの和を列毎に得る。得られたデータは積和演算回路40の外部にある演算ユニット23にて、ReLUによる処理を行うことで全結合したデータを得る。
本実施の形態のニューラルネットワーク回路の構成では、入力されるデータの構成、およびフィルタおよび重みデータ群の構成等に応じて動作を切り替えることで、各演算回路において乗算データおよび加算データを効率よく生成し、積和演算を効率よく行うことができる。そのため、ニューラルネットワーク回路において入力データおよび重みデータ等の増大に伴って、回路規模の大型化が問題となるが、この問題を解消することができる。つまり、同じ回路を用いて異なる処理の積和演算を行う構成とすることができるため、回路リソースの有効活用を図ることができる。
(実施の形態2)
本実施の形態は、上記実施の形態に示すニューラルネットワーク回路が組み込まれたIC(ニューラルネットワークシステムIC)の一例を示す。
上記実施の形態に示すニューラルネットワーク回路は、Siトランジスタでなる乗算回路および加算回路を有する演算回路50と、OSトランジスタを用いたメモリ回路と、1のダイに集積することができる。
図27に、ニューラルネットワーク回路を組み込んだICの一例を示す。図27に示すニューラルネットワークシステムIC7000は、リード7001及び回路部7003を有する。回路部7003には、上記実施の形態で示した各種の回路が1のダイに設けられている。回路部7003は積層構造をもち、Siトランジスタ層7031、配線層7032、OSトランジスタ層7033に大別される。OSトランジスタ層7033をSiトランジスタ層7031に積層して設けることができるため、ニューラルネットワークシステムIC7000の小型化が容易である。
図27では、ニューラルネットワークシステムIC7000のパッケージにQFP(Quad Flat Package)を適用しているが、パッケージの態様はこれに限定されない。
Siトランジスタでなる演算回路50と、OSトランジスタを有するメモリ回路は、全て、Siトランジスタ層7031、配線層7032およびOSトランジスタ層7033に形成することができる。すなわち、上記ニューラルネットワーク回路を構成する素子は、同一の製造プロセスで形成することが可能である。そのため、本実施の形態に示すICは、構成する素子が増えても製造プロセスを増やす必要がなく、上記ニューラルネットワーク回路を低コストで組み込むことができる。
(実施の形態3)
本実施の形態では、上記実施の形態に示すニューラルネットワーク回路のメモリ回路に搭載可能なOSメモリについて説明する。本実施の形態では、OSメモリの一例として、DOSRAMおよびNOSRAMについて説明する。
<<DOSRAM1400>>
図28(A)-図28(C)を参照して、DOSRAMについて説明する。
図28(A)に示すDOSRAM1400は、コントローラ1405、行回路1410、列回路1415、MC-SAアレイ1420を有する。行回路1410はデコーダ1411、ワード線ドライバ1412、列セレクタ1413、センスアンプドライバ1414を有する。列回路1415はグローバルセンスアンプアレイ1416、入出力回路1417を有する。グローバルセンスアンプアレイ1416は複数のグローバルセンスアンプ1447を有する。MC-SAアレイ1420はメモリセルアレイ1422、センスアンプアレイ1423、グローバルビット線GBLL、GBLRを有する。
<MC-SAアレイ1420>
MC-SAアレイ1420は、メモリセルアレイ1422をセンスアンプアレイ1423上に積層した積層構造をもつ。グローバルビット線GBLL、GBLRはメモリセルアレイ1422上に積層されている。DOSRAM1400では、ビット線の構造に、ローカルビット線とグローバルビット線とで階層化された階層ビット線構造が採用されている。
メモリセルアレイ1422は、N個(Nは2以上の整数)のローカルメモリセルアレイ1425<0>-425<N-1>を有する。図28(B)に示すように、ローカルメモリセルアレイ1425は、複数のメモリセル1445、複数のワード線WL、複数のビット線BLL、BLRを有する。図28(B)の例では、ローカルメモリセルアレイ1425の構造はオープンビット線型であるが、フォールデッドビット線型であってもよい。
図28(A)に示すメモリセル1445は、OSトランジスタMO45、容量素子C45を有する。OSトランジスタMO45は容量素子C45の充放電を制御する機能をもつ。OSトランジスタMO45のゲートはワード線に電気的に接続され、バックゲートは配線BGLに電気的に接続され、第1端子はビット線BLLまたはBLRに電気的に接続され、第2端子は容量素子C45の第1端子に電気的に接続されている。容量素子C45の第2端子は配線PCLに電気的に接続されている。配線CSL、BGLは電圧を供給するための電源線である。
配線BGLの電圧によって、OSトランジスタMO45の閾値電圧を変更することができる。例えば、端子B2の電圧は固定電圧(例えば、負の定電圧)であってもよいし、DOSRAM1400の動作に応じて、端子B2の電圧を変化させてもよい。
OSトランジスタMO45のバックゲートをOSトランジスタMO45のゲート、ソース、またはドレインに電気的に接続してもよい。あるいは、OSトランジスタMO45にバックゲートを設けなくてもよい。
センスアンプアレイ1423は、N個のローカルセンスアンプアレイ1426<0>-426<N-1>を有する。ローカルセンスアンプアレイ1426は、1のスイッチアレイ1444、複数のセンスアンプ1446を有する。センスアンプ1446には、ビット線対が電気的に接続されている。センスアンプ1446は、ビット線対をプリチャージする機能、ビット線対の電圧差を増幅する機能、この電圧差を保持する機能を有する。スイッチアレイ1444は、ビット線対を選択し、選択したビット線対とグローバルビット線対と間を導通状態にする機能を有する。
ここで、ビット線対とは、センスアンプによって、同時に比較される2本のビット線のことをいう。グローバルビット線対とは、グローバルセンスアンプによって、同時に比較される2本のグローバルビット線のことをいう。ビット線対を一対のビット線と呼ぶことができ、グローバルビット線対を一対のグローバルビット線と呼ぶことができる。ここでは、ビット線BLLとビット線BLRが1組のビット線対を成す。グローバルビット線GBLLとグローバルビット線GBLRとが1組のグローバルビット線対をなす。以下、ビット線対(BLL,BLR)、グローバルビット線対(GBLL,GBLR)とも表す。
<コントローラ1405>
コントローラ1405は、DOSRAM1400の動作全般を制御する機能を有する。コントローラ1405は、外部からの入力されるコマンド信号を論理演算して、動作モードを決定する機能、決定した動作モードが実行されるように、行回路1410および列回路1415の制御信号を生成する機能、外部から入力されるアドレス信号を保持する機能、内部アドレス信号を生成する機能を有する。
<行回路1410>
行回路1410は、MC-SAアレイ1420を駆動する機能を有する。デコーダ1411はアドレス信号をデコードする機能を有する。ワード線ドライバ1412は、アクセス対象行のワード線WLを選択する選択信号を生成する。
列セレクタ1413、センスアンプドライバ1414はセンスアンプアレイ1423を駆動するための回路である。列セレクタ1413は、アクセス対象列のビット線を選択するための選択信号を生成する機能をもつ。列セレクタ1413の選択信号によって、各ローカルセンスアンプアレイ1426のスイッチアレイ1444が制御される。センスアンプドライバ1414の制御信号によって、複数のローカルセンスアンプアレイ1426は独立して駆動される。
<列回路1415>
列回路1415は、データ信号WDA[31:0]の入力を制御する機能、データ信号RDA[31:0]の出力を制御する機能を有する。データ信号WDA[31:0]は書き込みデータ信号であり、データ信号RDA[31:0]は読み出しデータ信号である。
グローバルセンスアンプ1447はグローバルビット線対(GBLL,GBLR)に電気的に接続されている。グローバルセンスアンプ1447はグローバルビット線対(GBLL,GBLR)間の電圧差を増幅する機能、この電圧差を保持する機能を有する。グローバルビット線対(GBLL,GBLR)へのデータの書き込み、および読み出しは、入出力回路1417によって行われる。
DOSRAM1400の書き込み動作の概要を説明する。入出力回路1417によって、データがグローバルビット線対に書き込まれる。グローバルビット線対のデータは、グローバルセンスアンプアレイ1416によって保持される。アドレスが指定するローカルセンスアンプアレイ1426のスイッチアレイ1444によって、グローバルビット線対のデータが、対象列のビット線対に書き込まれる。ローカルセンスアンプアレイ1426は、書き込まれたデータを増幅し、保持する。指定されたローカルメモリセルアレイ1425において、行回路1410によって、対象行のワード線WLが選択され、選択行のメモリセル1445にローカルセンスアンプアレイ1426の保持データが書き込まれる。
DOSRAM1400の読み出し動作の概要を説明する。アドレス信号によって、ローカルメモリセルアレイ1425の1行が指定される。指定されたローカルメモリセルアレイ1425において、対象行のワード線WLが選択状態となり、メモリセル1445のデータがビット線に書き込まれる。ローカルセンスアンプアレイ1426によって、各列のビット線対の電圧差がデータとして検出され、かつ保持される。スイッチアレイ1444によって、ローカルセンスアンプアレイ1426の保持データの内、アドレスが指定する列のデータが、グローバルビット線対に書き込まれる。グローバルセンスアンプアレイ1416は、グローバルビット線対のデータを検出し、保持する。グローバルセンスアンプアレイ1416の保持データは入出力回路1417に出力される。以上で、読み出し動作が完了する。
容量素子C45の充放電によってデータを書き換えるため、DOSRAM1400は原理的には書き換え回数に制約はなく、かつ、低エネルギーで、データの書き込みおよび読み出しが可能である。また、メモリセル1445の回路構成が単純であるため、大容量化が容易である。よって、DOSRAM1400は大容量のデータを高頻度で書き換えるメモリ装置、例えば、画像処理に利用されるフレームメモリに好適である。
OSトランジスタMO45はOSトランジスタである。OSトランジスタはオフ電流が極めて小さいため、容量素子C45から電荷がリークすることを抑えることができるので、DOSRAM1400は保持時間がDRAMに比べて非常に長いため、リフレッシュレート頻度を低減できる。従って、DOSRAM1400はフレッシュ動作に要する電力を削減できる。
MC-SAアレイ1420が積層構造であることよって、ローカルセンスアンプアレイ1426の長さと同程度の長さにビット線を短くすることができる。ビット線を短くすることで、ビット線容量が小さくなり、メモリセル1445の保持容量を低減することができる。また、ローカルセンスアンプアレイ1426にスイッチアレイ1444を設けることで、長いビット線の本数を減らすことができる。以上の理由から、DOSRAM1400のアクセス時に駆動する負荷が低減される。
以上のことから、DOSRAM1400を上記実施の形態に示すメモリ52に用いることで、ニューラルネットワークシステムの消費電力を低減することができる。
<<NOSRAM>>
図29および図30を参照してNOSRAMについて説明する。ここでは、1のメモリセルで多値データを記憶する多値NOSRAMについて説明する。
図29に示すNOSRAM1600は、メモリセルアレイ1610、コントローラ1640、行ドライバ1650、列ドライバ1660、出力ドライバ1670を有する。
メモリセルアレイ1610は複数のメモリセル1611、複数のワード線WWL、RWL、ビット線BL、ソース線SLを有する。ワード線WWLは書き込みワード線であり、ワード線RWLは読み出しワード線である。NOSRAM1600では、1のメモリセル1611で3ビット(8値)のデータを記憶する。
コントローラ1640は、NOSRAM1600全体を統括的に制御し、データWDA[31:0]の書き込み、データRDA[31:0]の読み出しを行う。コントローラ1640は、外部からのコマンド信号(例えば、チップイネーブル信号、書き込みイネーブル信号など)を処理して、行ドライバ1650、列ドライバ1660および出力ドライバ1670の制御信号を生成する。
行ドライバ1650は、アクセスする行を選択する機能を有する。行ドライバ1650は、行デコーダ1651、およびワード線ドライバ1652を有する。
列ドライバ1660は、ソース線SLおよびビット線BLを駆動する。列ドライバ1660は、列デコーダ1661、書き込みドライバ1662、DAC(デジタル-アナログ変換回路)1663を有する。
DAC1663は3ビットのデジタルデータをアナログ電圧に変換する。DAC1663は32ビットのデータWDA[31:0]を3ビットごとに、アナログ電圧に変換する。
書き込みドライバ1662は、ソース線SLをプリチャージする機能、ソース線SLを電気的に浮遊状態にする機能、ソース線SLを選択する機能、選択されたソース線SLにDAC1663で生成した書き込み電圧を入力する機能、ビット線BLをプリチャージする機能、ビット線BLを電気的に浮遊状態にする機能等を有する。
出力ドライバ1670は、セレクタ1671、ADC(アナログ-デジタル変換回路)1672、出力バッファ1673を有する。セレクタ1671は、アクセスするソース線SLを選択し、選択されたソース線SLの電圧をADC1672に送信する。ADC1672は、アナログ電圧を3ビットのデジタルデータに変換する機能を持つ。ソース線SLの電圧はADC1672において、3ビットのデータに変換され、出力バッファ1673はADC1672から出力されるデータを保持する。
<メモリセル>
図30(A)はメモリセル1611の構成例を示す回路図である。メモリセル1611は2T型のゲインセルであり、メモリセル161はワード線WWL、RWL、ビット線BL、ソース線SL、配線BGLに電気的に接続されている。メモリセル1611は、ノードSN、OSトランジスタMO61、トランジスタMP61、容量素子C61を有する。OSトランジスタMO61は書き込みトランジスタである。トランジスタMP61は読み出しトランジスタであり、例えばpチャネル型Siトランジスタで構成される。容量素子C61はノードSNの電圧を保持するための保持容量である。ノードSNはデータの保持ノードであり、ここではトランジスタMP61のゲートに相当する。
メモリセル1611の書き込みトランジスタがOSトランジスタMO61で構成されているため、NOSRAM1600は長時間データを保持することが可能である。
図30(A)の例では、ビット線は、書き込みと読み出しで共通のビット線であるが、図30(B)に示すように、書き込みビット線WBLと、読み出しビット線RBLとを設けてもよい。
図30(C)-図30(E)にメモリセルの他の構成例を示す。図30(C)-図30(E)には、書き込み用ビット線と読み出し用ビット線を設けた例を示しているが、図30(A)のように書き込みと読み出しで共有されるビット線を設けてもよい。
図30(C)に示すメモリセル1612は、メモリセル1611の変形例であり、読み出しトランジスタをnチャネル型トランジスタ(MN61)に変更したものである。トランジスタMN61はOSトランジスタであってもよいし、Siトランジスタであってもよい。
メモリセル1611、1612において、OSトランジスタMO61はバックゲートの無いOSトランジスタであってもよい。
図30(D)に示すメモリセル1613は、3T型ゲインセルであり、ワード線WWL、RWL、ビット線WBL、RBL、ソース線SL、配線BGL、PCLに電気的に接続されている。メモリセル1613は、ノードSN、OSトランジスタMO62、トランジスタMP62、トランジスタMP63、容量素子C62を有する。OSトランジスタMO62は書き込みトランジスタである。トランジスタMP62は読み出しトランジスタであり、トランジスタMP63は選択トランジスタである。
図30(E)に示すメモリセル1614は、メモリセル1613の変形例であり、読み出しトランジスタおよび選択トランジスタをnチャネル型トランジスタ(MN62、MN63)に変更したものである。トランジスタMN62、MN63はOSトランジスタであってもよいし、Siトランジスタであってもよい。
メモリセル1611-1614に設けられるOSトランジスタは、バックゲートの無いトランジスタでもよいし、バックゲートが有るトランジスタであってもよい。
容量素子C61の充放電によってデータを書き換えるため、NOSRAM1600は原理的には書き換え回数に制約はなく、かつ、低エネルギーで、データの書き込みおよび読み出しが可能である。また、長時間データを保持することが可能であるので、リフレッシュ頻度を低減できる。よって、DOSRAM1400は大容量のデータを高頻度で書き換えるメモリ装置、例えば、画像処理に利用されるフレームメモリに好適である。
NOSRAM1600を上記実施の形態に示すメモリ52に用いることで、ニューラルネットワーク回路の消費電力を低減することができる。
(本明細書等の記載に関する付記)
以上の実施の形態、及び実施の形態における各構成の説明について、以下に付記する。
各実施の形態に示す構成は、他の実施の形態に示す構成と適宜組み合わせて、本発明の一態様とすることができる。また、1つの実施の形態の中に、複数の構成例が示される場合は、互いに構成例を適宜組み合わせることが可能である。
なお、ある一つの実施の形態の中で述べる内容(一部の内容でもよい)は、その実施の形態で述べる別の内容(一部の内容でもよい)、及び/又は、一つ若しくは複数の別の実施の形態で述べる内容(一部の内容でもよい)に対して、適用、組み合わせ、又は置き換えなどを行うことが出来る。
なお、実施の形態の中で述べる内容とは、各々の実施の形態において、様々な図を用いて述べる内容、又は明細書に記載される文章を用いて述べる内容のことである。
なお、ある一つの実施の形態において述べる図(一部でもよい)は、その図の別の部分、その実施の形態において述べる別の図(一部でもよい)、及び/又は、一つ若しくは複数の別の実施の形態において述べる図(一部でもよい)に対して、組み合わせることにより、さらに多くの図を構成させることが出来る。
また本明細書等において、ブロック図では、構成要素を機能毎に分類し、互いに独立したブロックとして示している。しかしながら実際の回路等においては、構成要素を機能毎に切り分けることが難しく、一つの回路に複数の機能が係わる場合や、複数の回路にわたって一つの機能が関わる場合があり得る。そのため、ブロック図のブロックは、明細書で説明した構成要素に限定されず、状況に応じて適切に言い換えることができる。
また、図面において、大きさ、層の厚さ、又は領域は、説明の便宜上任意の大きさに示したものである。よって、必ずしもそのスケールに限定されない。なお図面は明確性を期すために模式的に示したものであり、図面に示す形状又は値などに限定されない。例えば、ノイズによる信号、電圧、若しくは電流のばらつき、又は、タイミングのずれによる信号、電圧、若しくは電流のばらつきなどを含むことが可能である。
本明細書等において、トランジスタの接続関係を説明する際、ソースとドレインとの一方を、「ソース又はドレインの一方」(又は第1電極、又は第1端子)と表記し、ソースとドレインとの他方を「ソース又はドレインの他方」(又は第2電極、又は第2端子)と表記している。これは、トランジスタのソースとドレインは、トランジスタの構造又は動作条件等によって変わるためである。なおトランジスタのソースとドレインの呼称については、ソース(ドレイン)端子や、ソース(ドレイン)電極等、状況に応じて適切に言い換えることができる。
また、本明細書等において「電極」や「配線」の用語は、これらの構成要素を機能的に限定するものではない。例えば、「電極」は「配線」の一部として用いられることがあり、その逆もまた同様である。さらに、「電極」や「配線」の用語は、複数の「電極」や「配線」が一体となって形成されている場合なども含む。
また、本明細書等において、電圧と電位は、適宜言い換えることができる。電圧は、基準となる電位からの電位差のことであり、例えば基準となる電位をグラウンド電圧(接地電圧)とすると、電圧を電位に言い換えることができる。グラウンド電位は必ずしも0Vを意味するとは限らない。なお電位は相対的なものであり、基準となる電位によっては、配線等に与える電位を変化させる場合がある。
なお本明細書等において、「膜」、「層」などの語句は、場合によっては、または、状況に応じて、互いに入れ替えることが可能である。例えば、「導電層」という用語を、「導電膜」という用語に変更することが可能な場合がある。または、例えば、「絶縁膜」という用語を、「絶縁層」という用語に変更することが可能な場合がある。
本明細書等において、スイッチとは、導通状態(オン状態)、または、非導通状態(オフ状態)になり、電流を流すか流さないかを制御する機能を有するものをいう。または、スイッチとは、電流を流す経路を選択して切り替える機能を有するものをいう。
一例としては、電気的スイッチ又は機械的なスイッチなどを用いることができる。つまり、スイッチは、電流を制御できるものであればよく、特定のものに限定されない。
電気的なスイッチの一例としては、トランジスタ(例えば、バイポーラトランジスタ、MOSトランジスタなど)、ダイオード(例えば、PNダイオード、PINダイオード、ショットキーダイオード、MIM(Metal Insulator Metal)ダイオード、MIS(Metal Insulator Semiconductor)ダイオード、ダイオード接続のトランジスタなど)、又はこれらを組み合わせた論理回路などがある。
なお、スイッチとしてトランジスタを用いる場合、トランジスタの「導通状態」とは、トランジスタのソースとドレインが電気的に短絡されているとみなせる状態をいう。また、トランジスタの「非導通状態」とは、トランジスタのソースとドレインが電気的に遮断されているとみなせる状態をいう。なおトランジスタを単なるスイッチとして動作させる場合には、トランジスタの極性(導電型)は特に限定されない。
機械的なスイッチの一例としては、デジタルマイクロミラーデバイス(DMD)のように、MEMS(マイクロ・エレクトロ・メカニカル・システム)技術を用いたスイッチがある。そのスイッチは、機械的に動かすことが可能な電極を有し、その電極が動くことによって、導通と非導通とを制御して動作する。
本明細書等において、チャネル長とは、例えば、トランジスタの上面図において、半導体(またはトランジスタがオン状態のときに半導体の中で電流の流れる部分)とゲートとが重なる領域、またはチャネルが形成される領域における、ソースとドレインとの間の距離をいう。
本明細書等において、チャネル幅とは、例えば、半導体(またはトランジスタがオン状態のときに半導体の中で電流の流れる部分)とゲート電極とが重なる領域、またはチャネルが形成される領域における、ソースとドレインとが向かい合っている部分の長さをいう。
本明細書等において、AとBとが接続されている、とは、AとBとが直接接続されているものの他、電気的に接続されているものを含むものとする。ここで、AとBとが電気的に接続されているとは、AとBとの間で、何らかの電気的作用を有する対象物が存在するとき、AとBとの電気信号の授受を可能とするものをいう。