Softmax
AIにおけるソフトマックス(Softmax)関数について解説します。Ultralytics YOLO26やニューラルネットワークを使用して、ロジットをマルチクラス分類の確率に変換する方法を学びましょう。
Softmaxは人工知能分野において極めて重要な数式であり、具体的には多くの分類アルゴリズムの最終ステップとして機能します。これは、多くの場合ロジットと呼ばれる生の値のベクトルを、確率のベクトルに変換します。この変換により、出力値がすべて正になり、合計が正確に1になることが保証され、有効なprobability distributionが効果的に作成されます。この性質のため、Softmaxは、システムが2つ以上の排他的なオプションから単一のカテゴリを選択する必要があるマルチクラス分類用に設計されたneural networksの出力層で使用される標準的なactivation functionです。
Softmaxのメカニズム#
一般的なdeep learning (DL)のワークフローでは、ネットワークの層が複雑な行列の乗算と加算を実行します。活性化前の最終層の出力は、logitsと呼ばれる生スコアで構成されます。これらの値は負の無限大から正の無限大までの範囲をとるため、信頼度として直接解釈することが困難です。
Softmaxは、主に以下の2つの操作を行うことでこの問題に対処します。
-
指数化 (Exponentiation): 各入力値の指数を計算します。このステップにより、すべての値が非負($e^x$は常に正であるため)となり、最大値よりも大幅に低い値を抑制しつつ、最大スコアを強調します。
-
正規化: これらの指数関数的に変換された値の合計を求め、個々の指数をこの合計で割ります。このnormalization processは、全体に対する部分を表すように数値をスケーリングし、開発者がパーセンテージの信頼度スコアとして解釈できるようにします。
実社会での応用#
明確な確率を出力する能力により、Softmaxはさまざまな業界やmachine learning (ML)のタスクにおいて不可欠なものとなっています。
- 画像分類: コンピュービジョンにおいて、モデルは画像を分類するためにSoftmaxを使用します。たとえば、Ultralytics YOLO26分類モデルが写真を分析する場合、「ゴールデン・レトリバー」、「ジャーマン・シェパード」、「プードル」などのクラスのスコアを生成する可能性があります。Softmaxは、これらのスコアを確率(例:0.85、0.10、0.05)に変換し、画像にゴールデン・レトリバーが含まれている確率が高いことを示します。これは、自動写真整理からAI in Healthcareにおける医療診断に至るまでのアプリケーションにとって極めて重要です。
- 自然言語処理(NLP): SoftmaxはLarge Language Models (LLMs)におけるテキスト生成のエンジンです。Transformerのようなモデルが文を生成するとき、語彙内のすべての単語のスコアを計算することによって、次の単語(トークン)を予測します。Softmaxはこれらのスコアを確率に変換し、モデルが最も可能性の高い次の単語を選択できるようにすることで、スムーズなmachine translationと対話型AIを実現します。
- 強化学習: reinforcement learningのエージェントは、行動を選択するためにSoftmaxを使用することがよくあります。常に最も価値の高い行動を選択する代わりに、エージェントは確率を使用してさまざまな戦略を探索し、ロボット制御やゲームプレイなどの環境において探索と活用のバランスをとることができます。
Pythonコードの例#
次の例は、事前トレーニング済みのYOLO26分類モデルをロードし、Softmaxを介して生成された確率スコアにアクセスする方法を示しています。
from ultralytics import YOLO
# Load a pre-trained YOLO26 classification model
model = YOLO("yolo26n-cls.pt")
# Run inference on a sample image
results = model("https://ultralytics.com/images/bus.jpg")
# The model applies Softmax internally. Access the top prediction:
# The 'probs' attribute contains the probability distribution.
top_prob = results[0].probs.top1conf.item()
top_class = results[0].names[results[0].probs.top1]
print(f"Predicted Class: {top_class}")
print(f"Confidence (Softmax Output): {top_prob:.4f}")Softmaxと関連概念の区別#
Softmaxはマルチクラスのシナリオで主流ですが、model trainingやアーキテクチャ設計で使用される他の数式と区別することが重要です。
- Sigmoid: Sigmoid関数も値を0から1の間にスケーリングしますが、各出力を独立して扱います。これにより、Sigmoidはbinary classification(はい/いいえ)や、クラスが排他的ではないマルチラベル分類(例:画像に「人物」と「バックパック」の両方を含めることができる)に最適です。Softmaxは確率の合計が1になるように強制するため、クラス同士が競合するようになります。
- ReLU (Rectified Linear Unit): ReLUは主にネットワークの隠れ層で使用され、非線形性を導入します。Softmaxとは異なり、ReLUは出力を特定の範囲に制限せず(負の入力には単純にゼロを出力し、正の入力には入力自体を出力します)、確率分布を生成しません。
- Argmax: Softmaxがすべてのクラスの確率を提供するのに対し、Argmax functionは最高確率の単一インデックスを選択するために組み合わせて使用されることがよくあります。Softmaxは「ソフト」な信頼度を提供し、Argmaxは「ハード」な最終決定を提供します。
高度な統合#
現代のMLパイプラインでは、Softmaxは損失関数内で暗黙的に計算されることがよくあります。たとえば、Cross-Entropy Lossは、Softmaxと負の対数尤度を単一の数式ステップに結合して、トレーニング中の数値の安定性を向上させます。Ultralytics Platformのようなプラットフォームは、これらの複雑な処理を自動的に処理するため、ユーザーはこれらの数式を手動で実装することなく、頑健なモデルをトレーニングできます。






