ニューラルネットワーク:今日は花を分類…明日はスカイネット

Table of Contents

ニューラルネットワーク:今日は花を分類…明日はスカイネット

機械学習の代表格といえば、ニューラルネットワークです。このトピックについては以前実践的な紹介をしましたが、今回は少しアプローチを変えて、ニューラルネットワークの仕組み、つまりその背景について解説したいと思います。

これを実証するために、ニューラル ネットを使用してさまざまな種類のアイリスの花を分類する方法を示します (このデータ セットは、本質的に機械学習の「Hello World」です)。

ニューラルネットワークの重要な点の一つは、一般的な機械学習と同様に、ニューラルネットワーク自身でルールを学習することです。つまり、帰納法を実行しているのです。通常、問題を解くためのコンピュータプログラムを書く際、私たち(人間)がルールを導き出します。例えば、植物の種類を判別したい場合、「花びらの長さが3.5mmより長いかどうか」といった結果を生み出す質問をします。

花びらの長さ 花びらの幅
1.4 0.2 セトサ
4.7 1.4 ヴェルシカラー
1.4 0.2 セトサ
4.5 1.5 ヴェルシカラー
1.3 0.2 セトサ
4.9 1.5 ヴェルシカラー
1.5 0.2 セトサ
4 1.3 ヴェルシカラー

しかし、機械学習全般、特にニューラルネットワークにおいては、ルールに基づいてプログラムを書くのではなく、ニューラルネットワークを使ってルールを解釈し、それを適用します。つまり、ニューラルネットワークははるかに汎用性の高いツールなのです。

まず、セトサとベルシカラーという2種類のアヤメを例に挙げます。4つのニューロンからなる非常にシンプルなニューラルネットワークを設計します。ニューロンのうち2つはデータ(入力ニューロン)を受け取り、残りの2つは答え(出力ニューロン)を出力するように設計されています。

図では、データは左から右へ流れ、両方の入力ニューロンは両方の出力ニューロンに接続されています。出力ニューロンには、受け取った値を「合計」するように設定しています。上の出力ニューロンに大きな数値が現れる場合はセトサ、下のニューロンに大きな数値が現れる場合はバーシカラーを表すと、恣意的に決めています。いいでしょう。しかし、ニューラルネットワークはどのようにしてこのようなデータの出力方法を学習できるのでしょうか?

まず、ニューラルネットワークを訓練する必要があります。つまり、測定値だけでなく、答えも提示するということです。訓練が完了したら、種は分かっているもののニューラルネットワークには教えないデータでテストできます。ニューラルネットワークが返す答えを、既に知っている情報と照らし合わせるだけです。十分な精度が得られたと判断できたら、実際に未知の種のアヤメを分類する作業に使うことができます。

さあ出発です...

表の最初の値セット(setosaを参照していることは分かっています)を取り出し、ネットワークに入力します。データは各接続に沿って流れます。つまり、データを処理すると、各出力ニューロンは同じ値を受信して​​出力してしまいますが、これは望ましい結果ではありません。

ニューラルネットワーク1

しかし、これは簡単に修正できます。各接続に数値の重みを追加し、その接続を通過する値にその重みを掛け合わせるだけです。データの最初の実行では、これらの重みはランダムな値に設定されるため、出力が低いニューロンの方が高い値を持つ可能性は十分にあります。

ニューラルネットワーク2

しかし、重みはニューラルネットワークによって制御されているので、問題ありません。ニューラルネットワークは出力を「見て」、重みを微調整し、再度試行します。そして、さらに繰り返します。上位ニューロンの出力値がより高くなるまで、これを繰り返します。次に、次の値セット(versicolorから取得)を入力し、再び重みを調整します。今度は、下位出力ニューロンで高い出力が生成されるように試みます。そして、最適な重み値が見つかるまで、すべてのデータに対して異なる重みセットで試行を繰り返します。

これがニューラルネットワークの本質的な仕組みです。しかし、実際には、このニューラルネットワークが優れた分類器を生み出す可能性は非常に低く、その主な理由は2つあります。それは、あまりにも単純すぎることと、最適化されていないことです。

強化しましょう

最初の問題を解決するために、データ列(と別のアヤメの種)とニューロンを追加します。今回は入力ニューロンを4つ(これもデータ列ごとに1つ)と出力ニューロンを3つ(種ごとに1つ)追加します。また、入力ニューロンと出力ニューロンの間に、「隠れニューロン」と呼ばれる列を追加します。ここでは1つの層を追加しましたが、好きなだけ追加できます。各隠れニューロンは、層内の左右のすべてのニューロンに接続されています。各接続には異なる重みが付けられているため、データが左から右へ流れ始めると、より多くの経路が存在します。各経路には異なる重みが付けられ、重みによって重みが変化します。経路の数が多いため、重みの組み合わせによって種を識別するための正しい出力を生成できる可能性が高くなります。

ニューラルネットワーク3

それは良いニュースです。悪いニュースは、これは大きな改善ではあるものの、まだ実用的ではないということです。もちろん、さらに改善を加えて機能させることは可能ですが、まずはこれらの改善の重要性を理解するために、背景を少し説明しておくと役立つかもしれません。ニューラルネットワークは1940年代に提案されましたが、実際に機能させるのに非常に苦労しました。

実際、2010年までにMITはニューラルネットワークを教育カリキュラムから削除することを検討していました。MITのパトリック・ウィンストン教授は、ニューラルネットワークの教育を継続することに決めた数少ない説得力のある理由の一つは、そうすることで学生がニューラルネットワークを独自に考え、それを再発明する時間を無駄にすることがないようにするためだと述べています。

しかし、2012年、ジェフリー・ヒントン(トロント大学名誉コンピュータサイエンス教授、Googleエンジニアリングフェロー、そして微分方程式の父ジョージ・ブールの玄孫)がついにすべての実用的な問題を解明しました。彼は、競合他社を圧倒するニューラルネットを開発しました。それ以来、彼らは機械学習の世界に旋風を巻き起こしています。ヒントンと彼のチームは傑出した成果を上げましたが、ヒントンもまた巨人たちの肩の上に立っていました。そこで、ニューラルネットを機能させるために追加する必要がある部分を簡単にお見せしたいと思います。

一つは、データを正規化する必要があることです。例えば、萼片は花弁よりも長いことに気づくでしょう。大きな数値は小さな数値を圧倒する傾向があるため、データを「正規化」します。つまり、すべてのデータを二つの限界値(通常は0と1)の間の値の集合に変換します。

重み、閾値、バイアス

これは非常に簡単に、各数値セットに異なるスケーリング係数を掛け合わせることで実現できますが、より複雑な方法でも実現できます。重みも正規化します。通常は、既に説明したように、ニューロンに到達した時点で値を合計します(ただし、他の集計方法を選択することもできます)。その後、結果を「しきい値」に渡します。これは通常、スカラー関数であり、ニューロンからの最終出力が0と1の間の値になるように再度スケーリングされるだけです。最後に、「バイアス」ニューロンと呼ばれるものを追加すると効果的です。これは基本的にシステムに数値を注入するものであり、これらの数値も重みによって変更されます。

ニューラルネットワーク4

ご覧のとおり、ニューラルネットワーク全体における値のスケーリングは非常に重要ですが、スケーリングには様々な方法があります。効果的なニューラルネットワークを設計する上で中核となるのは、ニューロンの数と分布を選択し、適切なスケーリングメカニズムを選択することです。

これらの変更にもかかわらず、ニューラルネットの基本原理は全く同じであることに注意してください。入力ニューロンにデータを入力すると、データは隠れニューロンを経由して出力に流れ込みます。出力ニューロンから出力されるデータの値は、重みによって変化します。最初は重みはランダムですが、ニューラルネットはデータを何度も自身に通し、重みを調整することで、各セトサ種では出力値が同じになり、他の種では異なる値になるようにします。

15 分で機械学習を学びたいですか? ここから始めましょう...

続きを読む

うまく機能しそうな重みのセットができたら、テスト用に取っておいたデータを取り込んでいきます。このデータについては、setosa などの種類は分かっていますが、ニューラルネットワークには伝えず、これまでに見たことのないデータでどれだけ効果的かテストします。効果的であることが証明されれば、未知の種のアヤメの分類に活用できるようになります。

上記のような複雑さを加える必要がある理由はいくつかありますが、最も重要なのは重みの数に関する問題を克服するためです。元のネットワークでは重みは4つしかありませんでした。各重みに100通りの値を設定できると仮定すると、わずか4つのニューロンで1億通りの重みの組み合わせを試すことができます。

しかし、4つのニューロンだけでは十分ではありません。さらにニューロンを追加する必要があります。そうすると、重み値の可能な組み合わせの数は急速に増加し、総当たり法では計算不可能になります。1974年になって初めて、ハーバード大学で働いていたポール・ワーボスがバックプロパゲーションというアイデアを思いつきました。これは重みを学習するためのはるかに効率的なアルゴリズムであり、計算の山の下にトンネルを掘り、現実的な時間枠で問題を解くことを可能にします。®

Discover More