FPGA開発日記

カテゴリ別記事インデックス https://msyksphinz.github.io/github_pages , English Version https://fpgadevdiary.hatenadiary.com/

「ITエンジニアのための機械学習理論入門」を買った

ミーハーなので、こういう本が出るとつい買ってしまう。。。

ITエンジニアのための機械学習理論入門

ITエンジニアのための機械学習理論入門

深層学習の本を前に買って、これ系の分析アルゴリズムをちょっと勉強し直したいなと思いいろいろと探していたのだった。

深層学習 (機械学習プロフェッショナルシリーズ)

深層学習 (機械学習プロフェッショナルシリーズ)

まずは、回帰分析の中でも最も基本的なアルゴリズム、最小二乗法についての章まで読み進めた。 最小二乗法はトレーニングセットが与えれらた中で、推定を行って、最も誤差の小さい関数を推定する方法だ。 本書で取り上げられていた例では、三角関数sin()をある程度ランダムに振ったトレーニングセットを9点ほど用意し、多項式で近似することを考えている。 この時、多項式の次数Mを0から9まで変化させて、誤差がどの程度になるかをチェックしている。

回帰分析のアルゴリズム自体は、学生のときに授業であったので覚えているのだが、Mを大きくしていくときに気をつけなければならないのは、「オーバーフィッティング」という、過剰にトレーニングセットに適用されてしまうせいで、汎用的な関数を推定できていないことがある点だ。 このことを考えて、サンプル点を「トレーニングセット」と「テストセット」に分け、トレーニングセットで学習した上でテストセットを実行し、テストセットとトレーニングセットがどの程度離れているかを確認するという方法が紹介されている。 言うなればこれは別に特別な方法でも何でもなく、サンプル点を全て用いて学習すると、そのサンプルセットのみに最適化されたものになってしまうため、過剰に学習することを抑える役割を持っている。

https://upload.wikimedia.org/wikipedia/commons/1/1f/Overfitting_svg.svg

Wikipediaにも良い画像が用意してあった。過剰に学習をさせると、トレーニングセットでは完璧に学習できているが、サンプルセットでは全く近似が出来ていない(誤差が大きい)ということになってしまう。 本書ではPythonで書いてあるが、勉強のためにはC++で書き直してみるのもおもしろそうかな。あるいは、GPGPUとかを使って高速化する方法も勉強してみるといいかもしれない。