E資格学習 深層学習 Day4 ③ 軽量化・高速化の技術について
高速化の技術
要点まとめ
- データ量は毎年10倍ずつ増加し計算量も増えていると言われている中で、PCの性能は18ヶ月で2倍になると言われている。その中で、複数の計算資源を並列的に分散させて学習させる工夫がとられている。
- モデルが大きい場合はモデル並列化、データが大きい場合はデータ並列化をすると良い。
- 分散学習においては、最終的にデータやモデルを統合する部分における通信コストが大きくなる。
データ並列化
- ワーカー(CPU/GPU等の演算機)を複数用意し、共通のモデルを各ワーカーにコピー。データを分割して各ワーカーで学習させる。同期型と非同期型の2形態がある。
- 同期型:各ワーカーの学習が終わるのを待ち、勾配を一旦まとめて平均を算出し、それを親モデルに反映→ワーカーの子モデルに反映... を繰り返す。
- 非同期型:ワーカーは互いの計算を待たずバラバラに学習し、順次パラメータがpushされ保存されていく。ワーカーは一番新しい学習済み子モデルを使って学習を繰り返す。処理は非同期型の方が早いが、精度は同期型の方がよくなる。(PCを分けて学習させることが多い)
モデル並列化
- 巨大なニューラルネットワークのモデル(枝分かれが多用されている等)について、モデルの分割し、ワーカー毎に学習させる。(1台のPC上でGPUを分割して学習させることが多い)
- 大きなモデル(学習パラメータが膨大)であればあるほど効果は大きい。
軽量化の技術
量子化
- そもそもなぜ演算処理が増えるかというと、深層学習における大量のパラメータを保存するためのメモリ消費が要因。そこで、パラメータを64bit浮動小数点ではなく、32bitなど下位にに落とすことで省メモリ化により演算処理の削減を行える。
蒸留
- 規模の大きなニューラルネットワークの既存モデルから、知識を継承しながら軽量なモデルをつくること。
- 教師モデル(複雑なモデルor アンサンブルなモデル)と生徒モデル(シンプルかつ軽量)の2つのモデルで構成される。両方のモデルにデータを入力し学習を進めていくが、教師モデル側の重みは固定しつつ、生徒モデル側の重みのみを更新することで、生徒モデルが教師モデル並みにアップデートされていく。
プルーニング
- 巨大なニューラルネットワークにおいて寄与率が低く、影響力の小さなパラメータは不要と判断し、不要なパラメータを持つニューロンを削除する手法。(論文では、パラメータ値:0.1以下を削除)割とスカスカなニューラルネットワークになる。
- 結構なニューロンが削除されても、精度が変わらないため、高速化と省メモリが期待できる。