(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-10-21
(45)【発行日】2024-10-29
(54)【発明の名称】学習装置、学習方法、及びプログラム
(51)【国際特許分類】
G06N 3/08 20230101AFI20241022BHJP
G06N 3/0495 20230101ALI20241022BHJP
【FI】
G06N3/08
G06N3/0495
(21)【出願番号】P 2023522144
(86)(22)【出願日】2021-05-20
(86)【国際出願番号】 JP2021019268
(87)【国際公開番号】W WO2022244216
(87)【国際公開日】2022-11-24
【審査請求日】2023-08-21
(73)【特許権者】
【識別番号】000004226
【氏名又は名称】日本電信電話株式会社
(74)【代理人】
【識別番号】110004381
【氏名又は名称】弁理士法人ITOH
(74)【代理人】
【識別番号】100107766
【氏名又は名称】伊東 忠重
(74)【代理人】
【識別番号】100070150
【氏名又は名称】伊東 忠彦
(74)【代理人】
【識別番号】100124844
【氏名又は名称】石原 隆治
(72)【発明者】
【氏名】加来 宗一郎
(72)【発明者】
【氏名】西田 京介
(72)【発明者】
【氏名】吉田 仙
【審査官】真木 健彦
(56)【参考文献】
【文献】国際公開第2018/016608(WO,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06N 3/00 - 99/00
IEEE Xplore
(57)【特許請求の範囲】
【請求項1】
ニューラルネットワークモデルにより所定のタスクの推論を行う推論部と、
複数の3値ベクトルを用いて、前記ニューラルネットワークモデルを構成する各層への入力を表す活性化を3値化する3値化部と、
前記ニューラルネットワークモデルのモデルパラメータと、前記活性化を3値で表現するための3値化パラメータとを学習する学習部と、
を有
し、
前記3値化部は、
前記層毎に、前記層への入力を表す活性化と、スカラー値と-1、0、+1のいずれかを各要素に持つ3値ベクトルとの積のn(ただし、nは予め決められた自然数)個の和との距離を最小化するような前記スカラー値と前記3値ベクトルとを帰納的に繰り返し計算し、
前記学習部は、
前記スカラー値との移動平均により前記3値化パラメータを学習する、学習装置。
【請求項2】
ニューラルネットワークモデルにより所定のタスクの推論を行う推論部と、
複数の3値ベクトルを用いて、前記ニューラルネットワークモデルを構成する各層への入力を表す活性化を3値化する3値化部と、
前記ニューラルネットワークモデルのモデルパラメータと、前記活性化を3値で表現するための3値化パラメータとを学習する学習部と、
を有し、
前記3値化部は、
前記層毎に、前記3値化パラメータを持つ量子化関数により、前記層への入力を表す活性化を3値化し、
前記学習部は、
前記3値化パラメータに関する前記量子化関数の疑似的な勾配を用いて、誤差逆伝播法により前記3値化パラメータを学習する
、学習装置。
【請求項3】
前記3値化パラメータは、第1の3値化パラメータと、第2の3値化パラメータとで構成され、
第1のスカラー値と-1、0、+1のいずれかを各要素に持つ第1の3値ベクトルとの積と、第2のスカラー値と-1、0、+1のいずれかを各要素に持つ第2の3値ベクトルとの積との和を最小化するような前記第1のスカラー値と前記第2のスカラー値と前記第1の3値ベクトルと前記第2の3値ベクトルとを計算し、前記第1のスカラー値と前記第2のスカラー値とをそれぞれ前記第1の3値化パラメータと前記第2の3値化パラメータの初期値とする初期化部を有し、
前記3値化部は、
前記層毎に、前記3値化パラメータを持つ量子化関数により、前記第1の3値化パラメータと前記第1の3値ベクトルとの積と、前記第2の3値化パラメータと前記第2の3値ベクトルとの積との和で前記層への入力を表す活性化を3値化し、
前記学習部は、
前記第1の3値化パラメータに関する前記量子化関数の疑似的な勾配と、前記第2の3値化パラメータに関する前記量子化関数の疑似的な勾配とを用いて、前記3値化パラメータを学習する、請求項
2に記載の学習装置。
【請求項4】
ニューラルネットワークモデルにより所定のタスクの推論を行う推論手順と、
複数の3値ベクトルを用いて、前記ニューラルネットワークモデルを構成する各層への入力を表す活性化を3値化する3値化手順と、
前記ニューラルネットワークモデルのモデルパラメータと、前記活性化を3値で表現するための3値化パラメータとを学習する学習手順と、
をコンピュータが実行
し、
前記3値化手順は、
前記層毎に、前記層への入力を表す活性化と、スカラー値と-1、0、+1のいずれかを各要素に持つ3値ベクトルとの積のn(ただし、nは予め決められた自然数)個の和との距離を最小化するような前記スカラー値と前記3値ベクトルとを帰納的に繰り返し計算し、
前記学習手順は、
前記スカラー値との移動平均により前記3値化パラメータを学習する、学習方法。
【請求項5】
ニューラルネットワークモデルにより所定のタスクの推論を行う推論手順と、
複数の3値ベクトルを用いて、前記ニューラルネットワークモデルを構成する各層への入力を表す活性化を3値化する3値化手順と、
前記ニューラルネットワークモデルのモデルパラメータと、前記活性化を3値で表現するための3値化パラメータとを学習する学習手順と、
をコンピュータが実行し、
前記3値化手順は、
前記層毎に、前記3値化パラメータを持つ量子化関数により、前記層への入力を表す活性化を3値化し、
前記学習手順は、
前記3値化パラメータに関する前記量子化関数の疑似的な勾配を用いて、誤差逆伝播法により前記3値化パラメータを学習する、学習方法。
【請求項6】
コンピュータを、請求項1乃至
3の何れか一項に記載の学習装
置として機能させるプログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、学習装置、学習方法、及びプログラムに関する。
【背景技術】
【0002】
近年、ニューラルネットワークモデルの性能向上が注目を集めているが、同時にニューラルネットワークモデルのパラメータ数と計算量が増加傾向にある。このため、ニューラルネットワークモデルの精度低下を抑えながら、軽量化・高速化を目指す研究が学術界と商業界の双方で注目を集めている。なお、ニューラルネットワークモデルには多数の線形変換が含まれ、特に、それらの線形変換を行う際の行列演算が計算時間に影響している。
【0003】
ニューラルネットワークモデルの軽量化・高速化に関する研究の1つとして、ニューラルネットワークモデルの重みと活性化を量子化する手法が知られている。ここで、量子化とは、通常32bitで表現されるfloat値をより少ないbit数(例えば、2ビットや8ビット等)で近似して表現することである。量子化は低ビット化とも呼ばれる。なお、活性化とは、ニューラルネットワークモデルの各層へ入力されるベクトルのことである。
【0004】
ニューラルネットワークモデルの重みと活性化の量子化に関する従来手法としては、例えば、非特許文献1や非特許文献2に記載されている手法が知られている。非特許文献1及び2ではいずれもBERT(Bidirectional Encoder Representations from Transformers)
と呼ばれる言語モデルの重みを3値化、活性化を8bit化している。なお、3値化とは、後述するように、実数値をスカラー値と3つの整数値のいずれかとの積(又は複数個の積の和)で近似することをいう。
【先行技術文献】
【非特許文献】
【0005】
【文献】Wei Zhang, Lu Hou, Yichun Yin, Lifeng Shang, Xiao Chen, Xin Jiang, Qun Liu. TernaryBERT: Distillation-aware Ultra-low Bit BERT
【文献】Jing Jin, Cai Liang, TianchengWu, Liqin Zou, Zhiliang Gan. KDLSQ-BERT: A Quantized Bert Combining Knowledge Distillation with Learned Step Size Quantization
【発明の概要】
【発明が解決しようとする課題】
【0006】
ニューラルネットワークモデルの重みと活性化の両方を3値化(2bit化)すれば、より軽量化・高速化を図ることができると考えられる。しかしながら、量子化では、精度維持と軽量化・高速化とがトレードオフの関係にある。特に、活性化を2値、3値等の低ビットで表現する場合は精度維持が困難となる。
【0007】
本発明の一実施形態は、上記の点に鑑みてなされたもので、ニューラルネットワークモデルの活性化を高精度に3値化することを目的とする。
【課題を解決するための手段】
【0008】
上記目的を達成するため、一実施形態に係る学習装置は、ニューラルネットワークモデルにより所定のタスクの推論を行う推論部と、複数の3値ベクトルを用いて、前記ニューラルネットワークモデルを構成する各層への入力を表す活性化を3値化する3値化部と、前記ニューラルネットワークモデルのモデルパラメータと、前記活性化を3値で表現するための3値化パラメータとを学習する学習部と、を有する。
【発明の効果】
【0009】
ニューラルネットワークモデルの活性化を高精度に3値化することができる。
【図面の簡単な説明】
【0010】
【
図1】本実施形態に係る推論装置のハードウェア構成の一例を示す図である。
【
図2】推論時における推論装置の機能構成の一例を示す図である。
【
図3】学習時における推論装置の機能構成の一例を示す図である。
【
図4】実施例1における推論処理の一例を示すフローチャートである。
【
図5】実施例1における学習処理の一例を示すフローチャートである。
【
図6】実施例2における推論処理の一例を示すフローチャートである。
【
図7】従来手法の3値化ベクトルとの比較例を示す図である。
【
図8】実施例2における学習処理の一例を示すフローチャートである。
【
図9】従来手法の疑似勾配との比較例を示す図である。
【発明を実施するための形態】
【0011】
以下、本発明の一実施形態について説明する。本実施形態では、ニューラルネットワークモデルの活性化を高精度に3値化し、そのニューラルネットワークモデルにより所定のタスクの推論を実行する推論装置10について説明する。ここで、ニューラルネットワークモデルの活性化を量子化する際には、ニューラルネットワークモデルの重みも量子化されることが一般的であるため、以下では、重みは既知の量子化技術により量子化(例えば、2値化、3値化等)されているものとする。重みの量子化には軽量化の効果があり、更に重みと活性化の両方を量子化した場合には線形変換を行う際の行列演算を専用の実装で行うことで高速化を図ることができると考えられる。特に、2値化、3値化では論理値演算を利用した大幅に高速な行列演算の実装が期待できる。
【0012】
なお、2値化とは実数値をスカラー値と2つの整数値(例えば、{-1,1})のいずれかとの積のn個の和で近似することをいい、3値化とは実数値をスカラー値と3つの整数値(例えば、{-1,0,1})のいずれかとの積のn個の和で近似することをいう。ただし、スカラー値は0より大きい実数値、nは自然数である。
【0013】
<ハードウェア構成>
まず、本実施形態に係る推論装置10のハードウェア構成について、
図1を参照しながら説明する。
図1は、本実施形態に係る推論装置10のハードウェア構成の一例を示す図である。
【0014】
図1に示すように、本実施形態に係る推論装置10は一般的なコンピュータ又はコンピュータシステムのハードウェア構成で実現され、入力装置101と、表示装置102と、外部I/F103と、通信I/F104と、プロセッサ105と、メモリ装置106とを有する。これらの各ハードウェアは、それぞれがバス107により通信可能に接続される。
【0015】
入力装置101は、例えば、キーボードやマウス、タッチパネル等である。表示装置102は、例えば、ディスプレイ等である。なお、推論装置10は、入力装置101及び表示装置102のうちの少なくとも一方を有していなくてもよい。
【0016】
外部I/F103は、記録媒体103a等の外部装置とのインタフェースである。推論装置10は、外部I/F103を介して、記録媒体103aの読み取りや書き込み等を行うことができる。なお、記録媒体103aとしては、例えば、CD(Compact Disc)、DVD(Digital Versatile Disk)、SDメモリカード(Secure Digital memory card)、USB(Universal Serial Bus)メモリカード等が挙げられる。
【0017】
通信I/F104は、推論装置10を通信ネットワークに接続するためのインタフェースである。プロセッサ105は、例えば、CPU(Central Processing Unit)やGPU(Graphics Processing Unit)等の各種演算装置である。メモリ装置106は、例えば、HDD(Hard Disk Drive)やSSD(Solid State Drive)、RAM(Random Access Memory)、ROM(Read Only Memory)、フラッシュメモリ等の各種記憶装置である。
【0018】
本実施形態に係る推論装置10は、
図1に示すハードウェア構成を有することにより、後述する推論処理や学習処理を実現することができる。なお、
図1に示すハードウェア構成は一例であって、推論装置10は、他のハードウェア構成を有していてもよい。例えば、推論装置10は、複数のプロセッサ105を有していてもよいし、複数のメモリ装置106を有していてもよい。
【0019】
<機能構成>
本実施形態に係る推論装置10には、学習時と推論時の2つのフェーズが存在する。学習時では、ニューラルネットワークモデルのパラメータ(以下、「モデルパラメータ」ともいう。)と、活性化を3値化するためのパラメータ(以下、「3値化パラメータ)ともいう。)とを学習する。推論時では、学習済みモデルパラメータと学習済み3値化パラメータとを用いて、活性化を3値化すると共に、ニューラルネットワークモデルにより推論を行う。
【0020】
なお、学習時における推論装置10は、「学習装置」等と呼ばれてもよい。また、学習時における推論装置10と推論時における推論装置10は異なる装置又はシステムで実現されていてもよい。
【0021】
≪推論時≫
推論時における推論装置10の機能構成について、
図2を参照しながら説明する。
図2は、推論時における推論装置10の機能構成の一例を示す図である。
【0022】
図2に示すように、推論時における推論装置10は、3値化部201と、推論部202とを有する。これら各部は、推論時における推論装置10にインストールされた1以上のプログラムが、プロセッサ105に実行させる処理により実現される。
【0023】
3値化部201は、学習済み3値化パラメータを用いて、ニューラルネットワークモデルの各層の活性化を3値化する。すなわち、3値化部201は、学習済み3値化パラメータを用いて、ニューラルネットワークモデルの各層に入力される実数値ベクトルの各要素を3値化した3値化ベクトルを作成し、この3値化ベクトルを活性化としてニューラルネットワークモデルに出力する。なお、学習済み3値化パラメータはニューラルネットワークモデルの層毎に存在し、例えば、メモリ装置106等に格納されている。
【0024】
推論部202は、ニューラルネットワークモデルで実現され、学習済みモデルパラメータを用いて、所定のタスクの推論を行う。すなわち、推論部202は、ニューラルネットワークモデルの各層において、3値化部201で作成された3値化ベクトルを入力として、学習済みモデルパラメータを用いて、当該層の出力ベクトルとして実数値ベクトルを出力する。このとき、ニューラルネットワークモデルの最終層(出力層)の出力(又は、それに対して所定の処理を行った結果)が推論結果となる。なお、学習済みモデルパラメータはニューラルネットワークモデルの層毎に存在し、例えば、メモリ装置106等に格納されている。
【0025】
ここで、ニューラルネットワークモデルは、一般に、複数の層で構成されており、各層にはニューロン(又は、ユニット、ノード等とも呼ばれる。)が存在する。また、各層の間にはニューロン同士の結合の強さを表す重みが存在する。ニューラルネットワークモデルの層が線形層(又は、全結合層)と呼ばれるものである場合、その層に存在するニューロンでは、以下の操作1~操作3が行われる。
【0026】
操作1:当該層に入力された入力ベクトル(活性化)の重み付き和を計算
操作2:バイアス項を加算
操作3:活性化関数(例えば、ReLu等)を計算
このとき、ニューラルネットワークモデルの計算時間は、上記の操作1の重み付き和の計算に要する時間が支配的である。上記の操作1の重み付き和は、重みを表すベクトル(重みベクトル)をw=(w1,w2,・・・,wdim)、入力ベクトルをv=(v1,v2,・・・,vdim)とすると、vとwの内積、つまりw1v1+・・・+wdimvdimとなる。このため、大量の積演算wkvk(k=1,・・・,dim)に要する時間を削減できれば、ニューラルネットワークモデルの計算時間を削減することが可能となる。なお、dimはベクトルの次元数である。
【0027】
例えば、参考文献1では、float値(32bit)同士の積演算wkvkに比べて、2値と3値の積演算wkvk(例えば、wk∈{-1,1},vk∈{-1,0,1})の方が理論的に40倍速く計算できることが示されている。なお、この例に限らず、重みと活性化の両方を低bit化した場合は操作1の積演算が高速化されることが期待できる。
【0028】
上述したように、本実施形態では、ニューラルネットワークモデルの重みを既知の量子化技術より量子化(特に、2値化や3値化等といった低bitで表現する量子化)しており、活性化を3値化するため、ニューラルネットワークモデルの計算時間を削減することが可能となる。
【0029】
≪学習時≫
学習時における推論装置10の機能構成について、
図3を参照しながら説明する。
図3は、学習時における推論装置10の機能構成の一例を示す図である。
【0030】
図3に示すように、学習時における推論装置10は、3値化部201と、推論部202と、学習部203とを有する。これら各部は、学習時における推論装置10にインストールされた1以上のプログラムが、プロセッサ105に実行させる処理により実現される。
【0031】
3値化部201及び推論部202は、推論時と同様である。ただし、学習済みでない3値化パラメータ及び学習済みでないモデルパラメータをそれぞれ用いる点が推論時と異なる。なお、3値化パラメータはニューラルネットワークモデルの層毎に存在し、例えば、メモリ装置106等に格納されている。同様に、モデルパラメータはニューラルネットワークモデルの層毎に存在し、例えば、メモリ装置106等に格納されている。
【0032】
学習部203は、3値化部201が活性化を3値化する際に用いる3値化パラメータの学習と、推論部202を実現するニューラルネットワークモデルのモデルパラメータの学習とを行う。
【0033】
[実施例1]
以下、本実施形態の実施例1について説明する。本実施例では、活性化をn個の3値ベクトルで近似する場合について説明する。すなわち、例えば、ニューラルネットワークモデルの或る層の活性化(実数値ベクトル)をX=(x1,x2,・・・,xdim)、当該層の3値化パラメータをA=(a1,a2,・・・,an)とすれば、この実数値ベクトルを3値化ベクトルa1B1+a2B2+・・・+anBnで近似する場合について説明する。ここで、ai(i=1,・・・,n)はai>0を満たすスカラー値、Bi(i=1,・・・,n)は各要素が-1,0,1のいずれかを取るベクトルである。
【0034】
なお、nの値が大きい方が活性化をより高精度に近似することが可能であるが、より多くのメモリ量と計算量が必要となる。
【0035】
<実施例1における推論処理>
推論時における推論装置10が実行する推論処理について、
図4を参照しながら説明する。
図4は、実施例1における推論処理の一例を示すフローチャートである。なお、以下では、3値化パラメータとモデルパラメータは学習済みであるものとする。
【0036】
ここで、
図4のステップS101~ステップS106はニューラルネットワークモデルの各層毎に繰り返し実行される。以下では、ニューラルネットワークモデルの或る層に関するステップS101~ステップS106について説明する。
【0037】
ステップS101:推論部202は、ニューラルネットワークモデルに与えられた実数値ベクトル又は1つ前の層の出力ベクトルである実数値ベクトルを入力する。ここで、推論部202は、当該層が最初の層(入力層)である場合はニューラルネットワークモデルに与えられた実数値ベクトルを入力し、それ以外の場合は1つ前の層の出力ベクトルである実数値ベクトルを入力する。なお、ニューラルネットワークモデルに与えられた実数値ベクトルとは、タスクの推論対象データのことである。
【0038】
ステップS102:3値化部201は、学習済み3値化パラメータを用いて、上記のステップS101で入力された実数値ベクトル(つまり、活性化)を3値化し、3値化ベクトルを作成する。このとき、3値化部201は、以下の手順1-1~手順1-3により3値化ベクトルを作成する。なお、上記のステップS101で入力された実数値ベクトルをX=(x1,x2,・・・,xdim)、当該層の学習済み3値化パラメータをA=(a1,a2,・・・,an)とする。また、各i=1,・・・,nに対してai>0であるものとする。
【0039】
手順1-1)まず、3値化部201は、X=X0とすると共に、量子化に用いる関数を
【0040】
【数1】
として、Q
a(X)=(Q
a(x
1),Q
a(x
2),・・・,Q
a(x
dim))とする。ただし、aはスカラー値である。
【0041】
そして、3値化部201は、
【0042】
【数2】
として、1つ目の3値ベクトルをa
1B
1とする。また、3値化部201は、X
1=X
0-a
1B
1とする。このとき、X
1は、1つ目の3値ベクトルa
1B
1で近似できなかった誤差と見做せる。
【0043】
手順1-2)次に、3値化部201は、i個目の3値ベクトルaiBi(i≧2)を帰納的に繰り返し計算する。すなわち、a1B1,・・・,ai-1Bi-1までの3値ベクトルが得られているとき、3値化部201は、Xi-1=Xi-2-ai-1Bi-1とした上で、
【0044】
【数3】
とする。そして、3値化部201は、i個目の3値ベクトルをa
iB
iとする。これにより、n個の3値ベクトルa
1B
1,・・・,a
nB
nが得られる。
【0045】
手順1-3)最後に、3値化部201は、a1B1+・・・+anBnを3値化ベクトルとする。これにより、当該層の活性化X=(x1,x2,・・・,xdim)をn個の3値ベクトルの和で近似した3値化ベクトルa1B1+・・・+anBnが得られる。
【0046】
ステップS103:推論部202は、当該層に含まれるニューロン毎に、学習済みモデルパラメータを用いて、上記のステップS102で作成された3値化ベクトルの重み付き和を計算する。すなわち、例えば、3値化ベクトルa1B1+・・・+anBnを(v1,v2,・・・,vdim)、当該層に含まれる或るニューロンと1つ前の層に含まれる各ニューロンとの間の重みを表す重みベクトルを(w1,w2,・・・,wdim)とすれば、推論部202は、w1v1+・・・+wdimvdimを計算する。なお、重みは学習済みモデルパラメータに含まれる。
【0047】
ステップS104:推論部202は、当該層に含まれるニューロン毎に、学習済みモデルパラメータを用いて、上記のステップS103で計算された重み付き和に対してバイアス項を加算する。すなわち、例えば、当該ニューロンのバイアス項をbとすれば、推論部202は、w1v1+・・・+wdimvdim+bを計算する。なお、バイアス項は学習済みモデルパラメータに含まれる。
【0048】
ステップS105:推論部202は、当該層に含まれるニューロン毎に、上記のステップS104の計算結果を用いて活性化関数を計算する。すなわち、例えば、当該ニューロンの活性化関数をσ(・)とすれば、推論部202は、σ(w1v1+・・・+wdimvdim+b)を計算する。
【0049】
ステップS106:推論部202は、当該層に含まれる各ニューロンの活性化関数値を要素とする出力ベクトル(実数値ベクトル)を次の層に出力する。すなわち、例えば、j番目のニューロンの活性化関数値をx'jとすれば、推論部202は、実数値ベクトルX'=(x'1,x'2,・・・,x'dim')を次の層に出力する。なお、dim'は次の層に出力される実数値ベクトルの次元数であり、当該層に含まれるニューロン数である。
【0050】
以上のステップS101~ステップS106が各層毎に繰り返し実行され、最終層の出力ベクトル(又は、当該出力ベクトルに対して、タスクに応じた所定の処理を行った結果)が推論結果となる。
【0051】
<実施例1における学習処理>
学習時における推論装置10が実行する学習処理について、
図5を参照しながら説明する。
図5は、実施例1における学習処理の一例を示すフローチャートである。なお、以下では、3値化パラメータとモデルパラメータは学習済みでないものとする。
【0052】
ここで、
図5のステップS201~ステップS207はニューラルネットワークモデルの各層毎に繰り返し実行される。以下では、ニューラルネットワークモデルの或る層に関するステップS201~ステップS207について説明する。
【0053】
ステップS201:推論部202は、
図4のステップS101と同様に、ニューラルネットワークモデルに与えられた実数値ベクトル又は1つ前の層の出力ベクトルである実数値ベクトルを入力する。なお、ニューラルネットワークモデルに与えられた実数値ベクトルとは、タスクの学習用データのことである。
【0054】
ステップS202:3値化部201は、3値化パラメータを用いて、上記のステップS201で入力された実数値ベクトル(つまり、活性化)を3値化し、3値化ベクトルを作成する。このとき、3値化部201は、以下の手順2-1~手順2-3により3値化ベクトルを作成する。なお、上記のステップS201で入力された実数値ベクトルをX=(x1,x2,・・・,xdim)とする。また、当該層の3値化パラメータをA=(a'1,a'2,・・・,a'n)とする。
【0055】
手順2-1)まず、3値化部201は、X=X0とすると共に、|X0-aB|2を最小化するようなスカラー値aと3値ベクトルBを求める。ここで、Bは各要素が-1,0,1のいずれかを取るベクトルである。また、|・|はL2ノルムである。ただし、|・|はL2ノルム以外の他の距離であってもよい。
【0056】
このとき、aとBは相互作用しており、厳密解を求めるのことは困難である(例えば、参考文献2等を参照)。そこで、本実施例では、参考文献3に記載されているalgorithm2を参考にニュートン法を用いて近似解を求める。これは、a又はBのいずれか一方が固定されたとき、|X0-aB|2を最小化する他方の値が計算可能であることを利用している。ただし、ニュートン法以外の他の手法により近似解を求めてもよい。
【0057】
そして、3値化部201は、このようして求めたスカラー値aをa1とすると共に3値ベクトルBをB1として、1つ目の3値ベクトルをa1B1とする。また、3値化部201は、X1=X0-a1B1とする。このとき、X1は、1つ目の3値ベクトルa1B1で近似できなかった誤差と見做せる。
【0058】
手順2-2)次に、3値化部201は、i個目の3値ベクトルaiBi(i≧2)を帰納的に繰り返し計算する。すなわち、a1B1,・・・,ai-1Bi-1までの3値ベクトルが得られているとき、3値化部201は、Xi-1=Xi-2-ai-1Bi-1とした上で、|Xi-1-aB|2を最小化するようなスカラー値aと3値ベクトルBを求める。これは、上記の手順2-1と同様の手法により近似解を求めればよい。
【0059】
そして、3値化部201は、このようにして求めたスカラー値aをaiとすると共に3値ベクトルBをBiとする。これにより、n個の3値ベクトルa1B1,・・・,anBnが得られる。
【0060】
手順2-3)最後に、3値化部201は、a1B1+・・・+anBnを3値化ベクトルとする。これにより、当該層の活性化X=(x1,x2,・・・,xdim)をn個の3値ベクトルの和で近似した3値化ベクトルa1B1+・・・+anBnが得られる。
【0061】
ステップS203:学習部203は、上記のステップS202で3値化ベクトルa1B1+・・・+anBnを作成した際に得られたスカラー値a1,・・・anを用いて、当該層の3値化パラメータA=(a'1,a'2,・・・,a'n)を更新する。
【0062】
具体的には、学習部203は、各i=1,・・・,nに対して、a'i=(1-γ)a'i+γaiによりa'iを更新する。ここで、γは0<γ<1を満たすパラメータである。すなわち、学習部203は、移動平均によりa'iを更新する。ただし、これは一例であって、他の方法により各層の3値化パラメータを更新してもよい。
【0063】
ステップS204:推論部202は、
図4のステップS103と同様に、当該層に含まれるニューロン毎に、モデルパラメータを用いて、上記のステップS202で作成された3値化ベクトルの重み付き和を計算する。
【0064】
ステップS205:推論部202は、
図4のステップS104と同様に、当該層に含まれるニューロン毎に、モデルパラメータを用いて、上記のステップS204で計算された重み付き和に対してバイアス項を加算する。
【0065】
ステップS206:推論部202は、
図4のステップS105と同様に、上記のステップS205の計算結果を用いて活性化関数を計算する。
【0066】
ステップS207:推論部202は、
図4のステップS106と同様に、当該層に含まれる各ニューロンの活性化関数値を要素とする出力ベクトル(実数値ベクトル)を次の層に出力する。
【0067】
ステップS208:上記のステップS201~ステップS207が最終層まで実行された場合、学習部203は、モデルパラメータを更新する。すなわち、学習部203は、既知の誤差逆伝播法によりloss関数の微分を計算し、その微分値を用いてモデルパラメータを更新する。
【0068】
ここで、上記のステップS202で活性化Xを3値化(量子化)する関数(以下、「量子化関数」ともいう。)をQとする。すなわち、Q(X)=a1B1+・・・+anBnとする。誤差逆伝播法によりloss関数の微分を計算するためには量子化関数Qの微分値が必要であるが、量子化関数Qの微分値はその性質上必ず0になってしまい、誤差を逆伝播させることができなくなってしまう。そこで、本実施例では、参考文献4に記載されているSTE(straight-through estimator)の手法によって量子化関数Qの微分値を疑似的に与える。STEは量子化学習で用いられる基本的な手法の1つである。
【0069】
具体的には、量子化関数Qの疑似的な微分値として、例えば、
【0070】
【0071】
なお、モデルパラメータの更新は、学習用データの集合であるバッチ毎に行われてもよい。
【0072】
以上のステップS201~ステップS208が実行されることで、3値化パラメータとモデルパラメータが学習される。
【0073】
<適用例及び評価>
以下では、本実施例を言語モデルに適用する場合の適用例とその評価について説明する。本適用例では、非特許文献1に記載されているTernaryBERTに対して本実施例を適用する。
【0074】
TernaryBERTはBERTモデルの重みを3値化、活性化を8bit化しており、本実施例を適用して活性化も3値化することで高速化が期待できる。また、後述するように、従来手法と比較して精度が向上することも確認できた。
【0075】
・BERT等に代表されるTransformer言語モデルの構成
BERT等に代表されるTransformer言語モデルは、embedding層と、L個(本適用例ではL=12)のTransformer encoderブロックとで構成される。BERTのパラメータは、token、segment、positionに対するembedding行列We,Ws,Wpと、l(lは小文字のL)層目のブロックに含まれるMulti-Head Attention(MHA)のh番目のheaにおけるquery,key,valueの線形変換行列Wlh
Q,Wlh
K,Wlh
V、MHAの直後に施されるoutputの線形変換行列Wl
O、及び2層のFeed-Forward Network(FFN)の線形変換行列Wl
1,Wl
2である。
【0076】
・TernaryBERTで3値化している重み
segmentとpositionに対するembedding行列を除くWeを重み行列とする1つのembedding層と、{Wlh
Q},{Wlh
K},{Wlh
V},{Wl
O},{Wl
1},{Wl
2}をそれぞれ重み行列とする6つの線形層との重みを3値化している。
【0077】
・本適用例におけるTernaryBERTの追実装
TernaryBERTはモデルのコードが公開されていない。そこで、本適用例では、huggingface社が提供しているRoBERTaモデルのコード(例えば、参考文献5等を参照)をベースとして追実装を行った。ただし、TernaryBERTではembedding行列Weに対して次元毎に量子化係数を用意する特殊な3値化を施しているが、本適用例では簡単のためWeは量子化しないものとした。すなわち、本適用例では、{Wlh
Q},{Wlh
K},{Wlh
V},{Wl
O},{Wl
1},{Wl
2}の6つの線形層の重みを実施例1により3値化するものとした。
【0078】
・事前学習について
Wikitext103データセット(例えば、参考文献6等を参照)を用いて各モデルの事前学習を行った。学習対象のモデルは、量子化されていないRoBERTaモデル(例えば、参考文献7等を参照)、追実装したTernaryBERTモデル(8bit活性化)、TernaryBERTの手法のまま活性化を3値化したモデル、追実装したTernaryBERTに対して本実施例をそれぞれn=1,2として適用したモデルとした。以下、これら各モデルのそれぞれを「RoBERTa」、「TernaryBERT(8bit活性化)」、「TernaryBERT(3値活性化)」、「本実施例(n=1)」、「本実施例(n=2)」ともいう。なお、nは、活性化を3値化ベクトルで近似する際における3値ベクトルの個数である。
【0079】
学習条件として、事前学習では、バッチサイズを64、エポック数を3とし、市販の一般的なGPUを1枚用いた。また、学習率は2×10-5とし、学習の最終ステップでは学習率が0となるように線形に減衰させた。最適化にはadamを用いて、Dropout率は0.1とした。
【0080】
TernaryBERTでは実数値モデルを教師モデルとした蒸留学習を行う(例えば、非特許文献1等を参照)。そこで、TernaryBERTでは事前学習を行わず、hugginfaceのRoBERTaモデルをWikitext103データセットで事前学習したもの教師モデルとして、非特許文献1と同様の蒸留lossを用いて蒸留学習を行った。
【0081】
以上の条件の下で、各モデルの評価実験を行った結果を以下の表1に示す。
【0082】
【表1】
ここで、2
*は活性化が2bitの和で表現されていることを表す。また、pplはword perplexityである。pplは定性的には言語モデルの「単語予測の確信度」の逆数を意味する一般的な評価指標であり低いほど良い。事前学習では文章の一部の単語を隠して周囲の単語から隠された単語を予測するタスクを解くが、予測した単語の確信度が高ければpplは低くなり、確信度が低ければpplは高くなる。
【0083】
重みと活性化が3値の場合で比較すると、TernaryBERT(3値活性化)ではpplが1904、本実施例(n=1)ではpplが26.93であり、本実施例の手法がTernaryBERTの活性化低bit化手法よりも優れていることがわかる。
【0084】
また、活性化を近似する3値ベクトルを2つに増やした本実施例(n=2)ではpplが9.42であり、nを増やすことで精度低下を大幅に抑えることができている。これは、活性化を8bit化したTernaryBERT(8bit活性化)には及ばないものの、活性化を8bit未満にしつつ、今まで困難であった言語モデルの精度維持に成功しているといえる。更に、本実施例(n=2)では、重みと活性化の両方が3値化されているため、TernaryBERTよりも高速化が期待できる。
【0085】
・ダウンストリームタスクでの評価
事前学習で学習した各モデルをGLUEデータセット(例えば、参考文献8等を参照)のQQPタスク及びSST-2タスクでファインチューニングした。
【0086】
評価対象はRoBERTa、TernaryBERT(8bit活性化)、TernaryBERT(3値活性化)、本実施例(n=2)とした。
【0087】
学習条件として、各モデルの初期値は事前学習で学習したものとし、バッチサイズを16、エポック数を3とし、市販の一般的なGPUを1枚用いた。また、学習率は2×10-5とし、学習の最終ステップでは学習率が0となるように線形に減衰させた。最適化にはadamを用いて、Dropout率は0.1とした。
【0088】
TernaryBERTでは実数値モデルを教師モデルとした蒸留学習を行う(例えば、非特許文献1等を参照)。そこで、TernaryBERTではファインチューニングを行わず、hugginfaceのRoBERTaモデルをGLUEデータセットの各タスクでファインチューニングしたものを教師モデルとして、非特許文献1と同様の蒸留lossを用いて蒸留学習を行った。
【0089】
以上の条件の下で、各モデルの評価実験を行った結果を以下の表2に示す。
【0090】
【表2】
ここで、評価指標としては、QQPタスクではF1、SST-2タスクではaccuracyを採用した。
【0091】
TernaryBERT(3値活性化)では事前学習で言語モデルを獲得できておらず、各タスクにおいても学習ができていないのに対して、本実施例(n=2)では各タスクで精度低下が大幅に抑えられている。
【0092】
また、本実施例(n=2)は、実数値のRoBERTaと比較しても5~7%程度の精度低下に抑えられており、活性化を8bit未満にしつつも、今まで困難であった言語モデルの精度維持に成功しているといえる。更に、本実施例(n=2)は、TernaryBERT(8bit活性化)と比べると精度面では劣るものの、重みと活性化の両方が3値化されているため、TernaryBERT(8bit活性化)よりも高速化が期待できる。
【0093】
[実施例2]
以下、本実施形態の実施例2について説明する。本実施例では、活性化を2個の3値ベクトルの和で近似する場合について説明する。すなわち、例えば、ニューラルネットワークモデルの或る層の活性化(実数値ベクトル)をX=(x1,x2,・・・,xdim)、当該層の3値化パラメータをS=(s1,s2)とすれば、この実数値ベクトルを3値化ベクトルs1B1+s2B2で近似する場合について説明する。ここで、s1,s2は、s1>2s2>0を満たすスカラー値、Bi(i=1,2)は各要素が-1,0,1のいずれかを取るベクトルである。
【0094】
なお、本実施例では、実施例1でn=2とした場合と比較して、より高精度に活性化を近似することが可能となる。
【0095】
<実施例2における推論処理>
推論時における推論装置10が実行する推論処理について、
図6を参照しながら説明する。
図6は、実施例2における推論処理の一例を示すフローチャートである。なお、以下では、3値化パラメータとモデルパラメータは学習済みであるものとする。
【0096】
ここで、
図6のステップS301~ステップS306はニューラルネットワークモデルの各層毎に繰り返し実行される。以下では、ニューラルネットワークモデルの或る層に関するステップS301~ステップS306について説明する。
【0097】
ステップS301:推論部202は、
図4のステップS101と同様に、ニューラルネットワークモデルに与えられた実数値ベクトル又は1つ前の層の出力ベクトルである実数値ベクトルを入力する。なお、ニューラルネットワークモデルに与えられた実数値ベクトルとは、タスクの推論対象データのことである。
【0098】
ステップS302:3値化部201は、学習済み3値化パラメータを用いて、上記のステップS301で入力された実数値ベクトル(つまり、活性化)を3値化し、3値化ベクトルを作成する。このとき、3値化部201は、以下の手順3-1~手順3-2により3値化ベクトルを作成する。なお、上記のステップS301で入力された実数値ベクトルをX=(x1,x2,・・・,xdim)、当該層の学習済み3値化パラメータをS=(s1,s2)とする。また、s1,s2は、s1>2s2>0を満たすスカラー値であるものとする。
【0099】
手順3-1)まず、3値化部201は、量子化に用いる関数を
【0100】
【0101】
【0102】
【数7】
とした上で、1つ目の3値ベクトルをs
1B
1とする。また、3値化部201は、
【0103】
【数8】
とした上で、2つ目の3値ベクトルをs
2B
2とする。
【0104】
手順3-2)そして、3値化部201は、s1B1+s2B2を3値化ベクトルとする。これにより、当該層の活性化X=(x1,x2,・・・,xdim)を2個の3値ベクトルの和で近似した3値化ベクトルs1B1+s2B2が得られる。
【0105】
ステップS303:推論部202は、
図4のステップS103と同様に、当該層に含まれるニューロン毎に、学習済みモデルパラメータを用いて、上記のステップS302で作成された3値化ベクトルの重み付き和を計算する。
【0106】
ステップS304:推論部202は、
図4のステップS104と同様に、当該層に含まれるニューロン毎に、学習済みモデルパラメータを用いて、上記のステップS303で計算された重み付き和に対してバイアス項を加算する。
【0107】
ステップS305:推論部202は、
図4のステップS105と同様に、当該層に含まれるニューロン毎に、上記のステップS304の計算結果を用いて活性化関数を計算する。
【0108】
ステップS306:推論部202は、
図4のステップS106と同様に、当該層に含まれる各ニューロンの活性化関数値を要素とする出力ベクトル(実数値ベクトル)を次の層に出力する。
【0109】
以上のステップS301~ステップS306が各層毎に繰り返し実行され、最終層の出力ベクトル(又は、当該出力ベクトルに対して、タスクに応じた所定の処理を行った結果)が推論結果となる。
【0110】
ここで、LSQ量子化と呼ばれる従来手法(例えば、参考文献9等を参照)と、本実施例とを比較する。LSQ量子化では、1つの3値ベクトルで活性化を表現している。すなわち、本実施例と対比する形で記載すると、LSQ量子化では、活性化Xをs1B1で表現している。
【0111】
例えば、活性化Xを表現する3値化ベクトルを
【0112】
【数9】
とすれば、本実施例の3値化ベクトルのi番目の要素とLSQ量子化の3値化ベクトルのi番目の要素は、
図7に示すようになる。なお、
図7では、縦軸が3値化ベクトルのi番目の要素、横軸が活性化Xのi番目の要素である。
【0113】
図7に示すように、本実施例では、s
1により与えられる3値のそれぞれをs
2で微調整することにより、LSQ量子化よりも精度低下を抑えている。なお、後述するように、学習処理では、s
1により与えられる3値のそれぞれをs
2で微調整するような3値化パラメータS=(s
1,s
2)を学習できる疑似勾配が与えられる。
【0114】
<実施例2における学習処理>
学習時における推論装置10が実行する学習処理について、
図8を参照しながら説明する。
図8は、実施例2における学習処理の一例を示すフローチャートである。なお、以下では、3値化パラメータとモデルパラメータは学習済みでないものとする。
【0115】
ここで、
図8のステップS402~ステップS407はニューラルネットワークモデルの各層毎に繰り返し実行される。以下では、ニューラルネットワークモデルの或る層に関するステップS402~ステップS407について説明する。なお、ステップS401の初期化は1回のみ実行される。例えば、モデルパラメータと3値化パラメータの更新がバッチ毎に繰り返される場合、ステップS401の初期化は1バッチ目のみ実行され、2バッチ目以降では実行されない。
【0116】
ステップS401:学習部203は、ニューラルネットワークモデルに最初に与えられた学習用データを用いて、3値化パラメータを初期化する。具体的には、学習部203は、以下の手順4-1~手順4-3により3値化パラメータを初期化する。なお、ニューラルネットワークモデルに最初に与えられた学習用データが表す実数値ベクトルをXとする。
【0117】
手順4-1)まず、学習部203は、|X-sB|2を最小化するようなスカラー値sと3値ベクトルBを求め、s1=s,B1=Bとする。ここで、Bは各要素が-1,0,1のいずれかを取るベクトルである。
【0118】
手順4-2)次に、学習部203は、|X-s1B1-sB|2を最小化するようなスカラー値sと3値ベクトルBを求め、s2=s,B2=Bとする。
【0119】
手順4-3)そして、学習部203は、上記の手順4-1~手順4-2で求めた(s1,s2)を3値化パラメータSの初期値とする。これにより、X-(s1B1+s2B2)のL2ノルムを小さくような初期値を得ることができるため、近似誤差の小さい初期値で学習を開始させることができるようになる。
【0120】
ステップS402:推論部202は、
図4のステップS101と同様に、ニューラルネットワークモデルに与えられた実数値ベクトル又は1つ前の層の出力ベクトルである実数値ベクトルを入力する。なお、ニューラルネットワークモデルに与えられた実数値ベクトルとは、タスクの学習用データのことである。
【0121】
ステップS403:3値化部201は、3値化パラメータS=(s1,s2)を用いて、上記のステップS402で入力された実数値ベクトル(つまり、活性化)を3値化し、3値化ベクトルを作成する。このとき、3値化部201は、以下の手順5-1~手順5-2により3値化ベクトルを作成する。なお、上記のステップS402で入力された実数値ベクトルをX=(x1,x2,・・・,xdim)とする。また、
手順5-1)まず、3値化部201は、量子化に用いる関数を
【0122】
【0123】
【0124】
【数12】
とした上で、1つ目の3値ベクトルをs
1B
1とする。また、3値化部201は、
【0125】
【数13】
とした上で、2つ目の3値ベクトルをs
2B
2とする。
【0126】
手順5-2)そして、3値化部201は、s1B1+s2B2を3値化ベクトルとする。これにより、当該層の活性化X=(x1,x2,・・・,xdim)を2個の3値ベクトルの和で近似した3値化ベクトルs1B1+s2B2が得られる。
【0127】
ステップS404:推論部202は、
図4のステップS103と同様に、当該層に含まれるニューロン毎に、モデルパラメータを用いて、上記のステップS403で作成された3値化ベクトルの重み付き和を計算する。
【0128】
ステップS405:推論部202は、
図4のステップS104と同様に、当該層に含まれるニューロン毎に、モデルパラメータを用いて、上記のステップS404で計算された重み付き和に対してバイアス項を加算する。
【0129】
ステップS406:推論部202は、
図4のステップS105と同様に、上記のステップS405の計算結果を用いて活性化関数を計算する。
【0130】
ステップS407:推論部202は、
図4のステップS106と同様に、当該層に含まれる各ニューロンの活性化関数値を要素とする出力ベクトル(実数値ベクトル)を次の層に出力する。
【0131】
ステップS408:上記のステップS402~ステップS407が最終層まで実行された場合、学習部203は、モデルパラメータと3値化パラメータを更新する。すなわち、学習部203は、既知の誤差逆伝播法によりloss関数の微分を計算し、その微分値を用いてモデルパラメータと3値化パラメータを更新する。
【0132】
ここで、上記のステップS403で活性化Xを3値化(量子化)する量子化関数をQとする。すなわち、Q(X)=s1B1+s2B2とする。上述したように、誤差逆伝播法によりloss関数の微分を計算するためには量子化関数Qの微分値が必要であるが、量子化関数Qの微分値はその性質上必ず0になってしまい、誤差を逆伝播させることができなくなってしまう。そこで、本実施例では、量子化関数Qの微分値を疑似的に与える。
【0133】
まず、モデルパラメータの学習(更新)に必要な量子化関数Qの疑似的な微分値として、例えば、
【0134】
【数14】
を与える。これは、実施例1と同様に、参考文献4に記載されているSTEの手法によって与えられるものである。
【0135】
次に、3値化パラメータS=(s1,s2)の学習(更新)に必要な量子化関数Qの疑似的な微分値
【0136】
【数15】
を与える。本実施例では、活性化を1つの3値ベクトルで表現するLSQ量子化(例えば、参考文献9等を参照)の疑似勾配を参考にして、活性化を2つの3値ベクトルの和で表現する場合に拡張する。
【0137】
記述のため、
【0138】
【数16】
とする。このとき、3値化パラメータS=(s
1,s
2)の学習に必要な量子化関数Qの疑似的な微分値として、
【0139】
【0140】
【0141】
【数19】
である。なお、量子化後の活性化のk番目の次元の値は、活性化のk番目の次元の値で決まることに留意されたい。また、round(x)はxの小数点を四捨五入して最も近い整数値にする関数、Sign(x)は0≦xならば1、x<0なら-1を返す符号関数である。
【0142】
ここで、LSQ量子化の疑似勾配と、本実施例で与える疑似勾配(3値化パラメータS=(s
1,s
2)の学習に必要な量子化関数Qの疑似的な微分値)とを比較する。LSQ量子化の疑似勾配と、本実施例で与える疑似勾配とを
図9に示す。なお、
図9では、縦軸が3値化ベクトルのk番目の要素の3値化パラメータに関する疑似的な微分、横軸が3値化ベクトルのk番目の要素である。
【0143】
図9に示すように、本実施例では、s
1により与えられる3値のそれぞれをs
2で微調整している。すなわち、{s
1,0,-s
1}付近で
【0144】
【0145】
【0146】
なお、モデルパラメータと3値化パラメータの更新は、学習用データの集合であるバッチ毎に行われてもよい。
【0147】
以上のステップS401~ステップS408が実行されることで、3値化パラメータとモデルパラメータが学習される。
【0148】
<適用例及び評価>
以下では、本実施例を言語モデルに適用する場合の適用例とその評価について説明する。本適用例では、非特許文献2に記載されているKDLSQ-BERTに対して本実施例を適用する。
【0149】
KDLSQ-BERTはBERTモデルの重みを3値化、活性化を8bit化しており、本実施例を適用して活性化も3値化することで高速化が期待できる。また、KDLSQ-BERTでは活性化の低bit化にLSQ量子化が用いられており、後述するように、LSQ量子化と比較して精度が向上することも確認できた。
【0150】
・BERT等に代表されるTransformer言語モデルの構成
実施例1でも説明したように、BERT等に代表されるTransformer言語モデルは、embedding層と、L個(本適用例ではL=12)のTransformer encoderブロックとで構成される。BERTのパラメータは、token、segment、positionに対するembedding行列We,Ws,Wpと、l(lは小文字のL)層目のブロックに含まれるMulti-Head Attention(MHA)のh番目のheaにおけるquery,key,valueの線形変換行列Wlh
Q,Wlh
K,Wlh
V、MHAの直後に施されるoutputの線形変換行列Wl
O、及び2層のFeed-Forward Network(FFN)の線形変換行列Wl
1,Wl
2である。
【0151】
・KDLSQ-BERTで3値化している重み
segmentとpositionに対するembedding行列を除くWeを重み行列とする1つのembedding層と、{Wlh
Q},{Wlh
K},{Wlh
V},{Wl
O},{Wl
1},{Wl
2}をそれぞれ重み行列とする6つの線形層との重みを3値化している。
【0152】
・本適用例におけるKDLSQ-BERTの追実装
KDLSQ-BERTはモデルのコードが公開されていない。そこで、本適用例では、huggingface社が提供しているRoBERTaモデルのコード(例えば、参考文献5等を参照)をベースとして追実装を行った。ただし、KDLSQ-BERTではembedding行列Weに対して次元毎に量子化係数を用意する特殊な3値化を施しているが、本適用例では簡単のためWeは量子化しないものとした。すなわち、本適用例では、{Wlh
Q},{Wlh
K},{Wlh
V},{Wl
O},{Wl
1},{Wl
2}の6つの線形層の重みを実施例2により3値化するものとした。
【0153】
・事前学習について
Wikitext103データセット(例えば、参考文献6等を参照)を用いて各モデルの事前学習を行った。学習対象のモデルは、量子化されていないRoBERTaモデル(例えば、参考文献7等を参照)、追実装したKDLSQ-BERTモデル(8bit活性化)、KDLSQ-BERTの手法のまま活性化を3値化したモデル、追実装したTernaryBERTに対して本実施例を適用したモデルとした。以下、これら各モデルのそれぞれを「RoBERTa」、「KDLSQ-BERT(8bit活性化)」、「KDLSQ-BERT(3値活性化)」、「本実施例」ともいう。
【0154】
学習条件として、事前学習では、バッチサイズを64、エポック数を12とし、市販の一般的なGPUを1枚用いた。また、学習率は2×10-5とし、学習の最終ステップでは学習率が0となるように線形に減衰させた。最適化にはadamを用いて、Dropout率は0.1とした。
【0155】
KDLSQ-BERTでは実数値モデルを教師モデルとした蒸留学習を行う(例えば、非特許文献2等を参照)。そこで、KDLSQ-BERTでは事前学習を行わず、hugginfaceのRoBERTaモデルをWikitext103データセットで事前学習したもの教師モデルとして、非特許文献2と同様の蒸留lossを用いて蒸留学習を行った。
【0156】
以上の条件の下で、各モデルの評価実験を行った結果を以下の表3に示す。
【0157】
【表3】
重みと活性化が3値の場合で比較すると、KDLSQ-BERT(3値活性化)ではpplが17.24、本実施例ではpplが5.27であり、本実施例の手法がLSQ量子化による3値化よりも優れていることがわかる。
【0158】
また、活性化を近似する3値ベクトルを2つに増やしたことにより精度低下を大幅に抑えることができていることがわかる。これは、活性化を8bit化したKDLSQ-BERT(8bit活性化)には及ばないものの、活性化を8bit未満にしつつ、今まで困難であった言語モデルの精度維持に成功しているといえる。更に、本実施例では、重みと活性化の両方が3値化されているため、KDLSQ-BERTよりも高速化が期待できる。
【0159】
・ダウンストリームタスクでの評価
事前学習で学習した各モデルをGLUEデータセット(例えば、参考文献8等を参照)の様々なタスク(MNLI、QQP、QNLI、SST-2、CoLA、STS-B、MRPC、RTE)でファインチューニングした。
【0160】
評価対象はRoBERTa、KDLSQ-BERT(8bit活性化)、KDLSQ-BERT(3値活性化)、本実施例とした。
【0161】
学習条件として、各モデルの初期値は事前学習で学習したものとし、バッチサイズを16、エポック数を3とし、市販の一般的なGPUを1枚用いた。また、学習率は2×10-5とし、学習の最終ステップでは学習率が0となるように線形に減衰させた。最適化にはadamを用いて、Dropout率は0.1とした。
【0162】
KDLSQ-BERTでは実数値モデルを教師モデルとした蒸留学習を行う(例えば、非特許文献2等を参照)。そこで、KDLSQ-BERTではファインチューニングを行わず、hugginfaceのRoBERTaモデルをGLUEデータセットの各タスクでファインチューニングしたものを教師モデルとして、非特許文献2と同様の蒸留lossを用いて蒸留学習を行った。
【0163】
以上の条件の下で、各モデルの評価実験を行った結果を以下の表4に示す。
【0164】
【表4】
ここで、評価指標としては、KDLSQ-BERTに合わせてCoLAタスクではMC(Matthews Correlation)、MRPCタスクとQQPタスクではF1、STS-BタスクではSC(Spearman Correlation)、その他のタスクではaccuracyを採用した。
【0165】
KDLSQ-BERT(3値活性化)と比較して、本実施例では各タスクでの精度低下が大幅に抑えられている。
【0166】
また、CoLA及びRTE以外のタスクではRoBERTaと比較しても2~5%程度の精度低下に抑えられており、活性化を8bit未満にしつつも、今まで困難であった言語モデルの精度維持に成功しているといえる。更に、本実施例は、KDLSQ-BERT(8bit活性化)と比べると精度面では劣るものの、重みと活性化の両方が3値化されているため、KDLSQ-BERT(8bit活性化)よりも高速化が期待できる。
【0167】
<まとめ>
以上のように、本実施形態に係る推論装置10は、ニューラルネットワークモデルの活性化を高精度に3値化し、そのニューラルネットワークモデルにより所定のタスクの推論を高速に実行することができる。また、ニューラルネットワークモデルとしてBERT等に代表されるTransformer言語モデルを用いて様々な自然言語タスクで実験を行い、従来手法と比べて精度低下を大幅に抑えられることを確認した。
【0168】
本発明は、具体的に開示された上記の実施形態に限定されるものではなく、請求の範囲の記載から逸脱することなく、種々の変形や変更、既知の技術との組み合わせ等が可能である。
【0169】
以上の実施形態に関し、更に以下の付記を開示する。
【0170】
(付記1)
メモリと、
前記メモリに接続された少なくとも1つのプロセッサと、
を含み、
前記プロセッサは、
ニューラルネットワークモデルにより所定のタスクの推論を行い、
複数の3値ベクトルを用いて、前記ニューラルネットワークモデルを構成する各層への入力を表す活性化を3値化し、
前記ニューラルネットワークモデルのモデルパラメータと、前記活性化を3値で表現するための3値化パラメータとを学習する、
学習装置。
【0171】
(付記2)
前記プロセッサは、
前記層毎に、前記層への入力を表す活性化と、スカラー値と-1、0、+1のいずれかを各要素に持つ3値ベクトルとの積のn(ただし、nは予め決められた自然数)個の和との距離を最小化するような前記スカラー値と前記3値ベクトルとを帰納的に繰り返し計算し、
前記スカラー値との移動平均により前記3値化パラメータを学習する、付記1に記載の学習装置。
【0172】
(付記3)
前記プロセッサは、
前記層毎に、前記3値化パラメータを持つ量子化関数により、前記層への入力を表す活性化を3値化し、
前記3値化パラメータに関する前記量子化関数の疑似的な勾配を用いて、誤差逆伝播法により前記3値化パラメータを学習する、付記1に記載の学習装置。
【0173】
(付記4)
前記3値化パラメータは、第1の3値化パラメータと、第2の3値化パラメータとで構成され、
前記プロセッサは、
第1のスカラー値と-1、0、+1のいずれかを各要素に持つ第1の3値ベクトルとの積と、第2のスカラー値と-1、0、+1のいずれかを各要素に持つ第2の3値ベクトルとの積との和を最小化するような前記第1のスカラー値と前記第2のスカラー値と前記第1の3値ベクトルと前記第2の3値ベクトルとを計算し、前記第1のスカラー値と前記第2のスカラー値とをそれぞれ前記第1の3値化パラメータと前記第2の3値化パラメータの初期値とし、
前記層毎に、前記3値化パラメータを持つ量子化関数により、前記第1の3値化パラメータと前記第1の3値ベクトルとの積と、前記第2の3値化パラメータと前記第2の3値ベクトルとの積との和で前記層への入力を表す活性化を3値化し、
前記第1の3値化パラメータに関する前記量子化関数の疑似的な勾配と、前記第2の3値化パラメータに関する前記量子化関数の疑似的な勾配とを用いて、前記3値化パラメータを学習する、付記3に記載の学習装置。
【0174】
(付記5)
メモリと、
前記メモリに接続された少なくとも1つのプロセッサと、
を含み、
前記プロセッサは、
ニューラルネットワークモデルにより所定のタスクの推論を行い、
複数の3値ベクトルと、実数値を3値で表現するための学習済み3値化パラメータとを用いて、前記ニューラルネットワークモデルを構成する各層への入力を表す活性化を3値化する、
推論装置。
【0175】
(付記6)
学習処理を実行するようにコンピュータによって実行可能なプログラムを記憶した非一時的記憶媒体であって、
前記学習処理は、
ニューラルネットワークモデルにより所定のタスクの推論を行い、
複数の3値ベクトルを用いて、前記ニューラルネットワークモデルを構成する各層への入力を表す活性化を3値化し、
前記ニューラルネットワークモデルのモデルパラメータと、前記活性化を3値で表現するための3値化パラメータとを学習する、
非一時的記憶媒体。
【0176】
(付記7)
推論処理を実行するようにコンピュータによって実行可能なプログラムを記憶した非一時的記憶媒体であって、
ニューラルネットワークモデルにより所定のタスクの推論を行い、
複数の3値ベクトルと、実数値を3値で表現するための学習済み3値化パラメータとを用いて、前記ニューラルネットワークモデルを構成する各層への入力を表す活性化を3値化する、
非一時的記憶媒体。
【0177】
[参考文献]
参考文献1:Diwen Wan, Fumin Shen, Li Liu, Fan Zhu, Jie Qin, Ling Shao, Heng Tao Shen. TBN: Convolutional Neural Network with Ternary Inputs and Binary Weights (ECCV2018)
参考文献2:Fengfu Li, Bo Zhang, Bin Liu. Ternary Weight Networks (2016)
参考文献3:Lu Hou, James T. Kwok. LOSS-AWARE WEIGHT QUANTIZATION OF DEEP NETWORKS (2018)
参考文献4:Yoshua Bengio, Nicholas Leonard, and Aaron Courville. Estimating or propagating gradients through stochastic neurons for conditional computation. arXiv preprint arXiv:1308.3432, 2013.
参考文献5:huggingface, インターネット<URL:https://github.com/huggingface/transformers>
参考文献6:Stephen Merity, Caiming Xiong, James Bradbury, Richard Socher. Pointer Sentinel Mixture Models (2016)
参考文献7:Liu, Y., Ott, M., Goyal, N., Du, J., Joshi, M.,Chen, D., Levy, O., Lewis, M., Zettlemoyer, L., and Stoy-anov, V.: RoBERTa: A Robustly Optimized BERT Pre-training Approach,CoRR, Vol. abs/1907.11692, (2019)
参考文献8:Alex Wang , Amanpreet Singh , Julian Michael , Felix Hill , Omer Levy & Samuel R. Bowman GLUE: A MULTI-TASK BENCHMARK AND ANALYSIS PLATFORM FOR NATURAL LANGUAGE UNDERSTANDING (ICLR2019)
参考文献9:Steven K. Esser, Jeffrey L. McKinstry, Deepika Bablani, Rathinakumar Appuswamy, Dharmendra S. Modha. LEARNED STEP SIZE QUANTIZATION (ICLR2020)
【符号の説明】
【0178】
10 推論装置
101 入力装置
102 表示装置
103 外部I/F
103a 記録媒体
104 通信I/F
105 プロセッサ
106 メモリ装置
107 バス
201 3値化部
202 推論部
203 学習部