ニューラルネットワーク+深層学習

# ニューラルネット
 - 順方向ニューラルネットっていう一般的な構成は,オンライン型の関数回帰方法で,特に非線形関数の合成関数として回帰するものだと思う.
 - 3層でN層以上と等価な関数表現力があると言われているらしいが,じゃあ何で深層学習と呼ばれる方法は階層型にするのか?
  深層学習の中でも,出力段より前の層を自分自身を教師データとして学習するAutoEncoderと呼ばれる手法を適用している構成は,3層で学習できると言っても,意味のないような説明変数や,説明変数を合成した方が自然に関数を回帰できるような場合に,適切な説明変数を一旦生成して(特徴抽出していると思っていいのか?),で少ない教師データでも充分な学習ができるようにしたんだと思う.だから,最終段以外は教師なしな学習で自分を整理させて教師の前に立つ,ってイメージなのかな.
 適切な説明変数だけうまく残していると思うと,過学習対策にもなっているんだと思う.
 - 総ノード数が同じでも,各層のノードを多くして階層を浅くしたほうが学習性(最適解への収束性)は高い.でも,各層のノード数を少なくして,階層を深くしたほうが汎化性能が高いことが多い(なんでだろう?あくまでも学習できた場合,という前提かな?高位の特徴量で表現するほうが汎用性が高いってどうしてだろう???).
 
# ブームの理由
 - 誤差逆伝播法(バックプロパゲーション)による3段NNの学習が第2次ブーム.但し,隠れ層が2段以上になるとうまく学習できなかった,また層数やユニット数の理論的意味付けができなかったため下火になった.学習できない問題というのは,結局NNは関数回帰だと思えば,何かしらの目的関数にしたがって係数を最適化しているけど,その際に勾配情報を使って最適化する.その勾配情報が伝搬の過程で薄れていってしまう,っていう事だと思う.じゃあ,勾配法使わないメタ最適化でやればいいじゃん?と思うけど,結局は勾配が消えちゃう問題がどうのじゃなくて,最適化するパラメタに対して教師データが少ないのが問題だったのか?と思う.だから,最近の成功の理由の大きくは結局は教師データ量の増加と,その大量のデータを扱うのに充分な計算力が用意できたことなのかな.
 - 学習がうまくできない問題を解決したのがHintonの事前学習.事前学習では入力自身を教師データとして各層毎に重みを学習する.これを初期値としてNNを学習させるとうまくいった.
 - 一部のユニット間の接続を切るドロップアウトも有効性が示された.
 - しかし,事前学習もドロップアウトがなくても,データが多いだけである程度うまくいくことが次第に分かってきた.つまり,データが多くなったことが一番の要因.

# SGD
- 大量のデータを使うことが最近の成功の理由の一つだけど,かと言って計算量的に全部使うのは大変.ならば,間をとって全データの一部をランダムに選択して使うことを何回もやろう,という思想.(何か矛盾している気がするな?)
- 特に,最適化の初期状態は大まかな勾配で充分だから(これ本当なのかな?)大雑把にデータを間引いて,大体の勾配で進む方向を決めようっていう作戦.
- 逆に,勾配をちょこちょこ入れ替えることで局所解に陥る可能性を減らそうっていう意味もあるのかな?(ランダムフォレスト的な効果かな)
- AdaGradは勾配が疎になる場合に高速化が期待できる.
- RMSPropは非定常な設定下で高速化が期待できる.
- ADAMはAdaGradとRMSPropのいいとこ取りな性質.

# ReLu

  • シグモイドやtanhは計算コストが高いことと,勾配が0に近いこと(勾配が消失しやすい)が問題だった.
  • ReLuは計算コストが低く,かつ,多くの部分で勾配が0になる.0になることでスパースなモデルになりやすい.

# 収束性の改善

  • バッチ正規化

 ANNの各層での共変量シフト(内部共変量)を防ぐ.

  • Distillation(蒸留)

# ドロップアウト

  • アンサンブルなモデルと等価なことをやっていると考えられる.味噌は確率αで欠落させて学習させたモデルを,予測に使う際にα倍にすることが,複数のモデルの予測値の幾何平均をとっていること(の近似)になること.よく出来てるなぁ.
  • 別の解釈としては,各ノードの役割がより流動的になるが故に,各ノードの学習結果がより高位な情報を捉えるように学習が進む.