(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2022162930
(43)【公開日】2022-10-25
(54)【発明の名称】ウェイトデータ圧縮方法、ウェイトデータ伸長方法、ウェイトデータ圧縮装置及びウェイトデータ伸長装置
(51)【国際特許分類】
G06N 3/04 20060101AFI20221018BHJP
【FI】
G06N3/04
【審査請求】未請求
【請求項の数】10
【出願形態】OL
(21)【出願番号】P 2021068040
(22)【出願日】2021-04-13
(71)【出願人】
【識別番号】514315159
【氏名又は名称】株式会社ソシオネクスト
(74)【代理人】
【識別番号】100189430
【弁理士】
【氏名又は名称】吉川 修一
(74)【代理人】
【識別番号】100190805
【弁理士】
【氏名又は名称】傍島 正朗
(72)【発明者】
【氏名】橋本 芳信
(57)【要約】
【課題】ニューラルネットワークで使用されるターナリーウェイトデータのビット数を従来技術よりも少なくする。
【解決手段】ウェイトデータ圧縮方法は、ニューラルネットワークで使用されるターナリーウェイトデータを圧縮する方法であって、2ビット3値のデータ列であるターナリーウェイトデータを4ビットごとに区切り、4ビット9値で表現される4ビットデータ列を生成するステップと、4ビットデータ列の4ビットデータのうち、0000に該当する4ビットデータには0及び1のうち一方の値をフラグとして割り当て、0000以外の4ビットデータには0及び1のうち他方の値をフラグとして割り当てることで第1のフラグ列を生成し、かつ、0000以外の4ビットデータを3ビット8値のいずれかの3ビットデータに変換して第1の非ゼロ値列を生成することで、第1のフラグ列及び第1の非ゼロ値列からなる第1の圧縮データを生成するステップと、を含む。
【選択図】
図8
【特許請求の範囲】
【請求項1】
ニューラルネットワークで使用されるターナリーウェイトデータを圧縮する方法であって、
2ビット3値のデータ列である前記ターナリーウェイトデータを4ビットごとに区切り、4ビット9値で表現される4ビットデータ列を生成するステップと、
前記4ビットデータ列の4ビットデータのうち、0000に該当する4ビットデータには0及び1のうち一方の値をフラグとして割り当て、0000以外の4ビットデータには0及び1のうち他方の値をフラグとして割り当てることで第1のフラグ列を生成し、かつ、0000以外の4ビットデータを3ビット8値のいずれかの3ビットデータに変換して第1の非ゼロ値列を生成することで、前記第1のフラグ列及び前記第1の非ゼロ値列からなる第1の圧縮データを生成するステップと、
を含むウェイトデータ圧縮方法。
【請求項2】
さらに、前記4ビット9値のうち0000以外の8つのデータと前記3ビット8値のデータとの対応付けを行うステップを含み、
前記第1の圧縮データを生成するステップでは、前記8つのデータと前記3ビット8値のデータとの対応付けに基づいて、0000以外のデータを前記3ビット8値のデータに変換する
請求項1に記載のウェイトデータ圧縮方法。
【請求項3】
前記2ビット3値は、00、01及び11からなる2ビットデータであり、
前記4ビット9値は、0000、0001、0011、0100、0101、0111、1100、1101及び1111からなる4ビットデータであり、
前記3ビット8値は、000、001、010、011、100、101、110及び111からなる3ビットデータである
請求項1又は2に記載のウェイトデータ圧縮方法。
【請求項4】
前記4ビットデータ列を生成するステップでは、2ビット3値のデータ列である前記ターナリーウェイトデータに対する2ビットデータの区切り数が奇数である場合に、当該ターナリーウェイトデータの末尾に00を付加した後に、当該ターナリーウェイトデータを4ビットごとに区切ることで前記4ビットデータ列を生成する
請求項1~3のいずれか1項に記載のウェイトデータ圧縮方法。
【請求項5】
さらに、
前記第1の圧縮データを、前記ニューラルネットワークによる処理が実行される半導体集積回路の外部のメモリに格納するステップを含む
請求項1~4のいずれか1項に記載のウェイトデータ圧縮方法。
【請求項6】
さらに、
2ビット3値のデータ列である前記ターナリーウェイトデータを2ビットごとに区切り、2ビット3値で表現される2ビットデータ列を生成するステップと、
前記2ビットデータ列の2ビットデータのうち、00に該当する2ビットデータには1を、00以外の2ビットデータには0を割り当て、あるいは、00に該当する2ビットデータには0を、00以外の2ビットデータには1を割り当てることで第2のフラグ列を生成し、かつ、00以外の2ビットデータを順に並べて第2の非ゼロ値列を生成することで、前記第2のフラグ列及び前記第2の非ゼロ値列からなる第2の圧縮データを生成するステップと、
前記第1の圧縮データのビット数と、前記第2の圧縮データのビット数とを比較し、前記ビット数が少ないほうの圧縮データをメモリに格納するステップと、
を含む請求項1に記載のウェイトデータ圧縮方法。
【請求項7】
前記格納するステップは、前記ニューラルネットワークの畳み込みレイヤごとに実行される
請求項6に記載のウェイトデータ圧縮方法。
【請求項8】
請求項1~5のいずれか1に記載のウェイトデータ圧縮方法によって圧縮された前記第1の圧縮データを伸長する方法であって、
前記第1の非ゼロ値列に含まれる3ビットデータを0000以外の複数の4ビットデータに変換して並べるステップと、
前記第1のフラグ列に含まれる0及び1からなるフラグのうち、前記一方の値のフラグには0000を当てはめ、前記他方の値のフラグには前記複数の4ビットデータが並ぶ順に前記4ビットデータを当てはめることで、圧縮前の前記ターナリーウェイトデータを生成するステップと、
を含むウェイトデータ伸長方法。
【請求項9】
ニューラルネットワークで使用されるターナリーウェイトデータを圧縮する圧縮部を備え、
前記圧縮部は、
2ビット3値のデータ列である前記ターナリーウェイトデータを4ビットごとに区切り、4ビット9値で表現される4ビットデータ列を生成し、
前記4ビットデータ列の4ビットデータのうち、0000に該当する4ビットデータには0及び1のうち一方の値をフラグとして割り当て、0000以外の4ビットデータには0及び1のうち他方の値をフラグとして割り当てることで第1のフラグ列を生成し、
0000以外の4ビットデータを3ビット8値のいずれかの3ビットデータに変換して第1の非ゼロ値列を生成することで、前記第1のフラグ列及び前記第1の非ゼロ値列からなる第1の圧縮データを生成する
ウェイトデータ圧縮装置。
【請求項10】
請求項9に記載のウェイトデータ圧縮装置によって圧縮された前記第1の圧縮データを伸長する伸長回路を備え、
前記伸長回路は、
前記3ビット8値で表される前記第1の非ゼロ値列を0000以外の複数の4ビットデータに変換して並べ、
前記第1のフラグ列に含まれる0及び1からなるフラグのうち、前記一方の値のフラグには0000を当てはめ、前記他方の値のフラグには前記複数の4ビットデータが並ぶ順に前記4ビットデータを当てはめることで、圧縮前の前記ターナリーウェイトデータを生成する
ウェイトデータ伸長装置。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、ニューラルネットワークで使用されるウェイトデータを圧縮する方法、圧縮後のウェイトデータを伸長する方法、ウェイトデータ圧縮装置及びウェイトデータ伸長装置に関する。特に、ウェイトが2ビット3値のターナリーウェイトである場合に関する。
【背景技術】
【0002】
従来、ニューラルネットワークでは畳み込み演算が多用される。その際に重み係数となる高次元のウェイトデータはビット数が多く、ウェイトデータを保持するメモリ領域と、ウェイトデータが流れるバスの帯域を圧迫する。そこで、演算以前のウェイトデータのビット数を少なくするために、ウェイトデータの圧縮が行われる。
【0003】
ターナリーウェイトデータを圧縮する方法の一例として、非特許文献1には、ゼロ値圧縮(ZVC:Zero-Value Compression)及び連長圧縮(RLE:Run-length Encoding)による圧縮方法が開示されている。
【先行技術文献】
【非特許文献】
【0004】
【非特許文献1】Compressing Sparse Ternary Weight Convolutional Neural Networks for Efficient Hardware Acceleration、Hyeonwook Wi,Hyeonuk Kim,Seungkyu Choi,and Lee-Sup Kim、2019 IEEE/ACM International Symposium on Low Power Electronics and Design(ISLPED)
【発明の概要】
【発明が解決しようとする課題】
【0005】
非特許文献1に記載された圧縮方法では、ターナリーウェイトデータのビット数をある程度まで少なくすることができるが、それ以上に少なくすることができない。
【0006】
そこで、本開示は、ニューラルネットワークで使用されるターナリーウェイトデータのビット数を従来技術よりも少なくすることが可能なウェイトデータ圧縮方法等を提供することを目的とする。
【課題を解決するための手段】
【0007】
上記目的を達成するために、本開示の一形態に係るウェイトデータ圧縮方法は、ニューラルネットワークで使用されるターナリーウェイトデータを圧縮する方法であって、2ビット3値のデータ列である前記ターナリーウェイトデータを4ビットごとに区切り、4ビット9値で表現される4ビットデータ列を生成するステップと、前記4ビットデータ列の4ビットデータのうち、0000に該当する4ビットデータには0及び1のうち一方の値をフラグとして割り当て、0000以外の4ビットデータには0及び1のうち他方の値をフラグとして割り当てることで第1のフラグ列を生成し、かつ、0000以外の4ビットデータを3ビット8値のいずれかの3ビットデータに変換して第1の非ゼロ値列を生成することで、前記第1のフラグ列及び前記第1の非ゼロ値列からなる第1の圧縮データを生成するステップと、を含む。
【0008】
上記目的を達成するために、本開示の一形態に係るウェイトデータ伸長方法は、上記のウェイトデータ圧縮方法によって圧縮された前記第1の圧縮データを伸長する方法であって、前記第1の非ゼロ値列に含まれる3ビットデータを0000以外の複数の4ビットデータに変換して並べるステップと、前記第1のフラグ列に含まれる0及び1からなるフラグのうち、前記一方の値のフラグには0000を当てはめ、前記他方の値のフラグには前記複数の4ビットデータが並ぶ順に前記4ビットデータを当てはめることで、圧縮前の前記ターナリーウェイトデータを生成するステップと、を含む。
【0009】
上記目的を達成するために、本開示の一形態に係るウェイトデータ圧縮装置は、ニューラルネットワークで使用されるターナリーウェイトデータを圧縮する圧縮部を備え、前記圧縮部は、2ビット3値のデータ列である前記ターナリーウェイトデータを4ビットごとに区切り、4ビット9値で表現される4ビットデータ列を生成し、前記4ビットデータ列の4ビットデータのうち、0000に該当する4ビットデータには0及び1のうち一方の値をフラグとして割り当て、0000以外の4ビットデータには0及び1のうち他方の値をフラグとして割り当てることで第1のフラグ列を生成し、0000以外の4ビットデータを3ビット8値のいずれかの3ビットデータに変換して第1の非ゼロ値列を生成することで、前記第1のフラグ列及び前記第1の非ゼロ値列からなる第1の圧縮データを生成する。
【0010】
上記目的を達成するために、本開示の一形態に係るウェイトデータ伸長装置は、上記に記載のウェイトデータ圧縮装置によって圧縮された前記第1の圧縮データを伸長する伸長回路を備え、前記伸長回路は、前記3ビット8値で表される前記第1の非ゼロ値列を0000以外の複数の4ビットデータに変換して並べ、前記第1のフラグ列に含まれる0及び1からなるフラグのうち、前記一方の値のフラグには0000を当てはめ、前記他方の値のフラグには前記複数の4ビットデータが並ぶ順に前記4ビットデータを当てはめることで、圧縮前の前記ターナリーウェイトデータを生成する。
【発明の効果】
【0011】
本開示のウェイトデータ圧縮方法等によれば、ニューラルネットワークで使用されるターナリーウェイトデータのビット数を従来技術よりも少なくすることが可能となる。
【図面の簡単な説明】
【0012】
【
図1】畳み込みニューラルネットワークの構成の一例と、その構成においてウェイトデータが使用される位置を示す図である。
【
図2】INT8(8ビット整数)のネットワークで使用されるウェイトの度数分布の一例を示す図である。
【
図3】ターナリーウェイトの度数分布の一例を示す図である。
【
図4】比較例1のウェイトデータ圧縮方法において、ターナリーウェイトデータが圧縮される過程を示す図である。
【
図5】比較例2のウェイトデータ圧縮方法において、ターナリーウェイトデータが圧縮される過程を示す図である。
【
図6】
図6の(a)は、2ビット3値であるターナリーウェイトの度数分布の一例を示す図であり、
図6の(b)は、ターナリーウェイトデータを、仮想的に4ビット9値のデータ列であるとみなした場合の9値の度数分布の一例を示す図である。
【
図7】実施の形態1に係るウェイトデータ圧縮装置の機能構成の概要を示すブロック図である。
【
図8】実施の形態1に係るウェイトデータ圧縮装置において、ターナリーウェイトデータが圧縮される過程を示す図である。
【
図9】実施の形態1、比較例1及び比較例2におけるターナリーウェイトデータの圧縮前後のビット数の変化を示す図である。
【
図10】ターナリーウェイトデータに含まれる非ゼロ値を表現するのに必要なビット数を示す図である。
【
図11】実施の形態1に係るウェイトデータ圧縮装置の機能をソフトウェアにより実現するコンピュータのハードウェア構成の一例を示す図である。
【
図12】実施の形態1に係るウェイトデータ圧縮方法を示すフローチャートである。
【
図13】実施の形態1の変形例1に係るウェイトデータ圧縮方法を示すフローチャートである。
【
図14】実施の形態2に係るウェイトデータ伸長装置の機能構成の概要を示すブロック図である。
【
図15】実施の形態2に係るウェイトデータ伸長装置において、ターナリーウェイトデータが伸長される過程を示す図である。
【
図16】実施の形態2に係るウェイトデータ伸長装置の機能をソフトウェアにより実現するコンピュータのハードウェア構成の一例を示す図である。
【
図17】実施の形態2に係るウェイトデータ伸長方法を示すフローチャートである。
【
図18】実施の形態3にて実行されるウェイトデータの圧縮処理及び伸長処理を示す図である。
【
図19】実施の形態4にて実行されるウェイトデータの圧縮処理及び伸長処理を示す図である。
【発明を実施するための形態】
【0013】
(本開示に至る経緯)
本開示に至る経緯について、
図1~
図5を参照しながら説明する。
【0014】
図1は、畳み込みニューラルネットワーク1の構成の一例と、その構成においてウェイトデータが使用される位置を示す図である。
【0015】
畳み込みニューラルネットワーク(CNN:Convolutional Neural Network)1は、Convolutionレイヤ及びDense(Fully Connected)レイヤなどの複数のレイヤ(Layer)によって構成される。例えば、各レイヤでは、入力されたデータにウェイト(Weight)を乗算しバイアス(Bias)を加算するという行列演算が実行される。この行列演算は、半導体集積回路にて実行され、この演算処理によって得られたデータは、他レイヤの入力となる。
【0016】
畳み込みニューラルネットワーク1(以下、ニューラルネットワーク1と呼ぶ場合がある)では、ニューラルネットワーク1で使用されるウェイトデータのビット数を削減する圧縮が行われる。
【0017】
図2は、INT8(8ビット整数)のネットワークで使用されるウェイトの度数分布の一例を示す図である。
図2には、8ビット整数のネットワークで使用されるウェイトとして、8ビット256値で表現されるウェイトの度数分布の一例が示されている。同図に示すウェイトは、0(
図2に示す(00000000))の出現頻度が最も高く、0を中心に左右対称の分布傾向を有している。そこで、8ビット整数のネットワークで使用されるウェイトデータに対しては、0の出現頻度の高さを利用したデータ圧縮が行われる。なお、0の出現頻度が相対的に高くなるのは、ニューラルネットワークの学習時において、過学習を防ぐために一般に用いられる正則化に因るところが大きい。
【0018】
図3は、ターナリーウェイトの度数分布の一例を示す図である。
図3には、Ternaryネットワークで使用されるターナリーウェイトの度数分布の一例が示されている。2ビット3値は、例えば、00、01、11からなる2ビットデータであり、この場合、10は含まれない。同図に示すウェイトデータも、0(
図3に示す(00))の出現頻度が最も高く、0を中心に左右対称の分布傾向を有している。そこで、Ternaryネットワークで使用されるウェイトデータに対しても、0の出現頻度の高さを利用したデータ圧縮が行われる。
【0019】
図4は、比較例1のウェイトデータ圧縮方法において、ターナリーウェイトデータが圧縮される過程を示す図である。比較例1のウェイトデータ圧縮方法は、ゼロ値圧縮(ZVC)による圧縮方法であり、ターナリーウェイトデータに含まれる複数の2ビットデータをフラグ化することで圧縮を行う。
【0020】
比較例1及び2、ならびに、後述する実施の形態では、圧縮前のターナリーウェイトデータが、以下に示す2ビット3値で表されるターナリーウェイトが16個連続した32ビットデータである例について説明する(
図4の(a)参照)。
【0021】
「32b(00000100000011000001000000000011)」
【0022】
なお、上記の32bは、括弧内のデータが32ビットデータであることを示す。同様に以下において、nb(0000・・・・)のnbは、括弧内のデータがnビットデータ(nは2以上の整数)であることを示す。
【0023】
上記の32ビットデータを2ビットごとに区切ると、32ビットデータは以下に示す2ビットデータ列で表される(
図4の(b)参照)。
【0024】
「32b(00_00_01_00_00_00_11_00_00_01_00_00_00_00_00_11)」
【0025】
上記の2ビットデータ列の2ビットデータのうち、(00)に該当する2ビットデータには(1)のフラグを割り当て、(00)以外の2ビットデータには(0)のフラグを割り当てると、以下に示す16ビットデータからなるフラグ列が生成される(
図4の(c)参照)。
【0026】
「16b(1_1_0_1_1_1_0_1_1_0_1_1_1_1_1_0)」
【0027】
上記の16ビットデータは、フラグ(1)の位置に(00)であるゼロ値が存在し、フラグ(0)の位置に(00)以外の2ビットデータである非ゼロ値が存在していることを表している。
【0028】
比較例1では、(00)以外の2ビットデータのうち、2ビットデータが(11)であるものには(1)を割り当て、(01)であるものには(0)を割り当てる。すると、(00)以外の2ビットデータを順に並べた非ゼロ値列は、以下に示すデータで表される(
図4の(d)参照)。
【0029】
「4b(0_1_0_1)」
【0030】
このようにして、比較例1では、上記フラグ列及び非ゼロ値列からなる圧縮データが生成される。圧縮後のビット数は、16ビット+4ビット=20ビットとなり、圧縮前のターナリーウェイトデータのビット数よりも減少している。
【0031】
図5は、比較例2のウェイトデータ圧縮方法において、ターナリーウェイトデータが圧縮される過程を示す図である。比較例2のウェイトデータ圧縮方法は、連長圧縮(RLE)による圧縮方法であり、ターナリーウェイトデータに含まれる複数の2ビットデータ(00)(01)(11)のうちの(00)の連続性を利用して圧縮する。
【0032】
この例でも、圧縮前のターナリーウェイトデータが、以下に示す2ビット3値であるターナリーウェイトが16個連続した32ビットデータである例について説明する(
図5の(a)参照)。
【0033】
「32b(00000100000011000001000000000011)」
【0034】
上記の32ビットデータを2ビットごとに区切ると、32ビットデータは以下に示すような2ビットデータ列で表される(
図5の(b)参照)。
【0035】
「32b(00_00_01_00_00_00_11_00_00_01_00_00_00_00_00_11)」
【0036】
上記の2ビットデータ列では、(00)が2連続して表れた後に(01)が表れ、(00)が3連続して表れた後に(11)が表れ、(00)が2連続して表れた後に(01)が表れ、(00)が2連続して表れた後に(01)が表れ、(00)が3連続して表れた後に(00)が表れ、(00)が1つ表れた後に(11)が表れている。
【0037】
比較例2では、
図5の(c)に示すように、(00)が3連続している場合に(11)を割り当て、(00)が2連続している場合に(10)を割り当て、(00)が1つ表れている場合に(01)を割り当てる。また、比較例2では、さらに、(00)以外のデータに対してそのまま同じ値を割り当て、(00)が3連続して表れた後のデータにもそのまま同じ値を割り当てる。すると、上記の32ビットデータは、以下に示すデータで表される(
図5の(c)参照)。
【0038】
「20b(10_01_11_11_10_01_11_00_01_11)」
【0039】
このようにして、比較例2では、上記の圧縮データが生成される。圧縮後のビット数は、20ビットとなり、圧縮前のターナリーウェイトデータのビット数よりも減少している。
【0040】
しかしながら、比較例1及び2に示す圧縮方法では、ターナリーウェイトデータのビット数をある程度まで少なくすることができるが、それ以上に少なくすることができない。そこで、本開示のウェイトデータ圧縮方法は、ターナリーウェイトデータのビット数を比較例1及び2よりも少なくすることができるように、以下に示す構成を有している。
【0041】
以下、本開示の実施の形態について、図面を用いて詳細に説明する。なお、以下で説明する実施の形態は、いずれも本開示の一具体例を示す。以下の実施の形態で示される数値、形状、材料、規格、構成要素、構成要素の配置位置及び接続形態、ステップ、ステップの順序等は、一例であり、本開示を限定する主旨ではない。また、以下の実施の形態における構成要素のうち、本開示の最上位概念を示す独立請求項に記載されていない構成要素については、任意の構成要素として説明される。また、各図は、必ずしも厳密に図示したものではない。各図において、実質的に同一の構成については同一の符号を付し、重複する説明は省略又は簡略化する場合がある。
【0042】
(実施の形態1)
[1-1.ウェイトデータ圧縮装置]
まず、本実施の形態にて取り扱うウェイトデータについて説明する。
【0043】
図6の(a)は、2ビット3値であるターナリーウェイトの度数分布の一例を示す図であり、
図6の(b)は、ターナリーウェイトデータを、仮想的に4ビット9値のデータ列であるとみなした場合の9値の度数分布の一例を示す図である。
図6の(a)及び(b)は、同一のターナリーウェイトデータを、異なる粒度で度数分布図に落とし込んだものである。
【0044】
ターナリーウェイトは、前述したように、00、01及び11からなる2ビットデータであり、10は含まれない。
【0045】
4ビット9値は、連続する2ビットのターナリーウェイト2つを連結した仮想的な4ビットデータで、圧縮手順の中でのみ考慮し、実際の演算には用いられないものであり、具体的には、0000、0001、0011、0100、0101、0111、1100、1101及び1111からなるデータである。4ビット9値には、2ビット3値に含まれていない2ビットデータは含まれていない。すなわち4ビット9値には、10を用いる0010、0110、1110、1000、1001、1010及び1011は含まれない。
【0046】
図6の(b)に示すように、4ビット9値においても、2ビット3値の場合と同様に、0(
図6に示す(0000))の出現頻度が高くなっている。そこで、本実施の形態でも、0の出現頻度の高さを利用してデータ圧縮が行われる。
【0047】
図7は、実施の形態1に係るウェイトデータ圧縮装置10の機能構成の概要を示すブロック図である。
【0048】
ウェイトデータ圧縮装置10(以下、データ圧縮装置10と呼ぶ場合がある)は、後述するCPU(Central Processing Unit)等のプロセッサと、揮発性のメモリ及び不揮発性のメモリと、不揮発性のメモリに格納されたプログラムとを備えている。データ圧縮装置10の機能的な構成は、上記プログラムを実行することで実現される。
【0049】
データ圧縮装置10は、ニューラルネットワーク1で使用されるウェイトデータを圧縮する圧縮部20を備える。圧縮部20には、ニューラルネットワーク1で使用されるウェイトデータが入力され、圧縮部20は、入力されたウェイトデータを圧縮して、圧縮後のウェイトデータ(後述する第1の圧縮データd1)を生成する。圧縮後のウェイトデータは、外部のメモリに格納される。以下、圧縮部20が実行する処理について説明する。
【0050】
図8は、ウェイトデータ圧縮装置10において、ターナリーウェイトデータが圧縮される過程を示す図である。このデータ圧縮装置10では、2ビット3値のデータ列であるターナリーウェイトデータを仮想的に4ビット9値のデータ列であるとみなしてデータ圧縮を行う。
【0051】
本実施の形態でも、圧縮前の2ビット3値のデータ列であるターナリーウェイトデータが、
「32b(00000100000011000001000000000011)」
であるとして説明する(
図8の(a)参照)。
【0052】
圧縮部20は、2ビット3値のデータ列であるターナリーウェイトデータを4ビットごとに区切り、以下に示す4ビット9値で表現される4ビットデータ列を生成する(
図8の(b)参照)。
【0053】
「32b(0000_0100_0000_1100_0001_0000_0000_0011)」
【0054】
圧縮部20は、上記の4ビットデータ列に含まれる各データが、(0000)であるか否かを判断し、フラグ化する。具体的には圧縮部20は、4ビットデータ列の4ビットデータのうち、(0000)に該当する4ビットデータには(0)及び(1)のうち一方の値をフラグとして割り当て、(0000)以外の4ビットデータには(0)及び(1)のうち他方の値をフラグとして割り当てる。本実施の形態では、圧縮部20は、(0000)に該当する4ビットデータには(1)を割り当て、(0000)以外の4ビットデータには(0)を割り当てる。すると、以下に示す8ビットデータからなる第1のフラグ列が生成される(
図8の(c)参照)。
【0055】
「8b(1_0_1_0_0_1_1_0)」
【0056】
上記の第1のフラグ列は、フラグ(1)の位置に(0000)の4ビットデータであるゼロ値が存在し、フラグ(0)の位置に(0000)以外の4ビットデータである非ゼロ値が存在していることを表している。
【0057】
ここで、圧縮部20は、(0000)以外の4ビットデータを、
図8の(e)に示すテーブルT1に基づいて、3ビットデータに変換する。テーブルT1は、(0000)以外の8つのデータと3ビット8値のデータとの対応付けがされているテーブルであり、圧縮部20に実装されている。3ビット8値は、111、110、101、100、011、010、001及び000からなる3ビットデータである。
【0058】
圧縮部20は、テーブルT1に基づいて、(0000)以外の4ビットデータを3ビットデータに変換して第1の非ゼロ値列を生成する。具体的には、(0000)以外の4ビットデータのうち、(1111)には(111)を割り当て、(1101)には(110)を割り当て、(1100)には(101)を割り当て、(0001)には(100)を割り当て、(0011)には(011)を割り当て、(0100)には(010)を割り当て、(0101)には(001)を割り当て、(0111)には(000)を割り当てる。これにより、32ビットデータに含まれる非ゼロ値が、以下に示す第1の非ゼロ値列で表される(
図8の(d)参照)。
【0059】
「12b(010_101_100_011)」
【0060】
このように実施の形態1では、圧縮部20が、第1のフラグ列及び第1の非ゼロ値列からなる第1の圧縮データd1を生成する。第1の圧縮データd1のビット数は、8ビット+12ビット=20ビットとなり、圧縮前のウェイトデータのビット数よりも減少している。
【0061】
なお、上記の32ビットデータの例では、実施の形態1、比較例1及び2の全てにおいてビット数の減少数が同じとなっているが、実際のビット数の減少数は、データの中身によって変わるものである。以下では、データの中身によってビット数がどのように変わるかを説明する。
【0062】
図9は、実施の形態1、比較例1及び比較例2におけるターナリーウェイトデータの圧縮前後のビット数の変化を示す図である。
図9には、圧縮前のターナリーウェイトデータのビット数がAで示され、圧縮後のターナリーウェイトデータのビット数がAの倍数で示されている。なお、この例では、圧縮前のターナリーウェイトデータのビット数を8の倍数にし、比較例2にとって不利とならないビット数としている。
【0063】
同図に示すように、比較例1の圧縮方法では、フラグ列のビット数を「A/2」にすることができる。また、比較例1の圧縮方法では、非ゼロ値列のビット数を最も圧縮効果が高いときに「0」にすることができ、最も圧縮効果が低いときに「A/2」にすることができる。比較例1における圧縮後のビット数は、フラグ列のビット数及び非ゼロ値列のビット数の合計値であり「A/2~A」の範囲となる。
【0064】
また、比較例2の圧縮方法では、最も圧縮効果が高いときに「A/2」にすることができ、最も圧縮効果が低いときに「2A」となる。比較例2における圧縮後のビット数は「A/2~2A」の範囲となる。
【0065】
それに対し、実施の形態1の圧縮方法では、第1のフラグ列のビット数を「A/4」にすることができる。また、実施の形態1の圧縮方法では、非ゼロ値のビット数を最も圧縮効果が高いときに「0」にすることができ、最も圧縮効果が低いときに「3A/4」にすることができる。実施の形態1における圧縮後のビット数は、第1のフラグ列のビット数及び第1の非ゼロ値列のビット数の合計値であり「A/4~A」の範囲となる。したがって、実施の形態1では、比較例1及び2よりも、圧縮後のビット数を少なくすることが可能となる。また、比較例2は圧縮後のビット数が増えることがあるのに対し、実施の形態1では圧縮後のビット数が増えることはない。
【0066】
このように、本実施の形態に係るデータ圧縮装置10では、圧縮部20が、2ビット3値のデータ列であるターナリーウェイトデータから4ビットデータ列を生成し、この4ビットデータ列に基づいて、第1のフラグ列及び第1の非ゼロ値列を生成する。これによれば、データの圧縮を効果的に行うことができ、ニューラルネットワーク1で使用されるターナリーウェイトデータのビット数を従来技術よりも少なくすることができる。
【0067】
ここで、2ビット3値のデータ列であるターナリーウェイトデータを4ビット9値で表現される4ビットデータ列に変換することにした理由について説明する。具体的には、2ビット3値のデータ列であるターナリーウェイトデータを3ビット又は5ビット等で表現されるデータ列には変換していない点について説明する。
【0068】
図10は、ターナリーウェイトデータに含まれる非ゼロ値を表現するのに必要なビット数を示す図である。
図10には、2ビット3値のデータ列であるターナリーウェイトデータを仮想的にNビットのデータ列とみなし(Nは2以上の整数、あるいは、最後がNビットに満たない場合は、満たない数だけ1ビットの0を付加する)、フラグ化して圧縮する場合が示されている。また、
図10には、上記のようにして仮想したNビットのウェイトデータに含まれる非ゼロ値の通り数、及び、非ゼロ値を表現するのに必要なビット数が示されている。同図に示すように、Nが奇数である場合は、仮想的にNビット2
N値のデータ列であるとみなし、そのNビットデータにおいて発現する2
N-1通りの非ゼロ値を表現するのにNビットが必要となる。他方、Nが偶数である場合は、N=2Mとして(Mは1以上の整数)、仮想的にNビット3
M値のデータ列であるとみなし、そのNビットデータ列において発現する3
M-1通りの非ゼロ値を表現するのに、多くともN-1ビットが必要となる。ゆえに、一般にNを奇数とするよりも、最近接の偶数へ切り上げた方が圧縮効果を高くすることができる。また、Nが偶数である場合において、N=2、及びN=4では、数学的に3
M-1=2
N-1という条件が成り立つため、非ゼロ値を表現するビットに無駄がないが、N=6、及びN=8では、3
M-1<2
N-1となり、非ゼロ値を表現するためのビットを無駄にしており、圧縮効果が低い。例えば、N=8では、80通りの非ゼロ値を表現するために7ビットを要するが、本来7ビットでは2
7=128通りを表現できるため、7ビットの非ゼロ値に128-80=48通り分の無駄を含んでいると言える。また、N=10以上では、3
M-1<2
N-2が成り立つため、非ゼロ値を表現するのに多くともN-2ビットで足りるが、圧縮手段として現実的ではない。例えば、N=10の段階で、もはや243値ものウェイトデータであるとみなすため、フラグ化対象であるゼロ値の出現頻度が極端に低くなり圧縮効果を得られない。また、242通りもの非ゼロ値の8ビットへの対応付けも困難となる。したがって、2ビット3値のデータ列であるターナリーウェイトデータを、仮想的に3ビット以上のデータ列に変換する場合においては、4ビット9値で表現されるデータ列に変換することが望ましい。
【0069】
[1-2.ハードウェア構成]
次に、本実施の形態に係るウェイトデータ圧縮装置10のハードウェア構成について、
図11を参照しながら説明する。
【0070】
図11は、実施の形態1に係るウェイトデータ圧縮装置10の機能をソフトウェアにより実現するコンピュータ1000のハードウェア構成の一例を示す図である。
【0071】
コンピュータ1000は、ウェイトデータを圧縮するためのコンピュータである。コンピュータ1000は、
図11に示すように、入力装置1001、出力装置1002、CPU1003、内蔵ストレージ1004、RAM1005、書き込み装置1006、読取装置1007、送受信装置1008及びバス1009を備える。入力装置1001、出力装置1002、CPU1003、内蔵ストレージ1004、RAM1005、読取装置1007及び送受信装置1008は、バス1009により接続される。
【0072】
入力装置1001は入力ボタン、タッチパッド、タッチパネルディスプレイなどといったユーザインタフェースとなる装置であり、ユーザの操作を受け付ける。なお、入力装置1001は、ユーザの接触操作を受け付ける他、音声での操作、リモコン等での遠隔操作を受け付ける構成であってもよい。
【0073】
出力装置1002は、コンピュータ1000からの信号を出力する装置であり、信号出力端子の他、ディスプレイ、スピーカなどのユーザインタフェースとなる装置であってもよい。
【0074】
内蔵ストレージ1004は、フラッシュメモリなどである。また、内蔵ストレージ1004は、ウェイトデータ圧縮装置10の機能を実現するためのプログラム、及び、ウェイトデータ圧縮装置10の機能構成を利用したアプリケーションの少なくとも一方が、予め記憶されていてもよい。
【0075】
RAM1005は、ランダムアクセスメモリ(Random Access Memory)であり、プログラム又はアプリケーションの実行に際してデータ等の記憶に利用される。
【0076】
読取装置1007は、USB(Universal Serial Bus)メモリなどの記録媒体から情報を読み取る。読取装置1007は、上記のようなプログラムやアプリケーションが記録された記録媒体からそのプログラムやアプリケーションを読み取り、内蔵ストレージ1004に記憶させる。
【0077】
送受信装置1008は、無線又は有線で通信を行うための通信回路である。送受信装置1008は、例えばネットワークに接続されたサーバ装置と通信を行い、サーバ装置から上記のようなプログラムやアプリケーションをダウンロードして内蔵ストレージ1004に記憶させる。
【0078】
CPU1003は、中央演算処理装置であり、内蔵ストレージ1004に記憶されたプログラム、アプリケーションなどをRAM1005にコピーし、コピーしたプログラム、アプリケーションなどに含まれる命令をRAM1005から順次読み出して実行する。CPU1003は、読取装置1007又は送受信装置1008から取得したウェイトデータの圧縮処理を実行する。
【0079】
書き込み装置1006は、CPU1003で演算処理した結果をメモリに書き込む。メモリは、ニューラルネットワーク1を実行する半導体集積回路から見て外部に位置するメモリであり、このメモリには、CPU1003により圧縮処理された第1の圧縮データd1が格納される。
【0080】
[1-3.ウェイトデータ圧縮方法]
次に、実施の形態1に係るウェイトデータ圧縮方法について、
図12を参照しながら説明する。
【0081】
図12は、実施の形態1に係るウェイトデータ圧縮方法の流れを示すフローチャートである。
【0082】
本実施の形態に係るウェイトデータ圧縮方法は、ニューラルネットワーク1で使用されるウェイトデータを圧縮する方法であって、4ビットデータ列を生成するステップと、第1の圧縮データd1を生成するステップと、を含む。
【0083】
まず、圧縮部20は、
図8の(a)に示す2ビット3値のデータ列であるターナリーウェイトデータを、
図8の(b)に示すように4ビットごとに区切り、4ビット9値で表現される4ビットデータ列を生成する(ステップS11)。
【0084】
次に、圧縮部20は、ステップS11で生成した4ビットデータ列の4ビットデータのうち、(0000)に該当する4ビットデータには(0)及び(1)のうち一方の値をフラグとして割り当て、(0000)以外の4ビットデータには(0)及び(1)のうち他方の値をフラグとして割り当てる。圧縮部20は、これらの割り当てにより、第1のフラグ列を生成する(ステップS12)。本実施の形態では、
図8の(c)に示すように、(0000)に該当する4ビットデータには(1)を割り当て、(0000)以外の4ビットデータには(0)を割り当てる。
【0085】
また、圧縮部20は、(0000)以外の4ビットデータを3ビット8値のいずれかの3ビットデータに変換して第1の非ゼロ値列を生成する(ステップS13)。4ビットデータを3ビットデータに変換する際は、
図8の(e)に示すテーブルT1に基づいて、4ビットデータを3ビットデータに変換し、第1の非ゼロ値列を生成する。これらステップS12及びS13により、第1のフラグ列及び第1の非ゼロ値列からなる第1の圧縮データd1を生成する(ステップS14)。なお、テーブルT1に示されている0000以外の8つのデータと3ビット8値のデータとの対応付けは、ステップS13よりも前に予め決定され、圧縮部20に実装されている。
【0086】
圧縮部20は、第1の圧縮データd1を、ニューラルネットワーク1による処理が実行される半導体集積回路の外部のメモリに格納する(ステップS15)。
【0087】
これらステップS11~S15が実行されることで、ターナリーウェイトデータが圧縮され、保存される。なお、4ビットデータ列を生成するステップS11において、2ビット3値のデータ列であるターナリーウェイトデータに対する2ビットデータの区切り数が奇数となり、ウェイトデータの末尾が4ビットデータにならない場合がある。その場合、圧縮部20は、ウェイトデータの末尾に(00)を付加した後に当該ウェイトデータを4ビットごとに区切ることで、4ビットデータ列を生成してもよい。ただし、慣例的には畳み込みニューラルネットワークの1レイヤ毎のウェイトデータに含まれるウェイト数は偶数であるため、2ビットデータの区切り数は一般に偶数である。
【0088】
[1-4.実施の形態1の変形例1]
実施の形態1の変形例1に係るウェイトデータ圧縮方法について説明する。この例では、実施の形態1の圧縮方法に加え、さらに、比較例1の圧縮方法を実行し、圧縮効果が高いほうの圧縮方法を選択する例について説明する。
【0089】
図13は、実施の形態1の変形例1に係るウェイトデータ圧縮方法を示すフローチャートである。変形例1に係るウェイトデータ圧縮方法は、上記で説明したステップS11~S14に加え、さらに、2ビットデータ列を生成するステップと、第2の圧縮データd2を生成するステップ等と、を含む。ここでは、ステップS11~S14以外のステップを中心に説明する。
【0090】
ステップS11~S14の後、圧縮部20は、
図4の(a)に示す2ビット3値のデータ列であるターナリーウェイトデータを、
図4の(b)に示すように2ビットごとに区切り、2ビットデータ列を生成する(ステップS21)。
【0091】
次に、圧縮部20は、ステップS21で生成した2ビットデータ列の2ビットデータのうち、(00)に該当する2ビットデータには(1)を、(00)以外の2ビットデータには(0)を割り当て、あるいは、(00)に該当する2ビットデータには(0)を、(00)以外の2ビットデータには(1)を割り当てることで第2のフラグ列を生成する(ステップS22)。本変形例では、
図4の(c)に示すように、(00)に該当する2ビットデータには(1)を割り当て、(00)以外の2ビットデータには(0)を割り当てる。
【0092】
また、圧縮部20は、
図4の(d)に示すように、(00)以外の2ビットデータを順に並べて第2の非ゼロ値列を生成する(ステップS23)。これにより、第2のフラグ列及び第2の非ゼロ値列からなる第2の圧縮データd2を生成する(ステップS24)。
【0093】
そして、圧縮部20は、第1の圧縮データd1のビット数と、第2の圧縮データd2のビット数とを比較し、ビット数が少ないほうの圧縮データをメモリに格納する(ステップS25)。
【0094】
これらステップS11~S14及びS21~S25が実行されることで、より効果的にウェイトデータが圧縮される。なお、ステップS21~S24は、ステップS11~S14の前に実行されてもよいし、後に実行されてもよいし、並行して実行されてもよい。
【0095】
[1-5.効果等]
本実施の形態のウェイトデータ圧縮方法は、ニューラルネットワークで使用されるターナリーウェイトデータを圧縮する方法であって、2ビット3値のデータ列であるターナリーウェイトデータを4ビットごとに区切り、4ビット9値で表現される4ビットデータ列を生成するステップと、4ビットデータ列の4ビットデータのうち、0000に該当する4ビットデータには0及び1のうち一方の値をフラグとして割り当て、0000以外の4ビットデータには0及び1のうち他方の値をフラグとして割り当てることで第1のフラグ列を生成し、かつ、0000以外の4ビットデータを3ビット8値のいずれかの3ビットデータに変換して第1の非ゼロ値列を生成することで、第1のフラグ列及び第1の非ゼロ値列からなる第1の圧縮データを生成するステップと、を含む。
【0096】
このように、2ビット3値のデータ列であるターナリーウェイトデータから4ビットデータ列を生成し、この4ビットデータ列に基づいて、第1のフラグ列及び第1の非ゼロ値列を生成することで、データの圧縮を効果的に行うことができる。これにより、ニューラルネットワーク1で使用されるウェイトデータのビット数を従来技術よりも少なくすることができる。
【0097】
また、ウェイトデータ圧縮方法は、さらに、4ビット9値のうち0000以外の8つのデータと3ビット8値のデータとの対応付けを行うステップを含み、第1の圧縮データd1を生成するステップでは、8つのデータと3ビット8値のデータとの対応付けに基づいて、0000以外のデータを3ビット8値のデータに変換してもよい。
【0098】
これによれば、第1の非ゼロ値列を適切に生成し、データの圧縮を効果的に行うことができる。これにより、ニューラルネットワーク1で使用されるウェイトデータのビット数を従来技術よりも少なくすることができる。
【0099】
また、2ビット3値は、00、01及び11からなる2ビットデータであり、4ビット9値は、0000、0001、0011、0100、0101、0111、1100、1101及び1111からなる4ビットデータであり、3ビット8値は、000、001、010、011、100、101、110及び111からなる3ビットデータであってもよい。
【0100】
これによれば、第1の非ゼロ値列を適切に生成し、データの圧縮を効果的に行うことができる。これにより、ニューラルネットワーク1で使用されるウェイトデータのビット数を従来技術よりも少なくすることができる。
【0101】
また、4ビットデータ列を生成するステップでは、2ビット3値のデータ列であるターナリーウェイトデータに対する2ビットデータの区切り数が奇数である場合に、当該ターナリーウェイトデータの末尾に00を付加した後に、当該ターナリーウェイトデータを4ビットごとに区切ることで4ビットデータ列を生成してもよい。
【0102】
これにより、ニューラルネットワーク1で使用されるウェイトデータのビット数を従来技術よりも少なくすることができる。
【0103】
また、ウェイトデータ圧縮方法は、さらに、第1の圧縮データd1を、ニューラルネットワーク1による処理が実行される半導体集積回路の外部のメモリに格納するステップを含んでいてもよい。
【0104】
これによれば、半導体集積回路の内部に格納すべきウェイトデータを減らすことができ、半導体集積回路にかかる負担を低減することができる。
【0105】
また、ウェイトデータ圧縮方法は、さらに、2ビット3値のデータ列であるターナリーウェイトデータを2ビットごとに区切り、2ビット3値で表現される2ビットデータ列を生成するステップと、2ビットデータ列の2ビットデータのうち、00に該当する2ビットデータには1を、00以外の2ビットデータには0を割り当て、あるいは、00に該当する2ビットデータには0を、00以外の2ビットデータには1を割り当てることで第2のフラグ列を生成し、かつ、00以外の2ビットデータを順に並べて第2の非ゼロ値列を生成することで、第2のフラグ列及び第2の非ゼロ値列からなる第2の圧縮データを生成するステップと、第1の圧縮データのビット数と、第2の圧縮データのビット数とを比較し、ビット数が少ないほうの圧縮データをメモリに格納するステップと、を含んでいてもよい。
【0106】
このように、ビット数が少ないほうの圧縮データを選択することで、ニューラルネットワーク1で使用されるウェイトデータのビット数を従来技術よりも少なくすることができる。
【0107】
また、上記格納するステップは、ニューラルネットワークの畳み込みレイヤごとに実行されてもよい。
【0108】
これによれば、畳み込みレイヤごとに使用されるウェイトデータのビット数を従来技術よりも少なくすることができる。
【0109】
本実施の形態に係るウェイトデータ圧縮装置10は、ニューラルネットワーク1で使用されるターナリーウェイトデータを圧縮する圧縮部20を備える。圧縮部20は、2ビット3値のデータ列であるターナリーウェイトデータを4ビットごとに区切り、4ビット9値で表現される4ビットデータ列を生成する。また、圧縮部20は、4ビットデータ列の4ビットデータのうち、0000に該当する4ビットデータには0及び1のうち一方の値をフラグとして割り当て、0000以外の4ビットデータには0及び1のうち他方の値をフラグとして割り当てることで第1のフラグ列を生成する。また、圧縮部20は、0000以外の4ビットデータを3ビット8値のいずれかの3ビットデータに変換して第1の非ゼロ値列を生成することで、第1のフラグ列及び第1の非ゼロ値列からなる第1の圧縮データd1を生成する。
【0110】
このように、圧縮部20が、2ビット3値のデータ列であるターナリーウェイトデータから4ビットデータ列を生成し、この4ビットデータ列に基づいて、第1のフラグ列及び第1の非ゼロ値列を生成することで、データの圧縮を効果的に行うことができる。これにより、ニューラルネットワーク1で使用されるウェイトデータのビット数を従来技術よりも少なくすることができる。
【0111】
(実施の形態2)
[2-1.ウェイトデータ伸長装置]
図14は、実施の形態2に係るウェイトデータ伸長装置50の機能構成の概要を示すブロック図である。
【0112】
ウェイトデータ伸長装置50(以下、データ伸長装置50と呼ぶ場合がある)は、CPU等のプロセッサと、揮発性のメモリ及び不揮発性のメモリと、不揮発性のメモリに格納されたプログラムとを備えている。データ伸長装置50の機能的な構成は、上記プログラムを実行することで実現される。
【0113】
データ伸長装置50は、データ圧縮装置10によって圧縮された第1の圧縮データd1を伸長する伸長回路60を備える。伸長回路60には、データ圧縮装置10によって圧縮された圧縮後のウェイトデータが入力される。伸長回路60は、伸長回路60に入力された圧縮後のウェイトデータを伸長して、圧縮前のウェイトデータに復元する。復元されたウェイトデータは、ニューラルネットワーク1のレイヤに出力される。以下、伸長回路60が実行する処理について説明する。
【0114】
図15は、ウェイトデータ伸長装置50において、ターナリーウェイトデータが伸長される過程を示す図である。
【0115】
伸長回路60は、第1の圧縮データd1を構成する第1のフラグ列及び第1の非ゼロ値列に対して伸長処理を行う。
【0116】
例えば、第1のフラグ列は、以下に示すデータである(
図15の(a)参照)。
【0117】
「8b(1_0_1_0_0_1_1_0)」
【0118】
例えば、第1の非ゼロ値列は、以下に示すデータである(
図15の(b)参照)。
【0119】
「12b(010_101_100_011)」
【0120】
伸長回路60は、
図15の(d)のテーブルT2に基づいて、第1の非ゼロ値列に含まれる3ビットデータを(0000)以外の4ビットデータに変換し、順番に並べる。テーブルT2は、(0000)以外の4ビットデータと3ビット8値のデータとの対応付けがされているテーブルであり、伸長回路60に実装されている。テーブルT2は、圧縮時に用いたテーブルT1と同じである。伸長回路60は、上記の変換により、以下に示す複数の4ビットデータを生成する(
図15の(c)参照)。
【0121】
「16b(0100_1100_0001_0011)」
【0122】
また、伸長回路60は、
図15の(a)に示す第1のフラグ列の各フラグに4ビットデータを当てはめ、圧縮前のデータを生成する。具体的には、伸長回路60は、各フラグが(0)であるか否かを判断し、第1のフラグ列に含まれる(0)及び(1)からなるフラグのうち、一方の値のフラグには(0000)を当てはめ、他方の値のフラグには、(0000)以外の4ビットデータを当てはめ、それぞれ4ビット粒度で伸長処理を行う。
【0123】
本実施の形態では、予め設定された情報に基づき、(1)のフラグには(0000)を当てはめ、(0)のフラグには、(0000)以外の4ビットデータを当てはめる。なお、(0000)以外の4ビットデータは、テーブルT2に基づいて変換した4ビットデータであり、当てはめを行う際は、3ビット8値のデータから(0000)以外の4ビットデータに変換した順番に当てはめていく。これらの当てはめにより、伸長回路60は、以下に示す圧縮前のウェイトデータを生成する(
図15の(e)参照)。
【0124】
「32b(00000100000011000001000000000011)」
【0125】
このように、本実施の形態に係るデータ伸長装置50では、伸長回路60が、第1の非ゼロ値列及び第1のフラグ列に基づいて4ビットデータ列を生成して、圧縮前のウェイトデータを生成する。これによれば、ビット数が少なくなるように圧縮されたウェイトデータを効果的に伸長することができる。また、データ伸長装置50では、比較例1及び2のように2ビット粒度で伸長処理を行うのでなく4ビット粒度で伸長処理を行うので、単位時間における伸長処理の回数を減らすことができる。これにより、伸長処理を行うための回路構成を簡素化することができる。
【0126】
[2-2.ハードウェア構成]
次に、本実施の形態に係るウェイトデータ伸長装置50のハードウェア構成について、
図16を参照しながら説明する。
【0127】
図16は、実施の形態2に係るウェイトデータ伸長装置50の機能をソフトウェアにより実現するコンピュータ1500のハードウェア構成の一例を示す図である。
【0128】
コンピュータ1500は、CNN処理を実行するためのコンピュータである。コンピュータ1500は、
図16に示すように、入力装置1001、出力装置1002、CPU1003、内蔵ストレージ1004、RAM1005、書き込み装置1006、読取装置1007、送受信装置1008及びバス1009を備える。入力装置1001、出力装置1002、CPU1003、内蔵ストレージ1004、RAM1005、読取装置1007及び送受信装置1008は、バス1009により接続される。
【0129】
入力装置1001は入力ボタン、タッチパッド、タッチパネルディスプレイなどといったユーザインタフェースとなる装置であり、ユーザの操作を受け付ける。なお、入力装置1001は、ユーザの接触操作を受け付ける他、音声での操作、リモコン等での遠隔操作を受け付ける構成であってもよい。
【0130】
出力装置1002は、コンピュータ1500からの信号を出力する装置であり、信号出力端子の他、ディスプレイ、スピーカなどのユーザインタフェースとなる装置であってもよい。
【0131】
内蔵ストレージ1004は、フラッシュメモリなどである。また、内蔵ストレージ1004は、ウェイトデータ圧縮装置10の機能を実現するためのプログラム、及び、ウェイトデータ圧縮装置10の機能構成を利用したアプリケーションの少なくとも一方が、予め記憶されていてもよい。
【0132】
RAM1005は、例えばDDR(Double-Data-Rate)などのランダムアクセスメモリ(Random Access Memory)であり、プログラム又はアプリケーションの実行に際してデータ等の記憶に利用される。RAM1005には、CPU1003によって伸長処理されたウェイトデータが保存される。
【0133】
送受信装置1008は、無線又は有線で通信を行うための通信回路である。送受信装置1008は、例えばネットワークに接続されたサーバ装置と通信を行い、サーバ装置から上記のようなプログラムやアプリケーションをダウンロードして内蔵ストレージ1004に記憶させる。
【0134】
書き込み装置1006は、USBメモリなどの記録媒体に情報を書き込む。
【0135】
読取装置1007は、上記のようなプログラムやアプリケーションが記録された記録媒体からそのプログラムやアプリケーションを読み取り、内蔵ストレージ1004に記憶させる。
【0136】
また、読取装置1007は、外部のメモリから情報を読み取る。外部のメモリは、ニューラルネットワーク1を実行する半導体集積回路から見て外部に位置するメモリであり、このメモリには、第1の圧縮データd1が格納されている。読取装置1007は、外部のメモリから読み取った情報をCPU1003へ出力する。
【0137】
CPU1003は、中央演算処理装置であり、内蔵ストレージ1004に記憶されたプログラム、アプリケーションなどをRAM1005にコピーし、コピーしたプログラム、アプリケーションなどに含まれる命令をRAM1005から順次読み出して実行する。本実施の形態のCPU1003は、外部のメモリから取得した第1の圧縮データd1の伸長処理を実行する。
【0138】
[2-3.ウェイトデータ伸長方法]
次に、実施の形態2に係るウェイトデータ伸長方法について、
図17を参照しながら説明する。
【0139】
図17は、実施の形態2に係るウェイトデータ伸長方法の流れを示すフローチャートである。
【0140】
実施の形態2に係るウェイトデータ伸長方法は、実施の形態1のウェイトデータ圧縮方法によって圧縮された第1の圧縮データd1を伸長する方法である。
【0141】
まず、伸長回路60は、
図15の(b)の第1の非ゼロ値列に含まれる3ビットデータを(0000)以外の複数の4ビットデータに変換し、順番に並べる(ステップS51)。3ビットデータを4ビットデータに変換する際は、
図15の(d)のテーブルT2に基づいて、3ビットデータを4ビットデータに変換する。これにより、
図15の(c)に示す複数の4ビットデータを生成する。
【0142】
次に、伸長回路60は、
図15の(a)の第1のフラグ列に含まれる(0)及び(1)からなるフラグのうち、一方の値のフラグには(0000)を当てはめ、他方の値のフラグには(0000)以外の4ビットデータを当てはめる。実施の形態2では、(1)のフラグには(0000)を当てはめ、(0)のフラグには、(0000)以外の4ビットデータを当てはめる。(0000)以外の4ビットデータは、テーブルT2に基づいて変換した4ビットデータであり、当てはめを行う際は、3ビット8値のデータから(0000)以外の4ビットデータに変換した順番に当てはめていく。これらの当てはめにより、伸長回路60は、
図15の(e)に示すような圧縮前のウェイトデータを生成する(ステップS52)。復元されたウェイトデータは、ニューラルネットワーク1の各レイヤにおける行列演算に使用される。
【0143】
[2-4.効果等]
本実施の形態に係るウェイトデータ伸長方法は、実施の形態1のウェイトデータ圧縮方法によって圧縮された第1の圧縮データd1を伸長する方法であって、第1の非ゼロ値列に含まれる3ビットデータを0000以外の複数の4ビットデータに変換して並べるステップと、第1のフラグ列に含まれる0及び1からなるフラグのうち、一方の値のフラグには0000を当てはめ、他方の値のフラグには複数の4ビットデータが並ぶ順に4ビットデータを当てはめることで、圧縮前のターナリーウェイトデータを生成するステップと、を含む。
【0144】
このように、第1の非ゼロ値列及び第1のフラグ列に基づいて4ビットデータ列を生成して、圧縮前のターナリーウェイトデータを生成することで、ビット数が少なくなるように圧縮されたターナリーウェイトデータを効果的に伸長することができる。
【0145】
本実施の形態に係るウェイトデータ伸長装置50は、ウェイトデータ圧縮装置10によって圧縮された第1の圧縮データd1を伸長する伸長回路60を備える。伸長回路60は、3ビット8値で表される第1の非ゼロ値列を0000以外の複数の4ビットデータに変換して並べ、第1のフラグ列に含まれる0及び1からなるフラグのうち、一方の値のフラグには0000を当てはめ、他方の値のフラグには複数の4ビットデータが並ぶ順に4ビットデータを当てはめることで、圧縮前のターナリーウェイトデータを生成する。
【0146】
このように、伸長回路60が、第1の非ゼロ値列及び第1のフラグ列に基づいて4ビットデータ列を生成して、圧縮前のターナリーウェイトデータを生成することで、ビット数が少なくなるように圧縮されたターナリーウェイトデータを効果的に伸長することができる。
【0147】
(実施の形態3)
実施の形態3に係るウェイトデータの圧縮方法及び伸長方法について説明する。この実施の形態では、4ビット整数(INT4)による圧縮及び伸長を行う例について説明する。
【0148】
図18は、実施の形態3にて実行されるウェイトデータの圧縮処理及び伸長処理を示す図である。
【0149】
実施の形態3に係るウェイトデータ圧縮方法は、ゼロ値圧縮(ZVC)による圧縮方法である。実施の形態3でも、圧縮前のウェイトデータが、
「32b(00000100000011000001000000000011)」
であるとして説明する(
図18の(a)参照)。
【0150】
まず、32ビットのウェイトデータを4ビットごとに区切り、4ビットデータ列を生成する(
図18の(b)参照)。
【0151】
「32b(0000_0100_0000_1100_0001_0000_0000_0011)」
【0152】
ここで、4ビットデータ列の4ビットデータのうち、(0000)に該当する4ビットデータには(1)のフラグを割り当て、(0000)以外の4ビットデータには(0)のフラグを割り当てる。すると、以下に示す8ビットデータからなるフラグ列が生成される(
図18の(c)参照)。
【0153】
「8b(1_0_1_0_0_1_1_0)」
【0154】
上記のフラグ列は、フラグ(1)の位置に(0000)の4ビットデータであるゼロ値が存在し、フラグ(0)の位置に(0000)以外の4ビットデータである非ゼロ値が存在していることを表している。
【0155】
ここで、(0000)以外の4ビットデータを、(0000)以外の4ビットデータに対して、そのまま同じ値を割り当てる。すると、(0000)以外の4ビットデータを順に並べた非ゼロ値列は、以下に示すデータで表される(
図18の(d)参照)。
【0156】
「16b(0100_1100_0001_0011)」
【0157】
このようにして圧縮された圧縮後のデータは、外部のメモリに格納される。
【0158】
実施の形態3に係るウェイトデータ伸長方法は、上記のウェイトデータ圧縮方法によって圧縮されたデータを伸長する方法である。このウェイトデータ伸長方法では、実施の形態2で示したデータ伸長装置50を用いることができる。
【0159】
まず、データ伸長装置50は、
図18の(d)のフラグ列に含まれる(1)のフラグに(0000)を当てはめ、(0)のフラグに(0000)以外の4ビットデータをそのまま当てはめ、それぞれ4ビット粒度で伸長処理する。これにより、以下に示す圧縮前のウェイトデータが生成される(
図18の(e)参照)。
【0160】
「32b(00000100000011000001000000000011)」
【0161】
復元されたウェイトデータは、ニューラルネットワーク1の各レイヤにおける行列演算に使用される。
【0162】
このように、データ伸長装置50は、4ビット整数(INT4)によって圧縮されたデータを伸長することも可能である。
【0163】
(実施の形態4)
実施の形態4に係るウェイトデータの圧縮方法及び伸長方法について説明する。この実施の形態では、8ビット整数(INT8)による圧縮及び伸長を行う例について説明する。
【0164】
図19は、実施の形態4にて実行されるウェイトデータの圧縮処理及び伸長処理を示す図である。
【0165】
実施の形態4に係るウェイトデータ圧縮方法は、ゼロ値圧縮(ZVC)による圧縮方法である。この形態では、圧縮前のウェイトデータが、
図19の(a)に示す80ビットデータである例について説明する。
【0166】
図19の(a)に示す80ビットデータを8ビットごとに区切ると、80ビットデータは、
図19の(b)に示す8ビットデータ列で表される。
【0167】
実施の形態4では、8ビットデータ列の8ビットデータのうち、(00000000)に該当する8ビットデータには(1)のフラグを割り当て、(00000000)以外の8ビットデータには(0)のフラグを割り当てる。すると、
図19の(c)に示すような10bからなるフラグ列が生成される。このフラグ列は、フラグ(1)の位置に(00000000)であるゼロ値が存在し、フラグ(0)の位置に(00000000)以外の8ビットデータである非ゼロ値が存在していることを表している。
【0168】
実施の形態4では、(00000000)以外の8ビットデータに対して、そのまま同じ値を割り当てる。すると、(00000000)以外の8ビットデータを順に並べた非ゼロ値列は、
図19の(d)に示すデータで表される。こられの圧縮処理により圧縮された後のデータは、外部のメモリに格納される。
【0169】
実施の形態4に係るウェイトデータ伸長方法は、上記のウェイトデータ圧縮方法によって圧縮されたデータを伸長する方法である。このウェイトデータ伸長方法でも、実施の形態2で示したデータ伸長装置50を用いることができる。
【0170】
まず、データ伸長装置50は、
図19の(c)のフラグ列に含まれる(1)のフラグに(00000000)を当てはめ、(0)のフラグには、(00000000)以外の8ビットデータをそのまま当てはめ、8ビット粒度で伸長する。これにより、
図19の(e)に示すような、圧縮前のウェイトデータが生成される。復元されたウェイトデータは、ニューラルネットワーク1の各レイヤにおける行列演算に使用される。
【0171】
このように、データ伸長装置50は、8ビット整数(INT8)によって圧縮されたデータを伸長することも可能である。
【0172】
(その他の実施の形態)
以上、本開示に係るウェイトデータ圧縮方法などについて、各実施の形態に基づいて説明したが、本開示は、これらの実施の形態に限定されるものではない。本開示の主旨を逸脱しない限り、当業者が思いつく各種変形を各実施の形態に施したものや、各実施の形態における一部の構成要素を組み合わせて構築される別の形態も、本開示の範囲内に含まれる。
【0173】
また、以下に示す形態も、本開示の一つ又は複数の態様の範囲内に含まれてもよい。
【0174】
(1)上記のウェイトデータ圧縮装置及びウェイトデータ伸長装置を構成する構成要素の一部は、マイクロプロセッサ、ROM、RAM、ハードディスクユニット、ディスプレイユニット、キーボード、マウスなどから構成されるコンピュータシステムであってもよい。前記RAM又はハードディスクユニットには、コンピュータプログラムが記憶されている。前記マイクロプロセッサが、前記コンピュータプログラムにしたがって動作することにより、その機能を達成する。ここでコンピュータプログラムは、所定の機能を達成するために、コンピュータに対する指令を示す命令コードが複数個組み合わされて構成されたものである。
【0175】
(2)上記のウェイトデータ圧縮装置及びウェイトデータ伸長装置を構成する構成要素の一部は、1個のシステムLSI(Large Scale Integration:大規模集積回路)から構成されているとしてもよい。システムLSIは、複数の構成部を1個のチップ上に集積して製造されており、具体的には、マイクロプロセッサ、ROM、RAMなどを含んで構成されるコンピュータシステムである。前記RAMには、コンピュータプログラムが記憶されている。前記マイクロプロセッサが、前記コンピュータプログラムにしたがって動作することにより、システムLSIは、その機能を達成する。
【0176】
(3)上記のウェイトデータ圧縮装置及びウェイトデータ伸長装置を構成する構成要素の一部は、各装置に脱着可能なICカード又は単体のモジュールから構成されているとしてもよい。前記ICカード又は前記モジュールは、マイクロプロセッサ、ROM、RAMなどから構成されるコンピュータシステムである。前記ICカード又は前記モジュールは、上記のLSIを含むとしてもよい。マイクロプロセッサが、コンピュータプログラムにしたがって動作することにより、前記ICカード又は前記モジュールは、その機能を達成する。このICカード又はこのモジュールは、耐タンパ性を有するとしてもよい。
【0177】
(4)また、上記のウェイトデータ圧縮装置及びウェイトデータ伸長装置を構成する構成要素の一部は、前記コンピュータプログラム又は前記デジタル信号をコンピュータで読み取り可能な記録媒体、例えば、フレキシブルディスク、ハードディスク、CD-ROM、MO、DVD、DVD-ROM、DVD-RAM、BD(Blu-ray(登録商標) Disc)、半導体メモリなどに記録したものとしてもよい。また、これらの記録媒体に記録されている前記デジタル信号であるとしてもよい。
【0178】
また、上記のウェイトデータ圧縮装置及びウェイトデータ伸長装置を構成する構成要素の一部は、前記コンピュータプログラム又は前記デジタル信号を、電気通信回線、無線又は有線通信回線、インターネットを代表とするネットワーク、データ放送等を経由して伝送するものとしてもよい。
【0179】
(5)本開示は、上記に示す方法であるとしてもよい。また、これらの方法をコンピュータにより実現するコンピュータプログラムであるとしてもよいし、前記コンピュータプログラムからなるデジタル信号であるとしてもよい。さらに、本開示は、そのコンピュータプログラムを記録したCD-ROM等である非一時的なコンピュータ読み取り可能な記録媒体として実現してもよい。
【0180】
(6)また、本開示は、マイクロプロセッサとメモリを備えたコンピュータシステムであって、前記メモリは、上記コンピュータプログラムを記憶しており、前記マイクロプロセッサは、前記コンピュータプログラムにしたがって動作するとしてもよい。
【0181】
(7)また、前記プログラム又は前記デジタル信号を前記記録媒体に記録して移送することにより、又は前記プログラム又は前記デジタル信号を、前記ネットワーク等を経由して移送することにより、独立した他のコンピュータシステムにより実施するとしてもよい。
【0182】
(8)上記実施の形態及び上記変形例をそれぞれ組み合わせるとしてもよい。
【産業上の利用可能性】
【0183】
本開示は、ニューラルネットワークのコンピュータなどへの実装方法として、画像処理方法などに利用できる。
【符号の説明】
【0184】
1 ニューラルネットワーク
10 ウェイトデータ圧縮装置
20 圧縮部
50 ウェイトデータ伸長装置
60 伸長回路
1000、1500 コンピュータ
1001 入力装置
1002 出力装置
1003 CPU
1004 内蔵ストレージ
1005 RAM
1006 書き込み装置
1007 読取装置
1008 送受信装置
1009 バス
d1、d2、d3 圧縮データ
T1、T2 テーブル