いきなりまとめ
DeepLearningの実用においては計算コストに対する対応が重要。
計算の分散、計算の削減といったアプローチが可能。
この目的のために
といった手法が採用される。
Today I Learned
Chapter 12 Application
を参考に。
大規模分散実装
入力データを分割して処理する場合(data parallelism)と
モデルのパーツを分割して処理する場合(model parallelism)。
・data parallelism
学習済みモデルにおける予測生成時のdata parallelismは容易。
単純に個々の入力データを個々のマシーンで分散処理する。
しかしモデルのトレーニング時におけるdata parallelismは困難。
通常のgradient descentによるt期のパラメーター更新はt-1期に依存しているため。
asynchronous stochastic gradient descentでは個々のマシーンがパラメーターを保存したメモリをロックなしで共有もしくはパラメーターサーバーを使用する。
他のマシンの成果を上書きするためSGDステップごとの平均的な改善は低下するが全体として学習速度は向上する。
・model parallelism
個々の入力データに対してモデルの異なるパーツを個々のマシーンで分割処理する。
トレーニング時および予測生成時の両方において可能。
モデル圧縮
実用においてはモデルのトレーニング時よりも、
トレーニングしたモデルから予測を生成する際の計算コストの方が重要。
エンドユーザーの計算資源は限られているため。
予測時の計算コストを減らす鍵はモデルの圧縮。
オリジナルのモデルをより小さなモデルに置き換えること。
オリジナルモデルがoverfittingを防ぐために複数の独立モデルをensembleしている場合などでは計算コストが大きくなる。
こうしたモデルはトレーニングサンプルが少ないためにサイズが大きくなる。
このモデルf(x)とランダムにサンプルしたxを使えばトレーニングセットを無制限に生成できる。
新たに生成したトレーニングセットに対してモデルをトレーニングすればサイズを縮小できる。
より効果的な方法は実際のテストポイントxに近い分布からサンプルすること。
動的システム
入力データを効率的に処理するにはDynamic Structureを持ったシステムを作る必要がある。
入力データに対してどのANN(ML model)を適用するか、
さらにそのモデル内においてどのfeaturesを使用するかという2段階がある。
・
cascade
strategy
cascade
strategyは稀なオブジェクトまたはイベントを検出するために用いられる。
確実に検出するためには洗練されたキャパの高いモデルが必要となるが計算コストが高い。
一方で入力が稀なオブジェクトを含んでないと否定するのはコストが低い。
こうした状況でa sequence of classfiersをトレーニングする。
最初のモデルはキャパが低くrecallが高くなるようトレーニングする。
最後のモデルはprecisionが高くなるようトレーニングする。
この手法は計算コストを抑えつつ高いキャパを持ったモデルによる高い信頼性を確保できる。
高いキャパを持ったcascadeを実装するには2通りある。
よりあとのモデルに高いキャパを持たせるか、
または個々のモデルは低いキャパだが多数組み合わせるか。
・the gater
gaterはどのタスクに特化したエキスパートネットワークを使用するかを選択するNN。
mixture
of exp
ertsではgaterは入力に対して特化ネットワークそれぞれのウェイトを出力し、
最終的に各ネットワークの加重平均を出力する。
この場合、計算コストを減らせない。
サンプルに対して1つのNNを選択するhard gaterならばtrainingとinfrerenceの時間を加速させる。
特にゲートの数が少ない場合はうまく機能する。