【論文メモ】SCAN:Learning to Classify Images without Labels

Step 1 Solve a pretext task

まずはpretext taskを解かせる。それで得られたモデルを用いて、以下のように元の画像から得られた特徴量と元の画像をデータオーギュメントした画像を入力とした特徴量の距離を最小化する。

実際にはいくつかのpretext taskでは上記の操作を行っている(i.e. simclr)。なので、普通にsimclr等をpretext taskとした場合には上記の操作を意図的にする必要はない。

Step 2 Clustering Loss (SCAN Loss)

  • まずはStep1で学習したモデルの出力を用いて、近傍のデータを取得する。
  • それらを用いて以下のロスの最小化を行う。
  • 最初の項はデータXから得られた特徴量と近傍のデータとの内積の最大化。最大化するときは2つのベクトルがone-hotになったとき。例としては[0,1], [0,1]
  • ソースコード(githubから)
similarity = torch.bmm(anchors_prob.view(b, 1, n), positives_prob.view(b, n, 1)).squeeze()
  • 第二項は一つのクラスターにすべてのデータが集まることを抑制している。
    • エントロピーなので。
    • 過去の例に合わせて、Clusterの個数は指定できることを仮定している

Step3: self-labeling

  • 確信度が高いサンプルに対しては各クラスのprototypeデータとし、そのサンプルをデータオーギュメントしたデータに対して分類タスクにする。つまり、クロスエントロピーロスを使って学習する

参考文献

コメント

タイトルとURLをコピーしました