TT Lab
ブログ

한국어 English 日本語 中文

はじめる
ブログ

ブログ

自己教師あり学習 2: MAE — 画像の4分の3を隠して当てさせると、なぜうまく学ぶのか

ステータス: ドラフト(2026-10-13)。 論文の数値は原文を開いて条件とともに確認しました。実際に試したものはノートPCのCPUによるおもちゃの例(code/03_mae_toy.py、3分前後)です。実際の写真や卓球の映像でMAEを学習させたことはありません(未実測)。 シリーズ「ビジョンモデルを読む 2」第3回。前回の記事: 自己教師あり学習 1. ViTが画像を断片(パッチ)に分割する方式は ビジョンモデルを読む 1のViT編をご覧ください。

自己教師あり学習 2: MAE

目次

1. 直観: 穴埋め

第2回の手法は「2つの変形が同じものである」ことを教えました。MAE(Masked Autoencoder)は別の課題を出します。 画像の一部を隠し、隠された部分を当てよ。

テキストではこの問題がすでに大きな成功を収めています。BERTは文章の単語の15%を隠して当てさせることで言語モデルの土台を作りました。画像でも同じ発想を考えることができます。隠された場所をもっともらしく埋めるには、「ここは卓球台の角がつながるはずだ」、「この腕は肩についているはずだ」といった構造を知っている必要があるからです。

しかし、画像を15%だけ隠しても簡単すぎます。隣接するピクセルを適当につなぎ合わせれば埋まってしまいます。画像はテキストよりも 情報がはるかに低密度です。隣り合うピクセルがほぼ同じ値を持つからです。MAEの答えは大胆です。 75%を隠します。 この程度になると、つなぎ合わせでは無理であり、画像全体の構造を理解しなければ埋めることができません。

2. 画像: 非対称エンコーダー・デコーダー

75% 를 가리고, 보이는 25% 만 인코더에 16조각 중 4개만 보임 인코더(ViT) 보이는 4개만 계산 ≈ ¼ 얕은 디코더 제자리 + 빈칸 마스크 토큰 → 가린 조각 화소 복원 손실 = 가린 조각에서만 잰 제곱 오차 목표 화소는 조각마다 평균·표준편차로 정규화 학습이 끝나면 디코더는 버리고 인코더만 쓴다 가리는 비율 BERT(글) 15% · BEiT 약 40% MAE 75% · VideoMAE 90% 중복이 많을수록 더 많이 가려도 된다
画像: 断片の75%を隠し、見える25%だけをエンコーダーに入力するMAE

MAEの2つ目の工夫は計算量です。

  1. 画像をViTのように小さな正方形の断片(16×16ピクセル、ViT-Hは14×14)に分割します。
  2. 断片の75%をランダムに選びます。 選んだ断片はエンコーダーに全く入力しません。 大きなViTエンコーダーは、見える25%だけを処理します。
  3. エンコーダーの出力を元の位置に戻し、空いた場所には「ここは隠された」という学習可能なベクトル(マスクトークン)を埋めます。
  4. 小さく浅いデコーダーが、隠された断片のピクセルを復元します。
  5. 学習が終わるとデコーダーは捨ててエンコーダーだけを使います。

トランスフォーマーの計算量はトークン数に比例するか(MLP)、その二乗に比例します(アテンション)。トークンを4分の1に減らすと、大きなエンコーダーの計算が大幅に減少します。デコーダーはトークンあたりの計算量がエンコーダーの10%未満になるよう浅く作られています(論文)。

3. どのように学習させるか

損失

L = 가린 조각들에 대해서만 평균한 (예측 화소 − 정답 화소)²

見える断片の復元誤差は計算しません。見えるものを模倣するだけでは学ぶべきことがないからです。

正解ピクセルには1つの処理を施します。 断片ごとに平均を引いて標準偏差で割ったピクセルを目標として使用します。断片全体の明るさよりも、断片内の模様(エッジ、質感)を当てることに集中させるためです。ViT-Lにおいてファインチューニングの精度が84.9%から85.4%へ、線形評価が73.5%から73.9%へと向上しました(論文)。

ラベルとデータ

ラベルは使用しません。論文ではImageNet-1Kの画像のみを使用し、事前学習の後にラベルでファインチューニングするか、線形評価を行いました。

マスキング方式

同じ75%でも、どのように隠すかが重要でした(論文、ViT-L、ファインチューニング / 線形評価)。

マスキング方式 割合 ファインチューニング 線形評価
ランダムな断片 75% 84.9 73.5
大きな塊(ブロック) 50% 83.9 72.3
大きな塊 75% 82.8 63.9
グリッド(1マス飛ばし) 75% 84.0 66.0

グリッド状に隠すと見える断片が均一に分散するため隣接同士の継ぎ合わせが容易になり、大きな塊で75%を隠すと難しすぎることになります。ランダムはその間のバランスです。

BEiTとの違い

MAEよりも少し先行していたBEiTは、隠された断片の ピクセル の代わりに、事前学習されたトークナイザー(dVAE、8,192語)がその断片に付与した 単語番号を当てさせました。約40%を塊状に隠しました(論文)。MAEはトークナイザーなしでピクセルを直接当ててもよいことを示しており、その分構造がシンプルです。

4. 実際にやってみる

code/03_mae_toy.py は16×16の白黒画像に2つの点を描きます。画像の「模様」(ラベル)は2つの点の配置です:横並び、縦並び、「\」の対角、「/」の対角。点的位置・サイズ・明るさは画像ごとに異なります。模様を把握するには1つの断片ではなく 断片同士の関係を見る必要があります。

画像を4×4の16個の断片に分割し、小さなトランスフォーマー(エンコーダー3層、デコーダー1層、幅64)でMAEを学習させました。隠す割合だけを変えてそれぞれ800ステップずつ学習させ、エンコーダーの特徴量に線形分類器のみを載せて模様の分類精度(線形プローブ)を測定しました。模様のラベルはこのプローブでのみ使用します。

# 03_mae_toy.py 에서 줄임
order = torch.rand(n, 16).argsort(1)             # 그림마다 다른 무작위 가리기
keep, masked = order[:, :n_keep], order[:, n_keep:]
z = encoder(gather(embed(patches) + pos, keep))  # 보이는 조각만 인코더로
full = mask_token.repeat(n, 16, 1); full.scatter_(1, keep, z)
pred = head(decoder(full + dec_pos))
loss = mse_per_patch(pred, normalize_per_patch(patches)).gather(1, masked).mean()   # 가린 조각에서만

結果(2つのシードの平均、 code/03_mae_toy.out.txt):

隠す割合 エンコーダーが見る断片 隠した断片の復元誤差(正規化ピクセルMSE) 線形プローブの精度
基準: ピクセルそのまま — — 0.407
基準: 学習していないエンコーダー 16 — 0.575
25% 12 0.699 0.803
50% 8 0.736 0.812
75% 4 0.839 0.783
90% 2 0.880 0.763

隠して当てさせることだけで学習したエンコーダーは、どの割合でも学習していないエンコーダー(0.575)やピクセル(0.407)よりもはるかに優れた特徴量を生成しました。ラベルなしで「関係」を学習したことを意味します。

しかし、このおもちゃでは 75%が最適ではありませんでした。 25〜50%のほうがわずかに良好でした(シード間の差が±3%pであるため、25%と50%の優劣はつけられません)。これがMAEの核心的な仮定を裏返しに示しています。私たちの画像は16個の断片しかなく、大部分が空の背景であるため、情報が2点に集中しています。4つしか見せないと2点が全く見えないことが多く、その場合は当てる根拠がありません。 高いマスキング割合は、画像が重複で満ちているときに有効な処方箋です。実際の写真1枚は数百の断片からなり、隣接する断片同士がよく似ています。第6回の映像は隣接フレーム同士がさらに似ているため、90%にまで達します。

学習時間はマシンの負荷によって大きく変動しました。同じコードを2回実行したところ、25%は21.5秒・21.6秒、75%は27.9秒・16.5秒、90%は23.7秒・15.7秒でした(精度と誤差の数値は2回とも同じでした)。負荷が低いときに実行した2番目の値でも、エンコーダートークンを¼(12個 → 4個)に削減した効果は時間の約25%短縮にとどまりました。この規模のモデルでは、トークン数よりもPythonやライブラリの固定費、および削減されないデコーダー(16個のトークンすべて)が大きいためです。大きなViTで生じる3倍以上のメリットは、以下の論文の数値をご確認ください。

5. 論文の数値

すべてMAEの論文(Heら、CVPR 2022)の値であり、ImageNet-1Kのみで事前学習を行っています。

項目 値 条件
ファインチューニング top-1 ViT-B 83.6 · ViT-L 85.9 · ViT-H 86.9 · ViT-H(448px) 87.8 事前学習 1,600エポック
線形評価 top-1 ViT-B 68.0 · ViT-L 75.8 · ViT-H 76.6 対照学習系(MoCo v3 ViT-L 77.6)よりも低い
学習速度 計算量が3.3倍減少、実際の時間はViT-Lで2.8倍・他の設定で3.5〜4.1倍短縮 TPU 128コア、800エポック
マスキング割合の感度 線形評価は割合に敏感(最適点付近と最大約20%pの差)、ファインチューニングは40〜80%でおおむね良好 ViT-L

2行目が興味深いです。MAEは 線形評価では対照学習に劣り、ファインチューニングでは優れています。 隠して当てさせることで学習した特徴量は、そのまま線形分類器で評価するにはあまり向いていませんが、少し修正して使用すれば非常に優れた出発点になるということです。第2回のDINO系と本稿のMAE系がそれぞれ異なる強みを持つ理由です。第8回のViTPoseは、MAEで事前学習したViTに小さなデコーダーだけを追加して姿勢を推定します。

6. 限界

7. 我々のプロジェクトとのつながり

ティティの一言。 4分の3を隠しても当てられるということは、それだけ画像に繰り返しが多いということです。私のおもちゃの絵のように点が2つしかない画像は、4分の3を隠すと点が消えてしまうので当てられません。隠す割合は、データにどれくらい繰り返しがあるかに合わせて選ぶ必要があります。

参考文献

ログインするといいねできます

コメント

まだコメントはありません。

ログインするとコメントできます