北野坂備忘録

主にインストールやプログラミングのメモを載せています。

ロジスティック関数とシグモイド関数

 ロジスティック関数はもともと生物の個体数の変化を表すモデルに用いられる関数でした。
 なので、「時間 t = 0 における初期個体数を加えた形」がもとのロジスティック関数です。
 ところが、機械学習で用いるロジスティック関数は初期個体数を加えません。
 なぜなら、もとの初期個体数を加えたバージョンのロジスティック関数は、Sの字にならないことがあるからです。さらに、(0,1)に圧縮できません。
 機械学習で欲しいのは、

・S字カーブをする
・(0,1)に圧縮できる

関数です。
 機械学習で用いられる

σ(x) = 1 / ( 1 + exp(-x) )

という形をしたロジスティック関数、いわゆる「狭義のシグモイド関数」はこれを満たしています。ただし、これはもとのロジスティック関数側から見るとかなり特殊なケースになります。
 「ではシグモイド関数と呼べばよいのか?」というと、ややこしいことに「シグモイド」は機械学習で用いられるロジスティック・シグモイド関数だけではなく、累積正規分布関数なども含まれます。これはシグモイドというのは「ギリシア語のシグマの語末形(アルファベットでいうとS)に似た形」ということを意味しているからです。
 もっと言うと、正確な「シグモイド関数」は、

σ(x) = 1 / ( 1 + exp(-ax) )

というa(ゲイン)が入った形で、このうちゲインが1のものを「標準シグモイド関数」と言います。

 ということで、機械学習系の人は

σ(x) = 1 / ( 1 + exp(-x) )

を「ロジスティック関数」と気軽に読んでいますが、ロジスティック関数の特殊な形であるロジスティック・シグモイド関数の、さらに特殊な(ゲインが1である)形であるこの関数を「ロジスティック関数」と呼ぶのはやめて、より厳密な「標準シグモイド関数」と呼びませんか、というのが提案です。
 でも現状だと「ロジスティック関数」にしておかないと検索にひっかからないのよね……。