2.単層ニューラルネットワーク

前回は雑談をして終わってしまいました。前回を見ていない人は見なくて良いです。特に役に立つことは書いていません。それでは早速機械学習についてノートを書いていきたいと思います。まずはじめに言葉の定義ですが、

  • 機械学習:人間がルールを記述しなくても、データを与えるだけで自動的にできる学習
  • ニューラルネットワーク:人間の脳内回路を参考にしたモデル
  • ディープラーニング(深層学習):多層ニューラルネットワークを使用した機械学習
  • 人工知能:「知能」の定義がわからないので使わない。知能って言葉は使うけど。

という感じでやっていこうかと思います。

機械学習の大体の流れを話しますと、

  1. 空っぽの行列(重み)を用意する。
  2. 教師データ(インプット)と正解を教える。
  3. 教師データに対して、正解を再現するように重みの値を更新していく。

という流れになります。なるほどよくわかりませんね。簡単なモデルから始めましょう。

一番初めですので、最も単純な単層ニューラルネットワークについて学んでいきたいと思います。単層ニューラルネットワークのインプットが2つ、出力は1か0という単純なモデルです。結構理解しやすいモデルですが、このモデルで終わりではありません。このモデルを基準にして、さらに複雑になっていきます。このモデルを理解できるだけで満足することなく、さらにどうすればもっと複雑なこと(画像認識や音声認識、自然言語解析)を学習できるようになるのか考えて見てください。

わかりやすいのでモデルを図で表します。下の図を見てください。

超シンプルですね。これが人間の思考回路の単純化したモデルです。ここでは入力と出力は1か0としましょう。簡単なので。じゃあいつ出力が1になるのかというと、

となるときです。

つまり、左辺の値が閾値θ以上の時、ニューロンが発火する(すなわち出力は1)。閾値θを下回ればニューロンは発火せず(すなわち出力は0)としましょう。

機械学習というのは定数の最適化です。ここで定数とはなんのことでしょうか?入力と出力は与えられるデータによって随時、変わっていきます。つまり機械的に定数を決めるのは重みwと閾値θです。

さて、ではどのように重みと閾値を決めていくのかという前に、なぜ、重みが必要なのかということを考えて見ましょう。

この単純なモデルではさておき、複雑な画像認識、例えばラーメンの画像を見て豚骨なのか豚骨でないのか判断させたいとします。入力は画像をベクトルに直したものですが、全ての要素が同じくらい重要なのでしょうか?

それは違います。重要なのはスープの色などであって、そのラーメンの器であったり、ラーメンの画像に写り込んでいる半チャーハンなどは、豚骨ラーメンかどうか判断するのには関係ないでしょう。情報が全て同じくらい価値があるというわけではないので、情報の価値に重みをつけましょう、ということです。話が脱線してしまいましたね。

この重みと閾値を更新する方法として、またしても簡単な誤り訂正学習というのがあります。このモデルを使って、実際に機械学習というのは何をやっているのかというのを次回やっていきたいと思います。もちろんこれは単純なモデルですから、実際はもっと複雑なことをやっていますので、それはおいおい学んでいきたいと思います。

次回は3. 誤り訂正学習