- 教師なし学習のクラスタリング手法
- ECCV 2020
- このECCVでの発表スライドがわかりやすいhttps://wvangansbeke.github.io/pdfs/unsupervised_classification.pdf
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データとし、そのサンプルをデータオーギュメントしたデータに対して分類タスクにする。つまり、クロスエントロピーロスを使って学習する
参考文献
- https://wvangansbeke.github.io/pdfs/unsupervised_classification.pdf
- https://arxiv.org/pdf/2005.12320.pdf
- https://github.com/wvangansbeke/Unsupervised-Classification
コメント