自己教師あり学習とBERT

画像分類における自己教師あり学習(Self-Supervised Learning)について、これって自然言語処理系のBERTにおける事前学習の**Masked Language Model**と**Next Sentence Prediction**が元ネタなのかっていまさらながら気づきました。

# 半教師学習
半教師学習は少数の教師ありデータと多数の教師なしデータから学習する手法である。
教師ありデータからの学習に従って教師なしデータに分類ラベルを付与していき、学習データを大きくしていくことで徐々にこの付与ラベルの精度を高めて行く。
一方、自己教師あり学習において分類ラベルの付与は行われません。自己教師あり学習は正解の分類ラベルが分からないまま(例えばこれは「犬」の画像だと分からないまま)事前学習が行われます。

# BERTの事前学習
例えば自然言語処理系の問題として文章の感情を当てる問題があります。
入力された文章に対して、この文章は喜んでいるとか、悲しんでいるとか、はたまた怒っているとかを出力します。しかし、BERTの事前学習においてよく挙げられるwikipediaコーパスには当然、文章の感情に相当する分類の正解ラベルなど付与されていません。それにも関わらずBERTは分類の正解ラベルのないコーパスから事前学習を行い、文章の相関などを学ぶことができます。
これは次に述べるような問題を勝手に生成し、これを学習するからです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/299928/8589d5c2-2ff6-a669-2e1e-1d91a0e02e74.png)

## 自然言語処理系における自己教師学習 その1(Masked Language Model)
「私は今日、大阪から東京に行きます」=> 「[MASK]は今日、大阪から[MASK]に行きます」
文章をランダムに[MASK]に置き換え、この入力から[MASK]された単語を推測する穴埋め問題を解きます。
正解ラベルには[MASK]で置き換える前の元の文章が与えられます。

## 自然言語処理系における自己教師学習 その2(Next Sentence Prediction)
「A文[SEP]B文」
適当なA文とB文(それぞれコーパスからランダムに選ぶ)を与えその2個の文章が連続かどうかを学習する。正解ラベルは例えば2個の文章が連続であれば0、連続でなければ1を与え二値分類させる。


# 画像分類における自己教師学習 その1(Masked Image Model)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/299928/793c3d4f-8f43-5588-d278-42ee2fcfec00.png)
画像を適当に[MASK]化してこれを予想する。
ただし正解ラベルに持ってくるためにパッチごとにtokenizerによって離散値化しないといけない。これはBERTにおけるvocab.txtを使って文章をindex値に変換するBertTokenizerのようなものだがこれの画像版を作らねばならない。
これに関してはVQVAEを学習すればベクトル量子化(離散値化、index値化)が出来るのでtokenizerはこのモデルを利用すればよい。こうして画像のパッチごとのマスクした画像のパッチ部分が何であるかという問題を解くことが出来る。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/299928/6474e162-f942-345b-1107-db29d1214777.png)

# 画像分類における自己教師学習 その2(対照学習(Contrastive Learning))
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/299928/625efc3a-3b92-7edc-6ae5-c78059726fc8.png)    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/299928/4ebc3185-fc4d-b40b-f4b2-1df2b7c46a2c.png)

画像$X$を変形させて$Y^A$と$Y^B$を与える。
この$Y^A$と$Y^B$を比較して同じ画像$X$から変形したもの同士かどうかというのを判別する。

# 画像分類における自己教師学習 その3(Pretext-Invariant Representation Learning)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/299928/f3a4a008-187c-fe95-7023-6e9eca5c2625.png)　　![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/299928/0712fd30-41c9-fb8f-53a7-c72e7d9bc1c5.png)
画像のジグソーパズルをランダムに並び替えた画像を与え、正しい順番に並び替えよみたいな問題を作り出すこともできる。このような自己教師あり学習をPIRLというが、BERTの事前学習に相当する手法はない。

# まとめ
画像分類の自己教師あり学習は自分の知る限り3種類あり、その内の2種類**Masked Image Model**と**Contrastive Learning**はBERTにおける**Masked Language Model**と**Next Sentence Prediction**と対応していると考えられる。
前者はBEiT,後者はSimCLRなどの論文を読むと出てくる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/299928/b1614640-6358-5e52-488b-d2e021c6c7fb.png)
原理的には分類ラベルの無い画像で自分で問題を作って解けば(その際の答えは問題生成中に自動で生まれる)、自己教師あり学習となる。ただ、そうするとGANやAutoEncorderにおける教師なし学習を自己教師あり学習とは呼ばないのは何故なんだ？という疑問はある。
[参考](https://atcold.github.io/pytorch-Deep-Learning/ja/week10/10-1/)を見ると他にも画像を0,90,180,270°回転する、白黒画像からカラー画像を作り出す、動画の時系列をシャッフルするといった問題も自己教師あり学習と呼ばれるようである。

ただ、いまのところこれらの結果は画像分類の分野では学習データがImageNet-1k onlyに限れば優秀だが(	
PeCo(ViT-H, 448)：88.3%)、大きい事前学習データセットを使った教師あり学に及んでおらず(JFT-3B、CoAtNet-7：90.88%)、自然言語処理分野のように自己教師あり学習がまだ主流になっている訳ではないように感じる。