E試験 2024#2 シラバスメモ③-3 深層学習の基礎 汎化性能向上

E試験のシラバスとその概要をメモしたものです。
各サイトや生成AIに聞いたもののツギハギです。

シラバスは2024#2に準拠しています

https://www.jdla.org/certificate/engineer/

本記事は３．深層学習の基礎のうち
- 汎化性能向上のためのテクニック

についてとなります。
試験範囲外部分は割愛しています。

# 汎化性能向上のためのテクニック
## データ集合の拡張(Data Augmentation)
既存のデータを変形させる等して別の形のデータを作る
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/666388/c1532ba9-b389-19bd-34c1-75985b2d54b0.png)
(出所:https://medium.com/secure-and-private-ai-writing-challenge/data-augmentation-increases-accuracy-of-your-model-but-how-aa1913468722)

- データ数が水増しできることによる精度の向上
- 同じデータに対しても別の形での学習をさせることによって汎化性能があがる

### 画像のデータ拡張
- ノイズ付与（Gaussian Filter）、
- Random Flip(向きの入れ替え)
- Erase(一部消去)
- Crop(切り抜き)
- Contrast(コントラスト)
- Brightness(明るさ)
- Rotate(回転)、
- RandAugument(複数フィルタN個をMの強さでかける)
- AugMix(複数フィルタをかけたものを元の画像とα(透過)合成)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/666388/a462ad1b-cda0-5588-f432-b89f7a64d04d.png)
https://medium.com/lunit/photometric-data-augmentation-in-projection-radiography-bed3ae9f55c3
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/666388/1eeacf1d-e70c-826d-26d0-bd46bf91bbbd.png)
https://paperswithcode.com/method/randaugment
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/666388/44b96e04-e607-9fce-5c21-1d87695996f9.png)
https://pytorch.org/vision/main/auto_examples/transforms/plot_transforms_illustrations.html#sphx-glr-auto-examples-transforms-plot-transforms-illustrations-py
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/666388/76693e5c-f357-90f1-8dd7-974d4abbed08.png)
https://arxiv.org/pdf/1912.02781

### 自然言語のデータ拡張
- EDA:Easy Data Augmentation
  - SR: synonym replacement 単語を類義語に入れ替え
  - RI: random insertion ランダム位置に単語挿入
  - RS: random swap 文章内で単語入れ替え
  - RD: random deletion ランダム位置の文章を削除

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/666388/d3731fb3-3c87-1826-e301-238e5f0c073b.png)
(出所：https://aclanthology.org/D19-1670.pdf)

### 音声のデータ拡張
ノイズ付与（Gaussian Noise）、ボリューム変更、ピッチシフト、
MixUp、SpecAugment

試験範囲外の為割愛します

## 正規化
正規化:Normalizationはデータをデータスケールの単位を扱いやすいようにそろえたもの。
代表的なものとして最小値0～最大値1にスケーリングするMin-Max normalizationが使用される。
また平均0,標準偏差1となるようにデータ調整をしたZ-score normalizationを特に **標準化:Standardization** と呼ぶ。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/666388/354d6909-2dff-0d2f-c789-345e7e99d1d1.png)

標準化された $x'_i=\cfrac{x_i-\mu}{\sigma}$
※$\mu=平均値:\cfrac{1}{n}\sum{x_i}$　$\sigma =標準偏差:\sqrt{\cfrac{1}{n}\sum{(x_i - \mu)^2}}$


### 正規化をかけるデータ単位による違い
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/666388/2a3e7288-1032-a44d-943c-0d6456bbbf36.png)
いずれもZ-score normalization(標準化)が使われる。

- Batch Normalization
チャンネル毎　にまとめる
(N:バッチサイズ, C:チャンネル数, H,W:画像の高さ,幅)
$\mu = \cfrac{1}{NHW}\sum_{n=1}^N{\sum_{h=1}^H{\sum_{w=1}^W{x_{nchw}}}}$
$\sigma = \sqrt{\cfrac{1}{NHW}\sum_{n=1}^N{\sum_{h=1}^H{\sum_{w=1}^W{(x_{nchw}-\mu)^2}}}}$
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/666388/02c2a748-abb8-ebb5-bdc6-be606a1590ec.png)

- Layer Normalization
データ毎 にまとめる
$\mu = \cfrac{1}{CHW}\sum_{c=1}^C{\sum_{h=1}^H{\sum_{w=1}^W{x_{nchw}}}}$
$\sigma = \sqrt{\cfrac{1}{CHW}\sum_{c=1}^C{\sum_{h=1}^H{\sum_{w=1}^W{(x_{nchw}-\mu)^2}}}}$
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/666388/2d55f8bc-f618-c8ee-c467-a36b4196a9fc.png)

- Instance Normalization
データ毎のチャンネル毎 にまとめる
$\mu = \cfrac{1}{HW}\sum_{h=1}^H{\sum_{w=1}^W{x_{nchw}}}$
$\sigma = \sqrt{\cfrac{1}{HW}\sum_{h=1}^H{\sum_{w=1}^W{(x_{nchw}-\mu)^2}}}$
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/666388/6384a7b9-dccb-9481-9a99-ede4087b8c8c.png)
(出所：https://i-main.net/emmanote-ai-normalization/)

- Group Normalization
チャンネルを適当なG個に区切ってデータ毎にまとめる
Instance NormalizationをG個まとめて行うイメージ。
Layer NormalizationとInstance Normalizationの中間的な動きとなる。

## アンサンブル手法
アンサンブル学習とは複数のモデルを組み合わせることで、精度の高い学習モデルを生成する手法。

### バギング
バギングでは、学習データから複数のサンプルデータを作り、各サンプルデータを元にモデルを作成していきます。
たくさん作ったモデルにそれぞれ推論させた結果を多数決して、最終的な出力結果となります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/666388/97f5055b-e116-019a-8500-7a6ab0ff2512.png)
(出所：https://nisshingeppo.com/ai/whats-ensemble/)

### ブースティング
モデルを直列に組み合わせて、間違えた部分を集中的に学習する手法
データ重みづけの方法によって様々な手法があり、代表的なものはアダブーストや勾配ブースティング
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/666388/3c0bc469-242c-f78e-6e71-336e4001e26b.png)

https://nisshingeppo.com/ai/whats-ensemble/
### ブートストラップ
バギングを行うときの学習データからランダムにデータを抽出して、サンプルデータを作成する手法です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/666388/95086498-c7d6-fff8-5895-636542edb9c9.png)

### スタッキング
学習データに対して様々なモデルを作り、その出力結果を入力として更にモデルを作ります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/666388/60e4d2bd-7acb-9260-9259-dc156e3d2e15.png)

## ハイパーパラメータの選択
### 基本的なハイパーパラメータ調整
学習率、隠れ層の数 (レイヤー層数)、ユニット数、
ドロップアウトの割合、バッチサイズ、正則化項の係数
### ハイパーパラメータの最適化
ハイパーパラメータを(半)自動で最適化
- グリッドサーチ
ハイパーパラメータを複数個設定し、モデルを構築、全組み合わせの中から最適なパラメータを見つけ出す網羅的検索手法。
パラメータ数が多いと計算コストが高くなる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/666388/c84924f1-ba78-1788-275e-6450b6233bfe.png)
https://medium.com/@cjl2fv/an-intro-to-hyper-parameter-optimization-using-grid-search-and-random-search-d73b9834ca0a
- ランダムサーチ
ある一定の分布(平均0, 標準偏差1の正規分布など)を指定して、そこからランダムに取り
出したハイパーパラメータを複数個設定し、モデルを構築、最適なパラメータを見つけ出
す手法。

- ベイズ最適化
ハイパーパラメータの評価結果に基づいて事前確率分布を更新して事後確率分布を取得し、次の試すべきハイパーパラメータを決定する