Deep Learning

「深層学習」第4章 大規模学習の実現技術

人工知能学会監修「深層学習」第4章です.この章では我々一般人には手の届かないような大規模な深層学習システムを作る話について書かれています.

  • DistBeliefはGoogleが実装した大規模ニューラルネットワーク分散並列計算システムである.このシステムではニューラルネットワークの最適化という一見並列化不可能な問題に対し,データ並列化のアプローチを採る.このアプローチではノード間の通信というボトルネックを避けるためデータのコピーを各ノードが保持し,ノード間同期を取らずに計算を行う.更にモデルを分割化して並列計算を可能にするモデル並列化を組み合わせることで確率的勾配降下を行う.
  • 他の並列化アプローチとしてGPUを使うものがある.これはKrizhenskyが最初に行ったもので,同じ計算をループ無しに大規模なデータに対して行うのが得意というGPUの特性を使う.GPUの問題としてCPUとはメモリが共有されない製品が多く,通信を減らす工夫が必要となる.
  • NgらはGPU,(スパコンの接続に使われる?)InfiniBandを使って複数のマシンを使った深層学習を行った.GPUは密行列に強く疎行列に弱いという特性を考慮して密行列を作る工夫を行って1000万枚の画像を17時間で学習することに成功した.
  • 学習収束を高速化する手法としてバッチ正規化というものがある.この手法では学習データを正規化し(\hat{x_i}=\frac{x_i-\mu_B}{\sqrt{\sigma^{2}_B}+\epsilon}),更に線形変換した変数を用いて学習する(y_i=\gamma\hat{x_i}+\beta).この\gamma,\betaは学習すべきパラメータである.これを用いることで「内部共変量シフト」という問題を回避できる.
  • 一旦深層学習やその他ので学習したあと,同じ性能を持つ浅いニューラルネットを作る手法を「蒸留」という.この手法では浅いニューラルネットは学習済みモデル(教師モデル)の出力と入力データの分布の交差エントロピーの重み付き和を最小にするよう学習する.
  • DropOutは過学習を防ぐ手法である.この手法では訓練データごとにランダムにノードを無効化することでL2正則化と同じ効果を得る.学習後,実データを入力する場合,出力はランダムに無効化したノードの組み合わせ全部を試し,幾何平均をとることで得られる.しかし,組わせ全部を試すのはメモリ的にも計算量的にも現実的ではないので各ノードの出力を無効化したノードの割合\alpha倍して近似する.
  • 活性化関数が非線形であると計算量が増大するため線形の関数で近似することが行われている.a_{ReLU}\approx max(0,x)a_{MaxOut}=max\ w^{T}_k xといった関数が提案されている.
  • SGDの学習率を調整する手法としてAdaGrad,Adamがある.Adamは多くの問題で最適な収束性能を達成することがみられる.
  • ニューラルネットで使われる超パラメータの最適化はグリッド探索よりランダム探索が良いと報告されている.これはパラメータの影響度が均等ではないことによるものと考えられている.
  • 誤差逆伝播などは実装ミスが起こりやすいので簡単なデータセットで中心差分法等で求めた勾配と比較し,デバッグすると良い.

興味が有るのは「蒸留」です.浅いニューラルネットでアンサンブルを真似することもできるそうで,ニューラルネットワークの表現力の高さが伺えます.

この章で基本的な話題が終わるようなので,一旦実験してみようかと考えています.エッジ数があまりに多いモデルは自分のPCで動かすのが厳しいので,~1000エッジ程度の簡単な自己符号化器を作って内部表現の抽出実験をやろうと思います.多分細部の実装は相当骨が折れるので既存ライブラリを使うと思います.

広告

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中