Pro Yearly is on sale from $80 to $50! »

JDLA E資格 受験体験記 / jdla-dl-engineer-experience

JDLA E資格 受験体験記 / jdla-dl-engineer-experience

2020/06/20 Python機械学習勉強会 in 新潟のLTで発表した内容です。

82d6167c4d14393c2e20b37a74b363c5?s=128

kasacchiful

June 20, 2020
Tweet

Transcript

  1. JDLA E資格 受験体験記 2020-06-20 Python機械学習勉強会 in 新潟 笠原 宏 (@kasacchiful)

    1 / 43
  2. ⾃⼰紹介 笠原 宏 (@kasacchiful) Software Developer My favarite: Ruby Community:

    JAWS-UG Niigata JaSST Niigata ASTER SWANII etc. 2 / 43
  3. これから話すこと JDLAのE資格に合格したので、その受験体験記をまとめます 3 / 43

  4. JDLA? E資格? なにそれおいしいの? JDLA: ⼀般社団法⼈ ⽇本ディープラーニング協会 (Japan Deep Learning Association)

    https://www.jdla.org/ 理事⻑: 東京⼤学⼤学院⼯学系研究科 教授 松尾 豊 ⽒ 他、理事にはML/DL関係の会社の⽅や⼤学教授など E資格: 「JDLA Deep Learning for ENGINEER」の通称 概要: 「ディープラーニングを実装するエンジニアの技能を認定する」 他にも「G検定」(JDLA Deep Learning for GENERAL)という、「ディープラーニン グを事業に活かすための知識を有しているか」を検定する試験もある。 「E検定」ではなく、「E資格」 4 / 43
  5. G検定とE資格 G検定 「ディープラーニングに関する知識を有し、事業活⽤する⼈材」 エンジニア以外にも、営業・経営者も結構受験して取得している。 受験料: 12,000円(税別) (⼀般) / 5,000円(税別) (学⽣)

    オンライン開催 (⾃宅受験可能) E資格 「ディープラーニングを実装する⼈材」 エンジニアの技能に特化。 受験料: 30,000円(税別) (⼀般) / 20,000円(税別) (学⽣) 所定の試験会場で受験 G検定は敷居が低いので、まずはG検定で基本的な知識を得る学習を⽬指そう。 5 / 43
  6. 受験者数の推移 出典: 資格試験について - ⼀般社団法⼈⽇本ディープラーニング協会【公式】 6 / 43

  7. E資格地域別受験者数 出典: JDLA試験実施レポート_202004版v2 7 / 43

  8. 2019年 取得したい資格 出典: 取得したい資格 - いる資格、いらない資格 2019決定版 | ⼈気上昇中のIT資格、⾒逃せな い2つのトレンド

    | ⽇経クロステック(xTECH) 8 / 43
  9. E資格受験に必要なもの 「JDLA認定プログラム」を試験⽇の過去2年以内に修了していること JDLA認定プログラム: JDLAが認定した講座 費⽤: だいたい20 - 30万円(講座によりまちまち) 中部⼤学の講義も、JDLA認定プログラムに指定されている オンラインで受けられるものも多い

    受講期間: 約1ヶ⽉ - 6ヶ⽉くらい(講座によりまちまち) 修了したら、JDLAから「E資格受験申込コード」が送られるので、それを使って受験申 し込みをする。 9 / 43
  10. 今回の受験内容 E資格受験⽇: 2020年2⽉22⽇ (2020年の第⼀回⽬開催) 費⽤: 30,000円(税別) JDLA認定プログラム: Skillup AI「現場で使えるディープラーニング基礎講座」 https://www.skillupai.com/deep-learning/

    費⽤: 279,000円(税別)(オンライン講座料⾦) 期間: 2019年10⽉15⽇ - 2020年1⽉21⽇(全8講座) 選んだ理由: a. 認定プログラム第1号であり、実績がある b. オンライン受講ができる c. 期間や費⽤も⼀般的であり、サイトに明⽰されていてわかりやすかった 社内での稟議に組み込みやすかった 10 / 43
  11. 認定講座の内容 https://www.skillupai.com/deep-learning/ オンライン講座を受講した。 全8回の講座 各回とも、「事前の予習動画」 + 「講座本編の動画(講師メイン⾳声)」「講座本編の動 画(周りの⾳も拾う)」を視聴。 事前に予習⽤のスライドのほか、サンプルコードもipynb形式で配布されているので、実 際にソースコードを実⾏しながら仕組みを確認できる。

    講座本編の動画は、集合研修終了後2⽇以内に視聴できる。 数学と機械学習に関しては取り扱っていないので、必要な⼈は別の講座も受講されることを お勧めする Skillup AIには、数学講座や機械学習講座が別途⽤意されている。 11 / 43
  12. . DAY1: (2019/10/15) ディープラーニング講座を通しての課題 ディープラーニング基礎 前半 . DAY2: (2019/10/29) ディープラーニング基礎

    後半 . DAY3: (2019/11/12) 学習の最適化 . DAY4: (2019/11/26) ディープラーニングの様々なモデル 畳み込みニューラルネットワーク その他話題 12 / 43
  13. . DAY5: (2019/12/10) 中間発表 オンライン参加者の中間発表は別⽇ (私は12/23) CNNの様々なモデル ⾃⼰符号化器 ⽣成モデル .

    DAY6: (2019/12/24) 機械学習で扱うデータと典型的なタスク 再帰型ニューラルネットワーク . DAY7: (2020/1/7) ⾃然⾔語処理における深層学習 13 / 43
  14. . DAY8: (2020/1/21) 最終発表 オンライン参加者の最終発表は別⽇ (私は1/28) 強化学習 転移学習 軽量化技術 ⾼速化技術

    14 / 43
  15. JDLA認定プログラム修了条件 JDLA認定プログラムによって、修了条件が異なります。 Skillup AIの場合、所定の期限内までに: 「確認テスト」3種類を受験し、修了条件を満たす点数以上で合格すること 「通し課題」を提出し、修了条件を満たす成果を出す 15 / 43

  16. 確認テスト いずれも、E資格シラバスに沿った出題範囲の中から出題された内容。 期限内(2020/2/2 2359まで)に、いつでも・何回でも受験可能。 数学: 90点以上 2019年10⽉19⽇ 2145 96点(合格) 機械学習:

    90点以上 2019年11⽉24⽇ 1741 94点 (合格) 深層学習: 80点以上 2020年1⽉5⽇ 352 88点 (合格) 16 / 43
  17. 通し課題 初回の講座にて案内された。 期限内(2020/2/2 2359まで)に、いつでも・何回でも(1⽇3回までを⽬安に)投稿可能。 カタカナ「ア」から「ソ」までの15⽂字の画像分類 学習に使⽤できる画像データ: (28 x 28 で.npy形式で提供)

    学習データは各々200枚、合計3,000枚 TensorFlow / PyTorch等の主要フレームワークを使わずに、「Numpy」で実装 E資格の出題内容が、「Numpy」実装の⽳埋め問題がよく出るため 専⽤の投稿サイトにPG⼀式を投稿 ⇒ 推論⽤データの正答率(Accuracy)98%以上で合格 推論⽤の画像データは⾮公開で、合計14,500枚 「ア」-「オ」: 各々1,300枚 「カ」-「ソ」: 各々800枚 17 / 43
  18. 通し課題でやった⼿順(1) 以下、通し課題開始時にいろいろ考えたメモ書きを公開。 実際は2019年末・2020年始の休暇中くらいしかまとまった時間が取れなかったので、約2週 間で課題を終わらせた。 全体計画 . 全結合型NNでの分類を実現する . CNNでの分類を実現する (中間発表ではここまでやりたい)

    . データ拡張を実現する . ドロップアウト等の過学習対策⽅法を実現する . オプティマイザの改良 (Adam もしくは RMSprop) を実現する . 論⽂掲載⼿法を試す 18 / 43
  19. 通し課題でやった⼿順(2) 実装⽅針 各種モジュール化を⼼がける 繰り返し学習していくため、パラメータ変更で簡単に付け替えられることが理想 numpyの機能をフル活⽤して、CPUオンリーで⾼速な演算ができるように⼼がける 提出時のテスト⽤サーバはGPU使えないので ⼩さなところから始める 時間があまりないので、無理せずできる範囲で データ前処理は、numpy以外のモジュールも使う 19

    / 43
  20. 通し課題でやった⼿順(3) 実装での狙い . 最初の3層NNによる分類を実装して提出し、動作するかどうかと判定結果を得ること。 . CNNによる分類を実装して、精度向上を狙うこと。 . データ拡張を実装して、データの前処理を⾏うこと。 . ドロップアウトを実装して、汎化性能を⾼めること。

    最低でもCNN+データ拡張+ドロップアウトやらないと、条件(正答率98%)を満たせないと思 われる。 . オプティマイザにAdamもしくはRMSpropを実装して、収束を早めること。 . 時間があれば、論⽂掲載⼿法を試すこと。 20 / 43
  21. 実装の狙い (検討項⽬) . 3層NNでの分類 ニューラルネットワーク実装 活性化関数実装 (ReLU) 損失関数実装 (クロスエントロピー) オプティマイザ実装

    (とりあえずSGDかな) 最低限の前処理実装 0..1への変換/reshapeでの⼊⼒データ平滑化 出⼒データのワンホットベクトル化/trainとvalidationへの分割 学習済モデルの保存 (pickle使⽤) 学習済モデルを使⽤しての推論機能実装 学習中の損失と正答率をグラフ化する⽅法の実装 学習経過を⾒ないとうまく学習できたかどうか判断できない 21 / 43
  22. 実装の狙い (検討項⽬) . CNNでの分類 畳み込み層実装 プーリング層実装 . データ拡張 Pillow /

    Augmentor / OpenCV あたりを使⽤してみる . ドロップアウト等の過学習対策 ドロップアウト (Dropout) 実装 バッチ正規化 (Batch Normalization) 実装 (オプション) L2正則化実装 22 / 43
  23. 実装の狙い (検討項⽬) . オプティマイザの改良 RMSprop実装 Adam実装 参考資料: OPTIMIZER ⼊⾨ ~線形回帰からAdamからEveまで

    深層学習の最適化アルゴリズム Adam and vanilla SGD in numpy. Adam - A Method for Stochastic Optimization 23 / 43
  24. 実装の狙い (検討項⽬) . 論⽂掲載⼿法を試す 1x1CNN (ボトルネック層)を⼊れてみる グローバルアベレージプーリングを導⼊してみる いずれもインセプション構造より Residual構造を導⼊してみる ResNet構造より

    データ拡張の最新⼿法を導⼊してみる 他にも最新の⼿法はあるか探す 24 / 43
  25. 通し課題で⼯夫したところ(1) . 動作環境がAnacondaを想定しているため、Dockerコンテナ内に構築して課題をこなす DockerコンテナにAnacondaの指定バージョンをインストール JupyterLabもインストール 後述するAmazon EC2上での動作も、環境移⾏しやすかった 25 / 43

  26. 通し課題で⼯夫したところ(2) . メモリ不⾜は⼒技で解決 課題動作のハードウェア要件に「メモリ8GB」が少なくても必要 ⾃⾝所有マシン(メモリ16GB, Docker割当12GB)ではメモリが⾜りなくなった 最終的にはAmazon EC2のメモリ256GBインスタンス(r5a.8xlarge)で学習 私以外の⽅は、モデルサイズを⼩さくしたまま8GBメモリ上のマシンでクリアして いる

    私はtrainデータ全部numpy配列にして、ガリガリ学習繰り返していたので、 メモリ効率は⾮常に悪いプログラムである。generator等使えばメモリ効率は 上がると思われるが、今回はあまり時間かけたくなかったので、メモリ増量と いう⼒技を選んだ。 26 / 43
  27. 通し課題で⼯夫したところ(3) . 学習済パラメータのみpickle化 学習済モデル全体をpickle化すると、投稿サイトのアップロード容量制限(100MB) に引っかかる モデルの学習済パラメータのみを事前にpickle化してアップロードし、アップロー ド後の処理でモデルの構造を新規作成した後にパラメータを読み込んでから推論さ せる必要があった。 27 /

    43
  28. 通し課題で⼯夫したところ(4) . エポック毎にチェックポイント設置 学習に時間がかかるので、数エポック毎に学習済パラメータをpickle化 最終的に1エポック約1時間... 学習の推移グラフ⾒て、過学習が起きそうな地点の前のパラメータで提出 28 / 43

  29. 通し課題で⼯夫したところ(5) . データ拡張ライブラリに「Augmentor」を使⽤ https://github.com/mdbloice/Augmentor tf.kerasのImageDataGeneratorが便利だが、今回はAugmentorを試しに使ってみた。 基本的な機能は備えているし、Random Erasingも使える。 汎⽤性があるので、TensorFlowやPyTorchにも使えそう。 学習データ各々200枚 →

    各々2,000枚 合計30,000枚で学習 29 / 43
  30. 通し課題で⼯夫したところ(6) . データ拡張にmixupを試す https://arxiv.org/abs/1710.09412 2つの訓練サンプルを混ぜて、1つの新たな訓練サンプルとして使⽤する⼿法 データだけでなくラベルも混ぜる はベータ分布 からのサンプリング値。 がハイパーパラメータ。 =

    x ~ λx + i (1 − λ)xj = y ~ λy + i (1 − λ)yj 試してみたものの、今回はあまり正答率が上がらなかったので、最終的には採⽤⾒ 送る。 λ ∈ [0, 1] B(α, α) α ∈ (0, ∞) 30 / 43
  31. import numpy as np # ラベルはone-hot ベクトル形式 def mixup(data, labels,

    alpha=1): sample_num = len(data) weights = np.random.beta(alpha, alpha, sample_num) index = np.random.permutation(sample_num) # データを混ぜる x1, x2 = data, data[index] x = np.array([x1[i] * weights[i] + x2[i] * (1 - weights[i]) for i in range(len(weights))]) # ラベルを混ぜる y1 = np.array(labels).astype(np.float) y2 = np.array(np.array(labels)[index]).astype(np.float) y = np.array([y1[i] * weights[i] + y2[i] * (1 - weights[i]) for i in range(len(weights))]) return x, y 31 / 43
  32. mixup実⾏例 32 / 43

  33. 通し課題で⼯夫したところ(7) . ネットワーク構成はCNNのシンプルなもので構成 conv (32) => conv (32) => pool

    => conv (64) => conv (64) => pool => conv (128) => conv (128) => pool => 全結合 (128) => 全結合 (15) ()内の数字はノード数 ドロップアウトではなくBatch Normalizationを使⽤ オプティマイザはAdamを使⽤ NumPyでの構築なので、講座のJupyter Notebookテキストや「ゼロから作るディープラーニ ング」を参考にした。 33 / 43
  34. 通し課題の結果推移(1) . 2019年12⽉23⽇ 354 (中間発表前にとりあえず結果が出るか確認) loss: 2.708532458970803 accuracy:0.05517241379310345 . 2020年1⽉2⽇

    1814 loss:0.16702579318085922 accuracy:0.9727586206896551 . 2020年1⽉3⽇ 2010 loss:1.3238964053911533 accuracy:0.9640689655172414 (この間、「新潟もくもく会」に参加して、データ拡張のパラメータをいろいろ 検討して学習データの検討を⾏う) 34 / 43
  35. 通し課題の結果推移(2) . 2020年1⽉4⽇ 2301 loss:1.043288772051768 accuracy:0.9708275862068966 . 2020年1⽉5⽇ 104 loss:1.116321625064204

    accuracy:0.9797241379310345 (この後、DL確認テストを受ける...) . 2020年1⽉5⽇ 409 loss:1.1189461933825091 accuracy:0.9786206896551725 35 / 43
  36. 通し課題の結果推移(3) . 2020年1⽉6⽇ 2050 loss:2.0310854392019357 accuracy:0.9849655172413793 合格 50エポックのうち、15エポックまでの学習済パラメータで提出 36 /

    43
  37. 受験 2020/2/21 (⾦) or 2020/2/22 (⼟) 2⽇間のうち、いずれかの⽇で受験可能 前回開催時に会場不⾜で東京の受験者が地⽅まで⾏って受験されていたため、その 対策らしい 私は2020/2/22

    (⼟) に受験 CBT-Solutionsのテストセンターで「CBT多肢選択式」形式で受験 受験料: 30,000円(税別) 試験時間: 2時間 37 / 43
  38. 問題数: 100問程度 2020#1の問題数は「⼤問題が34問、⼩問題換算で102問」(数えながら受験) 1問あたり1分程度しか時間かけられない 新潟県内では、新潟市、佐渡市の試験センターで受験可能だった 新潟市⻄区の試験センター (⼩新イオンの近く) で受験 ⻑岡市のCBTS試験センターはE資格は受験できなかった 申込時に「E資格受験申込コード」が必要

    認定プログラム修了後にJDLA経由で発⾏される 合格率: 約70% 認定プログラム修了していても、約3割は不合格になる... 38 / 43
  39. 結果 2020/3/3 (⽕) に通知 合格 39 / 43

  40. 所感 ディープラーニングの中の仕組みを知るいい機会 体系⽴てて学べるので、とても参考になった ディープラーニングのモデルをとてもいい精度で構築できるようになるわけではない 給料は上がらない まだマイナー資格だが、最近⼈気になっているらしい 出題範囲が広いので、認定プログラムが⾼額になるのもわかるが、認定プログラムが必 須でないのであれば、認定プログラムを受講することはおそらく無い ディープラーニングがよくわかっていない⽅であれば、認定プログラム受講はとて もオススメできるし、私もかなり参考になることが多かったが、受講料が⾼額であ

    るため、認定プログラム受講者数はかなり少なくなると思う しかし、認定プログラムを受講していないと、独学で合格するには困難な難しさ 40 / 43
  41. 今後の試験⽇程 予定⽇ G検定は参考書籍増えてきたので、合格しやすいと思います。 E資格は今年は開催されないので、来年の合格⽬指して認定プログラムを受講しましょう。 G検定 (年3回: オンラインで実施) 2020年第1回: 3/14 (⼟)

    (終了) 2020年第2回: 7/4 (⼟) (受験料半額で実施/申込締切は6/26(⾦)) 2020年第3回: 11/7 (⼟) E資格 (年2回: 試験会場で実施) 2020年第1回: 2/21 (⾦) or 2/22 (⼟) のいずれか1⽇を選択 (終了) 2020年第2回: 8/29 (⼟) → (中⽌) 2021年第1回: 2/19 (⾦) or 2/20 (⼟) 41 / 43
  42. あなたもチャレンジしてみませんか? 42 / 43

  43. 参考 E資格とは - ⼀般社団法⼈⽇本ディープラーニング協会【公式】 https://www.jdla.org/certificate/engineer/ JDLA認定プログラム https://www.jdla.org/certificate/engineer/#certificate_No04 現場で使えるディープラーニング基礎講座 | スキルアップAI

    | ディープラーニング研修 https://www.skillupai.com/deep-learning/ 43 / 43