損失関数と評価関数(cross_entropy_with_softmax, classification_error)

Microsoft Cognitive Toolkit(CNTK)におけるモデルの学習では、「損失関数(loss function)」と「評価関数(evaluation function)」が重要な役割を果たします。ここでは、主に使用される以下の2つの関数について詳しく解説します。


1. 損失関数(Loss Function):cross_entropy_with_softmax

概要

cross_entropy_with_softmax は、分類問題において最も一般的に用いられる損失関数の一つです。この関数は、Softmax関数とクロスエントロピー誤差関数を組み合わせたものであり、数値的に安定した方法で実装されています。

数式表現

与えられた正解ラベル yy(one-hot形式)とモデル出力 zz(ロジット)に対して、

Loss=iyilog(softmax(z)i)\text{Loss} = -\sum_{i} y_i \cdot \log(\text{softmax}(z)_i)

ここで、

softmax(z)i=ezijezj\text{softmax}(z)_i = \frac{e^{z_i}}{\sum_j e^{z_j}}

特徴

  • Softmaxによって出力は確率分布に変換される。

  • クロスエントロピーが、正解ラベルと予測確率の差を測る。

  • ロジット(Softmaxの前の値)に直接適用でき、数値的な不安定性を軽減。

  • 学習に使用される主要な損失関数であり、勾配計算に最適化されている。


2. 評価関数(Evaluation Function):classification_error

概要

classification_error は、予測の精度を評価するための関数です。損失関数とは異なり、モデルの性能を**人間が解釈しやすい指標(誤分類率)**として示します。

動作

  • モデルの出力(Softmaxの後のクラス確率)から最大値を持つインデックス(= 予測ラベル)を取り出す。

  • それを正解ラベルと比較し、一致しなかったサンプルの割合を返す。

classification_error(ypred,ytrue)=1Ni=1N1(argmax(ypred,i)argmax(ytrue,i))\text{classification\_error}(y_{\text{pred}}, y_{\text{true}}) = \frac{1}{N} \sum_{i=1}^N \mathbb{1}( \arg\max(y_{\text{pred}, i}) \neq \arg\max(y_{\text{true}, i}) )

特徴

  • 学習には使用されず、あくまで評価目的に使われる。

  • 出力は 0〜1 の範囲で、誤分類の割合(例:0.2 は 20% の誤分類)。

  • 精度(accuracy)を知るには 1 - classification_error を計算。


使用例(Pythonコード)

python
import cntk as C # 入力とラベルの変数 input_dim = 784 # 例:MNIST画像(28x28) num_classes = 10 input_var = C.input_variable(input_dim) label_var = C.input_variable(num_classes) # 簡単なモデル例(全結合層) z = C.layers.Dense(num_classes)(input_var) # 損失関数と評価関数 loss = C.cross_entropy_with_softmax(z, label_var) error = C.classification_error(z, label_var)

まとめ

種類 関数名 用途 出力の意味 使用タイミング
損失関数 cross_entropy_with_softmax モデルの訓練 誤差の大きさ(損失) 学習中
評価関数 classification_error モデルの評価 誤分類率(0〜1) 学習中・テスト時

これらを適切に使い分けることで、CNTKでのモデルの学習と性能評価を効果的に行うことができます。

生成日:2025/05/23