こんにちは。rotarymarsです。
先日、僕たちの学校では文化祭があり、僕たちのロボットを展示している物理研究会に、たくさんの人が見に来てくださいました。
暑い中足を運んでくださり、ありがとうございます。

ちょうど、ロボットの展示をしている間、先日の記事で紹介した手書き数字認識を、一部の人に体験してもらいました。

自分で作成したテストケースも98%精度が出るようになったし、大丈夫だろう。

そう思って、文化祭で、いろいろな人に触ってみてもらいました。

しかし、恐ろしいことに、全く正しく認識してくれません。
内心不思議に思いながら、その原因を考えてみました。

文化祭が終わった後のお話

文化祭が終わった後、友達にも実際に使ってみてもらいました。
一人目の友達の場合、とくに難なく数字を認識してくれました。
しかし、もう一人別の友達に使ってみてもらったところ、なかなか正しく認識してくれませんでした。

そこで、考察の結果と呼ぶには浅はかですが、気づきました。

人によって字の特徴が異なる。

そこで、その友達はこれに興味を示してくれたので、各数字3枚ほど、計30枚ほどの学習用画像、各数字1枚のテスト画像を作ってくれました。

自分の手書き数字は120枚ほどあったので、友達の画像を僕の画像の40倍多く学習させて、モデルを作ってみました。

すると、僕の数字は特に変化なく、友達の数字は前よりは高い精度で認識するようになりました。

なぜ画像を増やすだけで精度が向上するのだろう

先週の記事の続きではありますが、今回の機械学習の概要を話したいと思います。
その前に、前回と同様、間違っていることがある可能性があります。
間違いは、気付き次第修正していくので、Emailで連絡してくださると助かります。

今回の機械学習のパソコンの中

パソコンの中

このように、パソコンの中では、丸が何層にもなっている状態で、機械学習が始まります。
今回は、絵の都合上、パラメーター(情報)を8個、クラスは2にしました。

例えば、次のようなシナリオを考えます。
貴方は、ある商品について、8個の数字(値段、耐久性、保証期間等)が与えられます。
商品の良し悪しは、この8個の数字だけで判断します。

8個の数字と、その商品の良し悪しが与えられます。。
それらの情報を元に、今度は機械だけで商品の良し悪しを判断できるものを作って下さい。

普通であれば、事前に与えられた数字を元に、人間が数字を見て、条件分岐をして、、、 というプログラムになると思います。

しかし、機械学習では、そのようなことをしなくても、自分で学習してくれます。

仕組みを見ていきましょう。

8個の数字は、それぞれ一番左にある丸に一つの数字が一つずつ与えられます。

その後、その丸で、その数字を元に、何らかの数式によって得られた数字を、次の線で繋がれている丸に渡します。

最終的に、最後の2つの丸で、どちらが大きい数字かによってどれくらいの確率で良い、あるいは悪いか判定する。

このような感じになっています。

機械学習では、この「何らかの数字」を「どれくらい」次の丸に渡すと、最後の丸に正しく行き着くか、というのをランダムに操作し続けることで、正しく判定できるものを作っています。

手書き数字に戻ろう

手書き数字データは、縦横28pxの計784個の丸が左側にあり、最終的に一番右側の層が10個になるようになっています。

僕の数字にもし特徴があれば、その数字を元に機械学習が進んでしまい、他の人の数字ではうまく動かないことになります。

そういう意味でも、単に学習するデータが多いだけではなく、いろいろな幅のあるデータ集めが必要になっていきます。

ロボットでの今後の活かし方

僕たちの出場するレスキューでは、レスキューゾーンと呼ばれる、ボールを拾うゾーンがあります。

このゾーン内に存在するボールを、機械学習によって、カメラで認識させてボールの位置を認識できればと思っています。