LoginSignup
0
2

More than 1 year has passed since last update.

深層学習の高速化

Posted at

1. 深層学習の軽量化・高速化技術

深層学習を実際に商用利用しようと思うと、軽量化、高速化をしないと利用できない。
深層学習は、毎年、10倍のいきおいで、モデルの大きさ、データの量が大きくなっている。
しかしこの速度は、HWの性能向上の勢いを追い越してしまっている。
そこで、軽量化、高速化、分散処理化が必要になっている。

  • データ並列化(複数PCで並列処理)
  • モデル並列化(複数コアで並列処理)
  • GPU高速化
  • 量子化
  • 蒸留
  • プルーニング

2. データ並列化

データ並列には2種類のやり方がある。

  • 同期型
  • 非同期型

同期型は、各子モデルに勾配を計算させて、終わったら、親モデルがまとめて勾配平均をとってパラメータ更新をし、その結果をまた各子モデルに勾配を計算させる。親モデル、子モデルの垂直統合モデルで、完全同期で処理をするやり方である。割と精度が良い結果がでる。

非同期型は、パラメータサーバに、各子モデルが計算した学習済みモデルを保存する。そして、各子モデルが学習するさいには、パラメータサーバにある最新の学習済みモデルを使って学習をする。これを繰り返すやり方である。しかし、タイミングによって、最新学習モデルが次々更新されるとは限らないので、結果が不安定になりやすい。

3.モデル並列化

大きなNNの場合、モデルをいくつかに分割して、それを各ワーカーで並列処理することが可能である。
そんなことが出来るのか?という気はする。モデルを途中で切ると、入力するデータは?
実際には、途中で枝分かれするようなモデルを並列化することが多い。

しかし、モデル並列をネットワーク上で分散すると、データ統合処理に結局時間がかかるので、1台のPC上での並列となることが多い。

4. GPU高速化

CPUで処理させずに、GPUで計算させて高速化を図る。
NNの計算は行列演算だらけなので、GPU計算には合っている。

なお、GPU使うにはCUDAを使うことになるが、Tensorflowが勝手に使ってくれる。

5. 量子化

処理の軽量化の手法の一つとして、量子化がある。
量子化とは、64bit浮動小数点の重みwの情報を、32bit浮動小数点に精度を落とすことで、メモリ使用量、演算負荷の削減を行うことをいう。
単純に情報を保存するメモリ領域が削減され、さらに、計算対象の桁数が減ることで、計算の高速化(計算量の削減)が可能になる。

なお、機械学習で利用するには、16bitで十分であるので、量子化は高速化には十分有効である。

6. 蒸留

Knowledge Distillation、Hint Training。

処理の軽量化の手法の一つとして、蒸留がある。
蒸留とは、精度の高い複雑で大きなモデル(教師モデル)から、性能の近い軽量で小さいモデル(生徒モデル)を作ることをいう。

生徒モデルを学習するさいに、教師モデル(重み固定)も一緒に学習させて、教師モデルの誤差に合わせるように、生徒モデルの学習をさせる。

7. プルーニング

モデルの軽量化の手法としてプルーニングがある。
大きなNNが出来たとき、いくつかのニューロンは、何も寄与していない場合がある。この時、この寄与していないニューロンを削減して、パラメータを減らし、モデルの圧縮を行うことを、プルーニングという。

具体的には、重みが0に近い(閾値以下の)ニューロンを削減してしまう。
さらに、一回消すと、出力になにも寄与しないニューロンが出てくるので、これも削減することが可能である。

これで半分以上削減が出来るらしい。

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2