ラビットチャレンジレポート 深層学習Day4 その2

Section3 軽量化・高速化技術

  • 軽量化・高速化が必要な理由

 深層学習は、計算量が多く、計算機の負担が大きいネットワークである。
 しかも、年10倍程度の速度で、処理データが増加し、モデルが複雑になっている。
 対して、コンピュータの処理速度の向上は、ほぼムーアの法則(18か月で約2倍の集積度)に律速されている。
 つまり、計算機の負荷は、年々高くなる方向であり、軽量化・高速化技術は必須となっている。
 中でも、複数の計算機(ワーカー)を使用し、並列的にニューラルネットワークを計算することで効率の良い学習を行う分散深層学習は、今日の深層学習では必須の技術となっている。

3-1 データ並列化

 意やモデルを各ワーカーに子モデルとしてコピーし、データを文化として各ワーカーに計算させる手法である。
 データ並列化技術は、各モデルのパラメータの合わせ方で、同期型と非同期型がある。

同期型

1.各ワーカーの計算が終わるのを待ち、各ワーカーの勾配が出たところで勾配の平均を計算し、親モデルのパラメータを更新する。
2.パラメータ更新後の親モデルを子モデルとしてコピーする
3.1,2を繰り返すことで学習する
f:id:tibet:20211208215331p:plain

非同期型

各ワーカーはお互いの計算を待たず、各子モデルごとに更新を行う。
学習が終わった子モデルは、パラメータサーバーにPushされる。
学習が終わったワーカーが新たに学習を始めるときは、パラメータからPOPしたモデルに対して学習を始める。
f:id:tibet:20211208215928p:plain

同期型と非同期型の比較

・処理スピードはお互いのワーカーの計算を待たない非同期型のほうが速い。
・一方で非同期型は最新モデルのパラメータを利用できないので、学習が不安定になりやすく、同期型のほうが精度がよい傾向がある。
・用途としては、例えば、自前で複数のサーバを持ち、計算をコントロールできる場合は、精度のよい同期型を採用し、多数のスマホのCPUの空き能力を活用するようなコントロールが難しい場合は、非同期型を採用するような使い分けが考えられる。

3-2 モデル並列化

 親モデルを各ワーカーに分割し、それぞれのモデルを学習させる手法。すべてのデータで学習が終わった後で、一つのモデルに復元する。
 モデルが大きい時には、モデル並列化、データが大きい時には、データ並列化をするとよい。
 データ並列化では別々のコンピュータを使用することが多いが、モデル並列化は、ワーカー同士のより高速な通信が必要なので、同一コンピュータ内で、GPUコアを分けて並列化することが多い。

モデル並列の効果

モデルのパラメータが多いほど、スピードアップの効率も向上する。
f:id:tibet:20211208233552p:plain

3-3GPUによる高速化

  • CPU

 高速化なコアが少数。複雑な処理が得意

 比較的低性能なコアが多数あり、簡単な並列処理が得意。
 ニューラルネットワークの計算が非常に得意。
 もともとの目的のグラフィック以外の用途で使用されるGPUの総称をGPGPUという。

GPGPU開発環境

・CUDA: NVIDIAGPU上で並列コンピューティングを行うためのプラットフォーム
OpenCLNVIDIA社以外の会社(Intel, AMD, ARMなど)のGPUからでも使用可能。

並列化のほかには、モデルの軽量化という手法もある。
モバイル端末やIoT機器などのエッジデバイスは、一般にパソコンやサーバに比べ、性能が大きく劣るため、モデルの軽量化は有効な手法である。
軽量化の代表的な手法は下記の3つがある。
量子化
・蒸留
・プルーニング

3-3量子化(Quantization)

 計算精度を、64bit(倍精度)、32bit(単精度)、8bit(半精度)などに調整することを量子化という。
 ネットワークが大きくなると、大量のパラメータが必要になり、学習や推論に多くのメモリと演算処理が必要になる。
 通常のパラメータの64bit浮動小数点を32bitなど下位の精度に落とすことで、メモリと演算処理の削減を行える。
 量子化の利点としては、計算の高速化と小メモリ化、欠点としては精度の低下が挙げられる。

計算の高速化

 倍精度と単精度演算では演算性能が大きく違うため、量子化で精度を落とすことにより多くの計算をすることが出来る。下記のTeslaでは、計算速度が約2倍違う。
単精度では、TeslaV100では107TFLOPSに達し、大きな高速化が図れる。
 f:id:tibet:20211209201331p:plain

省メモリ化

 bit数を下げると、計算で確保するbit数がそれに応じて小さくて済むため、使用するメモリ量が少なくなる。

精度の低下

 量子化でbit数を下げると、ニューロンが表現できる少数の有効桁が少なくなり、モデルの表現力が低下する。
 ただし、実際の問題では、倍精度を単精度や半精度に落としても問題にならない場合が多い。

3-4蒸留(Distillation)

 蒸留は学習済みの精度の高いモデルの知識を軽量なモデルへ継承することで、モデルの簡略化をする手法である。
f:id:tibet:20211209210838p:plain

教師モデルと生徒モデル(蒸留の学習方法)

 教師モデルとして、学習済みの高度で複雑なモデルを用意し、生徒モデルとして軽量なモデルを用意する。
教師モデルの重みを固定し、下記のような形で、教師モデルと生徒モデルで同一の入力データを入力し、誤差を評価した重みの更新を生徒モデルだけに返す。
このようにして、教師モデルの出力に生徒モデルを近づけるよう学習する。
f:id:tibet:20211209211333p:plain

3-5プルーニング(pruning)

 ネットワークが大きくなると大量のパラメータがあるが、すべてのニューロンが精度に寄与しているわけではない。モデルの精度に寄与が少ないニューロンを削減することで、モデルを圧縮し、軽量化・高速化を見込む。

f:id:tibet:20211209213542p:plain

ニューロンの削減法

 重みが閾値以下のニューロンを削減する。
 下記の例は、重みが0.1以下のニューロンを削減している。
f:id:tibet:20211209213734p:plain

ニューロン数と精度

 下記の例は、Oxford 10 category ower datasetをCaffeNetで学習したモデルのプルーニングの閾値による各層と全体のニューロンの削減率と精度をまとめたものである。
 この例を見ると、かなり大きな削減率でも、精度はそれほど落ちていないことがわかる。
f:id:tibet:20211209214119p:plain

Section4 応用技術

4-1 MobileNets

提案の背景

 近年の画像認識タスクに用いられる最新のニューラルネットワークアーキテクチャは、多くのモバイル及び組み込みアプリケーションの実行速度を上回る高い計算資源を必要とされる。
 そこで、ネットワークのアーキテクチャを工夫し、モバイルアプリケーションの画像処理向けに同等精度で計算量を削減したネットワークを提案した。

提案手法
  • 一般的な組み込みレイヤー
    • 入力特徴マップ:H(高さ)×W(幅)×C(チャネル数)
    • 畳み込みカーネルのサイズ:K(カーネル高さ)×K(カーネル幅)×C
    • 出力チャネル数(フィルタ数):M

ストライド1でパディングを適用した場合の畳み込み計算の計算量は、H×W×K×K×C×M
f:id:tibet:20211210135525p:plain

  • MobileNetsの計算手法

 Depthwise CovolutionとPointwise Convolutionを組み合わせて軽量化を実現している。

    • Depthwise Convolution

 入力マップのチャネルごとに畳み込みを実施する。
  カーネルのフィルタ数が1。
 入力マップをそれらと結合する(入力マップのチャネル数と同じになる)
 下記のスキームでは、計算量はH×W×K×K×C (一般的な畳み込みの1/M)
f:id:tibet:20211210143159p:plain

    • Pointwise Convolution

 1×1 convとも呼ばれる。
 カーネルサイズが1×1×C、フィルタ数Mである。
 入力マップのポイントごとに組み込みを実施する。
 出力マップはフィルタ分だけ作成可能。
 下記のスキームでは出力マップの計算量は、H×W×C×M
 f:id:tibet:20211210144920p:plain

    • 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に軽量化できる。
f:id:tibet:20211210145432p:plain

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
f:id:tibet:20211210194403p:plain

  • Dense Block

Dense Blockは、前層の入力をbatch正規化、Relu関数による変換、3×3畳み込みによる変換で処理する。
そして下記のように、前層以前の入力を合わせて処理して出力としてこの層の出力とする。
入力特徴マップのチャンネル数がl×kだった場合、出力は(l+1)×kとなる。
第l層の出力は下記のように書ける。
 xl=H_l=(\lbrack  x_0,x_1,...,x_{l-1} \rbrack )

f:id:tibet:20211210195349p:plain

kをネットワークのgrowth rateと呼ぶ。kが大きくなるほどネットワークが大きくなるため、小さな整数に設定するのが良い。
f:id:tibet:20211210200436p:plain

  • Transition layer

中間層でチャネルサイズを変更し、特徴マップのサイズを変更してダウンサンプリングを行い、次のDense Blockに繋ぐ。
f:id:tibet:20211210200817p:plain

DenseNetとResNetの比較

同じパラメータ数では、ResNetよりDenseNetのほうが誤差が小さかったという報告がある。
f:id:tibet:20211210201029p:plain
Review: DenseNet — Dense Convolutional Network (Image Classification)

4-4 Batch Norm、Layer Norm、Instanse Norm

データのばらつきを補正し、学習をしやすくするためにデータの平均を0、分散を1に修正する正規化という処理がある。

  • Batch Norm(バッチ正規化)

ミニバッチに含まれるサンプルの同一チャネルが同一分布に従うよう正規化する。バッチサイズが小さいと、効果が小さくなるという課題がある。バッチサイズはハードウェアのスペックに律速されることが多く、学習上問題になることがある。

  • Layer Norm(レイヤー正規化)

それぞれのサンプルで、すべてのチャネルで平均と分散を求めて正規化する。バッチサイズに依存しないことが特長。

 各サンプルの各チャネルごとに正規化する。コントラストの正規化に寄与し、画像のスタイル転送やテクスチャ合成タスクで利用される。
f:id:tibet:20211210201347p:plain

4-5 Wavenet

 Deepmindにより開発されたプログラム。
 生の音声波形を生成する深層学習モデルで、Pixel CNNを音声に応用したものである。

Wavenetのメインアイデア

 時系列データに対して畳み込みをするが、層が深くなるにつれて畳み込むリンクを離す。
 下記の右図では、下の層から、Dilated=1,2,4,8になっている。
  このようにすると、受容野を簡単に増やすことが出来るという利点がある。
f:id:tibet:20211210202158p:plain

問題
  • 深層学習を用いて結合確率を学習する際に、効率的に学習が行えるアーキテクチャを提案したことがWavenetの大きな貢献の一つである。提案された新しいConvolution型アーキテクチャDilated causal convolutionと呼ばれ、結合確率を効率的に学習できるようになった。
  • Dilated causal convolutionを用いた際の大きな利点は、単純なConvolution layerに比べてパラメータ数に対する受容野が広いことである。