
第3世代のニューラルネットワーク「Spiking Neural Networks」とは?
2021.12.20
ニューラルネットワークとは?
では、スパイキングニューラルネットワークに入る前に基本からいってみましょう。
近年、人工知能の研究が盛んですが、その研究を支えている最もメジャーな技術は『ニューラルネットワーク』です。
ニューラルネットワークとは、生物の脳の神経細胞(ニューロン)をモデル化したものをネットワーク上に接続したものを指します。
現在そのニューラルネットワークを用いた、畳み込みニューラルネットワーク(CNN)、いわゆる『ディープラーニング』が至る分野で使われるようになりました。
しかし、現在使われているニューラルネットワークのほとんどは『形式ニューロンモデル』という、神経細胞をかなり単純化したものを使っています。
こちらの記事もオススメ!
では、スパイキングニューラルネットワークとは?
形式ニューロンモデルにおいて、情報は実数値です。
例えば、画像の画素値であったり、気温であったり、それらのアナログな数値を正規化して使用します。
ニューラルネットワークより、緻密に神経細胞をモデリングしたもの
しかし、実際私たちの脳内で情報として飛び交っているのはスパイク列(電気パルス)と呼ばれる、デジタル信号なのです。
スパイク列 (出典:7.1 Spike train variability )
そこで考案されたのが、、、
スパイキングニューラルネットワーク(SNN: Spiking Neural Networks)です!
スパイキングニューラルネットワークは、通常のニューラルネットワークより、緻密に神経細胞をモデリングしたものになります。
難しい内容になるため、少し具体的に説明していきます。
生物の神経細胞
生物の神経細胞(ニューロン)は、細胞の内外で電位差があり、これを膜電位と言います。
膜電位は通常、静止膜電位と呼ばれる約-60~-70mV程度で安定しているといわれています。
この膜電位は他の神経細胞から入力があると変化し、ある一定の膜電位(しきい値)に達すると、神経細胞はスパイクを出します。
実際のイメージ
また、スパイクを生成したニューロンは不応期と呼ばれる、膜電位が変化しない期間(約3ms)に入ります。
不応期によって、スパイクが極端に密集しないようになっています。
スパイキングニューロンモデル
ここで説明した一連の神経細胞の挙動をモデル化したものを『スパイキングニューロンモデル』と言います。
一度、スパイキングニューラルネットワークで大事なことをまとめてみたいと思います。
(黒文字部分は、通常のニューラルネットワークと同じです。)
- 膜電位があること
- しきい値があること
- 入出力がスパイク列であること
- 不応期があること
- 前ニューロンからの入力は加算されること
- シナプス結合荷重には可塑性があること
スパイキングニューラルネットワーク研究について
それでは、ややこしい数式や実装例をお伝えする前に、スパイキングニューラルネットワークは、現在どのような研究で使われているのか見ていくことにしましょう!
TrueNorth
TrueNorthは、米IBMが開発した、スパイキングニューラルネットワークをハードウェア上に組んだコンピュータチップです。
およそ100万個のニューロン、2億5600万ものシナプスをシミュレーションが可能であるといわれています。
また低電力で動作可能であることも大きな特徴で、1秒間に32×32の画像を2600枚ほど処理できます。
ここまでくると、もはや小さな脳です。
IBMと米空軍が「人間の脳」をヒントにしたAIスパコンを開発へ 「IBM TrueNorth」を使用
https://www.atmarkit.co.jp/ait/articles/1706/27/news072.html
スパイキングニューラルネットワークの現状
生物の脳の構造は、もっと複雑で何十億ものニューロンから構成されています。
ですのでまだまだ到底及びませんが、とても夢のある研究です。
他にも探せば研究は出てきますが、このように複雑なスパイキングニューラルネットワークはハードウェア上での脳のシミュレーション研究が盛んなようです。
また、どちらかというと現在は「脳の働きを解明しよう」という医学(生物学)的研究が盛んなようです。
もちろん工学的な研究も盛んにおこなわれていますが、まだ効率の良い学習法も確立されておらず発展途上なのです。
スパイキングニューロンモデルを実装してみる
では、実際に、簡易的にシミュレーションをしてみましょう!
実装する前に、まずは必要な数式を見ていきます。
今回は、IF(integrate-and-fire)モデルと呼ばれる、シンプルなスパイキングニューロンモデルを使っていきます。
文献によって式の形がやや形が異なりますが、今回は以下の式を用います。
IFニューロンの膜電位V(t)の式
- Iは「前層ニューロンの集合」
- wは「前層ニューロンとのシナプス結合荷重」
- Eは「静止膜電位」
- S(t)は「前層ニューロンのスパイク列」
入力スパイク列を入力電流に変換する式
- *は「畳み込み演算子」
- 積の第2項は「スパイク応答関数」
- τは「時定数」
スパイキングニューロンモデルを実装
それでは、実際にコードを書いてシミュレーションしてみましょう!
今回は、「Python」と「numpy」、「matplotlib」を使用しています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 | import numpy as np import matplotlib.pyplot as plt E = -65 # 静止膜電位 th = -50 # しきい値 act = 20 # 活動電位 ref = 30 # 不応期 rest = 0 # 残り不応期時間 last = 0 # 最後の不応期終了時間 tau = 15 # スパイク応答関数の時定数 ## IF膜電位計算式 def v ( weight, spikes, time ): currents = [] for sp in spikes: currents.append( current( sp, time )) m = np.dot( weight, currents ) + E global rest, last if rest > 0 : # 不応期中は入力を受け付けない rest -= 10 if rest <= 0: last = time return E if m > th : # スパイク!! m = act rest = ref return m ## スパイク応答関数 def kernel( time ): return time * np.exp( -time / tau ) ## 入力電流 def current( spikes, time ): sum = 0 for spike in spikes: if spike > time : break if spike > last : sum += kernel( time - spike ) return sum spike1 = np.array( np.arange( 100, 1000, 300 ) ) spike2 = np.array( np.arange( 50, 1000, 200 ) ) spike3 = np.array( np.arange( 50, 1000, 100 ) ) spike4 = np.array( np.arange( 100, 1000, 150 ) ) spikes = np.array( [spike1, spike2, spike3, spike4] ) weights = np.array([0.7, 1.2, 0.9, 0.8]) memV = [] for t in range(0, 1000) : memV.append( v( weights, spikes, t ) ) plt.plot( memV ) plt.show() |
シミュレーション
今回は以下のように、4つのニューロンが生成したスパイク列が1つのニューロンに入力されることを想定してシミュレーションしてみました。
実行結果は、以下のようになりました。
膜電位が突出している部分がスパイクです。
このように簡易ではありますが、スパイキングニューロンを実装して膜電位が観察できました。
重みの大きさや定数を弄ってみると挙動が異なってくるので、是非色々な条件で動かしてみてください。
接続されるニューロンを増やしたり、重みに負の値を混ぜるのも面白いかと思います。
さいごに
今回は、第3世代のニューラルネットワークと呼ばれる、スパイキングニューラルネットワークを紹介しました。
少しややこしい部分もありましたが、実際にPythonを用いて挙動を確認できたので、スパイキングニューラルネットワークがどのようなものなのか何となくわかっていただけたかと思います。
まだ発展途上な研究ですが、これからの人工知能の研究をより発展させてくれる重要な技術になることでしょう!
こちらの記事もオススメ!
書いた人はこんな人

- 「好きを仕事にするエンジニア集団」の(株)ライトコードです!
ライトコードは、福岡、東京、大阪の3拠点で事業展開するIT企業です。
現在は、国内を代表する大手IT企業を取引先にもち、ITシステムの受託事業が中心。
いずれも直取引で、月間PV数1億を超えるWebサービスのシステム開発・運営、インフラの構築・運用に携わっています。
システム開発依頼・お見積もり大歓迎!
また、現在「WEBエンジニア」「モバイルエンジニア」「営業」「WEBデザイナー」「WEBディレクター」を積極採用中です!
インターンや新卒採用も行っております。
以下よりご応募をお待ちしております!
https://rightcode.co.jp/recruit
ITエンタメ10月 13, 2023Netflixの成功はレコメンドエンジン?
ライトコードの日常8月 30, 2023退職者の最終出社日に密着してみた!
ITエンタメ8月 3, 2023世界初の量産型ポータブルコンピュータを開発したのに倒産!?アダム・オズボーン
ITエンタメ7月 14, 2023【クリス・ワンストラス】GitHubが出来るまでとソフトウェアの未来