(57)【要約】【課題】  本発明の課題は、演算の低ビット化によりCNNを軽量化しつつ、適切な演算を可能とすることにある。【解決手段】  低ビット化部と、学習部と、メモリを具備するニューラルネットワークの学習装置である。低ビット化部は、ニューラルネットワークモデルの演算対象となる数値に対して、第１の量子化領域を適用した第１の量子化を実行する。学習部は、第１の量子化が実行されたニューラルネットワークモデルに対し、学習を実行する。低ビット化部は、学習部において学習が実行されたニューラルネットワークモデルの演算対象となる数値に対して、第２の量子化領域を適用した第２の量子化を実行する。メモリは、第２の量子化が実行されたニューラルネットワークモデルを格納する。【選択図】  図３
2020009048.tif 000002
【特許請求の範囲】
【請求項１】
低ビット化部と、学習部と、メモリを具備し、
前記低ビット化部は、ニューラルネットワークモデルの演算対象となる数値に対して、第１の量子化領域を適用した第１の量子化を実行し、
前記学習部は、前記第１の量子化が実行されたニューラルネットワークモデルに対し、学習を実行し、
前記低ビット化部は、前記学習部において学習が実行されたニューラルネットワークモデルの演算対象となる数値に対して、第２の量子化領域を適用した第２の量子化を実行し、
前記メモリは、前記第２の量子化が実行されたニューラルネットワークモデルを格納する、
ニューラルネットワークの学習装置。
【請求項２】
前記第１の量子化領域と前記第２の量子化領域は、範囲が異なる、
請求項１記載のニューラルネットワークの学習装置。
【請求項３】
前記低ビット化部は、第１の制御回路を備え、
前記第１の制御回路は、前記学習により前記演算対象となる数値の分布に変化が生じた場合に、前記第２の量子化を実行させる、
請求項１記載のニューラルネットワークの学習装置。
【請求項４】
前記低ビット化部は、第１の制御回路を備え、
前記第１の制御回路は、前記学習により前記演算対象となる数値が前記第１の量子化領域からオーバーフローした場合に、前記第２の量子化を実行させる、
請求項１記載のニューラルネットワークの学習装置。
【請求項５】
前記低ビット化部は、サンプリング領域再設定回路と量子化回路を備え、
前記サンプリング領域再設定回路は、前記第２の量子化で、前記演算対象となる数値の最小値と最大値の間で、前記第２の量子化領域を設定し、
前記量子化回路は、前記演算対象となる数値を前記第２の量子化領域で等間隔に標本化する、
請求項１記載のニューラルネットワークの学習装置。
【請求項６】
はずれ値除外部をさらに備え、
前記はずれ値除外部は、前記演算対象となる数値の所定範囲外の値を除外し、
前記低ビット化部は、サンプリング領域再設定回路と量子化回路を備え、
前記サンプリング領域再設定回路は、前記第２の量子化で、前記演算対象となる数値の前記所定範囲内における最小値と最大値の間で、前記第２の量子化領域を設定し、
前記量子化回路は、演算対象となる数値を前記第２の量子化領域で等間隔に標本化する、
請求項１記載のニューラルネットワークの学習装置。
【請求項７】
前記ニューラルネットワークモデルの演算対象となる数値は、
ニューラルネットワークの重み係数および特徴マップの少なくとも一つである、
請求項１記載のニューラルネットワークの学習装置。
【請求項８】
低ビット化部と、学習部と、メモリを具備する情報処理装置により、ニューラルネットワークの重み係数を学習するニューラルネットワークの学習方法であって、
前記低ビット化部が、入力された任意のニューラルネットワークモデルの重み係数に対して、第１の量子化領域を適用した第１の量子化を実行する第１のステップ、
前記学習部が、前記第１の量子化が実行されたニューラルネットワークモデルに対し、学習を実行する第２のステップ、
前記低ビット化部が、前記学習部において学習が実行されたニューラルネットワークモデルの重み係数に対して、第２の量子化領域を適用した第２の量子化を実行する第３のステップ、
前記メモリが、前記第２の量子化が実行されたニューラルネットワークモデルを格納する第４のステップ、を備える
ニューラルネットワークの学習方法。
【請求項９】
前記第１の量子化領域と前記第２の量子化領域は、範囲が異なる、
請求項８記載のニューラルネットワークの学習方法。
【請求項１０】
前記第３のステップにおいて、
前記学習により重み係数の分布に変化が生じた場合に、前記第２の量子化を実行させる、
請求項８記載のニューラルネットワークの学習方法。
【請求項１１】
前記第３のステップにおいて、
前記学習により重み係数が前記第１の量子化領域からオーバーフローした場合に、前記第２の量子化を実行させる、
請求項８記載のニューラルネットワークの学習方法。
【請求項１２】
前記第３のステップにおいて、
前記第２の量子化では、前記ニューラルネットワークモデルの重み係数の最小値と最大値の間で、前記第２の量子化領域を設定し、前記重み係数を前記第２の量子化領域で等間隔に標本化する、
請求項８記載のニューラルネットワークの学習方法。
【請求項１３】
前記第３のステップにおいて、
前記ニューラルネットワークモデルの重み係数の所定範囲外の値を除外し、
前記第２の量子化では、前記ニューラルネットワークモデルの重み係数の前記所定範囲内における最小値と最大値の間で、前記第２の量子化領域を設定し、前記重み係数を前記第２の量子化領域で等間隔に標本化する、
請求項８記載のニューラルネットワークの学習方法。
【請求項１４】
前記第４のステップにおいて、
前記第２の量子化が実行されたニューラルネットワークモデルの学習損失が任意閾値以上かどうかを判定し、
学習損失が任意閾値以下の場合は、前記第２の量子化が実行されたニューラルネットワークモデルを前記メモリに格納して、処理を終了し、
学習損失が任意閾値以上の場合は、前記第２の量子化が実行されたニューラルネットワークモデルに対し、前記学習部による再学習を実行する、
請求項８記載のニューラルネットワークの学習方法。
【請求項１５】
前記メモリに格納されたニューラルネットワークモデルを用いて、半導体装置にニューラルネットワークを構成する、
請求項１４記載のニューラルネットワークの学習方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ニューラルネットワークの学習に関する技術である。好ましい適用例としては、深層学習を用いたAI(Artificial Intelligence)の学習に関する技術である。
【背景技術】
【０００２】
生物の脳は、多数のニューロン（神経細胞）が存在し、各ニューロンは他の多数のニューロンからの信号入力と、また他の多数のニューロンへ信号を出力するような動きを行う。このような脳の仕組みをコンピュータで実現しようとしたものがDeep Neural Network（DNN）等のニューラルネットワークであり、生物の神経細胞ネットワークの挙動を模倣した工学モデルである。DNNの一例として、物体認識や画像処理に有効な畳み込みニューラルネットワーク（CNN：Convolutional Neural Network）がある。
【０００３】
図1にCNNの構成の一例を示す。CNNは入力層１、１層以上の中間層２、および出力層３と呼ばれる多層の畳み込み演算層により構成される。N層目の畳み込み演算層では、N−1層目から出力された値を入力とし、この入力値に重みフィルタ４を畳み込むことで、得られた結果をN＋1層目の入力へ出力する。このとき、重みフィルタ４のカーネル係数（重み係数）をアプリケーションに応じて適切な値に設定すること（学習）で、高い汎化性能を得ることができる。
【０００４】
近年、CNNを自動運転へ適用し、物体認識や行動予測等を実現する動きが加速している。しかし、一般にCNNは演算量が大きく、車載ECU（Electronic Control Unit）等に実装するためには、CNNを軽量化する必要がある。CNNを軽量化する手法の一つに演算の低ビット化がある。低ビット演算でCNNを実現する技術として、非特許文献１がある。
【先行技術文献】
【非特許文献】
【０００５】
【非特許文献１】Qiu et al. Going Deeper with Embedded FPGA Platform for Convolutional Neural Network, FPGA’16
【発明の概要】
【発明が解決しようとする課題】
【０００６】
非特許文献１では、層毎の重み係数および特徴マップの分布に応じて低ビット化のサンプリング領域（量子化領域）を設定する。しかし、低ビット化後の再学習による重み係数および特徴マップ分布の変化は考慮されていない。このため、再学習途中で重み係数および特徴マップ分布が変化し、層毎に予め設定したサンプリング領域を逸脱した場合、オーバーフローによる情報損失が発生する課題があった。
【０００７】
図２で、発明者らが検討した上記課題を詳しく説明する。周知のように、CNNの学習の典型例においては、学習データの入力ごとに出力と正解の一致度に基づいて重み係数を修正する再学習を反復して実行する。そして、損失関数（学習損失）が最小になるように、最終的な重み係数を設定する。
【０００８】
図２では、反復される再学習により重み係数の分布が変化する様子を示している。横軸が重み係数の値であり、縦軸が重み係数の分布である。当初重み係数は（Ａ）に示すように、連続値あるいは高ビットの情報である。ここで（Ｂ）に示すように、重み係数の最大値と最小値をカバーするサンプリング領域を設定し、サンプリング領域を例えば２ｎ個に等間隔で標本化する。標本化処理により、高ビットの情報は低ビットの情報に変換され、計算量が低減できる。
【０００９】
既に述べたように、重み係数の学習処理では、再学習を反復することにより重み係数を最適化していく。このとき、低ビット化した重み係数により再度学習を行なうと、重み係数は変化し、（Ｃ）に示すように重み係数の分布も変化する。そうすると、再学習前に設定していたサンプリング領域から、重み係数が外れてしまう状況（オーバーフロー）があり得る。図２（Ｃ）では、オーバーフローした部分のデータは失われるか、あるいはサンプリング領域の最大値あるいは最小値に圧縮される。従って、オーバーフローは学習の精度を低下させるおそれがある。
【００１０】
そこで、本発明の課題は、演算の低ビット化によりCNNを軽量化しつつ、適切な演算を可能とすることにある。
【課題を解決するための手段】
【００１１】
本発明の好ましい一側面は、低ビット化部と、学習部と、メモリを具備するニューラルネットワークの学習装置である。低ビット化部は、ニューラルネットワークモデルの演算対象となる数値に対して、第１の量子化領域を適用した第１の量子化を実行する。学習部は、第１の量子化が実行されたニューラルネットワークモデルに対し、学習を実行する。低ビット化部は、学習部において学習が実行されたニューラルネットワークモデルの演算対象となる数値に対して、第２の量子化領域を適用した第２の量子化を実行する。メモリは、第２の量子化が実行されたニューラルネットワークモデルを格納する。
【００１２】
本発明の好ましい他の一側面は、低ビット化部と、学習部と、メモリを具備する情報処理装置により、ニューラルネットワークの重み係数を学習するニューラルネットワークの学習方法である。この方法は、低ビット化部が、入力された任意のニューラルネットワークモデルの重み係数に対して、第１の量子化領域を適用した第１の量子化を実行する第１のステップ、学習部が、第１の量子化が実行されたニューラルネットワークモデルに対し、学習を実行する第２のステップ、低ビット化部が、学習部において学習が実行されたニューラルネットワークモデルの重み係数に対して、第２の量子化領域を適用した第２の量子化を実行する第３のステップ、メモリが、第２の量子化が実行されたニューラルネットワークモデルを格納する第４のステップ、を備える。
【発明の効果】
【００１３】
本発明によれば、演算の低ビット化によりCNNを軽量化しつつ、適切な演算を可能とすることができる。
【図面の簡単な説明】
【００１４】
【図１】CNN構造の一例の概念図。
【図２】比較例の低ビット化サンプリング手法の概念図。
【図３】実施例の低ビット化サンプリング手法の概念図。
【図４】実施例１における装置構成ブロック図。
【図５】実施例１におけるフローチャート。
【図６】実施例２における装置構成ブロック図。
【図７】実施例２におけるフローチャート。
【図８】実施例３における装置構成ブロック図。
【図９】実施例３におけるフローチャート。
【図１０】ResNet34における本発明適用の効果を示すグラフ図。
【発明を実施するための形態】
【００１５】
以下実施例を図面を用いて説明する。ただし、本発明は以下に示す実施の形態の記載内容に限定して解釈されるものではない。本発明の思想ないし趣旨から逸脱しない範囲で、その具体的構成を変更し得ることは当業者であれば容易に理解される。
【００１６】
以下に説明する発明の構成において、同一部分又は同様な機能を有する部分には同一の符号を異なる図面間で共通して用い、重複する説明は省略することがある。同一あるいは同様な機能を有する要素が複数ある場合には、同一の符号に異なる添字を付して説明する場合がある。ただし、複数の要素を区別する必要がない場合には、添字を省略して説明する場合がある。
【００１７】
本明細書等における「第１」、「第２」、「第３」などの表記は、構成要素を識別するために付するものであり、必ずしも、数、順序、もしくはその内容を限定するものではない。また、構成要素の識別のための番号は文脈毎に用いられ、一つの文脈で用いた番号が、他の文脈で必ずしも同一の構成を示すとは限らない。また、ある番号で識別された構成要素が、他の番号で識別された構成要素の機能を兼ねることを妨げるものではない。
【００１８】
図面等において示す各構成の位置、大きさ、形状、範囲などは、発明の理解を容易にするため、実際の位置、大きさ、形状、範囲などを表していない場合がある。このため、本発明は、必ずしも、図面等に開示された位置、大きさ、形状、範囲などに限定されない。
【００１９】
図３に、以下で詳細に説明される実施例の一例を概念化して示す。実施例では、演算対象となる数値の低ビット化によりCNNを軽量化しつつ、演算対象となる数値がサンプリング領域を逸脱することによる、情報損失を抑制する。演算対象となる数値の具体例としては、ニューラルネットワークモデルの重み係数や、重み係数を畳み込む対象および畳み込んだ結果である特徴マップがある。以下では、主に重み係数を例に説明する。当初重み係数は（Ａ）に示すように、連続値あるいは高ビットの情報である。ここで（Ｂ）に示すように、重み係数の最大値と最小値をカバーするサンプリング領域を設定し、サンプリング領域を例えば２ｎ個に等間隔で標本化する。標本化処理により、高ビットの情報は低ビットの情報に変換され、計算量が低減できる。
【００２０】
本実施例では、（Ｂ）における低ビット化後の再学習途中の重み係数の変化に応じて、重み係数のサンプリング領域を動的に変更する。サンプリング領域の動的な変更により、オーバーフローを防止しつつ低ビット化を行う。具体的には、1 iteration（１回反復）再学習を実行するたびに、層毎の重み係数分布を集計し、重み係数の最大値と最小値の間をサンプリング領域として再設定する。その後、（Ｃ）に示すように、再設定したサンプリング領域を等間隔に再量子化することで低ビット化を行う。以上は重み係数に対する量子化処理の例であるが、重み係数と積和演算が行なわれる特徴マップの数値に対しても同様の量子化処理が可能である。
【００２１】
図３で説明した処理は、例えばCNNの各層ごとに行い、層ごとにオーバーフローを避ける適切な量子化を可能とする。もっとも、複数層を纏めて行なってもよいし、１つの層のエッジごとに行なうこともあり得る。この手法を用いることで、再学習途中に重み係数や特徴マップの分布が変化した場合でも、オーバーフローの発生を抑止することができるため、情報量の損失を防ぐことが可能である。結果としてCNNにおいて、認識精度低下を抑制しつつ、CNNの演算を低ビット化することができる。
【実施例１】
【００２２】
図４および図５はそれぞれ実施例１の構成図および処理フローチャートである。図４および図５を参照して、CNNモデルの重み係数の学習処理について説明する。本実施例では図４に示すニューラルネットワークの学習装置の構成は、処理装置、記憶装置、入力装置、出力装置を備える一般的な情報処理装置（コンピュータあるいはサーバ）で実現することにした。具体的には、記憶装置に格納されたプログラムが処理装置によって実行されることで、定められた処理を他のハードウェアと協働して計算や制御等の機能を実現する。情報処理装置が実行するプログラム、その機能、あるいはその機能を実現する手段を、「機能」、「手段」、「部」、「回路」等と呼ぶ場合がある。
【００２３】
情報処理装置の構成は、単体のコンピュータで構成してもよいし、あるいは、入力装置、出力装置、処理装置、記憶装置の任意の部分が、ネットワークで接続された他のコンピュータで構成されてもよい。また、ソフトウェアで構成した機能と同等の機能は、FPGA（Field Programmable Gate Array）、ASIC（Application Specific Integrated Circuit）などのハードウェアでも実現できる。そのような態様も本願発明の範囲に含まれる。
【００２４】
図４に示す構成では、入力として任意のCNNモデルを受け付け、CNNモデルの重み係数をオーバーフローなしサンプリングする低ビット化部（B100）を備える。また、低ビット化済みCNNモデルを再度学習する再学習部（B101）と、再学習途中で重み係数の分布が変化した場合は、オーバーフローが発生しないようにサンプリング領域を補正し、再度低ビット化を実行する再低ビット化部（B102）を備える。再学習部（B101）は、一般的なニューラルネットワークの学習器（学習部）を適用してよい。
【００２５】
図５のフローチャートに基づく動作について、以下で述べる。なお、図５において、処理を現すステップはSと略記する。
【００２６】
ステップ１００：入力として、低ビット化前のオリジナルCNNモデルおよびオリジナルCNNモデルの重み係数を低ビット量子化するためのサンプリング領域初期値を与える。サンプリング領域初期値はランダムあるいは予め設定した固定値でよい。
【００２７】
ステップ１０１：サンプリング領域初期値を基に、オリジナルCNNモデルの重み係数を量子化回路（P100）で低ビット量子化し，低ビット量子化済みCNNモデルを生成する。具体的な例では，nビットに低ビット量子化を行う場合，サンプリング領域を2のn乗個の領域に等間隔に分割することで量子化を行う。
【００２８】
ステップ１０２：低ビット量子化済みCNNモデルの重み係数がサンプリング領域初期値から逸脱（オーバーフロー）しているかどうかを制御回路A（P101）で判定する。オーバーフローが発生する場合はステップ１０３へ進みオーバーフローが発生しない場合は，低ビット量子化済みCNNモデルをオーバーフローなし低ビット化モデルとして，ステップ１０４へ進む。
【００２９】
ステップ１０３：オーバーフローが発生する場合は、サンプリング領域を所定の値広げるように補正し、再度重みパラメタの低ビット量子化を量子化回路（P100）で実行する。その後，ステップ１０２へ戻り，重み係数のオーバーフロー有無を再度判定する。
【００３０】
ステップ１０４：オーバーフローなし低ビット化モデルに対して、再学習回路（P102）において，1 iteration再学習を行う。本実施例において、CNNの学習そのものについては従来技術を踏襲してよい。
【００３１】
ステップ１０５：再学習により重み係数の分布が変化した場合は、ステップ１０３で設定したサンプリング領域において重み係数のオーバーフロー発生有無を制御回路A（P106）で判定する。オーバーフローが発生する場合は，ステップ１０６に進み，オーバーフローが発生しない場合は，ステップ１０８に進む。
【００３２】
ステップ１０６：ステップ１０５でオーバーフローが発生すると判断された場合は、サンプリング領域再設定回路（P104）において、再度サンプリング領域を広げるように補正し、オーバーフローが発生しないようにする。
【００３３】
ステップ１０７：ステップ１０６で設定したサンプリング領域に基づいて量子化回路（P105）で再度量子化を行うことで，オーバーフローなし低ビット化済みCNNモデルを生成する。具体的には，nビットに低ビット量子化を行う場合，サンプリング領域を2のn乗個の領域に等間隔に分割することで量子化を行う。
【００３４】
ステップ１０８：ステップ１０７で生成したオーバーフローなし低ビット化済みCNNモデルの学習時における損失関数が示す学習損失が閾値th以下の場合、処理を終了し、低ビット化CNNモデルとして出力する。逆に閾値以上の場合、ステップ１０４にもどり再学習処理を続ける。本判定は制御回路B（P103）で行う。出力された低ビット化CNNモデル、あるいは再学習中の低ビット化CNNモデルは、外部メモリ（P107）に格納される。
【００３５】
以上の処理により、再学習により重み係数が変化した場合でも、オーバーフローを避けつつ情報の低ビット化が可能となる。なお、上記の例では、オーバーフローの有無を確認し、オーバーフローがあった場合にサンプリング領域を補正しているが、オーバーフローの有無の確認を省略し、再学習ごとに常にサンプリング領域を更新するようにしてもよい。あるいは、オーバーフローに限定せず、重み係数の分布が変化したことを契機に、サンプリング領域を更新するようにしてもよい。オーバーフローに関わらず、最大値と最小値をカバーするようにサンプリング領域を設定して、再量子化を実行することにより、サンプリング領域が広すぎる場合にも適切なサンプリング領域の設定が可能になる。また、図４では、説明のために量子化回路（P100,P105）、制御回路A（P101,P106）は別個独立に示されているが、同一のソフトウェアあるいはハードウェアを別々のタイミングで使用してもよい。
【００３６】
図４の構成を、CNNの各層ごとに低ビット量子化する形態に適用する場合、各層の並列処理を可能とするためには、各層ごとに低ビット化部（B100）と再低ビット化部（B102）備えることになる。再学習部（B101）と外部メモリ（B107）は各層共通でよい。
【００３７】
図５で説明した処理により、最終的に出力された学習済みの低ビット化CNNモデルは、従来のCNNと同様に、例えばFPGAのような半導体装置により構成されるハードウェアに実装される。本実施例により出力された低ビット化CNNモデルでは、精度のよい学習が行なわれているとともに、各層の重み係数はオリジナルのモデルより低ビット数に設定されている。したがって、ハードウェアに実装されたニューラルネットワークは、高精度かつ低負荷で計算が実行でき、低消費電力で動作が可能である。
【実施例２】
【００３８】
図６および図７はそれぞれ実施例２の構成図および処理フローチャートである。実施例１と同じ構成は同じ符号を付して説明を省略する。実施例２では、はずれ値を考慮した例を示す。はずれ値とは、例えば重み係数の分布から孤立した値である。サンプリング領域を常に重み係数の最大値と最小値をカバーするように設定すると、出現頻度の小さいはずれ値を含めるために量子化効率が下がるという問題がある。そこで、実施例２では、例えば重み係数の分布の中央値からプラス方向およびマイナス方向に所定の範囲を定める閾値を設定し、範囲外の重み係数ははずれ値として無視する処理を行なう。
【００３９】
図６に示す実施例２は、実施例１の図４の出力部にはずれ値除外部（B303）を追加した構成である。はずれ値除外部は、はずれ値除外回路（P208）で構成され、実施例１で出力された低ビット化CNNモデルの重み係数が、任意閾値を上回った場合に、該当する重み係数をはずれ値として除外する。サンプリング領域ははずれ値を無視して、最大値および最小値をカバーするように設定する。閾値は例えば重み係数の分布の中央値からプラス側とマイナス側に設定し、当該閾値よりプラス側あるいはマイナス側に位置する重み係数をはずれ値とする。なお閾値はプラスおよびマイナスの片方のみ設定しても良い。
【００４０】
図７のフローチャートに基づく動作について述べる。なお、実施例１の図５から変更がある部分のみ以下で述べる。また、図７において、ステップはSと略記する。
【００４１】
ステップ２０５：実施例１で出力された低ビット化CNNモデルに対して、重み係数の値が任意閾値以上であるか判定する。閾値以上の場合ステップ２０６へ進み、閾値以下の場合はステップ２０７に進む。
【００４２】
ステップ２０６：ステップ２０５で重み係数の値が閾値以上であると判定された場合、はずれ値として除外する。
【００４３】
図６の構成を、CNNの各層ごとに低ビット量子化する形態に適用し、並列処理する場合には、各層ごとにはずれ値除外部（B203）を備えることになる。
【実施例３】
【００４４】
図８および図９はそれぞれ実施例３の構成図および処理フローチャートである。実施例１および２と同じ構成は同じ符号を付して説明を省略する。
【００４５】
図８に示す実施例３は、実施例２の入力部にネットワーク（Network）間引き部（B304）を追加した構成である。ネットワーク間引き部はネットワーク間引き回路（B309）とファインチューニング（Fine-Tuning）回路（B310）から構成されており、前者の回路でCNNのネットワークのうち不要なニューロンを間引き、後者で間引き後のCNNに対してファインチューニング（転移学習）を適用する。不要なニューロンとは、例えば重み係数が小さいニューロンである。ファインチューニングは、公知技術であり、すでにトレーニングされたモデルから重みを取得することで、より早く学習を進める処理である。
【００４６】
図９のフローチャートに基づいて、図８の構成の動作について述べる。なお、実施例２から変更がある部分のみ以下で述べる。また、図９において、ステップはSと略記する。
【００４７】
ステップ３０１：低ビット化前のオリジナルCNNモデルに対して、ネットワークのうち不要なニューロンの間引きを行う。
【００４８】
ステップ３０２：間引きを行ったCNNモデルに対して、ファインチューニングを適用する。
【００４９】
図８の構成を、CNNの各層ごとに低ビット量子化する形態に適用する場合には、ネットワーク間引き部（B304）は各層共通でよい。
【００５０】
図１０に識別AIの一種であるResNet34に実施例１を適用して低ビット化を行った場合と非特許文献１を用いて低ビット化を行った場合の識別精度を示す。演算ビット幅32bitは離散化前の連続値を示す。本実施例を用いることで、認識精度低下を抑制しつつ5bitまで演算を低ビット化できる。
【実施例４】
【００５１】
実施例１〜実施例３は、重み係数の量子化を例に説明した。同様の量子化は、畳み込み演算の入力と出力である特徴マップにも適用できる。特徴マップとは，重み係数を畳み込む対象xおよび畳み込んだ結果yを指す。ここで、ニューラルネットワークのある層に着目すると、その入出力は、
y = w*x
y：出力特徴マップ
（次の層の入力特徴マップとなる。最終層目の場合はニューラルネットワークからの出力。）
w：重み係数
*：畳み込演算
x：入力特徴マップ
（前の層の出力特徴マップである。１層目の場合はニューラルネットワークへの入力。）
である。よって、再学習により重み係数が変化すると、出力特徴マップ（すなわち次の層の入力特徴マップ）も変化する。
【００５２】
従って、重み係数だけではなく，畳み込む対象xおよび畳み込んだ結果yも離散化することで、さらに計算負荷を低減することができる。このとき、実施例１〜実施例３の重み係数の量子化の場合と同様に、特徴マップの分布の変化があった場合、あるいは、オーバーフローがあった場合に特徴マップの再量子化を行なうことができる。あるいは、再学習毎に無条件に特徴マップの再量子化を行なうことができる。また、実施例２と同様に、特徴マップの量子化でも、はずれ値の除外処理をしてよい。あるいは、重み係数は量子化せず、あるいは再量子化せずに、特徴マップのみ量子化あるいは再量子化してもよい。重み係数および特徴マップの双方を再量子化することにより、最大の計算負荷低減効果が得られるとともに、オーバーフローによる認識精度低下を抑制することができる。
【００５３】
特徴マップも重み係数の場合と同様に、量子化したものをFPGAに実装する。通常は、運用時には学習時と同様の情報を入力するために、同程度の桁数の値が入力されると仮定してよい。例えば、規格化されたサイズの画像を取り扱う場合には、学習時と運用時では同様の量子化数で適切な設定が可能となる。このため、効果的に演算量を低減可能である。
【００５４】
以上説明した実施例によれば、演算の低ビット化によりCNNを軽量化しつつ、演算対象となる数値がサンプリング領域を逸脱することによる、情報損失を抑制することができる。実施例の装置あるいは方法によって学習されたCNNは、等価な論理回路が例えばFPGAに実装される。このとき、演算対象となる数値は適切に量子化されているので、計算精度を維持しつつ、演算負荷を低減することができる。
【符号の説明】
【００５５】
B100…低ビット化部、B101…再学習部、B102…再低ビット化部、B203…はずれ値除外部、B304…Network間引き部
【図１】
2020009048.tif 000003
【図２】
2020009048.tif 000004
【図３】
2020009048.tif 000005
【図４】
2020009048.tif 000006
【図５】
2020009048.tif 000007
【図６】
2020009048.tif 000008
【図７】
2020009048.tif 000009
【図８】
2020009048.tif 000010
【図９】
2020009048.tif 000011
【図１０】
2020009048.tif 000012