Sigmoid
機械学習におけるシグモイド関数の役割を解説します。この活性化関数が、Ultralytics YOLO26などのモデルで二値分類を可能にする仕組みを学びます。
シグモイド関数は、機械学習 (ML)やディープラーニング (DL)の分野で幅広く使用されている、基本的な数学的要素です。一般に「押しつぶし関数」とも呼ばれ、任意の実数を入力として受け取り、0から1の間の値に変換します。この特徴的な「S」字状の曲線により、生のモデル出力を解釈可能な確率に変換する用途で非常に有用です。ニューラルネットワーク (NN)では、シグモイド関数は活性化関数として機能し、単純な線形関係を超えた複雑なパターンをモデルが学習できるように非線形性を導入します。ディープネットワークの隠れ層では他の関数にほぼ置き換えられていますが、二値分類タスクの出力層では依然として標準的な選択肢です。
AIにおけるシグモイドの仕組み#
シグモイド関数は本質的に、入力データ(多くの場合、ロジットと呼ばれます)を正規化された範囲に変換します。この変換は、イベントの発生確率を予測することが目的のタスクで重要です。出力を0から1の間に制限することで、この関数は明確な確率スコアを提供します。
- ロジスティック回帰: 従来の統計モデリングでは、シグモイドはロジスティック回帰の中核となる要素です。顧客が離脱するか継続するかなど、二値結果の確率をデータサイエンティストが推定できるようにします。
- 二値分類: 2つのクラス(例:「猫」と「犬」)を区別するように設計されたニューラルネットワークでは、最終層にシグモイド活性化関数を採用することがよくあります。出力がしきい値(通常は0.5)を超える場合、モデルは陽性クラスを予測します。
- マルチラベル分類: クラスが相互排他的なマルチクラス問題とは異なり、マルチラベルタスクでは、画像やテキストが複数のカテゴリに同時に属することができます。ここでは各出力ノードにシグモイドを独立して適用するため、モデルは競合することなく、同じシーン内の「車」と「人物」を検出できます。
他の活性化関数との主な違い#
シグモイドはかつてすべての層でデフォルトとして使用されていましたが、研究者は勾配消失問題などの限界を発見しました。この問題では、ディープネットワークで重みを効果的に更新するには勾配が小さくなりすぎます。これを受けて、隠れ層では代替関数が採用されるようになりました。
- シグモイドとReLU(正規化線形ユニット)の比較: ReLUは計算がより高速で、入力が正の場合はそのまま出力し、それ以外の場合は0を出力することで勾配消失を回避します。これはYOLO26などの最新アーキテクチャにおける隠れ層の推奨選択肢ですが、シグモイドは特定のタスクで最終出力層に使用されます。
- シグモイドとSoftmaxの比較: どちらも出力を0から1の範囲に変換しますが、目的は異なります。シグモイドは各出力を独立して扱うため、二値タスクやマルチラベルタスクに適しています。Softmaxはすべての出力の合計を1にすることで、正解が1つだけのマルチクラス分類に使用される確率分布を作成します。
実世界での利用例#
シグモイド関数は、確率推定が必要とされるさまざまな業界で活用されています。
-
医療診断: 医療画像解析に使用されるAIモデルでは、X線画像やMRIスキャンに疾患が存在する確率を予測するために、シグモイド出力がよく使用されます。たとえば、モデルが0.85を出力した場合、腫瘍の可能性が85%であることを示し、医師による早期検出を支援します。
-
スパム検出: メールフィルタリングシステムでは、自然言語処理 (NLP)モデルにシグモイド分類器を組み合わせ、受信メッセージが「スパム」か「スパムではない」かを判定します。モデルはキーワードとメタデータを分析し、メールが受信トレイに入るか迷惑メールフォルダーに入るかを決定するスコアを出力します。
実装方法#
ディープラーニングモデルの構築で人気のライブラリであるPyTorchを使用すると、シグモイドがデータをどのように変換するかを確認できます。この簡単な例では、さまざまな入力値に対する「押しつぶし」効果を示します。
import torch
import torch.nn as nn
# Create a Sigmoid layer
sigmoid = nn.Sigmoid()
# Define input data (logits) ranging from negative to positive
input_data = torch.tensor([-5.0, -1.0, 0.0, 1.0, 5.0])
# Apply Sigmoid to squash values between 0 and 1
output = sigmoid(input_data)
print(f"Input: {input_data}")
print(f"Output: {output}")
# Output values near 0 for negative inputs, 0.5 for 0, and near 1 for positive inputs低レベルコードを記述せずに、これらの概念を利用するモデルをトレーニングしたい場合は、Ultralytics Platformの直感的なインターフェースを使用して、データセットを管理し、YOLO26のような最先端モデルをトレーニングできます。アーキテクチャの複雑さを自動的に処理するため、ユーザーは特定のコンピュータービジョンアプリケーション向けの高品質なトレーニングデータの収集に集中できます。









