(57)【特許請求の範囲】
【請求項１】
ニューラルネットワークを構成するニューロンにおいて、
複数の入力データに対応する重み係数を、重み丸め値と、ビットシフト量を示す情報として与え、前記入力データに対し、前記重み丸め値との乗算と前記ビットシフト量に応じたシフト加算にて重み付け演算を行う手段を備え、
前記重み付け演算を行う手段は、２のｎ乗と２のｎ−１乗で示される複数の範囲それぞれに応じて定まる計算式を用いて、前記重み係数の個数が一定となる重み係数を演算することを特徴とするニューラルネットワーク回路。
【請求項２】
前記重み付け演算を行う手段は、
前記複数の範囲に含まれる２の１乗から２の０乗の範囲では第１の計算式を用い、他の範囲においては、前記第１の計算式に対して、指数シフト数がｎ−１となる２のｎ−１乗を乗じる計算式を用いることを特徴とする、請求項１記載のニューラルネットワーク回路。
【請求項３】
ニューラルネットワークを構成するニューロンにおいて、
複数の入力データに対応する重み係数を、重み丸め値と、ビットシフト量を示す情報として与え、前記入力データに対し、前記重み丸め値との乗算と前記ビットシフト量に応じたシフト加算にて重み付け演算を行う手段を備え、
前記重み付け演算を行う手段は、２のｎ乗と０で示される複数の範囲それぞれに応じて定まる計算式を用いて、前記重み係数の個数が一定となる重み係数を演算することを特徴とするニューラルネットワーク回路。
【請求項４】
前記重み付け演算を行う手段は、
前記複数の範囲に含まれる２の０乗から０の範囲では第１の計算式を用い、他の範囲においては、前記第１の計算式に対して、指数シフト数がｎとなる２のｎ乗を乗じる計算式を用いることを特徴とする、請求項３記載のニューラルネットワーク回路。
【請求項５】
ニューラルネットワークを構成するニューロンにおいて、前記入力データに対する重み付け演算後の値が、前記重み丸め値との乗算と前記シフト加算の結果となることを特徴とする、請求項１乃至４のいずれかに記載のニューラルネットワーク回路。
【請求項６】
前記複数の入力データに対応する重み係数が実装された回路は、前記重み丸め値と、前記ビットシフト量を示す情報に変換する手段を有することを特徴とする、請求項１乃至５のいずれかに記載のニューラルネットワーク回路。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ニューラルネットワーク回路に関する。
【背景技術】
【０００２】
ニューラルネットワークにおけるニューロンの回路構成方法としては、特開平４―５１３８４号公報（特許文献１）に記載のような装置が開示されている。特許文献１では、重みデータを、１つの２のべき乗、または複数の２のべき乗の和で近似する。２のべき乗演算をビットシフト回路で構成し、それらの結果を加算器で加算することで入力データと重みデータの乗算を小規模の回路で近似する例が示されている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開平４―５１３８４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
機械学習の１つの手法として、ディープニューラルネットワークがある。ニューラルネットワークの基本単位であるニューロンは、複数の入力データとそれに対応する重み係数を乗算し、それらの乗算結果を加算し出力する構成である。そのため、ＦＰＧＡ等の論理回路で実現する場合、多数の乗算器が必要となり回路の大規模化が問題となる。【０００５】
そこで、入力データと重みデータの乗算を簡略化しニューラルネットワークを小規模な回路で実現することが課題である。
【課題を解決するための手段】
【０００６】
本発明はこのような事情に鑑みてなされたものである。一例として、重みデータの仮数部の丸め値と入力データを乗算する手段と、その乗算結果を丸め値のビット数分シフトする手段と、そのシフト結果と入力データを加算する手段と、重みの指数部のビット数分シフトする手段とで構成される。
【発明の効果】
【０００７】
本発明によれば、入力データと重みデータの乗算を簡略化しニューラルネットワークを小規模な回路で実現することができる。
【図面の簡単な説明】
【０００８】
【図１】実施例のニューロンを示すブロック図。
【図２】実施例のシフト加算手段を示すブロック図。
【図３】実施例の重み係数の変換を示すブロック図。
【図４】実施例の重み係数の値を示す表。
【図５】実施例の２のｎ乗から２のｎ−１乗の範囲に対する仮数シフト数に応じた重み係数を示す図。
【図６】実施例の１から−１までの重みの範囲に対する仮数シフト数に応じた重み係数を示す図。
【図７】実施例のシフト加算手段を示すブロック図。
【図８】実施例の重み係数の値を示す表。
【図９】実施例の２のn乗から0の範囲に対する仮数シフト数に応じた重み係数を示す図。
【図１０】一般的なニューラルネットワーク回路の一例を示すブロック図
【図１１】従来のニューロンの一例を示すブロック図。
【発明を実施するための形態】
【０００９】
以下、本発明の実施例を図１〜図１１により説明する。
図１０は、実施例を搭載するニューラルネットワーク回路のブロック図である。実施例として、人手で書かれた文字の画像から文字を認識するニューラルネットワークを考える。図１０において、入力層では、縦１０画素×１０画素の合計１００画素の濃淡値を示す画像データを１００個の信号として入力する。次に、３つの中間層は、各層ごとに１００個のニューロン１で構成されている。各ニューロンの出力が次の層の１００個のニューロン１に入力し、最後に出力層の１００個のニューロン１が認識結果を出力する。
【００１０】
例えば、出力層の一番上のニューロン１の出力が文字「あ」である場合に、他の出力層のニューロン１に比べて大きな値を出力するようになっている。また、上から２番目のニューロン１の出力は文字「い」である場合に、他の出力層のニューロンに比べて大きな値を出力するようになっている。上記のようにして、何番目のニューロンが最大値を出すかで文字の識別結果を得る。
【００１１】
図１１は、従来の一般的なニューロン１のブロック図である。乗算１００は、入力ｉｎと重みＷｎの乗算を実行する。加算器１０２は、入力ｉ０からｉ９９までのそれぞれの重みデータとの乗算結果の総和を求める手段である。加算器１０３は、加算器１０２の出力とバイアスデータを加算する手段である。出力関数１０４は、加算器１０３の出力値に対し、ある関数演算を行いその結果を出力する手段である。
【００１２】
図１０のニューラルネットワーク回路を高速で処理することを目的に、論理回路で実現する場合、１つのニューロン１に１００個の乗算器が必要となる。中間層の１層だけを一度に演算する場合でも１００ニューロン×１００個＝１００００個の乗算器が必要となる。高い文字認識の性能を得るためには、乗算器１００に入力する重みＷのビット数は８ビット、画像入力データのビット数は８ビット必要であり、これらを論理回路で実現しようとすると膨大な回路規模となる。
【００１３】
したがって、本実施例では、この乗算を加算とビットシフトの組み合わせによる演算とすることで、性能を維持しながら小規模な回路でニューラルネットワーク回路を実現することを一つの目的としている。
【００１４】
図１は、実施例であるニューロンのブロック図である。シフト加算１０１は入力ｉｎと重み係数Ｗａの乗算演算を実行する。なお、詳細は図２を参照して後述する。加算器１０２は、入力ｉ０からｉ９９までのそれぞれの重み係数とのシフト加算結果の総和を求める手段である。加算器１０２は、加算器１０２の出力とバイアスデータを加算する手段である。出力関数１０４は、加算器１０３の出力値に対し、ある関数演算を行いその結果を出力する手段である。
【００１５】
図２は、実施例であるシフト加算手段のブロック図である。重み係数記憶部２０１は重み係数を記憶する手段である。シフト加算１０１は重み係数Ｗａを、
（式ａ）Ｗａ＝ Ｓ＊（１＋Ｒ＊２−ｍ）＊２ｋ
により求め、入力ｉｎと乗算を行う。ここで、Ｓは、重みの正負の符号を示しており、プラスの場合は１、マイナスの場合は−１である。ｍは、０以上の整数で、重み係数の精度を示しており、２ｎから２ｎ＋１の範囲に２ｍ個の値を持つ。詳しくは図５にて後述する。
【００１６】
図５は、２ｎ〜２ｎ−１の範囲における仮数シフト数ｍに応じた重み係数Ｗａを示す図である。２ｎ〜２ｎ−１の範囲において、ｍ＝１では２点、ｍ＝２では４点、ｍ＝３では８点の重み係数を持つ。以上のように、重み係数の点数＝２ｍとなる。
【００１７】
次に上記の式ａにおいて、Ｒは重みの丸め値であり、０小なりＲ＜２ｍ  の範囲の整数である。Ｋは、重みの指数に相当するビットシフト数であり整数である。
【００１８】
図２のシフト加算１０１は、上記の演算式の具体的な実現方法を示している。符号変換２０２は、入力ｉｎを正負のどちらかのデータにする機能である。符号が０であれば入力ｉｎをそのまま出力し、符号が１であれば入力ｉｎに−１を乗算して出力する。
【００１９】
乗算器２０３は、重み係数記憶部２０１からの出力である仮数丸め値を乗算する手段である。
【００２０】
仮数シフト２０４は、乗算器２０３の出力を重み係数記憶部２０１からの出力である仮数シフト数に応じてビットシフトする手段である。仮数シフト数がプラスの値であれば左方向にシフトを行う。また、マイナスの値であれば右方向にシフトを行う。
【００２１】
加算器２０５は、仮数シフト２０４の出力と符号変換２０２の出力を加算する手段である。
【００２２】
指数シフト２０６は、加算器２０５の出力を重み係数記憶部２０１からの出力である指数シフト数に応じてビットシフトする手段である。指数シフト数がプラスの値であれば左方向にシフトを行う。また、マイナスの値であれば右方向にシフトを行う。
【００２３】
上記の式ａによる重み係数は、図１０のニューラルネットワークにおいて、最初の各ニューロンの重み係数を求めるための学習時から適用するのが確実である。なお、図３に示すように、重み係数を求めるための学習をコンピュータによる浮動小数点演算で行い、求まった重み係数を上記の式による重み係数に近似し、ニューラルネットを小規模な論理回路で実現してもよい。
【００２４】
図３は、浮動小数点形式で記述された従来の重み係数３０１と、本実施例のシフト加算処理に使う重み係数２０１との対応を示すブロック図である。
【００２５】
本実施例は、固定小数点演算を対象にしているが、シフト加算処理に使う重み係数が浮動小数点形式の重み係数から容易に求めるための一例を示す。これは、例えば重み係数を求めるための学習をコンピュータによる浮動小数点演算で行い、求まった重み係数を本発明の重み係数に変換し、ニューラルネットを小規模な論理回路で実現する場合に有効である。
【００２６】
重み係数２０１において、符号Ｓは、浮動小数点形式の重み係数記憶部３０１の符号と同一である。
【００２７】
指数シフト数Ｋは、重み係数記憶部３０１の指数部データを基に指数変換３０２にて生成する。具体的には、浮動小数点形式の指数の値はオフセットとして１２７を加えた値となっている。したがって、指数変換３０２では１２７を引いた値を指数シフト数として２の補数表示で設定する。
【００２８】
仮数丸め値Ｒは、重み係数記憶部３０１の仮数部データを基に仮数変換３０３にて生成する。具体的には、仮数部データの上位ｍビットを仮数丸め値とする。
【００２９】
仮数シフト数ｍは、重みデータ３０１の仮数部データを基に仮数変換３０３にて生成する。具体的には、仮数丸め値Ｒのビット数をｍとして設定する。
【００３０】
図４は、重み係数の実施例を示す表である。本実施例では、重み係数が、２のべき乗を基準に、どの２のべき乗の範囲にあるかで、計算する式が決まる。以下に具体的な数値例で説明する。
【００３１】
最初に表４０１は重みの範囲Ｗが２から１の範囲で、仮数シフト数ｍ＝２の場合の重み係数Ｗａの値と、それを求めるための式１を示したものである。式１よりＲの値は０から３までの４つの整数値を取り得るので、重み係数Ｗａは１．０から１．７５までの０．２５刻みの４つの値を取る。
【００３２】
次に、表４０２は重みの範囲Ｗが１．０から０．５の範囲で、仮数シフト数ｍ＝２の場合の重み近似値Ｗａの値と、それを求めるための式２を示したものである。指数シフト数Ｋ＝−１とすることで式１に２−１を乗じる形となり、式２の結果を得る。
【００３３】
次に、表４０３は重みの範囲Ｗが０．５〜０．２５の範囲で、仮数シフト数ｍ＝２の場合の重み係数Ｗａの値と、それを求めるための式３を示したものである。指数シフト数Ｋ＝−２とすることで式１に2−2を乗じる形となり、式３の結果を得る。
【００３４】
以上のように、式１で求めた重み係数値を元に、重み係数の含まれる２のべき乗の範囲に応じてビットシフトを行うことで、重みの値が０に近い値であっても、０に丸められないことが本実施例の特徴である。
【００３５】
図６は、１．０〜−１．０の範囲での仮数シフト数ｍに応じた重み係数Ｗａを示す図である。２ｎ〜２ｎ−１の範囲において常に一定の個数となるため、重み値が０に近い値であっても重み係数が０に丸められることがなく、入力データと精度良く乗算ができる。
【００３６】
図７はもう一つの実施例であるシフト加算手段のブロック図である。重み係数記憶部２０１は重み系数値を記憶する手段である。シフト加算１０１は入力ｉｎに対し重み係数値Ｗｂを、
（式ｂ）Ｗｂ＝ Ｓ＊Ｒ＊２−ｍ＊２ｋ 
により求め、入力ｉｎと乗算を行う。ここで、Ｓは、重みの正負の符号を示しており、プラスの場合は１、マイナスの場合は−１である。ｍは、０以上の整数で重み係数の精度を示しており、２ｎから０の範囲に２ｍ個の重み係数を持つ。詳しくは図９にて後述する。
【００３７】
図９は、２ｎ〜０の範囲の重み係数に対する仮数シフト数ｍに応じた重み係数Ｗｂを示す図である。２ｎ〜０の範囲において、ｍ＝１では２点、ｍ＝２では４点、ｍ＝３では８点となる。以上のように、重み係数の点数＝２ｍとなる。
【００３８】
次に、上記の式ｂにおいて、Ｒは重みの丸め値であり、０≦Ｒ＜２ｍ  の範囲の整数である。
【００３９】
Ｋは、重みの指数に相当するビットシフト数であり整数である。図７のシフト加算１０１は、上記の演算式の具体的な実現方法を示している。
【００４０】
符号変換７０１は、入力データを正負のどちらかのデータにする機能である。符号が０であれば入力データをそのまま出力し、符号が１であれば入力データに-1を乗算して出力する。
【００４１】
乗算器７０２は、重み係数記憶部２０１からの出力である仮数丸め値を乗算する手段である。
【００４２】
仮数シフト７０３は、乗算器７０２の出力を重み係数記憶部２０１からの出力である仮数シフト数に応じてビットシフトする手段である。仮数シフト数がプラスの値であれば左方向にシフトを行う。また、マイナスの値であれば右方向にシフトを行う。
【００４３】
指数シフト７０４は、仮数シフト７０３からの出力を指数シフト数に応じてビットシフトする手段である。指数シフト数がプラスの値であれば左方向にシフトを行う。また、マイナスの値であれば右方向にシフトを行う。
【００４４】
上記の式ｂによる重み係数は、図１０のニューラルネットワークにおいて、最初の各ニューロンの重み係数を求めるための学習時から適用するのが確実である。なお、図３に示すように、重み係数を求めるための学習をコンピュータによる浮動小数点演算で行い、求まった重み係数を上記の式による重み係数に近似し、ニューラルネットを小規模な論理回路で実現してもよい。
【００４５】
図８は、図７における重み係数の実施例を示す表である。
【００４６】
本実施例では、重みの値が、２のべき乗を基準に、どの２のべき乗の範囲に含まれているかで、計算する式が決まる。以下に具体的な数値例で説明する。
【００４７】
最初に表８０１は重みの範囲Ｗが１から０の範囲で、仮数シフト数ｍ＝２の場合の重み係数Ｗｂの値とそれを求めるための式１を示したものである。式１よりＲの値は０から３までの４つの整数値を取り得るので、重み係数Ｗｂは１〜０までの０．２５刻みの４つの値を取る。
【００４８】
次に、表８０２は重みの範囲Ｗが０．５〜０の範囲で、仮数シフト数ｍ＝２の場合の重み係数Ｗｂの値とそれを求めるための式２を示したものである。指数シフト数Ｋ＝−１とすることで式１に２−１を乗じる形となり、式２の結果を得る。
【００４９】
次に、表８０３は重みの範囲Ｗが０．２５〜０の範囲で、仮数シフト数ｍ＝２の場合の重み係数Ｗｂの値と、それを求めるための式３を示したものである。指数シフト数Ｋ＝−２とすることで式１に2−2を乗じる形となり、式３の結果を得る。
【００５０】
以上のように、式１で求めた重み係数を元に、重み係数の含まれる２のべき乗の範囲に応じてビットシフトを行うことで、重みの値が０に近い値であっても、０に丸められないことが本実施例の特徴である。
【００５１】
以上のように説明した各実施例によれば、２ｎ〜２ｎ−１の範囲の重み係数値の個数を一定とし、小さな重み係数値が０に丸められてしまうのを回避し、性能を維持しながらニューラルネットワークを小規模な回路で実現できる。また、回路方式を一般式化し、ＤＮＮの適用対象に応じて性能と回路規模の調整が容易である。
【００５２】
以上で本発明の実施例を説明したが、本発明は上記した各実施例に限定されるものではなく、様々な変形例が含まれる。例えば、本発明の効果を奏する範囲で、各実施例の一部を付加、転換、削除等することが可能である。また、各実施例の一部を入れ替えることが可能である。
【００５３】
すなわち、上記した実施例は本発明を分かりやすく説明したものであり、必ずしも説明した構成を備えるものに限定されるものではない。
【符号の説明】
【００５４】
１  ニューロン
１００  乗算器
１０１  シフト加算
１０２  加算器
１０３  加算器
１０４  出力関数
２０１  本発明の重み係数記憶部
２０２  符号変換
２０３  乗算器
２０４  ビットシフタ
２０５  加算器
２０６  ビットシフタ
３０１  浮動小数点形式の重み係数記憶部
４０１〜４０３  重み係数表
７０１  符号変換
７０２  乗算器
７０３  ビットシフタ
７０４  ビットシフタ
８０１〜８０３  重み係数表
【図１】
0006734938.tif 000002
【図２】
0006734938.tif 000003
【図３】
0006734938.tif 000004
【図４】
0006734938.tif 000005
【図５】
0006734938.tif 000006
【図６】
0006734938.tif 000007
【図７】
0006734938.tif 000008
【図８】
0006734938.tif 000009
【図９】
0006734938.tif 000010
【図１０】
0006734938.tif 000011
【図１１】
0006734938.tif 000012