技術情報

ネットワーク射影を使用したニューラル ネットワークの圧縮

著者 Antoni Woss、MathWorks


大規模化と複雑化が進むディープラーニング ネットワークをリソースに制約のあるデバイスに展開することは、多くの AI 実務者が直面する大きな課題となっています。この課題が生じるのは、最新のディープ ニューラル ネットワークが通常、ハイパフォーマンスのプロセッサおよび GPU で実行され、数百万個の学習可能なパラメーターを備えているためです。こうした強力なディープラーニング モデルをエッジデバイスに展開するには、多くの場合、高い精度とモデル表現力を維持しながら、モデルを圧縮してディスク上のサイズ、ランタイムメモリ、および推論時間を削減する必要があります。

枝刈りや量子化など、ディープラーニング ネットワークを圧縮する手法は数多くあり、複数の手法を併用できます。この記事では、新しい手法 "ネットワーク射影" を紹介します。この手法は目的の層でのニューラル励起の共分散を解析し、射影空間で演算するように層を変更することで、学習可能なパラメーターの数を減らします。層の演算は基本的に低いランクの射影空間で行われますが、層の表現力は高い状態で維持されます。これは、幅、つまりニューラル活性化の数が、元のネットワーク アーキテクチャと比較して、変更なく維持されるためです。この手法は、枝刈りや量子化の代わりに、あるいは枝刈りや量子化に加えて使用できます。

射影によるネットワーク圧縮

ディープ ニューラル ネットワークの学習では、指定された損失関数を最小化する、学習可能なパラメーターの対応する高次元空間内の点を判別することになります。この最適な値を判別する最も一般的な手法は、勾配降下法およびそのバリエーションを使用した最小化です。基礎となる、判別しようとする関数についての知識不足を克服するために、適切な関数の検出に必要な表現力が十分に得られるよう、多数の学習可能なパラメーターを使用するディープ ネットワーク アーキテクチャが提案されています。これらは最終的に、実際のタスクにとっては過剰にパラメーター化され、必然的にネットワーク内のニューロン間の高い相関につながってしまう可能性があります。

ネットワーク射影では、これらのニューラル相関を解析してから、重要なニューラル関係を保持して精度と表現力を維持しながら、ネットワーク内の学習可能なパラメーターの数を最終的に減らす射影演算を注意深く導入することで、圧縮の問題に対処します。

背景

説明のために、まずは単純なネットワーク \( F: \mathbb{R}^{a_0} → \mathbb{R}^{a_N} \) を次のように \( N \) 個の関数の合成として定義します。\[ F(x) = f_N (f_{N-1} (... f_{1} (x) ...)) \]

ここで、\( f_i:\mathbb{R}^{a_{i−1}}→\mathbb{R}^{a_i} \) は、層 \(i \) の関数演算を示しています。\(f_i \) の領域の次元は \(a_{i−1} \in \mathbb{N} \) です。\(x \in \mathbb{R}^{a_0} \) はネットワークへの入力テンソルです。なお、テンソルのすべての次元の積を示すために \(a_i \) が記述されています。たとえば、イメージ分類タスク用に学習した畳み込みニューラル ネットワークでイメージ \(x_{h,w,c} \in \mathbb{R}^{H×W×C} \) を伝播します。ここで、\(H \) および \(W \) はそれぞれイメージの高さと幅であり、カラーチャネルの数は \(C \) です。

"ニューロン" は \(f_i \) の要素単位の成分として定義されます。より正式には、\(i \) 番目の層に \(a_i \) 個のニューロンがあり、\(k=1,…,a_i \) についてニューロンはスカラー関数 \( n^{(k)}_i(x):\mathbb{R}^{a_{i-1}}→\mathbb{R} \) です。たとえば、3 つの入力を受け取って 2 つの出力を生成する全結合層で、3 つのベクトルを受け取って 1 つのスカラーを出力するニューロンが 2 つあります (図 1)。

3 つの入力を受け取って 2 つの出力を生成する全結合ニューラル層の図。

図 1. 2 つのニューロンをもつ全結合層の説明用の例。

ニューラル共分散

ディープラーニング ネットワークの学習を行うと、学習可能なパラメーターが互いに相関している形で高次元空間を移動します。軌跡は、選択された最小化ルーチン、ネットワーク初期化、および学習データによって決定されます。そのため、結果として得られる学習済みネットワーク内のニューロンは高い相関を示すことがあります。ネットワークの学習に使用する真のデータの分布を表すデータでニューロンを刺激することで各層のニューロン間の共分散を測定してから、それらのニューロン励起について "ニューラル共分散行列" を計算します。

層 \(i\) のニューラル共分散行列を求めるには、まずニューラル励起の集合 \( \{ n^{(k)}(x_b) \, \vert \, k=1,…,a_i \,\,\) および \(\,\, \forall _b \in X \} \) を計算します。ここで、\(X \) は学習データの分布を表し、\(b \) は観測にインデックスを付けます。したがって、ニューラル共分散行列の成分は次のようになります。\[ C_{pq}= \underset{b}cov (n^{(p)}(x_b),n^{(q)}(x_b)) \]

ここでは、\(p,q=1,…,a_i \) であり、共分散は観測インデックス \(b \) について求められます。たとえば、図 1 の全結合層では、共分散行列は、対角要素が 2 つのニューロンの分散で、非対角エントリがそれらの間の共分散である 2 行 2 列の行列になります。

共分散行列は半正定値かつ対称的であり、固有値 \(λ_p≥0 \) をもちます。ここでは、\(p=1,…,a_i \) です。対応する固有ベクトル \(v_p \) は、正規直交集合を形成し、この集合について共役によって共分散行列を対角化します。固有ベクトルおよび対応する固有値により、分散の方向と大きさがそれぞれ与えられます。つまり、ゼロに近い小さな固有値は、その層でほぼゼロの分散を伝播するニューロンの線形結合に対応します。逆に、対応する大きい固有値をもつ固有ベクトルは、大きい分散を伝播するニューロンの線形結合を示しています。固有ベクトルによって定義される、ニューロンの線形結合は固有ニューロンと呼ばれます。

共分散のこの解析が射影作用素 \(\mathbb{P} \) の作成を促しています。この射影作用素では、無視できる分散をもつ固有ニューロンの貢献をなくすことで、\( b_i ≤ a_i \) のときにニューロンを部分空間 \(\mathbb{R}^{b_i}⊂\mathbb{R}^{a_i} \) に射影します。射影演算は、次のように固有ベクトルの外積として表すことができます。\[ \mathbb{P}= \sum^{b_i}_{p=1}{v_p}{v^T_p} \]

ここで、固有ベクトルは固有値の降順 \(λ_p≥λ_{p+1} \) を基準に並べられ、保持する分散の数量に応じて \(b_i \) を選択できます。たとえば、"説明分散" (累積した分散の和) の数量を保持する場合は、以下を満たす最小の \(b_i \) を選択します。\[ 1−ϵ < \frac{ \sum^{b_i}_{p=1}λ_p}{\sum^{a_i}_{p=1}λ_p} \]

ここで、\( 1−ϵ \) は保持する説明分散です。\(b_i→a_i \) の極限では、射影作用素は単位行列に収束し \(\mathbb{P}→\mathbb{I} \)、射影演算は自明です。また、\(ϵ→0 \) の極限、すなわち説明分散が 1 の場合、\(b_i→a_i \) であり、この場合も射影演算は単位行列に収束します。これらの極限は、元のネットワークへの接続を示しています。

射影フレームワーク

層のニューロンに適用される射影演算では "射影層" を定義します。より正式には、射影演算を使用して、ある層から、以下で与えられる射影された層 \(f^{\mathbb{P}}_i \) へのマッピングを定義できます。\[ f^{\mathbb{P}}_i:     \mathbb{R}^{a_{i−1}}   →    \mathbb{R}^{a_i} \] \[x\      ↦    \mathbb{P}_i{f}_i(\mathbb{P}_{i-1}x)\]

ここでは、入力ニューロンと出力ニューロンが射影されます。このマッピングは、ネットワークの射影に拡張されます。"射影ネットワーク" は、次のように、射影層の合成です。\[ F(x) = f^{\mathbb{P}}_N (f^{\mathbb{P}}_{N-1} (... f^{\mathbb{P}}_{1} (x) ...)) \]

射影作用素を層ごとに適用すると、各層のニューロンを対応する固有ニューロンに変換し、低分散の固有ニューロンを削除してランクを低減し、元のベースとなるニューロンに変換してから、次の層に入力することになります (図 2)。

各層のニューロンを対応する固有ニューロンに変換する全結合層の図。

図 2. 図 1 に基づいた、射影された全結合層。ランク-1 の入力と出力の射影演算が行われています。この例では、簡単にするために全結合層にバイアス項がないものと仮定し、層の演算は、図では明示的に記述されています。

このフレームワークでは、層の入力および出力の射影作用素のランクに応じて数量を変更することで、さまざまな層を射影できます。さらに、下流のアーキテクチャを変更することなく、任意の層を射影された層に交換できます。そのため、この射影法は、フィードフォワード ネットワークだけでなく、ほぼすべてのネットワーク アーキテクチャに適用可能です。

圧縮

全結合、畳み込み、LSTM など、学習可能なパラメーターをもつ多くの層では、層の演算を変更して、射影演算を学習可能なパラメーターに吸収できます。これにより、最終的には射影層の学習可能なパラメーターの数が元の層と比較して減少するため、層が圧縮されます (図 3)。

学習可能なパラメーターの数が減少した全結合層の図。

図 3. 射影された全結合層。層の演算が図の下に記述されており、射影された重み行列 \(\widetilde W \) がどのように元の重み行列 \(W \) と射影行列の積として与えられるのかが示されています。

図 1 の全結合層および図 3 の射影された全結合層では、簡単にするためにバイアス項がないものと仮定されており、各エッジは学習可能なパラメーター、つまり重み行列の要素を表しています。図 1 では、重み行列に 6 つの学習可能なパラメーターがあります。一方、射影層には、これが 5 つあります。これにより、層のサイズが削減され、1 つの大きな行列乗算が 2 つの小さな行列乗算になります。

学習データの分布によって射影演算の作成が推進され、射影演算によって重み行列の分解が推進されることに留意してください。これは、単に層内の重み行列の特異値分解を行うのとは異なります。ニューラル共分散行列は、SVD 係数の範囲に含まれる部分空間とは異なる部分空間を選択する可能性があるためです。

射影の正確な実装は、層自体によって異なります。さらに、各層のニューロンの数 \(a_i \) は、極めて多くなることがよくあります。たとえば、YOLO v4 など、標準的なオブジェクト検出器ネットワークの畳み込み層には、\(O(10^6) \) 個のニューロンが含まれているため、ニューラル共分散行列を計算するのは不可能な場合があります。多くの場合、代わりに、この次元を削減するために注意深く選択した演算の共分散を検討することをお勧めします。たとえば、畳み込み層の空間次元の平均プーリングを対象とし、チャネル次元の共分散のみを調べます。層およびユースケースごとに、最適な共分散の計算方法を検討する必要があります。

微調整

事前学習済みのネットワークから開始し、それに相当する射影されたネットワークを上記のフレームワークの概要に従って直接計算できます。高いデータ共分散は維持されますが、精度が圧縮後に低下することがあるため、ネットワークを微調整する必要が生じることがあります。たとえば、ネットワーク内のニューロン間の高次非線形関係の結果として、線形変換や多くの層を一度に射影した場合の複合効果を考慮して再調整する必要があることがあります。射影されたモデルは、さらに再学習を行うことで、微調整用の優れた初期設定となります。通常、微調整用の再学習では、元の学習よりもはるかに少ないエポック数で精度が横ばいとなり、多くの場合、元のネットワークの精度を大幅に回復できます。

例、その他

射影を使用した圧縮の適用がうまくいった一例として、バッテリー充電状態 (BSOC) 推定用のバーチャルセンサーの構築が挙げられます。

さまざまな理由により、展開可能なセンサーを作成して SOC を直接測定することは物理的に不可能です。これは、バッテリーに限らず、あらゆる産業分野の多くのシステムにとって共通の課題です。思い浮かぶ選択肢として、拡張カルマンフィルター (EKF) を使用した SOC の推定があります。EKF は高精度ですが、バッテリーの非線形数学モデルが必要になります。しかし、常にこのモデルの利用や作成ができるわけではありません。カルマンフィルターは計算コストがかかることがあり、また、初期状態に誤りがあったり、モデルの初期状態が正しくない場合、生成される結果が不正確になることもあります。

これに代わる手段として、LSTM 層を備えた RNN ネットワークを使用してバーチャルセンサーを開発できます。そのようなモデルは、高品質のデータで学習した場合に高い結果の精度が得られることが明らかになっています。しかし、多くの場合、モデルのサイズが大きくなり、推論速度が遅くなってしまいます。射影を使用してネットワーク内の LSTM 層を圧縮することで、データセットで高い精度を維持しながら、全体的なネットワークサイズを削減し、推論速度を向上させることができます。BSOC 推定で使用される射影 LSTM ネットワークの標準的なアーキテクチャを、表 1 に示します。

  名前 タイプ 活性化 学習可能なプロパティ
1 sequenceinput
3 次元のシーケンス入力
シーケンス入力 3(C) x 1(B) x 1(T) -
2 lstm_1
256 個の隠れユニットをもつ射影 LSTM 層
射影 LSTM 256(C) x 1(B) x 1(T) InputWeights 1024 x 3
RecurrentWeights 1024 x 11
Bias 1024 x 1
InputProjector 3 x 3
OutputProjector 256 x 11
3 dropout_1
20% ドロップアウト
ドロップアウト 256(C) x 1(B) x 1(T) -
4 lstm_2
128 個の隠れユニットをもつ射影 LSTM 層
射影 LSTM 128(C) x 1(B) x 1(T) InputWeights 512 x 11
RecurrentWeights 512 x 8
Bias 512 x 1
InputProjector 256 x 11
OutputProjector 128 x 8
5 dropout_2
20% ドロップアウト
ドロップアウト 128(C) x 1(B) x 1(T) -
6 fc
1 つの全結合層
全結合 1(C) x 1(B) x 1(T) Weights 1 x 128
Bias 1 x 1
7 layer
シグモイド
シグモイド 1(C) x 1(B) x 1(T) -
8 regressionoutput
応答 'Response' をもつ平均二乗誤差
回帰出力 1(C) x 1(B) x 1(T) -

表 1. BSOC 推定で使用される射影 LSTM ネットワーク アーキテクチャの解析。

図 4 では、LSTM 層をもつこの BSOC RNN ネットワークについて、モデルの精度 (RMSE の測定値)、モデルのサイズ (学習可能なパラメーターの数)、および推論速度 (MATLAB で MEX ファイルとして実行した場合) の、射影および微調整する前後の比較を示しています。

3 つの棒グラフがあり、元のリカレント ニューラル ネットワークと微調整されたリカレント ニューラル ネットワークについて、精度、モデルのサイズ、およびパフォーマンスがそれぞれ比較されています。

図 4. バッテリーの充電状態をモデル化した LSTM 層をもつリカレント ニューラル ネットワークの精度、モデルのサイズ、および推論速度についての、射影と微調整を行う前後の比較。

独自のネットワークを射影して圧縮するには、Deep Learning Toolbox Model Quantization Library とともに Deep Learning Toolbox™ をインストールして、MATLAB R2022b で利用可能な機能 compressNetworkUsingProjection および neuronPCA をお試しください。

公開年 2023