雑草SEの備忘録

東大を卒業し、SEとして働くことになった。備忘録的に作業を綴る。

JDLA(日本ディープラーニング協会)のG検定(ジェネラリスト検定)の対策

去る2023年5月13日(土)にG検定(ジェネラリスト検定)受けました。在宅で受験でき、受験時間は2時間です。

合格発表は、5月29日以降なので、合格まで3週間ほどかかります。この記事を書いている現時点では、合否はわかりませんが、どのように対策したかを紹介したいと思います。

<5月29日追記>
無事合格していました。

合否結果

この試験は、在宅で行うものということもあり、試験中になんでも参照することができます。参考書を見てもいいですし、もちろん、インターネットで検索することもできます。私が受験した試験では、191問あり、120分間に解くことを考えると、1問あたり、37秒程度しか時間を使うことができません。過去には200問超あったということもあるので、1問ずつ丁寧に検索していては、時間が足りなくなってしまいます。従って、丸腰で挑むのは得策ではありません。勉強の仕方は、一般的な試験対策と大きく変わらないのですが、以下のようになります。

  1. テキストを一通り読む(章末問題も解く)
  2. 間違った問題を再度解く
  3. 模擬問題を解く
  4. 間違った問題に対して自分なりに理解を深め、チートシートを作る
  5. 別の模擬問題を解き、間違った問題を復習、チートシートを拡充する

それでは、一つずつ説明していきましょう。

1. テキストを一通り読む

人によってはいきなり問題を解いた方がいいという人もいますが、この分野において全く知識のない方は、問題文の意味すらよくわからなく、早々に挫折する可能性があります。まずは、テキストを読んで、完璧である必要はないので、概要を把握しておくといいと思います。そうすることで、問題文を読んだ時に、回答はできなくても、そういえばそういう話がテキストに記載されていたなというのが認識でき、ここをしっかりと理解しておく必要があるんだなという気づきにつながります。

テキストについては、初めての方は、公式テキストから読むと良いと思います。ただし、Twitterでもつぶやかれているように、公式テキストに記載していることの中からのみ出題されるわけではありません。この本に閉じることなく、他の本やインターネットでの最新のAI動向などをチェックしておく必要があります。

深層学習教科書 ディープラーニング G検定(ジェネラリスト)公式テキスト 第2版

私の場合、G検定は第1回の前から存在は知っており、テキスト自体は第1版の時に読んでましたので、今回は、こちらのテキストを読みました。

ディープラーニングG検定(ジェネラリスト)最強の合格テキスト[明瞭解説+良質問題]

ただし、この緑本は少し文章がわかりにくいと思います。 例えば、CHAPTER4.1から4.2にかけて、物体検出についての記載があるのですが、「バウンディングボックス」「関心領域(ROI)」「物体候補領域検出(Region Proposal)」「Selective Search」についての説明があるのですが、それぞれの関連についてがわかりにくい。もちろん、細かく読んでいったり、インターネットで調べたり他の参考書を読むことで理解が深まりますが、この本はどこかはぐらかされた印象を受けます。もともと別々で記述した文章を章立てを整理して繋げ合わせたことで、それぞれの文章がうまくつながったように感じなくなっているのではないかと推察しています。 しかし、一通りをあまり深入りすることはせずに概要を把握するには非常に良い本だと思います。

2. 間違った問題を再度解く

1において、テキストを一通り読み、章末問題も解いたならば、もう一度間違った問題を解くことで、知識の定着を図りましょう。 ここで、問題を解く際に私が行なっていることを紹介します。問題を解く際には、ちょっと自信のない問題には△、まったくわからない場合は、レ点チェック(×とかでも良い)をしておきます。ちょっと自信のない問題でも、正解してしまうと、解説文を読まなかったり、復習したりしないということが起こり得ますので、改めて理解を定着させる、復習の際にもう一度解くことができるようになります。 このように、問題を解いている時にも「自信がない問題」「全くわからない問題」をチェックしておくことで、問題を解いて採点をしたあと、問題は次の4種類に分類されることになると思います。 A. 自信を持って正解した問題 B. 自信はなかったが正解した問題 C. 合っていると思っていたが間違えた問題 D. わからなくて間違えた問題 このうち、「A. 自信を持って正解した問題」以外はきちんと復習する必要があります。「B. 自信はなかったが正解した問題」に関してもどこで自信がないと思ったか、例えば、選択肢の中にGAP(Global Average Pooling)という単語があって、それについてきちんと自分で説明することができるかということを確認していきます。正解したからOKという様にはしないことが大切です。 「C. 合っていると思っていたが間違えた問題」に関しても分析が必要です。私の場合よくあるのが、「適当でないもの」を選べという問題なのに「適当なもの」を選んでしまったというケース。単純な問題の読み間違えなのですが、選択肢を読んで「適当なもの」なのに「適当じゃない」と認識してしまったからこそ間違えてしまったとも言えるので(選択肢を読めば、「あれ、適当なものが複数あるぞ」と思うので気付ける)、理解が浅いことに起因した間違いであるといえます。

3. 模擬問題を解く

テキストを一通り読み、章末問題も解いて間違いの復習をしたあとは、早速、模擬問題を解いてみるましょう。その際は、しっかりと2時間、時間を測って解くことをお勧めします。2時間ぶっ続けで解いていると途中で集中力が切れます。その時に再度集中するために自分がどうすればいいか(ストレッチする、コーヒーを飲むなど)ということを把握する必要がありますし、体力的にどのくらいきついのかというの把握することは実際の試験の臨む上で重要です。

例えば以下の二つの本(緑本は再掲)には、模擬試験がついてきます。最短突破 ディープラーニングG検定(ジェネラリスト) 問題集 第2版に関しては、パソコン上で回答する形式になっているので、紙媒体ではなく、画面で解く練習にもなります。

ディープラーニングG検定(ジェネラリスト)最強の合格テキスト[明瞭解説+良質問題]

最短突破 ディープラーニングG検定(ジェネラリスト) 問題集 第2版

4. 間違った問題に対して自分なりに理解を深め、チートシートを作る

模擬問題を1回終わったら、間違えたところの復習を行います。一回の模擬問題の中でも、近しい事項について問われているケースもあり、模擬問題を一通り解くことで、例えば、オートエンコーダ(積層オートエンコーダ、変分オートエンコーダ含む)に対する理解が浅いなとか、特許法についての認識が甘いと言ったことがわかってきます。それらある程度の一かたまりを自分の中で制して、チートシートを作りましょう。私がやっているのは、A4のコピー用紙の長手を半分に折り、見開きにして、ボールペンで3色用いて整理していきます。そして、この試験の場合は、裏は使わずに、片面だけに記載します。そうすることで、試験の時にチートシートの全体を一度に把握することができます。試験を受けた時の写真を添付しますが、この様にパソコンの周りにチートシートを並べて試験に挑みました。このチートシートは自分が間違った問題を元にしたものなので、網羅性はありませんが、自分の苦手をまとめた紙になります。人間はどうしても忘れる生き物ですので、最悪忘れたとしてもチートシートに記載があると思えば、心を落ち着かせることができます。また、範囲のかなり広い試験ですので、細かな違いまで把握しておくのは非常に難しいですので、自分が記憶するのが難しいなと思う部分を中心にチートシートに記載していきましょう。

受験時のデスクの写真
図1.受験時のデスク

5. 別の模擬問題を解き、間違った問題を復習、チートシートを拡充する

一度チートシートを作り終わったら、そのチートシートを利用して別の模擬問題を解いてみてください。前回の模擬問題で理解が不十分なところはチートシートに記載したはずなので、チートシートを見れば、全問解けるはずです。しかし、実際はそうはならないと思います。理由はいくつかあります。一つは、問題集によって模擬問題の出題範囲や出題の深さが異なりますので、ある問題集よりも別の問題集の方がより細かいことを問われることがあります。また、テキストや問題集によって、説明の言い回しが異なります。ある問題集で理解したと思っても別の問題集で異なる言葉で説明されると違った印象を持つことになり、間違うことがあります。 このことから言えることは、テキストや問題集は複数冊手に入れておくと良いということです。同じ事項について、複数の説明を読んで把握することで、対象についてより深く理解することができます。あるいは、あるテキストで腹落ちしなかった場合でも他のテキストであればすっと頭に入ってくるということもあります。そのため、複数ののテキストや問題集で勉強すると良いでしょう。同じ問題集をやったほうがいいという意見もありますが、私は、複数の問題集をこなすことをお勧めします。

以下に私の場合の問題集を取り組んだ順を紹介します。

テキスト・問題集 説明
テキストおよび章末問題を読んで模擬問題を解く
問題を解き、模擬問題を解く
チートシート拡充
問題を解き、模擬問題も解く
チートシート拡充
これまでに間違えた問題(レ点チェックや△印の問題)を改めて確認する

最後に、それぞれの本の感想を紹介します。

テキスト・問題集 説明
全範囲の概観を掴むのにはちょうどいいが、説明がわかりにくいところがあると思います。多少冗長でもいいのでわかりやすく書いて欲しい。加えて、詳細な関係性をぼかしてかいてあるところもあり、その辺りが気になりました。最後の模擬試験も似た様な事項からの出題がちらほらありました。
3冊の中で一番わかりやすかったと思います。一方で、問題はやや易しいのかなという印象。ただ、基本事項をしっかりと理解することができる解説になっています。おすすめです。
Amazonのレビューにもある通り、問題集であるが、テキストの要素がある。問題文に色がついて強調されているので、G検定の本番に即した問題だと思って取り組むというよりも、文章読むだけでは頭に残らないので、問題を解くことによって頭に残る様にしたいという人向け。一方で、内容が細かい部分があり、この本を作っている人はこの分野に精通しているんだろうなという印象を受ける。また、模擬試験は、「正しくないものを選べ」「適切でないものを選べ」という問題が多いので、非常に疲れる。

fvmを利用してバージョンを管理しつつflutterプロジェクトを作成する

flutter create すればプロジェクトが立ち上がるが、fvmを利用したときにどうすればいいかわからなかったので、メモ。

# ディレクトリの作成
mkdir flutter_sample
# 移動
cd flutter_sample
# 利用するflutter versionの指定
fvm use 2.10.4 --force
# プロジェクトの作成
fvm flutter create .

このとき、ディレクトリ名をflutter-sampleなどとハイフンを利用するとパッケージ名として使えないと怒られるので注意。 (引数に指定すればいいと思われる)

ActiveRecordで任意の配列の順番で並び替えする方法

ActiveRecord(というかSQL)において、idや特定のカラムの指定順に並べ替えるのは容易いが、任意の配列の順番にならべたいときがある。その場合の方法について記載する。

まずはデータの準備から。以下のようにplansテーブルにレコードを追加したとする。

Plan.create!(key: 'aaaaaa')
Plan.create!(key: 'bbbbbb')
Plan.create!(key: 'cccccc')
Plan.create!(key: 'eeeeee')

bbbbbb→cccccc→aaaaaa→eeeeeeの順番で並び替えたいとする。
まずは配列を準備。

order_plan_keys = %w[
  bbbbbb
  cccccc
  aaaaaa
  eeeeee
]

以下のようにActiveRecordを組み立てる。

Plan.where(key: ordered_plan_keys).order(
  ordered_plan_keys.map { |key| "\"plans\".\"fee_plan_code\" = '#{key}' desc" }.join(", ")
)

S3のbucketにアクセス制限しつつ、cloudfrontで公開する

最初に

S3にhtmlなどの資産をおき、CloudFrontで公開するという方法は一般的によく行われる方法。検索するとS3を公開する設定もよく見かけるが、S3を一般に公開せずに行う方がセキュリティ的に安心なので、Origin Access Identity(OAI)用いて設定する方法を自分の備忘録として、紹介する。 OAIについては、以下も参照ください。 docs.aws.amazon.com

AWSコンソール上での作業

  1. CloudFrontのDistributionsの作成 Create Distribution→Get Startedの順にクリック f:id:smartenergy:20210317112024p:plain

  2. Origin Domain Nameを選択 S3のバケットが一覧となり、選択できる。 f:id:smartenergy:20210317112118p:plain 右下のCreate Distributionをクリック f:id:smartenergy:20210317112755p:plain

  3. Origin Access Identity(OAI)をCloudFrontのDistirbutionに紐づける Origin Domain Name and Pathの左側のチェックボックを選択し、Editをクリック f:id:smartenergy:20210317112925p:plain

    • Origin Access Identity(OAI)を新規に作る場合 Create a new Identityをクリックし、Commentはデフォルトのものでも構わないし、自分がわかりやすい名前を設定しても良い。
    • すでにあるOrigin Access Identity(OAI)に紐づける場合 Use an Existing Identity をクリックし、Your Identitiesを選択。 f:id:smartenergy:20210317113046p:plain
  4. ブロックパブリックアクセスとバケットポリシーの修正

  5. S3のブロックパブリックアクセスとバケットポリシーを修正する。バケットポリシーは、以下のように設定する。Origin Access Identityは、Origin Access Identity で確認する。 f:id:smartenergy:20210317114841p:plain
{
    "Version": "2012-10-17",
    "Id": "Policy999999999999",
    "Statement": [
        {
          "xxx": "xxxx"
        },
        {
            "Sid": "2",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity ABCDEFG1234567"
            },
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::your-bucket-name/*"
        }
    ]
}

GitHubのtagを個別/一括で削除するコマンド

localのtagの削除

git tag -d tag_name
# tag_nameは削除したいタグ名。

remoteのtagの削除

git push origin :tag_name
# tag_nameは削除したいタグ名。

localのtagを一括で削除するコマンド

git tag | while read line
do
  git tag -d $line
done

remoteのtagを一括で削除するコマンド

git tag | while read line;
do
   git push origin :$line
done

gitのcommitのハッシュ値からmerge commitを取得する

 1. pipでgit-get-mergeをinstall(事前にpythonのインストールが必要)

pip install git-get-merge

 2. commitのHash値で調査

git get-merge <Hash値>

 3. ベースのブランチ名はmasterだが、変更したい場合は

git get-merge <Hash値> <branch名>
# eg)
git get-merge <Hash値> develop

 GitHubのREADMEをよく読む。

pythonのpathが通ってないがpython3のpathは通っている場合

  • macのpythonを使っている場合など。
$ python3 -V
Python 3.9.6

$ which python3
/usr/bin/python3
$ python3 -m pip install git-get-merge
$ python3 -m pip show -f git-get-merge
~略~
Files:
  ../../../../../Caches/com.apple.python/Users/hogehoge/Library/Python/3.9/lib/python/site-packages/get_merge/__init__.cpython-39.pyc
  ../../../bin/git-get-merge
  get_merge/__init__.py
  git_get_merge-0.3.dist-info/INSTALLER
~略~

.zshrcなどに以下を追加(Library/Python/3.9/binの箇所は、上記コマンドを確認の上指定。

export PATH=$PATH:$HOME/Library/Python/3.9/bin