(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-03-18
(45)【発行日】2024-03-27
(54)【発明の名称】演算器
(51)【国際特許分類】
G06F 17/10 20060101AFI20240319BHJP
G06N 3/02 20060101ALI20240319BHJP
【FI】
G06F17/10 V
G06N3/02
(21)【出願番号】P 2020042176
(22)【出願日】2020-03-11
【審査請求日】2023-03-08
(73)【特許権者】
【識別番号】000004260
【氏名又は名称】株式会社デンソー
(74)【代理人】
【識別番号】100113549
【氏名又は名称】鈴木 守
(74)【代理人】
【識別番号】100115808
【氏名又は名称】加藤 真司
(72)【発明者】
【氏名】山田 洋平
【審査官】漆原 孝治
(56)【参考文献】
【文献】特開2003-241659(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 17/10
G06N 3/02
(57)【特許請求の範囲】
【請求項1】
入力値に係数を乗ずる計算を行う演算器であって、
前記入力値に前記係数の3倍値を乗じる乗算部(4)と、
前記乗算部による演算結果を1/3に除算する除算部(8)と、
前記乗算部による複数の演算結果を積算する積算部(5)と、
を備え、
前記乗算部による乗算結果が3の倍数か否かに基づいて、演算結果のエラーをチェック
し、
前記除算部は、前記積算部による演算結果を1/3に除算する演算器。
【請求項2】
前記係数を3倍にする3倍乗算部(7)を備え、
前記乗算部は、前記3倍乗算部による出力を前記入力値に乗ずる請求項
1に記載の演算器。
【請求項3】
あらかじめ演算された前記係数の3倍値を記憶部(2)に記憶しておき、
前記乗算部は、前記記憶部に記憶された前記3倍値を前記入力値に乗ずる請求項
1に記載の演算器。
【請求項4】
前記演算器は、ニューラルネットワークの各レイヤでの演算において、前記各レイヤへの入力値に重み係数を乗じて積算する演算に用いられる請求項1から
3のいずれかに記載の演算器。
【請求項5】
ニューラルネットワークにおける各レイヤでの演算に用いられる演算器であって、
学習によって求めた係数の3倍値を記憶した記憶部と、
入力値に前記記憶部から読み出した前記3倍値を乗じる乗算部と、
前記乗算部による複数の演算結果を積算する積算部と、
前記積算部による演算結果に対して後処理を行う後処理部であって、前記ニューラルネットワークの学習時に用いた乗算パラメータを1/3にして演算を行う後処理部(6)と、
前記積算部による演算結果を3で割った余りを演算する剰余演算部(10)と、
を備え、
前記余りが0か否かに基づいて演算結果のエラーをチェックする演算器。
【請求項6】
ニューラルネットワークにおける各レイヤでの演算に用いられる演算器であって、前記ニューラルネットワークは、前記各レイヤへの入力として、前のレイヤから伝達された値の3倍値を用いて重み係数を学習したニューラルネットワークであり、
学習によって求めた係数の3倍値を記憶した記憶部と、
入力値に前記記憶部から読み出した前記3倍値を乗じる乗算部と、
前記乗算部による複数の演算結果を積算する積算部と、
前記積算部による演算結果を3で割った余りを演算する剰余演算部と、
前記積算部による演算結果に対してスケーリングを行う後処理部と、
を備え、
前記余りが0か否かに基づいて演算結果のエラーをチェックする演算器。
【請求項7】
入力値に係数を乗ずる計算を行う演算器において、
3の倍数の係数を記憶する記憶部と、
前記入力値に前記記憶部から読み出した係数を乗じる乗算部と、
演算結果が3の倍数か否かに基づいて、演算結果のエラーをチェックするエラー検出部と、
を備えた演算器。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、乗算部を備えた演算器に関する。
【背景技術】
【0002】
従来、演算器の故障検出にかかわる技術としては、演算器を二重化して並列動作させ、両者の演算結果を比較することで故障検出を行う手法(例えば、特許文献1)や、同一演算器で入力オペランドを入れ替えて複数回計算させ、両者の計算結果を比較することで故障検出を行う手法(例えば、特許文献2)等が知られていた。
【先行技術文献】
【特許文献】
【0003】
【文献】特開平2-187821号公報
【文献】特開平3-68019号公報
【発明の概要】
【発明が解決しようとする課題】
【0004】
上記した手法は、いずれも演算器の利用効率が50%に低下する手法であり、実装コストが高いという問題があった。また、演算器と並行してパリティプレディクション回路を設け、演算器の出力結果のパリティとパリティプレディクション回路の出力を比較して故障検出を行う手法が知られているが、これは加算器などパリティプレディクションが可能な演算器にしか適用が困難であった。
【0005】
そこで、本開示は上記背景に鑑み、演算器の利用効率を大幅に低下しないようにしつつ、故障検出が可能な演算器を提供することを目的とする。
【課題を解決するための手段】
【0006】
本開示は上記課題を解決するために以下の技術的手段を採用する。特許請求の範囲及びこの項に記載した括弧内の符号は、ひとつの態様として後述する実施の形態に記載の具体的手段との対応関係を示す一例であって、本発明の技術的範囲を限定するものではない。
【0007】
本開示にかかる演算器は、入力値に係数を乗ずる計算を行う演算器であって、前記入力値に前記係数の3倍値を乗じる乗算部(4)と、前記乗算部による演算結果を1/3に除算する除算部(8)とを備え、前記乗算部による乗算結果が3の倍数か否かに基づいて、演算結果のエラーをチェックする。
【0008】
本開示に係る演算器は、ニューラルネットワークにおける各レイヤでの演算に用いられる演算器であって、学習によって求めた係数の3倍値を記憶した記憶部と、入力値に前記記憶部から読み出した前記3倍値を乗じる乗算部と、前記乗算部による複数の演算結果を積算する積算部と、前記積算部による演算結果に対して後処理を行う後処理部であって、前記ニューラルネットワークの学習時に用いた乗算パラメータを1/3にして演算を行う後処理部(6)と、前記積算部による演算結果を3で割った余りを演算する剰余演算部(10)とを備え、前記余りが0か否かに基づいて演算結果のエラーをチェックする。
【0009】
本開示の演算器は、ニューラルネットワークにおける各レイヤでの演算に用いられる演算器であって、前記ニューラルネットワークは、前記各レイヤへの入力として、前のレイヤから伝達された値の3倍値を用いて重み係数を学習したニューラルネットワークであり、学習によって求めた係数の3倍値を記憶した記憶部と、入力値に前記記憶部から読み出した前記3倍値を乗じる乗算部と、前記乗算部による複数の演算結果を積算する積算部と、前記積算部による演算結果を3で割った余りを演算する剰余演算部と、前記積算部による演算結果に対してスケーリングを行う後処理部とを備え、前記余りが0か否かに基づいて演算結果のエラーをチェックする。
【発明の効果】
【0010】
本開示は、容易に演算器の故障を検出することができる。
【図面の簡単な説明】
【0011】
【
図1】第1の実施の形態の演算器の例を示す図である。
【
図2】実施の形態の演算器によって演算を行うニューラルネットワークモデルの例を示す図である。
【
図3】積算結果が16bit幅であった際のModulo3の計算方法の例を示す図である。
【
図4】第2の実施の形態の演算器の例を示す図である。
【
図5】第3の実施の形態の演算器の例を示す図である。
【
図6】第4の実施の形態の演算器の例を示す図である。
【発明を実施するための形態】
【0012】
以下、本開示の実施の形態にかかる演算器について、図面を参照しながら説明する。
(第1の実施の形態)
図1は、第1の実施の形態の演算器の構成を示す図である。本実施の形態の演算器は、画像認識、物体検知等に使用するニューラルネットワーク処理エンジン全般に適用することができる。
【0013】
図2は、実施の形態の演算器によって演算を行うニューラルネットワークモデル(以下、「NNモデル」という)の例を示す図である。
図2に示すNNモデルは、入力層と出力層との間に、2つの層を有している。第1層は、記載を簡略化している。
【0014】
第2層は、第2層に対する入力αi(i=1~3)に重みwi(i=1~3)を乗じるニューロンと、ニューロンによる計算結果の後処理としてバッチノーマライゼーション(以下、「BN」という)を行うニューロンを有している。本実施の形態では、後処理としてBNを例として説明するが、後処理としては、ReLU、シグモイド関数による活性化処理、スケーリング処理等を行ってもよい。
図2では、一つのニューロンに着目しているが、NNモデルによる計算では各層の各ニューロンについて、入力と重みを乗ずる計算を行う。
【0015】
図1に戻って、演算器の構成について説明する。第1の実施の形態の演算器は、メモリ1と、メモリ2と、メモリ3と、乗算回路4と、積算回路5と、後処理回路6と、3倍乗算回路7と、1/3除算回路8とを備えている。
【0016】
メモリ1は、BN処理の係数データを格納するメモリである。メモリ2は重みデータを格納するメモリである。メモリ3はアクティベーションデータ(
図2でいう「αi」)を格納するメモリである。乗算回路4は、重みとアクティベーションデータを乗じる乗算回路である。積算回路4の乗算器の出力を積算する積算回路である。後処理回路5は、積算結果に対して、後処理を行う回路である。本実施の形態では、後処理回路6はBN処理を行う。3倍乗算回路7は、入力データに3を乗じ、3倍した結果をメモリ2に対して出力する乗算回路である。1/3除算回路8は入力データを3で除し、1/3の結果を出力する除算回路である。
【0017】
ここで、乗算回路、除算回路の実装例について説明する。
(3倍乗算回路の実装例)
入力の重みデータをWとすると、3倍した結果は(W<<1)+Wを計算することで容易に得られる。なお、「<<」は左シフトを示す。
(1/3除算回路の実装例)
積算結果をAccとすると、3で除する処理は、(Acc>>4)+(Acc>>6)+(Acc>>8)+・・・という計算を行うことで十分に精度の高い値が得られる。NNモデルの計算処理においては、スケーリングをして小さい数値に丸めることがあることからも分かるとおり、±1ULP程度の精度で計算ができれば十分である。
(3の剰余(Modulo3)計算回路の実装例)
図3は、積算結果が16bit幅であった際のModulo3の計算方法の例を示す図である。まず、計算対象を2bit毎に区切り、それぞれのModulo3を計算する。mod3(4×x)=mod3(mod3(4)×mod3(x))=mod3(1×mod3(x))=mod3(x)であるため、2bit毎に区切って計算したModulo3値が、そのままその2bitから生成される剰余となる。得られたModulo3値を、さらに隣接するModulo3値同士で加算し、その結果のModulo3を計算する。最終的に項が1つになるまで隣接Modulo3同士の加算を繰り返す。
【0018】
以上のように構成された演算器は、次のように動作する。
(1)処理対象のネットワーク層のBN係数を外部よりロードし、メモリ1に書き込む。
(2)処理対象のネットワーク層の重みデータを外部よりロードし、3倍乗算回路7にて3を乗じた後、メモリ2に書き込む。
(3)処理対象のネットワーク層の入力アクティベーションデータを外部よりロードし、メモリ3に書き込む。
(4)重みとアクティベーションデータをそれぞれメモリ2、メモリ3から読み出し、乗算回路4に入力して両者を掛け合わせる。この乗算は複数の重みおよびアクティベーションデータデータに対して同時に並行して行われることもある。
(5)(4)で掛け合わせた結果を積算回路に入力して積算する。処理対象のネットワーク層の規模によって(4)と(5)の処理は繰り返し行われる。
(6)(5)の積算結果を1/3除算回路8により3で除すると同時に3で除した余り(Modulo3)を求める。積算結果のModulo3が0でなかった場合には、何らかの障害が発生したと判断し、外部にエラー発生を報告する。
(7)(6)の結果を後処理回路に入力し、後処理を行う。本実施の形態では、後処理としてバッチノーマライゼーションを行う。
(8)(6)の後処理結果をメモリ3に書き込む。
(9)処理対象のネットワーク層の構成に応じて(1)~(7)の動作を繰り返し、得られたアクティベーションをメモリ3より外部に出力する。
【0019】
第1の実施の形態の演算器は、演算器への入力値を元の値の3倍の値とし、常に演算結果が3の倍数となるようにすることで、容易に演算器の1bit反転エラー故障検出ができる。これはModulo3には、3の倍数同士の乗算、加減算結果も3の倍数となるという特性があるからである。そして、あるデータのModulo3値は、いずれの1bitが反転しても異なる値となるという特性もあるため、演算結果のModulo3が0でない場合には、エラーがあると判定できる。
【0020】
本実施の形態の演算器は、NNモデルの演算に好適である。NNモデルの主要な演算は、多数の入力/出力チャネルの組み合わせに対して、各入力/出力チャネルの組み合わせに対応する重みと入力アクティベーションを乗じ、積算するという処理だからである。本実施の形態の演算器は、複数ビットが反転した場合にたまたまModulo3が0になることがあり、その場合にはエラーを検出しないが、例えば動画中の物体認識をニューラルネットワークで行う場合には、前後のフレームの認識結果と比較が可能であるので、一部のフレームの処理にエラーが生じても問題とならないことが多い。各フレームに対して繰り返し処理を行う中でエラーを判定できれば、演算器の故障を検出できる。
【0021】
(第2の実施の形態)
図4は、第2の実施の形態の演算器の例を示す図である。第2の実施の形態の演算器の基本的な構成は第1の実施の形態と同じであるが、ハードウェアで3倍乗算回路を実装する代わりに、あらかじめ3の倍数であることを保証した重みデータを外部メモリ9に置く。これにより、3倍乗算回路を実装することなく、第1の実施の形態と同様の機能を実現することができる。
【0022】
(第3の実施の形態)
図5は、第3の実施の形態の演算器の例を示す図である。第3の実施の形態の演算器において、後処理に含まれるバッチノーマライゼーション処理は、あらかじめ計算されたGradient(G)及びBias(B)の係数を用い、積算結果Accに対してG×Acc+Bの計算を行うことで行われる。第3の実施の形態の演算器では、バッチノーマライゼーションのGradientにあらかじめ1/3を乗じた値を外部メモリ9から読み出してメモリ1上に置いておく。これにより、後処理回路6でGraidentを乗じたときに演算結果が1/3されることになるから、除算回路を実装することなく第1の実施の形態の演算器と同様の機能を実現することができる。
【0023】
ただし、第1の実施の形態においてModulo3を演算していた除算回路に代えて、第3の実施の形態の演算器は、積算回路5からの出力に対し、Modulo3を演算するModulo3回路10を備える。
図3に示したように、Modulo3を演算する回路は容易に実装できる。
【0024】
(第4の実施の形態)
図6は、第4の実施の形態の演算器の例を示す図である。本実施の形態では、後処理回路6は、積算結果を出力アクティベーションのbit幅に合わせるスケーリングという処理を行う。ここで、スケーリングについて説明する。積算回路5による積算結果は重みとアクティベーションの乗算結果を積算して得られるため、入力アクティベーションに比べて非常に大きな値となる。スケーリングとは、積算結果に小さな値を掛け、出力アクティベーションのbit幅に収まる範囲に縮小させる処理である。一般にスケーリングの係数は2のべき乗に限定され、積算結果の右シフトとして実装される。
【0025】
第4の実施の形態の演算器では、NNモデルの学習時にあらかじめ重みが3倍されることを前提として重みおよびスケーリング係数を決定する。すなわち、学習を行う際に、各レイヤに入力する値として、前のレイヤから伝達された値を3倍した3倍値を用いる。これにより、後処理回路6のスケーリング係数が、重みを3倍した場合を前提とした係数となる。なぜなら、入力を3倍することと重みを3倍することは同じ結果になるからである。この構成により、推論時に重みを3倍したときに後処理回路6が適切に機能し、除算回路を実装することなく、第1の実施の形態の演算器と同様の機能を実現することができる。
【産業上の利用可能性】
【0026】
本開示は、乗算を行う演算器として有用である。
【符号の説明】
【0027】
1~3・・・メモリ、4・・・乗算回路、5・・・積算回路、6・・・後処理回路、
7・・・3倍乗算回路、8・・・1/3除算回路、9・・・外部メモリ、
10・・・Modulo3回路。