半教師あり学習自分用にメモ
半教師あり学習について調べようと思ったので、初歩的な手法としてTemporal ensembling、Mean teachers、UNSUPERVISED DATA AUGMENTATION(UDA)、MixMatchについて調べました。
間違いがあったら教えてください。
- そもそも半教師あり学習って何?
- Temporal Ensembling for Semi-Supervised Learning
- Mean teachers are better role models:Weight-averaged consistency targets improve semi-supervised deep learning results
- UNSUPERVISED DATA AUGMENTATION FOR CONSISTENCY TRAINING
- MixMatch: A Holistic Approach to Semi-Supervised Learning
- 自分用用語メモ
そもそも半教師あり学習って何?
現実問題、ラベルあり画像(教師ありデータ)を大量に用意することは難しい。
だけどラベルなし画像(教師なしデータ)を用意するのは簡単。
そこで少量の教師ありデータと大量の教師なしデータから学習する手法として半教師あり学習が提案されている。
Temporal Ensembling for Semi-Supervised Learning
本報告ではΠ-modelとTemporal ensemblingが提案されている。
ここで
:学習データ
:正解ラベル
:バッチサイズ
:何エポック目か
:時間に依存する重み。0から始めるramp up 関数
とする。
Π-model
確率的なData Augmentation と 確率的にDropoutの位置を変えるネットワークを用いる。
流れは以下のようになる。
上図にも書いてあるが損失関数は以下のように定義されており、前の項(黄色線)が教師あり損失関数項、後ろの項(赤線)が教師なし損失関数項となる。
アルゴリズム全体
TEMPORAL ENSEMBLING
流れは以下のようになる。
損失関数は先と同じ。
学習後、 を更新することにより、ネットワーク出力がアンサンブル出力に累積される。
生成するには、因子 (1−αt) で除算する。
アルゴリズム全体
Mean teachers are better role models:Weight-averaged consistency targets improve semi-supervised deep learning results
構成と流れは以下の図のようになる。
TeacherモデルとStudentモデルは同じ構造をしている*1。
classification cost
SoftmaxCrossEntropyを用いている。
consistency cost
Studentモデルの重みを、ノイズを
Teacherモデルの重みを, ノイズを
とすると以下のように書ける。
※この論文ではMSEを使ってるがKL-divergenceなどでも良い。
ちなみにモデルには3つのノイズが入っているが、詳しくは以下のような構成となっており、入力でははRandom Translation、Horizonal flip、Gauusian noiseを、中間層ではDropoutをノイズとして扱っている。
Mean Teacherでは、学習ステップでのを以下の式のようにした。
Teacherモデルの重みはStudentモデルの重みの 指数移動平均(Exponential Moving Average) を用いている。
ここでαはハイパーパラメータ。
確率的勾配降下法(SGD)を用いて各学習ステップでノイズ, をサンプリングすることによってconsistency costを近似できる。
総コストは以上2つのコストの加重合計としている(詳しくは以下)。
教師ありデータのとき
教師ありデータが入力にきたとき classification cost と consistency costを求める。
教師なしデータのとき
教師なしデータが入力にきたとき正解ラベルがなくclassification costを求めることができないため、consistency costのみを用いる。
こうすることでラベルなし画像もうまく学習に組み込むことができるため半教師学習であると言える。
UNSUPERVISED DATA AUGMENTATION FOR CONSISTENCY TRAINING
今までは教師なしデータに対して、何かしらの摂動・ノイズ(例えばガウスノイズとかDropoutとか)を加えた。それらをモデルに入力した時の出力が(差の二乗和やKL-divergenceなどを使って)ばらつかないようにするというものであった。
この論文ではガウスノイズやDropoutなどではなく、より現実的なdata augmentationを用いる。
UDAの概略図
RandAugment
RandAugmentについてはよく分からないけど、Data Augmentationを自動で行うAuto Augmentを、学習と同時に行う手法らしい。
他の様々なタイプのノイズも(ガウスノイズ、敵対的ノイズなど)試したが、本手法のようにdata augmentationを用いたらより優れている結果がでたらしい。
MixMatch: A Holistic Approach to Semi-Supervised Learning
ここでは
バッチサイズを
教師ありデータを
教師なしデータを
とします。
step1
ラベルあり画像(教師ありデータ)に対してdata augmentation(ランダム水平反転処理やランダムクロップ処理など)を行い新たな画像を作る。
step2
同様にラベルなし画像(教師なしデータ)に対してもdata augmentationを行い新たな画像を作る。
ラベルなし画像をdata augmentationする時、K回行いK個の新たな画像を作る。
step3
step2で生成したdata augmentation後のラベルなし画像に対して、モデルでラベルを予測する。
data augmentation後のラベルなし画像はK個あるので、K個分モデルで予測することになる。
step4
step3の予測値を平均する。
これで得られる値を とする。
step5
step4で出力した平均値をSharpen(エントロピーを小さく)する。
TはハイパーパラメータでT→0でonehotに近づくようになっている。
これにより得られる値をとする。
step6
以下のようにラベルありデータは(画像,ラベル)のペアにする。
以下のようにラベルなしデータは(画像,疑似ラベル)のペアにする。
step7
ラベルありデータとラベルなしデータそれぞれをMixupする。
合成するデータはラベルありデータでもラベルなしデータでも良い。
これにより得られる合成後のラベルありデータを 、合成語のラベルなしデータを とする。
step8
(合成後の)ラベルありデータ の予測値と(合成後の)正解ラベル に対し、CrossEntropyを計算する(ラベルありデータの損失関数項)。
(合成後の)ラベルなしデータ の予測値と(合成後の)生成したラベル との差の二乗和を計算する(ラベルなしデータの損失関数項)。
そしてそれぞれを加算し、損失関数とする。
ここで
はハイパーパラメータ
はの次元数
とする。
step9
step1~step8を繰り返して学習を行う。
MixMatchアルゴリズム
step1~step7をまとめると以下のようになる。
ReMixMatch
最近これの進化系ReMixMatchという論文が出たらしいです。
以下の記事が非常に詳しく書いていたのでここでは解説は省きます。
自分用用語メモ
Sharpen
Pseudo-label
*1:Temporal ensemblingはTeacherモデルとStudentモデルともに同じネットワークを共有するが、Mean teacherはそれぞれ別々のネットワーク(構造は同じ)を使うという点に注意