JDLA Deep Learning for ENGINEER 2019#2（E検定）受験にあたり勉強したこと

# はじめに
先日、JDLA Deep Learning for ENGINEER 2019#2（E検定）を受験し合格しました。試験の内容はお伝えできないのですが、どのような勉強をしてきたのかを書こうと思います。

# 私のディープラーニングジャーニー
* 2018年1月 機械学習/ディープラーニングの本を読み始める
* 2018年6月 コードを書き始める
* 2018年8月 [Deep Learning基礎講座](https://deeplearning.jp/lectures/dlb2018/)（所属企業向け）受講開始
* 2019年1月 修了
* 2019年7月 G検定合格
* 2019年10月 E検定合格

勉強前のレベルは[こちら](https://qiita.com/shoji9x9/items/b6f4db9e612b5af3a3f4#%E5%8B%89%E5%BC%B7%E5%89%8D%E5%BE%8C%E3%81%AE%E8%87%AA%E8%BA%AB%E3%81%AE%E8%83%BD%E5%8A%9B)の通りです。

# JDLA Deep Learning for ENGINEER 2019#2について
[公式ページ](https://cbt-s.com/examinee/examination/deeplearning.html)の通りですが、1つポイントを挙げるならば出題形式が多肢選択式107問120分と書かれています。つまり、

* 1問約1分で解く必要がある
* 選択すればいい（勘で当たるものもある）

ということになります。また、[シラバス](https://www.jdla.org/business/certificate/?id=certificate_No06)（最新）の通り出題範囲も広いです。そのため、1つの分野を完璧に極めるよりも広く浅く（とは言え重要なところはしっかりと）勉強する必要があると感じました。

# E検定結果
合格しました。総合得点率や設問個別の正解・不正解、本試験の合格ライン等については開示していないとのことです。分野別の得点率は以下の通りでした。試験結果を公開してはいけないという規約ではないと理解していますが、もしも違反していましたら削除します。

* 応用数学：100.00%（最も苦手な分野だったので自分でもびっくり）
* 機械学習：67.44%
* 深層学習：79.59%

各科目の平均得点率は、応用数学72.04%、機械学習58.89%、深層学習59.69%のようなので、応用数学は比較的点を取りやすかったようです。

# 勉強したこと
## Deep Learning基礎講座
[JDLA認定プログラム](https://www.jdla.org/business/certificate/?id=certificate_No04)相当と捉えて下さい。やはりこれが最も役立ちました。単なる座学だけではなく自分でコードを書く、しかもいきなりKerasなどは使わずNumPyやTensorFlowの低レベルAPIを使って課題を解いたのがよかったと思います。試験前には講座の資料を読んだりコードを実行して復習しました。

## 本
[こちら](https://qiita.com/shoji9x9/items/b6f4db9e612b5af3a3f4#%E8%AA%AD%E3%82%93%E3%81%A0%E6%9C%ACstar%E3%81%AE%E6%95%B0%E3%81%AF%E5%88%9D%E5%AD%A6%E8%80%85%E3%81%B8%E3%81%AE%E3%81%8A%E5%8B%A7%E3%82%81%E5%BA%A6%E3%81%A7%E3%81%99)にも書きましたが、

* ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装
* ゼロから作るDeep Learning ❷ ―自然言語処理編

は本当にお勧めです。何度も読んでいますし、試験前にも読み返していました。
[深層学習](https://www.amazon.co.jp/dp/B07GQV1X76/ref=dp-kindle-redirect?_encoding=UTF8&btkr=1)から問題が出題されるという噂を聞きましたが、自分はこの本は全く読みませんでした（その噂を聞いたタイミングが遅かったので）。

## YouTube
自分は数学が苦手だったため、試験1カ月くらい前から数学を中心にYouTubeを見ていました。

* まずはヨビノリたくみ先生の[線形代数](https://www.youtube.com/playlist?list=PLDJfzGjtVLHnc1vTpBaCNKMUl6HauQv1a)、[確率統計](https://www.youtube.com/playlist?list=PLDJfzGjtVLHmx7qMP410-9gx0weC9d90X)を見ました。わかりやすい！
* 特異値分解の計算方法がずっと理解できなかったのですが、[特異値分解PART1：固有値分解](https://www.youtube.com/watch?v=p1dtgAz7W_k&t=5s)、[特異値分解PART2：特異値分解](https://www.youtube.com/watch?v=CUtT2Pi3ITQ&t=1025s)を見ることで解き方がやっとわかりました
* サポートベクトルマシンに関しては「マージンを最大化する」ということは理解していましたが、理論は理解できていなかったため、[【機械学習】サポートベクトルマシン（前編）|  SVMの理論、ハードマージンとソフトマージン](https://www.youtube.com/watch?v=cNEhKEb9-JU)、[【機械学習】サポートベクトルマシン（中編）| ラグランジュの未定乗数法、双体問題](https://www.youtube.com/watch?v=2IB7vkfGeAA)、[【機械学習】サポートベクトルマシン（後編）| カーネル法、多クラス分類・回帰問題](https://www.youtube.com/watch?v=fUSO6-0o3ds)で勉強しました


## Webサイト
こちらも試験1カ月くらい前から見始めました。

* CNNの変遷は[畳み込みニューラルネットワークの最新研究動向 (〜2017)](https://qiita.com/yu4u/items/7e93c454c9410c4b5427)を読みました
* Attensionをイマイチ理解できていなかったのですが、[作って理解する Transformer / Attention](https://qiita.com/halhorn/items/c91497522be27bde17ce)の「Attention の基本は query と memory(key, value) です」を読んで理解できるようになりました。Positional Encodingはまだ理解できていなかったりしますが・・・。BERTは言葉だけは知っていたものの、どういったものか理解できていませんでした。[汎用言語表現モデルBERTを日本語で動かす(PyTorch)](https://qiita.com/Kosuke-Szk/items/4b74b5cce84f423b7125)を読むことで、「双方向であること」「カンニング防止のためにマスクを使うこと」が理解できるようになりました
* 画像の生成や強化学習についてはDeep Learning基礎講座では対象外になっていました。後日追加講義ということで習ったのですが理解が不十分と感じたため、[Variational Autoencoder徹底解説](https://qiita.com/kenmatsu4/items/b029d697e9995d93aa24)、[今さら聞けないGAN](https://qiita.com/triwave33/items/1890ccc71fab6cbca87e)、[今さら聞けない強化学習](https://qiita.com/triwave33/items/5e13e03d4d76b71bc802)、[ゼロからDeepまで学ぶ強化学習](https://qiita.com/icoxfog417/items/242439ecd1a477ece312)を読みました

## 勉強を諦めたこと
* 時間があれば、物体検出、セグメンテーション、画像の生成、強化学習あたりはしっかり勉強し、コードも書きたかったのですが、上辺を撫でた程度しか勉強できませんでした
* ベイズ推定についてももう少し詳しく勉強したかったのですが、時間切れでした（ベイズの定理を理解するくらいしかできなかった）

# おまけ：G検定のための勉強
一応、E検定の前にG検定にも合格したのですが、そのときの勉強は[こちら](http://study-ai.com/generalist/)の模擬テストを実施したくらいでした。G検定は試験中に検索もできるので、JDLA認定プログラムを受講した方であれば、この程度の勉強で十分合格できると思います。そうでない方は公式テキストなどを利用されるのがよいように思います。

# 最後に
こんな感じで試験対策としては1カ月（しかも基本週末だけ）勉強した程度ですが、一応何とかなりました。JDLA認定プログラムから予想問題などをもらえるのであれば、それを見ながら勉強範囲を絞り込むことで、（試験合格を目的とするための）効率的な勉強ができると思います。

とは言え、合格は通過点に過ぎませんので、これをきっかけに理解できていなかった分野の強化に繋げられるといいかなと思います。自分は今後何の勉強をしていくか悩みましたが、Kaggleを通してテーブルデータの扱い方を学ぼうと思っています。