A Day In The Life

とあるプログラマの備忘録

数学知識ほぼ0の人間が深層学習の勉強をはじめてみた

きっかけは Magenta プロジェクト

最近巷では機械学習や深層学習(ディープラーニング)などAI系の技術が流行っていますが自分は2-3ヶ月前まで全くと言っていいほど興味がありませんでした。機械学習とかって画像解析や翻訳で使う技術でそのうち頭のいい人がなんとかしてくれるんじゃないのくらいの認識でした。その認識が一変したのが Google Magenta プロジェクト の AI Duet by Yotam Mann - AI Experiments でした。自分も深層学習を使って自動作曲やりたいということで勉強を始めることにしました。これまで自分が勉強したことや読んだ本のことをメモがてらまとめてみます。

勉強をはじめたころのスペック

  • Pythonは使ったことがある、ただしnumpyは使ったことがない
  • 数学はほどんとわからない(または忘れた)、ゲームの開発をしていたので三角関数くらいはなんとか理解できるくらい
  • 機械学習と深層学習の違いがわからない
  • 昨今流行っているAIがゲームAIとどう違うのかわからない

自動作曲やるならニューラルネットワークを勉強するのがよさげ

軽くMagenta プロジェクトのことや「自動作曲+AI」みたいなキーワードで調べてみるとニューラルネットワークを理解すると色々できるようになるっぽいということがわかりました。

数学さっぱりだけどニューラルネットワークについて勉強したい

本屋さんでニューラルネットワークの本を探して見ましたがどれも最低限の数学的な知識が必要そうな雰囲気でした。自分は数学が苦手で高校生の頃まともに数学を勉強した記憶がほとんどない....これは敷居が高いどうしようとなりました。

ライブラリを使って学ぶかライブラリ無しで勉強するか

いろいろと調べているうちに TensorFlow と Chainer この2つのライブラリが人気らしいことがわかりました。ただこれらのライブラリのチュートリアル読んでも専門用語がわからなさすぎて使いこなせる気が全くしませんでした。なのでライブラリに頼らず1から自分で実装してみるのがよさそうとなりました。

数学が苦手でも読めるニューラルネットワーク本との出会い

数学が苦手な自分でも内容がわかりライブラリに頼らず1から実装を学べるそんなわがままに答えてくれる本なんてないと思っていたらなんとも自分にぴったりな本を見つけました。

数式はあるものの初心者にもわかるように丁寧に解説してくれている、ニューラルネットワークについての基本的な用語の解説もある、Pythonの実装例まである、知りたいことほとんど載ってるじゃないか...素晴らしすぎる。バイアスの説明が省略されていること以外は必要な知識がほぼ網羅されています。

もっと基本的なところから数学の勉強したい場合は

深層学習の本ではなく機械学習の本ですが、深層学習に比べて数式が簡単なので深層学習の本よんで数式が全く理解できないって場合にオススメです。

ものすごく基本的なところから説明してあってかつPythonの実装例もあるのでかなり理解しやすいです。

深層学習を使ってどんなことができるのか

覚えた用語

  • 入力層
  • かくれ層
  • 出力層
  • 重み
  • 誤差逆伝搬

学習って何?

誤差が最小になるような重みの組み合わせを見つけること

深層学習を理解する上で必要な知識

よく出てくる数学用語

スカラー、ベクトル、行列、テンソル

次元 名前 説明
0次元 スカラー 数値
1次元 ベクトル 配列
2次元 行列 2次元配列
3次元以上 テンソル 3次元配列以上

ただしベクトルには列ベクトルと行ベクトルがある、通常は列ベクトルだけ考えれば良い

ベクトルと行列関連の用語

実装してみる

Pythonの実装例を元にSwiftで実装してみました。 github.com 3層ニューラルネットだけでは物足りず、今はLSTMの実装に挑戦中です。

参考