本ページにはプロモーションが含まれています。
この記事で解決できる疑問
- 対数尤度とMSE/クロスエントロピーとは?
- それぞれ何を測り、E検定ではどこを見られる?
本記事はそんなモヤモヤを一気にほどきます。
E検定の頻出テーマ「推定と損失」
用語だけ追うとバラバラに見えますが、分布を仮定する → 負の対数尤度(NLL)を最小化する → 損失にたどり着く、この一本線でつなぐと一気に整理できます。
この記事では、以下の内容を解説します。
- 最尤×対数尤度
- MSE/MAE/Huber
- クロスエントロピー
- 損失関数の選び方
最後に分かりやすい解説を載せた演習問題も用意しております。
ぜひ最後までご覧ください。
演習をすぐ見たい方はこちら → 演習問題
最尤推定と対数尤度:データに最も合うパラメータの探し方
「最尤推定と対数尤度」に関して、以下の内容を解説します。
- 尤度って何?対数をとる理由
- コインの例でわかる最尤推定
- 最尤とは?「負の対数尤度」を最小にする
1つずつ詳しく見ていきましょう。
尤度って何?対数をとる理由
観測データ \({x_1,\dots,x_n}\) が固定のとき、パラメータ \(\theta\) を変化させたときに「その \(\theta\) ならこのデータがどれだけ起こりやすいか」を与える関数が尤度 \(L(\theta)\) です。
独立同分布(\(i.i.d.\))なら各点の確率の掛け算になります。
尤度の数式
\[
L(\theta)=\prod_{i=1}^{n} p(x_i \mid \theta)
\]
対数尤度をとる理由
大量の掛け算は数値が極端に小さくなり桁落ちしやすく、微分も複雑です。
対数をとれば掛け算が足し算に変わり、数値安定性が増し、微分も容易になります。
対数は単調増加なので、最大化の解は変わりません(底が \(e\) でも \(2\) でも最適解は同じ)。
対数尤度の数式
\[
\ell(\theta)=\log L(\theta)=\sum_{i=1}^{n}\log p(x_i \mid \theta),
\]
\[
\arg\max_\theta L(\theta)=\arg\max_\theta \ell(\theta)
\]
コインの例でわかる最尤推定
コインの表が出る確率を \(p\) とし、\(n\) 回投げて表が \(k\) 回出たとします。
この観測に最も合う \(p\) を選ぶのが最尤推定(MLE)です。
二項分布の尤度を立て、計算しやすいように対数化し、一次導関数(スコア)を 0 にして解を求めます。
組合せ係数は \(p\) に依存しないため最大化に影響しません。
二項モデルの数式
\[
L(p)=\frac{n!}{k!\,(n-k)!}\,p^{k}(1-p)^{\,n-k},
\]
\[
\ell(p)=\log L(p)
\]
\[
=\log\frac{n!}{k!\,(n-k)!}+k\log p+(n-k)\log(1-p)
\]
解き方の説明
対数尤度を \(p\) で微分して \(0\) にすると、標本比率 \(k/n\) が最尤推定量になります。
さらに二階微分が負であることから、この点が最大であると確認できます。
(端点ケースとして \(k=0\Rightarrow \hat p=0\)、\(k=n\Rightarrow \hat p=1\) にも注意)
導出の数式
\[
\frac{d\ell}{dp}=\frac{k}{p}-\frac{n-k}{1-p}=0 \ \Rightarrow\ \hat p=\frac{k}{n},
\]
\[
\frac{d^2\ell}{dp^2}=-\frac{k}{p^2}-\frac{n-k}{(1-p)^2}<0
\]
最尤とは?「負の対数尤度」を最小にする
学習ではふつう「損失最小化」で実装します。
最尤推定は負の対数尤度(NLL)を最小化することと等価です。
確率モデルの仮定に応じて、NLLは以下のように損失に一致します。
- 回帰で誤差がガウス分布: MSE
- 2値や多クラスの分類:ベルヌーイ
- カテゴリ分布を仮定:クロスエントロピー
一般形の数式
\[
\hat\theta_{\mathrm{MLE}}
=\arg\max_\theta \ell(\theta)
\]
\[
=\arg\min_\theta\bigl[-\ell(\theta)\bigr]
\equiv \arg\min_\theta \mathrm{NLL}(\theta)
\]
回帰(ガウス雑音)の説明
観測誤差が \(\varepsilon_i \sim \mathcal N(0,\sigma^2)\) なら、NLLは二乗誤差の和に比例し、定数を除けば MSE 最小化と同じです。
回帰(ガウス)の数式
\[
p(y_i \mid x_i,\theta)
\]
\[
= \frac{1}{\sqrt{2\pi\sigma^2}}
\exp!\left(-\frac{(y_i-f_\theta(x_i))^2}{2\sigma^2}\right)
\]
\[
-\ell(\theta)=\sum_{i=1}^{n}\left[\frac{(y_i-f_\theta(x_i))^2}{2\sigma^2} +\frac{1}{2}\log(2\pi\sigma^2)\right]
\]
\[
\ \ \Rightarrow\ \ \min_\theta \sum_i (y_i-f_\theta(x_i))^2
\]
分類(ベルヌーイ/カテゴリ)の説明
確率で予測し、正解ラベルの確率の対数を平均したもの(符号反転)がクロスエントロピーです。
2値はシグモイド、多クラスはソフトマックスと組み合わせて使います。
分類の数式(2値)
\[
-\ell(\theta)=-\sum_{i=1}^{n}\Bigl[y_i\log \hat p_i+(1-y_i)\log(1-\hat p_i)\Bigr]
\]
分類の数式(多クラス)
\[
-\ell(\theta)=-\sum_{i=1}^{n}\sum_{k=1}^{K} y_{ik}\log \hat p_{ik},
\]
\[
\sum_k \hat p_{ik}=1
\]
平均二乗誤差(MSE):回帰で使われる基本の損失関数
「平均二乗誤差(MSE)」に関して、以下の内容を解説します。
- MSEの直感:誤差を二乗して平均する理由
- 外れ値に弱いときの代替:MAEとHuberの使い分け
- 線形回帰でのMSE:勾配の形と学習の流れをつかむ
1つずつ詳しく見ていきましょう。
MSEの直感:誤差を二乗して平均する理由
回帰では、予測値と正解値の差(残差)をどれだけ小さくできたかでモデルの良さを測ります。
MSEは各データの残差を2乗して平均したものです。
2乗するのには、以下の理由があります。
- プラスとマイナスの誤差が打ち消し合わないようにするため
- 大きな誤差ほど強くペナルティを与えるため
- 滑らかに微分できて学習(勾配降下)が進めやすいため
ノイズがガウス(正規)分布だと仮定すると、MSE最小化は「負の対数尤度(NLL)」最小化=最尤推定と一致します。
また、理論的には MSEを最小にする最良の出力は条件付き平均 \(\mathbb{E}[Y\mid X=x]\) になるので、MSEは「平均に合わせにいく」損失と覚えると整理が楽です。
MSEの数式
\[
\mathrm{MSE}=\frac{1}{n}\sum_{i=1}^{n}\bigl(y_i-\hat y_i\bigr)^2,\quad r_i=y_i-\hat y_i
\]
例:
\[
y=[3,5],\ \hat y=[2,6]\ \Rightarrow
\]
\[
\ r=[-1,1],\ \mathrm{MSE}=\frac{1^2+1^2}{2}=1
\]
外れ値に弱いときの代替:MAEとHuberの使い分け
MSEは二乗罰則のため、極端に大きい誤差(外れ値)に強く引っ張られます。
外れ値に対して頑健にしたいなら、MAE(平均絶対誤差)やHuber損失が有効です。
MAEは誤差に比例して罰するためロバストで、最小化解は条件付き中央値になります(ノイズがラプラス分布なら最尤推定と一致)。
一方Huberは、小さな誤差は二乗(MSE的)、大きな誤差は線形(MAE的)に切り替える折衷型で、しきい値 \(\delta\) により“なめらかさ”と“外れ値耐性”のバランスを調整できます。
実装上もHuberは原点で微分可能なので、勾配ベースの学習と相性が良いです。
MAEとHuberの数式
MAE(平均絶対誤差)
$$
\mathrm{MAE}=\frac{1}{n}\sum_{i=1}^{n} |r_i|,
$$
MAEの最適予測子
$$
f^*(x)=\text{median}(Y \mid X=x)
$$
Huber損失
$$
\text{Huber}_\delta(r)=
\begin{cases}
\frac{1}{2} r^2 & (|r|\le \delta) \
\delta |r| - \frac{1}{2}\delta^2 & (|r|>\delta)
\end{cases}
$$
線形回帰でのMSE:勾配の形と学習の流れをつかむ
線形回帰では \(\hat y=\mathbf{x}^\top\mathbf{w}+b\) と置き、MSEを最小化するようにパラメータ \((\mathbf{w},b)\) を更新します。
勾配は「転置行列 × 残差」という覚えやすい形です
実装では、以下を繰り返します。
- 予測を計算
- 残差を求める
- 勾配を計算
- 学習率で更新
行列が小さくて安定なら、閉形式の“正規方程式”で一発解も出せます。
リッジ回帰は \(X^\top X\) に \(\lambda I\) を足すだけです。
特徴量は標準化(スケーリング)すると学習が安定します。
線形回帰+MSEの数式(ベクトル形)
\[
J(\mathbf{w},b)=\frac{1}{2n}\sum_{i=1}^{n}\bigl(y_i-(\mathbf{x}_i^\top\mathbf{w}+b)\bigr)^2
\]
\[
=\frac{1}{2n} \, || X\mathbf{w}+b\mathbf{1}-\mathbf{y} ||^2
\]
残差ベクトル
\[
\mathbf{r}=X\mathbf{w}+b\mathbf{1}-\mathbf{y}
\]
\[
\Rightarrow\quad\nabla_{\mathbf{w}}J=\frac{1}{n}X^\top\mathbf{r},\ \
\frac{\partial J}{\partial b}=\frac{1}{n}\mathbf{1}^\top\mathbf{r}
\]
勾配降下の更新
\[
\mathbf{w}\leftarrow \mathbf{w}-\eta\,\frac{1}{n}X^\top\mathbf{r},
\]
\[
b\leftarrow b-\eta\,\frac{1}{n}\mathbf{1}^\top\mathbf{r}
\]
閉形式解・リッジ
\[
\hat{\mathbf{w}}=(X^\top X)^{-1}X^\top\mathbf{y},
\]
\[
\hat{\mathbf{w}}_{\text{ridge}}=(X^\top X+\lambda I)^{-1}X^\top\mathbf{y}
\]
例(1次元)
\[
(x,y)={(1,2),(2,3)},\quad (w,b)=(0,0),\quad \eta=0.1
\]
\[
\hat y=[0,0],\ r=y-\hat y=[2,3],\
\]
\[
\frac{\partial J}{\partial w}=-\frac{1}{2}(1\cdot2+2\cdot3)=-4,\
\]
\[
\frac{\partial J}{\partial b}=-\frac{1}{2}(2+3)=-2.5
\]
\[
w\leftarrow 0-0.1(-4)=0.4,
\]
\[
b\leftarrow 0-0.1(-2.5)=0.25
\]
このように「予測 → 残差 → 勾配 → 更新」を繰り返してMSEを下げていきます。
クロスエントロピー:分類での「確率のズレ」を最小化する
「クロスエントロピー」に関して、以下の内容を解説します。
- 直感でつかむ:自信の外しを強く罰するしくみ
- 2値はシグモイド、多クラスはソフトマックスが基本セット
- 数値安定のコツ:log-sum-expと確率クリッピング
1つずつ詳しく見ていきましょう。
直感でつかむ:自信の外しを強く罰するしく
クロスエントロピーは「正解ラベルにどれだけ高い確率を割り当てられたか」を評価する損失です。
正解クラスに高い確率を出せば小さく、低い確率(=自信を持って外す)ほど急激に大きくなります。
直感的には「当てた確率の対数を褒める/外したら強く減点する」指標と覚えてください(以下、\(\log\) は自然対数)。
2値分類(\(y\in{0,1}\), 予測確率 \(\hat p\))
\[
L_{\text{binCE}}(y,\hat p)= -\bigl[y\log \hat p + (1-y)\log(1-\hat p)\bigr]
\]
多クラス(1-of-\(K\) の one-hot \(y_k\), 予測確率 \(\hat p_k\))
\[
L_{\text{CE}}(\mathbf y,\hat{\mathbf p})= -\sum_{k=1}^{K} y_k \log \hat p_k
\]
正解クラスの確率だけを見れば「\(-\log(\text{正解確率})\)」です。
たとえば正解に \(0.9\) を出せば \(-\log 0.9\approx0.105\) と小さく、
\(0.1\) だと \(-\log 0.1\approx2.303\) と大きくなります。
\[
\text{正解確率 } p_{\text{correct}}\ \Rightarrow\ L=-\log p_{\text{correct}}
\]
2値はシグモイド、多クラスはソフトマックスが基本セット
ニューラルネットはまず「ロジット(生のスコア) \(z\) 」を出し、これを確率に変換してからクロスエントロピーを計算します。
2値ではシグモイドで \(z\) を \((0,1)\) に押し込み、ラベル \(y\in{0,1}\) と比べます。
2値
\[
\hat p=\sigma(z)=\frac{1}{1+e^{-z}},\qquad
\]
\[
L_{\text{binCE}}(y,\hat p)= -\bigl[y\log \hat p + (1-y)\log(1-\hat p)\bigr]
\]
多クラスでは各クラスのロジット \(\mathbf z=(z_1,\dots,z_K)\) をソフトマックスで確率に変換し、one-hot ラベルと比べます。
正解クラス \(t\) の損失は「\(-z_t+\log\sum_j e^{z_j}\)」という覚え方が便利です(後の数値安定化にも直結します)。
多クラス
\[
\hat p_k=\frac{e^{z_k}}{\sum_{j=1}^{K} e^{z_j}},\qquad
\]
\[
L_{\text{CE}}(\mathbf y,\hat{\mathbf p})= -\sum_{k} y_k\log \hat p_k = -z_t + \log!\sum_{j} e^{z_j}
\]
\[
(t:\ \text{正解クラス})
\]
勾配は覚えておくと計算問題で有利です。
2値は「\(\hat p-y\)」、多クラスは各クラスで「\(\hat p_k-y_k\)」になります。
勾配
\[
\frac{\partial L_{\text{binCE}}}{\partial z}=\hat p - y,
\]
\[
\frac{\partial L_{\text{CE}}}{\partial z_k}=\hat p_k - y_k
\]
数値安定のコツ:log-sum-expと確率クリッピング
そのまま実装すると、\(\exp(z)\) が非常に大きく/小さくなってオーバーフローやアンダーフローを起こします。
そこで log-sum-exp のトリックで「最大のロジット」を引いてから計算します。
確率の \(\log\) 計算も安定します。
log-sum-exp
\[
m=\max_j z_j,
\]
\[
\log!\sum_j e^{z_j}= m+\log!\sum_j e^{z_j-m},\quad
\]
\[
\hat p_k=\frac{e^{z_k-m}}{\sum_j e^{z_j-m}}
\]
2値のときは「ロジットのまま」計算する BCE with logits(softplus 形)が安定です。
また、\(\hat p\) が 0 や 1 に極端に近いと (\log \hat p) が発散するので、
\(\hat p\) を \([\varepsilon,1-\varepsilon]\) にクリッピングしてから \(\log\) を取るのが定番です。
安定な2値CE/クリッピングでは損失関数
\[
L(y,z)=\max(z,0)-yz+\log!\bigl(1+e^{-|z|}\bigr)
\]
\[
(\text{BCE with logits})
\]
と書きます。ここで確率 \(\hat p\) は
\[
\hat p \leftarrow \text{clip}(\hat p,\ \varepsilon,\ 1-\varepsilon),
\]
\[
\varepsilon \approx 10^{-7}
\]
のようにクリッピングして数値安定性を高めます。
多クラスでも \(-z_t+\log\sum_j e^{z_j}\) を最大ロジットで平行移動して計算すれば安定します。
さらに学習の初期は過信を防ぐため、ラベルスムージング(例:\(y_k\) を \(1-\alpha\) と \(\alpha/(K-1)\) に分配)
を併用すると数値面・汎化面で安定しやすくなります。
安定な多クラスCE
\[
m=\max_{j} z_{j},\quad L=-z_{t}+m+\log!\sum_{j} e^{z_{j}-m}
\]
この3点(直感、シグモイド/ソフトマックスの基本、数値安定の実装)を押さえれば、E検定での計算・用語・実装の橋渡しがスムーズになります。
損失関数の選び方:タスクと分布仮定の観点で整理する
「損失関数の選び方」に関して、以下の内容を解説します。
- 分布仮定で選ぶ:ガウス/ラプラス/カテゴリ/ポアソン
- 評価指標に合わせる:AUC・F1としきい値最適化の考え方
- データ事情で調整:不均衡・外れ値・正則化・重み付け
1つずつ詳しく見ていきましょう。
分布仮定で選ぶ:ガウス/ラプラス/カテゴリ/ポアソン
「データ誤差はどんな分布で生まれているか?」を仮定すると、最尤推定(= 負の対数尤度 NLL 最小化)から“自然な損失”が自動的に出てきます。
$$
\hat\theta=\arg\min_\theta\bigl[-\ell(\theta)\bigr],
$$
$$
-\ell(\theta)=-\sum_{i}\log p(y_i\mid x_i,\theta)
$$
ガウス雑音を仮定すると、NLLは二乗誤差に比例し、MSE最小化と一致します。
ガウス→MSE
$$
p(y_i\mid x_i,\theta)=\frac{1}{\sqrt{2\pi\sigma^2}}
\exp!\Big(-\frac{(y_i-\hat y_i)^2}{2\sigma^2}\Big)
$$
$$
\ \Rightarrow\
-\ell=\text{const}+\frac{1}{2\sigma^2}\sum_i (y_i-\hat y_i)^2
$$
ラプラス雑音を仮定すると、NLLは絶対誤差和になり、MAEが自然に導かれます。
ラプラス→MAE
$$
p(y_i\mid x_i,\theta)=\frac{1}{2b}
\exp!\Big(-\frac{|y_i-\hat y_i|}{b}\Big)
$$
$$
\ \Rightarrow\
-\ell=\text{const}+\frac{1}{b}\sum_i |y_i-\hat y_i|
$$
カテゴリ(2値はベルヌーイ)を仮定すると、NLLはクロスエントロピーになります。
カテゴリ→クロスエントロピー
$$
-\ell=-\sum_{i}\sum_{k}y_{ik}\log \hat p_{ik}
$$
$$
(\text{2値:}-[y\log\hat p+(1-y)\log(1-\hat p)])
$$
回数データはポアソン分布が基本です。平均 \(\lambda_i>0\) を予測し、そのNLLを最小化します
(しばしば \(\lambda_i=\exp(\eta_i)\) と置きます)。
ポアソン→Poisson NLL
$$
p(y_i\mid \lambda_i)=\frac{\lambda_i^{y_i}e^{-\lambda_i}}{y_i!}
$$
$$
\ \Rightarrow\
-\ell=\sum_i\bigl(\lambda_i-y_i\log\lambda_i\bigr)+\text{const}
$$
- 回帰の標準形はガウス→MSE
- 外れ値に強くしたければラプラス→MAE
- 分類はカテゴリ→クロスエントロピー
- 件数はポアソン→Poisson NLL
まず「誤差の分布」を決めると損失が決まります。
評価指標に合わせる:AUC・F1としきい値最適化の考え方
学習で得るのは確率です。
最終判定はしきい値 \(\tau\) を決めて 0/1 に変換します。
どの指標を上げたいのか(AUC か F1 か)によって、しきい値の扱いが変わります。
確率→判定と主要指標
\[
\hat y=\mathbb{1}[\hat p\ge\tau],\quad
\]
\[
\mathrm{Precision}=\frac{TP}{TP+FP},
\]
\[
\mathrm{Recall}=\frac{TP}{TP+FN},\quad
\]
\[
F_1=\frac{2PR}{P+R}
\]
AUCはROC曲線(TPR–FPR)の面積で、\(\tau\) を動かしたときの性能を総合評価します。
不均衡に強く、確率のランク付けの良し悪しを見たいときに適します。
ROCの成分
\[
\mathrm{TPR}=\frac{TP}{TP+FN},
\]
\[
\mathrm{FPR}=\frac{FP}{FP+TN},
\]
\[
\mathrm{AUC}=\int_{0}^{1}\mathrm{TPR}(\mathrm{FPR})\,d(\mathrm{FPR})
\]
F1を高めたいときは、検証データで \(\tau\) を走査して最良のF1となる点を選びます。
F1最適しきい値
\[
\tau^*=\arg\max_{\tau\in[0,1]} F_1(\tau)
\]
偽陽性/偽陰性のコストが非対称なら、ベイズ的なしきい値が有効です。
単純形のコストしきい値
\[
\hat p\ \ge\ \frac{c_{FP}}{c_{FP}+c_{FN}} \ \Rightarrow\ \text{陽性判定}
\]
クラス事前確率を入れる場合
\[
\hat p \ \ge \ \frac{c_{FP}\,\pi_0}{c_{FN}\,\pi_1+c_{FP}\,\pi_0}
\]
AUCは確率の並びを評価(しきい値に依存しない)。
F1は最終しきい値の設定が肝で、検証データで最適 \(\tau \) を選ぶ。
コストが偏るならコスト最小の \(\tau\) をを計算する。
データ事情で調整:不均衡・外れ値・正則化・重み付け
不均衡:少数派を見逃さない工夫
クラス不均衡では、少数派の重みを上げる・サンプリングを変える・難例を強調する、などで学習バランスを取ります。
重み付き損失(クラス不均衡対応)
\[
L_{\text{wCE}}=-\sum_i w_{y_i}\log \hat p_{i,y_i},\quad
w_k\propto \frac{1}{\mathrm{freq}(k)}
\]
\[
L_{\text{wMSE}}=\frac{1}{n}\sum_i w_i\,(y_i-\hat y_i)^2
\]
難例重視:Focal Loss
簡単に当たる例の重みを下げ、外しがちな例を強調します。
\[
L_{\text{focal}}=- (1-p_t)^{\gamma}\log p_t,\quad
p_t=\hat p_{i,y_i},\ \gamma>0
\]
外れ値:回帰の頑健化
外れ値が多い回帰は、MSEからMAE/Huberに切り替えると安定します。
$$
\text{Huber}_\delta(r)=
\begin{cases}
\frac{1}{2} r^2 & (|r|\le \delta) \
\delta |r| - \frac{1}{2}\delta^2 & (|r|>\delta)
\end{cases}
$$
過学習対策:正則化と確率の調整
複雑すぎるモデルは重みに罰則(L2/L1)を加え、確率の過信には温度スケーリングなどでで整えます。
$$
L_{\text{ridge}} = \text{Loss} + \lambda |\mathbf{w}|_2^2,
\quad
L_{\text{lasso}} = \text{Loss} + \lambda |\mathbf{w}|_1
$$
$$
\hat p_k = \text{softmax}!\left(\frac{z_k}{T}\right)
\quad (\text{温度 } T>1 \text{ で過信を緩和})
$$
現実のクセに合わせて損失を調整すると精度と安定性が上がります。
- 不均衡→重み/サンプリング/Focal
- 外れ値→MAE/Huber
- 過学習→L2/L1/早期終了
- 過信→ラベルスムージング/温度
目的とデータ事情に合わせて組み合わせましょう。
総まとめチートシート
前提:log\loglog は自然対数(底 eee)を用います。
キーワード:MLE(最尤推定)/対数尤度/NLL(負の対数尤度)/MSE/MAE/Huber/クロスエントロピー(CE)/シグモイド/ソフトマックス/log-sum-exp/重み付け/Focal/Poisson NLL/しきい値最適化(AUC・F1)
1) 最尤と損失の対応(まずここを一本線)
最尤推定:
\[
\hat\theta=\arg\max_\theta \ell(\theta),\quad \ell=\log L
\]
学習としては
\[
\hat\theta=\arg\min_\theta[-\ell(\theta)] \quad (\text{= NLL最小化})
\]
分布仮定によって自然に損失関数が決まります。
ガウス分布(回帰)の場合は MSE
\[
-\ell=\text{const}+\frac{1}{2\sigma^2}\sum (y-\hat y)^2
\]
ラプラス分布(外れ値に強い回帰)の場合は MAE
\[
-\ell=\text{const}+\frac{1}{b}\sum |y-\hat y|
\]
ベルヌーイ分布/カテゴリ分布(分類)の場合はクロスエントロピー
\[
\text{2値: } -[y\log\hat p+(1-y)\log(1-\hat p)],
\]
\[
\text{多クラス: } -\sum_k y_k\log \hat p_k
\]
ポアソン分布(件数予測)の場合は Poisson NLL
\[
-\ell=\sum (\lambda - y\log\lambda)+\text{const}
\]
2) CE と確率変換(ロジット→確率)
2値分類ではシグモイド
\[
\hat p=\sigma(z)=\frac{1}{1+e^{-z}}
\]
多クラス分類ではソフトマックス
\[
\hat p_k=\mathrm{softmax}(z)_k=\frac{e^{z_k}}{\sum_j e^{z_j}}
\]
勾配も覚えておくと便利です。
\[
\text{2値: }\ \frac{\partial L}{\partial z}=\hat p-y,
\]
\[
\text{多クラス: }\ \frac{\partial L}{\partial z_k}=\hat p_k-y_k
\]
3) 数値安定の作法
log-sum-exp のトリックを使うと、
\[
\log\sum_j e^{z_j}=m+\log\sum_j e^{z_j-m},
\]
\[
m=\max_j z_j
\]
BCE with logits は次のように書けます。
\[
L=\max(z,0)-yz+\log(1+e^{-|z|})
\]
さらに確率のクリッピングを行います。
\[
\hat p\leftarrow\mathrm{clip}(\hat p,\varepsilon,1-\varepsilon)
\]
4) データ事情に合わせる
不均衡データの場合は重み付きクロスエントロピー(\(w_k\propto 1/\text{freq}(k)\))、サンプリング、あるいは Focal Loss を使います。
\[
L_{\text{focal}}=-(1-p_t)^\gamma\log p_t
\]
外れ値が多い場合は MSE から MAE や Huber 損失に切り替えると安定します。
\[
\text{Huber}_\delta(r)=
\begin{cases}
\frac{1}{2} r^2 & (|r|\le \delta)\
\delta|r| - \frac{1}{2}\delta^2 & (|r|>\delta)
\end{cases}
\]
過学習には正則化(\(L_2/L_1\))、早期終了、データ拡張を用います。
確率の過信にはラベルスムージングや温度スケーリングが有効です。
5) しきい値設計と指標
最終判定は確率にしきい値 \(\tau\) を設けて
\[
\hat y=\mathbb{1}[\hat p\ge \tau]
\]
とします。
F1 最適化では検証データを用いて
\[
\tau^*=\arg\max_\tau F_1(\tau)
\]
を選びます。
さらに偽陽性・偽陰性のコストが非対称な場合は、ベイズ的なしきい値を用いて
\[
\hat p\ge \frac{c_{FP}}{c_{FP}+c_{FN}}
\]
とするのが有効です。
演習と解答
問題1(最尤・コイン)
問題文:コインを \(n=20\) 回投げて表が \(k=13\) 回出た。表の確率 \(p\) の最尤推定量 \(\hat p\) を求めよ。
途中式:
\[
L(p)=\frac{20!}{13!\,7!}\,p^{13}(1-p)^{7},
\]
\[
\ell(p)=\text{const}+13\log p+7\log(1-p),
\]
\[
\frac{d\ell}{dp}=\frac{13}{p}-\frac{7}{1-p}=0 \ \Rightarrow\ 13(1-p)=7p
\]
解答:
\[
\hat p=\frac{13}{20}=0.65
\]
問題2(MSE・線形回帰の1ステップ更新)
問題文:データ \((x,y)={(1,2),(2,3)}\)。初期 \((w,b)=(0,0)\)。
目的関数
\[
J=\frac{1}{2n}\sum (y-(wx+b))^2
\]
学習率 \(\eta=0.1\)。1回の勾配降下で更新後の \((w,b)\) を求めよ。
途中式:
残差 \(r_i=(wx_i+b)-y_i\)。
初期予測 \(0 \Rightarrow r=[-2,-3]\)。
\[
\frac{\partial J}{\partial w}=\frac{1}{n}\sum x_i r_i=\frac{1}{2}(1\cdot -2+2\cdot -3)=-4
\]
\[
\frac{\partial J}{\partial b}=\frac{1}{n}\sum r_i=\frac{1}{2}(-2-3)=-2.5
\]
更新:
\[
w\leftarrow 0-0.1(-4)=0.4,
\]
\[
b\leftarrow 0-0.1(-2.5)=0.25
\]
解答:
\[
(w,b)=(0.4,\ 0.25)
\]
問題3(2値CEの計算)
問題文:2サンプルのラベルと予測確率が \((y,\hat p)={(1,0.8),(0,0.4)}\)。平均バイナリCEを求めよ。
途中式:
\[
L=-\frac{1}{2}\big[(1)\log 0.8+(0)\log 0.2+(1-0)\log(1-0.4)\big]
\]
\[
\log 0.8\approx -0.2231,\quad \log 0.6\approx -0.5108
\]
\[
L=\frac{1}{2}(0.2231+0.5108)=0.36695
\]
解答:
\[
\fbox{L \approx 0.367}
\]
問題4(多クラスCE・log-sum-exp)
問題文:ロジットが \( \mathbf{z}=(1.0,\,0.0,\,-1.0) \)、正解クラスは 1 番目(\(t=1\))。
安定計算式
\[
L=-z_t+m+\log\sum_j e^{z_j-m},\quad m=\max_j z_j
\]
で損失を求めよ。
途中式:
\[
m=1.0,\quad z-m=(0,-1,-2)
\]
\[
\sum_j e^{z_j-m}=1+e^{-1}+e^{-2}\approx 1+0.36788+0.13534=1.50322
\]
\[
\log\sum_j e^{z_j-m}\approx \log 1.50322 \approx 0.40761
\]
\[
L=-1.0+1.0+0.40761=0.40761
\]
解答:
\[
\fbox{L \approx 0.408}
\]
問題5(Poisson NLL)
問題文:観測回数 \(y=3\)、予測平均 \(\lambda=2.5\) のとき、
Poisson NLL
\[
L=\lambda-y\log\lambda+\log(y!)
\]
を求めよ。
途中式:
\[
\log 2.5 \approx 0.91629,
\]
\[
\log(3!)=\log 6 \approx 1.79176
\]
\[
L=2.5-3\cdot0.91629+1.79176
\]
\[
=2.5-2.74887+1.79176=1.54289
\]
解答:
\[
\fbox{$L \approx 1.543$}
\]
問題6(F1 を最大にするしきい値の比較)
問題文:予測確率と真のラベルが \({(0.9,1),(0.6,1),(0.4,0),(0.2,0)}\)。
しきい値 \(\tau=0.7\) と \(\tau=0.5\) での \(F1\) を比べ、良い方を選べ。
途中式:
\(\tau=0.7:予測 [1,0,0,0] \ \Rightarrow\ TP=1,FP=0,FN=1\)
\[
P=1.0,\ R=0.5 \ \Rightarrow\ F1=\frac{2PR}{P+R}=\frac{2\cdot1\cdot0.5}{1+0.5}=0.667
\]
\(\tau=0.5:予測 [1,1,0,0] \ \Rightarrow\ TP=2,FP=0,FN=0\)
\[
P=1.0,\ R=1.0 \ \Rightarrow\ F1=1.0
\]
解答:
\[
\fbox{$\tau=0.5 \ \text{の方が良い(}F1=1.0\text{)}$}
\]
おわりに
この記事では、以下の内容を解説します。
- 最尤×対数尤度
- MSE/MAE/Huber
- クロスエントロピー
- 損失関数の選び方
ここまでのポイントはシンプルです。
分布仮定が決まれば損失は自動で決まります。
そして、モデルはNLL最小化=損失最小化で学習し、分類なら最後はしきい値で指標(F1やコスト)に合わせて仕上げます。
この記事を何度でも読み返し、「推定と損失」の知識を身につけていきましょう。