機械学習入門: ニューラルネットワークの体験
(機械学習入門に戻る!)
機械学習には, 既に体験したサポートベクターマシンやニューラルネットワーク, さらにはランダムフォレストなど, 様々な数学的手法がある。その中でも, 近年急速に普及しているのは「ディープラーニング」という手法である。これはニューラルネットワークを発展させた手法である。そこで, 今後しばらくは, ディープラーニングを学ぶための基礎として, ニューラルネットワークについて学ぶ。テキストは, 「Raspberry Piではじめる機械学習 第5章, 第6章」である。
ではまず, 前回同様に, カレントディレクトリが, ウォームアップで用意したwork_Raspiであることを確認し, pythonシェル (ipython3)に入ること。
以下, pythonシェルのプロンプトを"In [ ]: "で表す(従って, それらを打つ必要はない)。また, [ ]の中の値は参照のためのものであり, 君が実際打つ時に表示される値と異なっていても問題ない。
1. scikit-learnでニューラルネットワークを実装する
ニューラルネットワークは多くの数学的なアイデア(アルゴリズム)で構成されている。それを実際の計算機にやらせるには, それを計算機プログラムとして書き表すこと(実装)が必要である。ニューラルネットワークをゼロから実装するのは大変であり(それをやろうというのが例の赤い本(笑)), そこで頭の良い人が, 世の中のみんなにかわって実装し, 無料で提供してくれている。そのひとつが, scikit-learnの中にある, MLPClassifierというクラスである。我々は, MLPClassifierを使うだけで, たった1行でニューラルネットワークを実装できる(ありがたい!!)。しかし, ニューラルネットワークをどのような構造で作るかは, 我々自身が決定し, 「パラメータ」としてMLPClassifierに与えねばならない。
ml-05-01-2feat3class-nn.pyにおいて, 分類器の設定部分:
clf = MLPClassifier(hidden_layer_sizes=(100, ), max_iter=10000, tol=0.00001, random_state=1)
を, 以下の4とおりのケースにそれぞれに変えて試してみよう:
a) clf = MLPClassifier(hidden_layer_sizes=(100, ), max_iter=10000, tol=-1, random_state=1) b) clf = MLPClassifier(hidden_layer_sizes=(100, ), max_iter=50000, tol=0.00001, random_state=1) c) clf = MLPClassifier(hidden_layer_sizes=(5, ), max_iter=10000, tol=0.00001, random_state=1) d) clf = MLPClassifier(hidden_layer_sizes=(5, 20), max_iter=10000, tol=0.00001, random_state=1)
課題1-1: ここで変更したパラメータはそれぞれ何を意味しており, それぞれの変更はニューラルネットをどう変えたか述べよ。
課題1-2: それぞれのケースで実行時間を互いに比較せよ。長いもの・短いものについて, なぜそうなったか考察せよ。
課題1-3: それぞれのケースの実行結果を比較し, その違いが生じた理由を考察せよ。
scikit-learnでは, ニューラルネットワークはMLPClassifierというクラスを使えばこのように簡単・柔軟に定義・構築できる。その詳細を見てみよう。
In [ ]: help(MLPClassifier)
課題1-4: その結果から, 活性化関数に相当するパラメータに関する記述を抜き出せ。ヒント: 「活性化」は英語で何という? 化学でよく出てくるよね!
課題1-5: これまではどの活性化関数を使っていたことになるか? ヒント
2. ニューラルネットワークの構造を変えてみる
次に, 別のプログラムml-05-02-4feat3class-nn.pyにおいて,
e) 中間層を5ニューロン1層 f) 中間層を3ニューロン1層 g) 中間層を3ニューロン2層
のそれぞれについて変えてみよう。どこをどう変えればよいか, 考えよう!
課題2-1: eからgまでのそれぞれのケースについて, 結果はどう違うか?
課題2-2: 活性化関数をシグモイド関数に変えて, 上記のe, f, gを試してみよ。どうなるか? ヒント: helpをしっかり読もう。シグモイドとは違う名前で呼ばれているかもしれないので, よく考えよう。「ライブ講義...」の「シグモイド関数」の説明も役に立つかも。
Keyword(s):
References:[機械学習入門] [機械学習入門: レポート課題4]