machine learning, week 5

今週は

  • NeuralNetworkのコスト関数
  • Backpropagationアルゴリズム
  • 微分チェック

を学ぶ.

まず,ニューラルネットワークのコスト関数を定義する.活性化関数にシグモイド関数を使った場合のニューラルネットワークのコスト関数はロジスティック回帰で使ったコスト関数を,より一般化したものである.

Screen Shot 2017-03-20 at 15.56.53.png

右辺第一項では,K個の出力ユニットがあるのでその和を計算している.第二項は正規化項である.

このコスト関数を最小化することを考える.これを計算するには各レイヤの\Thetaの各要素でJを偏微分したものが必要になる.すなわち,\Thetaを微小変化させた時にコストJの変化を見ていることになる.この偏微分を実行するために,出力と正解値の誤差を,出力層から入力層に向かって各層で誤差を伝播してゆきながら,その誤差が小さくなるようにΘを修正してゆく手法をバックプロパゲーション(誤差逆伝搬法)という.

まずfoward propagationを復習する.

Screen Shot 2017-03-20 at 15.58.33

これは入力層から出力層に向かって各レイヤにおけるz,aを求めている.

Screen Shot 2017-03-20 at 15.58.42

ここからbackpropagationである.出力層における誤差を計算する.

\delta^{(3)}_k = (a^{(3)}_k - y_k)

ここで\delta^{(3)}_kは出力層における誤差である.この誤差は出力値との差を計算することで得られる.

\delta^{(2)}_k = (\Theta^(2))^T\delta^{(3)}\cdot g'(z^{(2)})

次に\delta^{(3)}_kはレイヤ2(隠れ層)における誤差である.

そして各トレーニングレイヤ毎に計算した誤差を蓄積する為に,レイヤー枚に誤差を格納する行列\Delta^{l}=\Delta^{l}+\delta^{(l+1)}(a^l)^Tを計算する.

全てのトレーニングデータについてこれらの手順を実行した後,レイヤ毎に蓄積された誤差\Deltaをトレーニングデータ数で割ったものが,Jの\Thetaにおける偏微分である.

また,自分が実装したbackpropergation のアルゴリズムのJの偏微分が正しく動作しているかチェックするのが,微分チェックである.これは数学の極限の定義式を実装したものである.

Coursera機械学習コース内のForumでもWeek5のプログラミング課題がもっともChallengingだと記載されていおり,ここが最大の山場らしい.

参考:Coursera Machine Learning -Week5-のまとめ(ニューラルネットワークの学習)

広告

コメントを残す

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

WordPress.com ロゴ

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

Twitter 画像

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

Facebook の写真

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

Google+ フォト

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

%s と連携中