理系大学生が暇でディープラーニングの勉強始めてみた

# はじめに

### 筆者のスペック
理系大学生というタイトルを付けましたが，こういう記事に限って「実は情報系の学生です」みたいなオチはあるあるだと思います．そうすると情報系ではない大学生にとっては希望を持てない記事になるので僕の素性を初めに明かしておきます．僕は理学部物理学科所属で大学2年生です．ものづくり系のサークルに入っているので，プログラミング(Python)はかじった程度の実力ですが，**ディープラーニングに関しては全くの初学者**です．

そんな僕が春休みに暇なのでディープラーニングの勉強を初めました．正直ディープラーニングは情報系の分野だけでなく，他の分野でも将来的には避けては通れない技術だと思います．後で勉強することになるなら，暇だし今やるかということで勉強を開始しました．執筆時点でも勉強を開始して2週間程度です．なので未だに初学者の域にいますが，この記事では**初学者が2週間勉強するとどの程度になるか**をお伝えできればなと思っています．

### 対象
この記事の対象者は，ディープラーニングの勉強をしたいけどなかなか最初の一歩を踏み出せていない人です．この記事は僕のリアルな体験談なので，勉強を計画していく上での参考にはなると思います．既にディープラーニングを勉強し開発をしている人は，赤ちゃんの成長日誌のようなものだと思って娯楽として読んでください．

ちなみにですが，これは僕の初めての投稿です．正直あまり勝手がわかっていないのですが，そこはご理解ください．

# 1日目
まずはネットで情報収集ですね．Qiitaでも探しましたがそもそもディープラーニングにお強い方の情報が多いので，そこらへんを見分けながら探しました．大体初学者は本を求める傾向があると思うので，「ディープラーニング 本 おすすめ」とかでググれば簡単に情報は手に入ります．どうやら「**ゼロから作る Deep Learning**」という本が初学者にはおすすめらしかったので，とりあえずAmazonで購入しました．

ついでにどのようなディープラーニングのフレームワークがあり，どれがメジャーなのかをGoogleさんに聞いてみました．メジャーなものはネットや本で情報がすぐ手に入りますからね．メジャーかどうかを調べるのも重要です．

#2日目~7日目
さっそく購入した「ゼロから作る Deep Learning」を読み始めました．全8章の構成なので，1日1章で勉強すれば8日で終わりますね．目次は以下のとおりです[^1]．

|   章   |     タイトル     |   
|:------:|:--------------:|
|1|Python入門|
|2|パーセプトロン|
|3|ニューラルネットワーク|
|4|ニューラルネットワークの学習|
|5|誤差逆伝播法|
|6|学習に関するテクニック|
|7|畳み込みニューラルネットワーク|
|8|ディープラーニング|

僕の場合は1章は知っていたので飛ばしました．2章，3章を合わせて1日で読んで，ほかは1章ずつ読みました．計6日で読んだ感じですね．コードはまずは自分でどう書くか考えてみて，3分くらい思いつかなかったら写経しました．内容はとてもわかりやすかったです．題名通りゼロからニューラルネットワークを作るもので，ライブラリは基本的には使わないで実装する構成です．ただし，途中著者の書いたコードをインポートするように促されることがあります．納得がいかない人はコードは公開されているのでそれを見ればいいです．それにしてもニューラルネットワークが思っていたより単純だったのが少し驚きでした．

この本で**ニューラルネットワーク内の処理のフロー**をおおまかに理解できたかなと思います．個人的な見解ですが，なにかに入門する際には内容を1つ1つ深堀りするよりは，全体像を捉えるほうが頭に残ると思います．この本は程よく深堀りしないので内容がスイスイ入ってきました．

物理学科の学生なだけあって僕は数式は大歓迎派です．しかし本書の数式は必要最低限といった感じです．本文でゴリゴリの数式を示さなくてもいいので，付録にでも載せておいてくれると個人的には助かります．あと，本書の数式は数学をよく知らない人へのわかりやすさを優先したのか，数式のスタイルは馴染み深くありませんでした．とは言っても理解できないわけではないので，総合的には1冊目に読んどいて良かったと思います．

#8日目
正直「ゼロから作る Deep Learning」を読んだからと言って，何かを作れるようにはなりません．次の指針を見つけるべく再度情報収集のターンに入りました．検索のターゲットはディープラーニングのフレームワークやライブラリです．TensorFlow，PyTorch，Kerasなどが見つかりましたが，なんでもよかったので名前が一番短いKerasを選択しました．そしてKerasで書かれている本を探して良さそうなのをAmazonでポチりました．

次にポチったのは「**直感 Deep Learning**」です．またしてもオライリーの本ですね．オライリー本はたまに訳がおかしくて日本語になっていないときがありますが，僕は一応オライリー信者です．この本を選んだ理由はKerasを覚えるというのが一つと，ディープラーニングの応用例を知るためです．応用例を見て，パクれるものはパクろうという魂胆ですね．

実は「ゼロから作る Deep Learning」の2巻目の自然言語処理編を読もうとも検討したんですけど，そのときはあまり自然言語処理に興味がなかったので，次のステップに進んじゃお，と思って購入しませんでした．自然言語処理をやる際はぜひ読んでみようと思います．ちなみにこのころから「PRML」の上巻に手を出し始めますが，ややこしくなるので詳細はカットします．

# 9日目~12日目
届いた「直感 Deep Learning」を読み進めました．Kerasを使ってみた感想は，「やべ，使いやすっ」って感じです．「ゼロから作る Deep Learning」ではディープラーニングのライブラリは一切使わなかったので，ライブラリを使える喜びを実感できました．ニューラルネットワークの構築の流れは既に学習済みなので，あとはそれをKerasで実現するための書き方を学ぶだけでした．Kerasの使い方は本と並行して公式ドキュメントを読みました．公式ドキュメントは日本語も対応していて非常に読みやすかったです．ちなみに「直感 Deep Learning」の目次は以下のとおりです[^2]．

|章|タイトル|
|:--:|:--:|
|1|ニューラルネットワークの基礎|
|2|KerasのインストールとAPI|
|3|畳み込みニューラルネットワーク|
|4|GANとWaveNet|
|5|単語分散表現|
|6|リカレントニューラルネットワーク|
|7|さまざまなディープラーニングのモデル|
|8|AIによるゲームプレイ|
|9|総括|

3日間でKerasを使ったCNNの実装(3章)までを読み終えました．1日1章ペースは変わっていません．内容を整理しながら読むにはちょうどいい目安かもしれませんね．この本の1~3章は「ゼロから作る Deep Learning」の内容を圧縮したような内容でした．おさらいしながらより深い知識とKerasの使い方を学べるという点で，「ゼロから作る Deep Learning」の次の本としてはとても相性がいい気がしました．

# 13日目~14日目
「直感 Deep Learning」の内容自体はとても良かったのですが，読んでる途中で物体検出に興味が湧いてきました．勉強を初めてこれくらい経つと，超ディープな話題でなければQiitaの猛者たちの話を理解できるようになっていたので，Qiitaで物体検出の情報を収集．そしてYOLOやSSDというワードをゲットしました．その内容を扱っている書籍はないかと探していると，「**PyTorchによる発展ディープラーニング**」という本を発見しましたので，即ポチ．1週間も経たずにKerasからPyTorchに浮気するのはどうかなとは思いつつも，人間ではないことに気付き割り切りました．

「PyTorchによる発展ディープラーニング」は結構最近の話題を扱っていますが，理解できないということは今のところはありません．その前に読んだ2冊が当たりだったからかもしれませんね．当分はこの本と「直感 Deep Learning」を同時に読み進めていこうと思います．

#おわりに
初学者が2週間勉強するとこんな感じです．僕のペースが遅いか早いかはわかりませんので，もしこの記事を参考にする場合はペース配分は自分の能力と環境に合ったものにしてください．

今後はラズパイを使ったIoT機器とディープラーニングの技術を融合したものを作りたいと思ってます．現在，自立制御型の小型ローバーを作っているので，物体検出にディープラーニングを使おうと計画しています．簡単に言えば自動運転をさせようということですね．また数日後パワーアップして，ディープラーニングの勉強日誌をアップすることにします．


[^1]: 斎藤康毅，ゼロから作る Deep Leaning，オライリー・ジャパン，2016
[^2]: Antonio Gulli, Sujit Pal，直感 Deep Learning，オライリー・ジャパン，2018