神経のネット
- こちらから
- ぐるりと一回りする神経細胞のネットワーク
- ぐるりと一回りするのは「サイクル」(こちらもしくはこちら)
- 頂点数n、辺数n
- プログラムするときに、自身の頂点とサイクル上、前の頂点と後の頂点が問題になる
- それを、1:nの数列で表わすと、1番とn番との処理を例外扱いする必要が出る
- その例外扱いがソース上、読みにくいことを気にするのならば、前頂点リストと後頂点リストを作ればよい
n<-30 # ニューロン数 self<-1:n pre<-c(n,1:(n-1)) #ひとつ前のニューロン番号 post<-c(2:n,1) #ひとつ後のニューロン番号
- 参照記事の活動度の計算式"a[i]<- a[i]+(a[i]-x*a[i+1]-x*a[i-1])*y"はi=1,2,...,nのすべてについて
a[i]<-a[i]+(a[i]-x*a[pre[i]]-x*a[post[i]])*y
と書き表わせる
- この式の意味は何だろう
- 自身の活動度a[i]は自身の“今”の活動度に次の値を加える
- 自身の活動度と前後のニューロンの活動度の(-x)倍との和をy倍した量
- これは、参照記事の日本語解説が目指したものなのか、ちょっと判然としない
- 判然としないのは、説明文で定義があいまいだからのように思う
- 以下のような設定なのか・・・不明
- 自身の活動度a[i]は自身の“今”の活動度に次の値を加える
#ニューロンのネットワークを考える #ニューロン数n #ニューロンはサイクルをなす。それは1->2->...->n->1->なる並び方とする #ニューロンは活動度aを持つ #ニューロンは入力信号があると、入力前の活動度aに入力信号の総和を加算した活動度を持つようになる。aは連続値である #ニューロンのaが閾値tを越えたらactiveそうでなければinactiveであるような、2値状態をとり、a<tのときにはa<-0となる #すべてのニューロンは同じ方式で刺激を隣接するニューロンに与える #その刺激は、ニューロンがactiveなときに伝えられ、inactiveなときには伝えられない #その刺激は、そのニューロン自身の活動度と前後ニューロンの活動度の-x倍(xは正)とを合わせた値のy倍であるという #すべてのニューロンには、この環状ネットワークとは別に、それぞれ、入力信号が入りうる。これを刺激入力と呼ぶ #このサイクルは、刺激入力を受け、サイクル上で活動度の増減変化を起こす #fb回の増減変化を経て、ある状態に至ることを確認する #初期入力では、k番目を除くすべてのニューロンに1が、k番目にvkの値が入る場合と考える
- 参照記事のコードのインデントは、ちょっと流儀が違うようだ
- ループや条件で{を開いたら、それと同じインデントレベルで}で閉じる
- ループの中は一段下げる
for(t in 1:fb){ a[1]<- a[1]+(a[1]-x*a[2]-x*a[n])*y for(i in 2:(n-1)){ a[i]<- a[i]+(a[i]-x*a[i+1]-x*a[i-1])*y } a[n]<- a[n]+(a[n]-x*a[1]-x*a[n-1])*y for(k in 1:n){ if(a[k]<=threshold){ a[k]<- 0 } } }