みんなのAI
機械学習プレイグラウンド
読み込み中…

学ぶ

Ch.04

損失関数深化:クラス不均衡と距離学習

学校のテストで100問中99問が易しい計算、たった1問だけ難しい記述式だと想像してみてください。計算だけ全問正解でも99点になり、「よくできている」と錯覚しがちです。AIでも同じことが起き、これをクラス不均衡(Class Imbalance)と呼びます。多数決だけに頼ると、希少疾患の診断や不良品検出など少数クラスをすべて見逃します。
本章では損失関数そのものを賢く設計して不均衡に対処し、単に正解を当てるだけでなくデータ間の距離で類似度を学ぶメトリック学習(Metric Learning)の世界まで進みます。
重み付きCE、Focal loss、Triplet/Contrastive lossを概念→直感的な比喩→数式→実践のコツの順で学び、「点数は高いが重要な問題は外す」罠を避けましょう。
下の2×2図は、四つの損失が埋め込み空間を学習前→学習後にどう変えるか示します。
学習前学習後Contrastive Loss学習前学習後Triplet Loss学習前学習後w↑Weighted CE学習前学習後難しいFocal Loss
各パネルは学習前(左)→学習後(右)を表示。Contrastiveは同じ・違うペアを引き寄せ/押し出し、Tripletはanchor–positiveを近づけnegativeをmargin以上離します。重み付きCEは少数にw↑、Focalは易しい点を小さく・難しい点を大きくします。

似たものは引き、違うものは押す — 距離で学ぶ

不均衡は重み・Focal、類似度はContrastive・Triplet

損失関数の深化:不均衡データと距離で学ぶ

1. クラス不均衡とは?(多数決の罠に落ちたAI)
概念: データの中で特定クラスのサンプル数が他より圧倒的に多い・少ない現象です。通常の学習では、当てやすい多数クラスにばかり集中します。
直感的な比喩: 工場の不良品検出で99%が正常品のとき、AIが「すべて正常」と予測しても精度は99%になります。しかし本当の目的は、隠れた1%の不良品(少数クラス)を見つけることです。
実践のコツ: 基本の損失にクラス別重みを付けるか、間違えやすいサンプルに集中するFocal lossを使いましょう。
2. 重み付き交差エントロピー (Weighted CE)
概念: クラス ccc ごとに重み wcw_cwc​ を掛け、データの少ない少数クラスを誤分類したときの減点を大きくします。核心式は L=−wclog⁡(pc)L = - w_c \log(p_c)L=−wc​log(pc​) です。
直感的な比喩: 採点表の配点変更です。易しい99問は1点、希少な記述1問は100点にすれば、学生(AI)は記述問題を無視できません。
実践のコツ: 重みが大きすぎるとノイズまで暗記して性能が落ちます。クラス別指標を見ながら少しずつ調整してください。
3. Focal loss — わかる問題はスキップ、わからない問題に集中
概念: すでに正解を確信している易しいサンプル(予測確率 ptp_tpt​ が高い)は損失を大きく減らし、何度も間違える難しいサンプルに集中させます。核心式は Lfocal=−(1−pt)γlog⁡(pt)L_{\text{focal}} = - (1-p_t)^\gamma \log(p_t)Lfocal​=−(1−pt​)γlog(pt​) で、γ\gammaγ が集中度を調整します。
直感的な比喩: 試験勉強で、完璧な単元は飛ばし、毎回間違える弱点に時間を全投入する「効率的な一夜漬け」と同じです。
実践のコツ: 物体検出のように背景(多数)と物体(少数)の差が極端なときに特に有効です。
4. メトリック学習 — 仲間は近く、他人は遠く
概念: 正解ラベルだけでなく、猫同士は近く・犬とは遠くなど距離を学びます。Triplet lossはアンカー・ポジティブ・ネガティブの三つ組で、核心式は L=max⁡(0,d(a,p)−d(a,n)+α)L = \max(0, d(a,p) - d(a,n) + \alpha)L=max(0,d(a,p)−d(a,n)+α) です。
直感的な比喩: 結婚式の席替え。親しい友人(Positive)は同じテーブルに、仲の悪い人(Negative)は安全距離 α\alphaα 以上離します。
実践のコツ: 顔認証、類似商品検索など、サンプル間の類似度を比べる実務で広く使われます。

損失関数早見表

重み付きCE — サンプルが少ないクラスを外すと大きな減点。
核心式: L=−wclog⁡(pc)L = -w_c \log(p_c)L=−wc​log(pc​)
記号の意味 — pcp_cpc​ はモデルが正解クラス ccc と予測する確率(0〜1)。wcw_cwc​ はクラス ccc の配点で、少数クラスほど大きくします。log⁡(pc)\log(p_c)log(pc​) は確率が低いほど(外しが大きいほど)増え、先頭のマイナスで学習は pcp_cpc​ を上げる方向に進みます。
重みの例: 全サンプル NNN、クラス KKK のとき wc∝N/(Knc)w_c \propto N/(K n_c)wc​∝N/(Knc​) — クラス ccc の件数 ncn_cnc​ が小さいほど wcw_cwc​ が大きい。
数値例: pc=0.2p_c=0.2pc​=0.2, wc=5w_c=5wc​=5 なら損失 ≈−5log⁡(0.2)≈8\approx -5\log(0.2) \approx 8≈−5log(0.2)≈8 — 同じ誤りでも重みが大きいと罰が重い。
比喩: 通常の交差エントロピーにクラス別配点を付けたイメージです。
Focal loss — 既に正解できているサンプルの損失を減らし、難しいサンプルに集中。
核心式: Lfocal=−(1−pt)γlog⁡(pt)L_{\text{focal}} = -(1-p_t)^\gamma \log(p_t)Lfocal​=−(1−pt​)γlog(pt​)
記号の意味 — ptp_tpt​ はこのサンプルへの予測の確信度(正解確率)。(1−pt)(1-p_t)(1−pt​) はまだ迷っている度合い、(1−pt)γ(1-p_t)^\gamma(1−pt​)γ は γ\gammaγ が大きいほど易しいサンプル(ptp_tpt​ 高)の寄与を強く削ります。log⁡(pt)\log(p_t)log(pt​) は CE と同じ損失の骨格です。
数値例: pt=0.9p_t=0.9pt​=0.9, γ=2\gamma=2γ=2 なら (1−0.9)2=0.01(1-0.9)^2=0.01(1−0.9)2=0.01 — 損失は約1%に縮み、既に当てている問題はほぼ無視。pt=0.3p_t=0.3pt​=0.3 なら (0.7)2=0.49(0.7)^2=0.49(0.7)2=0.49 でまだ大きな罰が残ります。
比喩: 復習で覚えた単元は飛ばし、毎回間違える弱点だけ繰り返すのと同じです。
Triplet loss — 仲間は近く、他人は遠く。
核心式: L=max⁡(0, d(a,p)−d(a,n)+α)L = \max(0,\, d(a,p) - d(a,n) + \alpha)L=max(0,d(a,p)−d(a,n)+α)
記号の意味 — aaa は基準(anchor)、ppp は同じ正体(positive)、nnn は別の正体(negative)。d(⋅,⋅)d(\cdot,\cdot)d(⋅,⋅) は2点間の距離(L2など)。α\alphaα は negative が anchor から最低限離れる間隔(margin)。max⁡(0,⋅)\max(0,\cdot)max(0,⋅) は条件を満たせば損失0で、これ以上押し出す必要がないことを意味します。
数値例: d(a,p)=1d(a,p)=1d(a,p)=1, d(a,n)=4d(a,n)=4d(a,n)=4, α=0.5\alpha=0.5α=0.5 なら 1−4+0.5=−2.51-4+0.5=-2.51−4+0.5=−2.5 → max⁡(0,−2.5)=0\max(0,-2.5)=0max(0,−2.5)=0(十分離れている)。d(a,n)=1.2d(a,n)=1.2d(a,n)=1.2 なら 0.30.30.3 の罰が残ります。
比喩: 結婚式の席替え — 友人(ppp)は anchor の隣、仲の悪い人(nnn)は最低 α\alphaα 以上離します。
Contrastive loss — 同一ID(または拡張)は引き寄せ、別IDは押し出し。
核心式 — positive: L+=0.5 d2L_+ = 0.5\,d^2L+​=0.5d2 · negative: L−=0.5 max⁡(0, m−d)2L_- = 0.5\,\max(0,\, m-d)^2L−​=0.5max(0,m−d)2
記号の意味 — ddd は2つの埋め込み間の距離。positive は ddd が0に近いほど損失が小さく引き寄せます。negative の mmm は最小間隔(margin) で、d≥md \ge md≥m なら max⁡(0,m−d)=0\max(0,m-d)=0max(0,m−d)=0 で追加の押し出しは不要。0.50.50.5 はスケール用の定数です。
数値例: positive で d=0.4d=0.4d=0.4 なら 0.5×0.16=0.080.5\times0.16=0.080.5×0.16=0.08。negative で d=0.6d=0.6d=0.6, m=1m=1m=1 なら 0.5×(0.4)2=0.080.5\times(0.4)^2=0.080.5×(0.4)2=0.08 — まだ近すぎて押し出し中。
比喩: 同じ人の写真は一か所に集め、別人の写真は最低 mmm 以上離します。

なぜ重要か

1. 偽の100点表を見抜く
不均衡データの「精度99%」は錯覚かもしれません。本当に重要な問題を解いているか確認するには、精度だけでなく重み付きCEやFocal lossで『何が重要か』を損失の形として直接伝える必要があります。
2. 損失が優先順位を決める
モデルが何を最優先すべきかは損失の形に表れます。目的がずれていると、学習を重ねても本質的な問題は解けません。不均衡や距離学習では、どこにペナルティを効かせるかを損失で伝えることが鍵です。
3. 検索・推薦サービスの骨格
ショッピングアプリの「似た服を探す」やスマホの「顔でロック解除」では、AIは選択肢の正解を当てるのではなく、二つの写真がどれだけ似ているか(距離)を計算します。メトリック学習はこうした現代のAIサービスを支える中核技術です。

どう使うか

① 不均衡データ — 順番に診断して処方
症状: よく出る正解だけ当て、希少な正解は外す。
手順:
1. 分布確認 — クラス数の偏りを見る。
2. 損失変更 — 重み付きCEやFocal lossへ。
3. 学習設定の見直し — 損失を変えたら学習率やバッチサイズも確認。
② メトリック学習 — ペアで学ばせる
メトリック学習ではデータを「セット」で用意します。
- Triplet: (基準写真、同じ人、別の人) の3点セット。
- Contrastive: (原画像、拡張画像) をPositiveとして引き寄せ、それ以外は押し出す。
AIが距離を学び、似たサンプル同士が集まるように訓練します。
③ 易しすぎる問題は捨てる (Hard Negative Mining)
りんごと車のように簡単すぎるデータだけでは成長が止まります。似ているが正解が違うHard Negativeを意図的に入れ、難しい模試のように鍛えます。
④ 物差しの選択 — L2距離 vs コサイン類似度
- L2: 直線距離。大きさと位置の両方が重要なとき。
- コサイン: 矢印の向きの似具合。意味や雰囲気が重要なとき。
実務ヒント: 少数無視→重み/Focal、易しい問題ばかり→Focalのγ\gammaγ、検索品質低下→Hard negative追加。

まとめ

一行まとめ: 本章では損失関数を設計して不均衡データに対処し、埋め込み距離で類似度を学ぶ方法を学びました。
主要な四つの損失は次のとおりです。重み付きCEは逆頻度 wcw_cwc​ で少数クラスの誤分類を重く罰し、Focal lossは α\alphaα と (1−pt)γ(1-p_t)^\gamma(1−pt​)γ で易しいサンプルの寄与を減らします。Triplet lossは margin α\alphaα で positive を近く、negative を遠くに配置し、Contrastive lossは positive/negative ペアを引き寄せ・押し出して埋め込み空間を整えます。
実務では、多数クラスだけ当てるなら重み付きCEやFocalを使い、クラス別F1も併せて確認します。易しいサンプルばかり学ぶなら Focal の γ\gammaγ を調整しますが、大きすぎると不安定になります。Triplet 損失がほぼ0なら negative が易しすぎてhard negative miningが必要なことが多いです。顔認証・類似検索ではメトリック埋め込みと L2・コサイン距離の選択が鍵です。
チューニングは、まずクラス分布と指標を確認し、損失を選んでから学習率などを合わせます。一度に複数を変えず、一変数ずつ効果を比較するのが安全です。

問題を解くための説明

本章の問題は不均衡分類と距離による類似度学習の二本柱で整理すると解きやすくなります。不均衡では多数クラスだけ当てても精度が高く見えるため、通常の交差エントロピーだけでは希少クラスを見逃しがちです。重み付きCEはクラスごとに wcw_cwc​ を置き少数の誤分類を重く罰し、Focal lossは (1−pt)γ(1-p_t)^\gamma(1−pt​)γ で易しいサンプルの影響を減らして難しいサンプルに集中させます。一方メトリック学習はラベル当てではなく、埋め込み空間の距離で「どれだけ似ているか」を学びます。Triplet lossは anchor・positive・negative の三点で L=max⁡(0,d(a,p)−d(a,n)+α)L=\max(0,d(a,p)-d(a,n)+\alpha)L=max(0,d(a,p)−d(a,n)+α) を最小化し、Contrastive lossは同じペアを引き寄せ、違うペアを押し出します。設問で「少数だけ外す」なら重み/Focal、「negativeが易しすぎる」ならhard mining、「顔認証・類似検索」ならメトリック埋め込みをまず思い浮かべましょう。
定義問題では、損失が「何をより重く罰するか」を先に考えます。「重み付きCEで少数に大きい wcw_cwc​ を与える理由は?」という設問なら、
①逆伝播省略は学習の仕組みと無関係、
③バッチ固定も重みの目的ではありません。少数の誤分類コストを上げる
②が本質なので答え2です。

応用問題ではデータ状況を先に読みます。「不正1%・正常99%」のような極端な不均衡では、CEのみ維持(①)や少数削除(③)は目的に合いません。まず試すのは重み付きCEまたはFocal loss(②)です。→ 答え2

計算問題は式に数値を順に代入します。wB=N/(K⋅nB)w_B=N/(K\cdot n_B)wB​=N/(K⋅nB​) に N=1000N=1000N=1000, K=2K=2K=2, nB=100n_B=100nB​=100 を入れると 1000/(2⋅100)=51000/(2\cdot100)=51000/(2⋅100)=5 なので答え
②です。
定義例 — 「Focalの (1−pt)γ(1-p_t)^\gamma(1−pt​)γ の役割は?」は、既に当てやすい易しいサンプルの損失を減らし、難しいサンプルに学習を集中させる働きです。
①同一損失・
③学習率増加ではなく②易しいサンプルの寄与減が正しいので答え2です。

真偽例 — 「Tripletは anchor, positive, negative が必要」は正しい。三点の距離関係で学ぶからです。答え1

応用例 — 「顔認証用の埋め込みを学ぶ」なら分類よりTriplet/Contrastiveで距離を学ぶ方が自然です。→ 答え1

選択例 — 背景が圧倒的に多い極端な不均衡では Focal(②)が CEのみ(①)より選ばれやすいです。→ 答え2

概念例 — d(a,p)=1d(a,p)=1d(a,p)=1, d(a,n)=4d(a,n)=4d(a,n)=4, α=0.5\alpha=0.5α=0.5 のとき Triplet 項は max⁡(0,1−4+0.5)=0\max(0,1-4+0.5)=0max(0,1−4+0.5)=0。margin を満たしており追加の罰はないので答え3です。

計算例 — L2距離 (0,0)(0,0)(0,0)–(3,4)(3,4)(3,4) は 9+16=5\sqrt{9+16}=59+16​=5 なので答え
②です。