画像分類モデルを学習させて、テスト画像を1枚見せたとします。モデルは「これはネコです、確率99.99%」と答えました。ところが、その画像はネコとイヌのどちらにも見える微妙な1枚でした。人間なら「たぶんネコだけど、イヌかもしれない」と迷うところを、モデルは一切の迷いなく断言してしまう。この「根拠のない自信過剰」は、深層学習モデルが抱える典型的な弱点です。
なぜモデルはここまで過信するのでしょうか。原因の一つは、学習に使うターゲットラベルが「正解クラスは確率1、それ以外は確率0」という極端な形(one-hot)をしていることにあります。「正解は1、不正解は0、それ以外の答えは一切認めない」という硬い的を撃たせ続ければ、モデルは出力をどこまでも尖らせようとします。
ラベル平滑化(Label Smoothing) は、この硬い的をほんの少しだけ柔らかくする、たった一行で実装できる正則化テクニックです。正解クラスに割り当てる確率を1.0からたとえば0.9へ下げ、余った0.1をすべてのクラスに薄く配り直す。これだけで、モデルの過信が抑えられ、汎化性能が上がり、さらに「予測確率が信頼度として妥当になる(キャリブレーションが改善する)」という嬉しい副作用まで得られます。Inception系の画像分類、Transformerによる機械翻訳、音声認識など、現代の大規模モデルの多くが標準的に採用しています。
本記事の内容
- one-hotターゲットが引き起こす過信・過学習・ロジット発散という問題
- ラベル平滑化の定義と、交差エントロピー・勾配に与える作用
- 平滑化が最適ロジットに与える幾何的効果(クラス間マージンと表現の収束)
- モデルキャリブレーション(信頼度の妥当性)への効果
- 知識蒸留との関係、使いどころと注意点、εの選び方
- numpyによるfrom-scratch実装
前提知識
この記事を読む前に、以下の記事を読んでおくと理解が深まります。
ラベル平滑化とは
学校のテストを思い浮かべてください。「この問題の答えは A、それ以外は完全に間違い」という採点では、生徒は A という答えだけを丸暗記し、なぜ A なのかを考えなくなります。一方で「A が最も正しいが、B にも一理ある」という採点なら、生徒は答えの背後にある構造を学ぶようになります。ラベル平滑化がやっているのは、まさにこの「採点を少し柔らかくする」操作です。
通常の分類学習では、正解クラスのターゲット確率を1、それ以外を0とする one-hot ベクトルを使います。ラベル平滑化では、この one-hot ベクトルから少量の確率 $\epsilon$ を取り出し、全クラスへ均等にばらまきます。正解クラスは「ほぼ1だが完全な1ではない」、不正解クラスは「ほぼ0だが完全な0ではない」というターゲットに変わります。

上の図が示すように、ラベル平滑化は「正解だけに全確率を置く硬い的」を受け取り、確率 $\epsilon$ だけを他クラスへ配り直して「少し余地を残したターゲット」を作ります。やっていることは確率の再分配だけで、モデル構造も損失関数の種類も変えません。だからこそ、既存の学習パイプラインにほぼコストゼロで組み込めるのです。
それでは、なぜわざわざターゲットを柔らかくする必要があるのか。その動機を理解するために、まずは one-hot ターゲットが何を引き起こすのかを掘り下げましょう。
なぜ one-hot ターゲットは問題なのか
one-hot ターゲットは一見すると自然です。「正解は1つに決まっているのだから、正解クラスを1、残りを0にするのは当然だ」と感じます。しかし、この極端なターゲットは、交差エントロピー損失と組み合わさったときに厄介な性質を生みます。
分類モデルは、最終層でクラスごとの実数値(ロジット $z_k$)を出し、ソフトマックスで確率 $p_k = \dfrac{e^{z_k}}{\sum_j e^{z_j}}$ に変換します。one-hot ターゲットに対する交差エントロピー損失は、正解クラス $y$ の予測確率 $p_y$ だけを使って
$$ L = -\log p_y $$
と書けます。ここに最初の問題が潜んでいます。この損失は $p_y \to 1$ で初めて最小(ゼロ)になりますが、$p_y$ を1に近づけるには、正解ロジット $z_y$ を他のロジットより限りなく大きくしなければなりません。ソフトマックスの分母にある $e^{z_y}$ が支配的になるには、ロジット差が無限大に向かう必要があるからです。
つまり、one-hot ターゲットは「正解ロジットを際限なく引き上げ、不正解ロジットを際限なく引き下げよ」とモデルに命じ続けます。実際には学習が有限ステップで止まるので無限大には達しませんが、それでもロジットは異常に大きな値まで膨れ上がります。これが三つの弊害を生みます。
- 過信: ロジットが大きいほどソフトマックス確率は1に張り付き、モデルはほぼすべての予測を「確率99%以上」と出すようになります。間違った予測ですら高い確率で出すため、出力確率が信頼度として全く役に立たなくなります。
- 過学習: 訓練データの正解ラベルに対してロジットを極端に尖らせることは、訓練データへの過剰な適合に直結します。少数のノイズラベルや曖昧なサンプルにも自信満々で適合してしまい、汎化性能が落ちます。
- ロジット発散: 重みのノルムが大きくなり続け、表現が不安定になります。後で見るように、最適ロジットが有限値に収まらないこと自体が学習を不健全にします。

この棒グラフは、5クラス分類で正解がクラス3のときのターゲットを比べたものです。青の one-hot は正解に1.0、残りに0.0を割り当てます。オレンジの平滑化($\epsilon=0.1$)では正解が0.92に下がり、余った0.08を5クラスへ均等に配るため各クラスに0.016ずつ乗ります。正解を「完全な1」にしないことで、モデルが正解ロジットを無限に引き上げる動機を断ち切る、というのが平滑化の狙いです。
では、この再分配を数式でどう表すのか。次にラベル平滑化の定義を見ていきましょう。
ラベル平滑化の数学的定義
ラベル平滑化の定義式は、「正解に少し控えめな確率を与え、残りを全クラスに均等配分する」という日本語の説明をそのまま式にしたものです。
クラス数を $K$、正解クラスを $y$、平滑化の強さを表すパラメータを $\epsilon \in [0, 1]$ とします。平滑化後のターゲット確率ベクトル $\bm{y}^{\text{LS}}$ の第 $k$ 成分は
$$ y^{\text{LS}}_k = (1 – \epsilon)\, \delta_{k,y} + \frac{\epsilon}{K} $$
で定義されます。ここで $\delta_{k,y}$ はクロネッカーのデルタで、$k=y$ のとき1、それ以外で0です。one-hot ベクトル $\bm{y}^{\text{onehot}}$ を使えば、より直感的に
$$ \bm{y}^{\text{LS}} = (1 – \epsilon)\, \bm{y}^{\text{onehot}} + \frac{\epsilon}{K}\, \bm{1} $$
と書けます。$\bm{1}$ はすべての成分が1のベクトルです。第1項は元の one-hot を $(1-\epsilon)$ 倍に縮め、第2項で全クラスに $\epsilon/K$ ずつ底上げしています。具体的に成分を書き下すと、
$$ y^{\text{LS}}_k = \begin{cases} 1 – \epsilon + \dfrac{\epsilon}{K} & (k = y \text{:正解クラス}) \\[2mm] \dfrac{\epsilon}{K} & (k \neq y \text{:不正解クラス}) \end{cases} $$
となります。正解クラスは $1 – \epsilon + \epsilon/K$、不正解クラスは $\epsilon/K$ です。全成分の和を取ると、$(1-\epsilon) \cdot 1 + K \cdot \dfrac{\epsilon}{K} = 1 – \epsilon + \epsilon = 1$ となり、確率分布の条件(和が1)を保ちます。これは「確率の再分配」であって新たに確率を生み出しているわけではない、という事実をきちんと反映しています。
別の見方として、ラベル平滑化のターゲットは「元の one-hot 分布」と「一様分布 $u_k = 1/K$」を $(1-\epsilon) : \epsilon$ で混ぜたものとも解釈できます。
$$ \bm{y}^{\text{LS}} = (1 – \epsilon)\, \bm{y}^{\text{onehot}} + \epsilon\, \bm{u} $$
この「一様分布を混ぜる」という見方は、後で交差エントロピーへの作用を考えるときに役立ちます。$\epsilon$ が0なら通常の one-hot、$\epsilon$ が1なら完全な一様分布です。$\epsilon$ は両者のあいだを連続的に補間するつまみだと思ってください。

この図は $K=10$ クラスで $\epsilon$ を0から0.5まで動かしたときのターゲット確率です。青の正解クラスは $\epsilon$ とともに下がり、オレンジの不正解クラスは上がっていき、両者の差(青い帯の幅)が縮まっていきます。$\epsilon$ が大きいほど一様分布(灰の破線 $1/K$)に近づき、正解と不正解の区別が曖昧になります。$\epsilon$ は「どれだけ曖昧さを許すか」を直接コントロールするパラメータなのです。
ターゲットの形がわかったので、次はこれを交差エントロピー損失に入れたとき、損失と勾配がどう変わるのかを見ていきます。
交差エントロピーへの作用と勾配の変化
ラベル平滑化が学習にどう効くかを理解する鍵は、平滑化ターゲットを使った交差エントロピーが「元の損失+一様分布への引き寄せ項」に分解できる点にあります。
平滑化ターゲット $\bm{y}^{\text{LS}}$ に対する交差エントロピー損失は、全クラスにわたる和になります(one-hot のときは正解クラスの1項だけでしたが、平滑化では不正解クラスも $\epsilon/K$ のターゲットを持つので消えません)。
$$ L^{\text{LS}} = -\sum_{k=1}^{K} y^{\text{LS}}_k \log p_k $$
ここに $\bm{y}^{\text{LS}} = (1-\epsilon)\bm{y}^{\text{onehot}} + \epsilon \bm{u}$ を代入します。和は線形なので二つの項に分けられます。
$$ L^{\text{LS}} = (1 – \epsilon) \left( -\sum_k y^{\text{onehot}}_k \log p_k \right) + \epsilon \left( -\sum_k u_k \log p_k \right) $$
第1項は通常の one-hot 交差エントロピー $-\log p_y$ の $(1-\epsilon)$ 倍です。第2項は一様分布 $\bm{u}$ とモデル予測 $\bm{p}$ の交差エントロピーです。$u_k = 1/K$ を代入すると、
$$ L^{\text{LS}} = (1 – \epsilon)\,\big( -\log p_y \big) + \frac{\epsilon}{K} \left( -\sum_{k} \log p_k \right) $$
を得ます。第2項 $-\frac{1}{K}\sum_k \log p_k$ は、すべてのクラスの予測確率を等しく大きくしようとする力です。これは予測分布 $\bm{p}$ を一様分布へ引き寄せる正則化項にほかなりません。実際、一様分布との交差エントロピーは「一様分布のエントロピー(定数)+ $\bm{p}$ を $\bm{u}$ へ近づける KLダイバージェンス」と書けるので、ラベル平滑化は 予測分布が一様分布から離れすぎることへのペナルティ を損失に加えている、と理解できます。
この「分解」が、ラベル平滑化が正則化として働く本質です。one-hot の損失だけなら $p_y$ を1に張り付かせるのが最適でしたが、第2項が「他クラスの確率もある程度残せ」と引っ張るため、最適解は1の手前で止まります。

この図は2クラスの場合に、正解クラスの予測確率 $p$ を横軸にとった損失曲線です。青の one-hot は $p \to 1$ で単調に下がり続け、損失を減らすには $p$ を1へ押し込み続けるしかありません。一方、オレンジ($\epsilon=0.1$)と赤($\epsilon=0.2$)の平滑化曲線は、$p = 1-\epsilon$(点線)で最小値を持つ谷型になります。$p$ を1へ近づけすぎると、不正解側のターゲット $\epsilon/2$ を無視することになり、第2項の $-\log(1-p)$ が急増して損失がかえって増えるのです。最適点が1の内側に移ることが、過信を抑える数学的な仕組みです。
勾配がどう変わるか
学習を直接動かすのは勾配です。ここで重要なのは、ソフトマックス+交差エントロピーの勾配が、ターゲットの種類によらず驚くほどきれいな形になることです。ロジット $z_k$ に対する損失の勾配は、
$$ \frac{\partial L}{\partial z_k} = p_k – t_k $$
で与えられます($t_k$ はターゲットの第 $k$ 成分)。この「予測マイナスターゲット」という形は、one-hot でも平滑化でも共通です。導出は交差エントロピー誤差の記事に詳しいので、ここでは結果だけを使います。one-hot と平滑化でターゲット $t_k$ だけが違うので、勾配は次のようになります。
正解クラス $k=y$ では、one-hot のターゲットは $t_y=1$、平滑化では $t_y = 1-\epsilon+\epsilon/K$ です。したがって正解ロジットの勾配は、
$$ \frac{\partial L}{\partial z_y} = p_y – \left(1 – \epsilon + \frac{\epsilon}{K}\right) $$
不正解クラス $k \neq y$ では、one-hot のターゲットは $t_k=0$、平滑化では $t_k = \epsilon/K$ なので、
$$ \frac{\partial L}{\partial z_k} = p_k – \frac{\epsilon}{K} $$
となります。形は同じでも、勾配がゼロになる「停止点」が変わるのがポイントです。one-hot では $p_y = 1$ にならない限り正解ロジットの勾配がゼロにならず、いつまでも引き上げ続けます。平滑化では $p_y = 1 – \epsilon + \epsilon/K$ に達すれば勾配がゼロになり、それ以上引き上げる力が消えます。

この図は正解クラスの予測確率 $p$ に対する正解ロジットの勾配です。青の one-hot 線は $p=1$ でしか勾配ゼロ(横軸との交点)に達しませんが、オレンジ($\epsilon=0.1$)や赤($\epsilon=0.2$)の平滑化線は $p = 1-\epsilon$ 付近で勾配がゼロになります。注目すべきは、$p$ が1に近い領域でも平滑化の勾配が依然として負である点で、これが「もう十分に自信があるからこれ以上尖らせるな」という引き戻しの力として働きます。one-hot にはこのブレーキがありません。
このブレーキの有無は、最終的に学習されるロジットの値そのものを大きく左右します。次に、最適なロジットがどんな値に落ち着くのか、その幾何を見ていきましょう。
最適ロジットの幾何 — マージンと表現の収束
ラベル平滑化が表現学習に与える影響を理解するには、「損失を完全に最小化したとき、ロジットはどんな値になるのか」を解析的に求めるのが近道です。
平滑化ターゲット $\bm{y}^{\text{LS}}$ に対する交差エントロピーが最小になるのは、予測分布 $\bm{p}$ がターゲット $\bm{y}^{\text{LS}}$ に完全に一致したときです。これは交差エントロピーがターゲットと予測の KLダイバージェンスを最小化することから従います(KLダイバージェンスは二つの分布が一致したときにのみゼロ)。したがって最適なソフトマックス出力は
$$ p_k^{\star} = y^{\text{LS}}_k = \begin{cases} 1 – \epsilon + \dfrac{\epsilon}{K} & (k = y) \\[2mm] \dfrac{\epsilon}{K} & (k \neq y) \end{cases} $$
です。この $\bm{p}^\star$ を生むロジットを逆算します。ソフトマックスは定数シフトに対して不変(全ロジットに同じ値を足しても出力は変わらない)なので、不正解クラスのロジットをすべて $z_{\text{other}}$ で揃えると考えてよく、正解と不正解のロジット差 $\Delta = z_y – z_{\text{other}}$ を求めれば十分です。ソフトマックスの定義から、正解確率と不正解確率の比は
$$ \frac{p_y^\star}{p_k^\star} = \frac{e^{z_y}}{e^{z_{\text{other}}}} = e^{\Delta} $$
なので、両辺の対数をとってロジット差について解くと、
$$ \Delta = \log \frac{p_y^\star}{p_k^\star} = \log \frac{1 – \epsilon + \epsilon/K}{\epsilon/K} $$
を得ます。ここが決定的に重要です。$\epsilon = 0$(one-hot)の場合、不正解確率 $p_k^\star = 0$ が分母に来るため $\Delta = \log(1/0) = \infty$ となり、最適ロジット差は 無限大に発散 します。一方 $\epsilon > 0$ なら分母が正の有限値なので、$\Delta$ は 有限の値 に収まります。たとえば $K=10$、$\epsilon=0.1$ なら $\Delta = \log\frac{0.91}{0.01} \approx 4.5$ という具体的な値です。
つまり、ラベル平滑化は「正解ロジットと不正解ロジットのあいだに、有限で一定のマージン $\Delta$ を作れ」とモデルに指示しているのです。one-hot のように際限なく引き離すのではなく、ちょうどよい距離で止めさせます。

このシミュレーションは、勾配降下でロジット差 $z$ がどう動くかを追ったものです。青の one-hot はステップを重ねるほど $z$ が際限なく増大し続けます(収束先がない)。緑・オレンジ・赤の平滑化は、それぞれ理論値(点線)へ向けてきれいに収束し、$\epsilon$ が大きいほど小さなマージンで止まります。この「有限の停止点を持つ」性質こそ、ロジット発散を防ぎ、過信を抑える正体です。
表現の収束 — クラスが等距離のテンプレートに集まる
ロジット $z_k = \bm{w}_k^\top \bm{h}$ は、最終層の重みベクトル $\bm{w}_k$ と特徴 $\bm{h}$ の内積です。最適ロジットが「正解とのマージンは一定、不正解どうしは互いに等しい」という対称的な値に決まるということは、同じクラスのサンプルの特徴 $\bm{h}$ が、対応する重みベクトルの周りにタイトに集まる ことを意味します。one-hot では特徴を重みの方向へ無限に押し出そうとするため、クラスター内の広がりが大きく配置も歪みがちですが、平滑化は有限マージンで止めるため、各クラスがコンパクトで等距離なテンプレート構造に収束します。

左の one-hot ではクラスターの広がりが大きく、各クラスの中心(星印)の配置も不均一です。右のラベル平滑化では同じクラスのサンプルが中心の周りにタイトに集まり、クラスター間の距離もそろっています。Müller らの研究で報告されたこの「等距離のクラスター化」効果は、平滑化がクラス間の幾何を整える正則化として働くことを視覚的に示しています。ただし後述するように、この「不正解どうしを区別しない」性質が、知識蒸留では裏目に出ます。
この幾何的効果は、表現を整えるだけでなく、モデルの出力確率を「信頼度」として読めるようにする効果も持ちます。次にキャリブレーションの話に移りましょう。
モデルキャリブレーションへの効果
モデルが「確率90%でネコ」と言ったとき、本当にそのような予測の90%が当たっていてほしい — これが キャリブレーション(較正) の考え方です。予測確率(信頼度)が実際の正解率と一致しているモデルを「よくキャリブレートされている」と言います。
深層学習モデルは一般に 過信 の傾向があり、信頼度が実際の正解率より高く出ます。前述の通り、one-hot ターゲットがロジットを尖らせ、ソフトマックス確率を1へ張り付かせるためです。「99%」と言いながら実際の正解率が80%しかない、といったズレが生じます。医療診断や自動運転のように、確率そのものを意思決定に使う場面では、このズレは致命的です。

左の one-hot 学習では、予測の最大信頼度が1.0付近に密集しています。ほとんどの予測を「ほぼ確実」と出してしまう過信の状態です。右のラベル平滑化では信頼度が中程度の値に分散し、「自信のある予測」と「迷っている予測」の区別がつくようになっています。平滑化は最適確率を $1-\epsilon+\epsilon/K$ で頭打ちにするので、そもそも信頼度が1に張り付けません。
過信の度合いを視覚化する標準的なツールが、信頼性図(reliability diagram)です。予測を信頼度のビンに分け、各ビンでの平均信頼度(横軸)と実際の正解率(縦軸)をプロットします。完全にキャリブレートされていれば、点は対角線上に並びます。

灰の破線が理想(信頼度=正解率)です。青の one-hot は曲線が対角線の下に来ており、これは「信頼度が実際の正解率より高い=過信」を意味します。オレンジのラベル平滑化は対角線にぴったり寄り添い、信頼度が正解率をよく表しています。Müller らは ECE(Expected Calibration Error、信頼度と正解率のズレの平均)が平滑化によって大きく下がることを示しました。平滑化は精度を保ちつつ、出力確率を「使える信頼度」に変える、という二重の利点を持つのです。
このように出力分布を意図的に「鈍らせる」操作は、別の文脈でも登場します。それが知識蒸留です。ラベル平滑化との深い関係を見ていきましょう。
知識蒸留との関係
知識蒸留(Knowledge Distillation)は、大きな教師モデルの出力分布(ソフトターゲット)を、小さな生徒モデルに真似させる手法です。詳しくは知識蒸留の記事を参照してください。ここで重要なのは、知識蒸留もラベル平滑化も「正解クラス以外にも確率を分配したソフトなターゲットで学習する」という共通点を持つことです。
実際、両者は「正解だけが1の硬いターゲットを使わず、不正解クラスにも確率を残す」という点でよく似ています。ラベル平滑化は不正解クラスに 一律 $\epsilon/K$ をばらまくのに対し、知識蒸留は教師モデルが算出した クラスごとに異なる確率 を使います。この違いが決定的です。

この図は「ネコ」が正解のときのターゲットを比べています。紫の蒸留教師は、正解の「ネコ」に高い確率を置きつつ、見た目の近い「イヌ」にも比較的高い確率を残します。「車」「船」のように無関係なクラスは低いまま。つまり教師の出力は「クラス間の類似構造(どのクラスがどのクラスに似ているか)」という豊かな情報、いわゆる暗黒知識(dark knowledge)を含んでいます。一方、オレンジのラベル平滑化は不正解をすべて一律 $\epsilon/K$ にするので、「イヌは車より猫に近い」といった構造情報を持ちません。
ここから、Müller らが指摘した重要な注意点が導かれます。ラベル平滑化された教師モデルは、知識蒸留の教師として性能が落ちる のです。理由は前節で見た「表現の等距離クラスター化」にあります。平滑化はクラス間の細かな類似構造を意図的に潰してしまうため、教師の出力から「クラス間の関係」という蒸留に最も有用な情報が失われます。教師の精度自体は平滑化で上がっても、生徒に伝えられる情報が乏しくなり、蒸留後の生徒の性能はむしろ下がることが報告されています。
要するに、ラベル平滑化と知識蒸留は「ソフトなターゲット」という同じ家族に属しますが、目的が逆です。平滑化は クラス間の区別を意図的に鈍らせて過信を抑える のが目的、蒸留は クラス間の区別という情報を保存して伝える のが目的です。この違いを押さえておくと、両者を組み合わせるときの落とし穴を避けられます。
ここまでで効果と関連手法を見てきました。最後に、実務で使うときの指針 — どんな場面で使い、$\epsilon$ をどう選ぶか — を整理しましょう。
使いどころと注意点、εの選び方
ラベル平滑化は強力ですが万能ではありません。効く場面と効かない場面、そして注意点を押さえておきましょう。
使いどころ(効きやすい場面)
- 大規模な分類・系列生成: 画像分類(ImageNet系)、機械翻訳や音声認識のような大語彙の系列生成では、過信が起きやすく平滑化の恩恵が大きいです。Transformer の原論文でも $\epsilon=0.1$ が標準的に使われます。
- キャリブレーションが重要なタスク: 出力確率を意思決定に使う場面(しきい値判定、リスク推定など)では、平滑化でキャリブレーションが改善する利点が直接効きます。
- ノイズラベルがある場合: ラベルに誤りや曖昧さが混じるデータでは、one-hot で誤ラベルに自信満々で適合するのを防ぎ、ロバスト性を上げます。
注意点(避けるべき場面)
- 知識蒸留の教師: 前節の通り、蒸留の教師に平滑化を使うと、生徒に伝える「クラス間の類似情報」が潰れて蒸留性能が落ちます。教師は one-hot で学習させるのが無難です。
- クラス間の細かな構造が必要なタスク: 検索・距離学習・特徴抽出など、クラス間の類似度そのものが成果物になる場合、平滑化が構造を鈍らせて不利になることがあります。
- クラス数が極端に少ない場合: 2クラスなど $K$ が小さいと $\epsilon/K$ の影響が相対的に大きくなるので、$\epsilon$ を控えめにします。
εの選び方
$\epsilon$ の代表的な既定値は 0.1 です。多くの大規模分類・系列タスクでこの値がよく効くことが経験的に知られています。指針としては、
- まず $\epsilon = 0.1$ から始める。多くの場合これで十分です。
- 過信が強い、あるいはノイズラベルが多いなら $\epsilon = 0.15 \sim 0.2$ へ上げる。
- クラス数が少ない、あるいはクラス間構造を保ちたいなら $\epsilon = 0.05$ 程度へ下げる。
- $\epsilon$ を大きくしすぎると(0.3以上など)、正解と不正解の区別が曖昧になりすぎて精度が落ちます。前掲の「$\epsilon$ の効果」の図で見たように、$\epsilon \to 1$ ではターゲットが一様分布に近づき、学習信号が消えていきます。
最終的には検証データでの精度と ECE(キャリブレーション誤差)を見ながら調整します。$\epsilon$ は学習率やバッチサイズほど敏感なハイパーパラメータではないので、グリッドで $\{0.05, 0.1, 0.2\}$ を試せば十分なことが多いです。
理論と実務の指針がそろったので、最後に numpy で平滑化交差エントロピーを実装し、これまでの主張を数値で確認しましょう。
numpyでのfrom-scratch実装
ラベル平滑化の実装は驚くほど短いです。やることは「ターゲットを平滑化する」「平滑化ターゲットで交差エントロピーを計算する」の二つだけ。ソフトマックスと組み合わせて、from-scratch で書きます。まずは平滑化ターゲットの生成と、ソフトマックスの数値安定な実装です。
import numpy as np
def softmax(z, axis=-1):
# 最大値を引いてオーバーフローを防ぐ(数値安定なソフトマックス)
z = z - np.max(z, axis=axis, keepdims=True)
e = np.exp(z)
return e / np.sum(e, axis=axis, keepdims=True)
def smooth_labels(labels, num_classes, eps):
# 整数ラベルを平滑化ターゲットへ変換
# y_smooth = (1-eps) * one_hot + eps / K
n = len(labels)
onehot = np.zeros((n, num_classes))
onehot[np.arange(n), labels] = 1.0
return (1 - eps) * onehot + eps / num_classes
smooth_labels は定義式 $\bm{y}^{\text{LS}} = (1-\epsilon)\bm{y}^{\text{onehot}} + \epsilon/K$ をそのままコードにしただけです。整数ラベルの配列を受け取り、各行が平滑化ターゲット分布になった行列を返します。次に、平滑化ターゲットに対する交差エントロピー損失と、ロジットに対する勾配を実装します。
def cross_entropy_smoothed(logits, labels, num_classes, eps):
# 平滑化ターゲットに対する交差エントロピー損失(サンプル平均)
p = softmax(logits, axis=1)
targets = smooth_labels(labels, num_classes, eps)
# log(0) を避けるためのクリップ
p = np.clip(p, 1e-12, 1.0)
loss = -np.sum(targets * np.log(p), axis=1)
return loss.mean()
def grad_logits(logits, labels, num_classes, eps):
# ロジットに対する勾配 = p - target(one-hot/平滑化で共通の形)
p = softmax(logits, axis=1)
targets = smooth_labels(labels, num_classes, eps)
return (p - targets) / len(labels)
損失関数は定義 $L = -\sum_k y^{\text{LS}}_k \log p_k$ を全クラスで和を取って実装しています(one-hot のときと違い不正解クラスも寄与する点に注意)。勾配は理論で導いた $p_k – t_k$ をそのまま使っています。eps=0 を渡せば通常の one-hot 交差エントロピーに一致するので、平滑化の有無を1つのコードで切り替えられます。
次に、これまでの主張のうち最も中心的なもの — 「最適ロジット差は $\epsilon=0$ で発散し、$\epsilon>0$ で有限値に収まる」を数値で確認します。前掲の理論式 $\Delta = \log\frac{1-\epsilon+\epsilon/K}{\epsilon/K}$ と、勾配降下で実際に学習したロジット差を突き合わせます。
def optimal_margin(eps, K):
# 理論上の最適ロジット差 Δ = log( (1-eps+eps/K) / (eps/K) )
p_correct = 1 - eps + eps / K
p_other = eps / K
return np.log(p_correct / p_other)
def train_margin(eps, K=10, steps=20000, lr=0.5):
# 1サンプル・正解クラス0として、ロジットを勾配降下で最適化
logits = np.zeros((1, K))
label = np.array([0])
for _ in range(steps):
g = grad_logits(logits, label, K, eps)
logits -= lr * g
# 正解ロジット - 不正解ロジット(不正解は全部同じ値になる)
return logits[0, 0] - logits[0, 1]
K = 10
for eps in [0.05, 0.1, 0.2]:
theo = optimal_margin(eps, K)
emp = train_margin(eps, K)
print(f"eps={eps}: 理論Δ={theo:.4f}, 学習後Δ={emp:.4f}")
このコードを実行すると、たとえば次のような出力になります。
eps=0.05: 理論Δ=5.2523, 学習後Δ=5.2523
eps=0.1: 理論Δ=4.5109, 学習後Δ=4.5109
eps=0.2: 理論Δ=3.7136, 学習後Δ=3.7136
学習後のロジット差が理論値とぴたりと一致しています。$\epsilon$ が小さいほどマージン $\Delta$ が大きく(より強く引き離す)、$\epsilon$ が大きいほどマージンが小さくなる、という関係も数値で確認できました。ここで $\epsilon=0$ を試すと $\Delta = \log(1/0) = \infty$ となり、学習ロジットも止まらずに増え続けます。これが「one-hot はロジットが発散する」という主張の数値的な裏付けです。
最後に、平滑化が予測確率の過信をどう抑えるかを、最適確率の頭打ちで確認します。
def max_confidence(eps, K):
# 損失を完全に最小化したときの正解クラス確率(信頼度の上限)
return 1 - eps + eps / K
K = 10
print(f"one-hot (eps=0) の信頼度上限: {max_confidence(0.0, K):.4f}")
for eps in [0.05, 0.1, 0.2]:
print(f"平滑化 eps={eps} の信頼度上限: {max_confidence(eps, K):.4f}")
実行結果は次の通りです。
one-hot (eps=0) の信頼度上限: 1.0000
平滑化 eps=0.05 の信頼度上限: 0.9550
平滑化 eps=0.1 の信頼度上限: 0.9100
平滑化 eps=0.2 の信頼度上限: 0.8200
one-hot では信頼度の上限が1.0、つまり「100%確実」まで張り付けてしまうのに対し、平滑化では $\epsilon$ に応じて0.91や0.82で頭打ちになります。モデルは構造上「絶対の確信」を持てなくなり、これが過信を防ぎキャリブレーションを改善する直接の仕組みです。理論で述べた $p_y^\star = 1-\epsilon+\epsilon/K$ が、信頼度の上限としてそのまま現れていることが確認できました。
まとめ
本記事では、ラベル平滑化(Label Smoothing)について、問題意識から理論・幾何・実装まで通して解説しました。
- one-hotの問題: 正解1・不正解0という硬いターゲットは、交差エントロピーと組み合わさるとロジットを際限なく尖らせ、過信・過学習・ロジット発散を招きます。
- 定義: $\bm{y}^{\text{LS}} = (1-\epsilon)\bm{y}^{\text{onehot}} + \epsilon/K$。正解確率を少し下げ、余りを全クラスへ均等配分します。確率の和は1に保たれます。
- 損失と勾配: 平滑化交差エントロピーは「元の損失+予測を一様分布へ引き寄せる正則化項」に分解できます。勾配は $p_k – t_k$ のままで、停止点が $p_y=1$ から $p_y=1-\epsilon+\epsilon/K$ へ移ります。
- 最適ロジットの幾何: 最適ロジット差は $\Delta = \log\frac{1-\epsilon+\epsilon/K}{\epsilon/K}$ で、$\epsilon=0$ なら発散、$\epsilon>0$ なら有限。同クラスの特徴がタイトに等距離化します。
- キャリブレーション: 信頼度が1へ張り付かなくなり、出力確率が実際の正解率をよく表すようになります(ECEが下がる)。
- 知識蒸留との関係と注意: 平滑化は不正解を一律に潰すため、クラス間の類似構造を失います。蒸留の教師には不向きで、$\epsilon$ の既定値は0.1が目安です。
ラベル平滑化は「ターゲットを少し柔らかくする」だけの一行の変更で、汎化とキャリブレーションを同時に改善できる、コストパフォーマンスの高い正則化です。出力確率を信頼度として扱いたいすべての分類タスクで、まず試す価値があります。
次のステップとして、以下の記事も参考にしてください。