(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2022154420
(43)【公開日】2022-10-13
(54)【発明の名称】ニューラルネットワーク軽量化装置、ニューラルネットワーク軽量化方法およびプログラム
(51)【国際特許分類】
G06N 3/08 20060101AFI20221005BHJP
【FI】
G06N3/08
【審査請求】有
【請求項の数】14
【出願形態】OL
(21)【出願番号】P 2021057451
(22)【出願日】2021-03-30
(11)【特許番号】
(45)【特許公報発行日】2022-06-07
【国等の委託研究の成果に係る記載事項】(出願人による申告)国等の委託研究の成果に係る特許出願(国立研究開発法人新エネルギー・産業技術総合開発機構「高効率・高速処理を可能とするAIチップ・次世代コンピューティングの技術開発/革新的AIエッジコンピューティング技術の開発/ソフトテンソルプロセッサによる超広範囲センシングAIエッジ技術の研究開発」委託研究、産業技術力強化法第17条の適用を受ける特許出願)
(71)【出願人】
【識別番号】000000295
【氏名又は名称】沖電気工業株式会社
(74)【代理人】
【識別番号】100140958
【弁理士】
【氏名又は名称】伊藤 学
(74)【代理人】
【識別番号】100137888
【弁理士】
【氏名又は名称】大山 夏子
(74)【代理人】
【識別番号】100190942
【弁理士】
【氏名又は名称】風間 竜司
(72)【発明者】
【氏名】山本 康平
(57)【要約】
【課題】精度劣化を抑制した量子化ニューラルネットワークを構築することを可能とする技術が提供されることが望まれる。
【解決手段】複数の処理層を含んだ第1のニューラルネットワークを取得する入力部と、前記第1のニューラルネットワークに含まれる畳み込み層および全結合層の少なくとも一つの処理層を修正対象層として特定し、前記修正対象層に対して量子化関数を導入して第2のニューラルネットワークを生成する修正部と、前記修正対象層の重みパラメータに対する損失関数の勾配と前記勾配に対する修正関数とに基づいて前記重みパラメータを更新して前記第2のニューラルネットワークの訓練を行う学習部と、訓練後の前記第2のニューラルネットワークを出力する出力部と、を備える、ニューラルネットワーク軽量化装置が提供される。
【選択図】
図2
【特許請求の範囲】
【請求項1】
複数の処理層を含んだ第1のニューラルネットワークを取得する入力部と、
前記第1のニューラルネットワークに含まれる畳み込み層および全結合層の少なくとも一つの処理層を修正対象層として特定し、前記修正対象層に対して量子化関数を導入して第2のニューラルネットワークを生成する修正部と、
前記修正対象層の重みパラメータに対する損失関数の勾配と前記勾配に対する修正関数とに基づいて前記重みパラメータを更新して前記第2のニューラルネットワークの訓練を行う学習部と、
訓練後の前記第2のニューラルネットワークを出力する出力部と、
を備える、ニューラルネットワーク軽量化装置。
【請求項2】
前記学習部は、前記修正対象層の重みパラメータに対する損失関数の勾配と前記修正関数の出力値との間における所定の演算に基づいて前記修正対象層の重みパラメータを更新する、
請求項1に記載のニューラルネットワーク軽量化装置。
【請求項3】
前記所定の演算は、加算または乗算である、
請求項2に記載のニューラルネットワーク軽量化装置。
【請求項4】
前記所定の演算は、乗算である、
請求項3に記載のニューラルネットワーク軽量化装置。
【請求項5】
前記修正関数は、周期関数である、
請求項1~4のいずれか一項に記載のニューラルネットワーク軽量化装置。
【請求項6】
前記周期関数は、量子化値の間隔を周期とする、
請求項5に記載のニューラルネットワーク軽量化装置。
【請求項7】
前記修正関数は、前記量子化関数の入力値に基づいて前記修正関数の出力値を決定する、
請求項1~6のいずれか一項に記載のニューラルネットワーク軽量化装置。
【請求項8】
前記修正関数は、前記量子化関数の入力値の統計量に基づいて前記修正関数の出力値を決定する、
請求項7に記載のニューラルネットワーク軽量化装置。
【請求項9】
前記修正関数は、前記量子化関数の出力値の統計量に基づいて前記修正関数の出力値を決定する、
請求項1~6のいずれか一項に記載のニューラルネットワーク軽量化装置。
【請求項10】
前記統計量は、平均値、中央値またはノルムである、
請求項8または9に記載のニューラルネットワーク軽量化装置。
【請求項11】
前記修正関数は、前記修正関数の入力値が前記量子化関数の出力値が変化する遷移点に近いほど大きい出力値を出力する、
請求項1~10のいずれか一項に記載のニューラルネットワーク軽量化装置。
【請求項12】
前記修正関数は、前記修正関数の入力値が量子化値に近いほど大きい出力値を出力する、
請求項1~10のいずれか一項に記載のニューラルネットワーク軽量化装置。
【請求項13】
複数の処理層を含んだ第1のニューラルネットワークを取得することと、
前記第1のニューラルネットワークに含まれる畳み込み層および全結合層の少なくとも一つの処理層を修正対象層として特定し、前記修正対象層に対して量子化関数を導入して第2のニューラルネットワークを生成することと、
前記修正対象層の重みパラメータに対する損失関数の勾配と前記勾配に対する修正関数とに基づいて前記重みパラメータを更新して前記第2のニューラルネットワークの訓練を行うことと、
訓練後の前記第2のニューラルネットワークを出力することと、
を備える、ニューラルネットワーク軽量化方法。
【請求項14】
コンピュータを、
複数の処理層を含んだ第1のニューラルネットワークを取得する入力部と、
前記第1のニューラルネットワークに含まれる畳み込み層および全結合層の少なくとも一つの処理層を修正対象層として特定し、前記修正対象層に対して量子化関数を導入して第2のニューラルネットワークを生成する修正部と、
前記修正対象層の重みパラメータに対する損失関数の勾配と前記勾配に対する修正関数とに基づいて前記重みパラメータを更新して前記第2のニューラルネットワークの訓練を行う学習部と、
訓練後の前記第2のニューラルネットワークを出力する出力部と、
を備えるニューラルネットワーク軽量化装置として機能させるプログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、ニューラルネットワーク軽量化装置、ニューラルネットワーク軽量化方法およびプログラムに関する。
【背景技術】
【0002】
近年、各種の分野においてニューラルネットワークが用いられている。例えば、物体の認識または物体の位置検出などを目的とした一般的なニューラルネットワークのモデルが知られている。かかる一般的なニューラルネットワークのモデルでは、処理層(例えば、畳み込み層または全結合層など)における演算に、16~32ビットの浮動小数点によってそれぞれ表現される入力特徴量(活性)および重みパラメータが使用される。
【0003】
一方、例えば、量子化ニューラルネットワークの形態の一つである2値化ニューラルネットワークでは、入力特徴量および重みパラメータが共に1ビットの2値で表現される(すなわち、-1と1で表現される)。このような表現により、畳み込み層あるいは全結合層における浮動小数点演算がビット演算に置き換えられ得る。
【0004】
ビット演算が用いられる場合には、浮動小数点演算が用いられる場合よりも低消費電力かつ高速な演算処理が実行可能となると同時に、メモリ使用量も低減される。そのため、ビット演算が用いられる場合には、FPGA(Field Programmable Gate Array)またはモバイル端末などといった、演算リソースの限られたデバイス上でもディープラーニングモデルの効率的な処理が可能になるといった効果が得られることが知られている。
【0005】
2値以上の量子化ニューラルネットワークにおいても、浮動小数点演算から整数演算への置き換えが可能なため、整数演算が用いられる場合にはビット演算が用いられる場合には劣るが同様の効果が得られる。
【0006】
非特許文献1には、畳み込み層または全結合層に入力される重みパラメータおよび入力特徴量を、各層の演算の直前に量子化してモデルを学習する疑似量子化と呼ばれる方法を使用する技術が開示されている。かかる技術では、学習時は浮動小数点演算が必要となるが、推論時にはその演算を整数演算に置き換えることが可能である。
【0007】
非特許文献2には、量子化前の重みパラメータと量子化後の重みパラメータに関する二乗誤差で定義された罰則項を損失関数に加えて学習を進めることによって、精度の高い量子化モデルを構築する技術が開示されている。
【0008】
非特許文献3には、量子化後の重みパラメータの値から離れるほど値が大きくなる絶対余弦関数で定義された罰則項を設計し、非特許文献2と同様に、その罰則項を損失関数に加えて学習を進めることによって、精度の高い量子化モデルを構築する技術が開示されている。
【先行技術文献】
【非特許文献】
【0009】
【非特許文献1】Benoit Jacob、他7名、"Quantization and Training of Neural Networksfor Efficient Integer-Arithmetic-Only Inference"、[online]、2017年、[令和3年3月16日検索]、インターネット<https://arxiv.org/abs/1712.05877>
【非特許文献2】Yoojin Choi、他2名、"Learning Sparse Low-Precision NeuralNetworks With Learnable Regularization"、[online]、2020年、[令和3年3月16日検索]、インターネット<https://arxiv.org/abs/1809.00095>
【非特許文献3】Hieu Duy Nguyen、他2名、"Quantization Aware Training withAbsolute-Cosine Regularization for Automatic Speech Recognition"、[online]、2020年、[令和3年3月16日検索]、インターネット<https://isca-speech.org/archive/Interspeech_2020/pdfs/1991.pdf>
【発明の概要】
【発明が解決しようとする課題】
【0010】
そこで、精度劣化を抑制した量子化ニューラルネットワークを構築することを可能とする技術が提供されることが望まれる。
【課題を解決するための手段】
【0011】
上記問題を解決するために、本発明のある観点によれば、複数の処理層を含んだ第1のニューラルネットワークを取得する入力部と、前記第1のニューラルネットワークに含まれる畳み込み層および全結合層の少なくとも一つの処理層を修正対象層として特定し、前記修正対象層に対して量子化関数を導入して第2のニューラルネットワークを生成する修正部と、前記修正対象層の重みパラメータに対する損失関数の勾配と前記勾配に対する修正関数とに基づいて前記重みパラメータを更新して前記第2のニューラルネットワークの訓練を行う学習部と、訓練後の前記第2のニューラルネットワークを出力する出力部と、を備える、ニューラルネットワーク軽量化装置が提供される。
【0012】
前記学習部は、前記修正対象層の重みパラメータに対する損失関数の勾配と前記修正関数の出力値との間における所定の演算に基づいて前記修正対象層の重みパラメータを更新してもよい。
【0013】
前記所定の演算は、加算または乗算であってもよい。
【0014】
前記所定の演算は、乗算であってもよい。
【0015】
前記修正関数は、周期関数であってもよい。
【0016】
前記周期関数は、量子化値の間隔を周期としてもよい。
【0017】
前記修正関数は、前記量子化関数の入力値に基づいて前記修正関数の出力値を決定してもよい。
【0018】
前記修正関数は、前記量子化関数の入力値の統計量に基づいて前記修正関数の出力値を決定してもよい。
【0019】
前記修正関数は、前記量子化関数の出力値の統計量に基づいて前記修正関数の出力値を決定してもよい。
【0020】
前記統計量は、平均値、中央値またはノルムであってもよい。
【0021】
前記修正関数は、前記修正関数の入力値が前記量子化関数の出力値が変化する遷移点に近いほど大きい出力値を出力してもよい。
【0022】
前記修正関数は、前記修正関数の入力値が量子化値に近いほど大きい出力値を出力してもよい。
【0023】
また、本発明の別の観点によれば、複数の処理層を含んだ第1のニューラルネットワークを取得することと、前記第1のニューラルネットワークに含まれる畳み込み層および全結合層の少なくとも一つの処理層を修正対象層として特定し、前記修正対象層に対して量子化関数を導入して第2のニューラルネットワークを生成することと、前記修正対象層の重みパラメータに対する損失関数の勾配と前記勾配に対する修正関数とに基づいて前記重みパラメータを更新して前記第2のニューラルネットワークの訓練を行うことと、訓練後の前記第2のニューラルネットワークを出力することと、を備える、ニューラルネットワーク軽量化方法が提供される。
【0024】
また、本発明の別の観点によれば、コンピュータを、複数の処理層を含んだ第1のニューラルネットワークを取得する入力部と、前記第1のニューラルネットワークに含まれる畳み込み層および全結合層の少なくとも一つの処理層を修正対象層として特定し、前記修正対象層に対して量子化関数を導入して第2のニューラルネットワークを生成する修正部と、前記修正対象層の重みパラメータに対する損失関数の勾配と前記勾配に対する修正関数とに基づいて前記重みパラメータを更新して前記第2のニューラルネットワークの訓練を行う学習部と、訓練後の前記第2のニューラルネットワークを出力する出力部と、を備えるニューラルネットワーク軽量化装置として機能させるプログラムが提供される。
【発明の効果】
【0025】
以上説明したように本発明によれば、精度劣化を抑制した量子化ニューラルネットワークを構築することを可能とする技術が提供される。
【図面の簡単な説明】
【0026】
【
図1】量子化前後の重みパラメータの遷移例を示す図である。
【
図2】本発明の実施形態に係るニューラルネットワーク軽量化装置の機能構成例を示す図である。
【
図3】軽量化対象のニューラルネットワークの一例を示す図である。
【
図4】修正部の動作例を示すフローチャートである。
【
図5】量子化関数が導入される前の畳み込み層の演算構成の例を示す図である。
【
図6】量子化関数が導入された後の畳み込み層の演算構成の例を示す図である。
【
図8】周期関数による修正がなされる前の勾配に基づいて算出された重みパラメータの更新量を示す図である。
【
図9】周期関数による修正がなされた後の勾配に基づいて算出された重みパラメータの更新量を示す図である。
【
図10】本発明の実施形態に係るニューラルネットワーク軽量化装置の例としての情報処理装置のハードウェア構成を示す図である。
【発明を実施するための形態】
【0027】
以下に添付図面を参照しながら、本発明の好適な実施の形態について詳細に説明する。なお、本明細書及び図面において、実質的に同一の機能構成を有する構成要素については、同一の符号を付することにより重複説明を省略する。
【0028】
また、本明細書および図面において、実質的に同一の機能構成を有する複数の構成要素を、同一の符号の後に異なる数字を付して区別する場合がある。ただし、実質的に同一の機能構成を有する複数の構成要素等の各々を特に区別する必要がない場合、同一符号のみを付する。また、異なる実施形態の類似する構成要素については、同一の符号の後に異なるアルファベットを付して区別する場合がある。ただし、異なる実施形態の類似する構成要素等の各々を特に区別する必要がない場合、同一符号のみを付する。
【0029】
(0.背景)
まず、本発明の実施形態の背景について説明する。既に開示されている技術の例としては、上記したように、非特許文献1、非特許文献2および非特許文献3に開示された技術などがある。
【0030】
しかしながら、非特許文献1に記載の技術では、量子化ビット数が小さくなるほど量子化誤差が大きくなり、重みパラメータの更新が推論結果に反映されにくくなる。その結果として、非特許文献1に記載の方法では、学習効率が低下し、精度が劣化してしまうという問題点があった。
【0031】
非特許文献2および非特許文献3に記載の技術は、いずれも量子化誤差を直接低減する目的で罰則項を損失関数に導入する技術である。しかし、これらの技術では、この罰則項に基づく重みパラメータの更新によって、損失関数に関係なく重みパラメータが量子化値に近づけられるため、量子化値の変化が阻害されてしまうおそれがある。
【0032】
図1は、量子化前後の重みパラメータの遷移例を示す図である。浮動小数点によって表現されるニューラルネットワークにおいては、重みパラメータの更新が推論結果に反映される。しかし、
図1に示されるように、ニューラルネットワークの形態が量子化ニューラルネットワークである場合には、重みパラメータの値が隣接する2つの量子化値の間にある遷移点を越えない限り、量子化後の重みパラメータの値(量子化値)が変化しない。
【0033】
そのため、重みパラメータの値が遷移点を超えない場合には、重みパラメータの更新が推論結果に反映されない。したがって、上記した罰則項により重みパラメータが量子化値に近づくことが、前記遷移点から遠ざかる方向に重みパラメータを最適化することと同じになってしまうため、非特許文献2および非特許文献3に記載の技術では、量子化値が変化する頻度が低下し、精度が劣化してしまうという問題点があった。
【0034】
そこで、本発明の実施形態では、精度劣化を抑制した量子化ニューラルネットワークを構築することを可能とする技術について主に説明する。一例として、本発明の実施形態では、遷移点に近づくほど大きな値をとる周期関数を疑似量子化学習中の重みパラメータの勾配に乗じることによって、量子化値の積極的な変化を促すことを提案する。なお、本発明の実施形態では、ニューラルネットワークの処理層に対して直前の活性化関数から入力されるデータ(入力特徴量)を「活性」とも言う。さらに、本発明の実施形態では、ニューラルネットワークの重みパラメータを単に「重み」とも言う。
【0035】
以上、本発明の実施形態の背景について説明した。
【0036】
(1.実施形態の詳細)
続いて、本発明の実施形態の詳細について説明する。
【0037】
(1-1.構成の説明)
まず、本発明の実施形態に係るニューラルネットワーク軽量化装置の構成例について説明する。
図2は、本発明の実施形態に係るニューラルネットワーク軽量化装置の機能構成例を示す図である。
図2に示されるように、本発明の実施形態に係るニューラルネットワーク軽量化装置10は、入力部100、修正部101、学習部102および出力部103を備える。
【0038】
ニューラルネットワーク軽量化装置10は、CPU(Central Processing Unit)などの演算装置を含み、図示しないメモリにより記憶されているプログラムがCPUによりRAM(Random Access Memory)に展開されて実行されることにより、その機能が実現され得る。このとき、当該プログラムを記録した、コンピュータに読み取り可能な記録媒体も提供され得る。あるいは、ニューラルネットワーク軽量化装置10は、専用のハードウェアにより構成されていてもよいし、複数のハードウェアの組み合わせにより構成されてもよい。
【0039】
(入力部100)
入力部100は、軽量化対象のニューラルネットワーク(第1のニューラルネットワーク)および軽量化対象のニューラルネットワークの学習に使用されるデータ(学習用データセット)を取得する。例えば、入力部100は、軽量化対象のニューラルネットワークおよび学習用データセットを、図示しないメモリから読み出すことによって取得してもよい。例えば、軽量化対象のニューラルネットワークは、学習前のニューラルネットワークの構造(モデル構造)であってよい。
【0040】
図3は、軽量化対象のニューラルネットワークの一例を示す図である。
図3に示されるように、軽量化対象のニューラルネットワークは、第1層から第N層(Nは2以上の整数)までの複数の層によって構成される。第1層には、入力データが入力され、第N層からは、出力データが出力される。第1層から第N層までの各層には、処理層が含まれており、第1層から第N層までの各層の次層には、活性化関数が挿入されている。第1層から第N層までの各層に含まれる処理層は、次層に含まれる活性化関数に対して出力を行う。
【0041】
図3に示された例では、第1層から第(N-1)層までの各層に含まれる処理層は、畳み込み層であり、第N層に含まれる処理層は、全結合層である。しかし、第1層から第N層までの各層に含まれる処理層の種類は、
図3に示された例に限定されない。例えば、軽量化対象のニューラルネットワークは、処理層として畳み込み層および全結合層の一方を、1または複数含んでもよいし、処理層として畳み込み層および全結合層のそれぞれを、1または複数含んでもよい。また、軽量化対象のニューラルネットワークは、畳み込み層以外かつ全結合層以外の処理層を含んでもよい。
【0042】
また、
図3には、軽量化対象のニューラルネットワークの第1層から第N層までの処理層によって使用される重みパラメータとして、重みパラメータw
1~w
Nが示されている。本発明の実施形態では、軽量化対象のニューラルネットワークの各処理層による演算に、16~32ビットの浮動小数点によってそれぞれ表現される入力特徴量および重みパラメータが使用される場合を想定する。しかし、軽量化対象のニューラルネットワークの各処理層によって使用される入力特徴量および重みパラメータそれぞれの形式は、かかる例に限定されない。
【0043】
図2に戻って説明を続ける。入力部100によって取得された軽量化対象のニューラルネットワークおよび学習用データセットは、修正部101に出力される。
【0044】
(修正部101)
修正部101は、入力部100から入力された軽量化対象のニューラルネットワークに基づいて、軽量化対象のニューラルネットワークに含まれる畳み込み層および全結合層の少なくとも一つの処理層を修正対象層として特定する。ここでは、第1層から第(N-1)層それぞれに含まれる畳み込み層と第N層に含まれる全結合層とを、修正対象層として特定する場合を想定する。しかし、特定される修正対象層は、かかる例に限定されない。例えば、軽量化対象のニューラルネットワークに含まれる畳み込み層および全結合層の一部のみを修正対象層として特定してもよい。
【0045】
例えば、修正部101は、軽量化対象のニューラルネットワークに含まれる畳み込み層および全結合層のうち、あらかじめ定められた一部の処理層のみを修正対象層として特定してもよい。一例として、最初の畳み込み層(すなわち、第1層に含まれる畳み込み層)、および、最後の畳み込み層(すなわち、第(N-1)層に含まれる畳み込み層)は、他の層の畳み込み層よりもニューラルネットワークの精度に与える影響が大きい可能性があるため、修正対象層として特定されなくてもよい。あるいは、規模が大きい(演算負荷が高い)畳み込み層および全結合層のみが修正対象層として特定されてもよい。
【0046】
修正部101は、修正対象層に対して(複数の修正対象層が特定された場合には、複数の修正対象層それぞれに対して)、量子化関数を導入する。例えば、量子化関数は、連続的な値を離散的な値(量子化値)に変換する関数を意味し得る。これによって、修正部101は、訓練対象のニューラルネットワーク(第2のニューラルネットワーク)を生成する。修正部101によって生成された訓練対象のニューラルネットワークおよび学習用データセットは、学習部102に出力される。
【0047】
(学習部102)
学習部102は、修正部101から入力された学習用データセットに基づいて、修正部101から入力された訓練対象のニューラルネットワークの訓練を行う。これによって、重みパラメータが最適化される。例えば、重みパラメータの最適化は、損失関数に基づく誤差逆伝播法(バックプロパゲーション)などを用いて、重みパラメータが更新されることによって実現され得る。
【0048】
より詳細に、学習部102は、訓練対象のニューラルネットワークに属する重みパラメータに対する損失関数の勾配と勾配に対する修正関数とに基づいて、重みパラメータを更新して訓練対象のニューラルネットワークの訓練を行う。本発明の実施形態においては、修正関数の例として、周期関数が用いられる場合を主に想定する。しかし、修正関数は周期関数以外の関数であってもよい。なお、本明細書では、学習用データセットに適応するように重みパラメータを調整することを「ニューラルネットワークの訓練を行う」とも言う。
【0049】
また、重みパラメータの初期値には、乱数が使用されてよいが、軽量化対象のニューラルネットワークの訓練済みの重みパラメータがあれば、訓練済みの重みパラメータが初期値として利用されてもよい。学習部102による訓練後のニューラルネットワークは、出力部103に出力される。
【0050】
(出力部103)
出力部103は、学習部102から入力された訓練後のニューラルネットワークを出力する。訓練後のニューラルネットワークは、どのように出力されてもよい。例えば、出力部103は、ニューラルネットワークを記録媒体に出力することによって、記録媒体にニューラルネットワークを記録してもよい。あるいは、出力部103は、ニューラルネットワークを通信装置に出力することによって、通信装置を介してニューラルネットワークを他の装置に送信してもよい。
【0051】
(1-2.動作の説明)
続いて、本発明の実施形態に係るニューラルネットワーク軽量化装置10の動作例について説明する。上記したように、入力部100によって、軽量化対象のニューラルネットワーク(
図3)および学習用データセットが取得される。ここでは一例として、学習用データとして2次元画像が使用される場合を想定する。このとき、軽量化対象のニューラルネットワークに含まれる第l(エル)層の畳み込み層によって行われる演算は、下記の数式(1)のように示される。
【0052】
【0053】
ここで、alは、浮動小数点によって表現され、第l(エル)層の畳み込み層への入力特徴量(活性)を示し、wlは、浮動小数点によって表現され、第l層の畳み込み層によって使用される重みパラメータを示す。添え字i、j、n、mは、それぞれ出力チャネル、入力チャネル、画像の幅、画像の高さを示し、conv()は、活性化関数を示している。ただし、数式(1)において第(l+1)層への活性ai
l+1に対応する画像の幅と画像の高さを示す添え字は省略されている。数式(1)に示されるように、重みパラメータと入力特徴量との内積が計算された後に、活性化関数が適用される。例えば、活性化関数にはランプ関数などが利用されてよい。また、活性化関数の適用前にバッチ正規化が適用されてもよい。
【0054】
図4は、修正部101の動作例を示すフローチャートである。
図4に示された例では、第1層から第(N-1)層それぞれに含まれる畳み込み層と第N層に含まれる全結合層とが修正対象層として特定される場合を想定する。しかし、上記したように、特定される修正対象層は、かかる例に限定されない。
【0055】
まず、修正部101は、入力部100から入力された軽量化対象のニューラルネットワークに基づいて、修正対象層を特定する(S110)。修正部101は、修正対象層に対して量子化関数を導入する(S111)。以下では、一例として畳み込み層に対する量子化関数の導入例について主に説明する。しかし、他の処理層(例えば、全結合層など)に対する量子化関数の導入も、畳み込み層に対する量子化関数の導入と同様に行われてよい。
【0056】
図5は、量子化関数が導入される前の畳み込み層の演算構成の例を示す図である。
図5に示されるように、第l層の畳み込み層202には、入力a
lおよび重みパラメータw
lが入力され、第l層の畳み込み層202によって数式(1)に示した畳み込み演算が行われ、第l層の畳み込み層202から出力a
l+1が出力される。入力a
lは第l層への入力特徴量に該当し、出力a
l+1は第(l+1)層への入力特徴量に該当する。
【0057】
図6は、量子化関数が導入された後の畳み込み層の演算構成の例を示す図である。
図6に示されるように、畳み込み層202に対する量子化関数204の導入によって、重みパラメータw
lおよび入力特徴量a
lそれぞれに対して量子化関数が導入され得る。これによって、浮動小数点によって表現された重みパラメータw
lおよび入力特徴量a
lが量子化され得る(2値などの少ないビット数によって表現され得る)。
【0058】
なお、
図6に示された例では、重みパラメータw
lおよび入力特徴量a
lの両方に対して量子化関数が導入されている。しかし、重みパラメータw
lに対してのみ量子化関数が導入されるだけでもメモリ使用量が削減されると考えられる。そのため、入力特徴量a
lに対しては量子化関数が導入されなくてもよい。
【0059】
ここで、量子化関数はどのように表現されてもよい。一例として、量子化関数qが浮動小数点によって表現される第l層の重みパラメータwlをkビットの符号付き整数に量子化する場合には、量子化関数qは下記の数式(2)のように示される。
【0060】
【0061】
ただし、c=(2k-1-1)/sであり、round関数は浮動小数点によって表現される値を四捨五入などによって整数に丸める関数である。疑似量子化学習では、浮動小数点によって表現される値に対してround関数の適用後に、浮動小数点によって表現されるクリッピング係数sを乗じて浮動小数点に戻す形態が採られる。例えば、クリッピング係数sとしては、入力の絶対値の最大値max(|wl|)が使用されてもよいし、学習可能なパラメータが使用されてもよい。
【0062】
なお、第l層への入力特徴量alに対して導入される量子化関数も同様に表現され得る。量子化関数204によって重みパラメータおよび入力特徴量の両方が量子化された後の畳み込み演算は、推論時に整数演算に変換され得る。この量子化方法は、非特許文献1に記載の方法と同様である。
【0063】
図4に戻って説明を続ける。修正部101は、量子化関数が導入されていない修正対象層が存在する場合には(S112において「NO」)、S111に動作を移行させる。一方、修正部101は、修正対象層の全部に対して、量子化関数を導入し終わった場合には(S112において「YES」)、修正を終了する。修正部101は、量子化関数の導入によって生成した訓練対象のニューラルネットワークおよび学習用データセットを、学習部102に出力する。
【0064】
学習部102は、修正部101から入力された訓練対象のニューラルネットワークの重みパラメータを初期化し、修正部101から入力された学習用データセットに基づいて、訓練対象のニューラルネットワークの訓練を行う。これによって、重みパラメータが最適化される。例えば、重みパラメータの最適化は、確率的勾配降下法などを利用した誤差逆伝播法などを用いて、重みパラメータが更新されることによって実現され得る。
【0065】
以下では、第l層の重みパラメータwlの最適化について主に説明する。しかし、第l層の重みパラメータwlの最適化と同様の手法によって、第l層以外の重みパラメータも最適化され得る。損失関数をLとしたとき、第l層の重みパラメータwlに対する損失関数Lの勾配は、下記の数式(3)に示すように表現され得る。
【0066】
【0067】
ここで、量子化関数qは、round関数を含むため、微分不可能である。しかし、非特許文献1に記載のように、その偏微分∂q(wl)/∂wl=1としてよい。
【0068】
より詳細に、学習部102は、第l層の重みパラメータwlに対する損失関数の勾配と勾配に対する修正関数とに基づいて、第l層の重みパラメータwlを更新して訓練対象のニューラルネットワークの訓練を行う。これによって、勾配が修正されながら重みパラメータが最適化されるため、量子化後の重みパラメータの値(量子化値)の変化が促される。
【0069】
修正関数は、勾配に対してどのように施されてもよい。例えば、学習部102は、重みパラメータwlに対する損失関数Lの勾配と修正関数の出力値との間における所定の演算に基づいて重みパラメータwlを更新する。所定の演算は、加算であってもよいし、乗算であってもよい。以下では、重みパラメータwlに対する損失関数Lの勾配と修正関数の出力値とが乗算される場合を主に想定する。
【0070】
また、上記したように、本発明の実施形態においては、修正関数の例として周期関数が用いられる場合を主に想定する。特に、周期関数が、量子化値の間隔(すなわち、隣接し合う量子化値同士の間隔)を周期とする関数である場合を想定する。これによって、量子化後の重みパラメータの値(量子化値)の変化がより確実に促される。
【0071】
ここで、周期関数をfとし、更新前の重みパラメータをwold
lとし、更新後の重みパラメータをwnew
lとする。このとき、更新前の重みパラメータをwold
lに対する損失関数Lの勾配と周期関数fの出力値とが乗算される場合を考えると、更新後の重みパラメータwnew
lは、下記の数式(4)に示されるように表現され得る。
【0072】
【0073】
ただし、ηは任意の学習率である。例えば、周期関数fの例としては、下記の数式(5)で表現される関数が用いられ得る。更新前の重みパラメータw
old
lは、浮動小数点によって表現される値であり、量子化関数204(
図6)に入力される値である。すなわち、数式(4)において、周期関数fは、量子化関数の入力値w
old
lに基づいて周期関数fの出力値を決定する関数である。
【0074】
【0075】
パラメータα、β、γ、p、qとしては任意の値を採用することができる。
【0076】
図7は、周期関数fの例を示す図である。
図7に示されたグラフは、α=1.0、β=0.5、γ=3.0、p=c、q=0.75である場合における、上記の数式(5)によって示される周期関数fの入力値w
old
lと出力値f(w
old
l)との関係を示している。量子化関数の出力値が変化する重みパラメータw
old
lの位置である遷移点は、±0.5、±1.5であり、量子化値は、0、±1、±2である。
図7を参照すると、周期関数fの1周期は、量子化値の間隔と等しくなっている。
【0077】
特に、
図7に示された例では、周期関数fは、周期関数fの入力値w
old
lが遷移点に近いほど大きい出力値を出力し、遷移点から遠いほど小さい出力値を出力する。したがって、このような性質を有する周期関数fは、遷移点に近い重みパラメータw
old
lの更新量を大きくし、逆に遷移点から遠い重みパラメータw
old
lの更新量を小さくする働きをする。
【0078】
図8は、周期関数fによる修正がなされる前の勾配に基づいて算出された重みパラメータの更新量を示す図である。
図8に示されるように、周期関数fによって勾配が修正されない場合においては、重みパラメータの更新量は遷移点との関係を持たない。そのため、重みパラメータの更新が何度も繰り返されなければ更新後の重みパラメータが遷移点を越えずに、量子化関数が同じ量子化値を出力し続けてしまうため、学習効率が向上しにくい状況である。
【0079】
図9は、周期関数fによる修正がなされた後の勾配に基づいて算出された重みパラメータの更新量を示す図である。
図9に示されるように、遷移点に近いほど重みパラメータの更新量が大きくなることによって、重みパラメータの更新の繰り返し回数が比較的少なくても、更新後の重みパラメータが遷移点を越えるようになる。したがって、学習効率が改善されることが期待される。
【0080】
学習部102は、損失関数が収束したと判定した場合には、訓練対象のニューラルネットワークの学習を終了する。例えば、損失関数またはその変化が閾値よりも小さくなった場合に、損失関数が収束したと判定されてもよい。訓練後のニューラルネットワークは、出力部103に出力される。出力部103は、学習部102から入力された訓練後のニューラルネットワークを出力する。
【0081】
(1-3.効果の説明)
本発明の実施形態によれば、入力部100と、修正部101と、学習部102と、出力部103とを備える、ニューラルネットワーク軽量化装置10が提供される。入力部100は、軽量化対象のニューラルネットワークを取得する。そして、修正部101は、軽量化対象のニューラルネットワークに含まれる畳み込み層および全結合層の少なくとも一つの処理層を修正対象層として特定し、修正対象層に対して量子化関数を導入して訓練対象のニューラルネットワークを生成する。
【0082】
学習部102は、修正対象層の重みパラメータに対する損失関数の勾配と勾配に対する修正関数とに基づいて重みパラメータを更新して訓練対象のニューラルネットワークの訓練を行う。そして、出力部103は、訓練後のニューラルネットワークを出力する。かかる構成によれば、精度劣化を抑制した量子化ニューラルネットワークを構築することが可能となる。
【0083】
以上、本発明の実施形態について説明した。
【0084】
(2.各種の変形例)
以上、添付図面を参照しながら本発明の好適な実施形態について詳細に説明したが、本発明はかかる例に限定されない。本発明の属する技術の分野における通常の知識を有する者であれば、特許請求の範囲に記載された技術的思想の範疇内において、各種の変更例または修正例に想到し得ることは明らかであり、これらについても、当然に本発明の技術的範囲に属するものと了解される。
【0085】
例えば、上記では、周期関数が、量子化関数の入力値に基づいて周期関数の出力値を決定する関数である場合について主に説明した。しかし、周期関数への入力は、かかる例に限定されない。周期関数は、量子化関数の入力値の統計量に基づいて周期関数の出力値を決定してもよい。あるいは、周期関数は、量子化関数の出力値の統計量に基づいて周期関数の出力値を決定してもよい。
【0086】
例えば、学習部102は、量子化関数の入力値の過去のデータが蓄積されている場合、蓄積されている過去のデータに基づいて統計量を算出してよい。過去のデータが蓄積される期間などは特に限定されない。また、統計量としては、種々の統計量が採用され得る。例えば、統計量としては、平均値が用いられてもよいし、中央値が用いられてもよい。あるいは、統計量としては、ノルム(例えば、L1ノルム、L2ノルムなど)が用いられてもよい。
【0087】
また、上記では、修正関数の例として、修正関数の入力値が遷移点に近いほど大きい出力値を出力し、遷移点から遠いほど小さい出力値を出力する関数が用いられる場合について主に説明した。しかし、修正関数として、修正関数の入力値が量子化値に近いほど大きい出力値を出力し、量子化値から遠いほど小さい出力値を出力する関数が用いられてもよい。このような構成によっても、更新後の重みパラメータが遷移点を越えることが促され、量子化値の変化が促される。なお、例えば、入力値が量子化値に近いほど大きい出力値を出力する修正関数は、上記した数式(5)においてqを0.5だけ増加させるなどして、入力値が遷移点に近いほど大きい出力値を出力する関数の位相をπずらすことによって実現され得る。
【0088】
さらに、上記では、量子化関数として一様量子化関数を用いる量子化ニューラルネットワークを例に説明した。しかし、本発明の実施形態は、非一様量子化関数を用いる量子化ニューラルネットワークにも適用され得る。例えば、学習部102は、非一様量子化関数においてround関数が適用される直前の値を入力に取る周期関数を使って重みパラメータの更新量を修正してもよい。
【0089】
また、上記では、重みパラメータのみが考慮された勾配に対して周期関数による修正が行われる場合について説明した。しかし、重みパラメータだけではなく入力特徴量も量子化される場合には、重みパラメータに追加して入力特徴量も考慮された勾配に対して周期関数による修正がなされてもよい。このとき、周期関数による修正がなされる勾配としては、数式(3)の代わりに、下記の数式(6)が採用され得る。
【0090】
【0091】
なお、重みパラメータに追加して入力特徴量も考慮された勾配に対して修正がなされる場合であっても、重みパラメータの更新量は、数式(4)によって算出され得る。
【0092】
(3.ハードウェア構成例)
続いて、本発明の実施形態に係るニューラルネットワーク軽量化装置10のハードウェア構成例について説明する。以下では、本発明の実施形態に係るニューラルネットワーク軽量化装置10のハードウェア構成例として、情報処理装置900のハードウェア構成例について説明する。なお、以下に説明する情報処理装置900のハードウェア構成例は、ニューラルネットワーク軽量化装置10のハードウェア構成の一例に過ぎない。したがって、ニューラルネットワーク軽量化装置10のハードウェア構成は、以下に説明する情報処理装置900のハードウェア構成から不要な構成が削除されてもよいし、新たな構成が追加されてもよい。
【0093】
図10は、本発明の実施形態に係るニューラルネットワーク軽量化装置10の例としての情報処理装置900のハードウェア構成を示す図である。情報処理装置900は、CPU(Central Processing Unit)901と、ROM(Read Only Memory)902と、RAM(Random Access Memory)903と、ホストバス904と、ブリッジ905と、外部バス906と、インタフェース907と、入力装置908と、出力装置909と、ストレージ装置910と、通信装置911と、を備える。
【0094】
CPU901は、演算処理装置および制御装置として機能し、各種プログラムに従って情報処理装置900内の動作全般を制御する。また、CPU901は、マイクロプロセッサであってもよい。ROM902は、CPU901が使用するプログラムや演算パラメータ等を記憶する。RAM903は、CPU901の実行において使用するプログラムや、その実行において適宜変化するパラメータ等を一時記憶する。これらはCPUバス等から構成されるホストバス904により相互に接続されている。
【0095】
ホストバス904は、ブリッジ905を介して、PCI(Peripheral Component Interconnect/Interface)バス等の外部バス906に接続されている。なお、必ずしもホストバス904、ブリッジ905および外部バス906を分離構成する必要はなく、1つのバスにこれらの機能を実装してもよい。
【0096】
入力装置908は、マウス、キーボード、タッチパネル、ボタン、マイクロフォン、スイッチおよびレバー等ユーザが情報を入力するための入力手段と、ユーザによる入力に基づいて入力信号を生成し、CPU901に出力する入力制御回路等から構成されている。情報処理装置900を操作するユーザは、この入力装置908を操作することにより、情報処理装置900に対して各種のデータを入力したり処理動作を指示したりすることができる。
【0097】
出力装置909は、例えば、CRT(Cathode Ray Tube)ディスプレイ装置、液晶ディスプレイ(LCD)装置、OLED(Organic Light Emitting Diode)装置、ランプ等の表示装置およびスピーカ等の音声出力装置を含む。
【0098】
ストレージ装置910は、データ格納用の装置である。ストレージ装置910は、記憶媒体、記憶媒体にデータを記録する記録装置、記憶媒体からデータを読み出す読出し装置および記憶媒体に記録されたデータを削除する削除装置等を含んでもよい。ストレージ装置910は、例えば、HDD(Hard Disk Drive)で構成される。このストレージ装置910は、ハードディスクを駆動し、CPU901が実行するプログラムや各種データを格納する。
【0099】
通信装置911は、例えば、ネットワークに接続するための通信デバイス等で構成された通信インタフェースである。また、通信装置911は、無線通信または有線通信のどちらに対応してもよい。
【0100】
以上、本発明の実施形態に係るニューラルネットワーク軽量化装置10のハードウェア構成例について説明した。
【符号の説明】
【0101】
10 ニューラルネットワーク軽量化装置
100 入力部
101 修正部
102 学習部
103 出力部