「あれ、この人だけ2つに分かれてる」
スマホの写真アプリを開くと、勝手に「この人」「あの人」と顔ごとにまとめてくれますよね。便利なんですが、たまに同じ人が別々のフォルダに分かれていたり、逆に別人の写真がひとつのフォルダに紛れ込んでいたりすることないですか?
しかも厄介なのは、全部がぐちゃぐちゃなわけではなく、「特定の人」「特定の1枚」だけがつまずく、という起き方をすること。
精度不足、では説明しきれない
顔認識の精度がまだ完璧じゃないから、と言われればそれまで、なわけですが。でも、ちょっと不思議なことがあります。ほとんどの写真はちゃんと分けられているのに、なぜ一部だけがつまずくのか。しかも、写真を数枚追加したとたん、今まで正しく分かれていた別の人の分類まで少し動くことがある。単なる精度不足だと、この「一部だけ」「後から動く」の合わせ技が、どうにも説明しにくいんです。
その人の「揺れ方」まで測っている
ここで、写真アプリが顔をどう見ているかを、数学の見方で解釈できるか、やってみましょう。アプリは顔を、目の間隔、輪郭、鼻の形…といったたくさんの数値の組、つまり「特徴の並び」に変換します。ひとりの人は、この特徴の空間の中の「だいたいこのあたり」という一団の点になります。新しい写真が来たら、どの人の一団にいちばん近いかで振り分ける。ここまでは素直な「近さ」の話です。
でも、非自明なのはここから。人によって、写り方の「揺れやすい方向」が違うんです。ある人は角度によって顔の見え方が大きく変わるけれど、別の人はいつも正面でほとんど揺れない。判別分析の一種である二次判別分析という見方では、この「その人がふだんどれくらい、どの方向に揺れるか」まで使って近さを測り直します。同じ見た目の差でも、その人がよく揺れる方向のズレなら「まあ、いつものブレね」と軽く数え、めったに揺れない方向のズレなら「これは別人かも」と重く数える。
「珍しい差」で測るという発想
この「ばらつきの方向で重みを変える」見方は、顔だけの話じゃありません。工場で製品の異常を見つけるとき、いつも大きく変動する測定値が少しズレても異常とはみなさず、普段安定している値がわずかに動いたら警報を出す。健康診断で、日によって上下しやすい数値と、めったに動かない数値を同じ「1の差」で扱わないのも同じ発想です。絶対的な差の大きさではなく、その文脈でどれくらい珍しい差か、で測っている。
顔を数値の並びとして扱い、その空間の中で意味を捉えるという発想そのものは、以前に書いた記事とも地続きです。
ちなみに、意味を「軸」として捉える話は、こちらでも扱っています。

数式で正面から
この「珍しさで測る距離」を式に書き直してみると、こう読めます。
$$D_k^2(x) = (x – \mu_k)^\top \Sigma_k^{-1} (x – \mu_k)$$
記号を日常語に置き換えます。$k$ は候補となる人、$x$ は新しい写真の特徴の並び、$\mu_k$ はその人の写真たちの平均、つまりその人の「まんなか」。$x – \mu_k$ は「まんなかからどれだけ離れているか」です。ふつうの距離ならこれを二乗して終わりですが、まんなかに挟まった $\Sigma_k^{-1}$ が効きます。$\Sigma_k$ はその人の写真が「どの方向に、どれくらい、どう連動して揺れるか」を並べた表(共分散)で、その逆 $\Sigma_k^{-1}$ を挟むと、よく揺れる方向のズレは割り引かれ、めったに揺れない方向のズレは強調される。同じ長さのズレでも、方向によって数え方が変わる、という調整が一発で入るわけです。なお、ここでの $\Sigma_k$ は、たくさんの数を足し合わせる総和の記号 Σ とは別物で、共分散を並べた表(共分散行列)を表す記号として使っています。
統計学では、この「共分散で揺れ方を調整した距離」をマハラノビス距離と呼びます。上の式は、二次判別分析の判別式の中で使われるマハラノビス距離の部分で、クラスごとに別々の $\Sigma_k$ を使う形になっています(全員で同じ共分散を仮定する線形判別分析とは、境界の形が変わります)。完全な二次判別分析の式には、各クラスの起こりやすさ(事前確率)や $\Sigma_k$ の大きさを測る項(行列式)も入りますが、ここでは「揺れ方で距離が変わる」部分だけを取り出してイメージを掴んでいます。
実際のスマホの写真アプリがどこまで学習を更新しているかは公開されていませんが、もし手持ちの写真からその人の中心と揺れ方を学習し直すような仕組みなら、その人の $\mu_k$ と $\Sigma_k$、つまり「まんなか」と「揺れ方」も変わります。すると距離の測り方そのものが少し変わり、これまでぎりぎり別人側にいた1枚が引き込まれたり、逆にこぼれたりする。「後から分類まで動く」可能性は、ものさし自体が写真とともに動くことから説明できます。

ここで大事なのは、すべての写真アプリがこの式をそのまま実装している、と言いたいわけではないことです。実際の顔認識は、ニューラルネットワークで顔を特徴の並びに変え、別の分類法やクラスタリングでまとめる構成もあります。ただ、「中心からの単純な近さだけではなく、特徴のばらつきまで含めて境界を決める」という判別分析の考え方を重ねると、なぜ似た距離の写真でも扱いが変わるのかを整理できます。
そして、境界は写真ごとに固定された線ではありません。Aさんの写真が増えればAさんの中心と揺れ方が変わり、Bさんの写真が増えればBさん側も変わる。新しい1枚だけを判定しているように見えて、裏では各グループを隔てる地図全体が引き直される可能性があります。正面写真ばかりを追加すると「正面のAさん」は詳しくなっても、横顔の揺れ方はまだ分からない。枚数だけでなく、どんな揺れを見せたかが効くわけです。
わざと数枚足すと、むしろ締まる
そう考えると、「同じ人を別人にする」ミスは、AIがサボった結果というより、その人の「揺れ方」をまだ十分に知らないだけ、とも読めます。だとしたら、いろんな角度・表情の写真をわざと数枚足してやると、アプリはその人の揺れ方を学び直して、むしろ分類が締まっていく。そんな逆説的な直し方が効いたりするのかもしれませんね?
