ココロミにきみ

本と体とプログラミング

本 機械学習と深層学習 Pythonによるシミュレーション

 「機械学習と深層学習 Pythonによるシミュレーション」

機械学習のライブラリを使わずに、シンプルなモデルを実際に作って学ぶ本。機械学習系を根本的に理解するのに最適。この本で概念の基本形を身につけて、実地で理論を自分で応用するのが黄金パターン。実践の時に最初は時間がかかるだろうけど、応用力が高くなって将来の発想を支える力になると思う。

いままで何冊か機械学習の本を読んできたけど、著者の説明力の高さと、構造のシンプルさでとても分かりやすい。プログラミングに慣れてない人には、プログラミングの構造を作る手順の練習と、関数型プログラミングの練習にもなる。

機械学習と深層学習 Pythonによるシミュレーション

機械学習と深層学習 Pythonによるシミュレーション

 

 内容はテーマごとの章立てになっていて、章ごとのテーマの実装構造は自分の頭で考えて理解する必要はある。

例えば、迷路の「強化学習」では、それぞれの分岐点で正しい経路の選択に「重み」をどう与えるか?が要になる。それを実装した式の働きの意味を、解き明かす努力ぐらいは求められる。高3の数学の応用問題で回答をみて理解するレベル。 

* * *

無駄な説明が少ないため、どんどん読み進めて実際にプログラムを打ってみて、変数をいじっていればたいてい理解できる。また同時にわざと?説明していない部分が ” 宿題 ” にもなる。

個人的に気になったのは「遺伝的アルゴリズムで、一旦適応度が最大になったあと少し適応度が下がったところに収束する」というシミューレート結果。その理由の説明は本書には一切ないから、自分で考えるか、流すかは任せられている。

変数をいじった結果、要素数が少ないなかでの遺伝的アルゴリズムは上記のようなプロセスをたどることが分かった。要素が増えるとlog関数のような純増グラフになる。これは実際の世界でも同じなんだろうか?

* * *

この本は機械学習のスタンダード教科書と呼んでもいいんじゃないかと思う。ちょっと他に類を見ないクオリティなので、多くのプログラマーにオススメ。

 

<<追記>>

実際に使ってる人へ

p.97 123行から始まる selecting()関数内の

(134行〜)

for c in range(POOLSIZE * 2):

    roulette[c] = evalfit(ngpool[c])

   # 適応度の合計値を計算

   totalfitness += roulette[c]

は131行目からの「for i in range(POOLSIZE ): 」のループの外(前)に出してしまっていいと思うんだけど、どうなんだろう。for ループのi に何も影響受けないし。

実使用時に評価関数が複雑になってくると、for i ループで毎回同じ値を出してくるこのfor c ループの処理の遅さがボトルネックの一つになってくるし・・・。