１週間で間に合わせる(間に合わせた）G検定チートシート

#記事概要
#####就職氷河期世代の業界未経験者がエンジニアデビューした最初のタスクとして【準備期間一週間でG検定に合格】を目指します。

いい歳で業界未経験ですが一念発揮して2020年3月に新人エンジニアとして転職しました。
何かやらなきゃな、でも出来るかな。。。と不安いっぱいで申し込み締切日朝4時に寝ぼけながら申し込みの手続きをしました。テキスト自体は3月から読み始めていたのですが、本記事は申込みから書き始めて実践したので実質準備期間が1週間です。
ほんとに受かるのか？と不安を抱きながら必死で本気を出した1週間としてご理解ください。

本記事はそのために作ったメモ的チートシートを再校正した物です。
※個人的な学習メモのため間違いもあります。鵜呑みにせずにファクトチェックしましょう。

本記事はG検定自体の内容よりも**新しいことを学ぶ時の手法**に焦点を当てています。
全く**未経験の分野でも通じる効率的な学習法**の参考としていただければ幸いです。

##学習の勘所
新しいことを学ぶ際には**ボキャブラリ**を重視します。徹底的に**キーワードを頭に入力**しましょう。その場で**解らなくても良いので無理だと諦めずとにかく言葉を入力**してください。間違ってても後から入ってくる情報が追いつけば補正されます。まずはこれから入力される情報を受け止める網として働くボキャブラリを構築することで意味ネットワークが構築されていきます。理解できない言葉を入力することは大変なストレスが伴いますが、学習行為自体をストレスのない継続可能なコンフォートゾーンにすることが言葉に慣れる過程です。
※ボキャブラリは語彙という集合、キーワードは単語と言語学的には興味深い説明がありますがここでは割愛します。

**私の学習法**　(独特の持論なので参考）
<details><summary>言葉を記憶のハンドルとする</summary>
認識は言葉の相関関係です。これは機械学習でいう特徴量の相関関係を重み付けする過程と同じことで、学習効率を上げるためにはまず言葉その物を自分の認識中に配置してオントロジーを補い、言葉はそれを取り扱うハンドルとすることで認識が進みます。
</details>
<details><summary>全体を俯瞰する</summary>
前項と関連しますが、取り組む対象の全体像を常に意識して相関関係を作り上げます。
認識とは言葉同士が論理的につながることです。
</details>
<details><summary>存在しない（知らない）概念には名前をつけてしまう</summary>
概念を一言で表す名前は記憶を整理する上でとても重要です。知らない言葉があった時にそれが表す言葉を手繰るのと同様に言葉で抽象化されていない概念を取り扱うために自分なりに名前を付けることも重要です。それが間違っていても、すでに存在する言葉でも後で正せば良いのです。失敗を恐れてはいけません。
</details>

<details><summary>絵で理解する（マインドマップ）</summary>
相関関係は言葉だけではなく言葉同士のつながりを絵の配置で認識することでより理解が進みます。
絵にすることのメリットとして脳の機能が記憶と思考であるとするなら、記憶を絵に出力して置くことで思考だけに注力することができます。（一説には言葉とは画像情報と同意であるとか）
これは思考整理法のブレインストーミングで行われる手法で、出力された記憶を整理するのにこの後にロジックツリー、タギングなどの手法を使って整理していきますが、それらを統合した思考整理手法としてマインドマップがあります。
マインドマップツールの他、私は最近Diagram.netを使ってます。
思考整理初学の方はまずマインドマップの公式スキームを参考にされると良いと思います。
Xmind　https://jp.xmind.net/
diagram.net  https://www.diagrams.net/
</details>


<details><summary>2つ以上の感覚刺激</summary>
これは記憶と感覚刺激は紐付いているというオカルト持論。
通常学習は目からの視覚刺激だけですが、記憶は入力される感覚刺激によって呼び起こされる。
ならば他の感覚刺激と共に入力することで定着しやすくなるという考え方です。
例えば音や動作、発声、味覚や匂いを学習時に与えて印象付けます。（私は独り言が多いとよく言われます。）
</details>

##学習項目
学習法に沿って**まずは全体像**を掴みます。

>G検定のシラバス　
https://www.jdla.org/business/certificate/?id=certificate_No06


##使った学習教材
**ボキャブラリ強化と内容把握**のためテキストを一読
>深層学習教科書 ディープラーニング G検定（ジェネラリスト） 公式テキスト
https://www.shoeisha.co.jp/book/detail/9784798157559
![gkentei_shirobon.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/124539/c4285f44-e6d0-63ed-5171-6161688b44f5.png)

シラバス、テキストと読みきった所感としては
**機械学習について仕組みの概要を理解していて、適切な会話が通じる認識がある**
という程度がG検定が目指すレベルだと感じました。
続いて**理解度把握のため模試**を実施
>G検定模試　http://study-ai.com/generalist/
<img width="165" alt="logo.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/124539/64b734fb-fbce-e9d0-e967-b9af7f69f944.png">

一度目はテキストなどを見ないで実際にテストを実施します。
これで**現在の理解度**と実際のテストでの**時間配分を把握**出来ます。
G検定の出題数は
2020年第一回　226問　120分　
と**一問約30秒程度**で解かなければ成りません。
ここでは理解度を測るものですので時間は無視します。

ここまでで全体像が掴める素地ができました。
模試で**自信が持てなかった部分をメインに学習**します。

##二度目の模試：理解不足のキーワードをリスト化
もう一度模試をしながら一問ずつ正解を確認
**間違ってる設問、少しでも？がついた設問のキーワードはメモ**として残します。
この過程で重点を置く**学習課題が可視化**されるので
各キーワードについてテキスト参照、検索し**自分の言葉で説明**を書きます。

ここで学習を進めていくと実感すると思いますが、
**テキストに載っていない内容も出題**されます。
**常日頃から機械学習のニュース、話題などを追って**キーワードとして拾っておくことも必要です。
また今年は関連法、倫理問題などのウェイトが多い様に思いました。日頃から関連事項に興味を持っていると苦労しないと思います。


<details>
<summary>#G検定チートシート
※以下は実際にメモして学習した内容です。
</summary>
機械学習の手法
教師あり学習、教師なし学習、強化学習と大別できる教師あり学習
データと目的とする変数がセットになっていて、学習することによりデータから目的を導き出すモデル
目的がデータに対して連続値を取るのが「回帰」
データに対して集合を示す離散値になる場合「分類」
+ 線形回帰（回帰）
　アンダーフィッティング
 　- ラッソ回帰(Rasso)（L1正則化　採用から外すパラメータを０にする）
 　- リッジ回帰(Ledge)（L2正則化　過大な寄与パラメータを減衰させる）
 　- ElasticNet（L1,L2両方）
+ ロジスティック回帰（分類）
+ 決定木（分類）
+ ランダムフォレスト（分類）
+ Boosting
+ Support Vector Machine(SVM)
+ ニューラルネットワーク
 - 単純パーセプトロン
 - 多層パーセプトロン（入力、隠れ層、出力の３層まで）
教師なし学習
+ k-means
+ Principal Component Analysis(PCA)
ディープラーニングの手法
+ RestNet 画像分類タスク　CNN
+ VGG16 画像分類タスク　CNN
+ VAE　平均や分散を求める　生成
+ GAE　敵対的生成ネットワーク
活性化関数
+ ReLU関数 Rectified Linear Unit 正規化線形関数
+ tanh関数 Hyperbolic tangent　双曲線正接関数
+ sigmoid関数
+ ステップ関数
強化学習
行動を学習する
行動によって起こる状態を評価し次の行動に反映し、起こる状態を目的（報酬が高い）に近づける
学習の手法（用語）
+ アンサンブル学習　
 　複数の学習機（モデル）を組み合わせて平均を取る
+ 転移学習
　関連する別のタスクで学習し、
　学習済みの特徴、パラメータを利用する事で効率的に対象タスクを学習する
+ マルチタスク学習
　同時に複数の識別問題に対応できるように学習する手法
+ 過学習を避ける目的で汎化誤差を下げるために正則化が用いられる
　正則化とは損失関数の値と共にモデルのパラメータの二乗和を最小になるように学習すること
　パラメータが小さくなり過学習の対策となる
+ ミニバッチ学習
　データをバッチの単位に分割して効率良く学習させること
+ 平均プーリング（最大プーリング、Lpプーリング）
　CNNで使われる手法
データの取扱
+ 学習データの取扱方と重み付けのタイミング
　１．学習に用いるデータは訓練データとテストデータに分けられる
　２．訓練データもいくつかのサイズに分割する。このデータ量をバッチと呼ぶ
　バッチ学習はすべての訓練データを扱う場合（メモリ大）
　ミニバッチ学習は訓練データをn個に分割して学習効率を上げる場合
　オンライン学習は１データ学習する場合（ビッグデータや逐次更新データ向き）
それぞれの学習サイクルで終了時に重み付けを更新する。これをエポックと呼ぶ。
ex.) サンプルデータ１０００、ミニバッチサイズ１０の場合バッチ学習：１回学習で１エポック
　　　ミニバッチ学習：１００回学習で１エポック
　　　オンライン学習：１０００回学習で１エポック
　　　スパースモデリング（スパース性）`
+ スパースとは、英語で「すかすか」という意味。
<details><summary>
スパースモデリングは、あらゆるものごとに含まれる本質的な情報はごくわずか＝すかすかであるという仮定（スパース性）に基づき、入力から出力に対して「どこが本当に必要な情報なのか」を見極め、抽出する。</summary>
ディープラーニングでは多くのデータがあるほど精度は上がるが、実際は無駄なデータ、無関係なデータを多く含んでいたり、そもそもデータ自体が少ない場合それら無関係のデータがノイズとして大きく働くことで精度が出なくなってしまう。
スパースモデリングでは本質的なデータを求めるためには「データ間の関係性を特定する」作業をおこなう。出力を行うとき、スパースモデリングでは入力となるデータそのものに注目するのではなく、入力と出力の関係性を洗い出す。データ同士の関係性に注目することで、入力データ自体の多寡や質は関係なくなり、結果的に必要なデータは少量で済む。</details>
</details>

##受験当日
私は過去問を2回、去年の分しかやっていなかったので出題傾向の偏りが不安でした。
が、**速度を意識して出来る問題をとにかく進めて**気になる問題にチェックマークを入れておくだけにして回答を進めました。
結果全部回答できて残り10分しか残らなかったので、見直しや不安箇所の検索など殆どできなかったです。
**途中で調べ物などしていると高確率で全問回答間に合わなくなる**ので、まずは一気通貫で回答することがおすすめです。

##結論（1週間で受かるのか？）
幸い私は**合格することが出来ました。**エンジニア未経験でありますが機械学習の話題などは気になっていたので**ニュースなどは常にチェック**していたのが功を奏したと思います。ニュースを見ているとはいえ当然その中身については全く踏み入ることなくAlphaGo凄い！と騒いでいる程度です。しかしそういった浅い認識でしたが**幅広い言葉について素地を作っていた**ことが本格的な学習を効率的に受け止める要因になったと思っています。
G検定は全く知見の無い方が1週間で受かるのは流石に無理だと思います。しかし**興味を持って言葉に慣れていれば未経験でも十分にG検定は受かります。**また未経験の分野でも興味を持って言葉に慣れておけばやっていけるという示しなのだと思いました。
**機械学習はこれからどんどん活用されて広がっていく分野**です。G検定はその一歩を踏み出す入り口に立つ事ができる知見を示す有効な資格になるのでしょう。
私は人生においても大きな変化にチャレンジしていてその一歩をG検定＝機械学習という明確な形にできました。
ぜひ私の経験が少しでも皆様のチャレンジを応援できれば幸いです。