JDLA Deep Learning for ENGINEER 2018 受けてみた

2018年9月29日に「JDLA Deep Learning for ENGINEER 2018」という試験を受けてきたので、その内容を記載します。

# JDLA Deep Learning for ENGINEER 2018とは？
## 概要
JDLA Deep Learning for ENGINEERとは、一般社団法人日本ディープラーニング協会（以下、JDLA）という団体が開催している試験のうちのひとつです。

JDLAが開催している[試験](http://www.jdla.org/business/certificate/#education)は以下の２種類あります。

* JDLA Deep Learning for GENERAL（通称、G検定）

    「ディープラーニングを事業に活かすための知識を有しているかを検定する」のを目的としています。
    IPAレベル1くらいの難易度で、実装というよりAIに関する知識についての試験になります。
    年に３回くらい実施されます。

* JDLA Deep Learning for ENGINEER（通称、E資格）

    「ディープラーニングを実装するエンジニアの技能を認定する」のを目的としています。
    深層学習はもちろん、機械学習や数学及び、pythonでの実装方法についての知識を問われる試験になり、
    IPAレベル3〜4程度の難易度を想定していると言われています。
    今回受験したのはこちらの試験です。
    できたばかりの資格なので、今回が記念すべき第１回目になります。（なので過去問はありません。。）

## 試験概要
E資格の概要はこのような感じです。
（詳細はJDLAの[資格試験](http://www.jdla.org/business/certificate/#education)のサイトでご確認ください。）

<dl>
<dt>試験日</dt>
<dd>2018年9月29日(土) 13:00と15:30のどちらか。</dd>
<dt>合格発表日</dt>
<dd>2018年10月12日(金) までに発表</dd>
<dt>試験会場</dt>
<dd>各都道府県の指定試験会場。（大阪で受けたが10箇所ほど会場があった。）</dd>
<dt>会場での注意事項</dt>
<dd>

 * 試験前に身分証等による本人確認を実施。<br>

 * 筆記用具（メモ紙・ペン）は会場で渡され、試験終了後に返却。<br>
   （電卓は試験システム上のソフトウェア電卓使用。）

</dd>
<dt>試験時間</dt>
<dd>120分</dd>
<dt>出題数</dt>
<dd>37問（1問内に小問が1〜5問程度あり、全部で小問106問）</dd>
<dt>受験料</dt>
<dd>税込32,400円　※学割・JDLA会員割などがあるらしい。</dd>
</dl>

# 試験範囲
[シラバス](http://www.jdla.org/business/certificate/#E)より、JDLA認定プログラム修了レベルの出題されます。
適当に抜粋すると以下のような感じです。（だいぶ端折ってます。正確な詳細は[シラバス](http://www.jdla.org/business/certificate/#E)参照）

| 大項目 | 中項目 | 概要 |
|:---|:-----|:---------|
|応用数学 | 線形代数 | 特異値分解  |
|  | 確率・統計 | 一般的な確率分布、ベイズ則  |
|  | 情報理論 | 情報理論  |
| 機械学習　　　 | 機械学習の基礎 | 学習アルゴリズム、最尤推定、確率的勾配降下法など  |
|  | 実用的な方法論 | 性能指標、ハイパーパラメータの選択など  |
| 深層学習 | 順伝播ネットワーク | 線形問題と⾮線形問題、コスト関数、出力・隠れユニットなど  |
|  | 深層モデルのための正則化 | パラメータノルムペナルティー、半教師あり学習、ドロップアウトなど |
|  | 深層モデルのための最適化 | 学習と純粋な最適化の差異、NN最適化課題、パラメータの初期化戦略など |
|  | 畳込みネットワーク | 畳み込み処理、プーリング、構造出⼒、特徴量の転移など |
|  | 回帰結合型NNと再帰的N | 回帰結合型のNN、双⽅向RNN、EncoderDecoderとSeq2Seqなど |
|  | 生成モデル | 識別モデルと⽣成モデル、オートエンコーダ、GANなど |
|  | 強化学習 | ⽅策勾配法、価値反復法など |

# 受験までの流れ

1. JDLAの認定する[JDLA認定プログラム](http://www.jdla.org/programs/)を修了する。
    ここが最初の難所。JDLAが認定するプログラムを受講し修了しなければなりません。
    （ちなみに修了証は２年間有効。）

    2018年9月末現在、以下のスクールがあります。

    | スクール実施会社名 | オンライン | ハンズオン |
    |:--|:-:|:-:|
    | スキルアップAI株式会社 | ○ | 東京、大阪、名古屋 |
    | 株式会社zero to one | ○ | ☓ |
    | アイスタディ株式会社 | ☓ | 東京（リモート参加可能） |
    | 株式会社STANDARD | ○ | ☓ |
    | エッジコンサルティング株式会社 | ☓ | 東京、大阪、福岡 | 
    
    私が申し込もうとした時点（2018年4月）では、認定されたスクールは３つくらいしかありませんでした。
    値段はスクールや選択するオプション等によって変わってきますが、だいたい10数万から40万円程度です。
    私はスキルアップAIさんにお世話になりました。

2. 修了時にJDLAから「受験申込コード」をメールで受領する。
    プログラムの修了条件を満たすとスクールからJDLAに連絡がいき、JDLA事務局から本人のメールアドレスに直接「受験申込コード」が届きます。

3. 申込期間中に[CBT-Solutions](https://cbt-s.com/)のサイトから「JDLA Deep Learning for ENGINEER 2018」の試験を申し込む。
    申込期間中（今回の場合だと2018年9月1日〜9月22日）
    （申し込み時に「受験申込コード」の入力が必要。）

4. 試験日に会場で受験する。
    申し込んだ会場に足を運び、会場に設置されているPCで受験します。
    本人確認が必要です。（免許証があればそれだけでよいです。）
    また試験PCのある部屋に何も持ち込みはできません。

# 講座内容について
内容はスクール毎に違うと思いますが、ここでは私が受けたスキルアップAIの「現場で使えるディープラーニング基礎講座（＋E資格対応）」の内容になります。

## 「現場で使えるディープラーニング基礎講座」の講義
DAY1〜DAY8の8回に分けてディープラーニングの基礎からディープラーニングの活用までを学びます。
教材はDAY毎の講義内容のPDFとそれに対応するNotebookで進められます。
1講座あたりの時間は3〜4Hくらいです。
講義の内容は以下のとおり。（公式HPより抜粋。詳細はスキルアップAIの「[現場で使えるディープラーニング基礎講座](https://www.skillupai.com/deep-learning)」をご確認ください。）

| DAY | 講義内容 |
|:--:|:--|
| 　1　 | ディープラーニング入門、パーセプトロン、ニューラルネットワーク、活性化関数、順伝播計算、出力層の設計、予測関数、バッチ処理  |
| 　2　 | 損失関数、ミニバッチ学習、数値微分、最急降下法、勾配法（前半）  |
| 　3　 | 勾配法（後半）、誤差逆伝播（前半）  |
| 　4　 | 誤差逆伝播（後半）、勾配法の学習を最適化させる方法 |
| 　5　 | 重みの初期値、機械学習と純粋な最適化の差異、ニューラルネットワーク最適化の課題、最適化戦略とメタアルゴリズム、バッチ正規化、正則化、（中間発表1）  |
| 　6　 | ディープラーニングの様々なモデル、CNNモデル、畳み込み層、プーリング層、Im2col、入力画像の工夫、その他の話題、CNNの様々なモデル  |
| 　7　 | 様々なデータの取り扱い、DNNと自然言語処理、再帰型ニューラルネットワーク、（中間発表2）  |
| 　8　 |  再帰型ニューラルネットワークの計算原理、自己符号化器、生成モデル、強化学習、（最終発表） |



## 通し課題
通し課題とは講座が終わるまでに提出すべき課題です。
具体的にはスクールで用意した手書き文字のtrainデータを、各々でディープラーニングを使って文字を認識するようなプログラムをpythonで作成し、別途スクールが隠し持つtestデータで合格基準の認識率に達すればよいというものです。
もちろん、これが合格基準の認識率にいかなければ、修了証はもらえません。（＝E資格は受けれません）
とはいえ、真面目に講義を受けていれば難なくクリアできると思います。
また、前述の講義内容のDAY5、DAY7、DAY8にある中間・最終発表がこの通し課題の発表になります。発表は必須ではなく任意ですが、講師の方から作りについてのアドバイスを貰えたりするのでやってて損はないと思います。

## 知識テスト 
通し課題の他に修了証の貰える条件として「知識テストをすべて合格点以上を取る」というものがあります。
知識テストは以下の３種類あります。

* ディープラーニング
  この「[現場で使えるディープラーニング基礎講座](https://www.skillupai.com/deep-learning)」内容＋αの内容の範囲でした。

* 機械学習
  こちらの知識テストの内容は、本講座の内容には含まれていません。
  この範囲の勉強も必要であれば、別途「[現場で使える機械学習・データ分析基礎講座](https://www.skillupai.com/machine-learning)」を申し込む必要があります。

* 数学
  こちらの知識テストの内容は、本講座の内容には含まれていません。
  この範囲の勉強も必要であれば、別途「[機械学習・ディープラーニングのための数学講座](https://www.skillupai.com/math)」を申し込む必要があります。

試験自体はWebで行い試験後、即、点数がわかります。また結果画面で問題の解説資料も見ることができます。
合格点に達していない場合、何回でもチャレンジできますが間違った箇所などはわからないので、解説資料を元に勉強し再度チャレンジする必要があります。
どれも試験範囲からある程度範囲を絞った形での選択問題でした。
問題数はかなり有り、じっくり解くと初見は１時間以上はかかりました。
（いや、、ちょっと見栄はったかも。。３時間くらいかかった気もする。。。）

# 勉強したこと
私は、主に以下のものを使って勉強をしました。

* 講義で使った資料及びNotebook
  講義で使った資料すべて合わせると500ページ以上ありましたが、印刷して常に手元に置いて勉強しました。
  またNotebookは解答Notebookを見なくても実装できるようになるくらい繰り返し行いました。

* JDLA作のE資格例題
  スクールを通じてJDLAが作ったというE資格の例題を初回の講義前にもらいました。
  かなり内容が難しく、最初見たときに「オワタ！」と思いました（笑）
  貴重な例題だったので、ある程度知識のつく試験勉強終盤までは例題はほとんど見ないようにし、終盤からはこの例題に出てきた内容の関連するものを中心に覚えていきました。
  ただ、数学の特異値分解だけはどうしても理解できなかったので時間の都合上捨てました。（吉と出たか凶とでたかは後ほど。）
  あと若干、例題の問題や解答が間違っており、JDLA側からは修正予定がないということで、スクール側から修正情報を教えてもらいました（汗）。

* スキルアップAIで行った知識テスト
  例題は前述の通り見ないようにしていたので、中盤まではこちらを過去問のように徹底的に攻略しました。

* 後述の参考図書
  後述している３冊の本は特によく読みました。
  特に[深層学習](https://amzn.to/2ywScNB)の本については、E資格の参考図書になっていたのですが、数式の表現が一般的に出てくる式とちょっと変わっていたりというのもあり（式は変わっても意味は同じ）、一般的な式を覚えたあと、こちらの本の式も調べて覚えて、、といった形で二重で覚えました。
  （ちなみにきちんと数式を理解できる人は、違う数式でも同じ式だと解釈できるのでこの作業は必要ありません。）
  例えば、以下はどちらもモーメンタムの式です。

    | 一般的な式 | 深層学習の本の式 |
|:-:|:-:|
| ![モーメンタム](https://qiita-image-store.s3.amazonaws.com/0/248434/8e808675-c4df-65a1-2bb7-431f544a4742.png) | ![IGモーメンタム](https://qiita-image-store.s3.amazonaws.com/0/248434/4bebc4d6-cab5-4a54-5ce7-2187c0eb2c8e.png) | 


## 参考図書

1. ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装
これはディープラーニングの本の中ではかなり有名な本です。TensorFlowなどのフレームワークを利用せず、ディープラーニングを実装していく本で、かなり読みやすく丁寧に書かれています。E資格とか関係なく、ディープラーニングの概念を勉強したい人におすすめな本です。
<a target="_blank"  href="https://www.amazon.co.jp/gp/product/4873117585/ref=as_li_tl?ie=UTF8&camp=247&creative=1211&creativeASIN=4873117585&linkCode=as2&tag=tomozoh0e-22&linkId=172a6d9568ed58cb588a48b6ce0209db"><img border="0" src="//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&MarketPlace=JP&ASIN=4873117585&ServiceVersion=20070822&ID=AsinImage&WS=1&Format=_SL250_&tag=tomozoh0e-22" ></a><img src="//ir-jp.amazon-adsystem.com/e/ir?t=tomozoh0e-22&l=am2&o=9&a=4873117585" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" />

2. ゼロから作るDeep Learning ❷ ―自然言語処理編
上記「ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装」の同著者による第二弾です。
同じようにフレームワークを使わずに自然言語周りの処理の実装について詳しく書かれています。
講義中に若干駆け足気味だったAttentionなどが詳しく書かれていて、非常に勉強になりました。
<a target="_blank"  href="https://www.amazon.co.jp/gp/product/4873118360/ref=as_li_tl?ie=UTF8&camp=247&creative=1211&creativeASIN=4873118360&linkCode=as2&tag=tomozoh0e-22&linkId=f18d6fbaecd141deaa1e407491b85eca"><img border="0" src="//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&MarketPlace=JP&ASIN=4873118360&ServiceVersion=20070822&ID=AsinImage&WS=1&Format=_SL250_&tag=tomozoh0e-22" ></a><img src="//ir-jp.amazon-adsystem.com/e/ir?t=tomozoh0e-22&l=am2&o=9&a=4873118360" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" />

3. 深層学習
Ian Goodfellow氏という機械学習（深層学習）の偉いひとが書いた本を日本の深層学習の著名な方々が翻訳されたものです。
翻訳にJDLAの理事長の松尾豊氏が関わっているのもあり、JDLAからの参考図書ということで今回の試験勉強のひとつの軸となりました。
ただ内容はかなりの機械学習や数学などの知識レベルが求められる内容で、これが難なく読めるひとならそもそもE資格は受かると思います（笑）。
<a target="_blank"  href="https://www.amazon.co.jp/gp/product/B07GQV1X76/ref=as_li_tl?ie=UTF8&camp=247&creative=1211&creativeASIN=B07GQV1X76&linkCode=as2&tag=tomozoh0e-22&linkId=a7816d4afeed27cb4d0e95ddf0c937ad"><img border="0" src="//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&MarketPlace=JP&ASIN=B07GQV1X76&ServiceVersion=20070822&ID=AsinImage&WS=1&Format=_SL250_&tag=tomozoh0e-22" ></a><img src="//ir-jp.amazon-adsystem.com/e/ir?t=tomozoh0e-22&l=am2&o=9&a=B07GQV1X76" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" />

# 実際の試験について
## 試験問題
すべて４択でした。
記憶が曖昧なので、かなり忘れてる＆内容ざっくりしてますがご了承を。。

### 数学関連
* 特異値分解

    第一問は数学でした。しかも「特異値分解」。
    はいしゅうりょ〜。
    2×3の行列の特異値分解でした。
    小宇宙（コスモ）を燃やしセブンセンシズで回答し、さっと次の問題へ行きました。
    ちなみに数学はこれ１問だった気がします。

### 機械学習（ディープラーニング以外）関連
* SVM（サポートベクターマシン）
  カーネル法に関する問題があった気がありました。

* K−Means
  K−MeansとK-Means++みたいなのが出てましたが、K−Means++は全く勉強の範囲外でした。。

* ノルム
  ノルムの定義式を選択する問題がでました。

* 強化学習
  Target Q-Networkの固定に関する問題がでました。

### ディープラーニング関連
* 順伝播や逆伝播な話
  逆伝播の場合、この式はどうなるかとか、実装の穴埋めの問題がでました。

* 正則化
  標準化についての計算方法についての問題がでました。

* オプティマイザ
  AdaGradの実装に関する問題がありました。

* CNN
  GoogleNetやResNetについての問題がありました。
  GoogleNetはInceptionモデルの特徴に関する問題でした。
  畳込みの実装の穴埋めやプーリングの実装に関する問題がでました。

* RNN
  GRUの構造や実装についての問題ががっつりでました。
  あとseq2seqに関するモデル図の選択問題が出ました。

* R-CNN
  R-CNN関連(FastやFasterなど)の特徴を問われる問題もありました。

* その他
  自己符号化器、変分自己符号化器、敵対的生成ネットワークからもでました。
  あとエコーステートネットワークの固定するのはどの部分かという問題も出た気がします。

## 所管
今年４月に機械学習とはなんぞやの状態から勉強していく一つの目標として、たまたま見つけたE資格に申し込んだのが地獄の始まりでした（笑）
流石にイチからだったので覚える事が多く、且つ過去問のない状態だったのはかなりきつかったです。。

また当日の試験自体ですが、前半は大項目1問あたりの小問題数が多く（５問前後）、時間に追われ焦りましたが、終盤は大項目の1問につき小問題は１〜２問だったのでスイスイ進み、結果的に２０分時間が余ったので少し見返すことが出来ました。
難易度は私が今まで受けた試験の中でぶっちぎりのトップレベルでした。

終わってみて思ったのですが、試験範囲がかなり広く、ほんとに機械学習全般を知らないと始まらない大変な試験だなと感じました。
今回、本業の仕事が落ち着いていたのでまだ勉強時間を割くことが出来ましたが、時間のあまり取れない方はちょっと「精神と時の部屋」に入らないといけないかもしれません（汗）。

結果的に、常に高額な試験というナイフを背中に突きつけられながらの勉強だったので、かなり強制的なスキルアップになり良かったと思います。
これからは試験勉強に追われて出来なったディープラーニングや機械学習の実装をメインに勉強していきます。


明日１２日は合格発表の日です。このページに追記がなければ[忖度（そんたく）](https://ja.wikipedia.org/wiki/%E5%BF%96%E5%BA%A6)してください（笑）。

## 結果
(2018-10-12 20:00 追記)
本日のお昼頃に結果通知のメールが届きました。
「合格」という文字の前に「不」の文字はついていませんでしたので、これはすなわち**「合格」**ということに違いありません。

╭( ･ㅂ･)و̑ ｸﾞｯ

公式の発表によると342名中234名が合格だそうです。（合格率は69.4％）
[E資格（エンジニア）2018」結果発表](https://prtimes.jp/main/html/rd/p/000000012.000028865.html)

結果通知のメールの内容には主に以下の内容が記載されていました。

* 試験の合否
  「合格」とだけ書かれています。

* 分野別の得点率
  応用数学、機械学習、深層学習の各分野での得点率が％で記載されています。
  結構ギリギリ感ハンパないので、自主割愛します。。。まぁだいたい60％平均くらいです。

* 合格証
  自分の名前と合格者番号が記載され、JDLAの印鑑が押された合格証書のPDFがダウンロードできます。

* 合格者ロゴ
  10月31日までの期限付きですが、E資格のロゴのダウンロードができます。
  通常ロゴ(大・小)と白抜きロゴ（大・小）でそれぞれEPS、PNG、PSD、SVGの4種類のファイル形式があります。
  サイトにも載せていいのかな？？そこまでは書いてないです。


まぁ奇跡は起こるもので。。。これも厄年の恩恵か？！