Coursera 機械学習(4週目-2)


学習モデルの表現2

前回は、ニューラルネットワークの構造を一般化した式を示しました。

その中に、gで表現されるアクティベーション関数がありましたが、今回はそのアクティベーション関数をZに置き換えてみます。
例えば\(a_{1}^{(2)}\)を書き換えると、
$$\large a_{1}^{(2)}=g(z_{1}^{(2)})$$
となります。この場合の\(z^{(2)}\)は\(a^{(2)}\)と同じであり、2番目のレイヤーを意味します。上図で言えば隠れレイヤーですね。
同様に、
$$\large a_{2}^{(2)}=g(z_{2}^{(2)}),\ a_{3}^{(2)}=g(z_{3}^{(2)})$$
と置き換えます。さて、今置き換えた箇所を赤い枠で囲ってみました。

この箇所、何となく行列に見えないでしょうか。そう言われると見えなくもないですね。
そこで特徴量と先程の\(z^{(2)}\)を行列で書いてみます。
\[
x = \begin{pmatrix}
x_0 \\
x_1 \\
x_2 \\
x_3
\end{pmatrix}
\
z^{(2)} = \begin{pmatrix}
z_{1}^{(2)} \\
z_{2}^{(2)} \\
z_{3}^{(2)}
\end{pmatrix}
\]
この\(z^{(2)}\)を使って、\(a^{(2)}\)を表現してみます。
$$\large z^{(2)}=θ^{(1)}x \\ \large a^{(2)}=g(z^{(2)})$$
\(z^{(2)}\)を算出すると、これは三次元ベクトルですから、アクティベーション関数を通して算出される\(a^{(2)}\)も三次元ベクトルです。
ところで、入力レイヤーは見方を変えれば\(a^{(1)}\)レイヤーとも言えます。ですから、xの箇所を以下のように書き換えることもできます。
$$\large z^{(2)}=θ^{(1)}a^{(1)}$$
もう一つ考えなければいけないことは、バイアスニューロンです。上の式で\(a_{1}^{(2)}\)、\(a_{2}^{(2)}\)、\(a_{3}^{(2)}\)は求められましたが、\(a_{0}^{(2)}\)は考慮されていません。
バイアスニューロンは1であることは分かっていますから、
$$\large a_{0}^{(2)}=1$$
です。このことから、出力レイヤー、つまり\(a^{(3)}\)を算出する場合は以下の式になります。
$$\large z^{(3)}=θ^{(2)}a^{(2)} \\ \large h_{θ}(x)=a^{(3)}=g(z^{(3)})$$
\(a^{(1)}\)から\(a^{(2)}\)へ、\(a^{(2)}\)から\(a^{(3)}\)へと処理結果を伝播させていることから、以上の計算方法をフォワードプロパゲーション(前方伝播)と呼びます。
さて、最初の図をもう一度見てみますが、今度は少し見方を変えてみます。
レイヤー1である入力レイヤーが無かったとしたら、どう見えるでしょうか。

これは、単なるロジスティック回帰です。もとの特徴量である\(x_{(1)}\)、\(x_{(2)}\)、\(x_{(3)}\)が、新しい特徴量\(a_{(1)}\)、\(a_{(2)}\)、\(a_{(3)}\)に変わっただけで、やっていることは変わりません。
最初の絵に戻します。

つまり、レイヤー2それ自体が入力レイヤーになり、学習した結果が\(a_{(1)}\)、\(a_{(2)}\)、\(a_{(3)}\)なのです。
そして重要なのは、レイヤー1からレイヤー2へマッピングする際の関数を\(θ_{(1)}\)と表現しますが、この\(θ_{(1)}\)の選び方によって、様々な特徴量の学習が可能になるということです。

ニューラルネットワークの直感的理解(1)

ニューラルネットワークを直感的に理解してみましょう。
2値分類を考えてみます。本来であれば、下図の図2のようなデータセットがあり、このデータセットに対してニューラルネットワークがどのように決定境界を引くか考えますが、今回は分かりやすいように、図1のように簡略化したものを使用します。

図1には\(x_{1}\)、\(x_{2}\)という2つの変数があり、この変数は「0か1」のどちらかであるとしましょう。
ここで、yを決定する式を示します。
$$\large y=x_1 XOR\ x_2 \\ \large \hspace{25pt} x_1 XNOR\ x_2 \\ \large \hspace{25pt} NOT(x_1 XOR\ x_2)$$
何を言っているのか分からないかもしれませんが、そんなに難しく考える必要はありません。
これは論理演算であり、\(x_{1}\)、\(x_{2}\)の2つの変数の組み合わせによって、yを決定するということです。
まず、「\(x_1 XOR\ x_2\)」というのは、「どちらかが0で、もう片方が1の場合、yが1になる」ということです。テーブルにすると分かりやすいです。

\(x_{1}\) \(x_{2}\) \(y\)
0 0 0
1 0 1
0 1 1
1 1 0

次に「\(x_1 XNOR\ x_2\)」ですが、これと、「\(NOT(x_1 XOR\ x_2)\)」は、同じ意味です。\(NOT\)は否定ですから、\((x_1 XOR\ x_2)\)の結果を否定しています。
こちらは何となく理解できるかもしれませんが、「両方とも0または1場合、yが1になる」ということですね。

\(x_{1}\) \(x_{2}\) \(y\)
0 0 1
1 0 0
0 1 0
1 1 1

さて、このようなyの結果を、ニューラルネットワークを使って得られるかということを検証したいです。
その前に、まずニューラルネットワークで論理積「AND」について見てみましょう。簡単なニューロンを示します。

そして、このニューロンの前提は以下です。
$$\large x_1, x_2 \in {0, 1} \\ \large y=x_1 AND x_2$$
もう理解できると思います。これは、「\(x_1, x_2\)は0または1の値であり、両方が1だった場合に、yも1になる」ということです。
次に、各ネットワークに対して、このようにパラメータを割り振ってみます。

すると、仮説はこのようになりますね。これももう理解出来ていると思いますが、\(x_0\)はバイアスニューロンです。
$$\large h_{Θ}(x)=g(-30+20x_{1}+20x_{2})$$
ここで、シグモイド関数を思い出してみましょう。

いま、zの値が4.6であれば、縦軸の値が0.99、反対にzの値が-4.6であれば、0.01になることが分かっているとしましょう。
いよいよ計算してみます。試しに、\(x_0\)、\(x_1\)がともに0である場合を考えてみます。
仮説に代入すると、残るのはバイアスニューロンの値だけですね。
$$\large h_{Θ}(x)=-30$$
-30は、-4.6よりも遥かに左ですから、限りなく0に近いということになります。ですから、この場合のyの値は0です。
残りの考えうるパターンを全て計算した場合の結果が、次のテーブルです。

\(x_{1}\) \(x_{2}\) \(y\)
0 0 0
0 1 0
1 0 0
1 1 1

このテーブルを見れば、もう分かるでしょう。
つまり、計算結果がプラスになるパターンは、\(x_0\)、\(x_1\)がともに1である場合のみであり、前提である\(y=x_1 AND x_2\)をしっかりと満たしていますね。

ニューラルネットワークの直感的理解(2)

先程はANDについて見ました。否定形、つまりNOTはどのように仮説を立てればいいでしょうか。
前提条件はこちら
$$\large NOT \ x_{1}$$
試しにこのようにパラメータを掛けてみます。

$$\large h_{Θ}(x)=g(10-20x_{1})$$
この仮説であれば、\(x_1\)が0以外の時はプラスにならない(y=1にならない)ので、成り立ちそうです。
この仮説を見ても分かる通り、否定したい入力値があれば、その入力値に対して重い負のパラメータを掛けてあげれば良さそうです。
さて、ここまで学んだことを踏まえて、いよいよ最初のデータセットを導きだします。前提を覚えていますでしょうか。こちらです。
$$\large y=x_1 XOR\ x_2 \\ \large \hspace{25pt} x_1 XNOR\ x_2 \\ \large \hspace{25pt} NOT(x_1 XOR\ x_2)$$
「\(x_1 XNOR\ x_2\)」と、「\(NOT(x_1 XOR\ x_2)\)」は同じ意味ですから、最終的に「\(x_1 XNOR\ x_2\)」が求められればいい訳です。
これを導き出すために、以下3パターンを駆使しましょう。

まず、最初の2パターンである「\(x_1 AND\ x_2\)」と、「\((NOT x_1) AND\ (NOT x_2)\)」を使用して、隠れレイヤーを生成します。

この隠れレイヤー時点の出力、つまり\(a_1^{(2)}\)と\(a_2^{(2)}\)の結果をテーブルで出してみます。

最後に、\(a_1^{(2)}\)と\(a_2^{(2)}\)を入力とした場合の出力レイヤーを加えます。バイアスニューロンも忘れないように。

先程のテーブルに、出力結果を追加しましょう。見るべき入力は、\(a_1^{(2)}\)と\(a_2^{(2)}\)の値です。

見事に非線形の決定境界が引けてますね!

コメントを残す