(57)【要約】【課題】より信頼性の高いニューラルネットワークの演算を行うに際し、消費電力を低減しつつ、回路面積を削減することができるようにする。【解決手段】演算処理装置は、ニューラルネットワークの演算において、当該演算に用いる重み係数と入力データの一部の特定のビットを、特定のビット以外の残りのビットよりも冗長性が多くなるように冗長化することで、より信頼性の高いニューラルネットワークの演算を行うに際し、消費電力を低減しつつ、回路面積を削減することができる。本技術は、例えば、ニューラルネットワークの演算を行う演算処理装置に適用することができる。【選択図】図８
2017211735.tif 000002
【特許請求の範囲】
【請求項１】
ニューラルネットワークの演算を行う演算処理部を備え、
前記ニューラルネットワークの演算において、当該演算に用いる重み係数と入力データの一部の特定のビットを、前記特定のビット以外の残りのビットよりも冗長性が多くなるように冗長化する
演算処理装置。
【請求項２】
前記ニューラルネットワークの演算において、前記重み係数と前記入力データのビットのうち、前記特定のビットのみを冗長化する
請求項１に記載の演算処理装置。
【請求項３】
前記ニューラルネットワークの演算において、前記重み係数と前記入力データのビットのうち、上位ビットのみを冗長化する
請求項２に記載の演算処理装置。
【請求項４】
前記重み係数と前記入力データのデータ形式は、固定小数点の形式である
請求項３に記載の演算処理装置。
【請求項５】
前記重み係数と前記入力データのデータ形式は、浮動小数点の形式である
請求項３に記載の演算処理装置。
【請求項６】
前記重み係数と前記入力データの一部の特定のビットに対し、誤り訂正符号への符号化又は復号を行う誤り訂正部をさらに備える
請求項１に記載の演算処理装置。
【請求項７】
前記演算処理部により処理されるデータを記憶する第１のメモリ部と、
前記重み係数を記憶する第２のメモリ部と
をさらに備え、
前記誤り訂正部は、
前記演算処理部と前記第１のメモリ部との間に設けられる第１の誤り訂正部と、
前記演算処理部と前記第２のメモリ部との間に設けられる第２の誤り訂正部と
からなる
請求項６に記載の演算処理装置。
【請求項８】
前記誤り訂正部は、多重化されている
請求項６に記載の演算処理装置。
【請求項９】
前記演算処理部は、
前記重み係数と前記入力データの積和演算を行う演算器と、
前記演算器から得られるデータに対し多数決演算を行い、その結果得られるデータを出力する多数決器と
を有する
請求項１に記載の演算処理装置。
【請求項１０】
前記演算器と前記多数決器は、多重化されている
請求項９に記載の演算処理装置。
【請求項１１】
ニューラルネットワークの演算を行う演算処理部を備える演算処理装置の演算処理方法において、
前記演算処理部が、
前記ニューラルネットワークの演算において、当該演算に用いる重み係数と入力データの一部の特定のビットを、前記特定のビット以外の残りのビットよりも冗長性が多くなるように冗長化されたデータを処理する
ステップを含む演算処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本技術は、演算処理装置、及び、演算処理方法に関し、特に、より信頼性の高いニューラルネットワークの演算を行うに際し、消費電力を低減しつつ、回路面積を削減することができるようにした演算処理装置、及び、演算処理方法に関する。
【背景技術】
【０００２】
近年、ニューラルネットワークに関する研究や開発が盛んに行われている。ニューラルネットワークに関する技術としては、例えば、特許文献１が知られている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２０１５−２１０７０９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
ところで、ニューラルネットワークの演算を行う演算処理装置では、その演算の信頼性を高めることが求められるが、多くの演算器が用いられているため、単純に多重化した場合には、消費電力と回路面積が大きくなってしまう。そのため、より信頼性の高いニューラルネットワークの演算を行うに際し、消費電力を低減しつつ、回路面積を削減できるようにすることが望まれていた。
【０００５】
本技術はこのような状況に鑑みてなされたものであり、より信頼性の高いニューラルネットワークの演算を行うに際し、消費電力を低減しつつ、回路面積を削減することができるようにするものである。
【課題を解決するための手段】
【０００６】
本技術の一側面の演算処理装置は、ニューラルネットワークの演算を行う演算処理部を備え、前記ニューラルネットワークの演算において、当該演算に用いる重み係数と入力データの一部の特定のビットを、前記特定のビット以外の残りのビットよりも冗長性が多くなるように冗長化する演算処理装置である。
【０００７】
演算処理装置は、独立した装置であってもよいし、演算処理装置の演算処理を行うブロックであってもよい。本技術の一側面の演算処理方法は、上述した本技術の一側面の演算処理装置に対応する演算処理方法である。
【０００８】
本技術の一側面の演算処理装置及び演算処理方法においては、ニューラルネットワークの演算が行われる。そして、前記ニューラルネットワークの演算において、当該演算に用いる重み係数と入力データの一部の特定のビットが、前記特定のビット以外の残りのビットよりも冗長性が多くなるように冗長化される。
【発明の効果】
【０００９】
本技術の一側面によれば、より信頼性の高いニューラルネットワークの演算を行うに際し、消費電力を低減しつつ、回路面積を削減することができる。
【００１０】
なお、ここに記載された効果は必ずしも限定されるものではなく、本開示中に記載されたいずれかの効果であってもよい。
【図面の簡単な説明】
【００１１】
【図１】３重系多数決システムの構成例を示す図である。
【図２】多数決器の論理回路の構成例を示す図である。
【図３】複数の多数決器を設けた場合の構成例を示す図である。
【図４】１の補数の乗算のデータで、上位ビットの冗長化を行わない場合の演算の例を示す図である。
【図５】１の補数の乗算のデータで、上位ビットの冗長化を行う場合の演算の例を示す図である。
【図６】１の補数の乗算のデータで、上位ビットの冗長化を行い、さらに多数決器の冗長化を行う場合の例を示す図である。
【図７】２の補数の累加算のデータで、上位ビットの冗長化を行う場合の演算の例を示す図である。
【図８】本技術を適用した演算処理装置の構成例を示す図である。
【図９】畳み込みニューラルネットワークの概念的な構成例を示す図である。
【図１０】畳み込み演算部の構成例を示す図である。
【図１１】固定小数点形式と浮動小数点形式を説明する図である。
【図１２】コンピュータの構成例を示す図である。
【発明を実施するための形態】
【００１２】
以下、図面を参照しながら本技術の実施の形態について説明する。なお、説明は以下の順序で行うものとする。
【００１３】
１．本技術の概要
２．ニューラルネットワークの演算例
３．システムの構成
４．変形例
５．コンピュータの構成
【００１４】
＜１．本技術の概要＞
【００１５】
放射線などによる単一の回路に発生した故障をマスクするための技術として、３重系多数決システム（TMR:Triple Modular Redundancy）が用いられることが多い。３重系多数決システムとは、システムの信頼性の向上を目的として、モジュール（ユニット）を３重化する冗長構成方式である。
【００１６】
この３重系多数決システムにおいては、同一の機能のユニットを３つ搭載し、それらの処理結果を、多数決素子（VOTER）に通すことで、処理結果のうち、２つ以上が一致しているものが選択されるようにする。これにより、単一の回路に発生した故障がマスクされ、外部からは故障がないように見える。
【００１７】
図１には、３重系多数決システムの構成例を示している。図１においては、同一の機能を有する３つのユニットとして、ユニット（UNIT0）９０−１、ユニット（UNIT1）９０−２、及びユニット（UNIT2）９０−３が設けられている。各ユニットは、同一の入力に対して処理を行い、その処理結果を、多数決器（VOTER）１００に出力する。
【００１８】
多数決器１００は、ユニット９０−１乃至９０−３から入力される３つの処理結果に対し、多数決演算を行うことで、２つ以上が一致している処理結果を選択し、それを出力結果として出力する。これにより、単一の回路に発生した故障をマスクすることが可能となる。
【００１９】
なお、ここでは、３重系多数決システムを一例に説明したが、一般的には、２ｍ＋１重化の多数決システムでは、ｍ個の故障をマスクすることが可能となる。ここで、ｍは、１以上の整数である。また、ｍ＋１個以上の故障をマスクすることはできないが、故障の検知はできるため、故障を検知した場合には出力結果を使用しないようにすることも可能である。
【００２０】
ところで、ニューラルネットワークの演算を行う演算処理装置においても、その演算の信頼性を高めることが求められている。しかしながら、ニューラルネットワークの演算においても同様に、全ビットに対し、３重系多数決システムを適用すると、その回路面積や消費電力が大きくなってしまう。例えば、全ビットを多重化すると、その多重度に比例して増加して、回路面積や消費電力が３倍以上となることが想定される。
【００２１】
また、ニューラルネットワークの演算を行う演算処理装置では、加算器や乗算器等の演算器が多く用いられるため、単純な多重化は、コストとして無視することはできない。そのため、より信頼性の高いニューラルネットワークの演算を行うに際し、消費電力を低減しつつ、回路面積を削減できるようにすることが望まれていた。
【００２２】
そこで、本技術では、ニューラルネットワークの演算において、データの全ビットのうちの一部の特定のビットを、当該特定のビット以外の残りのビットよりも冗長性が多くなるように冗長化することで、より信頼性の高いニューラルネットワークの演算を行うに際し、消費電力を低減しつつ、回路面積を削減することができるようにする。
【００２３】
（多数決器の構成例）
図２は、本技術で用いられる多数決器の論理回路の構成例を示す図である。
【００２４】
図２において、多数決器１００は、ANDゲート１０１−１、ANDゲート１０１−２、ANDゲート１０１−３、及びORゲート１０２から構成される。多数決器１００には、その前段に設けられる、同一の機能を有する３つのユニットから、入力データin_0[n]，入力データin_1[n]，入力データin_2[n]がそれぞれ入力される。なお、ｎは、１以上の整数であって、多数決器１００では、同一の番号ｎとなるデータが同時に処理される。
【００２５】
ANDゲート１０１−１には、入力データin_0[n]と入力データin_1[n]が入力される。ANDゲート１０１−１は、２つの入力データの論理積を演算し、その結果得られるデータ（例えば２つの入力の最小値を示すデータ）を、ORゲート１０２に出力する。
【００２６】
同様にして、ANDゲート１０１−２は、入力データin_0[n]と入力データin_2[n]の論理積を演算し、その結果得られるデータを、ORゲート１０２に出力する。また、ANDゲート１０１−３は、入力データin_1[n]と入力データin_2[n]の論理積を演算し、その結果得られるデータを、ORゲート１０２に出力する。
【００２７】
ORゲート１０２には、ANDゲート１０１−１乃至１０１−３からのデータが入力される。ORゲート１０２は、入力されるデータの論理和を演算し、その結果得られる出力データout[n]（例えば３つの入力の最大値を示すデータ）を、後段に出力する。
【００２８】
以上のように、多数決器１００においては、ANDゲート１０１−１乃至１０１−３とORゲート１０２によって、論理演算が行われ、３つの入力データ（in_0[n]，in_1[n]，in_2[n]）のうち、２つ以上が一致している入力データ（多数派の値を示すデータ）が選択され、出力データ（out[n]）として、出力される。これにより、単一の回路に発生した故障をマスクすることができる。
【００２９】
また、図３に示すように、多数決器１００を複数設けて、多数決器１００を多重化するようにしてもよい。すなわち、単一の多数決器１００を設けた場合には、多数決器１００が単一の障害点になる恐れがあるため、複数の多数決器１００を設けることで、より確実に、故障をマスクすることができるようにしている。図３には、多数決器１００−１乃至１００−７を設けて、多数決器１００を７重にした例示している。
【００３０】
＜２．ニューラルネットワークの演算例＞
【００３１】
次に、図４乃至図７を参照して、本技術を適用したニューラルネットワークの演算方法の例について説明する。なお、ここでは、比較のため、図４を参照して、特定のビット（上位ビット）を冗長化していない場合について説明してから、図５乃至図７を参照して、特定のビット（上位ビット）を冗長化した場合について説明する。
【００３２】
（上位ビットの冗長化を行わない場合の例）
図４は、１の補数の乗算のデータで、上位ビットの冗長化を行わない場合の演算の例を示す図である。
【００３３】
図４においては、X，Yのデータが、ニューラルネットワークの演算で用いられるが、例えば、これらのデータのうち、Xを、入力データとし、Yを、重み係数とすることができる。なお、ここでは、入力データ(X)と重み係数（Y）のデータ形式が、固定小数点の形式となる場合を例に説明する。このデータ形式については、後述する図５乃至図７においても同様とする。
【００３４】
ここで、15ビットのデータであるX[14:0]は、上位6ビットのX[14:9]と、下位9ビットのX[8:0]により表すことができる。また、15ビットのデータであるY[14:0]は、上位6ビットのY[14:9]と、下位9ビットのY[8:0]により表すことができる。さらに、1ビットのデータであるX[15]とY[15]は、正負符号を示す最上位の1ビットを表している。
【００３５】
乗算器１１１において、X[14:0]とY[14:0]の上位ビット同士を乗算することで、12ビットのX[14:9]・Y[14:9]が得られる。そして、乗算器１１１で得られる演算結果に対し、その下位ビットに、すべて0の18ビット（18'b0）を結合することで、30ビットのデータ（X[14:9]・Y[14:9]と、18'b0との結合）が得られる。
【００３６】
乗算器１１２において、X[14:0]の下位ビットと、Y[14:0]の上位ビットとを乗算することで、X[8:0]・Y[14:9]が得られる。また、乗算器１１３において、Y[14:0]の下位ビットと、X[14:0]の上位ビットとを乗算することで、Y[8:0]・X[14:9]が得られる。
【００３７】
そして、加算器１１４において、乗算器１１２で得られる演算結果と、乗算器１１３で得られる演算結果とを加算することで、X[8:0]・Y[14:9] + Y[8:0]・X[14:9]が得られる。また、ここで得られる16ビットのデータに対し、その下位ビットに、すべて0の9ビット（9'b0）を結合することで、25ビットのデータ（X[8:0]・Y[14:9] + Y[8:0]・X[14:9]と、9'b0との結合）が得られる。
【００３８】
乗算器１１５において、X[14:0]とY[14:0]の下位ビット同士を乗算することで、18ビットのデータとして、X[8:0]・Y[8:0]が得られる。
【００３９】
加算器１１６においては、乗算器１１１の演算で得られる30ビットのデータと、乗算器１１２乃至加算器１１４の演算で得られる25ビットのデータと、乗算器１１５の演算で得られる18ビットのデータとが加算される。その結果、31ビットのデータとして、Z[30:0]が得られる。
【００４０】
また、図４においては、論理演算器１２１において、最上位ビット同士であるX[15]とY[15]との排他的論理和（EXOR）が演算されることで、1ビットのデータとして、正負符号を示すZ[31]が得られる。
【００４１】
ここで、上述した演算の関係を数式で表せば、下記の式（１）と式（２）により表すことができる。ただし、式（１）は、図４の乗算器１１１乃至加算器１１６で行われる積和演算を表している。また、式（２）は、図４の論理演算器１２１で行われる論理演算を表している。
【００４２】
Z[30:0] = X[14:0]・Y[14:0]
= (X[14:9]・2^9 + X[8:0]) (Y[14:9]・2^9 + Y[8:0])
= X[14:9]・Y[14:9]・2^18 + (X[8:0]・Y[14:9]+ Y[8:0]・X[14:9])・2^9 + X[8:0]・Y[8:0]      ・・・（１）
【００４３】
X[31] exor Y[31]      ・・・（２）
【００４４】
ただし、式（１）において、「・」は、乗算を意味し、「^」は、べき乗を表している。また、式（２）において、「exor」は、排他的論理和（EXOR）を意味している。
【００４５】
以上のように、ニューラルネットワークの演算では、例えば、入力データ（X）と重み係数（Y）とが積和演算され、その結果得られるデータ（Z）が出力されることになる。
【００４６】
（上位ビットの冗長化を行う場合の例）
図５は、１の補数の乗算のデータで、上位ビットの冗長化を行う場合の演算の例を示す図である。
【００４７】
ただし、図５の構成において、図４の構成と同様の箇所には、同一の符号が付してあり、その説明は適宜省略するものとする。なお、図５の構成において、図４の構成に対し、追加された部分については、太線で表している。
【００４８】
すなわち、図５の構成においては、図４の構成と比べて、乗算器１１１、乗算器１１２、乗算器１１３、加算器１１４、乗算器１１５、及び加算器１１６のほかに、乗算器１３１、加算器１３２、乗算器１３３、加算器１３４、及び多数決器（VOTER）１００Ａが追加で設けられている。なお、多数決器１００Ａは、図２に示した構成を有している。
【００４９】
また、図５の構成においては、図４の構成と比べて、論理演算器１２１のほかに、論理演算器１４１、論理演算器１４２、及び多数決器（VOTER）１００Ｂが追加で設けられている。なお、多数決器１００Ｂは、図２に示した構成を有している。
【００５０】
また、図５の構成においては、図４の構成と同様に、X，Yのデータが、ニューラルネットワークの演算で用いられるが、例えば、これらのデータのうち、Xを、入力データとし、Yを、重み係数とすることができる。
【００５１】
ここで、図５においては、15ビットのデータであるX[14:0]の上位ビットが冗長化されるため、上位ビットであるX[14:9]が３つ入力される。同様に、15ビットのデータであるY[14:0]の上位ビットが冗長化されるため、上位ビットであるY[14:9]が３つ入力される。また、最上位ビットを表すX[15]とY[15]についても冗長化され、X[15]とY[15]がそれぞれ３つずつ入力される。
【００５２】
図５においては、上述したように、乗算器１１１乃至加算器１１６によって、X[14:0]（上位ビット：X[14:9]、下位ビット：X[8:0]）と、Y[14:0]（上位ビット：Y[14:9]、下位ビット：Y[8:0]）に対する演算が行われることで、31ビットのデータが得られる。この31ビットのデータは、多数決器１００Ａに入力される。
【００５３】
また、乗算器１３１において、冗長化された上位ビット同士であるX[14:9]とY[14:9]を乗算することで、X[14:9]・Y[14:9]が得られる。また、乗算器１３１で得られる演算結果に対し、その下位ビットに、すべて0の18ビット（18'b0）を結合することで、30ビットのデータ（X[14:9]・Y[14:9]と、18'b0との結合）が得られる。
【００５４】
そして、加算器１３２において、乗算器１３１の演算で得られる30ビットのデータと、乗算器１１２乃至加算器１１４の演算で得られる25ビットのデータと、乗算器１１５の演算で得られる18ビットのデータとが加算される。その結果得られる、31ビットのデータは、多数決器１００Ａに入力される。
【００５５】
同様にして、乗算器１３３において、冗長化された他の上位ビット同士であるX[14:9]とY[14:9]を乗算することで、X[14:9]・Y[14:9]が得られる。また、乗算器１３３で得られる演算結果に対し、その下位ビットに、すべて0の18ビット（18'b0）を結合することで、30ビットのデータ（X[14:9]・Y[14:9]と、18'b0との結合）が得られる。
【００５６】
そして、加算器１３４において、乗算器１３３の演算で得られる30ビットのデータと、乗算器１１２乃至加算器１１４の演算で得られる25ビットのデータと、乗算器１１５の演算で得られる18ビットのデータとが加算される。その結果得られる、31ビットのデータは、多数決器１００Ａに入力される。
【００５７】
多数決器１００Ａには、加算器１１６の演算で得られる31ビットのデータと、加算器１３２の演算で得られる31ビットのデータと、加算器１３４の演算で得られる31ビットのデータが入力される。多数決器１００Ａは、多数決演算を行うことで、入力された３つのデータのうち、２つ以上が一致しているデータを選択し、その結果得られる31ビットのデータ（Z[30:0]）を出力する。
【００５８】
図５においては、上述したように、論理演算器１２１によって、最上位ビット同士であるX[15]とY[15]との排他的論理和（EXOR）が演算されることで、1ビットのデータが得られる。この1ビットのデータは、多数決器１００Ｂに入力される。
【００５９】
また、論理演算器１４１において、冗長化された最上位ビット同士であるX[15]とY[15]との排他的論理和が演算され、その結果得られる1ビットのデータが、多数決器１００Ｂに入力される。同様にして、論理演算器１４２において、冗長化された他の最上位ビット同士であるX[15]とY[15]との排他的論理和が演算され、その結果得られる1ビットのデータが、多数決器１００Ｂに入力される。
【００６０】
多数決器１００Ｂには、論理演算器１２１の演算で得られる1ビットのデータと、論理演算器１４１の演算で得られる1ビットのデータと、論理演算器１４２の演算で得られる1ビットのデータが入力される。多数決器１００Ｂは、多数決演算を行うことで、入力された３つのデータのうち、２つ以上が一致しているデータを選択し、その結果得られる、正負符号を示す1ビットのZ[31]を出力する。
【００６１】
以上のように、例えば、入力データ（X）と重み係数（Y）の上位ビットの冗長化を行った場合、ニューラルネットワークの演算では、入力データ（X）と重み係数（Y）とが積和演算され、その結果得られるデータ（Z）が、多数決器１００を介して出力されるが、上位ビットが冗長化されているため、より信頼性の高い演算を行うことができる。
【００６２】
また、ニューラルネットワークの演算では、加算器や乗算器等の演算器が多く用いられるため、単純な多重化を適用すると、消費電力や回路面積等のコストが非常に大きなものとなるが、図５に示した演算の例では、全ビットのうち上位ビットのみを冗長化しているため、全てのビットを冗長化した場合と比べて、消費電力を低減しつつ、回路面積を削減することができる。
【００６３】
ここで、本技術の発明者によるシミュレーションによれば、例えば、16ビットのうち、上位の5ビットを３重に冗長化することで、全部のビットを３重に冗長化した場合と比べて、回路面積を約半分の大きさに抑えることができるという結果が得られた。また、この結果を数式で表せば、下記の式（３）のように表すことができる。
【００６４】
(16 + 2 × 5) / (16 × 3) = 0.54       ・・・（３）
【００６５】
なお、図５に示した演算の例において、冗長化の対象となる特定のビットとして、上位ビットを選択している理由であるが、上位ビットは、下位ビット等の他のビットと比べて、重要なビットである可能性が高いことや、正負の符号を示しているビットである可能性があること、などによるものである。
【００６６】
すなわち、冗長化の対象となるビットは、ここでは、上位ビットとして説明したが、上位ビットに限らず、重要なビットであれば、他のビットでもよい。また、より重要なビットが、それ以外の他のビットよりも冗長化されていればよく、重要なビット以外の他のビットが冗長化されていてもよい。冗長化の対象のビット数も任意である。また、ビット列の順番を並び代えて、所定のビットを、冗長化してもよい。例えば、ビット列の順番を並び代えて、下位のビットを冗長化するようにしてもよい。
【００６７】
（多数決器を多重化した場合の例）
図６は、１の補数の乗算のデータで、上位ビットの冗長化を行い、さらに多数決器の多重化（冗長化）を行う場合の例を示す図である。
【００６８】
ただし、図６の構成において、図４及び図５の構成と同様の箇所には、同一の符号が付してあり、その説明は適宜省略するものとする。なお、図６の構成において、図５の構成に対し、追加された部分については、太線で表している。
【００６９】
すなわち、図６の構成においては、図５の構成と比べて、乗算器１１１、乗算器１１２、乗算器１１３、加算器１１４、乗算器１１５、乗算器１３１、加算器１３２、乗算器１３３、加算器１３４、及び多数決器１００Ａ（１００Ａ−１）のほかに、多数決器（VOTER）１００Ａ−２及び多数決器（VOTER）１００Ａ−３が追加で設けられている。なお、多数決器１００Ａ−１乃至１００Ａ−３は、図２に示した構成を有している。すなわち、図６の構成では、図３に示したように、多数決器１００が多重化されている。
【００７０】
また、図６の構成においては、図５の構成と比べて、論理演算器１２１、論理演算器１４１、論理演算器１４２、及び多数決器１００Ｂ（１００Ｂ−１）のほかに、多数決器（VOTER）１００Ｂ−２及び多数決器（VOTER）１００Ｂ−３が追加で設けられている。なお、多数決器１００Ｂ−１乃至１００Ｂ−３は、図２に示した構成を有している。
【００７１】
また、図６の構成においては、図４及び図５の構成と同様に、X，Yのデータが、ニューラルネットワークの演算で用いられるが、例えば、これらのデータのうち、Xを、入力データとし、Yを、重み係数とすることができる。
【００７２】
図６においては、上述したように、多数決器１００Ａ−１によって、加算器１１６、加算器１３２、及び加算器１３４から入力されたデータに基づいて、多数決演算が行われ、その結果得られる31ビットのZ[30:0]が出力される。
【００７３】
また、多数決器１００Ａ−２には、加算器１１６、加算器１３２、及び加算器１３４のそれぞれで演算されたデータが入力される。多数決器１００Ａ−２は、多数決演算を行うことで、入力された３つのデータのうち、２つ以上一致しているデータを選択し、その結果得られる13ビットのZ[30:18]を出力する。
【００７４】
同様にして、多数決器１００Ａ−３では、加算器１１６、加算器１３２、及び加算器１３４のそれぞれで演算されたデータが入力され、入力されたデータによる多数決演算が行われ、その結果得られる13ビットのZ[30:18]が出力される。
【００７５】
図６においては、上述したように、多数決器１００Ｂ−１によって、論理演算器１２１、論理演算器１４１、及び論理演算器１４２から入力された1ビットのデータに基づいて、多数決演算が行われ、その結果得られる正負符号を示す1ビットのZ[31]が出力される。
【００７６】
また、多数決器１００Ｂ−２には、論理演算器１２１、論理演算器１４１、及び論理演算器１４２のそれぞれで演算された1ビットのデータが入力される。多数決器１００Ｂ−２は、多数決演算を行うことで、入力された３つのデータのうち、２つ以上一致しているデータを選択し、その結果得られる正負符号を示す1ビットのZ[31]を出力する。
【００７７】
同様にして、多数決器１００Ｂ−３では、論理演算器１２１、論理演算器１４１、及び論理演算器１４２のそれぞれで演算された1ビットのデータが入力され、入力されたデータによる多数決演算が行われ、その結果得られる正負符号を示す1ビットのZ[31]が出力される。
【００７８】
以上のように、例えば、入力データ（X）と重み係数（Y）の上位ビットの冗長化を行い、さらに、多数決器１００の多重化（冗長化）を行った場合、ニューラルネットワークの演算では、入力データ（X）と重み係数（Y）とが積和演算され、その結果得られるデータ（Z）が、多数決器１００を介して出力されるが、上位ビットと多数化器１００が冗長化されているため、より信頼性の高い演算を行うことができる。
【００７９】
また、ニューラルネットワークの演算では、加算器や乗算器等の演算器が多く用いられるため、単純な多重化を適用すると、消費電力や回路面積等のコストが非常に大きなものとなるが、図６に示した演算の例では、全ビットのうち上位ビットのみを冗長化しているため、全てのビットを冗長化した場合と比べて、消費電力を低減しつつ、回路面積を削減することができる。
【００８０】
（２の補数の累加算のデータで、上位ビットの冗長化を行う場合の例）
図７は、２の補数の累加算のデータで、上位ビットの冗長化を行う場合の演算の例を示す図である。
【００８１】
ここで、図７においては、31ビットのデータであるZ[30:0]の上位ビットが冗長化されるため、３つのZ[30:18]がそれぞれ入力される。同様に、最上位の1ビットのデータであるZ[31]についても冗長化され、３つのZ[31]がそれぞれ入力される。
【００８２】
図７において、変換器１５１には、１の補数のデータとして、Z[30:0]の上位ビットであるZ[30:18]と、下位ビットであるZ[17:0]と、正負符号を示す最上位ビットとしてのZ[31]が入力される。変換器１５１は、入力された１の補数のデータを、２の補数のデータへ変換し、加算器１５２に出力する。
【００８３】
加算器１５２は、変換器１５１により変換された２の補数のデータと、後段からの２の補数のデータとを加算（累加算）し、その結果得られる２の補数の累加算のデータとして、AC[31:0]（AC[31:18]とAC[17:0]との結合）を出力する。これにより得られる２の補数の累加算のデータ（AC[31:0]）は、多数決器１００に入力される。
【００８４】
変換器１５３には、１の補数のデータとして、冗長化されたZ[30:18]とZ[31]のほかに、Z[30:0]の下位ビットであるZ[17:0]が入力される。変換器１５３は、入力された１の補数のデータを、２の補数のデータに変換し、加算器１５４に出力する。
【００８５】
加算器１５４は、変換器１５３により変換された２の補数のデータと、後段からのデータ（AC[31:18]とAC[17:0]との結合）とを加算（累加算）し、その結果得られる２の補数の累加算のデータ（AC[31:18]）を出力する。そして、加算器１５４の演算で得られるデータ（AC[31:18]）と、加算器１５２の演算で得られるデータ（AC[17:0]）から得られる２の補数の累加算データ（AC[31:18]とAC[17:0]とを結合したAC[31:0]）が、多数決器１００に入力される。
【００８６】
変換器１５５には、１の補数のデータとして、冗長化された他のZ[30:18]とZ[31]のほかに、Z[30:0]の下位ビットであるZ[17:0]が入力される。変換器１５５は、入力された１の補数のデータを、２の補数のデータに変換し、加算器１５６に出力する。
【００８７】
加算器１５６は、変換器１５５により変換された２の補数のデータと、後段からのデータ（AC[31:18]とAC[17:0]との結合）とを加算（累加算）し、その結果得られる２の補数の累加算のデータ（AC[31:18]）を出力する。そして、加算器１５６の演算で得られるデータ（AC[31:18]）と、加算器１５２の演算で得られるデータ（AC[17:0]）から得られる２の補数の累加算データ（AC[31:18]とAC[17:0]とを結合したAC[31:0]）が、多数決器１００に入力される。
【００８８】
多数決器１００には、加算器１５２の累加算で得られる32ビットのデータと、加算器１５４の累加算で得られる32ビットのデータと、加算器１５６の累加算で得られる32ビットのデータが入力される。多数決器１００は、多数決演算を行うことで、入力された３つのデータのうち、２つ以上が一致しているデータを選択し、その結果得られる32ビットのデータ（AC[31:0]）を出力する。
【００８９】
以上のように、２の補数の累加算のデータ（AC）の上位ビットの冗長化を行った場合、ニューラルネットワークの演算では、２の補数の累加算が行われ、その結果得られるデータ（AC）が、多数決器１００を介して出力されるが、上位ビットが冗長化されているため、より信頼性の高い演算を行うことができる。
【００９０】
また、ニューラルネットワークの演算では、加算器等の演算器が多く用いられるため、単純な多重化を適用すると、消費電力や回路面積等のコストが非常に大きなものとなるが、図７に示した演算の例では、全ビットのうち上位ビットのみを冗長化しているため、全てのビットを冗長化した場合と比べて、消費電力を低減しつつ、回路面積を削減することができる。
【００９１】
なお、図７に示した演算の例では、１の補数のデータを２の補数のデータに変換してから処理しているため、上述した１の補数のデータの演算を行う場合のように、正負の符号を考慮する必要はない。また、上述したニューラルネットワークの演算では、１の補数のデータと２の補数のデータに対する演算を一例に説明したが、他の形式のデータに対しても同様に処理することができる。
【００９２】
＜３．システムの構成＞
【００９３】
（演算処理装置の構成例）
図８は、本技術を適用した演算処理装置の構成例を示す図である。
【００９４】
演算処理装置１０は、入力されたデータに対し、ニューラルネットワークの演算を行うことが可能な機器である。演算処理装置１０は、例えば、撮像機能を備える撮像装置や、パーソナルコンピュータやサーバ等の情報処理装置、FPGA(Field Programmable Gate Array)などの電子機器である。
【００９５】
図８において、演算処理装置１０は、画像取得部１１、誤り訂正部１２、メモリコントローラ１３、外部DRAM(Dynamic Random Access Memory)１４、データバッファメモリ１５、誤り訂正部１６、画像認識ニューラルネットワーク処理部１７、係数メモリ１８、誤り訂正部１９、及びプロセッサ２０から構成される。
【００９６】
また、画像取得部１１と、誤り訂正部１２と、データバッファメモリ１５と、係数メモリ１８と、プロセッサ２０は、３重化された３重化バス２１にそれぞれ接続されている。なお、演算処理装置１０において、誤り訂正部１２、誤り訂正部１６、及び誤り訂正部１９は、それぞれ３重化されている。
【００９７】
画像取得部１１は、例えば、外部の装置などから、被写体を撮像して得られる撮像画像等の画像データを取得する。画像取得部１１により取得された画像データは、３重化バス２１を介して、誤り訂正部１２、又は、データバッファメモリ１５に供給される。
【００９８】
誤り訂正部１２には、３重化バス２１を介して、画像取得部１１により取得された画像データが供給される。なお、ここでは、対象の画像データ（全ビット同じデータ）を複製することで、その結果得られる３つの画像データが、３重化バス２１を介して、誤り訂正部１２に供給されることになる。
【００９９】
誤り訂正部１２は、画像取得部１１からの３つの画像データに対し、多数決器により多数決演算を行うことで、２つ以上が一致している画像データを選択する。なお、ここで用いられる多数決器は、上述した図２の多数決器１００と同様である。そして、誤り訂正部１２は、多数決演算により１つとされた画像データ（の全ビット）に対し、誤り訂正符号化の処理を施す。この誤り訂正符号としては、例えば、ハミング符号やリードソロモン符号などを用いることができる。
【０１００】
誤り訂正部１２により誤り訂正符号化された画像データは、メモリコントローラ１３に供給される。メモリコントローラ１３は、誤り訂正部１２からの画像データを、外部DRAM１４に書き込む。これにより、外部DRAM１４には、画像データが記憶されることになる。一方で、外部DRAM１４に記憶された画像データを読み出す場合、メモリコントローラ１３は、外部DRAM１４から画像データを読み出し、誤り訂正部１２に供給する。ただし、メモリコントローラ１３で処理されるデータは、全ビットが冗長化されている。
【０１０１】
誤り訂正部１２は、メモリコントローラ１３から供給される画像データ（誤り訂正符号化された画像データ）に対し、誤り訂正復号の処理を施す。そして、誤り訂正部１２は、誤り訂正復号された画像データ（全ビット同じデータ）を複製することで、それにより得られる３つの画像データを、３重化バス２１を介して出力する。
【０１０２】
データバッファメモリ１５には、３重化バス２１を介して、画像取得部１１により取得された画像データが供給される。データバッファメモリ１５は、画像取得部１１からの画像データをバッファリングし、誤り訂正部１６に供給する。ただし、データバッファメモリ１５で処理される画像データは、上位ビットが冗長化（３重化）されているものとする。
【０１０３】
誤り訂正部１６は、データバッファメモリ１５からの画像データ（の上位ビット）に対し、誤り訂正符号化の処理を施す。この誤り訂正符号としては、例えば、ハミング符号やリードソロモン符号などを用いることができる。誤り訂正部１６により誤り訂正符号化された画像データは、画像認識ニューラルネットワーク処理部１７に供給される。
【０１０４】
係数メモリ１８には、３重化バス２１を介して、例えばプロセッサ２０や外部の装置などから、重み係数が供給される。これにより、係数メモリ１８には、重み係数が記憶される。ただし、係数メモリ１８に記憶される重み係数（のデータ）は、上位ビットが冗長化（３重化）されているものとする。係数メモリ１８に記憶された重み係数は、誤り訂正部１９に供給される。
【０１０５】
誤り訂正部１９は、係数メモリ１８からの重み係数（の上位ビット）に対し、誤り訂正符号化の処理を施す。この誤り訂正符号としては、例えば、ハミング符号やリードソロモン符号などを用いることができる。誤り訂正部１９により誤り訂正符号化された重み係数は、画像認識ニューラルネットワーク処理部１７に供給される。
【０１０６】
画像認識ニューラルネットワーク処理部１７には、誤り訂正部１６からの画像データと、誤り訂正部１９からの重み係数が供給される。画像認識ニューラルネットワーク処理部１７は、入力データとしての画像データと、重み係数を用い、画像認識のためのニューラルネットワークの演算を行う。
【０１０７】
このニューラルネットワークの演算としては、例えば、上述した図５乃至図７に示した演算が行われる。すなわち、図５等のX，Yのデータのうち、X（入力データ）が、データバッファメモリ１５から読み出された画像データに相当し、Y（重み係数）が、係数メモリ１８から読み出された重み係数に相当することになる。そして、例えば、画像データ（X）と重み係数（Y）とを積和演算や累加算して得られるデータ（Z，AC）が、誤り訂正部１６に供給される。
【０１０８】
なお、データバッファメモリ１５から読み出された画像データ（X）と、係数メモリ１８から読み出された重み係数（Y）は、上位ビッドのみが冗長化（３重化）されているので、全てのビットを冗長化した場合と比べて、消費電力を低減し、かつ、回路面積を削減しながらも、より信頼性の高い演算を行うことが可能になることは、先に述べた通りである。
【０１０９】
誤り訂正部１６は、画像認識ニューラルネットワーク処理部１７からのデータ（誤り訂正符号化されたデータ）（の上位ビット）に対し、誤り訂正復号の処理を施す。誤り訂正部１６は、誤り訂正復号されたデータを、データバッファメモリ１５に供給する。そして、データバッファメモリ１５は、誤り訂正部１６から供給される、ニューラルネットワーク演算結果のデータを、３重化バス２１を介して出力する。
【０１１０】
なお、ここでは、画像認識ニューラルネットワーク処理部１７によるニューラルネットワークの演算の対象となるデータが、画像取得部１１により取得される画像データであると説明したが、例えば、外部DRAM１４から読み出された画像データなど、他のデータが、ニューラルネットワークの演算の対象となるようにしてもよい。
【０１１１】
プロセッサ２０は、所定の演算処理や制御処理を行う。ただし、プロセッサ２０により処理されるデータは、全ビットが冗長化されている。例えば、プロセッサ２０は、演算処理装置１０の各部の動作を制御する。
【０１１２】
演算処理装置１０は、以上のように構成される。
【０１１３】
（ニューラルネットワークの演算例）
次に、図９乃至図１０を参照して、画像認識ニューラルネットワーク処理部１７（図８）により演算されるニューラルネットワークの構成例について説明する。
【０１１４】
（畳み込みニューラルネットワークの構成例）
図９は、畳み込みニューラルネットワーク（CNN：Convolutional Neural Network）の概念的な構成例を示す図である。
【０１１５】
図９の畳み込みニューラルネットワークは、特徴数が３となる第１階層３０１、特徴数が２となる第２階層３０２、及び特徴数が１となる第３階層３０３の３階層で構成される。
【０１１６】
ここで、画像Ｉは、例えば、ラスタスキャンされた画像データであって、畳み込みニューラルネットワークの入力データに相当する。また、特徴面Ｆ１−１乃至Ｆ１−３は、第１階層３０１の特徴面を示している。
【０１１７】
なお、特徴面とは、所定の特徴抽出フィルタ（例えばコンボリューションフィルタ）で、前の階層のデータを走査しながら演算することで得られた処理結果を示す画像データ面である。この特徴面は、ラスタスキャンされた画像データに対する検出結果であるため、当該検出結果は、面で表される。
【０１１８】
特徴面Ｆ１−１乃至Ｆ１−３は、画像Ｉに対する、２次元のコンボリューションフィルタ３１１−１乃至３１１−３の演算結果を、非線形変換することで、生成される。なお、画像Ｉ内の画像領域Ａは、コンボリューションフィルタ３１１−１乃至３１１−３のコンボリューション演算に必要な参照画像領域を示している。
【０１１９】
コンボリューションフィルタ３１１−１乃至３１１−３は、それぞれ異なる係数のコンボリューションカーネルである。また、特徴面によって、コンボリューションカーネルのサイズも異なっている。
【０１２０】
畳み込みニューラルネットワークでは、複数のフィルタカーネルを画素単位で走査しながら、積和演算を繰り返して、最終的な積和結果を非線形変換することで、特徴面が生成される。例えば、第１階層３０１において、特徴面Ｆ１−１を算出する場合、前の階層との結合数が１であるため、フィルタカーネルは、コンボリューションフィルタ３１１−１が１つとされる。
【０１２１】
一方で、第２階層３０２において、特徴面Ｆ２−１と特徴面Ｆ２−２を算出する場合には、前の階層（の特徴面）との結合数が３であるため、それぞれ、コンボリューションフィルタ３１２−１乃至３１２−３の演算結果と、コンボリューションフィルタ３１２−４乃至３１２−６の演算結果が累積加算される。すなわち、例えば、特徴面Ｆ２−１は、コンボリューションフィルタ３１２−１乃至３１２−３の出力を累積加算して、最後に非線形変換することで得られる。
【０１２２】
ここで、コンボリューションフィルタ３１２−１乃至３１２−６は、いずれも異なるフィルタ係数のコンボリューションカーネルである。また、コンボリューションフィルタ３１２−１乃至３１２−３と、コンボリューションフィルタ３１２−４乃至３１２−６とは、異なるカーネルサイズを有している。
【０１２３】
さらに、各コンボリューションフィルタ３１２の累積加算と非線形変換処理の基本的な構成は、一般的なニューロンの構成と同様である。ここで、例えば、ニューロンは、入力データ（in_1乃至in_n）と重み係数（w_1乃至w_n）とを乗じる乗算器と、複数の乗算器からの演算結果を累積加算する累積加算器と、累積加算器からの演算結果を非線形変換して出力する非線形変換部とから構成される。
【０１２４】
すなわち、コンボリューションカーネルのフィルタ係数が、重み係数w_1乃至w_nに相当している。第２階層３０２における特徴面Ｆ２−１及び特徴面Ｆ２−２や、第３階層３０３における特徴面Ｆ３のように、複数の前の階層（の特徴面）と結合される場合には、複数のコンボリューションカーネルの演算結果は、累積加算器により蓄積されることになる。すなわち、結合数は、コンボリューションカーネルサイズ×前の階層の特徴面数に相当している。
【０１２５】
このように、畳み込みニューラルネットワークにおいては、特徴抽出ごとに、画像面単位で結果を保持しながら、階層的に結合することで、画像認識の分野において、多くのタスクで優れた性能を示している。
【０１２６】
また、畳み込みニューラルネットワークにおいて、入力データやフィルタ係数（重み係数）を冗長化（例えば３重化）すれば、データの信頼性を向上させることはできるが、コンボリューションフィルタ内に、多数の演算器が用いられるため、消費電力や回路面積等のコストが非常に大きなものとなる。一方で、畳み込みニューラルネットワークにおいて、本技術を適用して、全ビットのうち、より重要な特定のビット（例えば上位ビット）のみを冗長化すれば、全ビットを冗長化した場合と比べて、消費電力を低減しつつ、回路面積を削減することができる。
【０１２７】
（畳み込みニューラルネットワークの構成例）
図１０は、畳み込みニューラルネットワーク（CNN）の演算を行う畳み込み演算部の構成例を示す図である。
【０１２８】
図１０の畳み込み演算部４００は、シストリックアレイ４００Ａとシストリックアレイ４００Ｂを備えている。図１０において、シストリックアレイ４００Ａと、シストリックアレイ４００Ｂとは、同一の構成からなる複数の演算器を相互に接続した構成からなる。各演算器は、前の階層からのデータが入力される入力側から、畳み込み演算結果データを出力する出力側に向かって３段に配置されている。
【０１２９】
シストリックアレイ４００Ａは、それぞれ３段の演算器からなる４本の演算ラインを有している。図１０の例では、４本の演算ラインのうち、２本の演算ライン、すなわち、演算器４１２−１乃至４１２−３からなる演算ラインと、演算器４２３−１乃至４２３−３からなる演算ラインを示している。
【０１３０】
演算器４１２−１乃至４１２−３からなる演算ラインには、フリップフロップ回路４１１−１乃至４１１−３が設けられる。また、演算器４１２−１乃至４１２−３には、重み係数（W）がそれぞれ入力される。同様に、演算器４２３−１乃至４２３−３からなる演算ラインには、フリップフロップ回路４２１−１乃至４２１−３が設けられる。また、演算器４２３−１乃至４２３−３には、重み係数（W）がそれぞれ入力される。なお、残りの２本の演算ラインについては、図示していないが、図１０に示した演算ラインと同様に構成される。
【０１３１】
このように、シストリックアレイ４００Ａでは、４本の演算ラインのそれぞれで、各段の演算器による演算結果を演算サイクルごとに出力側の演算器に順次転送していくことで、畳み込み演算を並列的に行うようにしている。そして、シストリックアレイ４００Ａでは、各演算ラインにより得られる演算結果のデータを、加算器４０１−１乃至４０１−４により加算して、畳み込み演算結果のデータとして出力する。
【０１３２】
シストリックアレイ４００Ｂは、それぞれ３段の演算器からなる４本の演算ラインを有している。図１０の例では、４本の演算ラインのうち、１本の演算ライン、すなわち、演算器４２２−１乃至４２２−３からなる演算ラインを示している。
【０１３３】
演算器４２２−１乃至４２２−３からなる演算ラインには、フリップフロップ回路４２１−１乃至４２１−３が設けられる。また、演算器４２２−１乃至４２２−３には、重み係数（W）がそれぞれ入力される。なお、残りの３本の演算ラインについては、図示していないが、図１０に示した演算ラインと同様に構成される。
【０１３４】
このように、シストリックアレイ４００Ｂでは、４本の演算ラインのそれぞれで、各段の演算器による演算結果を演算サイクルごとに出力側の演算器に順次転送していくことで、畳み込み演算を並列的に行うようにしている。そして、シストリックアレイ４００Ｂでは、各演算ラインにより得られる演算結果のデータを、加算器４０２−１乃至４０２−４により加算して、畳み込み演算結果のデータとして出力する。
【０１３５】
比較器４０３には、シストリックアレイ４００Ａからの畳み込み演算結果のデータと、シストリックアレイ４００Ｂからの畳み込み演算結果のデータが入力される。比較器４０３は、２つの入力データを比較し、その値が大きい方のデータを、最大畳み込み演算結果データとして出力する。
【０１３６】
以上、畳み込み演算部の構成例を示したが、この畳み込み演算部においては、シストリックアレイの各演算ラインを構成する演算器が、加算器や乗算器等の演算器から構成され、多数の演算器が用いられているため、入力データや重み係数（W）の全ビットを冗長化すると、消費電力や回路面積等のコストが非常に大きなものとなる。一方で、この種の畳み込み演算部においても、本技術を適用して、全ビットのうち、より重要な特定のビット（例えば上位ビット）のみを冗長化すれば、全ビットを冗長化した場合と比べて、消費電力を低減しつつ、回路面積を削減することができる。
【０１３７】
＜４．変形例＞
【０１３８】
（小数点の形式）
上述した説明では、画像認識ニューラルネットワーク処理部１７（図８）による、ニューラルネットワークの演算として、入力データと重み係数のデータ形式が、固定小数点の形式となる場合を説明したが、入力データと重み係数のデータ形式は、固定小数点の形式に限らず、浮動小数点の形式であってもよい。
【０１３９】
ここで、図１１を参照して、固定小数点形式と浮動小数点形式について説明する。図１１Ａは、固定小数点形式のフォーマットの例を示している。図１１Ａにおいて、「s」は、1ビットで正負の符号を表す符号部である。例えば、「s」の値が、"0"の場合には、符号が正であることを表し、"1"の場合には、符号が負であることを表す。「m」は、数値部であり、例えば最下位ビットに小数点を固定した場合には、整数部となる。
【０１４０】
すなわち、固定小数点形式では、小数点の位置が決まっているため、浮動小数点形式に比べて表現できる値の範囲は狭いが、高速に演算できるなどのメリットがある。
【０１４１】
一方で、図１１Ｂは、浮動小数点形式のフォーマットの例を示している。図１１Ｂにおいて、「s」は、符号部であり、1ビットで正負の符号を表す。「e」は、指数部であり、浮動小数点の中の累乗の部分を表す。「m」は、仮数部であり、指数部を表記する際の有効文字となる部分である。例えば、A×10Bの場合、Aが仮数部となる。
【０１４２】
すなわち、浮動小数点形式では、仮数部と指数部を規定することで、固定小数点形式に比べて、広い範囲で数値を表現することができる。なお、浮動小数点形式としては、例えば、IEEE754（IEEE 浮動小数点数演算標準）で規定されている浮動小数点数を採用することができる。
【０１４３】
本技術では、入力データと重み係数のデータ形式が、浮動小数点の形式であっても、固定小数点の形式の場合と同様に、より重要なビット（例えば上位ビット）を、冗長化（例えば３重化）することになるので、全ビットを冗長化した場合と比べて、消費電力を低減しつつ、回路面積を削減することができる。
【０１４４】
（多数決演算の他の例）
上述した説明では、多数決器１００による多数決演算の対象のデータとして、異なる演算器を経由して入力される３つのデータ（入力データや重み係数）を説明したが、多数決演算の対象のデータとしては、他のデータを用いることができる。例えば、演算時間はかかるものの、同じ演算を３回繰り返して行い、その結果得られる３つのデータを用いて多数決演算を行うことができる。
【０１４５】
ただし、上記の演算を繰り返す際には、データの入れ方を変えることで、異なる演算器や経路を通って演算が行われるようにするのが望ましい。また、繰り返しの演算に際し、その後に行われる多数決演算のために保存するのは、上位ビットなどの重要なビットとすることで、余分なリソースの消費を抑制することができる。
【０１４６】
（故障の検知に利用）
上述した説明では、回路を冗長化して、多数決器１００による多数決演算を行うことで、単一の回路に発生した故障をマスクすることができると説明したが、多数決演算により、故障の検知が行われるようにしてもよい。すなわち、この場合、本技術の構成が、予備回路に切り替えるための故障検出機能として用いられることになる。
【０１４７】
例えば、上位ビットを３重化するとともに、下位ビットも２重化して、多数決器１００による多数決演算により、ハードウェアのエラーを検知したときには、あらかじめ用意しておいた予備の演算器に切り替えるようにする。その結果、予備の演算器で、正常な動作を継続することが可能となる。
【０１４８】
また、例えば、上述した本技術の構成を、FPGA(Field Programmable Gate Array)に適用している場合に、多数決器１００による多数決演算によって、ハードウェアのエラーが検知されたときには、故障していない論理セルが使用されるように構成し直すことで、FPGAは、正常な動作を継続することが可能となる。
【０１４９】
（放射線作業環境への応用）
放射線作業環境において、自律型の自動運転装置が、ニューラルネットワークの演算を用いた画像認識処理で得られた情報に基づいて、例えば自律的に動作を決定するような機能を有する場合に、上述した本技術の構成を、当該ニューラルネットワークの演算を行う演算部に適用することもできる。このような特殊な状況下においても、消費電力を低減しつつ、回路面積を削減しながらも、より信頼性の高いニューラルネットワークの演算を行うことができる。
【０１５０】
（演算用LSIの歩留まり改善）
上述したように、回路を多重化（冗長化）して、多数決器１００による多数決演算を行うことで、単一の回路に発生した故障をマスクすることができるが、このことを歩留まりの側面から捉えれば、例えば、上述した本技術の構成を適用したニューラルネットワーク演算用LSIでは、単一の回路に発生した故障をマスクすることができるため、歩留まりが改善しているとも言える。つまり、本技術の構成は、ハードウェアエラーが単一の故障であれば、歩留まり改善の施策として用いることができる。
【０１５１】
（その他の変形例）
上述した説明では、演算処理装置１０（図８）において、画像認識ニューラルネットワーク処理部１７によって、画像取得部１１により取得された画像データを用いたニューラルネットワークの演算が行われると説明したが、ニューラルネットワークの演算で用いられる画像データは、例えば、イメージセンサから出力される画像データや、所定のファイル形式の画像データなど、あらゆる形式の画像データを対象とすることができる。また、画像データに限らず、例えば音声データやテキストデータなど、あらゆる形式のデータを対象とすることができる。
【０１５２】
また、上述した説明では、多重化（冗長化）の例として、基本的に３重化を例に挙げて説明したが、多重化（冗長化）できるのであれば、３重化に限らず、例えば、より多重度を上げるなど、他の多重化（冗長化）の形態を採用することもできる。
【０１５３】
＜５．コンピュータの構成＞
【０１５４】
上述した一連の処理は、ハードウェアにより実行することもできるし、ソフトウェアにより実行することもできる。一連の処理をソフトウェアにより実行する場合には、そのソフトウェアを構成するプログラムが、コンピュータにインストールされる。ここで、コンピュータには、専用のハードウェアに組み込まれているコンピュータや、各種のプログラムをインストールすることで、各種の機能を実行することが可能な、例えば汎用のパーソナルコンピュータなどが含まれる。
【０１５５】
図１２は、上述した一連の処理をプログラムにより実行するコンピュータのハードウェアの構成例を示すブロック図である。
【０１５６】
コンピュータ１０００において、CPU（Central Processing Unit）１００１，ROM（Read Only Memory）１００２，RAM（Random Access Memory）１００３は、バス１００４により相互に接続されている。バス１００４には、さらに、入出力インターフェース１００５が接続されている。入出力インターフェース１００５には、入力部１００６、出力部１００７、記録部１００８、通信部１００９、及びドライブ１０１０が接続されている。
【０１５７】
入力部１００６は、キーボード、マウス、マイクロフォンなどよりなる。出力部１００７は、ディスプレイ、スピーカなどよりなる。記録部１００８は、ハードディスクや不揮発性のメモリなどよりなる。通信部１００９は、ネットワークインターフェースなどよりなる。ドライブ１０１０は、磁気ディスク、光ディスク、光磁気ディスク、又は半導体メモリなどのリムーバブル記録媒体１０１１を駆動する。
【０１５８】
以上のように構成されるコンピュータ１０００では、CPU１００１が、例えば、記録部１００８に記憶されているプログラムを、入出力インターフェース１００５及びバス１００４を介して、RAM１００３にロードして実行することにより、上述した一連の処理が行われる。
【０１５９】
コンピュータ１０００（CPU１００１）が実行するプログラムは、例えば、パッケージメディア等としてのリムーバブル記録媒体１０１１に記録して提供することができる。また、プログラムは、ローカルエリアネットワーク、インターネット、デジタル衛星放送といった、有線又は無線の伝送媒体を介して提供することができる。
【０１６０】
コンピュータ１０００では、プログラムは、リムーバブル記録媒体１０１１をドライブ１０１０に装着することにより、入出力インターフェース１００５を介して、記録部１００８にインストールすることができる。また、プログラムは、有線又は無線の伝送媒体を介して、通信部１００９で受信し、記録部１００８にインストールすることができる。その他、プログラムは、ROM１００２や記録部１００８に、あらかじめインストールしておくことができる。
【０１６１】
なお、コンピュータ１０００が実行するプログラムは、本明細書で説明する順序に沿って時系列に処理が行われるプログラムであっても良いし、並列に、あるいは呼び出しが行われたとき等の必要なタイミングで処理が行われるプログラムであっても良い。
【０１６２】
また、プログラムは、１のコンピュータにより処理されるものであってもよいし、複数のコンピュータによって分散処理されるものであってもよい。さらに、プログラムは、遠方のコンピュータに転送されて実行されるものであってもよい。
【０１６３】
さらに、本明細書において、システムとは、複数の構成要素（装置、モジュール（部品）等）の集合を意味し、すべての構成要素が同一筐体中にあるか否かは問わない。したがって、別個の筐体に収納され、ネットワークを介して接続されている複数の装置、及び、１つの筐体の中に複数のモジュールが収納されている１つの装置は、いずれも、システムである。
【０１６４】
なお、本技術の実施の形態は、上述した実施の形態に限定されるものではなく、本技術の要旨を逸脱しない範囲において種々の変更が可能である。例えば、本技術は、１つの機能を、ネットワークを介して複数の装置で分担、共同して処理するクラウドコンピューティングの構成をとることができる。
【０１６５】
また、本技術は、以下のような構成をとることができる。
【０１６６】
（１）
ニューラルネットワークの演算を行う演算処理部を備え、
前記ニューラルネットワークの演算において、当該演算に用いる重み係数と入力データの一部の特定のビットを、前記特定のビット以外の残りのビットよりも冗長性が多くなるように冗長化する
演算処理装置。
（２）
前記ニューラルネットワークの演算において、前記重み係数と前記入力データのビットのうち、前記特定のビットのみを冗長化する
（１）に記載の演算処理装置。
（３）
前記ニューラルネットワークの演算において、前記重み係数と前記入力データのビットのうち、上位ビットのみを冗長化する
（２）に記載の演算処理装置。
（４）
前記重み係数と前記入力データのデータ形式は、固定小数点の形式である
（１）乃至（３）のいずれかに記載の演算処理装置。
（５）
前記重み係数と前記入力データのデータ形式は、浮動小数点の形式である
（１）乃至（３）のいずれかに記載の演算処理装置。
（６）
前記重み係数と前記入力データの一部の特定のビットに対し、誤り訂正符号への符号化又は復号を行う誤り訂正部をさらに備える
（１）乃至（５）のいずれかに記載の演算処理装置。
（７）
前記演算処理部により処理されるデータを記憶する第１のメモリ部と、
前記重み係数を記憶する第２のメモリ部と
をさらに備え、
前記誤り訂正部は、
前記演算処理部と前記第１のメモリ部との間に設けられる第１の誤り訂正部と、
前記演算処理部と前記第２のメモリ部との間に設けられる第２の誤り訂正部と
からなる
（６）に記載の演算処理装置。
（８）
前記誤り訂正部は、多重化されている
（６）又は（７）に記載の演算処理装置。
（９）
前記演算処理部は、
前記重み係数と前記入力データの積和演算を行う演算器と、
前記演算器から得られるデータに対し多数決演算を行い、その結果得られるデータを出力する多数決器と
を有する
（１）乃至（８）のいずれかに記載の演算処理装置。
（１０）
前記演算器と前記多数決器は、多重化されている
（９）に記載の演算処理装置。
（１１）
ニューラルネットワークの演算を行う演算処理部を備える演算処理装置の演算処理方法において、
前記演算処理部が、
前記ニューラルネットワークの演算において、当該演算に用いる重み係数と入力データの一部の特定のビットを、前記特定のビット以外の残りのビットよりも冗長性が多くなるように冗長化されたデータを処理する
ステップを含む演算処理方法。
【符号の説明】
【０１６７】
１０  演算処理装置，  １１  画像取得部，  １２  誤り訂正部，  １３  メモリコントローラ，  １４  外部DRAM，  １５  データバッファメモリ，  １６  誤り訂正部，  １７  画像認識ニューラルネットワーク処理部，  １８  係数メモリ，  １９  誤り訂正部，  ２０  プロセッサ，  ２１  ３重化バス，  １００，１００Ａ，１００Ａ−１乃至１００Ａ−３，１００Ｂ，１００Ｂ−１乃至１００Ｂ−３  多数決器，  １１１  乗算器，  １１２  乗算器，  １１３  乗算器，  １１４  加算器，  １１５  乗算器，  １１６  加算器，  １２１  論理演算器，  １３１  乗算器，  １３２  加算器，  １３３  乗算器，  １３４  加算器，  １４１  論理演算器，  １４２  論理演算器，  １５１  変換器，  １５２  加算器，  １５３  変換器，  １５４  加算器，  １５５  変換器，  １５６  加算器，  １０００  コンピュータ，  １００１  CPU
【図１】
2017211735.tif 000003
【図２】
2017211735.tif 000004
【図３】
2017211735.tif 000005
【図４】
2017211735.tif 000006
【図５】
2017211735.tif 000007
【図６】
2017211735.tif 000008
【図７】
2017211735.tif 000009
【図８】
2017211735.tif 000010
【図９】
2017211735.tif 000011
【図１０】
2017211735.tif 000012
【図１１】
2017211735.tif 000013
【図１２】
2017211735.tif 000014