目次
背景
- 最近機械学習をまたよく仕事でやり始めたが、やっぱり関数を忘れがち
- 特に数年前に学んだことはちょっとは覚えていてもindexレベルしか覚えていない
- そこで、備忘録としてAIに一覧化してもらった
関数・損失関数まとめ
機械学習で頻繁に登場する関数の整理。
大きく分けると、以下のカテゴリ。
- 確率への変換:Sigmoid、Softmax
- 確率から実数への変換:Logit
- 活性化関数:ReLU、GELU、SiLU、tanh
- 分類の損失関数:BCE、Cross Entropy、NLL
- 回帰の損失関数:MSE、MAE、Huber Loss
- 確率分布の指標:Entropy、KL Divergence
- 数値安定化:LogSumExp、LogSoftmax
- 正規化:LayerNorm、BatchNorm、RMSNorm
- ベクトルの類似度・距離:Dot Product、Cosine Similarity、L1、L2
- Transformer系:Scaled Dot-Product Attention
Sigmoid
実数を $0$ から $1$ の範囲へ変換する関数。
$$ \sigma(x)=\frac{1}{1+e^{-x}} $$主な特徴。
- $x\to-\infty$ で $0$
- $x=0$ で $0.5$
- $x\to+\infty$ で $1$
- 二値分類で頻出
- logitから確率への変換
関係としては以下。
$$ \text{logit} \rightarrow \text{sigmoid} \rightarrow \text{probability} $$Logit
Sigmoidの逆関数。
$$ \operatorname{logit}(p) = \log\frac{p}{1-p} $$確率 $p$ を $-\infty$ から $+\infty$ の実数へ変換する関数。
- $p=0.5$ なら logit は $0$
- $p\to0$ なら logit は $-\infty$
- $p\to1$ なら logit は $+\infty$
- ニューラルネットの最終層が出力する「生のスコア」として頻出する logits
Sigmoidとの関係。
$$ p \xrightarrow{\operatorname{logit}} z \xrightarrow{\sigma} p $$Softmax
複数のlogitを、合計が $1$ になる確率分布へ変換する関数。
$$ p_i=\frac{e^{z_i}}{\sum_j e^{z_j}} $$主な用途。
- 多クラス分類
- Attention weight
- 次トークン予測
- logitsからcategorical probabilityへの変換
Sigmoidが二値分類寄りなのに対して、Softmaxは多クラス分類寄りの関数。
LogSoftmax
Softmaxの出力にlogを取ったもの。
$$ \log\operatorname{softmax}(z_i) = z_i-\log\sum_j e^{z_j} $$主な特徴。
- Softmaxとlogを別々に計算するより数値的に安定
- Negative Log Likelihoodとの組み合わせ
- Cross Entropy内部で頻出
LogSumExp
機械学習の数値計算で非常によく登場する関数。
$$ \operatorname{LSE}(x) = \log\sum_i e^{x_i} $$そのまま計算すると $e^x$ が非常に大きくなり、overflowする可能性。
そこで最大値 $m$ を使った変形。
$$ m=\max_i x_i $$$$ \operatorname{LSE}(x) = m+ \log\sum_i e^{x_i-m} $$主な用途。
- Softmax
- LogSoftmax
- Cross Entropy
- BCE
- 確率モデル
- 数値安定化
機械学習における重要な「計算テクニック」の一つ。
Binary Cross Entropy(BCE)
二値分類で使われる代表的な損失関数。
$$ L = -\left[ y\log p+ (1-y)\log(1-p) \right] $$正解が $y=1$ の場合。
$$ L=-\log p $$正解が $y=0$ の場合。
$$ L=-\log(1-p) $$つまり、以前出てきた $-\log p$ そのもの。
- 正解に高い確率を付けるほどLossが小さい
- 正解に低い確率を付けるほどLossが大きい
- 二値分類の基本Loss
BCEWithLogitsLoss
SigmoidとBCEをまとめて計算するもの。
概念的には以下。
$$ \text{logit} \rightarrow \text{sigmoid} \rightarrow \text{BCE} $$実際の実装では、Sigmoidを明示的に計算せず、数値的に安定した式による計算。
- 二値分類で非常に頻出
- PyTorchなどで定番
- logitsを直接入力
- LogSumExp系のテクニックによる数値安定化
Cross Entropy
多クラス分類で代表的な損失関数。
$$ H(p,q) = -\sum_i p_i\log q_i $$教師ラベルがone-hotの場合、正解クラスだけが残る形。
$$ L = -\log p_{\mathrm{correct}} $$つまり本質的には、
- 正解クラスの確率が高い → Loss小
- 正解クラスの確率が低い → Loss大
という仕組み。
典型的な流れ。
$$ \text{logits} \rightarrow \text{softmax} \rightarrow \text{probabilities} \rightarrow \text{cross entropy} $$Negative Log Likelihood(NLL)
正解データの尤度にマイナスlogを取ったもの。
$$ L=-\log p(y\mid x) $$モデル学習では尤度最大化が基本。
$$ \max p(y\mid x) $$logを取っても最大値の位置は同じ。
$$ \max \log p(y\mid x) $$最小化問題として書けば、
$$ \min -\log p(y\mid x) $$Cross Entropyとの強い関連。
Entropy
確率分布の「不確実性」を表す量。
$$ H(p)=-\sum_i p_i\log p_i $$例えば、
$$ p=[0.99,0.005,0.005] $$なら低いEntropy。
一方、
$$ p=[0.33,0.33,0.34] $$なら高いEntropy。
直感的には、
- 一つの選択肢に集中 → Entropy小
- どれもどれも同じくらいありそう → Entropy大
という関係。
KL Divergence
2つの確率分布の違いを測る量。
$$ D_{\mathrm{KL}}(p|q) = \sum_i p_i \log\frac{p_i}{q_i} $$重要な関係式。
$$ H(p,q) = H(p) + D_{\mathrm{KL}}(p|q) $$教師分布 $p$ が固定なら、
$$ \text{Cross Entropyの最小化} \Longleftrightarrow \text{KL Divergenceの最小化} $$主な用途。
- VAE
- Knowledge Distillation
- Reinforcement Learning
- LLM
- 確率分布同士の比較
活性化関数
ReLU
ニューラルネットで最も基本的な活性化関数の一つ。
$$ \operatorname{ReLU}(x) = \max(0,x) $$特徴。
- $x<0$ なら $0$
- $x>0$ ならそのまま $x$
- 計算が単純
- ニューラルネットへの非線形性の導入
Leaky ReLU
ReLUの負の領域にも小さな傾きを持たせたもの。
$$ f(x) = \begin{cases} x & x>0 \ \alpha x & x\le0 \end{cases} $$ReLUで起こるDead Neuron問題への対策の一つ。
tanh
出力を $-1$ から $1$ に収めるS字型の関数。
$$ \tanh(x) = \frac{e^x-e^{-x}} {e^x+e^{-x}} $$特徴。
- 出力範囲 $[-1,1]$
- $\tanh(0)=0$
- Sigmoidと似た形
- RNNなどで頻出
GELU
Transformer系モデルで頻出する活性化関数。
$$ \operatorname{GELU}(x) = x\Phi(x) $$$\Phi(x)$ は標準正規分布の累積分布関数。
直感的には「滑らかなReLU」。
- Transformer
- BERT系
- GPT系などで頻出
SiLU / Swish
Sigmoidを利用した滑らかな活性化関数。
$$ \operatorname{SiLU}(x) = x\sigma(x) $$特徴。
- 滑らかなReLU系
- Swishとも呼ばれる関数
- 現代的なニューラルネットで頻出
Softplus
ReLUを滑らかにしたような関数。
$$ \operatorname{Softplus}(x) = \log(1+e^x) $$導関数がSigmoid。
$$ \frac{d}{dx}\operatorname{Softplus}(x) = \sigma(x) $$興味深い関係。
$$ \operatorname{Softplus}(x) \approx \operatorname{ReLU}(x) $$回帰でよく使う損失関数
MSE
Mean Squared Error。
$$ L =(y-\hat y)^2 $$特徴。
- 誤差を二乗
- 大きな誤差への強いペナルティ
- 回帰問題の代表的Loss
- L2 Lossとも関連
MAE
Mean Absolute Error。
$$ L = |y-\hat y| $$特徴。
- 誤差の絶対値
- MSEより外れ値の影響を受けにくい性質
- L1 Lossとも関連
Huber Loss
MSEとMAEの中間的なLoss。
- 小さい誤差 → 二乗誤差
- 大きい誤差 → 絶対誤差
- MSEの滑らかさとMAEの外れ値耐性の折衷
ベクトル計算でよく出るもの
Dot Product
ベクトルの内積。
$$ x^\top y = \sum_i x_i y_i $$主な用途。
- Attention
- 類似度
- 線形層
- Embedding
Cosine Similarity
ベクトル同士の向きの近さ。
$$ \operatorname{cos_sim}(x,y) = \frac{x^\top y} {|x|_2|y|_2} $$主な用途。
- Embedding検索
- Semantic Search
- 文書類似度
- Recommendation
L2 Distance
ユークリッド距離。
$$ d(x,y) = |x-y|_2 $$つまり、
$$ d(x,y) = \sqrt{ \sum_i(x_i-y_i)^2 } $$L1 Distance
マンハッタン距離。
$$ d(x,y) = |x-y|_1 $$つまり、
$$ d(x,y) = \sum_i|x_i-y_i| $$Transformerで特に重要な式
Scaled Dot-Product Attention
Transformerの中心となるAttention。
$$ \operatorname{Attention}(Q,K,V) = \operatorname{softmax} \left( \frac{QK^\top}{\sqrt{d_k}} \right)V $$内部の流れ。
- QueryとKeyのDot Product
- $\sqrt{d_k}$ によるスケーリング
- Softmaxによる重みへの変換
- Valueの加重平均
これまで出てきた関数が一つの式に集約された構造。
LayerNorm
ニューラルネット内部の値を正規化する処理。
$$ \hat{x} = \frac{x-\mu} {\sqrt{\sigma^2+\epsilon}} $$その後のAffine変換。
$$ y = \gamma\hat{x}+\beta $$Transformerを構成する基本要素の一つ。
RMSNorm
LayerNormに近い正規化手法。
RMSは、
$$ \operatorname{RMS}(x) = \sqrt{ \frac{1}{n} \sum_i x_i^2 } $$RMSNormの基本形。
$$ \hat{x} = \frac{x} {\operatorname{RMS}(x)+\epsilon} $$特徴。
- LayerNormのような平均の減算なし
- 現代的なLLMで頻出
- 比較的シンプルな計算
特に覚えたい重要関数
まず優先して押さえたいもの。
- $\exp(x)$
- $\log(x)$
- $-\log(p)$
- Sigmoid
- Logit
- Softmax
- LogSoftmax
- LogSumExp
- BCE / BCEWithLogitsLoss
- Cross Entropy
- Entropy
- KL Divergence
- ReLU
- GELU
特に重要な一本の流れ。
$$ \text{logit} \rightarrow \text{sigmoid / softmax} \rightarrow \text{probability} \rightarrow -\log \rightarrow \text{cross entropy} $$機械学習でバラバラに登場する用語をつなげて理解するための中心線。
まとめ
- DNNやNLPの概念は繋がっている
- シャノンの情報理論、エントロピーからトランスフォーマーまで
- ココらへんはよく出るので、一度定義を書く下しておいてして、必要な時に再度参照するのが良い
