きしだのはてな このページをアンテナに追加 RSSフィード

2014-12-08(月) パーセプトロンからSVMでの画像認識まで、機械学習エントリのまとめ

[]パーセプトロンからSVMでの画像認識まで、機械学習エントリのまとめ 10:05 パーセプトロンからSVMでの画像認識まで、機械学習エントリのまとめを含むブックマーク

なんかJJUGナイトセミナーで機械学習をやるっぽくて、定員100人が40人キャンセル待ちとかになってますね。

【東京】JJUG ナイト・セミナー「機械学習・自然言語処理特集!」12/17(水)開催 - 日本Javaユーザーグループ | Doorkeeper

ということで、予習用だか復習(になるかわかんないけど)用に、2008年になんか機械学習をやってたときのエントリをまとめてみます。


今でこそ機械学習はなんかもりあがってるけど、2008年にぼくがやってたとき「ところで機械学習やってなんになるの?」ってよく言われてました。ぼくも「いや、なんかそこに機械学習ってものがあるから実装してる」みたいな答えをしてた気がします。特に目的はありませんでした。

たまたま サポートベクターマシン入門 という本を見かけて、なんか実装してみたくなっただけです。

変な力がありあまってたっぽい。


機械学習ことはじめ

まずは、機械学習ってなんだろう、ってところから始めてます。

それで、わけもわからずパーセプトロンパターン認識の実装をしてみてます。

パーセプトロンで手書き数字認識(失敗) - きしだのはてな

バックプロパゲーション - きしだのはてな

基本のNearestNeighbors法(NN法)でパターン認識 - きしだのはてな


機械学習の学習

このあたりから、基本から勉強する感じになってますね。

NN法っていいよね - きしだのはてな

3-NN法 - きしだのはてな

パーセプトロンってなんだろう? - きしだのはてな

パーセプトロンで非線形分離するには - きしだのはてな

バックプロパゲーションでニューラルネットの学習 - きしだのはてな


サポートベクターマシン

で、なんとなく機械学習のコンセプトがわかって、数式にも慣れてきたので、サポートベクターマシンの実装を始めています。

線形サポートベクターマシン失敗 - きしだのはてな

非線形サポートベクターマシン - きしだのはてな

ソフトマージンサポートベクターマシン - きしだのはてな

サポートベクターマシンの本 - きしだのはてな


SMOアルゴリズムの実装

とりあえずサポートベクターマシンというのが何かわかって、実際に使える程度の速さで学習ができるようSMOというアルゴリズムを実装しています。

SVMの学習用アルゴリズムSMOを実装してみる - きしだのはてな

SMOの収束速い! - きしだのはてな

ところでサポートベクターマシンって何なの? - きしだのはてな

ガウシアンカーネルのパラメータを自動的に求めてみる - きしだのはてな


サポートベクターマシンの応用

SMOが実装できたので、それを使ってちょっとしたサンプルを作ってます。

「おはよう」とか今起きたっぽい発言に対して「おはよう」と答えるbotを想定。

サポートベクターマシンであいさつbotを作るためのカーネル関数 - きしだのはてな

あいさつbotで2次の多項式カーネルを試してみる。 - きしだのはてな

改めて2次多項式カーネルであいさつbotをやってみる - きしだのはてな


画像処理

CCVというアルゴリズムをaudioswitchさんが紹介されていたので、実装してみました。その紹介エントリはもう見れなくなっててちょっと残念です。

また、そうやって実装したCCVを使って画像検索っぽいものやビール画像判定っぽいものを作ってます。

まあ、この判定はうまくいったところで画面キャプチャしてるし、データが手持ちのものだけだったので、実用ではないですけど。

Color Coherence VectorをJavaで実装してみた - きしだのはてな

Color Coherence Vectorで画像検索を作ってみた - きしだのはてな

画像同士の距離がとれたら近い画像マップができるよね - きしだのはてな

ビール画像判定プログラムできたよ! - きしだのはてな


その後の機械学習

ところで、この時期は結構サポートベクターマシンが期待されてたのですけど、まずデータが多くなると学習にすごく時間がかかるのと、アルゴリズム的に並列化できないのでその時間が短縮できないというのがあって、大規模なデータでは使えないということになったんじゃないかと思います。

また、学習時点でデータがそろってないといけないので、データが徐々に増えるような状況には対応できず、用途にあいにくいというのもある気がします。


そこで今は、バックプロパゲーションを賢く多段にしたような感じのディープラーニングというのが流行ってて、ネコを認識したり画像の説明したりすごいことをやってます。

しかも並列実行やりやすいし、データが徐々に増えていくのにも対応しやすいし、現状の用途にとてもあってます。

なので、これからはディープラーニングを勉強したほうがいいと思うのですが、Twitterに「ディープラーニングのいい入門書ないかな」みたいなこと書いたら、3秒くらいであんちべさんが「ない」と返事してくださいました。ということは、ないんでしょう。

ディープラーニングの概要は、この資料がわかりやすいし「興味あったけど調べるの面倒くさくて諦めた人向け」ということでピッタリです。

Deep learning

この和訳プロジェクトに期待したり貢献したりするとよさそうです。

DeepLearning - ニューラルネットワークと深層学習(和訳) - Qiita


機械学習自体の勉強としては、このあたりが入門にいいですかね。

フリーソフトではじめる機械学習入門

フリーソフトではじめる機械学習入門

ほかにも、いい本がいろいろ出てると思います。


まとめ

というか、これぼく理解不能なんだけど。

なんでこの時期こんなエントリ書けてるか、こんなコード書けてるかまったく意味不明です。いま説明を求められても困ります。

変なもん食べてたんだろうか。そういえばこのころからベルギービールとか飲みだしてるな。

この時期はまだTwitterが広まってなくてコメントが生きているので、そこでいろいろ教えてもらってるのも役に立ってますね。いまだとすぐにガチの人に取り囲まれて萎えてたかもしれません。

ひとつわかるのは、なんか仕事せずにやってるな、ってことですね。

トラックバック - http://d.hatena.ne.jp/nowokay/20141208