Coursera Machine Learning - Week5 Neural Networks Learning

CourseraのMachine Learningについてまとめています。 前回は、Week4 Neural Networks Representationについてまとめました。

Week5では、Week4で学んだNeural Networksをどう学習させるかについて学んでいきます。AIを勉強しているとよく聞く、Backpropagation(バックプロバゲーション)についても出てきます。


Neural Networks: Learning

Cost Function

Neural NetworkでのMulti-class classificationについて学んでいきます。Week4で触れたように、Multi-class classificationでは、分類するクラスの数だけのOutput unitを持ちます。下記図のように、Kクラスの分類では、K個のOutput unitを持ちます。


Neural Network (Classification)

 

この場合のコスト関数は、Logistic regressionの場合と同様に、下記のようになります。 


Cost function_Logistic regression


Cost function_Neural network

 

Backpropagation

コスト関数を最小化するため、これまでと同様に、Gradient(コスト関数JのΘでの偏微分)を計算する必要があります。この計算に、Backpropagationを用います。

Backpropagationに入る前に、まずは、Forward propagationの振り返りからです。Week4では、下記のようにForward propagationを計算しました。この計算をBackpropagationでも用います。


Forward propagation

 

まず、各レイヤのエラーδを考えると、下記のように計算できます。ここで、".*"は、Octave/MATLABで用いている、要素ごとの掛け算です。(行列の掛け算ではない)


Gradient computation

補足として、gの微分は、下記のように計算できます。


Derivative of g

このエラーδにActivationのaを掛けたものが、コスト関数JのΘでの偏微分として扱うことができるので、Backpropagationのアルゴリズムとしては、下記のようになります。Forward propagationとは逆に、Output layerの誤差から、誤差を逆伝播させて各層の誤差を計算していくので、Backpropagationと呼ばれています。

なんか複雑ですね。感覚的には分かるような分からないような。。 


Backpropagation algorithm

 

Gradient checking

上記で記載したBackpropagationですが、実装する上でミスすることもあるようで、そのミスをチェックするためのGradient checkingについて学びます。

微分は、傾きを求めるものであり、傾きは、十分に小さな幅での変位から近似的に求めることができるので、下記の数式でも近似的に計算することができます。


Gradient checking

具体的には、各θについて、下記のように近似的な傾きを計算し、Backpropagationで計算している微分の値とおおよそ一致するか否かをチェックすることで、バグがないかどうかを確認することができます。この近似的な計算は、Backpropagationでの計算と比較し、計算リソースを食い、時間が掛かってしまうので、あくまでもデバッグ用で、実際のAIトレーニングを行う際は、オフにするのが良いとのことです。


Gradient checking calculation


Random initialization

Backpropagationの計算を始めるにあたり、Θの値を初期化する必要があります。Θの値を0で初期化してしまうと、各層のActivationが同じ値を取ってしまい、うまく行かないため、-ε 〜 ε の間のランダムな数値で初期化するのが良いとのことです。(ここでのεは、上記のGradient checkingのεとは別)

 

Putting it together 開発の流れ

最後に、ここまで学んできたことをベースに、どのように開発を進めるのか、その流れを学びます。

  1. Neural Networkのネットワークアーキテクチャの選択(Hidden layerが何層あり、そのUnit数はいくつか)
    ・Input layerは、Featureの次元数
    ・Output layerは、分類するクラスの数
    ・Hidden layerは、1層以上とし、そのUnit数は、各Hidden layerで共通にするのがおすすめとのこと
  2. Weight Θをランダムに初期化
  3. Forward propagationを実装
  4. コスト関数Jの計算を実装
  5. Backpropagationを実装
  6. Forward propagationとBackpropagationをトレーニングデータを用いて実行
  7. Gradient checkingを行い、Backpropagationが正しく計算されているか確認
  8. Gradient descentか他の最適化手法とBackpropagationを用いて、コスト関数Jを最小化するΘを探索

 

また、講義の最後に、Neural Networkを利用している例として、自動運転での適用例が紹介されます。興味のある方は、見てみてください。

www.coursera.org | Autonomous Driving

 

プログラミング演習

Week5のプログラミング演習では、Neural Network向けにBackpropagationを実装し、手書きの数字認識を行います。演習の項目は、具体的には以下のものです。

  • Feedforward and Cost Function
  • Regularized Cost Function
  • Sigmoid Gradient
  • Neural Net Gradient Function (Backpropagation)
  • Regularized Gradient

 

 


次回は、Week6の前半、Advice for Applying Machine Learningについてで、機械学習のデバッグ方法等についてまとめます。

 

コース全体の目次とそのまとめ記事へのリンクは、下記の記事にまとめていますので、参照ください。

Coursera Machine Learningまとめ



本記事を読んでいただきありがとうございます。
機械学習を実際に使うにあたり、Coursera MLと合わせておすすめしたい書籍を紹介します。


Pythonではじめる機械学習 ―scikit-learnで学ぶ特徴量エンジニアリングと機械学習の基礎

scikit-learnを用いた機械学習を学ぶのに最適な本です。



ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装

Deep Learningと言えばこれ。TensorFlowやPyTorch等のフレームワークを用いずに、基礎の理論からDeep Learningを実装します。Week4Week5の記事を読んで、より深く理解したいと思った人におすすめです。



Kaggleで勝つデータ分析の技術

データ分析について学び始めた人におすすめです。