ささきのブログ

日記、技術メモ、勉強記録など。

第4週:ニューラルネットワーク:表現【Coursera Machine Learningコース】

Motivations

Non-linear Hypotheses

なぜニューラルネットワークが必要なのか?

下図のようなデータセットの分布の分類問題を解きたいとする。 f:id:sasakino:20200904074544p:plain:w300

このデータセットに仮説をフィットさせるには、非線形な仮説にするために、
次数の高い多項式にする必要があった。

しかしこのとき、特徴量の種類が多い場合、多項式がとても複雑になる。

例えば特徴量が100個ある場合、2次式を作ろうとすると、
2次の項だけ数えても、項の数は5000個ほどになる。
(x _ {1} ^ {2}, x _ 1 x _ 2, ... , x _ 1 x _ {100}, ... , x _ {100} ^ 2)

これはオーバーフィッティングを招いてしまう。
また、計算量はO(n ^ 2)ほどと、とても高コストになる。

例えば画像処理では、各ピクセルの画素値が特徴量として用いられる。
仮に50 x 50ピクセルの画像だったとしても、特徴量は2500個と膨大になる。
RGB画像であればさらに3倍の7500個になる。
このような問題にロジスティクス回帰は向かない。

Neurons and the Brain

ニューラルネットワークの概要。

ニューラルネットワークは脳の模倣を目指したアルゴリズム
80年代〜90年代によく使われていた。

計算コストが高い等の理由で使われなくなっていたが、近年また注目を集めている。

人間の脳は、ひとつのアルゴリズムで学習を行っているという仮説があるらしい。

例えば耳の情報を処理する聴覚皮質という部位を視神経とつなげると、
視覚情報を処理できるようになるという研究結果があるという。

他にも額につけたカメラの映像を舌で処理する研究や、 カエルに3番目の目を取り付けると
その情報を処理できるようになるという研究結果などがあるとのこと。

このように柔軟に学習する脳の仕組みををコンピュータに実装できれば、
真に知能をもった人工知能を作れるのではないか、というのが根っこにあるアイデア

Neural Networks

Model Representation 1

脳はニューロンと呼ばれる細胞で構成されている。

ニューロンの細胞体からは、dendrite(樹状突起)と呼ばれる入力部が複数伸びている。
これらを介して他のニューロンから信号を受け取る。

信号を受け取ったあと、内部で何らかの処理を行い、
axon(軸索)と呼ばれる出力部から他のニューロンへ信号を送り出す。

情報伝達は微弱な電気信号(スパイク)をやりとりして行う。

この仕組みをモデル化したものが以下の図。
f:id:sasakino:20200905004000p:plain:w300

黄色い円がニューロン本体。

x _ 1, x _ 2, x _ 3が入力で、黄色い円と入力をつなぐ矢印がdendriteにあたる。

ニューロンは入力を受け取ったあと、計算を行い、なんらかの値を出力する。
出力側の矢印がaxonにあたる。

h _ {θ}(x)は、\displaystyle{h _ {θ}(x)=\frac{1}{1 + e ^ {-θ ^ {T}x}}}

ニューラルネットワークにおいては、このシグモイド関数
「活性化関数(activation function)」と呼んだりする。

x, θに関してはこれまで同様パラメータベクトルを表している。
ニューラルネットワークにおいては、θを「重み(weight)」と呼ぶこともある。

ニューラルネットワークを図示する場合、分かりやすさのために、
下図のように追加のノードx _ 0を書き加えることもある。
f:id:sasakino:20200905012359p:plain:w300

このノードを「バイアスユニット」や「バイアスニューロン」と呼ぶ。
x _ 0の値は1なので、理由がなければ書かなくてもよい。

ニューラルネットワークとは、下図のように、上記のようなモデルがいくつか集まったもののこと。
f:id:sasakino:20200905012035p:plain:w400

Layer 1 を「入力層(Input Layer)」、Layer 3を「出力層(Output Layer)」と呼ぶ。

また、入力層と出力層に挟まれたレイヤーを「隠れ層(Hidden Layer)」と呼ぶ。
外から直接観測することができないためこう呼ばれる。
隠れ層は1つとは限らず、入力層でも出力層でもない層はなんでも隠れ層と呼ぶ。

シンボル定義について。
a _ {i} ^ {(j)}を、レイヤーjのユニットiの「アクティベーション」と呼ぶ。
アクティベーションという言葉は、別のレイヤーの計算結果の値、つまり出力値を指している。

Θ ^ {(j)}は、レイヤーjからレイヤーj+1マッピングする関数を制御する重みを表すパラメータ行列。

上図では、以下のような計算が行われていることになる。
f:id:sasakino:20200905015010p:plain:w450

もしネットワークがレイヤー j にユニットを s _ j 個もち、
レイヤー j+1 にユニットを s _ {j+1} 個もつなら、Θ ^ {(j)} の次元は s _ {j+1} × (s _ {j} + 1) になる。

たとえばレイヤー 1 にユニットが 2 個、レイヤー 2 にユニットが 4 個あるなら、Θ の次元は4 × 3になる。

Model Representation 2

計算の効率化(ベクトル化)について。

Θ _ {10} ^ {(1)}x _ {0} + Θ _ {11} ^ {(1)}x _ {1} + Θ _ {12} ^ {(1)}x _ {2} + Θ _ {13} ^ {(1)}x _ {3} = z _ {1} ^ {(2)} とおくと、
a _ {1} ^ {(2)} = g(z _ {1} ^ {(2)})と書くことができる。

他の多項式も同様にして z _ {2} ^ {(2)}, z _ {3} ^ {(2)}とおくと、
ニューラルネットワークで行われる計算を以下のようにベクトルで表現できる。
f:id:sasakino:20200909072503p:plain:w300

また、記述の一貫性をもたせるために、入力層のxについて、[tex:a ^ {(1)} = x}と定義する。
(入力レイヤーのアクティベーションとして解釈する)

つまり、z ^ {(2)} = Θ ^ {(1)}a ^ {(1)}

出力層についても同様に、
z ^ {(3)} = Θ _ {10} ^ {(2)}a _ {0} ^ {2} + Θ _ {11} ^ {(2)}a _ {1} ^ {(2)} + Θ _ {12} ^ {(2)}a _ {2} ^ {(2)} + Θ _ {13} ^ {(2)}a _ {3} ^ {(2)} とおくと、
h _ {Θ}(x) = a ^ {(3)} = g(z ^ {(3)})と書ける。

ただし、ここでa _ {0} ^ {(2)} は隠れ層のバイアスユニットで、a _ {0} ^ {(2)} = 1

この h _ {Θ}(x) を得るまでの一連の処理を、フォワードプロパゲーションと呼ぶ。
入力層のアクティベーションから始めて、隠れ層を経て、出力層へ、というふうに、
計算を前方(フォワード)へ伝搬(プロパゲーション)させていることによる。

なぜこのニューラルネットワークのアイデアが効果的なのか。

次のようなニューラルネットワークについて考える。
f:id:sasakino:20200909074609p:plain:w400

下図のように、入力層の部分を隠してみる。
f:id:sasakino:20200909074737p:plain:w400

すると、このネットワークで行われる計算は単純なロジスティック関数になる。
h _ {Θ}(x) = g(Θ _ {10} ^ {(2)}a _ {0} ^ {2} + Θ _ {11} ^ {(2)}a _ {1} ^ {(2)} + Θ _ {12} ^ {(2)}a _ {2} ^ {(2)} + Θ _ {13} ^ {(2)}a _ {3} ^ {(2)})

ロジスティック回帰との違いは、特徴量として、x ではなく a を使うという点。

aは、それ自身が学習結果であり、Θ ^ {(1)} で定義されている。

Θ ^ {(1)} によって多様な表現ができるので、特徴量xをそのまま使ったり、
xの組み合わせで作られた多項式の中からひとつを選ぶよりも、よりよい仮説を得られる。

Applications

Examples and Intuitions 1

ニューラルネットワークはパラメータの組み合わせによってAND・OR関数を表現可能。

ANDの例

x _ 1, x _ 2 ∈ {0, 1} とする

Θ _ {10} ^ {1} = -30, Θ _ {11} ^ {1} = 20, Θ _ {12} ^ {1} = 20 とすると、
h _ {Θ}(x) = g(-30 + 20 x _ 1 + 20 x _ 2) となる

このネットワークの出力を表にすると以下のようになる

x _ 1 x _ 2 h _ {Θ}(x)
0 0 g(-30)≒0
0 1 g(-10)≒0
1 0 g(-10)≒0
1 1 g(10)≒1

ANDを表していることがわかる

ORの例

x _ 1, x _ 2 ∈ {0, 1} とする

Θ _ {10} ^ {1} = -10, Θ _ {11} ^ {1} = 20, Θ _ {12} ^ {1} = 20 とすると、
h _ {Θ}(x) = g(-10 + 20 x _ 1 + 20 x _ 2) となる

このネットワークの出力を表にすると以下のようになる

x _ 1 x _ 2 h _ {Θ}(x)
0 0 g(-10)≒0
0 1 g(10)≒1
1 0 g(10)≒1
1 1 g(30)≒1

ORを表していることがわかる

Examples and Intuitions 2

他にも、NOTも表現可能。また、AND・OR・NOTを組み合わせてXNORを作れる。

NOT

入力としてバイアスユニットと[ tex:x _ 1] があるとする。
x _ 1 ∈ {0, 1} とする

Θ _ {10} ^ {1} = 10, Θ _ {11} ^ {1} = -20 とすると、
h _ {Θ}(x) = g(10 - 20 x _ 1) となる

このネットワークの出力を表にすると以下のようになる

x _ 1 h _ {Θ}(x)
0 g(10)≒1
1 g(-10)≒0

NOTを表していることがわかる

XNOR

AND・(NOT A)AND(NOT B)・ORの3組のニューロンを作る
f:id:sasakino:20200910065416p:plain:w700

下図のように組み合わせる
f:id:sasakino:20200910065526p:plain:w400

真理値表は次のようになる

x _ 1 x _ 2 a _ {1} ^ {(2)} a _ {2} ^ {(2)} h _ {Θ}(x)
0 0 0 1 1
0 1 0 0 0
1 0 0 0 0
1 1 1 0 1

XNORを表していることがわかる

XNORは下図のようなプロットの決定境界を表現できる
f:id:sasakino:20200910071359p:plain:w300

これができると、次のような非線形な決定境界も表現できることになる
f:id:sasakino:20200910071621p:plain:w300

このように、ニューロンの組み合わせにより複雑で非線形な仮説を得ることができる

Multiclass Classification

ニューラルネットワークで多クラス分類をするには、出力層に複数のユニットをおく。 f:id:sasakino:20200910072721p:plain:w400

そして、各ユニットに、あるクラスがYesかNoかを判別させる

画像認識を例にすると、1つめのユニットは歩行者か否かを判別し、
2つめのユニットは車か否かを判別し...というような具合

各ユニットの出力はクラス数の次元のベクトルで、 例えば4クラス分類なら出力y ^ {(i)}
[ 1\ 0\ 0\ 0 ] ^ T, [ 0\ 1\ 0\ 0 ] ^ T, [ 0\ 0\ 1\ 0 ] ^ T, [ 0\ 0\ 0\ 1 ] ^ Tのいずれかになる

これらは、ニューラルネットワークを使ってone vs allを再現しているような形になる