ラビットチャレンジレポート 深層学習Day4 その2
Section3 軽量化・高速化技術
- 軽量化・高速化が必要な理由
深層学習は、計算量が多く、計算機の負担が大きいネットワークである。
しかも、年10倍程度の速度で、処理データが増加し、モデルが複雑になっている。
対して、コンピュータの処理速度の向上は、ほぼムーアの法則(18か月で約2倍の集積度)に律速されている。
つまり、計算機の負荷は、年々高くなる方向であり、軽量化・高速化技術は必須となっている。
中でも、複数の計算機(ワーカー)を使用し、並列的にニューラルネットワークを計算することで効率の良い学習を行う分散深層学習は、今日の深層学習では必須の技術となっている。
3-1 データ並列化
意やモデルを各ワーカーに子モデルとしてコピーし、データを文化として各ワーカーに計算させる手法である。
データ並列化技術は、各モデルのパラメータの合わせ方で、同期型と非同期型がある。
同期型
1.各ワーカーの計算が終わるのを待ち、各ワーカーの勾配が出たところで勾配の平均を計算し、親モデルのパラメータを更新する。
2.パラメータ更新後の親モデルを子モデルとしてコピーする
3.1,2を繰り返すことで学習する
非同期型
各ワーカーはお互いの計算を待たず、各子モデルごとに更新を行う。
学習が終わった子モデルは、パラメータサーバーにPushされる。
学習が終わったワーカーが新たに学習を始めるときは、パラメータからPOPしたモデルに対して学習を始める。
3-2 モデル並列化
親モデルを各ワーカーに分割し、それぞれのモデルを学習させる手法。すべてのデータで学習が終わった後で、一つのモデルに復元する。
モデルが大きい時には、モデル並列化、データが大きい時には、データ並列化をするとよい。
データ並列化では別々のコンピュータを使用することが多いが、モデル並列化は、ワーカー同士のより高速な通信が必要なので、同一コンピュータ内で、GPUコアを分けて並列化することが多い。
モデル並列の効果
モデルのパラメータが多いほど、スピードアップの効率も向上する。
3-3GPUによる高速化
- CPU
高速化なコアが少数。複雑な処理が得意
比較的低性能なコアが多数あり、簡単な並列処理が得意。
ニューラルネットワークの計算が非常に得意。
もともとの目的のグラフィック以外の用途で使用されるGPUの総称をGPGPUという。
3-3量子化(Quantization)
計算精度を、64bit(倍精度)、32bit(単精度)、8bit(半精度)などに調整することを量子化という。
ネットワークが大きくなると、大量のパラメータが必要になり、学習や推論に多くのメモリと演算処理が必要になる。
通常のパラメータの64bit浮動小数点を32bitなど下位の精度に落とすことで、メモリと演算処理の削減を行える。
量子化の利点としては、計算の高速化と小メモリ化、欠点としては精度の低下が挙げられる。
計算の高速化
倍精度と単精度演算では演算性能が大きく違うため、量子化で精度を落とすことにより多くの計算をすることが出来る。下記のTeslaでは、計算速度が約2倍違う。
単精度では、TeslaV100では107TFLOPSに達し、大きな高速化が図れる。
省メモリ化
bit数を下げると、計算で確保するbit数がそれに応じて小さくて済むため、使用するメモリ量が少なくなる。
3-4蒸留(Distillation)
蒸留は学習済みの精度の高いモデルの知識を軽量なモデルへ継承することで、モデルの簡略化をする手法である。
教師モデルと生徒モデル(蒸留の学習方法)
教師モデルとして、学習済みの高度で複雑なモデルを用意し、生徒モデルとして軽量なモデルを用意する。
教師モデルの重みを固定し、下記のような形で、教師モデルと生徒モデルで同一の入力データを入力し、誤差を評価した重みの更新を生徒モデルだけに返す。
このようにして、教師モデルの出力に生徒モデルを近づけるよう学習する。
Section4 応用技術
4-1 MobileNets
提案の背景
近年の画像認識タスクに用いられる最新のニューラルネットワークアーキテクチャは、多くのモバイル及び組み込みアプリケーションの実行速度を上回る高い計算資源を必要とされる。
そこで、ネットワークのアーキテクチャを工夫し、モバイルアプリケーションの画像処理向けに同等精度で計算量を削減したネットワークを提案した。
提案手法
ストライド1でパディングを適用した場合の畳み込み計算の計算量は、H×W×K×K×C×M
- MobileNetsの計算手法
Depthwise CovolutionとPointwise Convolutionを組み合わせて軽量化を実現している。
-
- Depthwise Convolution
入力マップのチャネルごとに畳み込みを実施する。
カーネルのフィルタ数が1。
入力マップをそれらと結合する(入力マップのチャネル数と同じになる)
下記のスキームでは、計算量はH×W×K×K×C (一般的な畳み込みの1/M)
-
- Pointwise Convolution
1×1 convとも呼ばれる。
カーネルサイズが1×1×C、フィルタ数Mである。
入力マップのポイントごとに組み込みを実施する。
出力マップはフィルタ分だけ作成可能。
下記のスキームでは出力マップの計算量は、H×W×C×M
-
- Depthwise Separable Convolution
MobileNetsの計算方法は、DepthwiseとPointwiseを組み合わせた下記のDepthwise Separable Convolutionと呼ばれる方法をとっている。
1.まず、Depthwise Convolutionでチャネルごとに空間方向へ畳み込む。すなわち、チャネルごとにDk×Dk×1のサイズのフィルターをそれぞれ用いて計算を行うため、その計算量は(H×W×Dk×Dk×C)である。
2.次にDepthwise Convolutionの出力をPointwise Convolutionによってチャネル方向に畳み込む。すなわち、出力チャネルごとに1×1×Mサイズのフィルターをそれぞれ用いて計算を行うため、その計算量は(H×W×C×M)となる。
下記の図が一般的な畳み込み演算と、MobileNetsの演算を比較した図である。
一般的な畳み込み演算では、H×W×K×K×C×Mの計算量であるのに対し、MobileNetsでは、H×W×C×(K×K+M)の計算量となる。仮にK=3、M=4の場合、MobileNetsの計算量は、一般的な畳み込み演算の計算量に対し、(K×K+M)/(K×K×M)=13/36に軽量化できる。
4-2 DenseNet
論文タイトル:Densely Connected Convolutional Networks
概要
ニューラルネットワークでは、層が深くなるにつれて学習が難しkなるという問題があったが、前の層から層をスキップして後方の層に直接接続するというResNetのアイデアが生まれ、非常に深い層のネットワークが実現可能になった。
後方と前方の層をスキップ接続することでパフォーマンスが向上するならば、すべてのレイヤーを直接接続すればさらにパフォーマンスが向上するのではないかという発想を元に生まれたのがDenseNetである。
DenseNetのメリット
- 勾配消失の削減
- 特徴伝達の強化
- 特徴の効率的な利用
- パラメータ数の削減
- 正則化効果の期待
DenseNetの構造
DenseNetは次のようなブロックで構成されている。
1.Inital Convolution
2.Dense Block
3.Transition layer
4.Classification layer
- Dense Block
Dense Blockは、前層の入力をbatch正規化、Relu関数による変換、3×3畳み込みによる変換で処理する。
そして下記のように、前層以前の入力を合わせて処理して出力としてこの層の出力とする。
入力特徴マップのチャンネル数がl×kだった場合、出力は(l+1)×kとなる。
第l層の出力は下記のように書ける。
- growth rate
kをネットワークのgrowth rateと呼ぶ。kが大きくなるほどネットワークが大きくなるため、小さな整数に設定するのが良い。
- Transition layer
中間層でチャネルサイズを変更し、特徴マップのサイズを変更してダウンサンプリングを行い、次のDense Blockに繋ぐ。
DenseNetとResNetの比較
同じパラメータ数では、ResNetよりDenseNetのほうが誤差が小さかったという報告がある。
Review: DenseNet — Dense Convolutional Network (Image Classification)
4-4 Batch Norm、Layer Norm、Instanse Norm
データのばらつきを補正し、学習をしやすくするためにデータの平均を0、分散を1に修正する正規化という処理がある。
- Batch Norm(バッチ正規化)
ミニバッチに含まれるサンプルの同一チャネルが同一分布に従うよう正規化する。バッチサイズが小さいと、効果が小さくなるという課題がある。バッチサイズはハードウェアのスペックに律速されることが多く、学習上問題になることがある。
- Layer Norm(レイヤー正規化)
それぞれのサンプルで、すべてのチャネルで平均と分散を求めて正規化する。バッチサイズに依存しないことが特長。
- Instance Norm(インスタンス正規化)
各サンプルの各チャネルごとに正規化する。コントラストの正規化に寄与し、画像のスタイル転送やテクスチャ合成タスクで利用される。