第4週:ニューラルネットワーク:表現【Coursera Machine Learningコース】
Motivations
Non-linear Hypotheses
なぜニューラルネットワークが必要なのか?
下図のようなデータセットの分布の分類問題を解きたいとする。
このデータセットに仮説をフィットさせるには、非線形な仮説にするために、
次数の高い多項式にする必要があった。
しかしこのとき、特徴量の種類が多い場合、多項式がとても複雑になる。
例えば特徴量が100個ある場合、2次式を作ろうとすると、
2次の項だけ数えても、項の数は5000個ほどになる。
(, , ... , , ... , )
これはオーバーフィッティングを招いてしまう。
また、計算量はほどと、とても高コストになる。
例えば画像処理では、各ピクセルの画素値が特徴量として用いられる。
仮に50 x 50ピクセルの画像だったとしても、特徴量は2500個と膨大になる。
RGB画像であればさらに3倍の7500個になる。
このような問題にロジスティクス回帰は向かない。
Neurons and the Brain
ニューラルネットワークの概要。
ニューラルネットワークは脳の模倣を目指したアルゴリズム。
80年代〜90年代によく使われていた。
計算コストが高い等の理由で使われなくなっていたが、近年また注目を集めている。
人間の脳は、ひとつのアルゴリズムで学習を行っているという仮説があるらしい。
例えば耳の情報を処理する聴覚皮質という部位を視神経とつなげると、
視覚情報を処理できるようになるという研究結果があるという。
他にも額につけたカメラの映像を舌で処理する研究や、 カエルに3番目の目を取り付けると
その情報を処理できるようになるという研究結果などがあるとのこと。
このように柔軟に学習する脳の仕組みををコンピュータに実装できれば、
真に知能をもった人工知能を作れるのではないか、というのが根っこにあるアイデア。
Neural Networks
Model Representation 1
脳はニューロンと呼ばれる細胞で構成されている。
ニューロンの細胞体からは、dendrite(樹状突起)と呼ばれる入力部が複数伸びている。
これらを介して他のニューロンから信号を受け取る。
信号を受け取ったあと、内部で何らかの処理を行い、
axon(軸索)と呼ばれる出力部から他のニューロンへ信号を送り出す。
情報伝達は微弱な電気信号(スパイク)をやりとりして行う。
この仕組みをモデル化したものが以下の図。
黄色い円がニューロン本体。
, , が入力で、黄色い円と入力をつなぐ矢印がdendriteにあたる。
ニューロンは入力を受け取ったあと、計算を行い、なんらかの値を出力する。
出力側の矢印がaxonにあたる。
は、
ニューラルネットワークにおいては、このシグモイド関数を
「活性化関数(activation function)」と呼んだりする。
x, θに関してはこれまで同様パラメータベクトルを表している。
ニューラルネットワークにおいては、θを「重み(weight)」と呼ぶこともある。
ニューラルネットワークを図示する場合、分かりやすさのために、
下図のように追加のノードを書き加えることもある。
このノードを「バイアスユニット」や「バイアスニューロン」と呼ぶ。
の値は1なので、理由がなければ書かなくてもよい。
ニューラルネットワークとは、下図のように、上記のようなモデルがいくつか集まったもののこと。
Layer 1 を「入力層(Input Layer)」、Layer 3を「出力層(Output Layer)」と呼ぶ。
また、入力層と出力層に挟まれたレイヤーを「隠れ層(Hidden Layer)」と呼ぶ。
外から直接観測することができないためこう呼ばれる。
隠れ層は1つとは限らず、入力層でも出力層でもない層はなんでも隠れ層と呼ぶ。
シンボル定義について。
を、レイヤーのユニットの「アクティベーション」と呼ぶ。
アクティベーションという言葉は、別のレイヤーの計算結果の値、つまり出力値を指している。
は、レイヤーからレイヤーへマッピングする関数を制御する重みを表すパラメータ行列。
上図では、以下のような計算が行われていることになる。
もしネットワークがレイヤー にユニットを 個もち、
レイヤー にユニットを 個もつなら、 の次元は になる。
たとえばレイヤー 1 にユニットが 2 個、レイヤー 2 にユニットが 4 個あるなら、Θ の次元はになる。
Model Representation 2
計算の効率化(ベクトル化)について。
とおくと、
と書くことができる。
他の多項式も同様にして , とおくと、
ニューラルネットワークで行われる計算を以下のようにベクトルで表現できる。
また、記述の一貫性をもたせるために、入力層のxについて、[tex:a ^ {(1)} = x}と定義する。
(入力レイヤーのアクティベーションとして解釈する)
つまり、
出力層についても同様に、
とおくと、
と書ける。
ただし、ここで は隠れ層のバイアスユニットで、
この を得るまでの一連の処理を、フォワードプロパゲーションと呼ぶ。
入力層のアクティベーションから始めて、隠れ層を経て、出力層へ、というふうに、
計算を前方(フォワード)へ伝搬(プロパゲーション)させていることによる。
なぜこのニューラルネットワークのアイデアが効果的なのか。
次のようなニューラルネットワークについて考える。
下図のように、入力層の部分を隠してみる。
すると、このネットワークで行われる計算は単純なロジスティック関数になる。
ロジスティック回帰との違いは、特徴量として、 ではなく を使うという点。
は、それ自身が学習結果であり、 で定義されている。
によって多様な表現ができるので、特徴量xをそのまま使ったり、
xの組み合わせで作られた多項式の中からひとつを選ぶよりも、よりよい仮説を得られる。
Applications
Examples and Intuitions 1
ニューラルネットワークはパラメータの組み合わせによってAND・OR関数を表現可能。
ANDの例
とする
, , とすると、
となる
このネットワークの出力を表にすると以下のようになる
0 | 0 | |
0 | 1 | |
1 | 0 | |
1 | 1 |
ANDを表していることがわかる
ORの例
とする
, , とすると、
となる
このネットワークの出力を表にすると以下のようになる
0 | 0 | |
0 | 1 | |
1 | 0 | |
1 | 1 |
ORを表していることがわかる
Examples and Intuitions 2
他にも、NOTも表現可能。また、AND・OR・NOTを組み合わせてXNORを作れる。
NOT
入力としてバイアスユニットと[ tex:x _ 1] があるとする。
とする
, とすると、
となる
このネットワークの出力を表にすると以下のようになる
0 | |
1 |
NOTを表していることがわかる
XNOR
AND・(NOT A)AND(NOT B)・ORの3組のニューロンを作る
下図のように組み合わせる
真理値表は次のようになる
0 0 | 0 1 | 1 |
0 1 | 0 0 | 0 |
1 0 | 0 0 | 0 |
1 1 | 1 0 | 1 |
XNORを表していることがわかる
XNORは下図のようなプロットの決定境界を表現できる
これができると、次のような非線形な決定境界も表現できることになる
このように、ニューロンの組み合わせにより複雑で非線形な仮説を得ることができる
Multiclass Classification
ニューラルネットワークで多クラス分類をするには、出力層に複数のユニットをおく。
そして、各ユニットに、あるクラスがYesかNoかを判別させる
画像認識を例にすると、1つめのユニットは歩行者か否かを判別し、
2つめのユニットは車か否かを判別し...というような具合
各ユニットの出力はクラス数の次元のベクトルで、
例えば4クラス分類なら出力は
, , , のいずれかになる
これらは、ニューラルネットワークを使ってone vs allを再現しているような形になる