はじめに
深層学習の進化とともに、教師あり学習の限界が見えてきました。特に、膨大なラベル付きデータを必要とすることは、多くの分野で実用を妨げています。こうした背景から近年注目を集めているのが、**自己教師あり学習(Self-Supervised Learning, SSL)**です。
本記事では、Meta AIが開発した自己教師ありモデル「DINOv2」の概要とともに、よく混同されがちな「自己教師あり学習とクラスタリングの違い」についても掘り下げて解説します。
自己教師あり学習とは?
[定義]
自己教師あり学習は、「人間がつけたラベルに頼らず、データそのものから構造を学ぶ学習方式」です。教師なし学習の一種ですが、タスクを人工的に作り出してモデルを訓練する点で、単なるクラスタリングとは異なります。
・同じ画像をランダムに変換 → 異なるビューだが「同じもの」として学習
・次の単語を予測(BERTなど)→ ラベル不要で言語理解が可能
クラスタリングとの違い
項目 | 自己教師あり学習 | クラスタリング |
---|---|---|
学習目的 | 表現を学習(embedding) | データを分類(grouping) |
出力 | ベクトル表現 | クラスタラベル(例:0,1,2) |
学習方式 | パラメトリック(モデルを学習) | ノンパラメトリック(KMeansなど) |
応用性 | 学習後に様々なタスクに再利用可能 | クラスタ分けそのものが目的 |
学習構造 | 損失関数による教師信号あり(擬似) | 一般に損失関数なし(または距離最小化) |
クラスタリング:KMeansで画像特徴をグループ化 → ラベルはつくが「なぜその分類か」は学習されない
自己教師あり学習:DINOで画像の意味構造をベクトルで学習 → 分類や検索、セグメンテーションなどに再利用可能
DINOv2の概要
DINOv2(2023, Meta)は、自己教師あり学習の文脈で開発されたVision Transformer (ViT) ベースの大規模特徴抽出モデルです。
[主な特徴]
教師ラベル不要:完全にラベルなしで学習
ViTベース:長距離関係を捉えるトランスフォーマ構造
スケーラブル:ViT-B/L/Gモデルに対応
意味的に優れた特徴表現:クラスタリングにも強い
[仕組み]
画像を複数のビューに変換(例:拡大、色変更)
同じ画像の異なるビューに対し、student/teacherモデルを通す
学習目標:studentがteacherの出力に一致するよう学習
結果:意味的に類似した画像がベクトル空間で近くにマッピングされる
[DINOv2とクラスタリングの接点]
興味深いことに、DINOv2で抽出されたベクトルを使うと、従来のクラスタリング手法(KMeansやt-SNE)でも視覚的・意味的に美しいクラスタリング結果が得られることがわかっています。
クラスタリング:DINOv2のベクトルを「クラスタリング対象」にする
自己教師あり学習:クラスタリングが「内包された構造」の一部として学習される(実際にDINOv1ではSinkhorn-KMeansが内部で使用されていた)
実装例
import torch
import torchvision.transforms as T
from torchvision.io import read_image
from torchvision.models.detection import dinov2_vitb14
#画像読み込みと前処理
img = read_image("dog.jpg").float() / 255.0
transform = T.Compose([
T.Resize(224),
T.CenterCrop(224),
T.Normalize(mean=[0.5]*3, std=[0.5]*3)
])
img = transform(img).unsqueeze(0)
#DINOv2モデル呼び出し(vitb14, vitl14 などあり)
model = dinov2_vitb14(pretrained=True)
model.eval()
#特徴抽出
with torch.no_grad():
features = model(img) # 特徴量の形状
まとめ
自己教師あり学習とクラスタリングは目的も仕組みも異なるが、連携可能
DINOv2は画像の意味構造を捉える汎用ベクトル抽出器として非常に強力
ラベルのないデータセットでも、高精度な画像解析が可能に