[機械学習]
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までの数値のどれに一番近いか確率がでるので、一番デカイ値を答えとする
296px-Colored_neural_network.svg.png