FreeStyleWiki

Coursera 機械学習 - Week4

このエントリーをはてなブックマークに追加

[機械学習]

Week4

ようやく…ニューラルネットワークですよ。最初は概論なので休憩気分です。

とはいえ、この辺から線形代数学の知識が必要になります。資料があるのであれば、今のうちに読んでおくべきでしょう。

  目的関数の詳解 (Model Representation)

ニューラルネットワーク (Neural Network)

左から順に…

  • 入力層 (Input)
  • 隠れ層 (Hidden Layer)
  • 出力層 (Output)
  • a_i^{(j)} : (j)はレイヤーの階層数、隠れ層は2番めなので、j=2、iはユニット数上から順番に連番
    • "activation" だから "a"
    • 今考えると入力層なのに"a"と定義するのはなんか変な感じもする、活性関数(activation function)のためか?
  • \theta^{(j) : レイヤーjからレイヤーj+1からの入力を操作するためのウェイトを決める行列

隠れ層がある場合、以下のようになる

  • \left[ \begin{array}{cc} x_0\\ x_1\\ x_2\\ x_3\\ \end{array} \right] \to \left[ \begin{array}{cc} a_1^{(2)}\\ a_2^{(2)}\\ a_3^{(2)}\\ \end{array} \right] \to h_\theta(x)

活性関数(activation function)は以下のように求められる

  • a_1^{(2)} = g( \theta^{(1)}_{10} x_0 + \theta^{(1)}_{11} x_1 + \theta^{(1)}_{12} x_2 + \theta^{(1)}_{13} x_3 )
  • a_2^{(2)} = g( \theta^{(1)}_{20} x_0 + \theta^{(1)}_{21} x_1 + \theta^{(1)}_{22} x_2 + \theta^{(1)}_{23} x_3 )
  • a_3^{(2)} = g( \theta^{(1)}_{30} x_0 + \theta^{(1)}_{31} x_1 + \theta^{(1)}_{32} x_2 + \theta^{(1)}_{33} x_3 )
  • h_\theta(x) = a^{(3)}_1 = g( \theta^{(1)}_{10} a_0 + \theta^{(1)}_{11} a_1 + \theta^{(1)}_{12} a_2 + \theta^{(1)}_{13} a_3 )

  例示と直観 (Examples and Intuitions)

このニューラルネットワークを使って、AND/ORのような関数を作ることが出来る。

  • Input を以下のように置く、
    • X0(=1)
    • X1
    • X2
  • Output はxの値から作られるとすると
    • h_\theta(x) = g(x_0 + x_1 + x_2)
  • 以下のような定数が与えられる場合
    • h_\theta(x) = g(-10 \cdot x_0 + 20 \cdot x_1 + 20 \cdot x_2)
x1 x2 g(x)
g(x) 1 0 10 ≒ 1
g(x) 0 1 10 ≒ 1
g(x) 1 1 30 ≒ 1
g(x) 0 0 -10 ≒ 0

というわけでこれはOR関数, あとAND, NOR関数が出てきた。実際、これはさっきのactivate関数を導出していく過程である。

  • \left[ \begin{array}{cc} x_0\\x_1\\x_2\\ \end{array} \right] \to \left[ \begin{array}{cc} a_1^{(2)}\\a_2^{(2)}\\ \end{array} \right] \to \left[ \begin{array}{cc} a^{(3)} \end{array} \right] \to h_\theta(x)

  クイズのヒント

Week4 Quiz難しかった。。。

  • 真理値表を思い出しましょう、とりあえずこれを覚えとけば1点獲得です
  • 活性ノードの行列の読み方
    • a_1^{(2)} は 2列目のノード。a_1^{(3)} は 3列目のノード。これらは前のノードの計算結果を使う。
  • Week3の知識も問われる
    • J(\theta) = \frac{1}{2m} \big[ \sum_{n=1}^m ( h_\theta(x^{(i)}) - y^{(i)} )^2 + \lambda \sum_{j=1}^n \theta^2_j \big]
    • ラムダ以降の式が大きくなるほど目的関数が平坦化してオーバーフィッティングしにくくなる、でしたよね?

  Octave演習

正規化されたロジスティック回帰 (Regularized Logistic Regression)

  • 以下を適用する ... h = g(X\theta) とおいて
    • J(\theta) = \frac{1}{m} \cdot \left( -y^T log(h) - (1-y)^T log(1-h) \right)
    • あと、これにラムダ以降の項をプラスしてやればよい(←ただその計算方法が一番難しかった)
    • どちらにせよ、前回の演習ができていればコピペでいける

これによりlrCostFunctionが実装できる。

  • ここまで何回か演習を行っている中で、このCostFunctionが目的関数J(θ)と傾きgradを求めることができることがわかるはず

一対多の分類 (One vs All Clasification)

複数のクラスがθで与えられるときの分類

  • Week3の課題
    • h_\theta^{(0)}(x), h_\theta^{(1)}(x), h_\theta^{(2)}(x) \cdots h_\theta^{(K)}(x) に対して分類を実行する
  • for文をクラスの数だけ回して、lrCostFunctionから取得できるJ(θ)とgradをお手本の通りoctave備えつきの関数に回して最適解を得る。
  • all_theta なる変数は実質K個分の行があるベクトルなので、最適解をその行にどんどん入れていく(1, 2, ... 10行目まで)

一対多の分類予測 (One-vs-All Classifier Prediction)

問題文の正確な把握が必要、

  • データセット X は、横が400要素(20x20の画像)、縦がm=5000要素ある
  • 上で求めたall_thetaは横が400+1要素、縦が10要素ある(縦が10なのは、機械学習させて答えを当てた時、0~9までの数字を言い当てるから。。。説明しにくい)
  • 決定境界の章でやったとおり、シグモイド関数と式の形から以下のことが言えるのでした
    • \theta^T X \geq 0 \Rightarrow y = 1
    • \theta^T X < 0 \Rightarrow y = 0

今回は、yは0~9までの値を取りうる(便宜上1~10になってるけど)

ベクトルX×θ'を計算してやって、一番デカイ値を出す奴が画像の正体なので、m=5000要素分これを計算して数字を当てる。

ニューラルネットワークの予測関数 (Neural Network Prediction Function)

まずは問題のpdfに書かれている数式をそのままoctaveに起こしてください。

  • g(z^{(2)}) は sigmoid関数を表します
  • a1 = [ones(1,1) X(i,:)]; みたいな感じで、活性ノードの最初に1を追加してやらないと行列の計算ができません(問題文にも書いてある)
  • hθ(x)の式が計算できると、前の問題と同じように1~10までの数値のどれに一番近いか確率がでるので、一番デカイ値を答えとする