O'Reilly Japan - ゼロから作るDeep Learning、1度読んだだけでまだ理解できてない部分もあるが、とても良い本。
手書き数字認識ぐらいなら自分でも余裕でできるんじゃね?と思わせてくれる。

読書メモ

殴り書き。

  1. [読書メモ] ゼロから作るDeep Learning: まえがき - blog.tnantoka.com
  2. [読書メモ] ゼロから作るDeep Learning: 第1章 - blog.tnantoka.com
  3. [読書メモ] ゼロから作るDeep Learning: 第2章 - blog.tnantoka.com
  4. [読書メモ] ゼロから作るDeep Learning: 第3章 - blog.tnantoka.com
  5. [読書メモ] ゼロから作るDeep Learning: 第4章 - blog.tnantoka.com
  6. [読書メモ] ゼロから作るDeep Learning: 第5章 - blog.tnantoka.com
  7. [読書メモ] ゼロから作るDeep Learning: 第6章 - blog.tnantoka.com
  8. [読書メモ] ゼロから作るDeep Learning: 第7章 - blog.tnantoka.com
  9. [読書メモ] ゼロから作るDeep Learning: 第8章 - blog.tnantoka.com

ニューラルネットワークとDeep Learning

ここまでの理解。

たとえば、16ピクセルの1と2という画像内の数字を認識したい場合。(2クラス分類問題)
3層ニューラルネットワークを使うとする。

  • 入力層(第0層)は16×16で256個。
  • 隠れ層(第1層)は100個、隠れ層(第2層)は50個とか任意で。
  • 出力層(第3層)は1か2かなので2個。
  • 各ニューロン間の信号には重みが。
  • それぞれの層にはバイアスも。
  • 各ニューロンでは活性化関数で入力を変換。

訓練データをもとに、バイアスや重みの調整をひたすら繰り返して、いい感じになるものを探す。
テストデータでも良い精度が出ればOK(汎化)。出なければ過学習。過学習ってとても人間っぽい。

これのもっと層を深くしたものがDeep Learning。

結構泥臭い。コンピュータの性能向上によって実用できるようになった、というのはそういうことだったのか。

Rubyでやってみる

写経はいまいちテンションがあがらない。今Pythonを学習したいわけではないのである。

ちょうど Ruby + PyCallで機械学習をやってみた at Pydata Okinawa #23 - The paradigm shift という記事が。
PyCallの話題を以前耳にした時は直近機械学習をやる予定ではなかったのでスルーしてしまったが、今の僕にとっては大変ありがたい存在である。

というわけでやってみた。(関係ない話題も入ってますが)

  1. PyCallでNumPyを使う - blog.tnantoka.com
  2. PyCallでMatplotlibを使う - blog.tnantoka.com
  3. PycallとNumPyで3層ニューラルネットワーク - blog.tnantoka.com
  4. PyCallをDockerで - blog.tnantoka.com
  5. HerokuでPyCall(NumPy)とSinatraを動かす - blog.tnantoka.com
  6. RubyでMNISTのデータを読む - blog.tnantoka.com
  7. PyCallでMNISTを使った推論 - blog.tnantoka.com
  8. PyCallでMNISTの学習 - blog.tnantoka.com
  9. ゼロから作るDeep Learning: 第4章のgradientをRuby化 - blog.tnantoka.com
  10. PyCallでMNISTの実データを使った学習・推論 - blog.tnantoka.com
  11. PyCallで手書き数字認識のWebアプリ - blog.tnantoka.com
  12. PyCall-MNISTのリファクタリング(レイヤークラスを使用) - blog.tnantoka.com

Rubyで書くことでただの写経より内容を理解せねば感があってよかった。