E資格に合格しました!

2018年10月12日、無事にE資格試験に合格しました!
(これを書いているのはもう年末ですが。。。)

試験の出来はそこそこだったので、正直ダメでも仕方ないかなとか思っていましたが、無事合格できましたので、このブログのコンテンツを引き続き充実させていくと共に、E資格受験の大体について書いていきたいと思います

E資格は一般社団法人 日本ディープラーニング協会が認定する、民間認定の資格です
日本におけるディープラーニングを中心とする技術による日本の産業競争力の向上を目的とされています

ホームページはこちら
一般社団法人 日本ディープラーニング協会

本協会が認定する資格は2つ
G(ジェネラリスト)検定と
E(エンジニア)資格です

私はエンジニアですので、E資格を受験しました

試験は2018年9月29日に行われました
受験料は32,400円となっています
次回は2019年2月23日、その次は2019年8月31日に予定されています

E資格試験に先立ち、前もってJDLA認定プログラムを修了する事が受験要綱として規定されています
しかしながらこれがハードルが高い!

まずはお値段的なハードル
20万円から30万円程度します
これは受講するプログラムによって違います
現在認定されているプログラムは、7つでした

次に時間的なハードル
プログラムを修了するために半年程度の講座を受講する必要があります
仕事をしながらだとなかなか大変です
ただこの方式、一発勝負のテストだけで能力を測る訳ではなく、実質的な実装能力に関してはJDLA認定プログラムの方で習得させて合否を判定させるという考え方だそうで、そう聞くと納得してしまいます

これらをクリアして、尚かつ受験料も払って、試験に合格するとE資格に認定されます
この価値、分かる人には、、、分かってもらえるのでしょうか

ちなみに私はSkill Up AIの現場で使えるディープラーニング基礎講座を受講しました
ネットを介して受講できるので、自分の好きな時間に視聴できますし、講師への質問もSlackを通してできますので、とても良かったのでお勧めです

ホームページはこちら
現場で使えるディープラーニング基礎講座

認定プログラムの修了試験に合格したら、JDLAの方へ名簿が送られて、受験資格を得る、と言う流れでした

試験は多肢選択式で、時間は120分です
新しいモデルのPythonコードなどもたくさん出てきて、私には結構難しかったです
終わった際の感触としては、大体6割くらいはできたかなーといった感じでした

結果発表は約2週間後です
コンピュータでの選択式ですから、点数自体はすぐに出るのでしょうが、合否基準については受験者の出来を見てから決める方式だったんでしょうね

後程公開されたJDLAからの報告を見ますと、
合格率は69.44%
平均点は
応用数学 : 69.18
機械学習 : 64.11
深層学習 : 58.11
との事でしたが、合格基準に関しては現在も公表されておりません

尚、私の得点率ですが、
応用数学 : 66.66
機械学習 : 64.7
深層学習 : 59.74
でした

あれ?むむむ、、、深層学習以外は平均点を割っていますね。
合格率は7割なので、平均点以下でも合格出来てしまうようです。
ギリギリ合格だったんですね。

・・・あぶねぇ・・・
・・・よかった・・・

まぁ、ギリギリでも受かっちまえばこっちのもんですので

(2019.04.02追記)

第二回の結果もでていますね。
受験者数387名、合格率は63.31%との事。
平均点は
応用数学 : 66.77
機械学習 : 64.91
深層学習 : 55.51
とのこと。

平均点は同等なのに、合格率は第一回よりも下がっていますね。合格基準が厳しくなってるのかな。

その他の情報はこちらから。

(2020.03.11追記)

通算4回目のE資格試験、結果が公表されたようです。
受験者数は1042人、合格率は68.04%との事。
平均点は
応用数学 : 72.04%
機械学習 : 58.89%
深層学習 : 59.69%
とのこと。

合格率は68%なので、60点くらいを取れていれば十分合格できるラインという事ですね。

今回はシラバスが改訂されて一発目という事なので、対策も大変だったのかなと思います。一方でこのテストはそもそも、変化の早いDLの技術に追従するためにシラバスは頻繁に改訂する事が挙げられており、そのコンセプトには大いに賛同できます。シラバスを追うだけで、最新のDL技術にある程度追従できるのも、個人で勉強している身としては魅力的ですね。

E試験、シラバスが改訂されました

2019年2期目のE試験 (8/31試行) が終了しました。
今回の受験者数は前回の倍近く、670名との事。
着実に注目度が上がっております。
日本はAIの領域で世界に対して後手に回っているとの事ですが、この盛り上がりが続いていくといいですね。

次回、2020年2月22日に予定されているE資格試験から、シラバスが変更となるようです。
もともと、発展速度の速いAIの領域にマッチするために、E資格試験合格といえども、何年の試験に合格したかで区別をするそうです。
という事は、出題内容も年々変わっていくのが当然であり、シラバスが改訂されるのも初めから予定されていた事、という事になります。
勉強する方としては微妙なところですが。

新しいシラバスはこちら
これまでのシラバスはこちら

さて、どこが変わったのでしょうか。

応用数学には変更ありません。
2019年2期目のE資格試験の平均点はそれぞれ、応用数学72.04%、機械学習58.89%、深層学習59.69%とのことです。
応用数学は比較的難易度が低い事が分かります。
おそらくはひねった問題は出題されず、基本的な事項をしっかりとおさえておこうよ、という趣旨なのではと思います。
大変共感できます。

機械学習は下記の項目が削除されています。
最尤法推定 – 最尤法の特性
深層学習の発展を促す課題 – 局所一様と平滑化

シラバスから削除項目があるのは親切ですよね。
項目としては残しておいて、試験には出題しなければいいだけなのに。
これまで意地悪な試験ばかり受けて来た私としては、何か裏があるのではと勘ぐってしまいます。

深層学習は削除の項目と追加の項目があります。
[削除された項目]
コスト関数 – 条件付き統計量の学習
隠れユニット – その他の隠れユニット (RBF, ソフトプラス, Hard)
条件付き最適化としてのノルムペナルティ
正則化と制約不足問題
パラメータ拘束とパラメータ共有
学習と純粋な最適化の差異 – 経験損失最小化
学習と純粋な最適化の差異 – 代理損失関数と早期終了
ニューラルネットワーク最適化課題
二次手法の近似
ランダムあるいは教師なし特徴量
画像認識の有名なモデル (“深層学習の適応方法”の項へ)
画像の局在化、検知、セグメンテーション (“深層学習の適応方法”の項へ)
エコーステートネットワーク
自然言語処理とRNN

[追加された項目]
最適化戦略とメタアルゴリズム – Layer正規化
– Instance正規化
GAN – Conditionnal GAN
深層学習の適応方法 – 画像認識 – MobileNet
– 画像認識 – DenseNet
– 画像の局在化・検知・セグメンテーション – FasterR-CNN, YOLO, SSD
– 自然言語処理 – WordEmbedding, Transformer
– Text to Speech – WaveNet
– スタイル変換 – pix2pix
– その他 – AlphaGo
開発・運用環境, ミドルウェア, 軽量化, 高速化技術
– 深層学習ライブラリ
– 軽量化技術 – 量子化, 蒸留, プルーニング
– 分散処理 – モデル並列, データ並列
– アクセラレータ – GPU

あまり使われなくなった技術的要素は削除。
新しい技術は追加。
特に軽量化技術・分散処理あたりが目新しい項目という事になりますね。

これは良い。シラバスを見えれば、新しい技術として、我々が押さえておかなくてはならない技術が明瞭になります。
AIはどんどんと実用化されてきています。
モデルを個人PCやスマホにデプロイ・実装するにあたっては軽量化は必須です。
一方で私が取り組んでいるような、AIの可能性に関する研究分野においては、軽量化技術はまだまだ必要なさそうですが。。。
とは言え、最先端の技術を勉強する事で、何かヒントが見つかるかもしれません。

機械学習 – 機械学習の基礎 – 教師あり学習アルゴリズム

【ロジスティック回帰分析 (Logistic regression)】
多変量解析の一種。
ある現象\(X\)の発生確率\(p(X)\)を、ロジスティック関数で回帰した分析法です。
ロジスティック関数は
\( y= \frac{1}{1+\displaystyle \exp(-r)} = \frac{1}{1+\displaystyle \exp[-(b_1x_1+b_2x_2+…+b_ix_i+b_0)]} \)
のような形をしています。シグモイド関数とも呼ばれます。0-1の値を取る、単調増加関数です。
目的関数\(y\)は今回は確率なので発生確率\(p(X)\)で表します。
これを変形して、
\( p(X) = \frac{1}{1+\displaystyle \exp[-(b_1x_1+b_2x_2+…+b_ix_i+b_0)]} \)

\( 1-p(X) = \frac{\displaystyle \exp[-(b_1x_1+b_2x_2+…+b_ix_i+b_0)]}{1+\displaystyle \exp[-(b_1x_1+b_2x_2+…+b_ix_i+b_0)]} \)

\( \frac{p}{1-p(X)} = \displaystyle \exp(b_1x_1+b_2x_2+…+b_ix_i+b_0) \)

\( \displaystyle \ln \frac{p}{1-p(X)} = b_1x_1+b_2x_2+…+b_ix_i+b_0 \)

となります。bは偏回帰係数、xは説明変数と呼ばれます。

説明変数を用いて最小二乗法でbを決めると、発生確率をモデル化する事ができるようになります。

ロジスティック関数は目的変数が2値である、二値判別問題に用いられます。

機械学習 – 機械学習の基礎 – 能力、過剰適合、過少適合

[機械学習の流れ]
1. 訓練データを用いた学習
2. 訓練誤差の算出 (Training error)
3. 新しいデータの入力
4. 汎化誤差の算出 (Generalization/Test error)

一般的な最適化は2を小さくする事
機械学習は4を小さくする事

汎化誤差を最小化するために、
1. 訓練誤差を小さくする事
2. 訓練誤差と汎化誤差の差を小さくする事
を同時に行う。
1が不十分な場合を過少適合
有限の訓練を繰り返しすぎて、2が乖離してきた場合を過剰適合という

2を最小化するために、敢えて1を最小化せず、早めに訓練を終えてしまう場合もある(早期終了)
過剰適合を起こさないように正則化項(Regularizer)を導入する場合もある
重み減衰(Weight decay)を用いた正則化が一般的
2次のノルムを用いた正則化 : \(L^2\)正則化 (リッジ回帰、ティホノフ回帰)
1次のノルムを用いた正則化 : \(L^1\)正則化 (LASSOモデル)
\(L^1\)と\(L^2\)の和を使用したものがElastic Net

ちなみにスパースモデリングとは、すかすかモデリングという意味で、少ない情報から全体像を的確に表現するモデリングの事を意味するそうです。

機械学習 – 機械学習の基礎 – 学習アルゴリズム

[タスクT]
解決したい、求めたい目的
分類、回帰、転写、翻訳、構造出力、異常検知、合成とサンプリング、欠損値補完、ノイズ除去、密度推定など
学習そのものはタスクではない点に注意

[性能指標P]
タスクをどのくらい達成できているかを測る指標
テスト集合を用いて評価
誤差率 (誤った出力を生成する割合) = 期待0/1損失 (0が正しく分類、1が誤って分類)

回帰問題の性能指標は\[R^2\]などが良く使用される

[経験E]
データ。機械学習においてはデータの事
教師あり学習と教師なし学習がある

Goodfellow著、深層学習、第五章によりますと、「コンピュータプログラムは、性能指標Pで測定されるタスクTにおける性能が経験Eにより改善される場合、そのタスクTのクラスおよび性能指標Pに関して経験Eから学習すると言われている。」との事です。

タスクTとか言われると「は?」てなりますが、整理してみるとほぅ…となりますね。
E試験ではタスクTについて、どんな設問が出るのだろう・・・

ところで、この定義であれば良くなれば学習、改善しなければ学習とは言わない事になります。以前高校の生物の教師に、「進化」の反対は「退化」ではなく、「進化しない事」だと習った記憶があります。突然変異により今より不利な形質に移行したとしても、それは退化ではあるが進化でもあるそうです。学習の場合は、常に良くならなければ学習とは言わないようですね。
…まあ、そこは大して重要ではありませんが…

応用数学 – 情報理論

[自己情報量]
\( I(x)=-\ln P(x)\)
\(\log \)を自然対数と常用対数で区別していない教科書がありますが、自然対数で正しいようです(どっちかにして欲しい)。
起こりやすい事象ほど情報量が少なく、起こりにくい事象ほど情報量が多い。
(意訳 : 珍しい事象には”意味”がある。)

[平均情報量(エントロピー)]
\( H(x)=-\Sigma P(x)\ln P(x)\)
エントロピーは常に非負の値をとる。
決定的な分布のエントロピーは低く、一様分布に近い分布のエントロピーは高い。

[カルバックライブラー]
\( D_{KL}(P||Q)=-\Sigma _i P(x)\ln {P(x)}{Q(x)}\)
2つの確率分布がどのように異なるかを知る指標。
非負である。PとQが同じ分布であれば0になる。

応用数学 – 確率・統計 – 一般的な確率分布

[ベルヌーイ分布]
確率関数 : \( f(k;p)=p^k(1-p)^{1-k} \)
期待値 : \( E(X) = p \)
分散 : \( V(X) = p(1-p) \)
結果が\(k=0\)か\(k=1\)である事象を表した分布。

[二項分布]
\( f(k)=p^k(1-p)^{n-k} \)
\( E(X) = np \)
\( V(X) = np(1-p) \)
互いに独立したベルヌーイ試行をn回行った時の確率分布。
\( n=1 \)だとベルヌーイ分布と等しいですね。

[マルチヌーイ分布]
\( f(k)=\frac{n!}{x_1! … x_k!}p_1^{x_1}…p_k^{x_k} \)
\( E(X_i) = np_i \)
\( V(X_i) = np_i(1-p_i) \)
多項分布。二項分布とは違い、各試行の結果はk個の値をとり、それぞれの値を取る確率も個別に異なる。

[ガウス分布]
\( f(x)=\frac{1}{\sqrt{2\pi \sigma ^2}} \exp \left( -\frac{(x-\mu)^2}{2\sigma ^2} \right) \)
\( E(x)=\mu \)
\( V(x)=\sigma ^2 \)
正規分布。\( \mu =0\)、\( \sigma ^2=1\)の時は標準正規分布と呼ばれる。
独立な同一の分布に従う確率変数の平均の分布は、元の分布の形状に関係なく正規分布に収束する(中心極限定理)。
\( \pm 1\sigma\)以下の範囲に含まれる確率は68.27%
\( \pm 2\sigma\)以下の範囲に含まれる確率は95.45%
\( \pm 3\sigma\)以下の範囲に含まれる確率は99.73%

[ポアソン分布]
\( f(k)=\frac{\lambda ^k}{k!}\dot e^{-\lambda} \)
\( E(x)=\mu \)
\( V(x)=\mu \)
与えられた時間中に平均\(\lambda \)回発生する事象が、ちょうど\(k \)回発生する確率。
\(\lambda \)が十分大きいならば、平均\(\lambda \)、標準偏差\(\sqrt{\lambda} \)の正規分布はポアソン分布の近似になる。

二項、ベルヌーイ、ポアソンは離散分布。
正規分布、t分布は連続分布。

応用数学 – 線形代数 – 特異値分解

最も広く使われる行列の分解方法は二つ — 固有値分解と特異値分解。

[固有値分解]
\( {\it Av} = \lambda {\it v} \)
\( {\it v} \)が固有ベクトル、\( \lambda \)が固有値。\( {\it A} \)は正方行列。

\( \Lambda \)を\( n\)個の\( \lambda \)を対角に配置した対角行列とし、\( {\it Q}\)を\( {\it A} \)の固有ベクトルから成る直交行列とすると、
\( {\it AQ} = Q\Lambda \)
であるので、右から\( Q\)の逆行列をかければ、
\( {\it A} = Q\Lambda Q^{-1} \)
となる。\( {\it A}\)をk乗する際は
\( {\it A}^k = Q\Lambda Q^{-1}Q\Lambda Q^{-1}…Q\Lambda Q^{-1} = Q\Lambda ^kQ^{-1} \)
となる。\( \Lambda \)は対角行列なのでk乗が計算しやすいため、\( {\it A}\)のk乗が比較的容易に計算できる。

[特異値分解]
任意の行列をユニタリ行列と対角行列に分解する。
\( \it{A=U\Sigma V^*} \)
\( \it{\Sigma}\)の対角成分で0でないものを特異値という。

– ユニタリ行列 : \( {\it U^* U} = {\it UU^*} = {\it I} \)
\( \it I\)は単位行列、\( {\it U^*}\)は随伴行列 (\( \it {U^*} = \it{\bar{U^T}} \))

固有値分解は正方行列のみ。特異値分解は長方行列にも定義可能。
\( \it{A} \)が対称行列であれば\( \it{A} \)の固有値と特異値は一致する。

E資格試験対策 – 教科書

JDLA認定 E資格試験対策のための教科書です
JDLAからはいくつか推薦図書が提示されていますが、私は下記の本を買いました

Ian Goodfellow著
深層学習 (Deep learning)
ASCII dwango

近くの書店に在庫がある事を確認して出かけていったのにありませんでした
店舗にある在庫検索マシーンで再度検索すると在庫ありになっていましたので、秒速で売れた事になります(予測)

和訳版ですので、ところどころ読みにくいところがあります
また専門的すぎて(細かすぎて)実装するだけであればここはあまり詳しくなくてもいいのでは?と思うところもあります
一方でこれを一通りやっておけば、E資格で60点とるくらいの情報は十分得られると思いますので、受験するには必携かと思います

Deep Learningのモデルを実装するには、こちらの本も定番です。

斎藤 康毅 著
ゼロから作るDeep Learning, Pythonで学ぶディープラーニングの理論と実装
O’Reilly

サンプルコードもGitHubからダウンロード出来るようになっています。この本に書いてある通りに読み進め、手を動かして実装していけば、一通りのディープラーニングモデルが構築できます。素晴らしい。

ディープラーニングの凄いところは、特徴量やモデルの構築まで機械に学習させる事でユーザーは入力と教師データさえ用意すれば何となく動くものが作れてしまう事ですよね。
しかしながら、これを現場でいかに活かして行くかは、まだまだ一筋縄ではいかないようです。