JDLA G検定の勉強ノート

> 一言
> - ちゃんと書こうと思いつつ仕事が忙しくてwip状態なのです。時間ができたらちゃんと書きます。（言い訳）


## 何はともあれまずは試験結果
- 合格 ~~（イマドキのベンダー試験でスコアレポートが出ないんマジ意味不）~~
- 2021 #2（7/17開催）を受験しました。

## 学習教材
G検定の勉強って体系的に整理されてる教材がないんですよね...~~（公式テキストも読みづらい）~~

- [深層学習教科書 ディープラーニング G検定(ジェネラリスト) 公式テキスト 単行本(2018)](https://www.amazon.co.jp/%E6%B7%B1%E5%B1%A4%E5%AD%A6%E7%BF%92%E6%95%99%E7%A7%91%E6%9B%B8-%E3%83%87%E3%82%A3%E3%83%BC%E3%83%97%E3%83%A9%E3%83%BC%E3%83%8B%E3%83%B3%E3%82%B0-G%E6%A4%9C%E5%AE%9A-%E3%82%B8%E3%82%A7%E3%83%8D%E3%83%A9%E3%83%AA%E3%82%B9%E3%83%88-%E5%85%AC%E5%BC%8F%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88/dp/4798157554/ref=sr_1_4?dchild=1&keywords=G%E6%A4%9C%E5%AE%9A&qid=1626504330&sr=8-4)
- [徹底攻略 ディープラーニングG検定 ジェネラリスト問題集](https://www.amazon.co.jp/%E5%BE%B9%E5%BA%95%E6%94%BB%E7%95%A5-%E3%83%87%E3%82%A3%E3%83%BC%E3%83%97%E3%83%A9%E3%83%BC%E3%83%8B%E3%83%B3%E3%82%B0G%E6%A4%9C%E5%AE%9A-%E3%82%B8%E3%82%A7%E3%83%8D%E3%83%A9%E3%83%AA%E3%82%B9%E3%83%88%E5%95%8F%E9%A1%8C%E9%9B%86-%E3%82%B9%E3%82%AD%E3%83%AB%E3%82%A2%E3%83%83%E3%83%97AI%E6%A0%AA%E5%BC%8F%E4%BC%9A%E7%A4%BE-%E6%98%8E%E6%9D%BE/dp/4295005665/ref=sr_1_3?dchild=1&keywords=G%E6%A4%9C%E5%AE%9A&qid=1626504330&sr=8-3)
- [G検定 本番困りそうな所まとめ](https://qiita.com/highno_RQ/items/5f4aa73c362477d90169)
- [Quizlet](https://quizlet.com/jp/414273169/g%E6%A4%9C%E5%AE%9A%E6%A8%A1%E6%93%AC%E5%95%8F%E9%A1%8C-flash-cards/)
- [ヤン・ルカンの深層学習講座](https://atcold.github.io/pytorch-Deep-Learning/ja/)
- [Diver into Exam](https://diver.diveintocode.jp/dive_into_exam/3)
- [【資格試験対策】ディープラーニングG検定【キーワード・ポイントまとめ】](https://sik-bug.hatenablog.com/entry/2020/05/30/103038)
- 自分用の勉強ノート
    - 自分用のノートを以下（↓）にまとめましたので、ぜひ参考にしてください！！

## 1. 学習アルゴリズム関連
### 用語
- イテレーション
  - 重みが更新された回数
- エポック
  - 訓練データを何回繰り返し使って学習したかを表す単位
- スパース
  - データの中で、ほとんどが0で、たまに1があるデータ
- ホールドアウト検証
  - 教師データ全てを訓練に用いず、教師データの一部を訓練用、残りをテストデータに使う方法
- kー分割交差検証
  - 訓練データとテストデータの分割を複数回行って、検証する手法。
- 適合率
  - 真と予測した中で、実際に正解した割合。予測の誤判定を避けたい場合に利用する。
  - <b>偽陰性を減らすために採用する</b>
- 再現率
  - 結果が真のデータ内で、正解した割合。つまり真であった割合。予測の見落としを避けたい場合に利用する。
  - <b>偽陽性を減らすために採用する</b>


### ML マシンラーニング 機械学習
- サポートベクタマシン（SVM: support vector machine）
  - データの分類を行う際の手法の一つ。
  - 分類した結果のグループ間の 「マージン」 が最大になるような線を求めるというものである。
    - これにより、出来るだけ汎化性能を高めて、未知のデータを適切に分類しやすくしている。
    - SVMの学習を行う際にはいくつかのパラメータを初期値として設定しておく必要がある。
  - その代表的なパラメータの一つが、「スラック変数」 である。
    - これはグループ分けの際に誤った分類をどれだけ許容するかを決める値である。
  - 線形分離可能ではないデータでも、「カーネル法」を組み合わせることで「決定境界」を求められる。
  - SVMの特徴として、「カーネルトリック」 という計算量を抑え込むテクニックを駆使することがある。
    - これにより、線形分離では分類が不可能なデータセットに対しても、うまくそれを分類することが可能であることが挙げられる。
- サポートベクタマシン（その2）
  - 「マージンの最大化」というコンセプトに基づいて設計されている。
  - SVMには分類問題を上手く解くための工夫が施されている。
    - スラック変数は「一部のサンプルの誤分類に寛容になる」ためのもの
    - カーネル法は「入力となる数値を正規化する」のためのもの
    - カーネルトリックは「内積計算をカーネル関数へ置換え計算量を大幅に削減する」ための工夫である。
      - SVMはカーネル法やカーネルトリックが登場してから人気が高まり、より頻繁に利用されるようになった。
- 主成分分析（PCA）
  - いかに少ない変数で説明力の高いモデルを作るかを考える上で有用な機械学習のテクニックの一つ
    - 複数の観測変数をそれぞれに適切な重み付けをした上で束ね、一つの説明力の高い変数として潜在変数を作りあげるものである。
    - またこのように説明変数の数を減らすことを、「次元削減」 と呼ぶ。
- アンサンブル学習
  - あまり性能が高くないモデルをいくつか組み合わせることによって、経験的に汎化性能を大きくさせる。
  - 具体的な手法としては、バギングやブースティングが代表的である。

### DL ディープラーニング
- ディープラーニングは音声認識の逆過程である音声合成においても利用されている。
- 音声処理
  - 従来、音声合成、あるいは音声認識の分野においては「隠れマルコフモデル(HMM)」 などの統計的手法を用いる。
  - HMMとは、大量のデータを集め、多数のコーパスを用意するもの。
  - 従来はHMMが一般的であった。
  - WaveNet
    -  2016年にDeepMindにより発表されたニューラルネットワークのアルゴリズム
    - は従来に比べて圧倒的に高い質での音声合成に成功し、AIスピーカーが人間に近い自然な言語を話すことなどに大きく寄与している。
- 自然言語処理
  - Word2Vec
    - Google のミコロフ氏外提案した枠組み。これによってこれはある種の意味的な演算が行えることを示した。
  - Seq2Seq（シーケンス2シーケンス）
    - 自動翻訳技術で用いられる。
- DQN
  - 強化学習の分野においてDLと強化学習を組み合わせた深層強化学習も近年脚光を浴びている。
  - 代表的な手法「DQN」は強化学習における行動価値関数を、従来とは異なりCNNに置き換えて近似を試みたモデルである。
  - 有名な事例は、Google 傘下の DeepMind が開発した囲碁対局ソフト 「Alpha Go」 が世界チャンピオンを打ち破ったものが記憶に新しいだろう
- バッチ学習
  - バッチサイズを教師データ全体とする
- ミニバッチ学習
  - バッチサイズを1とする
- オンライン学習
  - 5,0000枚の画像を100マイずつ処理するならばバッチサイズは100、50イテレーションで1エポックと数える。

### GAN 敵対的生成ネットワーク
- 生成ネットワーク,識別ネットワークの二つを競い合わせることで生成モデルを獲得する
- 「この10年で最も面白いアイデア」ヤン・ルカン
- 画像処理で活躍

### CNN 畳み込みニューラルネットワーク
- ResNet
  - 画像分類タスクで用いられるCNNモデルである.
- VGG16
  - 画像分類タスクで用いられるCNNモデルである.
- 5層の畳み込み層と3つの全結合層を持つCNNで、ReLU関数を用いることで、シグモイド関数の問題（＝勾配消失問題）を回避している
- DRAW(Deep Recurent Attentive Writer)
  - Googleが画像生成手法として発表した
  - 生成モデルとして「VAE(Variational Auto Encoder)」を用いて、画像中の各部位に注意を向けながらRNNで反復的に画像を生成するモデルである

### FCN 完全畳み込みニューラルネットワーク
- すべての層が畳み込み層であるモデル。
- セマンティックセグメンテーションを実現するネットワーク。
  - セマンティックセグメンテーション
    - R-CNNのような矩形領域を切り出すんではなく、より詳細な領域分割を得るモデル。
    - 複数人いても全員を1Personと判断する。
  - インスタンスセグメンテーション
    - 1つずつをPerson1、Person2...と判断する。
- 入力画像の画素数だけ出力層が必要

### DNN ディープニューラルネットワーク
- ニューラルネットワークを多層化したものであり,観測データから本質的な情報である「特徴量」を自動的に抽出できる点が特徴である.また,従来の機械学習手法と比べると,「結果の解釈性・説明性に優れている」という性質も持っている.

### RNN 再起的ニューラルネットワーク
- 閉路（再起構造）を持つ。
- 「反復的」がキーワード
- 短期的な時間記憶ができる
- LSTMを持つ。
  - 長期的な過去情報は保持できないので、「LSTM」(Long Short-Term Memory)を使うことで回避する
  - RNNの勾配消失問題を解決できる機構。
  - ブロックを導入して時系列情報をうまくネットワーク内に保持する。
  - 入力ゲート、出力ゲートは入力重み衝突、出力重み衝突のためのゲート機構。
  - 忘却ゲートは誤差が過剰にセルに停留するのを防ぐリセットの役割。

## 2. 学習方法
- 強化学習
  - 行動を学習する手法のことである.
- 転移学習
  - データが少量しかないなどの理由で,対象のタスクを学習させることが困難なときに,関連する別のタスクで学習し,その学習済みの特徴やパラメータなどを利用することで効率的に対象のタスクを学習することができる
- マルチタスク学習
  - 同時に複数の識別問題に対応できるように学習する手法のことである.

## 3. 正則化・標準化・正規化
- 正則化
  - 過学習を起こす（＝特定のデータに対して過度に重みが調整されてしまうということ）
  - そこで重みの取りうる範囲を制限（＝訓練誤差ではなく汎化誤差を可能なかぎり小さくする）してみよう！というのが正則化の考え方
    - L1 正則化
      - 一部のパラメータをゼロにすることで正則化処理を行います。
      - この方法を回帰に適用したものをラッソ回帰と呼びます。
      - 動的に特徴量選択を行い、重要でないと判断された特徴量は自動的にモデルから消えるようになっている<b>（ラッソ回帰の特徴）</b>。
    - L2 正則化
      - パラメータの大きさにあわせてパラメータ(ノルム)をゼロに近づける(=ペナルティを課す)ことで正則化処理を行います。
      - この方法を回帰に適用したものをリッジ回帰と呼びます。
- 標準化
  - 元データを<b>平均が 0、標準偏差が 1 </b>になるように変換する処理
- 正規化
  - 元データを<b>最小値が 0、最大値が 1 </b>になるように変換する処理

## 4. 教師あり学習
- 物体検出
  - 対象とする物体とその周囲の背景を境界まで切り分けるようなタスクを行うもの
- <b>回帰問題</b>　入力に対する数値を予測。
  - 線形回帰
    - 直線で分けられる。二次関数。
    - 単回帰分析
      - 1つ
    - 重回帰分析
      - 多重共線性に注意する。
    - L1 正則化
      - 一部のパラメータをゼロにすることで正則化処理を行います。
      - この方法を回帰に適用したものをラッソ回帰と呼びます。
      - 動的に特徴量選択を行い、重要でないと判断された特徴量は自動的にモデルから消えるようになっている<b>（ラッソ回帰の特徴）</b>。
    - L2 正則化
      - パラメータの大きさにあわせてパラメータ(ノルム)をゼロに近づける(=ペナルティを課す)ことで正則化処理を行います。
      - この方法を回帰に適用したものをリッジ回帰と呼びます。
- <b>分類問題</b>　データが属するクラスを予測。
  - クラス分類 Classing
    - 定義をもとに、内容データを振り分ける。
    - kNN法
      - データから近い順にk個のデータを見て、多数決によって所属クラスを決定することでクラス分類する。
  - 決定木
    - 分類問題を解くアルゴリズムの一つ。
    - ある変数について条件分岐を行いそれを繰り返すことによってそれを解く
    - あまりに瑣末な分類を行なって汎化性能を損なわないように、条件分岐の回数の初期値を設定することでそれを適切な回数に留める。
      - この手法を、「剪定」と呼ぶ
  - ロジスティック回帰
    - 「回帰」という文字が入っているが回帰ではなく、分類問題。回帰を応用した。
    - ある事象の分類を 0~1 の値の確率として表現することができる<b>（＝出力を正規化できる）</b>ので、シグモイド関数というモデルに出力される。
    - このロジスティック回帰を行う際には、「最尤推定」 が用いられ、最も確からしいパラメータを獲得することを目的としている。
    - このロジスティック回帰を用いるのに適切な事例としては、「喫煙状況や血中のコレステロール値などをもとに病気の発症リスクについて調べる」などが挙げられる
  - ランダムフォレスト
    - 決定木をたくさん作り、その中で多数決をして最も良いものを選ぶ形で分類する手法
    - 一つの分類木で分類するよりも基本的には精度が高くなりやすいと言われています。
    - またその特徴として「特徴量の重要度を算出することができる」という点が挙げられる。
    - ランダムフォレストはアンサンブル学習の手法のうちの「バギング」にあたる
      - アンサンブル学習
        - 複数の学習器を組み合わせて予測する手法のことである.
      - バギング
        - 全体から一部のデータを用いて、複数モデルを用いて学習する手法。
    - 勾配ブースティング木はアンサンブル学習の手法のうちの「ブースティング」にあたる。
      - ブースティング
        - 一部のデータを繰返し抽出し、複数モデルを学習させる
  - サポートベクタマシン
    - データの分類を行う際の手法の一つ。
    - 分類した結果のグループ間の 「マージン」 が最大になるような線を求めるというものである。
      - これにより、出来るだけ汎化性能を高めて、未知のデータを適切に分類しやすくしている。
      - SVMの学習を行う際にはいくつかのパラメータを初期値として設定しておく必要がある。
    - その代表的なパラメータの一つが、「スラック変数」 である。
      - これはグループ分けの際に誤った分類をどれだけ許容するかを決める値である。
    - SVMの特徴として、「カーネルトリック」 というテクニックを駆使することがある。
      - これにより、線形分離では分類が不可能なデータセットに対しても、うまくそれを分類することが可能であることが挙げられる。
    - 「マージンの最大化」というコンセプトに基づいて設計されている。
    - SVMには分類問題を上手く解くための工夫が施されている。
      - スラック変数は「一部のサンプルの誤分類に寛容になる」ためのもの
      - カーネル法は「入力となる数値を正規化する」のためのもの
      - カーネルトリックは「内積計算をカーネル関数へ置換え計算量を大幅に削減する」ための工夫である。
        - SVMはカーネル法やカーネルトリックが登場してから人気が高まり、より頻繁に利用されるようになった。
  - NN ニューラルネットワーク
    - ニューロン
    - 単純パーセプトロン
      - <b>パーセプトロンで解ける問題を線形分離可能と呼ぶ。</b>
    - ドロップアウト
      - 学習の際に一部のノードを無効化する
    - バッチ正規化
      - 一部の層の出力を正規化する.
    - データ拡張
      - データの水増しをしてデータの不足を補う.
    - 抱える問題
      - 勾配消失問題
        - モデルの層を深くするほど入力層に近い層では学習が行われにくくなる
      - トラップ
        - パラメータがつくる空間が高次元になり空間内の局所解や「鞍点」にトラップされるといった問題

## 5. 教師なし学習
- 教師データを使わずに、既知のデータの本質的な構造を浮かび上がらせることを目的とする学習手法。
  - クラスタリング Clustering
    - サンプル同士の類似値を基にしてそれらを複数のグループに分ける手法。
    - データの中心点をランダムにとって、実際に中心点を計算して修正していく。
    - k-means(k-平均法)
      - 距離をベースに計算を行う単純なハードクラスタリング手法。いわばトップダウン型。
      - クラスタの中心を重心の位置にずらす。
  - オートエンコーダ
    - 次元削減する
  - 主成分分析
    - 線形な次元削減。次元削減したいな〜となったら主成分分析。
    - 計算量の削減、次元の呪いの回避が期待できる。
    - さらに、寄与率を調べれば各成分の重要度が分かり、主成分を調べれば各成分の意味を推測することができる。


## 6. 線形（回帰問題）
## 7. 非線形（分類問題）


## 8. 人物
- イライザ ELIZA
  - 1996年にジョゼフ・ワイゼンバウムによって開発された。精神科セラピストの役割を演じるプログラムで、人間とコンピュータが会話を行う最初のプログラム。
- 強いAI、弱いAI
  - ジョン・サール
- ジョン・マッカーシー
  - 1956年にアメリカで開催されたダートマス会議に「人工知能」を初めて使った
  
## 基本用語
- 誤差逆伝播法（バックプロパゲーション）と過学習
  - 80年代半ばから90年代前半にかけておきた二度目の人工知能ブームでは、「差逆伝播法」の発明がきっかけとなって研究が広がっていった。
  - しかし「差逆伝播法」によるニューラルネットの学習は「過学習」が壁となり学習が上手く進まないこと、また層数やユニット数などのパラメータが多数あるにも関わらず、それらを決定する理論がなかったことなどが背景となり下火になっていった。
- ボードゲームでは探索の組み合わせの数
  - オセロ ＜ チェス ＜ 将棋 ＜ 囲碁
  - だが、その組み合わせは天文学的な数であるため、事実上全てを探索することはできない。
- Cycプロジェクト
  - 「意味ネットワーク」を利用して人間の全ての一般常識と呼ばれる知識を表現しようというプロジェクト。
  - 現在まで続いている。
- オントロジー
  - 「言葉」や「その意味」、また「それらの人間関係性」を他の人とも共有できるようになり、知識の再利用が容易になるもの。
- ILSVRC 画像コンペ
  - 2012〜2013年の優勝チームは「8層」構造のネットワークを用いていた
  - 2014年の優勝チームであるgoogleの「インセプション Inseption」「GoogleNet」は「22層」構造
  - 2015年の優勝チームであるマイクロソフト・リサーチ・アジアのチームは「152層」構造
- フレーム問題
  - 1969年にジョン・マッカーシとパトリック・ヘイズが提唱した問題
  - 「今しようとしていることに関係のあることがらだけを選び出すことが実は非常に難しい」