お布団宇宙ねこ

にゃーん

Haskell で『ゼロから作るDeep Learning』(3)

『ゼロから作るDeep Learning – Pythonで学ぶディープラーニングの理論と実装』 の読書メモです。

今回は 「4.5.1 2層ニューラルネットワークのクラス」の手前まで。

4章 ニューラルネットワークの学習

学習

  • この章でいう学習とは、訓練データから最適なパラメータの値を自動で獲得すること
  • 機械学習ニューラルネットワーク(ディープラーニング)は、人の介入を極力避けてデータからパターンを見つけ出すことができる
    • 例えば、ゼロから数値を認識するアルゴリズムを考える代わりに、画像から特徴のパターンを機械学習で学習させる
    • この特徴のことを 特徴量 といい、有名なものとしては SIFT 、 SURF 、 HOG などが挙げられる
      • ただし、解く問題に応じた特徴量の設計が必要になることも
    • 機械学習の識別器として有名なのは SVM や KNN など
  • 一方で、ニューラルネットワークによる学習では、機械学習に必要な特徴量の設計は不要

訓練データとテストデータ

  • 訓練データ: 学習を行い、最適なパラメータを探索するのに使う
    • 教師データとも呼ばれる
  • テストデータ: 訓練データにより学習を行ったモデルの汎化能力を評価するのに使う
    • 訓練データには含まれていないデータで評価する
  • あるデータセットにだけ過度に対応した状態を 過学習 という

損失関数

  • ニューラルネットワークの学習では、指標(基準)を設け、それを手がかりに最適な重みパラメータを探す。この指標のことを 損失関数 と呼ぶ
  • 損失関数は、モデルがどれだけ訓練データに適合していないかというモデルの性能の悪さを示す指標である
  • 損失関数として有名なのは、 2乗和誤差交差エントロピー誤差
  • 損失関数はすべての訓練データを対象として求めるのが理想だが、データ量が膨大であるときは一部データを全体の近似として対象とする。このような学習手法を ミニバッチ学習 という
  • 認識精度を指標としないのは、パラメータの微分がほとんどの場所で 0 になるため
    • ある瞬間だけ変化するのではなく連続的に変化する指標が必要
    • 活性化関数を例に挙げると、シグモイド関数微分がそれにあたる

勾配

  • 勾配: すべての変数の偏微分をベクトルとしてまとめたもの
  • 勾配の結果にマイナスを付けて描画したとき、勾配の示す方向は各場所において関数の値を最も減らす方向となる
  • 勾配は損失関数が最小値を取る場所を探索するための手がかりとなる
    • 勾配はあくまで関数の値を最も減らす方向を示すだけであり、その方向が最小値を取るとは限らない(極小値や鞍点の可能性もある)
  • 勾配方向へ一定距離進むことを繰り返して関数の値を減らしていく手法を 勾配法 と呼ぶ
    • 厳密には最小値を探す場合を 勾配降下法 、最大値を探す場合を 勾配上昇法 という

ニューラルネットワークの学習

  • ニューラルネットワークの学習は 1.ミニバッチ学習 -> 2.勾配の算出 -> 3.パラメータの更新 -> 4. 1,2,3 の繰り返し という手順で行う
  • 上記手順は、無作為に選定したデータを用いていることから 確率的勾配降下法 (SGD) と呼ばれる

実践編

今回は無し