最近の人工知能(AI)はニューラルネットワークを基礎としていて,その勉強をはじめるとネットワークのノードである神経細胞の数式モデルに出会います.この神経細胞はニューロンと呼ばれ,多入力1出力の関数です.入力は細胞に入ってくる刺激の大きさ,出力は刺激の総和に対する反応の大きさぐらいに考えてください.とろこでこの関数に従来使用されていたのがシグモイド関数です.シグモイド関数は神経細胞に例えると,刺激(入力)の小さい間はほとんど出力を出さないのですが,ある値以上の刺激になると刺激の大きさに比例するようの反応が大きくなり,さらにある値以上になると反応の大きさは一定になるS字曲線を描きます(出力の大きさが0から1です).
あれっ,この曲線ってよく見るよねの思われると思います.喩えば,植物の成長(例えば高さ)が初めは少しずつですが次第にどんどん伸びて最後には一定の高さ以上にはならないとか,人間の成長にともなう身長の様子です.そこでシグモイド曲線はどこかでみた曲線,すなわち成長曲線ではないか?とはたと思い至ります.
成長曲線はロジステッック曲線とも呼ばれています.ロジステック曲線は1830年代後半に見つけられた曲線で人口の増加がどれくらいになるかを予測したものです.最初は人口の増加の割合は人口数に比例すると考えられました.現在の人口をN,人口の時間に対する増加の割合をdN/dtとすると,これは
dN/dt = a・N
と微分方程式で書き表すことができます(aは比例定数).この微分方程式を解くと(高校の数学くらいです),
N = A・exp(t) ただしA = a・exp(log N0)= aN0, N0は時刻t = 0の時の人口
ただし,exp(x)はe^x (自然対数のx乗)を表す
となります.これは指数関数となりますから人口は永遠に膨大な数に膨れ上がることになります.そこで環境や疫病等で人口の増加は増えるに従って飽和する考えが導入されました.飽和する人口をKとすると,人口は人口の増加に従って増えるがかつ飽和するに従って減少する方程式に書き改められます.これは人口に比例する式Nと人口が多くなると0に近づくように逆比例する式 (1-N/K) を用いて
dN/dt = a・N(1 - N/K)
のようになります.高校で教わる変数分離と呼ばれる方法でこの微分方程式を解きます.以下はその解き方ですが数式が苦手な場合はスキップしてください.
dN/dt = a・(1/K)・N(K - N)
dN/N(K-N) = a・(1/K) dt
[1/N + 1/(K - N)]dN = adt
logN - log(K - N) = at + C
log (N/(K - N )) = at+C
t=0(時刻0) でN=N0とすると,C = log (N0/K-N0) から
N/(K - N ) = exp (at + C)
= exp (at) e(log (N0/K-N0))
= (N0/K-N0) exp (at)
A = (N0/K-N0)とすれば
N/(K - N ) = A exp (at)
これを分母を払ってNの項をまとめると
(1 + A exp(at) )N = K・A exp(at)
から
N = K・A exp(at)/ (1 + A exp(at) )
が得られます.A = 1,K = 1とすると
N = exp(at)/ (1 + exp(at) )
となります.ここで分母分子をexp(at)で割ると
N = 1/ (1 + exp(-at) )
となります.
ニューロンの活動を示すシグモイド関数は入力の総計をx,出力をyとすると
y = 1/ (1 + exp(-ax) )
ですからロジステッック曲線でtをx,Nをyに置き換えたものと同一であることがわかります.この場合,A=1としましたからN0=K/2になります.
ともかくシグモイド曲線がロジステック曲線の一つであり,どおりで形が似ていることが分かりました.ニューラルネットワークの学習にはこのシグモイド曲線の微分が用いられます.シグモイド曲線がニューロンの数理モデルによく使用された理由の一つが,微分の値を計算しなくてもよいことにあります.実際にシグモイド曲線を微分しますと,少し思いつきのような式の変形をともないますが
dy/dx = a・exp(-ax)/(1+exp(-ax))2
= a・[exp(-ax)/(1+exp(-ax))]・[1/(1+exp(-ax))](2乗を二つに分ける)
= a・[{(1+exp(-ax))-1}/(1+exp(-ax))]・[1/(1+exp(-ax))](前項の分子に1-1=0
を加える)
= a・[(1+exp(-ax))/(1+exp(-ax)) - 1/(1+exp(-ax))]・[1/(1+exp(-ax))]
= a・[1 - 1/(1+exp(ax))] ・[1/(1+exp(-ax))]
= a (1- y)・y
が得られます.これは一度シグモイド関数の値yを計算すれば,微分の式にはその値を代入すればよいだけになり学習時の計算時間を大きく減少させることができました.
あたりまえなのですがy = N/K,x=tとしてこの微分の式に代入すると
dy/dx = d(N/K)/dt
= a (1-N/K)・N/K
となります.これから
dN/dt = (a/K) (1 - N/K)・N
が導けます.a/Kを改めてaとすれば
dN/dt = aN(1 - N/K)
これは冒頭で述べた人口の増加式に一致することになります.
再度シグモイド曲線の微分式(人口の増加式)をじっと眺めていると不思議なことに気がつきます.シグモイドの微分の式を再度書きますと
dy/dx = ay (1- y)
です.ここでY = dy/dx,y = X
と置き換えると
Y = a (1 - X)・X
となります.
この式を眺めていると,どこかでこの形式はみたなとまたまた思い至ります.一つはカオスを作り出すロジステック写像だったと.ロジステック写像はaの値が約3.5以上で4.0未満の時にできる数列です.この数列はある値X0から初めてY0を求め,この値をX1=Y0としてY1を求め,同様の手続きを繰り返していく時にできるY0,Y1,Y2,Y3,... です.この数列は一見規則性がなく全くでたらめなに見えます.実は規則性が隠されているのですが,このでたらめな数列は初期値によって異なる数列になります.このように単純な規則から予想不可能な状態が生じることをカオスと呼んでいます.
更に,眺めているとこれは二項分布の分散の値だったかなとか,二項分布からCADの自由曲線の始まりとなったベジェ曲線の重みの式だとかに進んでいきそうです.これ以上考えていると私の頭がカオスに陥りそうなので,更に深入りするのはいつかにしようと思います.