E試験 2024#2 シラバスメモ④-5 深層学習の応用 様々な学習方法

E試験のシラバスとその概要をメモしたものです。
書籍、各サイトや生成AIに聞いたものを自分なりに解釈したツギハギです。

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

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

本記事は4．深層学習の応用 のうち
- 様々な学習方法

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

## 転移学習
転移学習とは、あるタスクで学習したモデルを他のタスクに利用する手法です。
ニューラルネットワークは、入力層から中間層の最後の層までで特徴量の設計を学習（表現学習）し、中間層の最後の層から出力層への間でこれまでに得られた特徴量を用いて分類・予測を行います。
転移学習では、この入力層から中間層の最後の層までを特徴抽出器とします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/666388/4b41c70b-87b3-4fe8-ad06-6daff133f619.png)
他のタスクを学習する際に、この特徴抽出器を用います。例えば、新しく分類・予測する出力層を追加する・抽出した特徴ベクトルを分類するSVM (Support Vector Machine) を用いるなどがあります。このとき、特徴抽出器の重みは固定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/666388/61cd2303-2e1b-b1bc-2917-c2377556e3a0.png)
出所：https://jinbeizame.hateblo.jp/entry/kelpnet_transfer より一部編集


### ファインチューニング
ファインチューニングとは、学習済みモデルの一部もしくはすべての層の重みを微調整する手法です。転移学習では、学習済みモデルの重みを固定して用いますが、ファインチューニングでは学習済みモデルの重みを初期値とし、再度学習によって微調整します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/666388/e0a0be94-92a5-2fa0-1353-f413d86356cb.png)
ファインチューニングは、シミューレーション環境から実環境へ移行する際や、標準化されたモデルを個々のユーザに最適化する際などに使用されます。
出所：https://jinbeizame.hateblo.jp/entry/kelpnet_transfer

### ドメイン適応 (domain adaptation)
ドメイン適応とは、あるデータで学習したモデルを異なる分布のデータ(※ **ドメインシフト** )の学習に利用する手法です。転移学習では、入力から受け取る特徴を共有し、その特徴の組み合わせ方のみ再学習することによって、異なるタスクでの学習を行いました。ドメイン適応では、低次元の特徴の組み合わせ方を共有し、その低次元の特徴の表現を再学習することで、異なる分布のデータの学習を行います。

例えば音声認識を行う場合、出力層側は認識した単語などを組み合わせて適切な文章を生成し、入力層側は話者の音声から単語などを認識します。ここで、単語から文章を生成する方法は共通ですが、音声から単語を生成するためには、話者によって異なる発音を認識する必要があります。

このように、タスクは同じでも入力データの分布が異なる場合、入力層に近い層を再学習することによって対応することが可能になります。これをドメイン適応といいます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/666388/0969ede7-3511-8195-c050-b1bbc62c02ef.png)
出所：https://jinbeizame.hateblo.jp/entry/kelpnet_transfer


#### ドメインシフト
機械学習モデルの開発環境において学習に使用したデータ（以下、学習データ）と運用環境で予測対象となるデータ（以下、ターゲットデータ）の性質が異なることです。
- covariate shift
共変量シフトとも呼ばれ、学習時とテスト時で入力変数の周辺分布が異なる場合
例えば九州と東北の人は年収は同じだが、入力(人口分布、地理的分布etc)が異なるとき。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/666388/13d7b723-f1c8-bfb3-9eb6-658c0a7cec94.png)
- target shift
target shiftはcovariate shiftと反対に、学習時とテスト時で出力変数の周辺分布が異なる場合
例えば関東と九州で年収が異なる。この場合covariate shiftの問題も内包している場合が多い。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/666388/0c79deca-e496-b5c6-0f08-2fe008c4d132.png)
- concept shiftの問題は学習時とテスト時で条件付き分布が異なる場合を指します。
例えば学習データとテストデータが作られた年代が全く異なる場合などに該当します。 日本における平均年収は右肩下がりであるため、学習データとテストデータの年代が異なることによって、同じ入力変数（都道府県）にもかかわらず出力変数（年収）が大きく異なってしまうという状況が発生します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/666388/1656d196-b1bb-8dc3-ca8c-73d886ffc4ba.png)
出所：https://carbgem.com/plus/wp-omain-shift/

## 半教師あり学習と自己教師あり学習
学習データが少ない場合や、ラベルが偏っている場合、間違ったラベル付けがされている場合などに有効な学習方法。
大きく以下の2手法がある
- ブートストラップ法
- グラフベースアルゴリズム
### ブートストラップ法
- Self-Training
  1. まずはラベルありのデータを使用してモデルを学習
  2. 作成した学習済みモデルを使用して、ラベルなしデータのラベルを予測する
  3. 予測結果の中から信頼度が閾値以上の予測結果のデータを抽出し、予測したラベルをつけてデータに加える

上記を繰り返す
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/666388/0e81b106-2809-3999-bd3c-1085d6c456a9.png)

- Co-Training
1. ラベルありのデータを分割して使用し、2つのモデルを学習
2. 各作成した学習済みモデルを使用して、ラベルなしデータのラベルを予測する
3. 予測結果の中から信頼度が閾値以上の予測結果のデータを抽出。
4. 分類器1のデータを分類器2用のデータに、分類器2のデータを分類器1用のデータに追加

上記を繰り返す
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/666388/6be76025-9ca6-c168-b8d1-3ed1459d8fc0.png)
出所：https://products.sint.co.jp/aisia/blog/vol1-20

### グラフベース
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/666388/18f7dbb4-9a83-1834-c510-5066f907a2dd.png)
出所：https://products.sint.co.jp/aisia/blog/vol1-20

### Contrastive Learning
ポジティブペア：似ている（もしくは同じ）データのペア。
ネガティブペア：異なるデータのペア。
Contrastive learningは、ポジティブペアのデータは表現空間で近づけ、ネガティブペアは遠ざけるようにモデルを学習させます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/666388/aedd4859-1959-ef21-8573-c7bf60d11f15.png)
1. ペアの選択
データセットからポジティブペアとネガティブペアを選択します。例えば、画像分類のタスクでは、同じクラスの画像はポジティブペア、異なるクラスの画像はネガティブペアとなります。
2. 表現学習
ニューラルネットワークなどを使って、入力データの特徴を抽出します。
3. コントラスト損失
ポジティブペアが互いに近づき、ネガティブペアが離れるように損失関数を設計します。この代表的なものが**コントラスト損失（Contrastive Loss）やトリプレット損失（Triplet Loss）**です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/666388/248461be-bb7d-dfa8-603d-5253b3594568.png)

自己教師あり学習：ラベルがないデータでもContrastive learningが使われることがあります。例えば、1つの画像を異なる方法で加工し、それらをポジティブペアとし、異なる画像をネガティブペアとして学習を進める手法が一般的です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/666388/fff3b166-cb2b-a02e-f795-b174957e4d8b.png)
出所：https://www.v7labs.com/blog/contrastive-learning-guide

## 能動学習（Active Learning）
能動学習は試験範囲外です。

Uncertainty Sampling、Least Confident、
Representative Sampling

## 距離学習（Metric Learning）
特徴量を空間に埋め込み、埋め込み空間の距離を求めることで、2つのデータが似ている/似ていないを判定する学習手法。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/666388/c184994b-469a-a6fc-63c9-49e95cf72c36.png)

顔認証、人物同定、異常検知などで使用される。
クラス分類では、クラスがわかっているものでしか識別が出来ないため、同一人物かどうかを特定させるためには、顔認証させたい人物ごとにモデルの学習が必要になる。
⇒現実的ではないため、距離学習が必要になる

### 2サンプルによる比較
#### Siamese network
2つのデータを各々入力出来る 同一の並列ネットワークと、それらの出力の距離を算出するネットワークで構成される。
クラス分類から抽出した特徴量を使用し、類似度や特徴空間上での距離とラベルで与えられた距離の誤差を損失として学習するネットワーク。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/666388/18062646-0ef9-23eb-c4b6-ae90b34ede47.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/666388/fa27624a-243a-5ae1-1fe8-f6fe3e61ac3e.png)

#### contrastive loss 対比損失関数
Siamese networkの目的は、入力画像を分類することではなく、入力画像を区別することです。したがって、分類損失関数 (クロスエントロピーなど) は最適ではありません。
代わりに、このアーキテクチャでは、contrastive lossを使用する方が適しています。
直感的に言えば、この関数はネットワークが特定の画像のペアをどれだけうまく区別しているかを評価するだけです。
$L=(1-Y)\cfrac{1}{2}(D)^2+(Y)\cfrac{1}{2}{max(0, m-D)}^2$
Y:ラベルで。positiveペアの場合は0、negativeペアの場合は1でラベルされる。
m:マージン。正の定数のハイパーパラメータ。
D:算出された距離　ユークリッド距離でもマハラビノス距離でも良い



### 3サンプルによる比較
ラベル付け作業において、何十枚もの画像を、似ている順番に人手で並べてラベル付けするのは、誤りはかなり多くでてしまいます。
しかし、下図のように３枚の画像を１セットにし、基準の画像（Query）と似ている画像をPositive、似ていない画像をNegative、という風に３枚毎にラベル付けすることによりミスを減らせる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/666388/6547dd29-07db-930d-9c09-81e354205635.png)
出所：https://arxiv.org/pdf/1404.4661
基準画像Anchorに対して、NegativeよりPositiveの方が距離が近くなるように学習していく。($d_p$が$d_n$より小さくなるようにする)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/666388/89ab22d4-7b9e-d84f-da33-0d872ef32412.png)
https://arxiv.org/pdf/1503.03832 より一部編集

損失関数はマージンmを足して。
$𝐿 = max(0, m + d_p − d_n)$
($d_p$が$d_n$よりマージン含めても小さくなるようにする)

## メタ学習（Meta Learning）
メタ学習は試験範囲外です。

初期値の獲得 MAML、Model-Agnostic、メタ目的関数（meta-objective）