Help us understand the problem. What is going on with this article?

Pythonでディープラーニングを実装した話

Pythonでディープラーニングを実装した話

このドキュメントを書く理由

  • 個人的な興味から簡単なディープラーニングを実装しました。入力データは、3 * 4 マスで数字の0か1のどちらかを表現するという本当に小さなものです。
  • 実用上ではディープラーニングを自分で実装する必要などないでしょう。チュートリアルのしっかりしてるTensorflowなどを使えば問題ないはずです。しかし私はどうしてもディープラーニングの中身を理解したくて、そのためにPythonで実装しました。
  • 本来であれば実装が済み、動くことが確認したところでこの作業は終わりになります。しかしながら私は自分がそういうことをしたのだ! ということをどこかに残したくて(誰かに知ってほしくて)この記事を書くことにした次第です。

得られたもの

  • 自分でディープラーニングを実装してみて得られたものは以下だと思います。

  • ディープラーニングの基本的な仕組みは難しくない! という実感。

    • ディープラーニングは、行列の計算と偏微分から成り立っています。つまり、大学初年度に習うレベルの知識でしかないのです。実際に実装してみると、そのことがよくわかります。
    • もちろんディープラーニングを実用に耐えるものにするには計算上の様々な工夫が必要ですし、あくまで基本的なものはそう難しいものではない、ということです。
  • 行列や微分に対する苦手意識が減ったこと

    • ディープラーニングの本を読むと、行列や微分の計算が必ず出てきます。これまで私は本にそういった内容が出てくるだけで身構えてしまうところがありました。また数式が表現することを実装レベルで理解しているとは、これまで言えない状態でした。
    • そんな私も行列の計算や微分を自分の手で行い、Python(numpy)を使って実装することができるようになりました。
  • Tensorflowなどのライブラリを使う際の自信になる

    • 実務でディープラーニングを使うとなると、Tensorflowなどのライブラリを使うことになると思います。このとき「中身を知っている」という感覚があるのとないのとでは、心理的に大きく違うと思います。簡単なものでも自分で実装した経験があれば、自身を持ってチュートリアルに取りかかれるはずです。わからない設定が出てきても「調べればわかるだろう」と思えます。

参考文献

  1. ゼロから作るDeep Learning

    • 基本の一冊かな、と思います。
    • ただ筆者の数学知識が微妙なのかひどいレベルの誤植があります。また誤差逆伝播法の説明も合成関数の微分の説明がなく不十分です。
  2. ディープラーニングがわかる数学入門

    • ディープラーニングの基本的な仕組みをコンパクトにまとめている良書です。元教師の方が書かれただけあって、内容は正確で、また前提知識なしに読めます。
    • 参考文献1で、包括的な内容を、こちらで基本的な部分を理解したという感じになります。

どのようにやったか?

  • 私がディープラーニングを実装するまでの経緯です。
  1. 参考文献1を読み込む
    • 時間があったので熟読しました。
    • ただ誤差逆伝播法の計算の説明が中途半端で、その部分を理解できずモヤモヤすることになりました。
  2. 電車の中で参考文献2を読む
    • この本は参考文献1に比べて数学的な説明が正しく厳密で、これを読むことで誤差逆伝播法を理解できるようになりました。
    • この本では、Excelによるディープラーニングの実装方法が説明されています。
  3. しばらく放置
    • しばらく他の本を読んだりして、手を付けませんでした。
  4. ディープラーニングの中身を理解したい! そのために実装しよう、と決意。
    • Tensorflowのチュートリアルに着手した際、この際だから基本的なところから復習しようと思い、ちゃんと理解するために自分で実装することにしました。
  5. 参考文献2を読み直す
    • 参考文献2を読み直し、数式を整理したりしました。
    • 参考文献2には行列の演算で実装する方法が記載されていません。このあたりは参考文献1を読んだ際の記憶をたどりながら自分で考えました。
  6. Pythonで実装
    • 間違いを繰り返しながらも、最後にはできました。

苦労したこと

  • 苦労したのは誤差逆伝播法です。
  • 合成関数の微分や偏微分、行列の計算を復習し、実装レベルで理解できるようになるまで大変でした。

実装したもの

  • 実装したものは一応githubに上がっています。
  • とりあえず動くというレベルのものです。ほかに学びたいことがあるので、今のところ完成度を上げる予定はないです。
  • 簡単なディープラーニングはこの程度のコードで書けるんだ~というくらいは参考にはなると思います。

終わりに

  • 以上。この記事を読んで頂き誠にありがとうございます。
Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away