ステップ関数とは?意味・仕組み・活用例をわかりやすく解説

ステップ関数とは?意味・仕組み・活用例をわかりやすく解説

AIの初心者

「ステップ関数」って、階段みたいにカクカクしている関数なんですか?

AI専門家

そうだね。機械学習の基礎でよく出てくるのは、一段だけの階段のような関数だよ。ここでは、入力が0未満なら0、0以上なら1を出すルールで考えよう。

AIの初心者

境目で出力が急に切り替わるんですね。それは、どんなときに役立つんですか?

AI専門家

基準を満たすかどうかを、0と1ではっきり表したいときに使えるよ。初期のパーセプトロンの判断や、画像を白と黒に分ける処理が例だね。ただし、判断に使いやすいことと、モデルの学習に使いやすいことは分けて考える必要があるんだ。

ステップ関数は、入力がしきい値に達したかどうかで、出力を0と1に切り替える関数です。しきい値とは、判定の境目となる値のことです。入力には温度、画素の明るさ、モデルが計算したスコアなどを使えます。

機械学習では、人工ニューロンの出力を決める「活性化関数」の基本例として登場します。仕組みは単純ですが、グラフの境界をどう扱うか、なぜ通常の勾配による学習には向かないのかを押さえると、シグモイドやReLUとの違いも理解しやすくなります。

まずは「数値を受け取る」「しきい値と比較する」「二つの結果に分ける」という流れをつかみましょう。0と1にどのような意味を持たせるかは、解く問題に応じて決めます。

連続した入力をしきい値と比較し、基準未満を0、基準以上を1に分けるステップ関数の基本構造

ステップ関数の定義とグラフ

この記事では、一つの境界で0から1へ切り替わる「単位ステップ関数」を扱います。入力を\(x\)、出力を\(H(x)\)と書くと、定義は次のとおりです。

\(H(x)=\begin{cases}0 & (x\lt 0)\\1 & (x\ge 0)\end{cases}\)

この式は、入力が0より小さければ出力は0、入力が0以上なら出力は1、という二つのルールをまとめたものです。たとえば、\(H(-0.1)=0\)、\(H(0)=1\)、\(H(0.1)=1\)となります。入力が正の側にある限り、0.1でも100でも出力は同じ1です。

グラフは、横軸を入力、縦軸を出力とすると、負の側では高さ0の水平線、0以上では高さ1の水平線になります。境界では値が飛ぶため、連続した曲線ではありません。今回の定義を点で表すなら、座標\((0,0)\)は含まない白丸、\((0,1)\)は含む黒丸です。段差を示す補助的な縦線を描いても、境界で0と1の間の値をすべて出力するわけではありません。

しきい値を0から別の値\(\theta\)へ移す場合は、次のように入力からしきい値を引きます。

\(H(x-\theta)=\begin{cases}0 & (x\lt\theta)\\1 & (x\ge\theta)\end{cases}\)

たとえば、しきい値が60なら、59を入力すると0、60や70を入力すると1です。グラフの段差の位置も、横軸の0から60へ移ります。

0未満で出力0、0以上で出力1となるグラフと、しきい値を移したときの段差の位置

「しきい値以上」と「しきい値を超える」は、境界ちょうどの扱いが異なります。単位ステップ関数には、境界の出力を0や2分の1とする定義もありますが、本記事では1で統一します。教材やプログラムを比べるときは、境界の定義まで確認してください。

なお、「階段関数」は区間ごとに一定値を取る関数の呼び方で、段差が複数あるものも含みます。ここで説明する0と1だけの関数は、その基本的な一例です。

パーセプトロンで二値の判断を作る仕組み

初期のパーセプトロンは、複数の入力から計算した値にステップ関数を適用して、二つのクラスを判定します。入力を\(x_i\)、重みを\(w_i\)、バイアスを\(b\)とすると、計算は次の二段階です。

\(z=\sum_{i=1}^{n}w_i x_i+b,\qquad y=H(z)\)

まず、各入力に重みを掛けて足し合わせ、バイアスを加えて\(z\)を求めます。重みは各入力が判定に与える影響を、バイアスは判定の境目の位置を調整します。次に、活性化関数であるステップ関数へ渡し、\(z\ge 0\)なら出力\(y\)を1、それ以外なら0にします。

具体例として、「二つの入力が両方とも1のときだけ1を出す」ANDを考えましょう。\(x_1,x_2\in\{0,1\}\)とし、両方の重みを1、バイアスを−1.5にすると、\(z=x_1+x_2-1.5\)です。

入力\(x_1\) 入力\(x_2\) 計算値\(z\) 出力\(H(z)\)
0 0 −1.5 0
0 1 −0.5 0
1 0 −0.5 0
1 1 0.5 1

片方だけが1の場合、入力の合計は1なので、1.5を引くと負になります。両方が1の場合だけ合計が2となり、引いた後も正の値が残ります。このため、ステップ関数に渡すとANDの判定になります。

二つの入力を足してバイアスのマイナス1.5を加え、ステップ関数でANDの結果を求める計算の流れ

ここでの0と1は、条件不成立と成立、オフとオン、クラスAとクラスBなどを表すラベルです。出力が1であることは、確信度が100%であることを意味しません。境界をわずかに越えた入力も、大きく越えた入力も、同じ1になります。

また、単一のパーセプトロンが作る決定境界は\(\sum_{i=1}^{n}w_i x_i+b=0\)です。入力が二つなら直線で、入力空間を二つに分けます。ANDはこの直線で分離できますが、「片方だけが1なら1、両方同じなら0」とするXORは、一本の直線では分けられません。これは出力を二値にすること自体とは別の、単一パーセプトロンの表現力の限界です。

計算の簡潔さと勾配による学習の限界

ステップ関数の学習上の性質を理解する鍵は、グラフの傾きです。境界以外では水平なので、導関数は次のようになります。

\(H'(x)=0\qquad (x\ne 0)\)

ステップ関数の利点は、入力としきい値を比較するだけで判定でき、ルールを説明しやすいことです。「基準以上なら作動する」という処理をそのまま表現できるため、画像の二値化や単純なオン・オフ判定に向いています。ただし、判定に使う特徴量やスコアの計算まで必ず簡単になるわけではありません。

一方、二値化すると入力の大きさに関する情報が失われます。同じ側にある入力の差は出力に現れず、境界をまたぐときだけ結果が変わります。たとえば、しきい値が0なら、−0.001と0.001という近い値でも出力は0と1に分かれます。小さな変化がいつでも判定を変えるのではなく、境界をまたぐ変化が問題になります。

微分については、境界以外では微分できて傾きが0、境界では不連続なので微分できない、というのが正確です。「ステップ関数はどこでも微分できない」と捉えると、学習が難しい理由を取り違えてしまいます。

通常の誤差逆伝播では、損失が小さくなる方向を探すため、各層の微分を使って重みへの影響を計算します。途中にステップ関数があると、境界以外ではその微分が0になり、そこを通る有用な勾配が伝わりません。境界で微分が定まらないことに加え、広い範囲で傾きが0であることが、勾配降下法での調整を難しくしています。

ただし、ステップ関数を使うモデルが一切学習できないわけではありません。パーセプトロンの学習則は、誤分類した入力と正解ラベルに基づき、重みやバイアスを更新します。この更新ではステップ関数そのものの微分を使いません。線形に分離できる訓練データでは分離する重みを見つけられますが、分離できない場合には収束が保証されない、という別の制約があります。

したがって、「判定のルールとして使えるか」と「通常の微分を使って学習できるか」は、分けて考えることが大切です。

シグモイド・ReLU・tanhとの違い

活性化関数を比べるときは、出力が二値か連続値かに加え、学習に使える傾きがあるかを確認します。たとえばシグモイドとReLUは、それぞれ次の式で表せます。

\(\sigma(x)=\frac{1}{1+e^{-x}},\qquad \operatorname{ReLU}(x)=\max(0,x)\)

シグモイドはS字形に変化し、ReLUは負の入力で0、正の入力では入力をそのまま出力します。tanhもS字形ですが、負の出力を持つ点がシグモイドと異なります。以下では、丸括弧は端の値を含まない範囲、角括弧はその端の値を含む範囲を表しています。

関数 出力範囲 連続性と微分 主な用途 注意点
ステップ関数 \(\{0,1\}\)の二値 0で不連続かつ微分不可。それ以外の傾きは0 パーセプトロン、しきい値による最終判定 入力の大小を失い、通常の勾配による学習には不向き
シグモイド \((0,1)\) 連続で、すべての点で微分可能 二値分類モデルの出力層など 入力の絶対値が大きい飽和域で勾配が小さくなる
ReLU \([0,\infty)\) 連続だが0では微分不可。正の側の傾きは1、負の側は0 ニューラルネットワークの隠れ層など 負の側で勾配が0となり、更新が進まないユニットが生じることがある
tanh \((-1,1)\) 連続で、すべての点で微分可能 正負の出力を使う隠れ層や再帰型モデルなど 両端に近い飽和域で勾配が小さくなる

シグモイドとtanhは滑らかでも、出力が上限や下限に近づくと傾きが小さくなります。これが層を重ねて伝わると、前の層まで届く勾配が小さくなり、学習が進みにくくなることがあります。これが勾配消失と呼ばれる問題の一因です。

ReLUは0で折れ曲がるため、「すべての点で微分できる滑らかな関数」ではありません。それでも正の側では傾き1を学習に使えます。0での勾配は実装上の規約で値を定めますが、境界以外もすべて平らなステップ関数とは性質が異なります。段差による不連続と、連続したグラフの折れ曲がりを区別しましょう。

ステップ関数、シグモイド、ReLU、tanhの形と出力範囲の比較。ステップの不連続な段差とReLUの連続した折れ曲がりの違い

二値分類では、学習中はシグモイドの連続した出力と正解ラベルから損失を計算し、推論時にしきい値を使って0か1へ変換する構成があります。たとえば、シグモイドの出力が0.49ならクラス0、0.73ならクラス1とする判定は、しきい値を0.5に設定した例です。境界ちょうどの0.5も、ここではクラス1に含めます。

学習中の連続した出力と、利用時に必要な最終ラベルは、役割が異なります。途中の値を保って重みを調整し、最後に用途に合わせて判定する、と考えると整理できます。どの関数にも得意な役割と注意点があり、一つの関数がすべての層や課題に最適とは限りません。

画像・制御・信号処理での活用例

画像の二値化は、ステップ関数を具体的な数値に結び付けやすい例です。8ビットのグレースケール画像で、画素値\(v\)が0から255までの値を取るとき、しきい値128による二値化は次のように表せます。

\(B(v)=H(v-128)\)

出力0を黒、1を白に対応させると、画素値127は黒、128と200は白になります。画像データとして保存するときには、二値の0と1を、表示用の画素値0と255に置き換えることもあります。

濃淡を二つに絞ると、背景と文字を分けたり、対象の領域を取り出したりする前処理に利用できます。ただし、照明のむらや影があると、同じ対象の一部が黒、別の部分が白になることがあります。二値化だけで猫や文字などの意味を認識できるわけではなく、対象や撮影条件に応じた処理が別途必要です。

温度制御なら、温度\(T\)が設定値\(\theta\)未満のときにヒーターをオンにするルールを、次のように表せます。

\(u(T)=1-H(T-\theta)\)

ここでは出力1をオン、0をオフとします。設定値が20℃なら、19℃でオン、20℃と21℃でオフです。ステップ関数の出力を1から引くことで、基準未満で作動するルールになります。実際の制御では、境界付近での頻繁な切り替えへの対策も必要です。

デジタル信号では、電圧をしきい値と比較して0か1を判定する仕組みを、ステップ関数で理想化できます。ただし、実際の電子回路には低電圧・高電圧として扱える範囲や、判定を保証できない中間領域があるため、一つの境界だけで回路の仕様を表し尽くすことはできません。

信号処理では、振幅の大きさをしきい値と比較して、通過させる部分を1、遮断する部分を0とする「マスク」を作れます。このマスクを元の信号に掛ければ、条件を満たす部分だけを残せます。しかし、大きな音が雑音で、小さな音が必要な信号とは限りません。逆に、小さな音をすべて消すと、声の弱い部分まで失う可能性があります。振幅による判定は、信号とノイズを区別するための仮定が成り立つ範囲で使う必要があります。

さらに、複数の段差を持つ階段関数なら、利用量の区分ごとに変わる料金や、所得の区分ごとに変わる限界税率も表現できます。ただし、超過した部分に高い税率を適用する仕組みでは、限界税率の段差と税額全体の段差は別物です。何の値が段階的に変わるのかを明確にすることが大切です。

しきい値を使うときの注意点

しきい値による判定を実装するときは、まず「何を比較するか」「どの単位か」「境界をどちらに含めるか」を決めます。温度の20℃と画素値の20は意味が異なりますし、同じ数値でも入力の尺度が変われば判定は変わります。

確認には、境界の直前・一致・直後の三つの入力が役立ちます。たとえば「60以上で1」という仕様なら、59.9で0、60で1、60.1で1になるかを確かめます。整数だけを扱う場合は59、60、61で確認できます。「以上」を「超える」として実装すると、境界だけ結果が変わるため注意が必要です。

次に、境界付近の揺れを考えます。温度が19.9℃、20.1℃、19.9℃と変化するたびにヒーターを切り替えると、不要なオン・オフが繰り返されます。測定値に含まれるノイズや、装置が温まるまでの遅れが影響することもあります。

対策の一つが、オンにするしきい値とオフにするしきい値を分ける「ヒステリシス」です。たとえば、19℃未満でオン、21℃以上でオフ、その間は直前の状態を保つようにします。

測定した温度 ヒーターの動作例
19℃未満 オンにする
19℃以上、21℃未満 直前のオン・オフ状態を維持する
21℃以上 オフにする

この方式では、20℃でも直前にオンだったならオン、オフだったならオフのままです。現在の入力だけで出力が決まる単一のステップ関数とは異なり、状態を記憶します。開始時に中間の温度だった場合にどうするかも、初期状態として決めておく必要があります。

単一のしきい値では境界付近の揺れでオンとオフが反転し、ヒステリシスでは二つのしきい値の間で直前の状態を保つ仕組み

機械学習の分類でも、しきい値の選び方は結果を左右します。スコアが高いほど対象らしいというモデルなら、しきい値を下げると対象と判定する件数が増え、見逃しを減らせる一方で誤検知が増える可能性があります。上げれば、一般にその逆の傾向になります。

シグモイド出力に対する0.5は一つの基準ですが、常に最適とは限りません。見逃しと誤検知がそれぞれどの程度問題になるかを踏まえ、検証データで候補を比べます。最終評価用のテストデータを使ってしきい値を調整すると、評価が楽観的になるため、調整用のデータと区別します。

また、いったん0と1だけにすると、画像の濃淡やモデルのスコアの差は復元できません。後からしきい値を変えたり、境界付近の判定を確認したりする可能性があるなら、元の画素値やスコアも残しておくと役立ちます。

ステップ関数の基本は、しきい値によって二つの結果を選ぶことです。その単純さを活かすには、境界の定義、二値化で失う情報、学習時に必要な勾配をそれぞれ確認し、判定する段階と用途に合わせて使いましょう。

更新履歴

日付 内容
2025年2月1日 初回公開
2026年10月17日 境界値と微分の説明を修正し、ANDの計算例としきい値設定の注意点を追記