機械学習についての勉強 3日目
3日目はニューラルネットワークの構築例について学んだ
前日に学んだシグモイド関数を利用し、ニューラルネットワークで
実例を使った分類を行う
学んだ内容
- 神経細胞の構造(複数のニューロンが軸索を通じて樹状突起に入力、ネットワークを形成する)
- ニューラルネットワークの概要(入力、出力があり入力層、中間層、出力層に分かれている)
- 単一のニューロンについて(複数の入力と単一の出力があり、入力×重み + バイアス×重み を出力に変換する関数で構成されている)
- ニューラルネットワークをPythonで段階的に構築
ニューラルネットワークの段階的な構築
段階は以下の流れで進んだ
- ニューロンへの入力
- ニューロンからの出力
- 出力に対しシグモイド関数を導入(実用例があるとさらに(なんとなく)シグモイド関数について理解が深まった気がした)
- 重みの概念の導入
- 外部データの導入/表示(今回は東京と神奈川の実データ(動画中で説明はなかったが、おそらく市区町村の緯度経度)を利用して県境を設定(分類)する)
- バイアスの導入
- ニューラルネットワークの構築
各段階で動画を止めつつ、なぜ動画中のプログラムとなるのかを考えながら学んだ
途中変に躓いたのはPythonにおけるselfという引数の考え方
以下が参考になった(Javaで言うthisね…)
Pythonではメソッドが最低1つの引数を持っている、その最初の引数をselfという名前にする慣例らしい
まぁそんなもんかと納得する
今回構築したニューラルネットワークは教師なし学習のもので、教師なし学習とは出力値と教師となる値との誤差がニューラルネットワークに反映されないものを指す
確かに出力値を出したら終わりになっていたので、これが教師ありになると誤差の計算やニューロンに対する重みに反映したりするんだろう、きっと
所感
なんだか突然難しくなったようにも感じたが、手を動かして結果がグラフで出力されるとプログラムの内容が理解できた
プログラムの内容は理解できたものの、機械学習について学べているかは怪しい
なぜニューロンにシグモイド関数を使うのか、重みの値をどのように設定するのか(今回の東京神奈川の県境での分類を、どのように重みを調整するとよいのか、等)、中間層の層をいくつにするのか、などなど
こういった内容は入門編でのこの講座では扱わないのかも
まずは機械学習をPythonで実現すると、の雰囲気を掴むことが目的なのかもしれない
明日は教師ありモデルをやりそうな目次