見出し画像

E資格取得に向けて(その2)

いよいよ12月も下旬。クリスマスは目前、大晦日もカウントダウンです。例年より忘年会の数も少ないのに、やっぱりバタバタと過ぎていきます。心穏やかに年末を迎えられるかは、今週末が勝負な気がします。

さて前回は、E資格取得に向けて、Study-AI株式会社のラビット・チャレンジというプログラムを受講しているとお話ししました。ラビット・チャレンジでは、本格的に学びをスタートさせるために、まずはステージ0としてスタートテストに合格する必要があります。これは難なくと言いたいところですが、実際にはヒヤヒヤしながらクリア。

本格的な学びの入り口であるステージ1は、応用数学。大学でさぼったつけを実感しつつ、何とかクリアしました。学習レポート作成にも一苦労。ただ、結果的にQiitaを使い始めるきっかけになったのは良かったと思います。

ここからが本番のステージ2

ステージ1をクリアすると次はステージ2。ステージ2は機械学習。ようやくAIについて学ぶことができます。深層学習は基本的には機械学習がベースになっていますから、機械学習をしっかり理解しないと深層学習には辿り着けません。

一方で、機械学習をしっかりと理解するためには、引き続き応用数学を避けて通れません。機械学習をしっかりと理解するためこそ、まずはステージ1で応用数学をみっちりと学んだということになります。しかし現実的には、ステージ1での学びが定着したとは言い難く、ステージ2でも線形代数と微分に苦しむことになりました。機械学習の学習レポートがこちらですが、数式が普通に出てくるのがわかるかと思います。

一方で、機械学習になって楽になったとは言えませんが、楽しくなったのは、実装の演習が始まったこと。サンプルのコードが提供されており、最小限はこれを実行させればいいのですが、それでは学びになりません。私は、コードを読みこなして、とにかく徹底的にコメントを付け、可能であれば自分なりに改善するようにしました。

例えば、こんな感じ。コードのままだと行列の形がわかりにくいので、一つ一つ確認してコメントに書くことで、動きをしっかりと理解するようにしました。

# 誤差逆伝播
def backward(x, d, z1, y):
    # print("\n##### 誤差逆伝播開始 #####")
    # gradは辞書型
    grad = {}

    W1, W2 = network['W1'], network['W2']
    b1, b2 = network['b1'], network['b2']

    # 出力層でのデルタ; ∂E/∂y、MSEの導関数
    # d, y, delta2はスカラー
    delta2 = functions.d_mean_squared_error(d, y)
    # b2の勾配、∂E/∂b2、grad['b2']もスカラー
    grad['b2'] = np.sum(delta2, axis=0)
    # W2の勾配、∂E/∂W2
    # z1が(10,)、z1.Tが(,10)なので、grad['W2']は(10,)
    grad['W2'] = np.dot(z1.T, delta2)

    # 中間層でのデルタ、中間層ではReLUを使った
    # delta2はスカラー、W2が(10,)、W2.Tが(,10)、z1が(10,)なので、delta1は(10,)
    delta1 = np.dot(delta2, W2.T) * functions.d_relu(z1)

ステージ2のステージテストは69問中62問正解が求められます。正答率90%ですからラビット・チャレンジに数あるハードルの中ではやや敷居が低め(笑)です。結果は69問中67問正解でクリア。

この段階ではG検定の受験前。G検定向けの勉強も兼ねてとにかく先に進もうということで、ステージテストだけ受かったら、すぐにステージ3の講座に進みましたが、振り返ってみるとこれは微妙な判断でした。正式にステージ2を完了するには、ステージテスト合格だけでなく、学習レポートと実装演習結果の提出が必要なのですが、これを後からやろうとすると、もう一度ビデオ講座を見直したりと結構二度手間になってしまいました。

一刻もはやくステージテストをクリアして、先に進みたいという気持ちもわかるのですが、全体的な効率性を考えると、まず学習レポートをしっかりとまとめ、実装演習も済ませた上でステージテストに臨んだ方が良かったと思います。

ここが山場のステージ3

ステージ2をクリアすると、いよいよステージ3。ここから本丸の深層学習について学んでいきます。ただ、本丸というだけあって、とにかくボリュームが多い。深層学習の講座はpart 1からpart 4まであり、ステージ3は前半にあたるpart 1からpart 3まで。ビデオ講座だけでも17時間分あります。これは1.25倍速なり1.5倍速で進めることはできますが、前述の学習レポートや実装演習もあります。

機械学習での反省を踏まえ、ビデオ講座の視聴と学習レポートの作成を同時に進めたため、とにかく時間がかかります。とはいえ、ただざっとビデオを見るだけよりも、同時並行で学習レポートを作成する方が、回り道のようでも、理解は深まったように思います。もっとも、本当にどこまで理解できているかというと、E資格の試験本番までにまだまだ補強は必要なレベルですが。

参考までに、深層学習の学習レポートはこちら(part 1part 2part 3)です。どれもこれもがっつりというのがお分かりいただけるかと。

機械学習での実装演習はほんのちょっとという感じでしたが、深層学習に入ると、実装演習のボリュームも格段に増えます。自分で試行錯誤することで、様々な気付きが得られました。学習率のようなハイパーパラメーターの設定や、勾配降下法のアルゴリズムの選択次第で結果が大きく変わるというのは大きな発見でした。これまで慣れ親しんできたいわゆるロジック系のコードであれば、Aという入力があれば必ずBという結果が出たわけですが、AIの場合にはそう単純ではなく、最適な結果を得るためにはかなりの試行錯誤が必要になるということかと思います。

ハイパーパラメーターやアルゴリズムを変えながら試行錯誤
これはかなり優秀

ステージ3のステージテストは103問中92問正解が求められます。正答率90%は、引き続きやや敷居が低めな方ですが、103問という怒涛の量に息も絶え絶え。一発合格のために慎重を期した結果、午後から始めて終わったのは夜中(笑)。97問正解で無事クリアできた時はホッとしました。しかし本番の時にはさすがに正答率90%は求められないものの、ほぼ同様の100問程度を120分で解き切る必要があります。本当にできるんでしょうか…。(続く)



この記事が気に入ったらサポートをしてみませんか?