はじめに
活性化関数としてステップ関数がある、ニューラルネットワークの起源となるアルゴリズムのパーセプトロンでAND回路やOR回路の構成に使用されたものです。
過去にシグモイド関数をやってきてるのに、なんで初期の活性化関数であるステップ関数に戻るのかというと、それは微分不可能だから。
活性化関数 Relu も微分不可能なのにディープラーニングの隠れ層では推奨されています。
私の方で活性化関数で「微分不可能」というところに理解が引っかかっているので、原点に戻って整理しようと考えたのです。
あとで追記します。
参考
ステップ関数
形式ニューロン
左図が本物の神経細胞(ニューロン) で、右図が形式ニューロンです。
形式ニューロンをWikipediaから引用します。
形式ニューロン(けいしきニューロン、英: formal neuron)や Threshold Logic Unit とは、1943年に神経生理学者・外科医であるウォーレン・マカロックと論理学者・数学者であるウォルター・ピッツが発表した最初の人工ニューロン(英: artificial neuron)[1]。伝達関数としてはヘヴィサイドの階段関数を使い、入出力の値は 0 または 1 の二値だけをとる。
簡単に説明すると、入力が2つあり各入力に対して重みが掛け算され、その値が閾値を超えれば出力は「1」、そうでなければ出力は「0」となります。 たとえば、入力が(1,0)、重みが(0.5, 0.7)だとすると、1×0.5 + 0×0.7 = 0.5 を計算して閾値と比較します。
形式ニューロンの場合、入力が「0」か「1」、重みが「実数」、出力が「0」か「1」となります。
単位ステップ関数
後述するヘヴィサイド関数との違いは、x = 0 の時も1の値を持つものとして定義していること。
機械学習のサンプルプログラムで使用されるステップ関数は、x = 0 の時は0の値になっているので用途によって定義が違うんでしょうね。
def step(x): return 1 if x > 0 else 0
ヘヴィサイド関数
ヘヴィサイドの階段関数 は、正負の引数に対しそれぞれ 1, 0 を返す階段関数となります。
又は、原点を埋めて
パーセプトロン
単純パーセプトロン
単純パーセプトロンの活性化関数としてステップ関数を使用しています。
qiita.com
多層パーセプトロン
多層パーセプトロンの活性化関数としてステップ関数を使用しています。
rightcode.co.jp
ステップ関数の限界
多層パーセプトロンの精度をよくするための誤差逆伝播(バックプロパゲーション)が生み出されたのですが、ステップ関数は微分が出来ないため、ラメルハートらは誤差を伝播できるような微分可能な活性化関数として、シグモイド関数を用いるようになりました。
rightcode.co.jp
最後に
今の自分は本やWebサイトを見て知識を得ているだけで、本当の意味で理解出来ていないことがあらためて分かったので、ちゃんと理解するようにプログラムを組んでみることにします。