活性化関数でよく使われるシグモイド関数の歴史や定義について調べてみた。
シグモイド関数を知らずしてニューラルネットワークは語れませんが、ふわっとした理解しかなかったので、調べて記事にしてみました。
シグモイド関数の定義や歴史、なぜニューラルネットワークで広く使われるようになったのか等、数学的厳密性は抜きにしてまとめました。
ニューラルネットワークを非線形にする活性化関数
まず、シグモイド関数がどこで登場するかですが、各ユニットの活性化関数として使われます。
ニューラルネットワークの計算式には二種類あり、一つは小学生でもできる線形和です。
線形和というと難しく聞こえますが、要は買い物の計算と同じです。
1個100円のリンゴを4個、1個300円のメロンを2個買って、1枚10円のビニール袋を付ければ、合計
100円×4+300円×2+10円=1,010円
です。
この計算が、先の図でオレンジ色で書いてある関数(線形和)です。
もう一つの計算式が緑色で書いてある活性化関数です。
なぜ活性化関数が必要なのかというと、ニューラルネットワークの性能をより脳に近づけるためです。
小学生にもできるような線形和の計算だけで脳を真似できるほど、甘くはないということです。
線形和の計算だけだと、ニューラルネットワークはこんな判断しかできません。
ところが活性化関数をかますと、こんな判断もできるようになります。
一つ目の簡単な方の分類を線形問題、難しい方を非線形問題といいます。
脳は非線形の判断をしているということです。
では非線形の判断とはどういうことでしょうか?
ここに美味しいモンブランが100円で売っているとします。
お腹が減っている時には安いと思って買うでしょう。
でもお腹いっぱいの時には100円も払う気にはならず、10円なら払ってもいいかという気になるかもしれません。
またモンブランが嫌いな人にとっては、空腹でも100円は出さないでしょう。
このように同じモンブランでも、人によっても時間によっても価値は異なり、単純な直線で判断を真似できるほど簡単ではありません。
このような小難しい判断を真似するためには、やはりクネクネした形の関数が必要なのです。
シグモイド関数の歴史
人口学から生まれたロジスティック関数
それにしても、なぜその中でシグモイド関数が選ばれたのでしょうか?
その謎を解くために、1798年まで歴史を遡ります。
この年、イギリスの経済学者マルサスが「人口論」で、人口は等比級数的に増えるが食料は等差級数的にしか増えないので、その差が貧困を生むと主張しました。
等比級数的の例としては預金の金利があります。
100万円を預金して金利10%であれば、翌年には110万円になります。
そして、その次の年には120万円ではなく、
105万円×1.05=121万円
になります。
等比級数的とは、この複利と同じです。
この場合、毎年の増加率は一定なので、
dy/dt = Ky(Kは定数)
という微分方程式で書けます。
微分というと難しく感じますが、単位期間当たりの増加量を表します。
この場合は、1年という単位期間当たりの増加量は10%なので、dy/dtは0.1というだけのことです。
ですので、金利10%の場合は
dy/dt = 0.1y
という微分方程式になります。
そしてこれを解くと、
y = Ae0.1t(Aは定数)
となります。
グラフにすると、こうなります。
eはネイピア数と呼ばれる無理数で、大体2.7です。
円周率πも無理数で大体3.14ですが、同じようにただの数だと思っておいて大丈夫です。
マルサスは、人口はこのように増加するものだとして数理モデル化しました。
これを改良したのが1838年のベルギーの数学者フェルフルストです。
彼は、人口が増えていくと、どこかで頭打ちになるはずだと考え、マルサスのモデルを改良した数理モデルを考えました。
マルサスが唱えていたように、食料生産が追い付かず飢餓に陥る人が増えてくるので、人口はある一定以上は増えない、というところまでモデル化したのです。
改良点は、増加率が一定ではなく、人口の増加と共に小さくなっていくとした点です。
再び預金金利を例に取りましょう。
普通の銀行は預金額に拘わらず金利は一定です。
ところがフェルフルストの銀行では、金利が付く預金額に上限があって、上限に近づくほど金利が低くなります。
例えば、次のような金利を想像してみて下さい。
預金額が少ない時はほぼ10%の金利が付きますが、500万円に近づくにつれて0%になるような金利体系です。
10%の固定金利で50年間預金すると、次のようになります。
50年後には、なんと1億5,000万円になります。
一方、フェルフルストの銀行ではこうなります。
50年経っても、500万円にもなりません。
フェルフルストは、人口の増え方もこのようになるのだとして数理モデル化したのです。
式で書くとこうなります。
y = AB/(A+(B-A)e-ax) (A、B、aは定数)
フェルフルストは、この関数をロジスティック関数と名付けました。
ちなみに、ロジステイック関数と物流(ロジスティクス)とは何の関係もありません。
Logarithmicから来ている言葉で、「対数」が入った関数ということから名付けられたようです。
>> 【具体例でわかりやすく!】対数は何に使えるの?|パレートの法則への応用事例で実演
ロジスティック関数の特殊ケースが標準シグモイド関数
このグラフの横軸をマイナス方向に伸ばしてみましょう。
シグモイド関数っぽくなってきましたね。
それもそのはず、先ほどのロジスティック関数の式
y = AB/(A+(B-A)e-ax) (A、B、aは定数)
でA=1/2、B=1とすれば
y = 1/(1+e-ax) (aは定数)
となり、シグモイド関数の式になるからです。
ちなみに、シグモイド(Sigmoid)とは「S字の」という意味で、
y = 1/(1+e-ax) (aは定数)
がシグモイド関数というわけではありません。
これはシグモイド関数(S字関数)の一つという位置づけです。
しかしながら、一番シンプルにS字関数を表していてわかりやすいので、標準シグモイド関数と呼ぶことにします。
標準シグモイド関数のグラフは、aの値によって次のような形になります。
関数の値yは0から1の間の値になり、x=0では0.5になります。
またaの値が大きいほど立ち上がりが急になる性質があります。
一方、ロジスティック関数はこれをもっと一般化したもので、関数値yは0から任意の正の値を取り、x=0の時のyも任意の正の値になります。
その意味で、標準シグモイド関数はロジスティック関数の一部、またシグモイド関数は広くS字関数の意味なのでロジスティック関数はシグモイド関数の一部になり、次のような関係にあるといえます。
人口学から生物学へ応用範囲が広がったロジスティック関数
さて、フェルフルストによって提唱されたロジスティック関数は、その後、人口だけでなく広く生物一般の繁殖モデルとして市民権を得ていきます。
そして1972年、生物学者のWilsonとCowanが脳のニューロンの振る舞いを数理モデル化します。
そのモデルでは、数珠つなぎになったニューロンが、前のニューロンから受け取った信号を次のニューロンに送る際、受け取った信号が弱い時にはニューロンは何の反応もせず、信号の強さがあるしきい値を越えたら初めて発火して次のニューロンに信号を送る仕組みになっています。
WilsonとCowanはこの仕組みをモデル化するためにロジスティック関数を採用しました。
尚、この頃にはロジスティックシグモイド関数と呼ばれていましたが、その本質はS字関数であることから、その後はシグモイド関数と呼ばれることになったようです。
まとめ
このように人間の増殖モデルからロジスティック関数が発明され、それが生物の増殖にも応用されるようになって生物学会で市民権を得ていた時に、脳のモデル化にS字関数がピッタリ当てはまったことで、シグモイド関数は出世階段を駆け上がっていったのでした。