(57)【要約】  人工ニューロンネットワークにおけるイベントベース更新が実装され得る。ニューロンの着信結合を更新するために内部イベントが定義され得る。内部イベントは、外部信号によっておよび／またはニューロンによって内部でトリガされ得る。ポストシナプス反応を必要とすることなしにシナプス更新を実施するために、強化信号を使用してニューロンの内部イベントをトリガし得る。所望のターゲットにニューロンの反応を送出するために外部イベントが定義され得る。外部イベントと内部イベントとは、結合更新とポストシナプスターゲットへのスパイク送出とを実現するように構成された合成イベントに組み合わせられ得る。内部イベントの範囲は、それぞれのニューロンを備え得、ネットワークの他のニューロンに拡大しない。逆に、外部イベントの範囲は、たとえば、ポストシナプススパイク送出を介して、ネットワークの他のニューロンに拡大し得る。【特許請求の範囲】
【請求項１】
入力結合と出力結合とを有する人工スパイキングニューロンを動作させるコンピュータ実装方法であって、前記方法が、コンピュータプログラムモジュールを実行するように構成された１つまたは複数のプロセッサによって実施され、前記方法は、
第１のイベントを含む第１のイベントタイプの１つまたは複数のイベントを与えることと、前記第１のイベントが、前記入力結合の可塑性の更新を実現するように構成され、前記入力結合の前記可塑性が、前記入力結合に関連するパラメータを調整することが可能であり、前記調整が時間期間によって特徴づけられる、
第２のイベントを含む第２のイベントタイプの１つまたは複数のイベントを与えることと、前記第２のイベントが、前記出力結合を介して前記ニューロンの反応の送出を実現するように構成された、
を備える、コンピュータ実装方法。
【請求項２】
前記第１のイベントが、前記ニューロンに与えられる外部信号に基づき、
前記パラメータが入力結合荷重を備えた、
請求項１に記載の方法。
【請求項３】
前記入力結合が、前記ニューロンにフィードフォワード刺激を与えるように構成され、
前記ニューロンが、ターゲット結果を生成するように構成された学習プロセスに従って動作可能であり、
前記外部信号が、前記ターゲット結果からの所定の範囲内の前記反応かどうかに基づいて構成された強化信号を備える、
請求項２に記載の方法。
【請求項４】
前記フィードフォワード刺激が、複数のスパイクの個々の間の間隔を備えるスパイク間間隔（ＩＳＩ）によって特徴づけられる前記複数のスパイクを備え、
前記タイ期間が、前記複数のスパイクのうちの連続する個々のスパイクについて決定された前記ＩＳＩを超える、
請求項３に記載の方法。
【請求項５】
前記外部信号が、前記第２のイベントタイプの前記１つまたは複数のイベントとは無関係に前記第１のイベントタイプの前記１つまたは複数のイベントを引き起こすように構成された、請求項２に記載の方法。
【請求項６】
前記第１のイベントタイプの所与のイベントは、前記第１のイベントタイプの前記所与のイベントがトリガされた後に反応なし時間間隔を可能にするために、前記第２のイベントタイプの所与のイベントとは無関係にトリガされるように構成された、請求項２に記載の方法。
【請求項７】
荷重の前記変更が可塑性時間ウィンドウによって特徴づけられ、前記反応なし時間間隔が、前記可塑性時間ウィンドウを超えて構成された、
請求項２に記載の方法。
【請求項８】
前記入力結合が、前記ニューロンにフィードフォワード刺激を与えることが可能であり、
前記外部信号が、前記入力結合とは別個に構成されたインターフェースを介して与えられる、
請求項２に記載の方法。
【請求項９】
前記入力結合の前記可塑性の更新は、前記外部信号が与えられる時間に基づいて構成された、請求項８に記載の方法。
【請求項１０】
前記フィードフォワード刺激が少なくとも１つのスパイクを備え、
前記可塑性の更新が、前記少なくとも１つのスパイクに関連する時間に基づいてさらに構成された、
請求項９に記載の方法。
【請求項１１】
前記可塑性の更新が、前記入力結合を通るデータ送信の確率を調整することを備え、前記調整することが、（ｉ）前記外部信号を前記与えることとニューロン反応時間との間の時間間隔、または（ｉｉ）前記少なくとも１つのスパイク前記反応時間の間の時間間隔の一方または両方に基づき、
前記反応時間は、前記外部信号が与えられる前に発生された前記ニューロンの反応に関連付けられる、
請求項９に記載の方法。
【請求項１２】
前記可塑性の更新が、（ｉ）前記外部信号を前記与えることとニューロン反応時間との間の時間間隔、または（ｉｉ）前記少なくとも１つのスパイク前記反応時間の間の時間間隔の一方または両方に基づいて決定された前記入力結合に関連する有効性を調整することを備え、
前記反応時間は、前記外部信号が与えられる前に発生された前記ニューロンの反応に関連付けられる、
請求項９に記載の方法。
【請求項１３】
前記可塑性の更新が、（ａ）通信遅延と、ｂ）前記入力結合に関連する荷重とのいずれかを調整することを備え、前記調整することが、（ｉ）前記外部信号を前記与えることとニューロン反応時間との間の時間間隔、または（ｉｉ）前記少なくとも１つのスパイク前記反応時間の間の時間間隔の一方または両方に基づいて決定される、
前記反応時間は、前記外部信号が与えられる前に発生された前記ニューロンの反応に関連付けられる、
請求項９に記載の方法。
【請求項１４】
前記ニューロンが、状態によって特徴づけられるニューロンプロセスに従って動作するように構成され、前記状態が、それに関連付けられた反応発生しきい値を有し、前記反応発生しきい値が、前記反応を発生する前記ニューロンに関連付けられ、
前記反応が、前記ニューロンへの前記入力結合を介して前記ニューロンに与えられる１つまたは複数の入力スパイクに基づき、
前記反応が、前記反応発生しきい値を突破する前記状態によって特徴づけられる、
請求項１に記載の方法。
【請求項１５】
前記ニューロンに関連するメモリロケーションに前記状態の現在値を記憶すること
をさらに備え、
前記第１のイベントタイプの前記１つまたは複数のイベントが、前記入力結合に前記メモリロケーションへの読取り専用アクセスを与えるように構成された、
請求項１４に記載の方法。
【請求項１６】
前記第１のイベントが、（ｉ）タイマー満了、（ｉｉ）バッファオーバーフロー信号、または（ｉｉｉ）前記ニューロンプロセスに関連するトリガのうちの１つまたは複数に基づいて構成され、
前記バッファが、前記１つまたは複数の入力スパイクの時間履歴を記憶するように構成された、
請求項１４に記載の方法。
【請求項１７】
前記第１のイベントタイプの前記１つまたは複数のイベントが、前記入力結合に前記１つまたは複数の入力スパイクの前記時間履歴への読取り専用アクセスを与えるように構成された、請求項１４に記載の方法。
【請求項１８】
前記第１のイベントタイプの前記１つまたは複数のイベントが、前記入力結合に前記ニューロンの前記反応のうちの１つまたは複数の時間履歴への読取り専用アクセスを与えるようにさらに構成された、請求項１７に記載の方法。
【請求項１９】
前記第１のイベントタイプに関連する供与は、前記可塑性の更新が、前記反応を引き起こすことおよび／または前記反応に関連付けられることなしに実現されることが可能であるように、前記第２のイベントタイプとは無関係に構成された、請求項１に記載の方法。
【請求項２０】
第３のイベントを含む第３のイベントタイプの１つまたは複数のイベントを与えることをさらに備え、前記第３のイベントがプレシナプスイベントに関連付けられ、前記プレシナプスイベントが、前記入力結合の前記可塑性の更新を引き起こすことが可能である、請求項１に記載の方法。
【請求項２１】
前記第１のイベントと前記第２のイベントとが、互いに同時に与えられるように構成された、請求項１に記載の方法。
【請求項２２】
前記第２のイベントが、前記出力結合の可塑性の更新を引き起こすことが可能である、請求項１に記載の方法。
【請求項２３】
人工スパイキングニューロンネットワークのための強化学習のコンピュータ実装方法であって、前記方法が、コンピュータプログラムモジュールを実行するように構成された１つまたは複数のプロセッサによって実施され、前記方法は、
強化学習プロセスに従って前記ニューロンを動作させることと、前記強化学習プロセスが、入力信号と強化信号とに基づいて出力を発生するように構成された、
前記強化信号に基づいて、第１のイベントタイプの第１のイベントを選択的にトリガすることと、前記第１のイベントが、前記ニューロンの結合の可塑性の更新を引き起こすように構成され、ここにおいて、
前記選択的にトリガすることが、前記出力の前記発生とは無関係な前記可塑性の更新の適用を可能にするように構成され、
前記入力信号が、前記ニューロンの外部の環境に関する情報を搬送する、
を備える、コンピュータ実装方法。
【請求項２４】
前記結合が、前記ニューロンに前記入力を与えるように構成され、
前記強化学習プロセスが、ターゲット結果を達成するように構成され、
前記強化信号が、前記所望の結果と前記出力との間の不一致を特徴づける測定に基づく、
請求項２３に記載の方法。
【請求項２５】
前記強化信号は、前記不一致が所定の値の外部にあることに基づいて決定された負の報酬を備える、請求項２４に記載の方法。
【請求項２６】
ネットワークにおいてイベントベース更新を実装するように構成されたコンピュータ化スパイキングニューロンネットワークシステムであって、前記システムが、
コンピュータプログラムモジュールを実行するように構成された１つまたは複数のプロセッサを備え、前記コンピュータプログラムモジュールの前記実行が、前記１つまたは複数のプロセッサに、第１のイベントに基づいて、前記ネットワークの第１のスパイキングニューロンと第２のスパイキングニューロンとにそれぞれ関連する第１のインターフェースと第２のインターフェースとを更新させ、
ここにおいて、前記第１のイベントが、前記イベントに反応して前記第１のスパイキングニューロンと前記第２のスパイキングニューロンとによってそれぞれ発生される第１の出力と第２の出力との不在によって特徴づけられる、
コンピュータ化スパイキングニューロンネットワークシステム。
【請求項２７】
前記コンピュータプログラムモジュールの前記実行が、前記１つまたは複数のプロセッサに、前記第１のスパイキングニューロンと前記第２のスパイキングニューロンとにそれぞれ関連する前記第１の出力のインターフェースまたは前記第２の出力のインターフェースの一方または両方を介して、前記第１の出力または前記第２の出力の一方または両方の送出を引き起こすように構成された第２のイベントを発生させる、請求項２６に記載のシステム。
【請求項２８】
前記コンピュータプログラムモジュールの前記実行が、前記１つまたは複数のプロセッサに、前記第１のスパイキングニューロンまたは前記第２のスパイキングニューロンの一方または両方のユーザ定義更新を実行するように構成されたカスタムイベントを発生させる、請求項２６に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
関連出願の相互参照
[0001]本出願は、２０１１年９月２１日に出願された「ELEMENTARY NETWORK DESCRIPTION FOR NEUROMORPHIC SYSTEMS」と題する米国特許出願第１３／２３９，１２３号［代理人整理番号０２１６７２−０３９９２２９］、２０１１年９月２１日に出願された「ELEMENTARY NETWORK DESCRIPTION FOR EFFICIENT LINK BETWEEN NEURONAL MODELS AND NEUROMORPHIC SYSTEMS」と題する米国特許出願第１３／２３９，１４８号［代理人整理番号０２１６７２−０３９９２３０］、２０１１年９月２１日に出願された「ELEMENTARY NETWORK DESCRIPTION FOR EFFICIENT MEMORY MANAGEMENT IN NEUROMORPHIC SYSTEMS」と題する米国特許出願第１３／２３９，１５５号［代理人整理番号０２１６７２−０３９９２３２］、２０１１年９月２１日に出願された「ELEMENTARY NETWORK DESCRIPTION FOR EFFICIENT IMPLEMENTATION OF EVENT-TRIGGERED PLASTICITY RULES IN NEUROMORPHIC SYSTEMS」と題する米国特許出願第１３／２３９，１６３号［代理人整理番号０２１６７２−０３９９２３３］、２０１１年９月２１日に出願された「APPARATUS AND METHOD FOR PARTIAL EVALUATION OF SYNAPTIC UPDATES BASED ON SYSTEM EVENTS」と題する米国特許出願第１３／２３９，２５９号、および２０１１年９月２１日に出願された「APPARATUS AND METHODS FOR SYNAPTIC UPDATE IN A PULSE-CODED NETWORK」と題する米国特許出願第１３／２３９，２５５号、２０１２年７月２７日に出願された「APPARATUS AND METHODS FOR GENERALIZED STATE-DEPENDENT LEARNING IN SPIKING NEURON NETWORKS」と題する米国特許出願第１３／５６０，９０２号［代理人整理番号０２１６７２−０４１００４４、顧客参照番号ＢＣ２０１２１２Ａ］、および２０１２年７月２７日に出願された「APPARATUS AND METHODS FOR EFFICIENT UPDATES IN SPIKING NEURON NETWORKS」と題する米国特許出願第１３／５６０，８９１号［代理人整理番号０２１６７２−０４０９３６、顧客参照番号ＢＣ２０１２２１Ａ］に関し、上記の各々は、同時係属であり、同一出願人によって所有され、その全体が参照により本明細書に組み込まれる。
【０００２】
著作権
[0002]本特許文献の開示の一部分は、著作権保護を受ける資料を含んでいる。著作権所有者は、米国特許商標局特許ファイルまたは記録中に現れるような、特許文献または特許開示のいずれかによる複製には異議はないが、それ以外は、いかなるすべての著作権をも所有する。
【０００３】
[0003]本開示は、視覚認知、モーター制御（motor control）、および／または他のニューラル計算など、ニューラル計算を実施するニューロンネットワークをシミュレートするための並列分散型コンピュータシステムに関する。
【背景技術】
【０００４】
[0004]ほとんどのニューロンモデルおよびシステムは、ニューロンと呼ばれる単純なユニットのネットワークからなり、それらは、互いにおよび外界とシナプスと呼ばれる結合（connection）を介して相互作用する。そのようなニューロンシステム中の情報処理は並列に行われ得る。
【０００５】
[0005]ニューロンモデルのシミュレーションおよび並列実行のために最適化されうる、いくつかの既存の並列ハードウェアアーキテクチャと対応する言語とは、イベント駆動型（event-driven）ネットワーク更新を利用し得る。ニューラルネットワークにおいて学習を実装するとき、ネットワークのいくつかの態様を選択的に変更し得る（たとえば、シナプス荷重（synaptic weight）を変化させ得る）イベントを利用しながら、ネットワークの他の態様が影響を受けないように保持する（たとえば、ニューロン出力を発生せずにこれらの荷重を変更する）ことが可能であることが望ましいことがある。
【０００６】
[0006]しかしながら、既存の実装形態は、ネットワークのニューロンのために結合荷重適応とポストシナプス（post-synaptic）反応発生とを組み合わせるイベントを利用する。
【０００７】
[0007]したがって、ネットワークにおいてポストシナプス反応発生からネットワーク全体の結合適応を分離し、それによって、スパイキングニューロンネットワークにおける学習アルゴリズムのよりフレキシブルな実装形態を可能にし得る、追加の機構の顕著なニーズがある。
【発明の概要】
【０００８】
[0008]本技術は、とりわけ、フレキシブルなイベントベース更新を実装するための装置および方法を提供することによって、上記のニーズを満たす。
【０００９】
[0009]本開示の一態様は、入力結合と出力結合とを有する人工スパイキングニューロンを動作させる方法に関する。本方法は、第１のイベントを含む第１のイベントタイプの１つまたは複数のイベントを与えることを備え得る。第１のイベントは、入力結合の可塑性（plasticity）の更新を実現するように構成され得る。入力結合の可塑性は、入力結合に関連するパラメータを調整するように構成され得る。調整は時間期間によって特徴づけられ得る。本方法は、第２のイベントを含む第２のイベントタイプの１つまたは複数のイベントを与えることを備え得る。第２のイベントは、出力結合を介してニューロンの反応の送出を実現するように構成され得る。
【００１０】
[0010]いくつかの実装形態では、第１のイベントは、ニューロンに与えられる外部信号に基づき得る。パラメータは入力結合荷重を備え得る。
【００１１】
[0011]いくつかの実装形態では、入力結合は、ニューロンにフィードフォワード刺激（feed-forward stimulus）を与えるように構成され得る。ニューロンは、ターゲット結果を生成するように構成された学習プロセスに従って動作可能であり得る。外部信号は、ターゲット結果からの所定の範囲内の反応かどうかに基づいて構成された強化信号（reinforcement signal）を備え得る。
【００１２】
[0012]いくつかの実装形態では、フィードフォワード刺激は、複数のスパイクの個々の間の間隔を備えるスパイク間間隔（ＩＳＩ：inter spike interval）によって特徴づけられる複数のスパイクを備え得る。タイ期間（tie period）は、複数のスパイクの連続する個々のスパイクについて決定されるＩＳＩを超え得る。
【００１３】
[0013]いくつかの実装形態では、外部信号は、第２のイベントタイプの１つまたは複数のイベントとは無関係に第１のイベントタイプの１つまたは複数のイベントを引き起こすように構成され得る。
【００１４】
[0014]いくつかの実装形態では、第１のイベントタイプの所与のイベントは、第１のイベントタイプの所与のイベントがトリガされた後の反応なし時間間隔を可能にするために、第２のイベントタイプの所与のイベントとは無関係にトリガされるように構成され得る。
【００１５】
[0015]いくつかの実装形態では、荷重の変更は可塑性時間ウィンドウによって特徴づけられ得る。反応なし時間間隔は、可塑性時間ウィンドウを超えて構成され得る。
【００１６】
[0016]いくつかの実装形態では、入力結合は、ニューロンにフィードフォワード刺激を与えることが可能であり得る。外部信号は、入力結合とは別個に構成されたインターフェースを介して与えられ得る。
【００１７】
[0017]いくつかの実装形態では、入力結合の可塑性の更新は、外部信号が与えられる時間に基づいて構成され得る。
【００１８】
[0018]いくつかの実装形態では、フィードフォワード刺激は少なくとも１つのスパイクを備え得る。可塑性の更新は、少なくとも１つのスパイクに関連する時間に基づいてさらに構成され得る。
【００１９】
[0019]いくつかの実装形態では、可塑性の更新は、入力結合を通るデータ送信の確率を調整することを備え得る。調整することは、（ｉ）外部信号を与えることとニューロン反応時間との間の時間間隔、または（ｉｉ）少なくとも１つのスパイク反応時間の間の時間間隔、の一方または両方に基づき得る。反応時間は、外部信号が与えられる前に発生されたニューロンの反応に関連付けられ得る。
【００２０】
[0020]いくつかの実装形態では、可塑性の更新は、（ｉ）外部信号を与えることとニューロン反応時間との間の時間間隔、または（ｉｉ）少なくとも１つのスパイク反応時間の間の時間間隔、の一方または両方に基づいて決定された入力結合に関連する有効性を調整することを備え得る。反応時間は、外部信号が与えられる前に発生されたニューロンの反応に関連付けられ得る。
【００２１】
[0021]いくつかの実装形態では、可塑性の更新は、（ａ）通信遅延またはｂ）入力結合に関連する荷重、の一方または両方を調整することを備え得る。調整することは、（ｉ）外部信号を与えることとニューロン反応時間との間の時間間隔、または（ｉｉ）少なくとも１つのスパイク反応時間の間の時間間隔、の一方または両方に基づいて決定され得る。反応時間は、外部信号が与えられる前に発生されたニューロンの反応に関連付けられ得る。
【００２２】
[0022]いくつかの実装形態では、ニューロンは、状態によって特徴づけられるニューロンプロセスに従って動作するように構成され得る。状態は、それに関連付けられた反応発生しきい値を有し得る。反応発生しきい値は、反応を発生するニューロンに関連付けられ得る。反応は、ニューロンへの入力結合を介してニューロンに与えられる１つまたは複数の入力スパイクに基づき得る。反応は、反応発生しきい値を突破する状態によって特徴づけられ得る。
【００２３】
[0023]いくつかの実装形態では、本方法は、ニューロンに関連するメモリロケーションに状態の現在値を記憶することを備え得る。第１のイベントタイプの１つまたは複数のイベントは、入力結合にメモリロケーションへの読取り専用アクセスを与えるように構成され得る。[0024]いくつかの実装形態では、第１のイベントは、（ｉ）タイマー満了、（ｉｉ）バッファオーバーフロー信号、または（ｉｉｉ）ニューロンプロセスに関連するトリガ、のうちの１つまたは複数に基づいて構成され得る。バッファは、１つまたは複数の入力スパイクの時間履歴を記憶するように構成され得る。
【００２４】
[0025]いくつかの実装形態では、第１のイベントタイプの１つまたは複数のイベントは、入力結合に１つまたは複数の入力スパイクの時間履歴への読取り専用アクセスを与えるように構成され得る。
【００２５】
[0026]いくつかの実装形態では、第１のイベントタイプの１つまたは複数のイベントは、入力結合にニューロンの反応のうちの１つまたは複数の時間履歴への読取り専用アクセスを与えるようにさらに構成され得る。
【００２６】
[0027]いくつかの実装形態では、第１のイベントタイプに関連する供与は、可塑性の更新が、反応を引き起こすことおよび／または反応に関連付けられることなしに実現されることが可能であるように、第２のイベントタイプとは無関係に構成され得る。
【００２７】
[0028]いくつかの実装形態では、本方法は、第３のイベントを含む第３のイベントタイプの１つまたは複数のイベントを与えることをさらに備え得る。第３のイベントはプレシナプス（pre-synaptic）イベントに関連付けられ得る。プレシナプスイベントは、入力結合の可塑性の更新を引き起こすことが可能であり得る。
【００２８】
[0029]いくつかの実装形態では、第１のイベントと第２のイベントとは、互いに同時に与えられるように構成され得る。
【００２９】
[0030]いくつかの実装形態では、第２のイベントは、出力結合の可塑性の更新を引き起こすことが可能であり得る。
【００３０】
[0031]本開示の別の態様は、人工スパイキングニューロンネットワークのための強化学習の方法に関する。本方法は、強化学習プロセスに従ってニューロンを動作させることを備え得る。強化学習プロセスは、入力信号と強化信号とに基づいて出力を発生するように構成され得る。本方法は、強化信号に基づいて、第１のイベントタイプの第１のイベントを選択的にトリガすることを備え得る。第１のイベントは、ニューロンの結合の可塑性の更新を引き起こすように構成され得る。選択的にトリガすることは、出力の発生とは無関係の可塑性の更新の適用を可能にするように構成され得る。入力信号は、ニューロンの外部の環境に関する情報を搬送し得る。
【００３１】
[0032]いくつかの実装形態では、結合は、ニューロンに入力を与えるように構成され得る。強化学習プロセスは、ターゲット結果を達成するように構成され得る。強化信号は、所望の結果と出力との間の不一致を特徴づける測定に基づき得る。
【００３２】
[0033]いくつかの実装形態では、強化信号は、所定の値の外にあるという不一致に基づいて決定された負の報酬を備え得る。
【００３３】
[0034]本開示のまた別の態様は、ネットワークにおいてイベントベース更新を実装するように構成されたコンピュータ化スパイキングニューロンネットワークシステムに関する。本システムは、コンピュータプログラムモジュールを実行するように構成された１つまたは複数のプロセッサを備え得る。コンピュータプログラムモジュールの実行は、１つまたは複数のプロセッサに、第１のイベントに基づいて、ネットワークの第１のスパイキングニューロンと第２のスパイキングニューロンとにそれぞれ関連する第１のインターフェースと第２のインターフェースとを更新させ得る。第１のイベントは、イベントに反応して第１のスパイキングニューロンと第２のスパイキングニューロンとによってそれぞれ発生される第１の出力と第２の出力とがないことによって特徴づけられる。
【００３４】
[0035]いくつかの実装形態では、コンピュータプログラムモジュールの実行は、１つまたは複数のプロセッサに、第１のスパイキングニューロンと第２のスパイキングニューロンとにそれぞれ関連する第１の出力インターフェースまたは第２の出力インターフェースの一方または両方を介して、第１の出力または第２の出力の一方または両方の送出を引き起こすように構成された第２のイベントを発生させ得る。
【００３５】
[0036]いくつかの実装形態では、コンピュータプログラムモジュールの実行は、１つまたは複数のプロセッサに、第１のスパイキングニューロンまたは第２のスパイキングニューロンの一方または両方のユーザ定義更新を実行するように構成されたカスタムイベントを発生させ得る。
【００３６】
[0037]本技術のこれらおよび他の目的、特徴、および特性、ならびに構造の関係する要素の動作方法および機能、および部分の組合せ、および製造の経済性は、本明細書の一部をそれらのすべてが形成する、添付の図面を参照しながら以下の説明および添付の特許請求の範囲を考慮するとより明らかになり、ここにおいて、同じ参照番号は、様々な図において対応する部分を指定する。ただし、図面は、例示および説明のためのものにすぎず、本技術の限界を定めるものではないことを明確に理解されたい。本明細書および特許請求の範囲において使用する「ａ」、「ａｎ」、および「ｔｈｅ」の単数形は、文脈が別段に明確に規定しない限り、複数の指示対象を含む。
【図面の簡単な説明】
【００３７】
【図１】[0038]一実装形態によるニューラルシミュレータを示すブロック図。
【図２】[0039]一実装形態による、モデル開発ワークフローを示すブロック図。
【図３】[0040]本開示によるＥＮＩ通信チャネルを備えるＥＮＤシミュレーションの一実装形態を示すブロック図。
【図４】[0041]一実装形態によるＥＮＩ通信チャネルを示すブロック図。
【図５】[0042]一実装形態による、ＥＮＩにおけるコンテンツ、フォーマットおよび予想される挙動を詳述するブロック図。
【図６】[0043]一実装形態によるＥＮＩ（方式）の動作モードを示す図式図。
【図７Ａ】[0044]一実装形態による、ＥＮＩチャネルを介した完全同期通信を示すブロック図。
【図７Ｂ】[0045]一実装形態による、シフト（両方向にＳ＝１）を伴う図７Ａの実装形態の同期通信を示すブロック図。
【図８】[0046]一実装形態による、遅延とともに接合（junction）およびシナプスをもつ例示的な通信モデルを示すブロック図。
【図９】[0047]一実装形態による、ＥＮＩチャネルを備える通信モデルを示すブロック図。
【図１０】[0048]一実装形態による、ＥＮＤエンジンの様々な例示的な通信モデルを示すブロック図。
【図１１Ａ】[0049]１つまたは複数の実装形態による、スパイキングネットワークにおいてイベント駆動型更新機構をもつ有用なコンピュータ化システムを示すブロック図。
【図１１Ｂ】[0050]１つまたは複数の実装形態による、スパイキングネットワークにおいてイベント駆動型更新メカニズムをもつ有用な神経形態学的コンピュータ化システムを示すブロック図。
【図１１Ｃ】[0051]１つまたは複数の実装形態による、スパイキングネットワークにおいてイベント駆動型更新メカニズムをもつ有用な階層神経形態学的コンピュータ化システムアーキテクチャを示すブロック図。
【図１１Ｄ】[0052]１つまたは複数の実装形態による、スパイキングネットワークにおいてイベント駆動型更新メカニズムをもつ有用なセルタイプ神経形態学的コンピュータ化システムアーキテクチャを示すブロック図。
【図１２】[0053]一実装形態による、スパイクタイミング依存可塑性（ＳＴＤＰ：Ｓｐｉｋｅ−Ｔｉｍｉｎｇ  Ｄｅｐｅｎｄｅｎｔ  Ｐｌａｓｔｉｃｉｔｙ）を実装するダブレット（ｄｏｕｂｌｅｔ）イベントルールを示すブロック図。
【図１３】[0054]一実装形態による、通信パラメータの可能な値をリストするテーブル。
【図１４】[0055]１つまたは複数の実装形態による、イベント駆動型更新とともに使用するスパイキングニューラルネットワークを示すブロック図。
【図１５Ａ】[0056]１つまたは複数の実装形態による、外部でトリガされた樹状突起（dendritic）イベントによるネットワーク更新を示すプログラムリスティング。
【図１５Ｂ】[0057]１つまたは複数の実装形態による、内部でトリガされた樹状突起イベントによるネットワーク更新を示すプログラムリスティング。
【図１５Ｃ】[0058]１つまたは複数の実装形態による、軸索（ａｘｏｎｉｃ）イベントと樹状突起イベントとによるネットワーク更新を示すプログラムリスティング。
【図１５Ｄ】[0059]１つまたは複数の実装形態による、外部でトリガされたカスタムイベントによるネットワーク更新を示すプログラムリスティング。
【図１５Ｅ】[0060]１つまたは複数の実装形態による、内部でトリガされたカスタムイベントを使用するネットワーク更新を示すプログラムリスティング。
【図１５Ｆ】[0061]１つまたは複数の実装形態による、複数のトリガ条件を備えるカスタムイベントを使用するネットワーク更新を示すプログラムリスティング。
【図１５Ｇ】[0062]一実装形態による、スパイク送出をトリガすることなしに構成された樹状突起イベントを備えるネットワーク更新を示すプログラムリスティング。
【図１５Ｈ】[0063]一実装形態による、シナプスルールを実行するように構成された、カスタムイベントを使用するネットワーク更新を示すプログラムリスティング。
【図１６Ａ】[0064]１つまたは複数の実装形態による、図１４のネットワーク結合とともに使用するための、効率的な更新方法を示す論理フロー図。
【図１６Ｂ】[0065]１つまたは複数の実装形態による、図１４のニューラルネットワークとともに使用するための、時間不変（ｔｉｍｅ  ｉｎｖａｒｉａｎｔ）結合ダイナミクスを備える、効率的な更新方法を示す論理フロー図。
【図１６Ｃ】[0066]１つまたは複数の実装形態による、図１４のニューラルネットワークとともに使用するための、シナプス荷重の効率的な更新を示す論理フロー図。
【図１７】[0067]１つまたは複数の実装形態による、スパイキングネットワークにおいてイベント駆動型更新メカニズムを実装するように構成された感覚処理装置を示すブロック図。
【図１８】[0068]一実装形態によるダブレットイベントルールの論理フローを示すブロック図。
【図１９】[0069]１つまたは複数の実装形態によるＥＮＤイベントフレームワーク拡張を示すブロック図。
【発明を実施するための形態】
【００３８】
[0070]本明細書で開示するすべての図は、（ｃ）著作権２０１３ブレイン社（Ｂｒａｉｎ  Ｃｏｒｐｏｒａｔｉｏｎ）である。著作権所有。
【００３９】
[0071]次に、当業者が本技術を実施することを可能にするために例示的な例として与えられている図面を参照しながら、本技術の実装形態について詳細に説明する。特に、以下の図および例は、本技術の範囲を単一の実装形態に限定するためのものではなく、説明または図示する要素の一部または全部の交換またはそれとの組合せによって他の実装形態が可能である。好都合な場合はいつでも、同じまたは同様の部分を指すために図面全体にわたって同じ参照番号を使用する。
【００４０】
[0072]これらの実装形態のいくつかの要素が、知られている構成要素を使用して部分的または完全に実装され得る場合、本技術の理解のために必要であるそのような知られている構成要素の部分のみについて説明し、そのような知られている構成要素の他の部分についての詳細な説明は、本技術を不明瞭にしないために省略する。
【００４１】
[0073]本明細書では、単一の構成要素を示す実装形態は限定的であると見なされるべきではなく、むしろ、本技術は、本明細書に別段に明記されていない限り、複数の同じ構成要素を含む他の実装形態を包含するものであり、その逆も同様である。
【００４２】
[0074]さらに、本技術は、本明細書において例として言及される構成要素に対する現在および将来の知られている等価物を包含する。
【００４３】
[0075]本明細書で使用する「コンピュータ」、「コンピューティングデバイス」、および「コンピュータ化デバイス」という用語は、パーソナルコンピュータ（ＰＣ）および／またはミニコンピュータ（たとえば、デスクトップ、ラップトップ、および／または他のＰＣ）、メインフレームコンピュータ、ワークステーション、サーバ、携帯情報端末（ＰＤＡ）、ハンドヘルドコンピュータ、組込みコンピュータ、プログラマブル論理デバイス、パーソナルコミュニケータ、タブレットコンピュータ、ポータブルナビゲーションエイド、Ｊ２ＭＥ搭載デバイス、セルラー電話、スマートフォン、パーソナル統合通信もしくはエンターテインメントデバイス、および／または、命令のセットを実行し、入来データ信号を処理することが可能な任意の他のデバイスのうちの１つまたは複数を含み得る。
【００４４】
[0076]本明細書で使用する「コンピュータプログラム」または「ソフトウェア」という用語は、機能を実施する人間および／または機械認識可能なステップの任意のシーケンスを含み得る。そのようなプログラムは、Ｃ／Ｃ＋＋、Ｃ＃、Ｆｏｒｔｒａｎ、ＣＯＢＯＬ、ＭＡＴＬＡＢ（登録商標）、ＰＡＳＣＡＬ、Ｐｙｔｈｏｎ、アセンブリ言語、マークアップ言語（たとえば、ＨＴＭＬ、ＳＧＭＬ、ＸＭＬ、ＶｏＸＭＬ）など、ならびに共通オブジェクトリクエストブローカーアーキテクチャ（ＣＯＲＢＡ）、（Ｊ２ＭＥ、Ｊａｖａ（登録商標）  Ｂｅａｎｓを含む）Ｊａｖａ（登録商標）、バイナリランタイム環境（たとえば、ＢＲＥＷ）などのオブジェクト指向環境、および／または他のプログラミング言語および／または環境のうちの１つまたは複数を含む、ほぼどんなプログラミング言語または環境においてもレンダリングされ得る。
【００４５】
[0077]本明細書で使用する「結合」、「リンク」、「送信チャネル」、「遅延線」、「ワイヤレス」という用語は、エンティティ間の情報交換を可能にする、（物理的であるか論理的／仮想的であるかにかかわらず）任意の２つ以上のエンティティ間の因果的リンクを含み得る。
【００４６】
[0078]本明細書で使用する「メモリ」という用語は、デジタルデータを記憶するために適応された、任意のタイプの集積回路または他の記憶デバイスを含み得る。非限定的な例として、メモリは、ＲＯＭ、ＰＲＯＭ、ＥＥＰＲＯＭ（登録商標）、ＤＲＡＭ、ＳＤＲＡＭ、ＤＤＲ／２  ＳＤＲＡＭ、ＥＤＯ／ＦＰＭ、ＲＬＤＲＡＭ、ＳＲＡＭ、「フラッシュ」メモリ（たとえば、ＮＡＮＤ／ＮＯＲ）、ＭＥＭＲＩＳＴＯＲメモリ、ＰＳＲＡＭ、および／または他のタイプのメモリのうちの１つまたは複数を含み得る。
【００４７】
[0079]本明細書で使用する「マイクロプロセッサ」および「デジタルプロセッサ」という用語は、概して、すべてのタイプのデジタル処理デバイスを含むように意図され得る。デジタル処理デバイスの例としては、デジタル信号プロセッサ（ＤＳＰ）、縮小命令セットコンピュータ（ＲＩＳＣ）、汎用（ＣＩＳＣ）プロセッサ、マイクロプロセッサ、ゲートアレイ（たとえば、ＦＰＧＡ）、ＰＬＤ、再構成可能コンピュータファブリック（ＲＣＦ）、アレイプロセッサ、セキュアマイクロプロセッサ、特定用途向け集積回路（ＡＳＩＣ）、および／または他のデジタル処理デバイスのうちの１つまたは複数があり得る。そのようなデジタルプロセッサは単一のユニタリーＩＣダイ上に含まれているか、または複数の構成要素にわたって分散され得る。
【００４８】
[0080]本明細書で使用する「イベント」、「活動電位」、「パルス」、「スパイク」、「スパイクのバースト」、および「パルス列」という用語は、概して、限定はしないが、任意のタイプのパルス信号、たとえば、信号の何らかの特性の急速な変化、たとえば、振幅、強度、位相、または周波数が、ベースライン値からより高い値またはより低い値に変化し、続いてベースライン値に急速に復帰することを指すように意図され得、単一のスパイク、スパイクのバースト、電子パルス、電位のパルス、電流のパルス、パルスおよび／またはパルスのバーストのソフトウェア表現、パルスのレイテンシまたはタイミングのソフトウェア表現、ならびに、パルス送信システムまたはメカニズムに関連する任意の他のパルスまたはパルスタイプのいずれかを指し得る。本明細書で使用する「スプネット（ｓｐｎｅｔ）」という用語はスパイキングネットワークを含み得る。
【００４９】
[0081]システム、装置および方法を含む、本技術のいくつかの実装形態の詳細な説明が本明細書で開示される。本技術のいくつかの態様は、大規模ニューロンシステムを効率的にシミュレートすることができる、ソフトウェアおよびハードウェアで実装された並列シミュレーションエンジンアーキテクチャのコンテキストにおいて最もよく理解され得るが、本技術の実装形態は、ハードウェアとは無関係な様式でのニューロンシステムの効率的な表現のために最適化された命令セット、すなわち、基本ネットワーク記述（ＥＮＤ：Ｅｌｅｍｅｎｔａｒｙ  Ｎｅｔｗｏｒｋ  Ｄｅｓｃｒｉｐｔｉｏｎ）フォーマットを実装するために使用され得る。
【００５０】
[0082]たとえば、いくつかの実装形態は、神経形態学的コンピュータシステムのハードウェアおよび／またはソフトウェア実装形態で展開され得る。そのような一実装形態では、画像処理システムは、プロスセティック（ｐｒｏｓｔｈｅｔｉｃ）デバイスなどの埋込み適用例における使用のために適応または構成され得る、特定用途向け集積回路（「ＡＳＩＣ」）で実施されたプロセッサを含み得る。
【００５１】
[0083]本開示は、特に、イベントベース更新を実装することによってスパイキングニューロンネットワークによる学習を可能にするためのコンピュータ化装置および方法を提供する。１つまたは複数の実装形態では、ネットワークは、神経形態学的システムのための基本ネットワーク記述（ＥＮＤ）を使用して構成され得る。いくつかの実装形態では、ＥＮＤ記述は、イベントベース機能を実現するように構成された複数のイベントタイプを備え得る。
【００５２】
[0084]いくつかの実装形態では、たとえば、入力結合を変更するために（たとえば、結合のプレシナプスアクティビティに基づいてニューロンのプレシナプス可塑性ルールを使用してシナプス荷重を調整するために）、プレシナプスイベントが定義され得る。１つまたは複数の実装形態では、プレシナプスイベントは、結合を介して送出されるプレシナプス入力（たとえば、プレシナプススパイク）に基づいて構成され得る。
【００５３】
[0085]いくつかの実装形態では、たとえば、ニューロンの入力結合を変更するために、樹状突起（または内部）イベントが定義され得る。内部イベントは、外部信号によっておよび／またはニューロンによって内部でトリガされ得る。１つまたは複数の実装形態では、樹状突起イベントは、タイマー、ニューロンスパイキング履歴（プレシナプスおよび／またはポストシナプス）を記憶し得るバッファに関連するオーバーフローインジケータによってトリガされるか、ニューロンによって内部で生成されるか、あるいは、たとえば、強化結合を介して、外部でニューロンに与えられ得る。１つまたは複数の実装形態では、樹状突起イベントは、ニューロンによるポストシナプス反応を引き起こすのではなく、結合可塑性適応を引き起こすように構成され得る。
【００５４】
[0086]いくつかの実装形態では、たとえば、適切な宛先へのニューロンのポストシナプス反応の分配を引き起こすために、軸索（または送出）イベントが定義され得る。１つまたは複数の実装形態では、軸索イベントはニューロンスパイク反応プロセス（たとえば、超しきい値条件）によってトリガされ得る。いくつかの実装形態では、樹状突起イベントおよび軸索イベントは、単一の複合イベントとして互いに連続的に実装され得る
[0087]いくつかの実装形態では、内部イベントの範囲は、それぞれのニューロンを備え得、ネットワークの他のニューロンに拡大しない。逆に、外部イベントの範囲は、たとえば、ポストシナプススパイク送出を介して、ネットワークの他のニューロンに拡大し得る。
【００５５】
[0088]いくつかの実装形態では、たとえば、ＥＮＤのカスタムイベントルールを実装するために、カスタムイベントが定義され得る。
【００５６】
[0089]いくつかの実装形態では、２つ以上のカスタムイベントが定義され得る。１つまたは複数の実装形態では、これらの２つ以上のカスタムイベントは特定の名前（たとえば、イベントタグ）を備え得る。いくつかの実装形態では、結合（たとえば、シナプス）は、カスタムイベントを適切に処理するために、タグに基づいて１つまたは複数のそのようなカスタムイベントにサブスクライブするように構成され得る。
【００５７】
[0090]１つまたは複数の実装形態では、ネットワークによる強化学習を可能にするために樹状突起イベントが利用され得る。例として、強化入力（「樹状突起スパイク）を受信すると、ポストシナプスターゲットにポストシナプス反応を送出することなしに、ニューロンの着信シナプスの可塑性が調整され得る。その後、次いでニューロン状態が超しきい値条件に達し、所望の宛先にニューロンポストシナプス反応を送出するために軸索イベントが使用され得る。
【００５８】
[0091]１つまたは複数の実装形態では、樹状突起イベントと軸索イベントとは組み合わせられて、たとえば、基本神経形態学的記述（ＥＮＤ：ｅｌｅｍｅｎｔａｒｙ  ｎｅｕｒｏｍｏｒｐｈｉｃ  ｄｅｓｃｒｉｐｔｉｏｎ）フレームワークｖ  １、ｖ２、およびｖ３においてたとえば使用されるにおいて使用されるポストシナプススパイクなど、合成イベントを取得し得る。
【００５９】
[0092]次に図１に示された例を参照すると、ニューラルシミュレータ開発環境１００の一構成が詳細に図示および説明されている。この例では、ネットワーク設計、結合性拡大、監視および可視化、エンジン固有の初期化、ならびにエンジンのブロックはソフトウェアツールを備え得るが、標示されたライブラリ、高レベル記述、デバッギングテーブル、低レベル記述およびエンジン固有のデータフォーマットのブロックは、本明細書でより詳細に説明する特定のフォーマットにおけるデータ構造として実装され得る。
【００６０】
[0093]図１のニューラルシミュレータ開発環境は、ユーザが任意のニューラルシステムモデルを定義し、任意の計算プラットフォーム（エンジン）上でそのモデルを実行することを可能にする。ニューラルシミュレータ開発１００は、いくつかのフォーマットで構成されたデータ構造を介して互いに相互作用するいくつかのソフトウェアツール（図１の透明ブロック）と、単一のコンピュータ、コンピュータクラスタ、ＧＰＵ、または専用ハードウェア中に具備され得る計算エンジン１０４とを備え得る。いくつかの実装形態では、計算エンジン１０４は、コンピュータ化制御／感覚入力処理装置の一部であり得、図１の矢印１０２のペアを介してデータを装置の残りの部分と交換する。例として、計算エンジン１０４は、入力１０２を介して「実世界」から感覚情報を受信し、出力１０３を介して制御装置の任意の適切なアクチュエータ（図示せず）に、ドライバのセットを介した感覚入力への制御／処理反応を可能にするモーターコマンドを送る。
【００６１】
[0094]ユーザは、たとえば、Ｍｉｃｒｏｓｏｆｔ  Ｖｉｓｕａｌ  Ｓｔｕｄｉｏ（登録商標）と同様のＧＵＩネットワーク設計ツールを使用して、ニューラルシミュレータ１００の所望のネットワークレイアウトを指定し得る。いくつかの実装形態では、ニューラルシミュレータは、様々な専用機能を実装するように構成された専用ライブラリを採用する。いくつかの特定のライブラリモジュールは、たとえば、「１Ｍ個のニューロンをもつ網膜＋視床＋Ｖ１」と手短に記述され得る。いくつかの実装形態では、ライブラリモジュールはより詳細に記述され、可塑性、ニューロンダイナミクス、皮質マイクロ回路、および／またはデフォルトパラメータに関連する他の情報のうちの１つまたは複数を定義する様々なデフォルトパラメータの初期化を（適宜に）行い得る。ＧＵＩネットワーク設計ツールは、ニューラルシミュレータ１００のネットワークレイアウトを「高レベル記述」フォーマットで保存する。いくつかの実装形態では、ＧＵＩネットワーク設計ツールは、図１のライブラリ１０６を変更するように構成される。
【００６２】
[0095]ネットワークレイアウトの高レベル記述は、ライブラリ１０６を使用して低レベル記述（基本ネットワーク記述ＥＮＤ）１０８にコンパイルされる。たとえば、高レベル記述は、皮質領域Ｖ１およびＶ２（図示せず）の記述を備え得、ライブラリ１０６に記憶された適切な結合性ルールに従ってそれらを結合することを必要とし得る。コンパイラは、ニューロンを割り振り、それらのニューロン間の結合を確立し、アセンブリ言語と同様である低レベル記述でネットワークレイアウト１００を保存する。いくつかの実装形態では、コンパイラは、デバッギング中の監視および可視化ツールのための適切なテーブルを与え得る。
【００６３】
[0096]基本ネットワーク記述（ＥＮＤ）表現は、図２に示されているように、シミュレータツールとハードウェアプラットフォーム実装との間の中間ボトルネック（すなわち、リンク）として働く。ＥＮＤ表現は、基礎をなすハードウェアから開発環境を分離するアブストラクションレイヤを与える。ＥＮＤの１つの目的は、図２に示されているように、ハードウェアシミュレーションツールから、ニューラルネットワークモデルを開発するステップを分離することである。ＥＮＤ手法は、（図１のモデルなどの）ニューラルモデルの実装を２つのステップに区分するように動作し得る。第１のステップにおいて、神経科学者が、高レベル記述言語とＥＮＤ表現とを使用して様々な複雑さのニューラルモデルを作成する。第２のステップにおいて、開発者（プログラマーおよびハードウェア技術者）は、特定のハードウェア／ソフトウェアプラットフォームのためにモデル動作を適応させ、最適化するために、基礎をなす実装ブロックを変更し、適応させる。このアーキテクチャでは、ＥＮＤフォーマットは、ＬＬＶＭ（低レベル仮想マシン：ｌｏｗ−ｌｅｖｅｌ  ｖｉｒｔｕａｌ  ｍａｃｈｉｎｅ）またはＪａｖａバイトコードと同じサービスを実施するが、ＥＮＤフォーマットは、ニューロンシステムの並列表現と実行とのために最適化され得る。
【００６４】
[0097]モデルの低レベル記述は、図１に示されているように、計算エンジン１０４へのアップロードに好適な、エンジン固有の２進形式に変換される。計算エンジンは、以後の再アップロードのためにそれの現在の状態を同じフォーマットで保存することが可能である。バイナリデータは、計算結果のデバッギングおよび可視化ならびにシステムの監視中に、図１の監視および可視化ブロック１１０によって使用される。上記で説明したように、計算エンジンは、図１の矢印１０２によって示されるように、（ドライバによってハードウェアに接続された）センサーとアクチュエータとを介して実世界と相互作用する。
【００６５】
[0098]ネットワークの基本ネットワーク記述（ＥＮＤ）は最低レベルプラットフォーム独立モデル図を備え得る。一実装形態では、そのような記述は、コンピュータプログラミング技術において通常使用される、アセンブリ言語記述と同様に構成される。ただし、多くの既存のコンピュータアセンブリ言語実装はプロセッサ依存であり得るが、ＥＮＤ記述はハードウェアアグノスティック（ｈａｒｄｗａｒｅ−ａｇｎｏｓｔｉｃ）である。
【００６６】
[0099]ＥＮＤ記述は、図２に示されているように、ニューラルモデルの高レベル記述とプラットフォーム固有の実装との間のプラットフォーム独立リンクとして動作し得る。図２において、ブロック２１０（ニューラルシミュレータ１〜３）は（ＮＥＵＲＯＮ、ＧＥＮＥＳＩＳ、ＮＥＳＴなどの）様々なネットワーク開発ツールを示すが、ブロック２２０（ハードウェアプラットフォーム１〜３）は異なるハードウェア実装（たとえば、ＣＰＵ、それぞれのニューラルシミュレータモデルを実行するために使用されるマルチプロセッサコンピュータ（ワークステーション、デスクトップ、サーバ、メインフレーム、ＡＳＩＣ、ＦＰＧＡ、および／または他のハードウェア実装）を示す。
【００６７】
[00100]ＥＮＤ実装の一実装形態では、入力ニューラルシミュレータモデルデータは、ＸＭＬフォーマット（または任意の他の好都合な構造化データフォーマット）で与えられるか、あるいは、ニューラルシミュレーションモデルの１つまたは複数の態様を指定するのに十分である最小セットの入力データを与えることを目的として、リレーショナルデータベース標準形式で与えられ得る。ニューラルシミュレーションモジュールの所与の態様は、ニューロン、樹状突起ツリー、シナプス、ニューロンおよびシナプスクラス、可塑性ルール、ニューロンダイナミクス、および／または他の態様のうちの１つまたは複数を含み得る。入力データのこのセットは、上記の項目間の複数の関係を介して構成される。入力データのこのセットは、（ｉ）個々のファイルが単一のデータ構造、たとえば、ニューロンを記述する、複数のファイルの集合、（ｉｉ）（圧縮され得る）単一のファイル、または（ｉｉｉ）階層的ディレクトリ／フォルダ／ファイル構造、またはそれらの組合せという、様々な方法で構成され得る。
【００６８】
[00101]いくつかの実装形態では、ネットワークシミュレーションモデルの基本（アトミック）計算ユニットは、「ユニット」と呼ばれるニューロンである。いくつかの実装形態では、ユニットはニューロンコンパートメントを備え得、そこで、ユニットは接合によってリンクされて樹状突起ツリーが形成され得、樹状突起ツリーはニューロンを形成する。これらの例では、シナプスは、あるユニットから別のユニットへの結合を備え、それにより、結合性図式を介してユニット（ノード）相互結合を記述することが可能になる。そのような図式は、必ずしも細胞体（ｓｏｍａ）から来るシナプスを通してツリーに結合されたツリーを備えるとは限らない。
【００６９】
[00102]動作可能なネットワーク記述を取得するために、個々のユニット（たとえば、ニューロン、コンパートメント）と個々のシナプスとは、それのダイナミクスを支配するルールのセットに従わなければならないことがある。いくつかの実装形態では、これらのルールのいくつかは、ニューロンユニットおよび接合に適用されるクロックベースのルールを備えるが、他のルールは、イベントベースであり、シナプスに適用され得る。
【００７０】
[00103]例として、個々のニューロンユニットは、（ｉ）スパイクを発火させるための条件と、（ｉｉ）スパイクが発火された後に、ユニット動的状態変数に適用され得る変更のセットとを備える、そのユニットのためのスパイク発生メカニズムを記述するルールのセットに従わなければならないことがある。同様に、個々のシナプスは、プレシナプスユニットが発火したときにシナプス上で実施されるアクションのセットと、ポストシナプスユニットが発火したときにシナプス上で実施されるアクションのセットとを決定するスパイクルールに従わなければならないことがある。
【００７１】
[00104]一実装形態では、計算エンジン（たとえば、図１のエンジン１０４）を実装するＣコードを発生するためにＥＮＤフォーマットが使用され得る。本明細書ではＥＮＤ１．０と呼ぶこの実装形態では、ルールの記述は、以下の例によって示されるように、任意の拡張可能な機能をもつニューロンモデルを与えるために、Ｃコードテンプレート中に挿入され得るコードストリングを備え得る。
【００７２】
[00105]ＥＮＤ１．０は、可能なサブクラスとともにオブジェクトクラスｕｎｉｔ＿ｃｌａｓｓ、ｊｕｎｃｔｉｏｎ＿ｃｌａｓｓ、ｓｙｎａｐｔｉｃ＿ｃｌａｓｓ、およびｅｖｅｎｔ＿ｒｕｌｅを備え得る、オブジェクト継承構造を実装し得る。そのようなクラスの個々のクラスは、インスタンス、すなわち、ユニット、接合、シナプス、およびルールを有し得る。
【００７３】
[00106]ＥＮＤ１．０は、メソッド（更新およびスパイクルール）からデータ（ユニット、接合、シナプス）を分離するように構成され得、それによって、計算エンジン（たとえば、図１のエンジン１０２のリンカ(linker)１１２）がデータ＜−−−＞メソッド相互結合を実装することが可能になる。計算エンジンのいくつかの実装形態では、計算動作はデータによってグループ化され得る（たとえば、個々のシナプスについて、そのシナプスのためにアクション（ルール）の一部または全部が実行される）。たとえば、ＧＰＵハードウェアを用いた有用な、計算エンジンの他の通常使用される実装形態では、計算動作はメソッドによってグループ化され得る（たとえば、個々の更新ルールについて、その更新ルールに従わなければならない一部または全部のシナプスについての未解決の要求が実行される）。ＥＮＤは、上記の動作グルーピング構成のいずれにも等しく順調に動作するように構成され得る。
【００７４】
[00107]たとえば、哺乳類視覚システムなど、複雑な現実システムの大規模モデルを実装するとき、ＥＮＤフォーマットで記述されたいくつかのデータ構造がネットワークモデルリソース（メモリまたはＣＰＵ、あるいはその両方）の大部分（いくつかの実装形態では最高９９％）を消費し得る。一般に「カノニカル構造（ｃａｎｏｎｉｃａｌ  ｓｔｒｕｃｔｕｒｅ）」と呼ばれるこれらのデータ構造の実装は、そのようなカノニカル構造をシミュレートするために最適化されたＡＳＩＣまたはＦＧＰＡなど、専用ハードウェアの使用から大いに恩恵を受ける。同様に、いくつかのルールおよびメソッドがＣＰＵ処理リソースの大部分を消費する（たとえば、実行するために大部分の時間を要する）いくつかの実装形態では、専用ハードウェアアクセラレータの開発がカノニカルメソッドの処理の大幅な増加をもたらし得る。異なるハードウェア実装形態は異なるメソッドを配線接続（hard-wire）することができ、それはハードウェアプラットフォームの多様性をもたらす。
【００７５】
[00108]ＥＮＤ記述を用いて達成される目的のうちの１つは、任意の複雑さのニューロンモデルを記述するのに十分である最小命令セットを与えることであり得る。本明細書では、ＥＮＤフォーマットを記述する際に以下の表記法を使用する。クラスまたは型定義タイプは山括弧＜．．．＞中に入れられる。クラス（またはタイプ）内のフィールドは、以下の定義１の例に示されているように、クラス定義に対して字下げされ得る。
【００７６】
[00109]上記の定義において、ステートメント＜ｕｎｉｔ  ｏｆ  （ｕｎｉｔ＿ｃｌａｓｓ）＞は、以下のようにフィールド「ｕｎｉｔ＿ｉｄ」および「Ｉｎｉｔｉａｌｉｚａｔｉｏｎ」を有するクラス「ｕｎｉｔ＿ｃｌａｓｓ」のインスタンスの定義を示す。
【００７７】
＜ｕｎｉｔ  ｏｆ  （ｕｎｉｔ＿ｃｌａｓｓ）＞ 
ｕｎｉｔ＿ｉｄ
Ｉｎｉｔｉａｌｉｚａｔｉｏｎ
[00110]このクラスは、ニューロンまたはコンパートメントを定義するが、原則として、あらかじめ定義されたモデル実行タイムステップ（たとえば、１ｍｓ）でモデルによって実行され得る、任意のニューラルユニットであり得る。このユニットは、モデルタイムステップのうちの個々のステップにおいて実施される動作を指定するオブジェクトユニットクラスのインスタンス化であり得る。ｕｎｉｔ＿ｃｌａｓｓのフィールドは以下のように定義され得る。
【００７８】
ｕｎｉｔ＿ｉｄ
は、一意のラベル、たとえば、個々のユニットを識別する番号または文字である。ｕｎｉｔ＿ｉｄは、有効なｉｄの範囲を指定するＰｅｒｌまたはＰＨＰまたはＲｅｇＥｘ、またはＭＡＴＬＡＢ表現であり得、実際のｉｄはモデルビルド中にリンカよって割り当てられ得る。たとえば、‘ｅｘｃ（１：１０００）’または‘ｅｘｃｌ：ｅｘｃｌ０００’。
【００７９】
Ｉｎｉｔｉａｌｉｚａｔｉｏｎ
は、クラスの定義中のデフォルト値とは異なり得るクラスフィールドの初期値を含んでいる構造であり得る。これらの一部または全部は、ｕｎｉｔ＿ｃｌａｓｓ中のデフォルト値を用いて宣言され、初期化され得る。
【００８０】
＜ｕｎｉｔ＿ｃｌａｓｓ  ｏｆ  （ｕｎｉｔ＿ｃｌａｓｓ）＞
ｕｎｉｔ＿ｃｌａｓｓ＿ｉｄ
ｅｘｅｃｕｔｉｏｎ＿ｃｏｎｄｉｔｉｏｎ
ｕｐｄａｔｅ＿ｒｕｌｅ
ｅｖｅｎｔ＿ｃｏｎｄｉｔｉｏｎ
ａｆｔｅｒ＿ｅｖｅｎｔ＿ｒｕｌｅ
Ｉｎｉｔｉａｌｉｚａｔｉｏｎ
は、ニューロンダイナミクスを指定し、ニューロン変数を割り振り、ニューラルモデルクラスに関連するスパイク処理ルール、および／または他の情報を定義する、ニューロンモデルクラスの一般的な定義を与える。クラス＜ｕｎｉｔ＿ｃｌａｓｓ＞は、（オブジェクト指向プログラミングの場合のように）ｕｎｉｔ＿ｃｌａｓｓの別のオブジェクトから派生され得るオブジェクトである。＜ｕｎｉｔ＿ｃｌａｓｓ＞オブジェクトのフィールドは以下のように定義され得る。
【００８１】
ｕｎｉｔ＿ｃｌａｓｓ＿ｉｄ
は、オブジェクトクラスの一意の名前（ストリング）、たとえば、‘ｅｘｃ’または‘ｐ２３ｓｏｍａ’または‘ｐ４ｃｍｐｉｔｉｎｎｔ３’である。これらのオブジェクト名は、たとえば、バックグラウンドプロセス中にまたはＩ／Ｏプロセス中に、ニューロンモデルによって、ユニットを指すためにベクトルの名前として使用され得る。
【００８２】
ｅｘｅｃｕｔｉｏｎ＿ｃｏｎｄｉｔｉｏｎ
このクラスのユニットを実行すべきか否かを決定するために個々のモデル実行タイムステップで評価される条件、たとえば、‘ｎｏｗ％１０＝＝０、または‘ＤＡ＞０．１’。ｅｘｅｃｕｔｉｏｎ＿ｃｏｎｄｉｔｉｏｎがない（このフィールドがブランクである）場合、それぞれのユニットが個々のモデルタイムステップ（すなわち、システムクロックステップサイクル）で実行され得る。ベースクラス（スーパークラス）からクラス（サブクラス）が派生され得るとき、派生クラス実行条件はベースクラス実行条件をオーバーライドする。
【００８３】
ｕｐｄａｔｅ＿ｒｕｌｅ
は、リンカよって実行可能コードに変換されることになるコードストリングを定義する。いくつかの実装形態では、コードストリングは、たとえば、次式など、前進オイラー数値法表記法（ｆｏｒｗａｒｄ  Ｅｕｌｅｒ  ｎｕｍｅｒｉｃａｌ  ｍｅｔｈｏｄ  ｎｏｔａｔｉｏｎ）を備え得る。
【００８４】
’ｘ（ｔ＋１）＝ｘ（ｔ）＋ｔａｕ＊（Ｆ（ｘ（ｔ）））．
’Ｉ＋＝ｇ＊（Ｅ−５）；  ｇ＋＝ｔａｕ＊（−ｇ）／５；
ｖ＋＝ｔａｕ＊（２＊（ｖ＋７０）＊（ｖ＋５０）−ｕ＋Ｉ）／２０；
ｕ＋＝ｔａｕ＊０．１＊（２＊（ｖ＋７０）−ｕ）；’．
[00111]いくつかの実装形態では、コードストリングは、マッピングｘ（ｔ＋１）＝‘ｘ（ｔ）＋ｔａｕ＊（ｆ（ｘ（ｔ））’を指定するか、あるいはモデル実行の個々のステップで実施され得るＣ実行可能コード（関数またはサブルーチン）を指定する。クラスがベースクラスから派生されたとき、サブクラスのオブジェクトｕｐｄａｔｅ＿ｒｕｌｅが最初に実行され、続いてベースクラスルールが実行され得、それにより、サブクラスルール実行によるある変数の更新が可能になる。
【００８５】
ｅｖｅｎｔ＿ｃｏｎｄｉｔｉｏｎ
は、スパイクを検出するために必要とされる論理ステートメントを定義する。たとえば、‘ｖ＞３０’。これは個々のクロックサイクル（モデルタイムステップ）で実行され得る。このクラスがベースクラスから派生されたとき、サブクラスのｅｖｅｎｔ＿ｃｏｎｄｉｔｉｏｎがベースクラスのｅｖｅｎｔ＿ｃｏｎｄｉｔｉｏｎに取って代わる。
【００８６】
ａｆｔｅｒ＿ｅｖｅｎｔ＿ｒｕｌｅ
スパイクが検出され得るときに実行されるコード。たとえば、‘ｖ＝−６５；ｕ＝ｕ−８；’。派生サブクラスの場合、サブクラスａｆｔｅｒ＿ｅｖｅｎｔ＿ｒｕｌｅはベースクラスのａｆｔｅｒ＿ｅｖｅｎｔ＿ｒｕｌｅの前に実行され得る。
【００８７】
ｉｎｉｔｉａｌｉｚａｔｉｏｎ
は、ユニットの一部または全部の変数およびパラメータの初期値を設定する。たとえば、‘ｆｌｏａｔ  ｖ＝０；ｆｌｏａｔ  ｕ＝０；ｆｌｏａｔ  ｇ＿ＡＭＰＡ＝０；’。異なるユニットクラスは、異なる数のシナプスコンダクタンスタイプ（ｓｙｎａｐｔｉｃ  ｃｏｎｄｕｃｔａｎｃｅ  ｔｙｐｅ）を有しおよび／または異なる変数名を割り当てられ得る。ビルド中に変数の一部または全部の名前を取得するためにリンカよってパースされる初期化ストリング。派生オブジェクトクラスは新しい変数を追加し得る。派生サブクラスの場合、ベースクラスの初期化が最初に実行され、次いで、デフォルトパラメータのいくつかを変更し得るように、後でこの初期化が実行され得る。この初期化は、ベースクラスから継承されたデフォルトパラメータ値を変更し得る。例として、初期化ストリング‘ｆｌｏａｔ  ｇ＿ＮＭＤＡ＝１；ｇ＿ＡＭＰＡ＝１’は、新しい変数ｇ＿ＮＭＤＡを作成し、既存の変数ｇ＿ＡＭＰＡの値をリセットする。
【００８８】
[00112]同様に、上記と同じ方法を使用して接合およびシナプスが記述され得る。
【００８９】
＜ｊｕｎｃｔｉｏｎ  ｏｆ  （ｊｕｎｃｔｉｏｎ＿ｃｌａｓｓ）＞
ｕｎｉｔ＿ｉｄｌ
ｕｎｉｔ＿ｉｄ２
ｉｎｉｔｉａｌｉｚａｔｉｏｎ
は、ユニットのペア間の結合性を与えるニューロンモデルクラスの一般的な定義を与える。フィールドｊｕｎｃｔｉｏｎ＿ｃｌａｓｓは、親オブジェクトクラスの名前、たとえば、「ｇａｐ＿ｊｕｎｃｔｉｏｎ」または「ｄｅｎｄｒｉｔｉｃ＿ｔｒｅｅ」を参照する。クラスフィールドは以下の通りであり得る。
【００９０】
ｕｎｉｔ＿ｉｄｌ, ｕｎｉｔ＿ｉｄ２
は、２つの結合されたニューロンユニットのｉｄを指定する。
【００９１】
ｉｎｉｔｉａｌｉｚａｔｉｏｎ
[00113]パラメータと変数とのための初期値を設定する。クラスｊｕｎｃｔｉｏｎ＿ｃｌａｓｓは、サブクラス＜ｊｕｎｃｔｉｏｎ＿ｃｌａｓｓ  ｏｆ  （ｊｕｎｃｔｉｏｎ＿ｃｌａｓｓ）＞を定義するためのベースとして使用され得、以下のように宣言され得る。
【００９２】
＜ｊｕｎｃｔｉｏｎ＿ｃｌａｓｓ  ｏｆ  （ｊｕｎｃｔｉｏｎ＿ｃｌａｓｓ）＞
ｊｕｎｃｔｉｏｎ＿ｃｌａｓｓ＿ｉｄ
ｅｘｅｃｕｔｉｏｎ＿ｃｏｎｄｉｔｉｏｎ
ｕｎｉｔ＿ｃｌａｓｓ＿１
ｕｎｉｔ＿ｃｌａｓｓ＿２
ｕｐｄａｔｅ＿ｒｕｌｅ
ｉｎｉｔｉａｌｉｚａｔｉｏｎ
ここで、
ｊｕｎｃｔｉｏｎ＿ｃｌａｓｓ＿ｉｄ
は、別のクラスから派生され得るクラスを指定する一意の識別ラベルである。
【００９３】
ｅｘｅｃｕｔｉｏｎ＿ｃｏｎｄｉｔｉｏｎ
[00114]このクラスのユニットを実行すべきか否かを決定するために個々のモデル実行タイムステップで評価される条件、たとえば、‘ｎｏｗ％１０＝＝０、または‘ＤＡ＞０．１’。ｅｘｅｃｕｔｉｏｎ＿ｃｏｎｄｉｔｉｏｎがない（このフィールドがブランクである）場合、それぞれのユニットが個々のモデルタイムステップで実行され得る。ベースクラス（スーパークラス）からクラス（サブクラス）が派生されたとき、派生クラス実行条件はベースクラス実行条件をオーバーライドする。
【００９４】
ｕｎｉｔ＿ｃｌａｓｓ＿１
ｕｎｉｔ＿１のクラス識別子、
ｕｎｉｔ＿ｃｌａｓｓ＿２
ｕｎｉｔ＿２のクラス識別子。省略された場合、接合は一部または全部のユニットクラスに適用されると仮定され得る。
【００９５】
ｕｐｄａｔｅ＿ｒｕｌｅ
は、リンカよって実行可能コードに変換されることになるコードストリングを定義する。いくつかの実装形態では、コードストリングは、たとえば、次式など、前進オイラー数値法表記法を備え得る。
【００９６】
’  ｇ＿２ｔｏｌ＊（Ｖ２−Ｖ１），  ｇ＿ｌｔｏ２＊（Ｖ１−Ｖ２）’．
[00115]オーミック接合に適用可能ないくつかの実装形態では、＿ｃｌａｓｓ部分をスキップし、＜ｊｕｎｃｔｉｏｎ＞中のコンダクタンスｇ＿２ｔｏ１およびｇ＿ｌｔｏ２だけを指定することができる。このクラスがベースクラスから派生されたとき、サブクラスのオブジェクトｕｐｄａｔｅ＿ｒｕｌｅが最初に実行され、続いてベースクラスルールが実行され得、それにより、サブクラスルール実行によるある変数の更新が可能になる。
【００９７】
Ｉｎｉｔｉａｌｉｚａｔｉｏｎ
は、もしある場合、ｕｐｄａｔｅ＿ｃｏｄｅを実行するために使用される変数の初期値を設定する。
【００９８】
[00116]クラスシナプスは以下のように宣言され得る。
【００９９】
＜ｓｙｎａｐｓｅ  ｏｆ  （ｓｙｎａｐｔｉｃ＿ｃｌａｓｓ）＞
ｐｒｅ
ｐｏｓｔ
ｄｅｌａｙ
ｉｎｉｔｉａｌｉｚａｔｉｏｎ
ここで、
ｐｒｅ
ｐｏｓｔ
はそれぞれ、プレシナプスユニットの識別子、およびポストシナプスユニットの識別子である。
【０１００】
ｄｅｌａｙ
は、軸索伝導（ａｘｏｎａｌ  ｃｏｎｄｕｃｔｉｏｎ）遅延値を（シミュレーションタイムステップで）指定する
ｉｎｉｔｉａｌｉｚａｔｉｏｎ
は、初期パラメータおよび変数値を設定する。接合クラスと同様に、シナプスクラスはベースから派生され得シナプスクラスは以下のように宣言され得る。
【０１０１】
＜ｓｙｎａｐｔｉｃ＿ｃｌａｓｓ  ｏｆ  （ｓｙｎａｐｔｉｃ＿ｃｌａｓｓ）＞
ｓｙｎａｐｔｉｃ＿ｃｌａｓｓ＿ｉｄ
ｉｎｉｔｉａｌｉｚａｔｉｏｎ
ここで、
ｓｙｎａｐｔｉｃ＿ｃｌａｓｓ＿ｉｄ
は、（順序はスクランブルされ得るが）バックグラウンドプロセス中に個々のシナプスを参照するためにベクトル識別子として使用され得る、ベースクラスを指定する一意のラベルである。このクラスは別のクラスから派生され得る。
【０１０２】
ｉｎｉｔｉａｌｉｚａｔｉｏｎ
は、個々のシナプスのためのパラメータおよび変数の初期値を設定し、たとえば、‘ｆｌｏａｔ  ｗ＝５；ｆｌｏａｔ  ｓｄ＝０；ｆｌｏａｔ  ｐ＝０；’。シナプス変数とｐｏｓｔ＿ｕｎｉｔ変数とにアクセスするプレシナプスイベントルールを定義するクラスは、以下のように宣言され得る。
【０１０３】
＜ｐｒｅｓｙｎａｐｔｉｃ＿ｅｖｅｎｔ  ｏｆ  （ｅｖｅｎｔ＿ｒｕｌｅ）＞
ｓｙｎａｐｔｉｃ＿ｃｌａｓｓ
ｐｏｓｔ＿ｕｎｉｔ＿ｃｌａｓｓ
ここで、
ｓｙｎａｐｔｉｃ＿ｃｌａｓｓ
は、この可塑性ルールが適用されるシナプスクラスの名前を示す。オブジェクトｅｖｅｎｔ＿ｒｕｌｅは、プレシナプスユニットが発火したときに実施されるアクションを指定するために使用され得る。ｓｙｎａｐｔｉｃ＿ｃｌａｓｓのルールは、プレシナプスニューロン（ユニット）のためのＳＴＤＰルールの短期可塑性（ＳＴＰ：ｓｈｏｒｔ−ｔｅｒｍ  ｐｌａｓｔｉｃｉｔｙ）および長期増強（ＬＴＰ：ｌｏｎｇ−ｔｅｒｍ  ｐｏｔｅｎｔｉａｔｉｏｎ）部分を定義する。
【０１０４】
ｐｏｓｔ＿ｕｎｉｔ＿ｃｌａｓｓ
は、ポストシナプスユニットのクラスを指定し、それによってｅｖｅｎｔ＿ｒｕｌｅのアクションのドメインを定義し、それによって、ＳＴＤＰルール実行によって必要とされ得る情報（たとえば、ポストシナプス電位（ＰＳＰ：ｐｏｓｔ−ｓｙｎａｐｔｉｃ  ｐｏｔｅｎｔｉａｌ）を送出し、ｌａｓｔ＿ｓｐｉｋｅなどの変数にアクセスするためのクラス）を与える。クラスｐｏｓｔ−ｓｙｎａｐｔｉｃ＿ｅｖｅｎｔは以下のように宣言され得る。
【０１０５】
＜ｐｏｓｔ−ｓｙｎａｐｔｉｃ＿ｅｖｅｎｔ  ｏｆ  （ｅｖｅｎｔ＿ｒｕｌｅ）＞
ｓｙｎａｐｔｉｃ＿ｃｌａｓｓ
ｐｏｓｔ＿ｕｎｉｔ＿ｃｌａｓｓ
ここで、
ｓｙｎａｐｔｉｃ＿ｃｌａｓｓ
は、この可塑性ルールが適用されるシナプスクラスの名前を指定する。オブジェクトｅｖｅｎｔ＿ｒｕｌｅは、（これらのシナプスに関して参照される）ポストシナプスユニットが発火したときにシナプス変数を用いて実施され得るアクションのリストを定義するために使用され得、それによって、ポストシナプスユニットがスパイクを発火させたときはいつでも実行され得るＳＴＤＰ可塑性ルールのＬＴＰ部分を実装する。
【０１０６】
ｐｏｓｔ＿ｕｎｉｔ＿ｃｌａｓｓ
は、ポストシナプスユニットのクラスを指定し、それによって、このルールのためのアクションドメインを定義する。一実装形態では、このルールはアクセスシナプス変数に構成され得る。ｅｖｅｎｔ＿ｒｕｌｅクラスはベースクラスから以下のように派生され得る。
【０１０７】
＜ｅｖｅｎｔ＿ｒｕｌｅ  ｏｆ  （ｅｖｅｎｔ＿ｒｕｌｅ）＞
ｅｖｅｎｔ＿ｒｕｌｅ＿ｉｄ
ｒｕｌｅ
ｉｎｉｔｉａｌｉｚａｔｉｏｎ
ここで、
ｅｖｅｎｔ＿ｒｕｌｅ＿ｉｄ
は、ルールクラスを指定する一意のラベルである。概して、ルールクラスは別のオブジェクトクラスｅｖｅｎｔ＿ｒｕｌｅから派生され得る。
【０１０８】
Ｒｕｌｅ
は、イベントの発生時に実施されるアクションを指定するコードのストリング表現である。例として、ポストシナプス電位（ＰＳＰ：ｐｏｓｔ−ｓｙｎａｐｔｉｃ  ｐｏｔｅｎｔｉａｌ）の送出が以下のように指定され得る」。
【０１０９】
’ｇ＋＝ｗ’  または  ’Ｉ＋＝ｗ’  または  ’ｇ＋＝ｇ＊ｐ’．
[00117]同様に、ｐｒｅｓｙｎａｐｔｉｃ＿ｅｖｅｎｔに関連するアクションが以下として定義され得る。
【０１１０】
’ｐ＊＝ＳＴＰ（ｎｏｗ−ｌａｓｔ＿ａｃｔｉｖｅ）；  ｗ−＝ＬＴＤ（ｎｏｗ−ｌａｓｔ＿ｓｐｉｋe);'
一方、ｐｏｓｔ−ｓｙｎａｐｔｉｃ＿ｅｖｅｎｔに関連するアクションは以下として定義され得る。
【０１１１】
’ｗ＋＝ＳＴＤＰ（ｎｏｗ−ｌａｓｔ＿ａｃｔｉｖｅ）’
ここで、
「ｌａｓｔ＿ａｃｔｉｖｅ」は、シナプスがアクティブであった前の時点から経過した時間であり、
ｌａｓｔ＿ｓｐｉｋｅは、ポストシナプスユニットの最後のスパイクの時間であり、
‘ｎｏｗ’は現在時間である。
【０１１２】
[00118]さらに、ｅｖｅｎｔ＿ｒｕｌｅクラスは、テーブル、たとえば、ＳＴＤＰ、ＬＴＰ、または他の生物学的動機づけテーブルを指定し得る。
【０１１３】
ｉｎｉｔｉａｌｉｚａｔｉｏｎは、テーブルの初期値を、たとえば、‘ＳＴＤＰ＝｛，．．，｝；’または‘ＳＴＰ＝１，．．．，Ｉ；ＬＴＤ＝｛．．．｝’のように設定する。
【０１１４】
＜ｂａｃｋｇｒｏｕｎｄ＿ｐｒｏｃｅｓｓ＞
ｅｘｅｃｕｔｉｏｎ＿ｃｏｎｄｉｔｉｏｎ
プロセスを実行すべきか否かを決定するために個々のシミュレーションタイムステップで評価される条件。たとえば、‘ｎｏｗ％１０＝＝０’または‘ＤＡ＞０．１’。ない場合、プロセスは個々のタイムステップで実行され得る。それの局所変数がアクセスされ得るｕｎｉｔ＿ｃｌａｓｓまたはｓｙｎａｐｔｉｃ＿ｃｌａｓｓの名前。以下のコードが、任意の順序で（場合によっては並列に）クラスメンバー内でループ中で実行されることになる。ない場合、このプロセスは‘ｔｒｕｅ’ｅｘｅｃｕｔｉｏｎ＿ｃｏｎｄｉｔｉｏｎごとに１回実行され、ユニットまたはシナプスクラス名を使用して個々のユニットまたはシナプスがアクセスされ得ると仮定され得る。たとえば、ユニットクラス‘ｅｘｃ’は、順序が場合によっては未知であるユニットｅｘｃ［ｉ］を含んでおり、その順序は、必ずしも、それらがリストされた順序に対応するとは限らない。
【０１１５】
ｕｐｄａｔｅ＿ｒｕｌｅ
実行されるべきコード、たとえば‘ＤＡ＊＝０．９’、またはｓｙｎａｐｔｉｃ＿ｃｌａｓｓドメイン中で‘ｗ＋＝ＤＡ＊ｓｄ；ｓｄ＊＝０．９９５；’、またはドメインなしで単に‘ｅｘｃ［ｒａｎｄ（）］．Ｉ＝１００；’ｉｎｉｔｉａｌｉｚａｔｉｏｎグローバル変数の初期化、たとえば、‘ｆｌｏａｔ  ＤＡ＝０’。
【０１１６】
[00119]シミュレーションのタイムステップ、および他のランタイムパラメータが指定され得る。皆にとってアクセス可能な数個のグローバル変数、たとえば「ｎｏｗ」、すなわち現在時間があり得る。
【０１１７】
[00120]パラメータによって異なるクラスは単一のクラスとして宣言され得、パラメータ値はインスタンス化において指定され得る。パラメータのほんのいくつかの（たとえば、２つ、３つ、または何らかの他の数の）異なる値がある場合、２つの異なるクラスを指定し、式において配線接続されたパラメータを個々のクラスが有することが道理にかない得る。
【０１１８】
[00121]ＥＮＤフレームワークの外部インターフェースは、ニューロンネットワーク（たとえば、図１のネットワーク１００）への外部感覚入力の供与と、（たとえば、図１の経路１０２を介した）外部ロボット装置への出力の送出とを記述する。ＥＮＤ外部インターフェースは、以下で詳細に説明する、感覚入力ブロック、ならびに出力および監視ブロックという、２つの主要な論理ブロックを備え得る。
【０１１９】
[00122]このブロックは、ネットワークモデルの様々なユニットへの外部入力の結合を定義する。例として、Ｎチャネル（１〜Ｎに番号付けされた）スパイキング網膜入力のための感覚クラスが以下のように宣言され得る。
【０１２０】
＜ｕｎｉｔ＿ｃｌａｓｓ＞
ｕｎｉｔ＿ｃｌａｓｓ＿ｉｄ＝’ｒｅｔｉｎａ’
ａｆｔｅｒ＿ｅｖｅｎｔ＿ｒｕｌｅ        ／／空であり得る
[00123]上記のクラス宣言は、網膜からのスパイクが進むことになる計算エンジンおよび入力ドライバを通知する。入力の構造は、Ｎ個の空のユニットの以下の宣言を使用して定義され得る。
【０１２１】
＜ｕｎｉｔ＞
ｕｎｉｔ＿ｉｄ＝’ｒｅｔｉｎａ（１：Ｎ）’
[00124]いくつかの実装形態では、個々のネットワークタイムステップで実行されることが必要とされる更新ルールがないことがある。したがって、計算エンジンは、これらの空のユニットに計算リソースを費やさないことがある。しかしながら、‘ｒｅｔｉｎａ’として宣言された入力チャネルからのスパイクが到達したときはいつでも、入力ドライバは、それがスパイクを実際に発火させたかのように、ユニットインデックスをスパイクキュー中に入れ得る（これは、ａｆｔｅｒ＿ｅｖｅｎｔ＿ｒｕｌｅが空でない場合、エンジンによるａｆｔｅｒ＿ｅｖｅｎｔ＿ｒｕｌｅ実行をトリガし得る）。このユニットから他のユニットへのシナプスは、スパイクに対して何をすべきかをネットワークに伝え得る。ＬＧＮ上の網膜入力の場合、網膜ユニットは、いくつかのＬＧＮ細胞上に１〜３個のシナプスを有し得る。
【０１２２】
[00125]入力チャネルが連続信号を供給する場合、信号は、所与の時間間隔で（たとえば、１ミリ秒ごとに）個々のユニット中の変数「Ｉ」を更新し得る。この場合、更新ルールおよびｅｖｅｎｔ＿ｃｏｎｄｉｔｉｏｎを指定し得る。
【０１２３】
[00126]出力および監視ブロックは、ネットワークモードのための出力インターフェースを与える。モデルからのモーター出力に適用可能な一実装形態では、出力ブロックは、ネットワークユニットと、外部モーターインターフェース（motor interface）または何らかの他のアクチュエータとの間の結合を指定する。いくつかの実装形態では、モーターインターフェースは筋肉インターフェースを備え得る。いくつかの実装形態では、モーターインターフェースは、外部ロボット装置を制御するように構成されたモーターインターフェースを備え得る。たとえば、頸筋とインターフェースするためのＮチャネルモーター出力オブジェクトを備えるユニット‘ｎｅｃｋ  ｍｕｓｃｌｅｓ’が、ＥＮＤフレームワークを使用して以下のように宣言され得る。
【０１２４】
＜ｕｎｉｔ＿ｃｌａｓｓ＞
ａｓｕｎｉｔ＿ｃｌａｓｓ＿ｉｄ＝’ｎｅｃｋ＿ｍｕｓｃｌｅｓ’
ｉｎｉｔｉａｌｉｚａｔｉｏｎ＝’ｆｌｏａｔ  Ｉ＝０；’
[00127]上記の宣言は、電流Ｉの値の変化についてどのニューロン（ユニット）を監視すべきかを出力ドライバに通知する。それぞれのＮ個の空のユニットオブジェクトが、次いで、以下のように作成され得る。
【０１２５】
＜ｕｎｉｔ＞
ｕｎｉｔ＿ｉｄ＝’ｎｅｃｋ＿ｍｕｓｃｌｅｓ’
[0128]モデルの実行中に、計算エンジンは、モーターニューロンが発火したときはいつでも、ユニットオブジェクト内の変数Ｉが正値に設定され得るように、モーターニューロン（ユニット）頸筋の少なくともいくつかがこれらのニューロンへの非０の（たとえば、正の）シナプス投射を有することを保証する。出力ドライバは、したがって、個々のモデルタイムステップで変数Ｉを監視し、必要な場合、それをＩ＝０にリセットする。モーター出力インターフェースは（個々のモデル実行タイムステップでの）更新ルールの実行を必要としないので、計算エンジンは、‘ｎｅｃｋ＿ｍｕｓｃｌｅｓユニットを維持することに最小のリソースを費やす。
【０１２６】
[0129]ニューラルネットワーク実行を監視することに適用可能ないくつかの実装形態では、出力ブロックは、ネットワークユニットと外部監視インターフェースとの間の結合を指定する。
【０１２７】
[0130]上記で説明したように、ニューロンモデルのいくつかの要素は、特定のハードウェアブロック（ハードウェアアクセラレータ）によって実施され得る計算から恩恵を受ける。例として、エンジン計算リソースの大部分（たとえば、９９％）を消費するユニットｕｎｉｔ＿ｃｌａｓｓのメソッドｕｐｄａｔｅ＿ｒｕｌｅを考察する。
【０１２８】
＜ｕｎｉｔ＿ｃｌａｓｓ＞
ｕｎｉｔ＿ｃｌａｓｓ＿ｉｄ＝’ｓｉｍｐｌｅ＿ｍｏｄｅｌ’
ｕｐｄａｔｅ＿ｒｕｌｅ＝’ｖ＋＝（０．０４＊ｖ＋５）．＊ｖ＋１４０−ｕ＋Ｉ；  ｕ＋＝ａ＊（ｂ＊ｖ−ｕ）；'
ｅｖｅｎｔ＿ｃｏｎｄｉｔｉｏｎ＝’ｖ＞３０’
ａｆｔｅｒ＿ｅｖｅｎｔ＿ｒｕｌｅ＝’ｖ＝−６５；ｕ＋＝ｄ’
ｉｎｉｔｉａｌｉｚａｔｉｏｎ＝’ｆｌｏａｔ  ｖ＝−６５；  ｆｌｏａｔ  ｕ＝０；  ｆｌｏａｔ  ａ＝０．1;  ｆｌｏａｔ  ｂ＝０．５；  ｆｌｏａｔ  ｄ＝８；’
[0131]ｕｐｄａｔｅ＿ｒｕｌｅの実装がユニットごとにおよび／またはモデルランごとに変化しないとすれば、ｕｐｄａｔｅ＿ｒｕｌｅに関連する計算動作は、たとえば、ＡＳＩＣ、ＦＰＧＡ、または特殊シリコンにおいて実装され得る専用ハードウェアアクセラレータ中によってより効率的に実行され得る。ＥＮＤフレームワーク内では、たとえば、上記に記載したｕｐｄａｔｅ＿ｒｕｌｅに関連するコードの実行を、ハードウェアアクセラレータインターフェースに対応する適切なロケーションにダイレクトするようにコンパイラに命令するために、‘ｓｉｍｐｌｅ＿ｍｏｄｅｌ’クラスが使用され得る。そのようなマッピングを作成するために、ｓｉｍｐｌｅ＿ｍｏｄｅｌクラスのインスタンスは以下のようにインスタンス化され得る。
【０１２９】
＜ｕｎｉｔ  ｏｆ  （ｓｉｍｐｌｅ＿ｍｏｄｅｌ）＞
ｕｎｉｔ＿ｉｄ＝５０９
ｉｎｉｔｉａｌｉｚａｔｉｏｎ  ’ａ＝０．０１；  ｄ＝２’
[0132]そのようなハードウェアアクセラレータ（ｓｉｍｐｌｅ＿ｍｏｄｅｌオブジェクト）は、ＥＮＤによって、より複雑なオブジェクトを構成するためのビルディングブロックとして使用され得る。例として、超低速ニューロン変数‘ｗ’とともに、たとえば、百万個（１Ｍ）のｓｉｍｐｌｅ＿ｍｏｄｅｌユニット（ニューロン）と、たとえば、一千個（１Ｋ）のニューロンとをもつニューロンモデルが、クラス継承メカニズムを使用して以下のように宣言され得る。
【０１３０】
＜ｕｎｉｔ＿ｃｌａｓｓ  ｏｆ  （ｓｉｍｐｌｅ＿ｍｏｄｅｌ）＞  
ｕｎｉｔ＿ｃｌａｓｓ＿ｉｄ＝’ｃｏｍｐｌｅｘ＿ｍｏｄｅｌ’
ｕｐｄａｔｅ＿ｒｕｌｅ＝’ｗ＋＝０．００１＊（０．３＊ｖ−ｗ）；  Ｉ−＝ｗ’
ａｆｔｅｒ＿ｅｖｅｎ＿ｒｕｌｅ＝’ｗ＋＝１’
ｉｎｉｔｉａｌｉｚａｔｉｏｎ＝’ｆｌｏａｔ  ｗ＝０’
[0133]専用ハードウェアに取り付けられた計算エンジン中のプロセッサ（たとえば、ＡＲＭ（登録商標）チップ）は、変数‘ｗ’のダイナミクスを評価し、それを変数Ｉの値に組み込むために、上記のタイプの１Ｋ個のユニットを処理し得る。次いで、ハードウェアアクセラレータ（アナログまたはデジタル）ハードウェアは、インスタンスのいくつかがより複雑なモデルに対応することを了解することさえなしに、ｓｉｍｐｌｅ＿ｍｏｄｅｌの１Ｍ＋１Ｋ個のインスタンスを実行し得る。専用ハードウェアは、ニューロンモデルの最も一般的に使用される実装形態、シナプスダイナミクスを含んでいることがある。ユーザは、自由にこれらのカノニカル能力を混合し、整合させるか、または必要とされ得るどんな追加の機能をもそれらに加え得る。
【０１３１】
[0134]スプネットはＮ＝Ｎｅ＋Ｎｉ＝１０００個のニューロンを備え得、ここで、Ｎｅ＝８００個の興奮性（excitatory）ニューロンであり、Ｎｉ＝２００個の抑制性（inhibitory）ニューロンである。個々のニューロンは、ニューロンごとにＭ＝１００個のシナプスを備え得る。一部または全部の興奮性シナプスは可塑性（ＳＴＤＰ）であり得、ランダム遅延は１ｍｓとＤ＝２０ｍｓとの間にわたる。抑制性−＞興奮性シナプスは非可塑性であり得、Ｄ＝１ｍｓの遅延を伴う。ｉｎｈ−＞ｉｎｈシナプスはないことがある。このモデルの低レベルＥＮＤ記述は以下のように表され得る。最初のＮｅ個のユニットはＮｅ個の興奮性ユニットによってポピュレートされ得る。
【０１３２】
＜ｕｎｉｔ  ｏｆ  （ｅｘｃ）＞
ｕｎｉｔ＿ｉｄ＝１：８００
[0135]次に、Ｎｉ個の抑制性ユニットがクラスのレコードであり得、以下のようにポピュレートされる。
【０１３３】
＜ｕｎｉｔ  ｏｆ  （ｉｎｈ）＞
ｕｎｉｔ＿ｉｄ＝８０１：１０００
[0136]スプネットクラスが、次いで、以下のリスティング１に示されているように宣言され得る。
【０１３４】
＜ｕｎｉｔ＿ｃｌａｓｓ＞
ｕｎｉｔ＿ｃｌａｓｓ＿ｉｄ＝’ＱＩＦ２’
ｕｐｄａｔｅ＿ｒｕｌｅ＝’ｖ＋＝０．５＊（（０．０４＊ｖ＋５）．＊ｖ＋１４０−ｕ＋Ｉ）；
ｖ＋＝０．５＊（（０．０４＊ｖ＋５）．＊ｖ＋１４０−ｕ＋Ｉ）；’
ｅｖｅｎｔ＿ｃｏｎｄｉｔｉｏｎ＝’ｖ＞３０’
ａｆｔｅｒ＿ｅｖｅｎｔ＿ｒｕｌｅ＝’ｖ＝−６５；’
ｉｎｉｔｉａｌｉｚａｔｉｏｎ＝’ｆｌｏａｔ  ｖ＝−６５；  ｆｌｏａｔ  ｕ＝０．２＊ｖ；  ｆｌｏａt  １＝０'
＜ｕｎｉｔ＿ｃｌａｓｓ  ｏｆ  （ＱＩＦ２）＞
ｕｎｉｔ＿ｃｌａｓｓ＿ｉｄ＝’ｅｘｃ’
ｕｐｄａｔｅ＿ｒｕｌｅ＝’ｕ＋＝０．０２．＊（０．２＊ｖ−ｕ）；’
ａｆｔｅｒ＿ｅｖｅｎｔ＿ｒｕｌｅ＝’ｕ＋＝８；  ｌａｓｔ＿ｓｐｉｋｅ＝ｎｏｗ’
ｉｎｉｔｉａｌｉｚａｔｉｏｎ＝’ｉｎｔ  ｌａｓｔ＿ｓｐｉｋｅ＝−１０００；’
＜ｕｎｉｔ＿ｃｌａｓｓ  ｏｆ  （ＱＩＦ２）＞
ｕｎｉｔ＿ｃｌａｓｓ＿ｉｄ＝’ｉｎｈ’
ｕｐｄａｔｅ＿ｒｕｌｅ＝’ｕ＋＝０．１．＊（０．２＊ｖ−ｕ）；’
ａｆｔｅｒ＿ｅｖｅｎｔ＿ｒｕｌｅ＝’ｕ＋＝２；’
Ｎｅ＊Ｍ  ｒｅｃｏｒｄｓ  ｏｆ  ｔｈｅ  ｃｌａｓｓ  （ｅｘｃ−＞ｅｘｃ）
＜ｓｙｎａｐｓｅ  ｏｆ  （ＧＬＵ）＞
ｐｒｅ＝ｉ        ／／  ｉ＝１：Ｎｅ
ｐｏｓｔ＝ｊ        ／／１とＮとの間の乱数
ｄｅｌａｙ        ／／１とＤとの間の乱数
クラスのＮｉ＊Ｍ個のレコード
＜ｓｙｎａｐｓｅ  ｏｆ  （ＧＡＢＡ）＞
ｐｒｅ＝ｉ        ／／ｉ＝Ｎｅ＋１：Ｎ
ｐｏｓｔ＝ｊ        ／／１とＮｅとの間の乱数
＜ｓｙｎａｐｔｉｃ＿ｃｌａｓｓ＞
ｓｙｎａｐｔｉｃ＿ｃｌａｓｓ＿ｉｄ＝’ＧＬＵ’
ｉｎｉｔｉａｌｉｚａｔｉｏｎ＝’ｆｌｏａｔ  ｗ＝６；  ｆｌｏａｔ  ｓｄ＝０；  ｉｎｔ  ｌａｓｔ＿ａｃｔｉｖｅ＝−１０００；’
ｄｅｌａｙ＝１        ／／デフォルト遅延（インスタンス中で指定されていない場合）
＜ｓｙｎａｐｔｉｃ＿ｃｌａｓｓ＞
ｓｙｎａｐｔｉｃ＿ｃｌａｓｓ  ｉｄ＝’ＧＡＢＡ’
ｄｅｌａｙ＝１        ／／すべてのシナプスについて同じ
＜ｐｒｅｓｙｎａｐｔｉｃ＿ｅｖｅｎｔ  ｏｆ  （ＥＰＳＰ＿ｐｌｕｓ＿ＬＴＤ）＞
ｓｙｎａｐｔｉｃ＿ｃｌａｓｓ＝’ＧＬＵ’
ｐｏｓｔ＿ｕｎｉｔ＿ｃｌａｓｓ＝’ＱＩＦ２’        ／／すなわち、ｅｘｃおよびｉｎｈ
＜ｐｒｅｓｙｎａｐｔｉｃ＿ｅｖｅｎｔ  ｏｆ  （Ｉｎｈｉｂｉｔｉｏｎ）＞
ｓｙｎａｐｔｉｃ＿ｃｌａｓｓ＝’ＧＡＢＡ’
ｐｏｓｔ＿ｕｎｉｔ＿ｃｌａｓｓ＝’ＱＩＦ２’    ／／すなわち、ｅｘｃおよびｉｎｈ
＜ｐｏｓｔ−ｓｙｎａｐｔｉｃ＿ｅｖｅｎｔ  ｏｆ  （ＬＴＰ）＞
ｓｙｎａｐｔｉｃ＿ｃｌａｓｓ＝’ＧＬＵ’
ｐｏｓｔ＿ｕｎｉｔ＿ｃｌａｓｓ＝’ｅｘｃ’
＜ｅｖｅｎｔ＿ｒｕｌｅ＞
ｅｖｅｎｔ＿ｒｕｌｅ＿ｉｄ＝’ＥＰＳＰ＿ｐｌｕｓ＿ＬＴＤ’
ｒｕｌｅ＝’Ｉ＋＝ｗ；  ｓｄ−＝ＬＴＤ（ｎｏｗ−ｌａｓｔ＿ｓｐｉｋｅ）；  ｌａｓｔ＿ｅｖｅｎｔ＝ｎｏｗ’
ｉｎｉｔｉａｌｉｚａｔｉｏｎ＝’ＬＴＤ＝｛ａｒｒａｙ｝；’
／／ＬＴＰ＿Ａ＝１．２から０への指数関数的減衰、ただしＬＴＤ＿ｔａｕ＝２０ｍｓ
＜ｅｖｅｎｔ＿ｒｕｌｅ＞
ｅｖｅｎｔ＿ｒｕｌｅ＿ｉｄ＝’ＬＴＰ’
ｒｕｌｅ＝’ｓｄ＋＝ＬＴＰ（ｎｏｗ−ｌａｓｔ＿ａｃｔｉｖｅ）；’
ｉｎｉｔｉａｌｉｚａｔｉｏｎ＝’ＬＴＰ＝｛ａｒｒａｙ｝；’
＜ｅｖｅｎｔ＿ｒｕｌｅ＞
ｅｖｅｎｔ＿ｒｕｌｅ＿ｉｄ＝’Ｉｎｈｉｂｉｔｉｏｎ’
ｒｕｌｅ＝’Ｉ−＝５；’
ｉｎｉｔｉａｌｉｚａｔｉｏｎ＝’’
＜ｂａｃｋｇｒｏｕｎｄ＿ｐｒｏｃｅｓｓ＞
ｉｄ＝’Ｗｅｉｇｈｔ＿ｕｐｄａｔｅ’；
ｅｘｅｃｕｔｉｏｎ＿ｃｏｎｄｉｔｉｏｎ＝’ｎｏｗ％１０００＝＝０’
ｄｏｍａｉｎ＝’ＧＬＵ’
ｕｐｄａｔｅ＿ｒｕｌｅ＝’ｗ＋＝０．０１＋ｓｄ；  ｉｆ  （ｗ＜０）  ｗ＝０；  ｉｆ  （ｗ＞１０）  ｗ＝１０；  ｓｄ＊＝０．９’
＜ｂａｃｋｇｒｏｕｎｄ＿ｐｒｏｃｅｓｓ＞
ｉｄ＝’ｒａｎｄｏｍｉｎｐｕｔ’
ｕｐｄａｔｅ＿ｒｕｌｅ＝’ｅｘｃ［ｉｎｔ（ｆｌｏｏｒ（ｒａｎｄ（）／ＲＡＮＤ＿ＭＡＸ＊Ｎ））］．ｖ＝３０；’
リスティング  １
[0137]（上記のリスティング１に示されたような）モデルの低レベル記述は、ネットワークアーキテクチャを一意に定義するのに必要である情報を含んでいることがある。リスティング１に示された記述は、個々のユニットのシナプス結合、プレシナプス結合、ポストシナプスターゲット、および／またはモデルシミュレーションを実施するために有用な他の情報のうちの１つまたは複数のための十分なレベルの詳細を与えないことがあるので、とりわけ、モデルシミュレーションを実施するのには好適でないことがある。リンカは、低レベルＥＮＤ記述を使用し（たとえば、図１のリンカ１０８）、（ｉ）ユニット間のリンクの一部または全部をポピュレートし、（ｉｉ）モデルシミュレーション中の計算エンジンによるデータおよびコードのローディングを可能にするように、コードおよびデータをバイナリまたは何らかの他の低レベル（機械）フォーマットで保存する。シミュレーション実行（ランタイム）中に、エンジンは、任意の保存ポイントからのモデル実行の高速再始動を可能にするために、同じ（または異なる）フォーマットで（たとえば、レジスタおよびメモリ内容、プログラムカウンタ、および／またはエンジン実行状態に関連する情報を備えるエンジン実行状態を保存している）保存ポイントを作成し得る。
【０１３５】
[0138]一実装形態では、計算エンジンはシングルプロセッサコンピュータを備え得る。エンジンは、所定のタイムステップでいくつかの計算サイクルを（ネットワークを通してステップを）実施する。いくつかの実装形態では、タイムステップは１ミリ秒に設定され得る。
【０１３６】
[0139]いくつかの実装形態では、計算エンジンは、マルチコア処理プラットフォーム、シングル／マルチコアプロセッサのアレイ、ＦＰＧＡ、あるいは１つまたは複数の組込みプロセッサコアをもつプログラマブル論理ファブリック上に実装され得る。
【０１３７】
[0140]低レベルＥＮＤ記述中の個人＜＿ｃｌａｓｓ＞インスタンスは別個のループ実行ループに対応し得る。個々の実行ループ／サイクル内の計算は、マルチコア実装のために最適化された順序で並列に実施され得る。いくつかのサイクルは他のサイクルと並列に実施され得る。ｇｉｖｅｎ＿ｃｏｄｅが「プリコンパイル」され、エンジン中の適切な場所に含められ得る。
【０１３８】
[0141]モデルシミュレーション中に実行効率を達成するために、計算エンジンを実装する神経形態学的ハードウェアは、以下の特徴、すなわち、（ｉ）シナプス放出など、ニューロンダイナミクスおよび基本シナプスイベントの高速特殊専門処理、（ｉｉ）低速シナプス更新、ターンオーバ、再配線、短期可塑性、および／または他のバックグラウンドプロセスなど、計算バックグラウンドプロセスを実施するための汎用プロセッサ（たとえば、ＡＲＭコア）、および／または他の特徴のうちの１つまたは複数を有し得る。そのような構成は、大部分のシナプスに対して（ユーザによる頻繁な変更を必要とする可能性が低い）基本シナプス処理の高速実行を可能にするが、より小さい部分のシナプスに対してプロプライエタリブティック処理（ｐｒｏｐｒｉｅｔａｒｙ  ｂｏｕｔｉｑｕｅ  ｐｒｏｃｅｓｓｉｎｇ）の実装を可能にする。
【０１３９】
[0142]「最小命令セット」実装の１つの目的は、低レベル記述フォーマットを与えることであり得、（ｉ）メモリ割振りを宣言するがアクションを含んでいない、ユニット（ニューロン）定義と、（ｉｉ）ユニットを結合するが、それら自体のメモリを割り振らない、接合と、（ｉｉｉ）アクションをユニットまたは接合とリンクする、ルールとを備え得る。いくつかの実装形態では、アクションはクロック駆動型であり得る（すなわち、ニューロンモードシミュレーション実行の個々のタイムステップで適切なユニットのために実行され得る）。いくつかの実装形態では、アクションはイベント駆動型であり得る（すなわち、アクションは、たとえば、ユニットがスパイクを発火させたときに実施されるアクションをシミュレータに通知する、ユニットクラスのために宣言されたイベント条件を介して、ユニットによってトリガされ得る。そのようなイベント（スパイク）は、したがって、他のユニットまたは接合に適用され得るイベントベースルールの実行をトリガする。
【０１４０】
[0143]ＥＮＤフレームワーク内で、シナプスは、シナプス荷重、遅延、ターゲット宛先、および／またはシナプス機能に関連する他の情報など、シナプス機能に関連する様々な変数を記憶するように構成されたメモリを備えるユニットとして宣言され得る。シナプスは、伝達物質を放出する準備ができているプレシナプス機械と見なされ得る。ユニット更新の場合と同様に、シナプス更新ルール（たとえば、維持（ｍａｉｎｔｅｎａｎｃｅ）‘ｗ＋＝ｓｄ；ｓｄ＊＝０．９’）はクロックベースまたはイベントベースであり得る。プレシナプスニューロンに対応するユニットにおいてスパイクイベントによってシナプスアクション（たとえば、神経伝達物質の放出）がトリガされ得る。放出を記述しているルールは、ＳＴＤＰの抑圧部分と、短期可塑性プロセスのいずれかとを実施することができる。ＳＴＤＰのＬＴＰ部分は、ポストシナプスニューロンに対応するユニットによってトリガされ得る別個の他のルールによって実現され得る。接合は、シナプスとポストシナプスユニットとの間の結合を指定する。
【０１４１】
[0144]ＥＮＤの最小命令セットの例は、任意のニューラルネットワークを定義するのに十分な記述容量を有する単純イベントベースのコンピュータの構成を可能にする。
【０１４２】
[0145]以下で説明するＥＮＤの最小命令セットの例のクラスおよび変数のシンタックスおよび構造は、ＥＮＤ１．０フォーマットと同様であり得、上記で説明している。
【０１４３】
＜ｕｎｉｔ  ｏｆ  ｕｎｉｔ＿ｃｌａｓｓ＞  
ｕｎｉｔ＿ｉｄ
ｉｎｉｔｉａｌｉｚａｔｉｏｎ
＜ｕｎｉｔ＿ｃｌａｓｓ  （ｏｆ  ｕｎｉｔ＿ｃｌａｓｓ）＞  
ｕｎｉｔ＿ｃｌａｓｓ＿ｉｄ 
ｉｎｉｔｉａｌｉｚａｔｉｏｎ
＜ｊｕｎｃｔｉｏｎ  ｏｆ  ｊｕｎｃｔｉｏｎ＿ｃｌａｓｓ＞
ｊｕｎｃｔｉｏｎ＿ｉｄ
ｕｎｉｔ＿１
ｕｎｉｔ＿２
＜ｊｕｎｃｔｉｏｎ＿ｃｌａｓｓ  （ｏｆ  ｊｕｎｃｔｉｏｎ＿ｃｌａｓｓ）＞
ｊｕｎｃｔｉｏｎ＿ｃｌａｓｓ＿ｉｄ
ｕｎｉｔ＿ｃｌａｓｓ＿１
ｕｎｉｔ＿ｃｌａｓｓ＿２
＜ｒｕｌｅ  ｏｆ  ｒｕｌｅ＿ｃｌａｓｓ＞  
ｓｕｂｊｅｃｔ＿ｉｄ
[0146]このルールに従わなければならないユニットまたは接合のｉｄ
ｔｒｉｇｇｅｒ＿ｉｄ
[0147]（イベントベースルールについて）対象に対してルールをトリガするユニットのｉｄ。省略された場合、このルールはクロックベースであり得る。
【０１４４】
Ｄｅｌａｙ
[0148]このルールが実行されるべき遅延。省略された場合、遅延なしであり得る
＜ｒｕｌｅ＿ｃｌａｓｓ  （ｏｆ  ｒｕｌｅ＿ｃｌａｓｓ）＞
ｒｕｌｅ＿ｃｌａｓｓ＿ｉｄ
ｅｘｅｃｕｔｉｏｎ＿ｃｏｎｄｉｔｉｏｎ
[0149]たとえば、‘ｎｏｗ％１０−０’。省略された場合、ルールは個々のタイムステップで実行され得る
ｓｕｂｊｅｃｔ＿ｃｌａｓｓ
[0150]このルールが適用され得るクラス。サブジェクトクラス（ｓｕｂｊｅｃｔ  ｃｌａｓｓ）はユニットまたは接合であり得ることに気づかれたい
ｃｏｄｅ
ｅｖｅｎｔ＿ｃｏｎｄｉｔｉｏｎ
ｉｎｉｔｉａｌｉｚａｔｉｏｎ
例２：スプネット
／／最初に、ニューロンのためにメモリを割り振る
＜ｕｎｉｔ＿ｃｌａｓｓ＞
ｕｎｉｔ＿ｃｌａｓｓ＿ｉｄ＝’ｎｅｕｒｏｎ’
ｉｎｉｔｉａｌｉｚａｔｉｏｎ＝’ｆｌｏａｔ  ｖ＝−６５；  ｆｌｏａｔ  ｕ＝０；  ｆｌｏａｔ  Ｉ＝０；  ｉｎｔ  ｌａｓｔ＿ｓｐｉｋｅ＝−１０００；’
＜ｕｎｉｔ＿ｃｌａｓｓ  ｏｆ  ｎｅｕｒｏｎ＞
ｕｎｉｔ＿ｃｌａｓｓ＿ｉｄ＝’ｅｘｃ’
＜ｕｎｉｔ＿ｃｌａｓｓ  ｏｆ  ｎｅｕｒｏｎ＞
ｕｎｉｔ＿ｃｌａｓｓ＿ｉｄ＝’ｉｎｈ’
＜ｕｎｉｔ  ｏｆ  ｅｘｃ＞
ｕｎｉｔ＿ｉｄ＝１：８００  
＜ｕｎｉｔ  ｏｆ  ｉｎｈ＞
ｕｎｉｔ＿ｉｄ＝１：２００
／／ここで、ニューロンにダイナミクスを割り当てる（クロックベースルール）
＜ｒｕｌｅ＿ｃｌａｓｓ＞
ｒｕｌｅ＿ｃｌａｓｓ＿ｉｄ＝’ＱＩＦ’
ｓｕｂｊｅｃｔ＿ｃｌａｓｓ＝’ｎｅｕｒｏｎ’
ｃｏｄｅ＝’ｖ＋＝０．５＊（（０．０４＊ｖ＋５）．＊ｖ＋１４０−ｕ＋Ｉ）；  ｖ＋＝０．５＊（（０．０４＊ｖ＋５）．＊ｖ＋１４０−ｕ＋Ｉ）；’
ｅｖｅｎｔ＿ｃｏｎｄｉｔｉｏｎ＝’ｖ＞３０’
＜ｒｕｌｅ＿ｃｌａｓｓ  ｏｆ  ＱＩＦ＞
ｒｕｌｅ＿ｃｌａｓｓ＿ｉｄ＝’ＲＳ’
ｓｕｂｊｅｃｔ＿ｃｌａｓｓ＝’ｅｘｃ’
ｃｏｄｅ＝’ｕ＋＝０．０２．＊（０．２＊ｖ−ｕ）；’
＜ｒｕｌｅ  ｏｆ  ＲＳ＞
ｓｕｂｊｅｃｔ＿ｉｄ＝ｅｘｃ（１：８００）
＜ｒｕｌｅ＿ｃｌａｓｓ  ｏｆ  ＱＩＦ＞
ｒｕｌｅ＿ｃｌａｓｓ＿ｉｄ＝’ＦＳ’
ｓｕｂｊｅｃｔ＿ｃｌａｓｓ＝’ｉｎｈ’
ｃｏｄｅ＝’ｕ＋＝０．１．＊（０．２＊ｖ−ｕ）；’
＜ｒｕｌｅ  ｏｆ  ＦＳ＞
ｓｕｂｊｅｃｔ＿ｉｄ＝ｉｎｈ（１：２００）
／／スパイク後休止を指定する（イベントベースルール）
＜ｒｕｌｅ＿ｃｌａｓｓ＞
ｒｕｌｅ＿ｃｌａｓｓ＿ｉｄ＝’ｒｅｓｅｔ’
ｃｏｄｅ＝’ｖ＝−６５；  ｌａｓｔ＿ｓｐｉｋｅ＝ｎｏｗ；’
＜ｒｕｌｅ＿ｃｌａｓｓ  ｏｆ  ｒｅｓｅｔ＞
ｒｕｌｅ＿ｃｌａｓｓ＿ｉｄ＝’ＲＳ＿ｒｅｓｅｔ’
ｓｕｂｊｅｃｔ＿ｃｌａｓｓ＝’ｅｘｃ’
ｃｏｄｅ＝’ｕ＋＝８；’
＜ｒｕｌｅ  ｏｆ  ＲＳ＿ｒｅｓｅｔ＞
ｓｕｂｊｅｃｔ＿ｉｄ＝ｅｘｃ（１：８００）
ｔｒｉｇｇｅｒ＿ｉｄ＝ｅｘｃ（１：８００）
＜ｒｕｌｅ＿ｃｌａｓｓ  ｏｆ  ｒｅｓｅｔ＞
ｒｕｌｅ＿ｃｌａｓｓ＿ｉｄ＝’ＦＳ＿ｒｅｓｅｔ’
ｓｕｂｊｅｃｔ＿ｃｌａｓｓ＝’ｉｎｈ’
ｃｏｄｅ＝’ｕ＋＝２；’
＜ｒｕｌｅ  ｏｆ  ＦＳ＿ｒｅｓｅｔ＞
ｓｕｂｊｅｃｔ＿ｉｄ＝ｉｎｈ（１：２００）
ｔｒｉｇｇｅｒ＿ｉｄ＝ｉｎｈ（１：２００）
／／シナプスを指定する。
【０１４５】
／／抑制性シナプスが可塑的でない。
【０１４６】
＜ｒｕｌｅ＿ｃｌａｓｓ＞
ｒｕｌｅ＿ｃｌａｓｓ＿ｉｄ＝’ｉｎｈｉｂｉｔｉｏｎ’
ｓｕｂｊｅｃｔ＿ｃｌａｓｓ＝’ｎｅｕｒｏｎ’
ｒｕｌｅ＝’Ｉ−＝６’
／／以下のフォームの２００＊１００個のレコード、各々がｉｎｈシナプスを指定する
＜ｒｕｌｅ  ｏｆ  ｉｎｈｉｂｉｔｉｏｎ＞
ｓｕｂｊｅｃｔ＿ｉｄ＝｛ｅｘｃまたはｉｎｈユニット｝
ｔｒｉｇｇｅｒ＿ｉｄ＝｛ｉｎｈユニットのインデックス｝
／／興奮性シナプスが可塑的であり、したがってそれらの荷重が記憶される
＜ｕｎｉｔ＿ｃｌａｓｓ＞
ｕｎｉｔ＿ｃｌａｓｓ＿ｉｄ＝’ｓｙｎａｐｓｅ’
ｉｎｉｔｉａｌｉｚａｔｉｏｎ＝’ｆｌｏａｔ  ｗ＝５；  ｆｌｏａｔ  ｓｄ＝０；  ｉｎｔ  ｌａｓｔ＿ａｃｔｉｖｅ＝−１０００；’
＜ｕｎｉｔ  ｏｆ  ｓｙｎａｐｓｅ＞
ｕｎｉｔ＿ｉｄ＝１：８００００
／／シナプスごとに、それのターゲットを指定する。これは接合を介して行われる
<ｊｕｎｃｔｉｏｎ＿ｃｌａｓｓ＞
ｊｕｎｃｔｉｏｎ＿ｃｌａｓｓ＿ｉｄ＝’ＧＬＵ’
ｕｎｉｔ＿ｃｌａｓｓ＿１＝’ｓｙｎａｐｓｅ’
ｕｎｉｔ＿ｃｌａｓｓ＿２＝’ｎｅｕｒｏｎ’
／／シナプスを割り当てる、すなわち、フォームの８００００個のレコードを作成する
＜ｊｕｎｃｔｉｏｎ  ｏｆ  ＧＬＵ＞
ｊｕｎｃｔｉｏｎ＿ｉｄ＝１：８００００
ｕｎｉｔ＿１＝１：８００００
ｕｎｉｔ＿２＝｛ランダムニューロンインデックス｝
／／どのシナプス前ニューロンがどのシナプスをトリガするかを指定する
＜ｒｕｌｅ＿ｃｌａｓｓ＞
ｒｕｌｅ＿ｃｌａｓｓ＿ｉｄ＝’ＥＰＳＰ＿ｐｌｕｓ＿ＬＴＤ’
ｓｕｂｊｅｃｔ＿ｃｌａｓｓ＝’ＧＬＵ’
ｃｏｄｅ＝’Ｉ＋＝ｗ；ｓｄ−＝ＬＴＤ（ｎｏｗ−ｌａｓｔ＿ｓｐｉｋｅ）；  ｌａｓｔ＿ａｃｔｉｖｅ＝ｎｏｗ；’
ｉｎｉｔｉａｌｉｚａｔｉｏｎ＝’ＬＴＤ＝｛ａｒｒａｙ｝’
＜ｒｕｌｅ  ｏｆ  ＥＰＳＰ＿ｐｌｕｓ＿ＬＴＤ＞
ｓｕｂｊｅｃｔ＿ｉｄ＝１：８００００
ｔｒｉｇｇｅｒ＿ｉｄ＝ｅｘｃ（ｒａｎｄ（８００））
ｄｅｌａｙ＝ｒａｎｄ（２０）
／／ポストユニットが発火したとき、ＬＴＰを指定する
＜ｒｕｌｅ＿ｃｌａｓｓ＞
ｒｕｌｅ＿ｃｌａｓｓ＿ｉｄ＝’ＬＴＰ’
ｓｕｂｊｅｃｔ＿ｃｌａｓｓ＝’ｓｙｎａｐｓｅ’
ｒｕｌｅ＝’ｓｄ＋＝ＬＴＰ（ｎｏｗ−ｌａｓｔ＿ａｃｔｉｖｅ）’
ｉｎｉｔｉａｌｉｚａｔｉｏｎ＝’ＬＴＰ＝｛ａｒｒａｙ｝’
＜ｒｕｌｅ  ｏｆ  ＬＴＰ＞
ｓｕｂｊｅｃｔ＿ｉｄ＝１：８００００
ｔｒｉｇｇｅｒ＿ｉｄ＝｛対応するシナプス後ニューロン、ただし、これは原則として他のどんなものでもあり得る｝
／／ｓｄ更新を実施する（維持）
＜ｒｕｌｅ＿ｃｌａｓｓ＞
ｒｕｌｅ＿ｃｌａｓｓ＿ｉｄ＝’ｓｙｎａｐｔｉｃ＿ｍａｉｎｔｅｎａｎｃｅ’
ｓｕｂｊｅｃｔ＿ｃｌａｓｓ＝’ｓｙｎａｐｓｅ’
ｅｘｅｃｕｔｉｏｎ＿ｃｏｎｄｉｔｉｏｎ＝’ｎｏｗ％１０００＝＝０’
ｃｏｄｅ＝’ｗ＋＝０．０１＋ｓｄ；  ｉｆ  （ｗ＜０）  ｗ＝０；  ｉｆ  （ｗ＞１０）  ｗ＝１０；  ｓｄ＊＝０．９’
＜ｒｕｌｅ  ｏｆ  ｓｙｎａｐｔｉｃ＿ｍａｉｎｔｅｎａｎｃｅ＞
ｓｕｂｊｅｃｔ＿ｉｄ＝１：８００００
／／最後に、時間ステップのｍｓごとにニューロンを発火させるランダム視床入力
＜ｒｕｌｅ＿ｃｌａｓｓ＞
ｒｕｌｅ＿ｃｌａｓｓ＿ｉｄ＝’ｉｎｐｕｔ’
ｃｏｄｅ＝’ｆｉｒｅ（｛ランダムニューロン｝）；’
＜ｒｕｌｅ  ｏｆ  ｉｎｐｕｔ＞  ／／パラメータなし。これは入力をインスタンス化するためだけに必要である
リスティング  ２
[0151]ＥＮＤ２．０フォーマットは、上記で説明したＥＮＤ１．０フォーマットと比較して以下の特徴を備え得る。
【０１４７】
・継承なし（オブジェクトクラスなし）、
・バックグラウンドプロセスなし（代わりにグローバル変数が使用される）、
・別個のプレシナプス／ポストシナプスルールなし（一部または全部がシナプスタイプの一部であり得る）
・個々のルールが他のルールおよびコード文字列、ならびに実行条件を含み得る
＜ｒｕｌｅ＞
ｎａｍｅ
ｅｘｅｃ＿ｃｏｎｄｉｔｉｏｎ
このルールを実行すべきか否かを決定するために個々のステップにおいて評価され得る条件。これは、ストリング、たとえば、‘ｎｏｗ％１０−０’または‘ＤＡ＞０．１’であるか、あるいはルール名への参照であり得る（これは、条件がいくつかのグローバルテーブルを必要とする場合に有用である）。ない場合、ルールは個々の実行タイムステップについて適用される。この条件は、以下のコードにおいて定義されているどんな変数にもアクセスし得る。
【０１４８】
Ｃｏｄｅ
ルールが発生したときに何を行うべきかを指定するコードストリングまたは他のルール名。たとえば、‘Ｉ＋＝ｗ’または‘ｖ＋＝ｔａｕ＊（２＊（ｖ＋７０）＊（ｖ＋５０）−ｕ＋Ｉ）／２０；ｕ＋＝ｔａｕ＊０．１＊（２＊（ｖ＋７０）−ｕ）；’。さらに、ルールの出力は、スパイク条件において使用され得る論理（真／偽）ステートメントであり得る。ここでは複数のルール名が与えられ得る。それらは与えられた順序で実行され得る。
【０１４９】
ｉｎｉｔ
このルールにおいて使用されるグローバル変数を宣言し、その値を設定する。たとえば、‘ＳＴＤＰ＝１，．．，１；ＤＡ＝０’または‘ＳＴＰ＝１，．．．，１；ＬＴＤ＝｛．．．｝’。任意のインスタンス変数がｕｎｉｔ＿ｔｙｐｅおよびｓｙｎａｐｔｉｃ＿ｔｙｐｅにおいて定義され得る。リンカは、異なるユニットタイプおよびｓｙｎａｐｔｉｃ＿ｔｙｐｅにおいて定義されている個々のデータタイプがルールに関して整合し得ることを検査する。
【０１５０】
＜ｕｎｉｔ＿ｔｙｐｅ＞
ｎａｍｅ
ｕｐｄａｔｅ＿ｒｕｌｅ
個々のタイムステップで実行され得るコードストリングまたはルール名。ここでは複数のルールが与えられ得る。それらは指定された順序で実行され得る。
【０１５１】
ｅｖｅｎｔ＿ｃｏｎｄｉｔｉｏｎ
個々のタイムステップで実行される、スパイクを検出するために必要とされる論理ステートメントまたはルール名、たとえば、‘ｖ＞３０’
ｅｖｅｎｔ＿ｒｕｌｅ
スパイクが検出されたときに実行され得るコードまたはルール名。たとえば、‘ｖ＝−６５；ｕ＝ｕ−８；’。
【０１５２】
Ｉｎｉｔ
ユニットにおいて使用される個々の変数およびパラメータ（すなわち、インスタンス変数）を宣言し、それらの初期値を設定する。リンカ（コンパイラ）は、これらの変数が、同じルールを使用する個々のユニットタイプの間で整合するデータタイプを有することを検査する、たとえば、‘ａｎａｌｏｇ  ｖ＝０；ａｎａｌｏｇ  ｇ＿ＡＭＰＡ＝０；’
＜ｕｎｉｔ  ｏｆ  ｕｎｉｔ＿ｔｙｐｅ＞
ｕｎｉｔ＿ｉｄ
ｉｎｉｔ
[0152]タイプの定義におけるデフォルト値とは異なり得るパラメータおよび変数値を設定する。これら、個々のものは、宣言され、ｕｎｉｔ＿ｔｙｐｅの定義におけるデフォルト値を用いてすでに初期化されている必要がある
＜ｊｕｎｃｔｉｏｎ＿ｔｙｐｅ＞
ｎａｍｅ
ｕｐｄａｔｅ＿ｒｕｌｅ
ｉｎｉｔ
＜ｊｕｎｃｔｉｏｎ  ｏｆ  ｊｕｎｃｔｉｏｎ＿ｔｙｐｅ＞
ｕｎｉｔ＿１
ｕｎｉｔ＿２
ｉｎｉｔ
＜ｓｙｎａｐｔｉｃ＿ｔｙｐｅ＞
ｔｙｐｅ
ｐｒｅｓｙｎａｐｔｉｃ＿ｅｖｅｎｔ＿ｒｕｌｅ
プレシナプスニューロンが発火したときにトリガされ得るコードまたはルール名。これはＬＴＰおよびＰＳＰに対処する
ｐｏｓｔ−ｓｙｎａｐｔｉｃ＿ｅｖｅｎｔ＿ｒｕｌｅ
[0153]ポストシナプスユニットの発火によってトリガされるコードまたはルール名。これはＳＴＤＰのＬＴＤ部分に対処する
ｕｐｄａｔｅ＿ｒｕｌｅ
[0154]個々のタイムステップで実行され得るコードストリングまたはルール名（たとえば、ｅｘｅｃｕｔｉｏｎ＿ｃｏｎｄｉｔｉｏｎを有し得、まれにしか実行されないことがある）。ここでは複数のルールが与えられ得る。それらは指定された順序で実行され得る。これは、バックグラウンドプロセスの代わりに、シナプス維持のために必要とされ得る。
【０１５３】
＜ｓｙｎａｐｓｅ  ｏｆ  ｓｙｎａｐｔｉｃ＿ｔｙｐｅ＞
ｐｒｅ
ｐｏｓｔ
ｄｅｌａｙ
ｉｎｉｔ
＜ｇｌｏｂａｌ＿ｖａｒｉａｂｌｅ＞
ｕｐｄａｔｅ＿ｒｕｌｅ
[0155]グローバル変数を初期化し、それらを更新するコードを実行するルール名。コードは、ユニット、接合、またはシナプスの特定のインスタンスへのアクセスを有し得る。最も単純な場合、ルールは、単にインスタンスの値に基づくグローバル変数の値の割当てであり得る。
【０１５４】
[0156]インスタンス変数は＜ｒｕｌｅｓ＞において使用され得るが、それらは＜ｕｎｉｔ＿ｔｙｐｅ＞、＜ｊｕｎｃｔｉｏｎ＿ｔｙｐｅ＞、および＜ｓｙｎａｐｔｉｃ＿ｔｙｐｅ＞において定義され得ることに気づかれたい。インスタンス変数の個々の宣言はルールの一部または全部に整合し得ると仮定され得る。以下の２つの問題があり得る。
【０１５５】
[0157]変数がルールにおいて使用され得るが、ｕｎｉｔ＿ｔｙｐｅまたはｊｕｎｃｔｉｏｎ＿ｔｙｐｅまたはｓｙｎａｐｔｉｃ＿ｔｙｐｅにおいて定義されていない状況は、以下のように処理され得る。
【０１５６】
・リンカがエラーを発生し得る
・リンカが変数のデフォルトタイプ、たとえば、「ａｎａｌｏｇ」を使用する
・リンカはルールの他の使用を調べるように命令され得、変数がどこかで定義されている場合、リンカはそれの定義を拡張する。
【０１５７】
[0158]いくつかの実装形態では、同じルールを使用する２つ以上のｕｎｉｔ＿ｔｙｐｅにおいて、変数は別様に定義され得る。この場合も、以下のようにこれに対する複数の可能な解決策があり得る。
【０１５８】
リンカがエラーを発生する
リンカが定義のうちの１つを他の定義に変換する。たとえば、定義の半順序集合、たとえば、ｉｎｔ８＜ｉｎｔ１６＜ｉｎｔ３２＜ｉｎｔ６４＜ａｎａｌｏｇがあり得、したがって、２つの定義は共通の１つの定義に変換され得る
リンカがルールを、異なるタイプの変数に作用する２つのルールｒｕｌｅ＿ａおよびｒｕｌｅ＿ｂに分割する
例２：グローバル変数
＜ｒｕｌｅ＞
ｎａｍｅ＝’ＤＡ＿ｕｐｄａｔｅ’
ｃｏｄｅ＝’ＤＡ＝ｅｘｃ［３］．ｖ＋ｉｎｈ［１］．ｕ’
ｉｎｉｔ＝’ａｎａｌｏｇ  ＤＡ＝０’
＜ｇｌｏｂａｌ＿ｖａｒｉａｂｌｅ＞
ｕｐｄａｔｅ＿ｒｕｌｅ＝’ＤＡ＿ｕｐｄａｔｅ’
例３：スプネット
[0159]標準スプネットネットワークはＮ＝１０００個のニューロンを有する。それらの中にＮｅ＝８００個の興奮性ニューロンとＮｉ＝２００個の抑制性ニューロンとがあり得、ニューロンごとにＭ＝１００個のシナプスがある。一部または全部の興奮性シナプスは可塑性（ＳＴＤＰ）であり得、ランダム遅延は１ｍｓとＤ＝２０ｍｓとの間である。抑制性−＞興奮性シナプスは非可塑性であり得、遅延Ｄ＝１ｍｓを伴う。ｉｎｈ−＞ｉｎｈシナプスはないことがある。モデルの低レベル記述は以下の通りである。
【０１５９】
＜ｒｕｌｅ＞
ｎａｍｅ＝’ＱＩＦ２’／／ｖ式のみが定義される
ｃｏｄｅ＝’ｖ＋＝（０．０４＊ｖ＋５）．＊ｖ＋１４０＋Ｉ；  Ｉ＝４＊ｒａｎｄ（）／／ＭＡＸ＿ＲＡＮＤ'
＜ｒｕｌｅ＞
ｎａｍｅ＝’ｓｐｉｋｅ’
ｃｏｄｅ＝’ｖ＞３０’
＜ｕｎｉｔ＿ｔｙｐｅ＞
ｎａｍｅ＝’ｅｘｃ’
ｕｐｄａｔｅ＿ｒｕｌｅ＝’ｕ＋＝０．０２＊（０．２＊ｖ−ｕ）；  Ｉ−＝ｕ；’
ｕｐｄａｔｅ＿ｒｕｌｅ＝’ＱＩＦ２’
ｅｖｅｎｔ＿ｃｏｎｄｉｔｉｏｎ＝’ｓｐｉｋｅ’
ａｆｔｅｒ＿ｅｖｅｎｔ＿ｒｕｌｅ＝’ｖ＝−６５；  ｕ＋＝８；  ｌａｓｔ＿ｓｐｉｋｅ＝ｎｏｗ’
ｉｎｉｔ＝’ａｎａｌｏｇ  ｖ＝−７０，  ｕ＝−１４，  Ｉ＝０；  ｉｎｔ  ｌａｓｔ＿ｓｐｉｋｅ＝−１０００’
＜ｕｎｉｔ＿ｔｙｐｅ＞
ｎａｍｅ＝’ｉｎｈ’  ／／抑制性ニューロン
ｕｐｄａｔｅ＿ｒｕｌｅ＝’ｕ＋＝０．１．＊（０．２＊ｖ−ｕ）；  Ｉ−＝ｕ；’
ｕｐｄａｔｅ＿ｒｕｌｅ＝’ＱＩＦ２’
ｅｖｅｎｔ＿ｃｏｎｄｉｔｉｏｎ＝’ｓｐｉｋｅ’
ａｆｔｅｒ＿ｅｖｅｎｔ＿ｒｕｌｅ＝’ｖ＝−６５；  ｕ＋＝２；’
ｉｎｉｔ＝’ａｎａｌｏｇ  ｖ＝−７０，  ｕ＝−１４，  Ｉ＝０；  ｉｎｔ  ｌａｓｔ＿ｓｐｉｋｅ＝−１０００’
／／クラスのＮｅ個のレコード
＜ｕｎｉｔ  ｏｆ  ｅｘｃ＞
ｕｎｉｔ＿ｉｄ＝１：８００  ／／  ｉ＝１：Ｎｅ
／／クラスのＮｉ個のレコード
＜ｕｎｉｔ  ｏｆ  ｉｎｈ＞
ｕｎｉｔ＿ｉｄ＝１：２００  ／／  ｉ＝１：Ｎｉ
＜ｒｕｌｅ＞
ｎａｍｅ＝’ＥＰＳＰ＿ｐｌｕｓ＿ＬＴＤ’
ｃｏｄｅ＝’Ｉ＋＝ｗ；  ｓｄ−＝ＬＴＤ（ｎｏｗ−ｌａｓｔ＿ｓｐｉｋｅ）；  ｌａｓｔ＿ａｃｔｉｖｅ＝ｎｏｗ’
ｉｎｉｔ＝’ＬＴＤ＝｛ａｒｒａｙ｝；’
＜ｒｕｌｅ＞
ｎａｍｅ＝’ＬＴＰ’
ｃｏｄｅ＝’ｓｄ＋＝ＬＴＰ（ｎｏｗ−ｌａｓｔ＿ａｃｔｉｖｅ）；’
ｉｎｉｔ＝’ＬＴＰ＝｛ａｒｒａｙ｝；’
＜ｒｕｌｅ＞
ｎａｍｅ＝’Ｓｙｎａｐｔｉｃ＿ｍａｉｎｔｅｎａｎｃｅ’
ｅｘｅｃｕｔｉｏｎ＿ｃｏｎｄｉｔｉｏｎ＝’ｎｏｗ％１０００＝＝０’
ｕｐｄａｔｅ＿ｒｕｌｅ＝’ｗ＋＝０．０１＋ｓｄ；  ｉｆ  （ｗ＜０）  ｗ＝０；  ｉｆ  （ｗ＞１０）  ｗ＝１０；  ｓｄ＊＝０．９’
＜ｓｙｎａｐｔｉｃ＿ｔｙｐｅ＞
ｎａｍｅ＝’ＧＬＵ’
ｐｒｅｓｙｎａｐｔｉｃ＿ｅｖｅｎｔ＿ｒｕｌｅ＝’ＥＰＳＰ＿ｐｌｕｓ＿ＬＴＤ’
ｐｏｓｔ−ｓｙｎａｐｔｉｃ＿ｅｖｅｎｔ＿ｒｕｌｅ＝’ＬＴＰ’
ｕｐｄａｔｅ＿ｒｕｌｅ＝’Ｓｙｎａｐｔｉｃ＿ｍａｉｎｔｅｎａｎｃｅ’
ｉｎｉｔ＝’ａｎａｌｏｇ  ｗ＝６，  ｓｄ＝０；  ｉｎｔ  ｌａｓｔ＿ａｃｔｉｖｅ＝−１０００；’
＜ｓｙｎａｐｔｉｃ＿ｔｙｐｅ＞
ｎａｍｅ＝’ＧＡＢＡ’
ｐｒｅｓｙｎａｐｔｉｃ＿ｅｖｅｎｔ＿ｒｕｌｅ＝’Ｉ−＝５’
ｄｅｌａｙ＝１  ／／デフォルト遅延、すべてのシナプスについて同じ
／／クラス（ｅｘｃ−＞ｅｘｃまたはｉｎｈ）のＮｅ＊Ｍ個のレコード
＜ｓｙｎａｐｓｅ  ｏｆ  ＧＬＵ＞
ｐｒｅ＝ｅｘｃ［ｉ］／／  ｉ＝１：Ｎｅ
ｐｏｓｔ＝ｅｘｃ［ｊ］  または  ｉｎｈ［ｊ］  ／／ランダム、１とＮｅとの間、または１：Ｎｉ
ｄｅｌａｙ        ／／１とＤとの間の乱数
／／１とＤとの間の乱数
＜ｓｙｎａｐｓｅ  ｏｆ  ＧＡＢＡ＞
ｐｒｅ＝ｉｎｈ［ｉ］／／  ｉ＝１：Ｎｉ
ｐｏｓｔ＝ｅｘｃ［ｊ］        ／／１とＮｅとの間の乱数
[0160]ＥＮＤフォーマット３．０は、ＥＮＤ２．０フォーマットと比較していくつかの大きい変更を実装する。これらは以下を含み得る。
【０１６０】
・一方向接合の導入
・（接合変数を変更するように構成された）ｕｐｄａｔｅ＿ｒｕｌｅ、および（ポストシナプスユニット変数を構成変更するための）ｄｅｌｉｖｅｒｙ＿ｒｕｌｅという、２つのルールへの接合ｕｐｄａｔｅ＿ｒｕｌｅの分割
・ｐｏｓｔ−ｓｙｎａｐｔｉｃ＿ｅｖｅｎｔ＿ｒｕｌｅの削除
・（ＳＴＤＰのＬＴＰ部分のための）ｐｒｅｐｏｓｔ＿ｒｕｌｅと、（ＳＴＤＰのＬＴＤ部分のための）ｐｏｓｔｐｒｅ＿ｒｕｌｅと、（ＰＳＰを送出するための）ｄｅｌｉｖｅｒｙ＿ｒｕｌｅとへの、ｐｒｅｓｙｎａｐｔｉｃ＿ｅｖｅｎｔ＿ｒｕｌｅの分割
・（接合およびシナプスのための）ｄｅｌｉｖｅｒｙ＿ｒｕｌｅについてのアトミック加算
・クロックベースシナプス更新ルールの削除（それはｐｏｓｔｐｒｅ＿ｒｕｌｅを介して実装され得る）
・リンクを介してインスタンス変数にグローバル変数を実装すること
[0161]ＥＮＤ３．０における個々の名前およびステートメントは、別段に記載されていない限り、ＥＮＤ２．０におけるものと同様の意味を有し得る。ＥＮＤ３．０では、タイプ‘ｅｘｃ’のインスタンス３を参照するためにシンタックスｅｘｃ：３が使用され得る。
【０１６１】
[0162]ｐｒｅｓｙｎａｐｔｉｃ＿ｅｖｅｎｔ＿ｒｕｌｅは複数の独立したルールを備え得る。本明細書では、指示子ｔ１およびｔ２は、ポストシナプスユニットに到着するプレシナプスニューロンのスパイクの時間を示し（すなわち、伝導遅延はすでにｔ１およびｔ２に組み込まれ得）、ここで、ｔ２は、（‘ｎｏｗ’とも呼ばれる）現在のシミュレーション時間に対応する。
【０１６２】
[0163]ｔ１において発火するプレシナプスニューロンと、ｔ１の後だがｔ２の前またはｔ２において発火する後続のポストシナプスニューロンとをもつパルスのペアに対応するであろう、ＳＴＤＰのＬＴＰ部分を実装するために、ｐｒｅｐｏｓｔ＿ｒｕｌｅはｔ１の前の任意の時間に実行され得る。ｐｒｅｐｏｓｔ＿ｒｕｌｅルールは、システム変数ｐｒｅｐｒｅ（ｎｏｗ−ｔ１）およびｐｒｅｐｏｓｔ（ｐｏｓｔ＿ｓｐｉｋｅ−ｔ１）へのアクセスを有するが、このルールがいつ呼び出されるかが明らかでないことがあるので、このルールは、時間ｔ２（‘ｎｏｗ’）においていかなるポストユニット変数またはシステム変数へのアクセスをも有しない。ｐｒｅｐｏｓｔ＿ｍｏｄｅ＝１１（１対１）である場合、個々のプレシナプススパイクはｐｒｅｐｏｓｔ＿ｒｕｌｅのために１の呼出しをトリガする。ｐｒｅｐｏｓｔ＿ｍｏｄｅ＝１Ａ（１対全部）である場合、個々のプレシナプススパイクは、次のプレシナプススパイクの瞬間まで、（それ自体のｐｒｅｐｏｓｔ変数とともに）後続のポストシナプススパイクのためにｐｒｅｐｏｓｔ＿ｒｕｌｅをトリガする。（与えられれば）パラメータｐｒｅｐｏｓｔ＿ｍａｘは、ｐｒｅｐｏｓｔ＿ｒｕｌｅについてその間にポストシナプススパイクを考察すべき、プレシナプススパイクの後の時間スパンを制限し得る。たとえば、ＳＴＤＰのＬＴＰウィンドウがわずか５０である場合、５０よりも大きい間隔をもつ前後スパイクのペアを考察するポイントはないことがある。いくつかの実装形態では、ｔ１の後の最も早いポストスパイクがｔ１＋ｐｒｅｐｏｓｔ＿ｍａｘよりも後に発生したとき、ｐｒｅｐｏｓｔ＿ｒｕｌｅが呼び出され得る。いくつかの実装形態では、ポストスパイクがｔ１とｔ２との間の期間中に決して発生しない場合、ルールは呼び出されないことがある。
【０１６３】
[0164]前のプレシナプススパイクのタイミング（ｐｒｅｐｒｅ＝ｔ２４１）と最後のｐｏｓｔ＿ｓｙｎａｐｔｉｃスパイクのタイミング（ｐｏｓｔｐｒｅ）とに基づいてシナプス変数を更新するために、ｐｏｓｔｐｒｅ＿ｒｕｌｅは時間ｔ１の直前に実行され得る。前のポストスパイクが発生してから長い時間期間が経過した場合でも、後者の変数は与えられ得る。変数‘ｎｏｗ’は現在時間を指し、ポストシナプスユニットからの個々の変数が読取りのために利用可能であり得る。
【０１６４】
[0165]時間ｔ１において、しかしｐｏｓｔｐｒｅ＿ｒｕｌｅがシナプス荷重を更新した後に、ｄｅｌｉｖｅｒｙ＿ｒｕｌｅが呼び出され得る。ｄｅｌｉｖｅｒｙ＿ｒｕｌｅは、後者のルールの変数の個々の変数へのアクセスを有し、さらに、ポストユニットの変数へのアトミック加算のための書込みアクセスを有する。
【０１６５】
＜ｒｕｌｅ＞
ｎａｍｅ
ｅｘｅｃ＿ｃｏｎｄｉｔｉｏｎ
ｃｏｄｅ
ｉｎｉｔ
＜ｕｎｉｔ＿ｔｙｐｅ＞
ｎａｍｅ
ｕｐｄａｔｅ＿ｒｕｌｅ
ｅｖｅｎｔ＿ｃｏｎｄｉｔｉｏｎ  
ａｆｔｅｒ＿ｅｖｅｎｔ＿ｒｕｌｅ  
ｉｎｉｔ
＜ｕｎｉｔ  ｏｆ  ｕｎｉｔ＿ｔｙｐｅ＞
ｕｎｉｔ＿ｉｄ
ｉｎｉｔ
＜ｊｕｎｃｔｉｏｎ＿ｔｙｐｅ＞  
ｎａｍｅ
ｕｐｄａｔｅ＿ｒｕｌｅ  
ｄｅｌｉｖｅｒｙ＿ｒｕｌｅ  
ｉｎｉｔ
＜ｊｕｎｃｔｉｏｎ  ｏｆ  ｊｕｎｃｔｉｏｎ＿ｔｙｐｅ＞
ｐｒｅ
ｐｏｓｔ
ｉｎｉｔ
＜ｓｙｎａｐｔｉｃ＿ｔｙｐｅ＞
ｔｙｐｅ
ｐｒｅｐｏｓｔ＿ｒｕｌｅ
リスティング  ３
[0166]リスティング３に示されたコードの例では、ルールはｔ２の前にトリガされ得、それはシナプスを変更する。ルールは、シナプス変数の読取りおよび書込みを行うことができるが、ポストシナプスユニットからのいかなる変数へのアクセスをも有しない。ルールはｐｒｅｐｒｅ＝ｔ２４１およびｐｒｅｐｏｓｔ（ｐｏｓｔ  ｓｐｉｋｅ−ｔ１）へのアクセスを有する。
【０１６６】
ｐｒｅｐｏｓｔ＿ｍｏｄｅ
[0167]１１（１対１）および１Ａ（１対全部）という、２つのモードがサポートされ得る。前者はルールをせいぜい１回呼び出すが、後者は、プリユニットの最後のスパイクの後の個々のポストユニットスパイクについて複数回呼び出す。デフォルト：１１
ｐｒｅｐｏｓｔ＿ｍａｘ
は、前後ペアを形成することを考察すべき、プリユニットスパイクの後の時間の範囲を制限する。ｔ１＋ｐｒｅｐｏｓｔ＿ｍａｘ後の一部または全部のポストスパイクは無視され得る。
【０１６７】
ｐｏｓｔｐｒｅ＿ｒｕｌｅ
ｔ２においてトリガされ得、シナプスを変更するコードまたはルール名。それは、シナプス変数の読取りおよび書込みを行うことができ、ポストシナプスユニットからの変数への読取りアクセスを有する。それはｐｒｅｐｒｅ、ｐｏｓｔｐｒｅ、およびｎｏｗ＝ｔ２へのアクセスを有する。
【０１６８】
ｄｅｌｉｖｅｒｙ＿ｒｕｌｅ
ｔ２においてトリガされ得、ポストユニットの変数を変更するコードまたはルール名。それはシナプス変数、ｐｒｅｐｒｅ、ｐｏｓｔｐｒｅ、およびｎｏｗ＝ｔ２への読取りアクセスを有する。このコードはアトミック加算であり得る。
【０１６９】
＜ｓｙｎａｐｓｅ  ｏｆ  ｓｙｎａｐｔｉｃ＿ｔｙｐｅ＞
ｐｒｅ
ｐｏｓｔ
ｄｅｌａｙ
ｉｎｉｔ
[0168]いくつかの実装形態では、プレシナプススパイクによってトリガされ得る、短期シナプス可塑性をモデル化することが望ましいことがある。しばしば、これは、個々のプレシナプススパイクによって変更され得る変数または変数のベクトルを有することを必要とし得、次いで、何らかの式に従って発展するが、プリパルスの瞬間におけるこの変数の値のみが必要とされ得る。この場合、変数は個々のシナプスの一部であり得る。しかしながら、一部または全部のそのような変数の値がすべてのシナプスについて同じであるので、ＥＮＤからエンジンへのコンパイラ（リンカ）は、シナプスからこれらの変数を削除し、代わりに、「プリルール」（ｐｒｅ−ｒｕｌｅ）に従わなければならない、単一のプレシナプス変数を使用することができる。ＥＮＤフォーマットは、シナプスイベントルールまたはプレシナプスユニットイベントルールにおいてそのようなイベント前のトリガされる変数をコンパイラが識別するのを助け得る、特殊タグまたはラベル、またはステートメントを有し得る。
【０１７０】
[0169]ＥＮＤプログラムが複数のエンジンの間で分散される場合、個々のエンジンは、そのような変数の値を個々のプレシナプススパイクを用いて転送することができる。いくつかの実装形態では、そのようなプレシナプスユニットからのシナプスを受容する個々のエンジンは、変数のローカルコピーを保持し、プレシナプスユニットをホストするエンジンにおいてそれが更新され得るのと同じ方法でそれを更新することができる。
【０１７１】
[0170]スプネットネットワークはＮ＝Ｎｅ＋Ｎｉ＝１０００個のニューロンを備え得、ここで、Ｎｅ＝８００個の興奮性ニューロンであり、Ｎｉ＝２００個の抑制性ニューロンである。個々のニューロンは、ニューロンごとにＭ＝１００個のシナプスを備え得る。一部または全部の興奮性シナプスは可塑性（ＳＴＤＰ）であり得、ランダム遅延は１ｍｓとＤ＝２０ｍｓとの間にわたる。抑制性−＞興奮性シナプスは非可塑性であり得、Ｄ＝１ｍｓの遅延を伴う。ｉｎｈ−＞ｉｎｈシナプスはないことがある。このモデルの低レベルＥＮＤ３．０記述は以下のように表され得る。
【０１７２】
＜ｒｕｌｅ＞
ｎａｍｅ＝’ＱＩＦ２’  ／／ｖ式のみが定義される
ｃｏｄｅ＝’ｖ＋＝（０．０４＊ｖ＋５）．＊ｖ＋１４０＋Ｉ；  Ｉ＝４＊ｒａｎｄ（）／ＭＡＸ＿ＲＡＮＤ’
＜ｒｕｌｅ＞
ｎａｍｅ＝’ｓｐｉｋｅ’
ｃｏｄｅ＝’ｖ＞３０’
＜ｕｎｉｔ＿ｔｙｐｅ＞
ｎａｍｅ＝’ｅｘｃ’
ｕｐｄａｔｅ＿ｒｕｌｅ＝’ｕ＋＝０．０２＊（０．２＊ｖ−ｕ）；  Ｉ−＝ｕ；’
ｕｐｄａｔｅ＿ｒｕｌｅ＝’ＱＩＦ２’
ｅｖｅｎｔ＿ｃｏｎｄｉｔｉｏｎ＝’ｓｐｉｋｅ’
ａｆｔｅｒ＿ｅｖｅｎｔ＿ｒｕｌｅ＝’ｖ＝−６５；  ｕ＋＝８；’
ｉｎｉｔ＝’ａｎａｌｏｇ  ｖ＝−７０，  ｕ＝−１４，  Ｉ＝０；’
＜ｕｎｉｔ＿ｔｙｐｅ＞
ｎａｍｅ＝’ｉｎｈ’  ／／抑制性ニューロン
ｕｐｄａｔｅ＿ｒｕｌｅ＝’ｕ＋＝０．１．＊（０．２＊ｖ−ｕ）；  Ｉ−＝ｕ；’
ｕｐｄａｔｅ＿ｒｕｌｅ＝’ＱＩＦ２’
ｅｖｅｎｔ＿ｃｏｎｄｉｔｉｏｎ＝’ｓｐｉｋｅ’
ａｆｔｅｒ＿ｅｖｅｎｔ＿ｒｕｌｅ＝’ｖ＝−６５；  ｕ＋＝２；’
ｉｎｉｔ＝’ａｎａｌｏｇ  ｖ＝−７０，  ｕ＝−１４，  Ｉ＝０；’
／／クラスのＮｅ個のレコード
＜ｕｎｉｔ  ｏｆ  ｅｘｃ＞ｕｎｉｔ＿ｉｄ＝ｉ  ／／  ｉ＝１：Ｎｅ
／／クラスのＮｉ個のレコード
＜ｕｎｉｔ  ｏｆ  ｉｎｈ＞
ｕｎｉｔ＿ｉｄ＝ｉ  ／／  ｉ＝１：Ｎｉ
＜ｒｕｌｅ＞
ｎａｍｅ＝’ＬＴＤ’
ｃｏｄｅ＝’ｓｄ−＝ＬＴＤ（ｐｏｓｔｐｒｅ）；  ｗ＋＝０．００００１＊ｐｒｅｐｒｅ＋ｓｄ＊１０＊（１−０．９９９９＾ｐｒｅｐｒｅ）；  ｉｆ  （ｗ＜０）  ｗ＝０；  ｉｆ  （ｗ＞１０）  ｗ＝１０；  ｓｄ＊＝０．９９９９＾ｐｒｅｐｒｅ）’
ｉｎｉｔ＝’ＬＴＤ＝｛ａｒｒａｙ｝；’
／／ｓｄ’＝−ｓｄ／１０秒；０．９９９９＾ｘ＝ｅｘｐ（−ｘ／１００００）；ルールは０．９９９９＾ｘが１回のみ計算されるように最適化され得る：ｗ＋１０＊ｓｄ；ｓｄ＊＝．．；ｗ−＝１０＊ｓｄ；’それは、１０＊が削除されるようにさらに最適化され得る（しかし、ＬＴＰおよびＬＴＤテーブルが１０だけスケールアップされる）。
【０１７３】
＜ｒｕｌｅ＞
ｎａｍｅ＝’ＬＴＰ’
ｃｏｄｅ＝’ｓｄ＋＝ＬＴＰ（ｐｒｅｐｏｓｔ）；’
ｉｎｉｔ＝’ＬＴＰ＝｛ａｒｒａｙ｝；’
＜ｓｙｎａｐｔｉｃ＿ｔｙｐｅ＞
ｎａｍｅ＝’ＧＬＵ’
ｐｒｅｐｏｓｔ＿ｒｕｌｅ＝’ＬＴＰ’
ｐｏｓｔｐｒｅ＿ｒｕｌｅ＝’ＬＴＤ’
ｄｅｌｉｖｅｒｙ＿ｒｕｌｅ＝’Ｉ＋＝ｗ’
ｉｎｉｔ＝’ａｎａｌｏｇ  ｗ＝６，  ｓｄ＝０；’
＜ｓｙｎａｐｔｉｃ＿ｔｙｐｅ＞
ｎａｍｅ＝’ＧＡＢＡ’
ｄｅｌｉｖｅｒｙ＿ｒｕｌｅ＝’Ｉ−＝５’
ｄｅｌａｙ＝１  ／／デフォルト遅延、すべてのシナプスについて同じ
／／クラス（ｅｘｃ−＞ｅｘｃまたはｉｎｈ）のＮｅ＊Ｍ個のレコード
＜ｓｙｎａｐｓｅ  ｏｆ  ＧＬＵ＞
ｐｒｅ＝ｅｘｃ：ｉ／／  ｉ＝１：Ｎｅ
ｐｏｓｔ＝ｅｘｃ：ｊ  または  ｉｎｈ：ｊ  ／／ランダム、１とＮｅとの間、または１：Ｎｉ
ｄｅｌａｙ        ／／１とＤとの間の乱数
／／クラス（ｉｎｈ−＞ｅｘｃ）のＮｉ＊Ｍ個のレコード
＜ｓｙｎａｐｓｅ  ｏｆ  ＧＡＢＡ＞
ｐｒｅ＝ｉｎｈ：ｉ／／  ｉ＝１：Ｎｉ
ｐｏｓｔ＝ｅｘｃ：ｊ        ／／１とＮｅとの間の乱数
リスティング  ４
[0171]基本ネットワークインターフェース（ＥＮＩ：elementary network interface）は、低レベル記述ＥＮＤフォーマットで記述される２つのシミュレーション、あるいはシミュレーションに／からデータを送信／受信することを必要とされ得る任意の他のエンティティ（たとえば、入力デバイス、可視化／デバッグツール、および／または他のエンティティ）間のデータ交換を実装する通信プロトコルとして実装され得る。ＥＮＩは、ＥＮＤ自体と強固に組み合わせられ得、それは、大きいＥＮＤファイルをより小さい部片に区分して正しい結果を保証するために使用され得る。ＥＮＩのいくつかの部分は、通信イベントのＥＮＤエンジン処理の詳細な知識を必要とし得る。
【０１７４】
[0172]次に図３を参照すると、２つの計算エンジン３０２（ＥＮＤモデルシミュレーションを実行している個々の計算エンジン）間の一般化された通信フレームワーク３００が図示および説明されている。何らかの物理的通信手段（たとえば、周辺機器用のＵＳＢ／Ｂｌｕｅｔｏｏｔｈ（登録商標）、またはより厳しい状況ではイーサネット（登録商標）／インフィニバンド）においてＥＮＩ通信プロトコルが実装され得る。計算エンジン３０２のうちの個々は、利用可能なトランスポートレイヤ（図３では３０８として示された通信パイプ）の上でＥＮＩ（図３では３０６として示された通信パイプ）を実装し得る。ＥＮＩは、エンジン３０２自体の間の通信のレイヤを形成するのではなく、ＥＮＤによって記述されたモデル間の通信のレイヤを形成することに留意されたい。
【０１７５】
[0173]いくつかの実装形態では、エンジン３０２は、低レベルトランスポートレイヤによって結合され得、互いに発見し、自動的にペアリングし得る。（たとえば、ＩＰプロトコルを介して接続されるエンジンについて）手動セットアップが可能であり得る。ＥＮＤファイルとともに通信仕様ファイル（ＥＮＩファイル）がエンジンに供給され得る。エンジンが、正しいＥＮＤファイルを実行する別のエンジンとペアリングされたことをそのエンジンが発見すると、ＥＮＩチャネルがネゴシエートされ、確立され得る（図１のグリーンパイプ）。ＥＮＩ通信仕様ファイルは、双方が互いに理解し、正しいクラスの正しいユニットをターゲットにするのを助けるマッピングと見なされ得る。
【０１７６】
[0174]図４に、図３のＥＮＩ通信チャネル３０６のブロック図を示す。チャネル３０６は、それのエンドポイント（図３のＥＮＤ  ＡおよびＥＮＤ  Ｂなど、低レベルＥＮＤ記述のＩＤ）と、通信がどのように実施されるのか、およびどんなタイプの情報が通信され得るのかを記述するパラメータのセットとによって定義され得る。通信チャネル３０６は、左から右方向に進む単方向であり得、送信エンティティ４０２と受信エンティティ４０４とによって定義され得る。データ転送は一方向であり得る（ただし、トランスポートレイヤにおけるネゴシエーションおよびメタ情報は制限されない）。
【０１７７】
[0175]ＥＮＩチャネルパラメータは以下のうちの１つまたは複数を含み得る。
【０１７８】
送信側および受信側のＥＮＤ  ＩＤ、ならびにチャネルを一意に識別する識別子、
送信側および受信側のクラス、
（クラス内のそれらの数によって数え上げられる）送信側および受信側のクラスインスタンス、
コンテンツ：いくつかのパラメータのイベント／スパイク通知または値、
送られるデータのフォーマット、
動作モード（同期、非同期）およびそれらのパラメータ（周波数、位相シフト、および／または他のパラメータ）、
および／または他のパラメータ
[0176]一実装形態では、ＥＮＩ通信チャネルは、（ｉ）スパイク（イベント）通知、および（ｉｉ）選択されたクラスパラメータ（変数）の値を交換するために使用され得る。これらの２つのコンテンツタイプは、チャネルを通して送られる異なるデータ、すなわち、以下を必要とし得る。
【０１７９】
・（スパイク通知のための）ユニットインデックス
・（チャネルによって送信される一部または全部のインスタンスの）変数の実際値
[0177]一実装形態では、値変数でインターリーブされるネットワークユニットインデックス。そのような実装形態は、イベント（スパイク）を経験したユニットのために、ネットワークトラフィックを最小限に抑えるために値が送られる必要があるときに適用可能であり得る。要約すると、以下のデータフォーマットがサポートされ得る。
【０１８０】
・値をもつかあるいは値をもたないインデックス（いくつかのユニット）。値が欠落している場合、データはスパイク通知として解釈され得る。
【０１８１】
・インデックス（一部または全部のユニット）なしで、値のみ。（値が欠落している場合、データは、関係するユニットのうちの個々のスパイク通知として解釈され得る）。
【０１８２】
[0178]これらの２つのコンテンツタイプ（すなわち、イベントおよびデータ）は単一のＥＮＩチャネルインスタンス中で混合されない。いくつかの実装形態では、ＥＮＩチャネルがイベント／スパイク通知を送信するように設定されたときはいつでも、ターゲットユニットは（「人工的に」）発火され得る。すなわち、イベントは受信側スパイクキュー上にスケジュールされ得るが、ＬＴＰまたはリセットのようないかなるイベント後アクションも実施されない。いくつかの実装形態では、外部で発火され得るユニットは、可塑性ルール（たとえば、ＬＴＰ）に従わなければならないことがある局所着信シナプスを有しない。いくつかの実装形態では、ユニットが外部で発火され得るときはいつでもイベント後ルーが呼び出されないように、ユニットは外部発火トリガと可塑性ルールの両方に反応するように構成され得る。そのような構成は、シミュレーション整合性を保証し、分割されたシミュレーションが「単一のシミュレーション」と同じ結果を生成することを可能にする。したがって、適切に区分されたとき、（上記の制限を考慮すれば）分割シミュレーションを用いることで、単一のシミュレーションを用いたのと同じ結果を得ることが可能であり得る。いくつかの実装形態では、モデル区分は、必要に応じて特殊フェイク／受信ユニットの導入を介して可能にされ得る。
【０１８３】
[0179]図４は、ＥＮＩ通信チャネル中のコンテンツ、フォーマットおよび予想される挙動を示している。変数の値を送信する場合、チャネル記述は、送信側と受信側とのクラスの変数のセットを指定する。言い換えれば、ＥＮＩは、ソースクラス内のどの変数がターゲットクラス中のどの変数にマッピングされ得るかを指定する。整合性要件は、チャネルを通して送られる変数の内部表現が送信側と受信側との間で互換性があり得ること、または通信チャネルが必要な変換を実施することのいずれかであり得る。個々の通信イベントの後に、ターゲットクラス中の値は新しい値に更新され得る。
【０１８４】
[0180]いくつかの実装形態では、ＥＮＩチャネルは、ＥＮＤフォーマットでユニットに関係するデータを送信する。いくつかの実装形態では、シナプスまたは接合に関係するデータ（たとえば、シナプス荷重または他の変数）が送信され得る。
【０１８５】
[0181]ＥＮＩチャネルは、ＥＮＤフォーマットでのソースユニットクラスのいくつかの要素からターゲットクラスのいくつかの要素へのマッピングを導入することができる。個々のチャネルが、１つの送信側クラスと１つの受信側クラスとの間の通信を確立する。マッピングは、スパイク通知が送られている場合は、ワイヤ（図４参照）を通して送られ得るインデックスを確定するか、または、パラメータ値が通信され得る場合は、値の順序を確立する。
【０１８６】
[0182]ＥＮＩチャネルは、個々のモデルシミュレーションサイクルにおいて情報を送る必要はない。ＥＮＩファイルは、送信／受信の（エンジンモデルシミュレーションサイクルで表される）周期Ｔ１、Ｔ２を指定する。指示子Ｔ１は送信側周期に対応し（したがって、データはＴ１サイクルごとにのみ送られ得る）、Ｔ２は受信側を記述する（データは、Ｔ２サイクルごとにシミュレーションに送出されていることが予想され得る）。データは任意のポイントにおいてエンジンに送出され得るが、エンジンは、それを保持（バッファ）し得、適切な受信ポイントにおいて、実行中のシミュレーションがそれを利用可能にし得る。
【０１８７】
[0183]ＥＮＩ通信チャネルは、同期および非同期という２つのモードで動作するように構成可能であり得る。同期モードでは、送信および送出は最も近いシミュレーションサイクルに同期させられ得る。非同期モードでは、（入力）データは、計算エンジンに連続的に与えられ、それが準備できたときはいつでもシミュレーションインスタンスのそれぞれのユニットに送出され得る。同期モードは、データのタイムリーな送出を保証するが、高い入力データレートでは深刻な性能ボトルネックを生じ得る。逆に、非同期モードは、変化するデータ送出時間により、定義されていないモデル挙動を生じ得る。
【０１８８】
[0184]図５に、ＥＮＩ（方式）の動作モードの例を提示する。組み合わせられた２つのフォーマットと、２つのコンテンツタイプと、２つの動作モードとが、実装形態の図６に示す立方体を形成する。いくつかの実装形態では、ＥＮＩは、可能なデータフォーマットに関して拡張され得、コンテンツアウェア圧縮を含み得る。
【０１８９】
[0185]同期モードの一実装形態では、必要なデータが到着した（したがって、受信側が送信側と同期する）のでない限り、受信エンジンはデータ受信ポイントを通って進むことができないと仮定され得る。そのモードでのチャネルは、追加の特性、すなわち、位相シフトＳを指定する。シフトＳ＞０である場合、Ｓサイクル前に送られたデータパケットが到着している場合（エンジンは同期されているので、これらが送信側サイクルであるか受信側サイクルであるかは問題でない）、エンジンはシミュレーションを進め得る。位相シフトは、神経シミュレーションの実際の構造がそれを可能にするときはいつでも、通信チャネルのより良い利用を可能にする（すなわち、ＥＮＩチャネルを通して送られるいくつかの突起が、チャネルについての要件を緩和し、シフトを導入するために使用され得る、遅延を有する（図７Ａおよび図７Ｂ参照））。基礎をなすトランスポートは、チャネルの位相シフト（データを送出するために必要とされる時間）に基づいてチャネルに優先度を導入し得る。
【０１９０】
[0186]送信側は、送出通知を待つことなしに、データが送られ得た後に他のタスクを進めることができるが、メッセージが送出され得ない場合、チャネル上でデータを送るための次の試みは、シミュレーションを制止し得る。（位相シフトＳで同期チャネルにおいてＳ回よりも多くの確証されない送出が発生した場合、送信エンジンは進み得ない）。
【０１９１】
[0187]特に非同期（non-synchronous）（すなわち、非同期（asynchronous））モードに適用可能ないくつかの実装形態では、データを送信および受信する周波数が指定され得るが、エンジンは、データが送られ得るまでそれの実行を停止しない。受信側に対して、非同期モードはいかなるデータ送出タイミング制限をも課しない。いくつかの実装形態では、計算エンジンは、分割不可能なチャンクで到着するデータ（ブロック転送）を受信するように構成され得る。いくつかの実装形態では、データはストリームを介して転送され得る（ストリーミング転送）。たとえば、ブロック転送とストリーム転送との組合せなど、他の例が可能であり得る。ブロック転送サブモードでは、ブロック内のデータが受信側（たとえば、図４の受信側４０４）に送出され、通信トランザクションが完了し得た後に、送信メッセージが送出されると仮定され得る。ストリーミングサブモードでは、受信側において利用可能になるデータは、送信トランザクションが完了したか否かにかかわらず、エンジンに漸進的に送信され得る。
【０１９２】
[0188]非同期ブロックモードでは、最新のメッセージは実際にエンジンに送出されるが、エンジンが受信ポイントに遭遇した前に受信された他のメッセージは廃棄され得ると仮定され得る（それは、（カメラのような）リアルタイム入力デバイスが、エンジンが処理可能であるよりも高速に非同期モードでデータを送っているときに有用であり得る）。非同期ストリーミングモードは、データを蓄積し、最も近い受信ポイントにおいてそれを送出する。
【０１９３】
[0189]図７Ａに、２つの計算エンジン７０２、７０４間の完全同期通信の一例を示す。図７Ａの実装形態は、エンジン７０２、７０４間のタイムリーなデータ交換を保証することができ、通信遅延を低減することができ、それによって、大規模リアルタイムニューロンモデルシミュレーションランにおける、大量の一様でないデータフローに関連し得る遅延による潜在的通信チャネルジャミングを最小限に抑える。いくつかの実装形態では、通信帯域幅を著しく拡張する様々なデータ転送最適化が使用され得る。図７Ｂでは、イベントインデックスおよびデータ値は、（図７Ａのそれぞれ太矢印７０６および細矢印７０８によって示される）別個のＥＮＩチャネルを通して送られ得、別個の受信ポイントを有する
[0190]図７Ｂに、１システムクロックサイクルの位相シフト（シミュレーションステップ）（両方向にＳ＝１）を伴う同期通信の一例を示す。通信チャネルは、（図７Ｂの垂直矢印７５２、７５４によって示されるウィンドウ重複に起因してより一様に使用されるが、スパイクおよび値は１ｍｓ／ステップの遅延を伴って到着する。
【０１９４】
[0191]送信ポイントは、計算エンジンによるモデル実行中のユニットの処理の直後に利用可能になるデータおよびイベントを記述するために使用され得るシミュレーションモデルの論理的収束を指す。同様に、受信ポイントは、個々のシミュレーションサイクル中に接合を処理する前に使用されるデータステージングコンテナを記述するために使用され得る。そのような構成は短い通信ウィンドウを出ることがあるが、以下の随意の最適化が可能であり得る。
【０１９５】
[0192]送信ドライバは、ユニットを優先順に処理し、他のユニットがエンジンによってまだ並列に処理されている間、データが利用可能になると直ちにそのデータを送出する。
【０１９６】
[0193]受信ドライバは、必要なデータが到着するのをまだ待っている間、局所接合を実行する。
【０１９７】
[0194]チャネルがスパイク通知を送った場合、計算エンジンは、非局所ユニットからのスパイク上のデータを受信する前に、局所ユニットからのシナプスを処理することができる。そのような場合、通信ウィンドウは（図７Ｂの破線矢印によって示されるように）著しく拡張され得る。
【０１９８】
[0195]リスティング７に、ＥＮＤを使用するネットワークシミュレーションにおいて有用な（送信側／受信側ドライバに知られる）ＥＮＩ定義ファイルの一例を示す。以下の例はチャネルをセットアップするために必要とされ得るデータの一部または全部を示しているが、そのファイルの実際のフォーマットは、ＸＭＬまたは何らかの他のフォーマットに変更され得ることを当業者なら諒解されよう。例４：
[0196]例４は、‘Ｒｅｔｉｎａ’ＥＮＤファイルが、発火したクラス‘ＲＧＣ’から、‘ＬＧＮ’ＥＮＤファイルを実行中のエンジンに、選択されたユニットのインデックスを送る、エンジンシミュレーションを記述している。クラス‘ｅｘｃ’の選択された要素が発火される。通信は同期式であり得、同期ポイントが送信側または受信側の一方または両方の上の個々のサイクルにおいて現れ、チャネルはシフト（遅延）を有しないことがある。
【０１９９】
ＥＮＩ＿ＩＤ＝’ＣｏｍｍＣ’
ＳＯＵＲＣＥ＿ＩＤ＝’Ｒｅｔｉｎａ’
／／ソースＥＮＤファイル（シミュレーション）のｉｄ
ＴＡＲＧＥＴ＿ＩＤ＝’ＬＧＮ’
／／ターゲットＥＮＤファイル（シミュレーション）のｉｄ
ＭＯＤＥ＝ＳＹＮＣ
Ｔ１＝１
／／送信側同期周波数  −  データを（シミュレーションサイクルにおいて）いつ送るべきか
Ｔ２＝１
／／受信側同期周波数  −  （シミュレーションサイクルにおいて）データをいつ予想すべきか
Ｓ＝０
／／受信側位相シフト
ＦＯＲＭＡＴ＝ＩＮＤＩＣＥＳ
／／チャネルによってスパイキングユニットのみが観測される
ＳＥＮＤＥＲ＿ＶＡＬＵＥＳ＝ＮＯＮＥ
／／インデックスのみが送られる、すなわち、チャネルがターゲットユニットを発火する
ｔａｒｇｅｔ  ｕｎｉｔｓ
ＲＥＣＥＩＶＥＲ＿ＶＡＬＵＥＳ＝ＮＯＮＥ
ＳＥＮＤＥＲ＿ＣＬＡＳＳ＝’ＲＧＣ’
ＲＥＣＥＩＶＥＲ＿ＣＬＡＳＳ＝’ｅｘｃ’
ＮＵＭＢＥＲ＿ＯＦ＿ＵＮＩＴＳ＝５００
／／チャネルによっていくつのユニットが観測されるか？
ＳＥＮＤＥＲ＿ＵＮＩＴＳ＝８４  ２３  ３９５  ３９  ２０１  ３４  ．．．
ＲＥＣＥＩＶＥＲ＿ＵＮＩＴＳ＝３３  ４５  ６７  ９８  １８  ３４  １９  ．．．
リスティング  ７
例５：
[0197]例５は、‘Ｃａｍｅｒａ’ＥＮＤが、クラスＰｉｘｅｌ中の‘Ｒ，Ｇ，Ｂ’変数の値を、Ｒｅｔｉｎａ  ＥＮＤファイル中のクラスＲＧＣの変数‘Ｒｅｄ，Ｇｒｅｅｎ，Ｂｌｕｅ’に非同期的に送り得るエンジンシミュレーションを示している。
【０２００】
ＥＮＩ＿ＩＤ＝’ＥＮＩ２’
ＳＯＵＲＣＥ＿ＩＤ＝’Ｃａｍｅｒａ’
／／ソースＥＮＤファイル（シミュレーション）のｉｄ
ＴＡＲＧＥＴ＿ＩＤ＝’Ｒｅｔｉｎａ’
／／ターゲットＥＮＤファイル（シミュレーション）のｉｄ
ＭＯＤＥ＝ＡＳＹＮＣ
ＳＴＲＥＡＭ＝ＮＯ
／／受信側がデータを蓄積しない（最新のデータのみがエンジンに送達される）
Ｔ１＝１
／／送信側同期周波数  −  データを（シミュレーションサイクルにおいて）いつ送るべきか
Ｔ２＝２
／／受信側同期周波数  −  データを（シミュレーションサイクルにおいて）いつ予想すべきか
ＦＯＲＭＡＴ＝ＮＯＩＮＤＩＣＥＳ
／／すべての値が毎回送られる
ＳＥＮＤＥＲ＿ＶＡＬＵＥＳ＝’Ｒ，Ｇ，Ｂ’
／／それらの変数の値が送られる
ＲＥＣＥＩＶＥＲ＿ＶＡＬＵＥＳ＝’Ｒｅｄ，Ｇｒｅｅｎ，Ｂｌｕｅ’
／／それらの変数の値が更新される
ＳＥＮＤＥＲ＿ＣＬＡＳＳ＝’Ｐｉｘｅｌ’
ＲＥＣＥＩＶＥＲ＿ＣＬＡＳＳ＝’ＲＧＣ’
ＮＵＭＢＥＲ＿ＯＦ＿ＵＮＩＴＳ＝１０２４
／／チャネルによっていくつのユニットが観測されるか？
ＳＥＮＤＥＲ＿ＵＮＩＴＳ＝１  ２  ３  ４  ５  ６  ７  ８  ９  １０  １１
ＲＥＣＥＩＶＥＲ＿ＵＮＩＴＳ＝３３  ４５  ６７  ９８  １８  ３４  １９  ．
リスティング  ８
[0198]図１３に示されているテーブルに、リスティング８において使用される通信パラメータの可能な値をリストする。
【０２０１】
[0199]いくつかの実装形態では、（たとえば、高レベル記述フォーマットを使用して定義された）大規模神経シミュレーションモデルを扱うための多くの方法が存在する。いくつかの実装形態では、処理は単一の処理計算エンジンによって実施され得る。いくつかの実装形態では、処理はいくつかの計算エンジン（計算ノード）のセット内で分散され得る。効率的な作業負荷分散を達成するために、モデルは分割される必要がある。いくつかの実装形態では、モデルの１つの大きい低レベル記述（ＥＮＤファイル）が発生され得、分散型計算エンジンによって分割が実施され得る。この例は、リアルタイム負荷調整およびリバランシングの利益を提供するが、技術的により複雑であり、高度な分散負荷コントローラを必要とし得る。いくつかの実装形態では、モデルはＥＮＤファイルとＥＮＩ通信チャネルとのセットに分割され得、それらは互いに別々に実行され得る。場合によっては追加の「フェイク」ユニットを導入することによって、ＥＮＩを使用して神経シミュレーションを複数の部分に分ける方法があり得る。
【０２０２】
[0200]図８および図９に、本技術のいくつかの態様によるモデル区分の一例を示す。図８は、いくつかのユニット８０２と、シナプス８０４と、接合８０６とのを備え、ＥＮＤファイルＥＮＤ０を使用して記述される、ＥＮＤモデル８００を示している。シナプス８０４に沿った数字はシナプス遅延を示す。モデル８００のシミュレーションは、単一の計算Ｅｎｇｉｎｅ０を使用して実行され得る。
【０２０３】
[0201]図９は、それぞれＥＮＤファイルＥＮＤ１、ＥＮＤ２を使用して記述される、２つの分割９１０および９２０へのモデル８００の分割を示している。分割９１０は、図９においてそれぞれ９１２、９１４、９１６として示された、ＥＮＩ１、ＥＮＩ２、ＥＮＩ３という、３つのＥＮＩインターフェースを使用して相互結合され得る。いくつかの追加の「フェイク」ユニット（９０２とマークされた矩形）が導入されている。ＥＮＩ  １チャネルは位相シフトＳ＝２を有するので、チャネル通信遅延は、それぞれ図８および図９のシナプス８０４および９０４の比較によって示されるように、ターゲットシナプスのより小さい遅延を使用することによって補償され得る。そのような実装形態は、ＥＮＩチャネルで置き換えられ得る分割線（ｐａｒｔｉｔｉｏｎ  ｌｉｎｅ）に沿って元のモデル（モデル８００）中に最小遅延（たとえば、０）のシナプスがないときに可能であり得ることに留意されたい。高レベル定義言語からのコンパイラは、通信を最適化する（たとえば、通信ウィンドウを拡大する、送られるデータの量を平衡させる、および／または通信を最適化するための他の動作）ためにシミュレーションを分けながら、遅延を考慮に入れることができる。モデル９００のシミュレーションは、図９に示されているＥｎｇｉｎｅ１およびＥｎｇｉｎｅ２という、２つの計算エンジンを使用して実行され得る。複数分割シミュレーション９００は、分散型計算Ｅｎｇｉｎｅ１／Ｅｎｇｉｎｅ２が丸め誤差を回避するのに十分な数値精度を有するのならば、単一分割シミュレーション実装形態８００と比較して、同じシミュレーション結果を生成することが可能であり得る。
【０２０４】
[0202]分割されたモデル（図示せず）のいくつかの実装形態では、以下の特徴が実装され得る。
【０２０５】
・（動的デバッギングおよび監視のための）オンザフライＥＮＩチャネルセットアップおよびリンクネゴシエーション、
・追加のデータフォーマット、たとえば、ａｎａｌｏｇのサポート。
【０２０６】
・ＥＮＩを実行するための専用ハードウェアインフラストラクチャのサポート、
・ＥＮＩフォーマットを指定するための便利で直観的な方法
[0203]（図９の区分モード９００などの）分散モデルシミュレーションに関して上記で説明したように、モデルはいくつかの分割（たとえば、分割９１０、９２０）に分けられ得る。個々の分割は単一の計算エンジン（図９のｅｎｇｉｎｅ１、Ｅｎｇｉｎｅ２上で実行され得る。いくつかの実装形態では、計算エンジンは単一の処理ユニット（ＣＰＵ）の実装形態を備え得る。個々の計算エンジンは、たとえば、ＣＰＵ、ＦＰＧＡ、ＭＣＵなど、並列に動作する複数の処理ユニット（ＰＵ）を備え得る。そのような並列化は、（並列ＰＵの数とともにスケーリングし得る）モデルシミュレーションスループットの大幅な増加を可能にする。並列モデル実行を可能にするために、シミュレーションドメインがいくつかの処理ブロック（処理ドメイン）に分割され得、個々のブロックは個々のＰＵに割り当てられる。個々の処理ブロックは、（ｉ）局所コンパートメント、局所スパイクキュー、および／または他の局所情報を追跡することと、（ｉｉ）（ＥＮＤ３．０では適用可能でない）着信「シナプス」のリスト（テーブル）を記憶することと、ロッキング（ｌｏｃｋｉｎｇ）なしに処理され得る局所接合のｓリストを記憶することとを行うように構成され得る。コンペイトメント（ｃｏｍｐａｉｔｍｅｎｔ）は、それらがスパイクするときはいつでも通知され得るドメインｉｄでタグ付けされ得る。そのような外部から可視のコンパートメントがスパイクしたときは、適切な情報が隣接ドメインに送られ得、その隣接ドメインが処理の残り（たとえば、シナプスキュー）を行う。
【０２０７】
[0204]個々のステップについて、外部（リモート）接合を介して結合されたコンパートメントの電位はそれらのターゲットドメインに送られ得る。それぞれ、受信された電位は、接合電流を計算するために使用され得る。
【０２０８】
[0205]処理ドメインが交換していることがあるデータは、（ｉ）スパイク、あるいは（ｉｉ）接合電位（または接合を越えて送信される何らかの他の変数）のうちの１つまたは複数である。多くの接合は樹状突起タイプ（局所）になるので、個々の交換におけるデータの量は、（ドメイン分割が樹状突起接合を考慮に入れる場合は）大きくならないことがある。
【０２０９】
[0206]いくつかの実装形態では、マルチコア対称マルチプロセッサ（ＳＭＰ：ｍｕｌｔｉ−ｃｏｒｅ  ｓｙｍｍｅｔｒｉｃ  ｍｕｌｔｉｐｒｏｃｅｓｓｏｒ）ハードウェアを使用して異種並列化計算エンジンが実装され得る。いくつかの実装形態では、ＳＭＰ実装形態は、実装すべきグラフィカル処理ユニットを含んでいることがある。
【０２１０】
[0207]図１０〜図１２は、ＥＮＤ言語のシンタックスに依存しない本技術の異なる例示的な実装形態を説明している。図１０は、標準のＣＰＵ、ＧＰＵ上に、または集積回路（たとえば、ＡＳＩＣ）において実装され得るＥＮＤエンジンの３つの基本構造を示している。これらは、「ユニット」１００１と、「ダブレット」１０１１と、「トリプレット」１０２１とであり得る。ＥＮＤエンジンは、ユニット、ダブレット、およびトリプレットルールの実行と、これらの要素のメモリへのアクセスとを処理する。上記のＥＮＤフォーマットは、指定されたニューロンネットワークを実行するそのようなユニット、ダブレット、およびトリプレットを有する半導体回路を構成し得るハードウェア仕様言語として扱われ得る。
【０２１１】
[0208]いくつかの実装形態では、個々の基本構造（ユニット、ダブレット、およびトリプレット）は、マルチスレッドプロセッサ上でシングルスレッドとして実装され得る。いくつかの実装形態では、個々の構造は、時間多重化を使用してそれぞれプロセスユニット、ダブレット、およびトリプレットに対して構成された専用回路（場合によっては、ユニット、ダブレットおよび、トリプレットのために３つの異なる回路）を備え得る、スーパーユニット、スーパーダブレット、およびスーパートリプレットとして実装され得る。
【０２１２】
[0209]いくつかの実装形態では、ユニット１００１は、ニューロンまたはニューロンの一部、たとえば、樹状突起コンペイトメントを表す。いくつかの実装形態では、ユニット１００１はニューロンの集団を表し、ニューロンのアクティビティは、その集団の「平均発火レート」アクティビティ、またはその集団のアクティビティの何らかの他の平均場近似を表す。個々のユニットは、それら自体のメモリ変数と、それのメモリ上でどんな動作が実施され得るかを記述する更新ルールとを有し得る。動作はクロックベースであり得、すなわち、シミュレーションの個々のタイムステップで実行され得、またはそれらはイベントベースであり得、すなわち、いくつかのイベントがトリガされ得るときに実行され得る。ユニット更新ルールは他のユニットに属する変数を含まないことがある。したがって、ユニット更新ルールの実行は、他のユニットのユニット更新ルールの実行の順序とは無関係であり得、それにより、ユニット更新ルールの並行実行が可能になる。
【０２１３】
[0210]ユニット変数の値に応じて、ユニットは、ダブレットを介して他のユニット中のシナプスイベントをトリガするイベント、すなわち、パルスまたはスパイクを発生し得る。たとえば、図１０のユニット１００２は、プレシナプスニューロン（プレシナプスユニット１００２）からポストシナプスニューロン（ポストシナプスユニット１００３）へのシナプスを表すダブレット１０１１を介してユニット１００３に影響を及ぼすことができる。
【０２１４】
[0211]ユニットは、イベントがトリガされた後にトリガされ得るイベント後更新ルールを有し得る。これらのルールは、イベントに起因するユニット変数の変更、たとえば、電位変数のスパイク後リセットを受け持ち得る。
【０２１５】
[0212]個々のダブレットは、それら自体のメモリ変数を有し得、ポストシナプスユニットの変数にアクセスし得る。アクセスは読取りおよび書込みを含み得る。個々のダブレットは、シナプス可塑性を実装するためにダブレットメモリに変更を加え、パルスの送出を実装するためにポストシナプスユニットメモリに変更を加える、ダブレットイベントルールを有し得る。ダブレットイベントルールは、上記のＥＮＤフォーマットで記述されたシナプスルールを包含する。
【０２１６】
[0213]複数のダブレット（たとえば、図１０の１０１６〜１０１８）が、対応する複数のプレシナプスユニット１００６〜１００８を単一のポストシナプスユニット１００９に結合することができるので、ダブレットがポストシナプスユニットメモリを並列にまたは任意の順序で変更し、結果が順序とは無関係であることが望ましいことがある。これは、ポストシナプスユニットメモリに対する動作が（ＧＰＵの場合のように）アトミック加算であるか、（対数変換を介した加算と等価である）アトミック乗算であるか、または（個々のダブレットが同じ値にリセットすることを試みる）値にリセットすることである場合、達成することが容易になり得る。いくつかの実装形態では、ダブレットイベントルールによって変更されているポストシナプスユニット変数は、ルールにおいて使用しないことがある。結果はダブレットイベントルールの実行の順序に依存し得る。
【０２１７】
[0214]ニューラル計算のコンテキストでは、プレシナプスユニットによって生成されるイベントと、そのユニットによってトリガされるダブレットイベントルールの実行との間に時間遅延があり得るように、軸索伝導遅延を有することが望ましいことがある。個々のダブレットが何らかの遅延を伴ってイベントを受信するように、遅延はバッファとして実装され得る。すなわち、ＥＮＤエンジンは、プレシナプスユニットによって生成されたイベントを登録し、遅延の大きさに応じて遅延ラインキュー中に特殊マーカーを入れる。遅延はカウントダウンされ得、次いで、ダブレットイベントルールの実行のためにイベントがダブレットに送信され得る。
【０２１８】
[0215]いくつかの実装形態では、ダブレットはプレシナプスユニット変数へのアクセスを有しない。しかしながら、いくつかの実装形態では、ダブレットはいくつかのプレシナプスユニット変数へのアクセスを有し得る。いくつかの実装形態では、プレシナプスユニットは、ユニット（すなわち、イベントベースメモリ）によってトリガされたイベント中に変更される変数を有し得、この変更は他のプレシナプスユニット変数の値に依存しない。そのような一例では、そのようなイベントベースメモリは、プレシナプスユニットメモリ中に常駐し得、あるいは等価的に、それは、イベントトリガされた変数のコピーが個々のダブレットにおいて常駐したかまたはダブレット間で共有されたかのように扱われ得る
[0216]ダブレットイベントルールは、図１１に示すように、いくつかの実装形態ではイベント後ルールとダブレット更新ルールとを含み得る、ダブレットルールのクラスの一部であり得る。イベント後ルールは、ポストシナプスユニットによってトリガされ、そのポストシナプスユニットに結合しているダブレットのために実行されるルールであり得る。いくつかの実装形態では、ダブレットのイベント後ルールは、直前のプレシナプスイベントのタイミングに依存し得る。ダブレット更新ルールは、１つまたは複数のタイムステップで（たとえば、時間期間内のシステムクロックサイクルごとに）個々のダブレットについて実行されるクロックベースルールであり得る。
【０２１９】
[0217]図１２に示された実装形態では、ダブレットイベントルールは、（ｉ）プレシナプスユニットとポストシナプスユニットとのイベントのタイミングに基づいて構成され、（ｉｉ）ダブレットメモリ変数の変更を制御する、タイミングイベントルールを備え得る。図１２に示された更新ルールは、スパイクタイミング依存可塑性（ＳＴＤＰ）、すなわち、スパイキングネットワークにおける可塑性の標準形式を実装することにある。
【０２２０】
[0218]タイミングイベントルールは、最初に発火するプレシナプスニューロン（または最初にプレシナプスニューロンから到着するスパイク）と、次いで、その後に発火するポストシナプスニューロン、たとえば、パルス１２１３、１２１４の前に発生されたパルス１２０２とに対応するＳＴＤＰの一部分を実装するイベント前後ルールを備えることができる。古典的ＳＴＤＰでは、これはＳＴＤＰ曲線の長期増強（ＬＴＰ）部分に対応し得る。このルールは、プレシナプス発火、および少なくとも１つの後続のポストシナプス発火、たとえば、（ライン１２２３で示される）ペア１２０２、１２１３のタイミングに基づいてダブレットのメモリを変更し、それは時間差に依存し得る。
【０２２１】
[0219]タイミングイベントルールは、たとえば、パルス１２１１、１２１２が発生し、その後にパルス１２０２が発生したように、最初にポストシナプスユニットが発火し、次いで、その後にプレシナプスユニットが発火したときに行われる、古典的ＳＴＤＰの長期抑圧部分を実装するイベント後前ルールを備えることができる。このルールは、プレシナプス発火とポストシナプス発火との相対的タイミングに基づいてダブレットメモリを変更し、それは時間差に、すなわち、パルス１２１２のタイミングとパルス１２０２のタイミングとの間の差に依存し得る。
【０２２２】
[0220]イベント前後ルールとイベント後前ルールの両方は、ポストシナプスユニットメモリ中の変数の値に依存し得る。
【０２２３】
[0221]いくつかの実装形態では、共通のプレシナプスユニットを有するダブレットが、一緒にグループ化され、したがってシステムメモリ中に割り振られ得るように、ダブレットのプレシナプスユニットに従ってダブレットのメモリを割り振ることが望ましいことがある。この手法はシステムメモリへのランダムアクセスを最小限に抑えることができる。
【０２２４】
[0222]ダブレットイベントルールは、ダブレットメモリとポストシナプスユニットメモリとの値に基づいてポストシナプスユニットの変数の値を変更するパルス送出ルールを備えることができる。
【０２２５】
[0223]ダブレットの記述は、ＥＮＤフォーマットでのシナプス変数とルールとの記述によって行われ得る。
【０２２６】
[0224]上記の図１０に示されているように、トリプレット１０２１は２つのユニット１００４および１００５を結合する。そのようなトリプレットはＥＮＤフォーマットで接合を表す。いくつかの実装形態では、トリプレット１０２１は２つのニューロン間のギャップ接合結合を備え得る。いくつかの実装形態では、トリプレット１０２１は、ニューロンの２つの隣接する樹状突起コンパートメントを結合する抵抗結合に対応する。いくつかの実装形態では、トリプレット１０２１は両方の接合タイプの組合せであり得る。トリプレットはそれ自体のメモリを備え得、それは両方のユニットのメモリへのアクセスを有する。トリプレットは、個々のシミュレーションタイムステップで実行されるトリプレット更新ルールを備え得る。トリプレット更新ルールは、個々のトリプレットのメモリと、少なくとも１つのユニットのメモリとを更新し得る。いくつかの実装形態では、トリプレット更新ルールは両方のユニットのメモリを更新することができる。そのような更新は順序とは無関係であることが望ましいことがあるので、少なくとも１つのユニットのメモリ更新は、トリプレット更新ルールに関与しないユニット変数へのアトミック加算を介して実施され得る。
【０２２７】
[0225]トリプレットの記述は、ＥＮＤフォーマットでの接合の記述によって行われ得る。
【０２２８】
[0226]いくつかの実装形態は、イベントがないが、個々のユニットがトリプレット更新ルールを介して他のユニットに信号を送信する、純粋平均発火レートモデルを実装し得る。
【０２２９】
[0227]トリプレットは、共通のプレシナプスユニットから生起したトリプレットが一緒にグループ化されるように、プレシナプスユニットに従ってシステムメモリ中に割り振られ得る。トリプレットはポストシナプスユニットに従って割り振られ得る。いくつかの実装形態では、トリプレットは、ニューラルネットワークの構造に従ってシステムメモリ中に割り振られ得る。たとえば、ニューラルネットワークがマルチコンパートメント樹状突起を有する場合、樹状突起コンパートメントを結合することを受け持つトリプレットは、システムクロックサイクル中に樹状突起ツリー上のダイナミカル（dynamical）が評価されるときにメモリアクセスに影響を与えないように、最適に割り振られ得る。
【０２３０】
[0228]いくつかの実装形態は、ダブレットを介してポストシナプスユニットにパルスを送出するイベントをユニットがトリガする、純粋イベント駆動型アーキテクチャを実装し得る。クロックサイクル中に少なくとも単一のパルスを受信したユニットはイベント条件についてテストされ得、そのイベント条件が満たされた場合、イベント後ルールが実行され、パルスが他のユニットに送出され得るように、対応するダブレットイベントルールが実行され得る。
【０２３１】
[0229]イベント駆動型アーキテクチャ（ＥＤＡ：Ｅｖｅｎｔ  Ｄｒｉｖｅｎ  Ａｒｃｈｉｔｅｃｔｕｒｅ）は、モデルの神経科学記述から計算記述を分離するように構成されたアブストラクションレイヤとして働くＥＮＤフォーマットの一般化として定義され得る。ＥＤＡは、イベントによってトリガされるメモリ管理、並列処理、およびルールを定義し、ＥＤＡコードへのＥＮＤコードの直接コンパイルを可能にする。
【０２３２】
[0230]ＥＮＤフォーマットおよびＥＤＡアーキテクチャでのイベントは、物理的であるか仮想的であるかににかかわらず、パルス、パルスのソフトウェア表現、パルスのステレオタイプバースト、または他の離散的時間イベントに対応する。
【０２３３】
[0231]ＥＤＡメモリ管理は、以下において（変数の所有権の観点から）ＥＮＤフレームワークとは異なる。
【０２３４】
[0232]ユニットはそれら自体の変数を所有する。ユニットＡのための更新ルールが実行されるとき、それは、ネットワークの他のユニットの変数へのアクセスを必要としないことがある。逆に、他のユニットによってルールが実行されないことは、ユニットＡの変数へのアクセスを必要とし得る。
【０２３５】
[0233]シナプスは、荷重、ｌａｓｔ＿ａｃｔｉｖｅおよび／または他の変数などの変数など、それら自体の「シナプス」変数を所有し、シナプスはポストシナプスユニット中のいくつかの変数を参照し得る（それらから読み取り、それらに書き込み得る）。ｐｒｅｓｙｎａｐｔｉｃ＿ｒｕｌｅまたはｐｏｓｔ−ｓｙｎａｐｔｉｃ＿ｒｕｌｅのいずれかが実行されるとき、２つ以上のシナプスが、ポストシナプスユニットの同じ変数にアクセスし、それを変更することを試み得る。ただし、シナプスはそれら自体のシナプス変数については競合しない。
【０２３６】
[0234]接合はそれらの「接合」変数を所有するが、接合はｕｎｉｔ＿１およびｕｎｉｔ＿２中の変数にアクセスし、それらを変更する。接合が実行されるとき、それらの接合変数への並列アクセスについて競合がないことがあるが、ｕｎｉｔ＿１およびｕｎｉｔ＿２変数へのアクセスについて競合があり得る。
【０２３７】
[0235]したがって、ユニット、シナプス、および接合は、変数の所有権に関してユニット、ダブレット、およびトリプレットとして扱われ得る。ユニットは変数のセットを所有し、シナプスは、変数の１セットを所有し、ユニットによって所有される別のセットを参照する。接合は、変数の１セットを所有し、２つのユニットによって所有される変数の２つの他のセットを参照する。この命名は、ＥＮＤ１．０、２．０および３．０フォーマット、ならびに以下の例示的な実装形態を記述するために適用され得る。
【０２３８】
[0236]クラスメンバーＥｖｅｎｔ＿ｃｏｎｄｉｔｉｏｎは以下のルールの実行をトリガする。
【０２３９】
・イベントをトリガしたユニット（トリガユニット）に作用するＡｆｔｅｒ＿ｅｖｅｎｔ＿ｒｕｌｅ、
・トリガユニットから他のユニットにポイントするシナプス（ダブレット）に作用するｐｒｅｓｙｎａｐｔｉｃ＿ｅｖｅｎｔ＿ｒｕｌｅ、
・他のユニットからそのユニットをポイントするシナプス（ダブレット）に作用するｐｏｓｔ−ｓｙｎａｐｔｉｃ＿ｅｖｅｎｔ＿ｒｕｌｅ
[0237]クラスメンバーＵｐｄａｔｅ＿ｒｕｌｅは、ネットワークシミュレーションの個々のタイムステップで実行され得、（場合によってはバックグラウンドプロセスを介して）ユニット、シナプス、および接合中の、すなわち、ユニット、ダブレット、およびトリプレット中の変数を更新する。
【０２４０】
[0238]要素としてのユニット、ダブレット、およびトリプレットは、ネットワーク要素と呼ばれることがある。ＥＮＤフォーマットは、したがって、（ｉ）要素と、（ｉｉ）要素に作用するルールと、（ｉｉｉ）要素によってトリガされ、他の（ターゲット）要素に作用する他のルールの実行を引き起こすイベントとを定義する。
【０２４１】
[0239]本技術のいくつかの態様によるＥＤＡフレームワークの開発の背後にある目的は以下を含む。
【０２４２】
・それら自体の変数を有し、さらに他の要素中の変数を参照し得る、要素（たとえば、ユニット、ダブレット、トリプレット、および／または他の要素）、
・要素中の変数に作用するクロック駆動型ルール（ルール）、および
・いくつかの要素によってトリガされ、他の（ターゲット）要素中の変数に作用する、イベント駆動型ルール（イベント）
[0240]ＥＤＡ命令セットは、抽象的（シンボル）変数に作用するルールを定義することから開始する。ルールは、サイクルなしでルールの有向グラフを形成するために、前に定義された他のルールを含み得る。要素は、同じまたは他の要素に作用するクロック駆動型ルールによって定義され得る。イベントは、他の要素に適用されるトリガ条件およびターゲットルールによって定義され得る。
【０２４３】
[0241]ＥＤＡ命令セットの一例をリスティング５において以下に示す。リスティング５中のボールドのキーワードはＥＮＤ命令セットの構成要素を示すが、非ボールドのワードはユーザ定義の名前および値を示す。
【０２４４】
ｒｕｌｅ＿ｎａｍｅ＝ｒｕｌｅ
ｃｏｄｅ＝’．．．．’
ｃｏｄｅ＝ａｎｏｔｈｅｒ＿ｒｕｌｅ＿ｎａｍｅ
ｉｎｉｔ＝’．．．．’
リスティング  ５
[0242]リスティング５において、識別子「ｃｏｄｅ」は、コードの任意の文字、または前に定義された別のルールの名前を参照することができる。リスティング５ではＣコードシンタックスが使用されているが、任意の他の言語記述（たとえば、Ｃ＃、Ｐｙｔｈｏｎ、Ｐｅｒｌ、および／または他の言語）が本技術に等しく適用可能であることを当業者なら諒解されよう。ルール内に複数のコードおよびルールが含まれることがあり、それらは包含の順序で実行され得る。いくつかの実装形態では、複数の要素タイプにおいて使用されるルールは別々に定義され得、したがって、エンジンはそれのアクセラレーショントリックを使用してそのようなルールを並列に実行することができる。ステートメント「ｉｎｉｔ」は、ルールを実行するために必要とされる静的（ルール内では大域）変数を定義し、たとえば、それはルックアップテーブルを定義する。「ｃｏｄｅ」は、「ｉｎｉｔ」において定義されている静的変数を、要素において定義されているインスタンス変数（下記参照）を、または他の要素タイプにおいて定義されている他のインスタンス変数を参照し得、たとえば、「Ｉ＋＝Ａ．ｗ＋Ｂ．ｗ」は、インスタンス変数Ｉを、ならびに要素ＡおよびＢにおいて定義されている変数ｗを参照する。
【０２４５】
ｅｌｅｍｅｎｔ＿ｎａｍｅ＝ｅｌｅｍｅｎｔ
ｒｕｌｅ＝ｒｕｌｅ＿ｎａｍｅ
ｒａｎｋ＝ａ  ｎｕｍｂｅｒ  ｏｒ  ｒａｎｇｅ  ｏｆ  ｎｕｍｂｅｒｓ
ｉｎｉｔ＝’．．．．’
[0243]上記は要素タイプの定義である。ここで、「ｒｕｌｅ」は、前に定義されているルールを、またはコードの文字を参照する。パラメータ「ｒａｎｋ」は、クロックサイクル内のルールの実行のランク順序を指定する。それは間隔［０  １］からの固定小数点値を取る。たとえば、ｒａｎｋ＝０．４５は、このルールが、より低いランクをもつ個々のルールの後に、およびより高いランクをもつ個々のルールの前に、しかしランク０．４５を有するルールと並列に実行され得ることを意味する。ランクが間隔として与えられた、たとえば、ｒａｎｋ＝ｍｉｎ：ｍａｘの場合、エンジンは、ｒａｎｋ＜ｍｉｎである個々のルールの後に、およびｒａｎｋ＞ｍａｘである個々のルールの前に、任意の時間にこのルールを実行する自由を有する。「ｒａｎｋ」が欠落している場合、それはデフォルト値ｒａｎｋ＝０：１と等価であり、すなわち、エンジンは、このルールをいつ実行すべきかを選択する完全な自由を有する。ランクが１よりも大きい場合、エンジンは、ルールを実行するサイクルをスキップする。たとえば、ｒａｎｋ＝２．４５は、エンジンが、ルールの次の実行まで２サイクルをスキップすることを引き起こし得る。ストリング「ｉｎｉｔ」は、要素のインスタンス（局所）変数の名前を定義し、それらのデフォルト初期値を設定する。
【０２４６】
ｉｄ＝ｅｌｅｍｅｎｔ＿ｎａｍｅ
Ａ＝ｏｔｈｅｒ＿ｅｌｅｍｅｎｔ＿ｎａｍｅ．ｉｄ
Ｂ＝ｏｔｈｅｒ＿ｅｌｅｍｅｎｔ＿ｎａｍｅ．ｉｄ
ｖａｒｉａｂｌｅ＿ｎａｍｅ＝ｖａｌｕｅ
[0244]上記は要素タイプのインスタンスの定義である。ここで、「ｅｌｅｍｅｎｔ＿ｎａｍｅ」は、前に定義されている要素タイプの名前である。ライン‘ｖａｒｉａｂｌｅ  ｎａｍｅ＝ｖａｌｕｅ’は、要素定義中の「ｉｎｉｔ」ステートメントにおいて定義されているデフォルト値とは異なるインスタンス変数の値を設定し得る。要素定義中のｒｕｌｅ＿ｎａｍｅが他の要素を参照する場合（これはダブレットおよびトリプレットについて当てはまる）、これらの要素のｉｄがここで指定され得る。他の要素を参照するために、必ずしもＡおよびＢ（またはＥＮＤにおけるＵｎｉｔｉおよびＵｎｉｔ＿２）ではなく、いかなる変数名をも使用することができることに気づかれたい。
【０２４７】
ｅｖｅｎｔ＿ｎａｍｅ＝ｅｖｅｎｔ
ｔｒｉｇｇｅｒ＿ｃｏｎｄｉｔｉｏｎ＝ｒｕｌｅ＿ｎａｍｅ
ｔｒｉｇｇｅｒ＿ｒａｎｋ＝ｎｕｍｂｅｒ  ｏｒ  ｎｕｍｂｅｒ  ｒａｎｇｅ
ｔａｒｇｅｔ＿ｃｏｄｅ＝ｒｕｌｅ＿ｎａｍｅ
ｔａｒｇｅｔ＿ｒａｎｋ＝ｎｕｍｂｅｒ  ｏｒ  ｎｕｍｂｅｒ  ｒａｎｇｅ
[0245]上記はイベントタイプの定義である。ここで、「ｔｒｉｇｇｅｒ＿ｃｏｎｄｉｔｉｏｎ」は、真／偽を戻すルールの名前またはストリングコードである。（要素に適用される、下記参照）この条件は、「ｔｒｉｇｇｅｒ＿ｒａｎｋ」によって与えられるランクで評価され得る。条件が真であるとき、それは、ランク「ｔａｒｇｅｔ＿ｒａｎｋ」で（以下で定義される）ターゲット要素における「ｔａｒｇｅｔ＿ｃｏｄｅ」の実行をトリガする。
【０２４８】
ｅｖｅｎｔ＿ｎａｍｅ
ｔｒｉｇｇｅｒ＝ｅｌｅｍｅｎｔ＿ｎａｍｅ．ｉｄ
ｔａｒｇｅｔ＝ｅｌｅｍｅｎｔ＿ｎａｍｅ．ｉｄ
[0246]上記はイベントタイプのインスタンスの定義である。それは、どの要素が「ｔｒｉｇｇｅｒ」であり、どの要素がイベントの「ｔａｒｇｅｔ」であるかを指定する。
【０２４９】
例３：遅延なしのスプネット
[0247]ランダムに結合された８００個の興奮性ニューロンと２００個の抑制性ニューロンとのネットワーク（ｅｘｃ−＞ａｌｌおよびｉｎｈ−＞ｅｘｃ結合のうちの１００個）が、ＳＴＤＰと伝導遅延なしとに従わなければならない興奮性シナプスで定義され得る（伝導遅延については、次の例を参照されたい）。
【０２５０】
ＱＩＦ＝ｒｕｌｅ
ｃｏｄｅ＝’ｖ＋＝０．５ｆ＊（（０．０４ｆ＊ｖ＋５．０ｆ）＊ｖ＋１４０．０ｆ−ｕ＋Ｉ）；  ｖ＋＝０．５ｆ＊（（０．０４ｆ＊ｖ＋５．０ｆ）＊ｖ＋１４０．０ｆ−ｕ＋Ｉ）；  Ｉ＝０．０ｆ；’
ｅｘｃ＝ｅｌｅｍｅｎｔ
ｃｏｄｅ＝’ｕ＋＝０．０２ｆ＊（０．２ｆ＊ｖ−ｕ）；’
ｃｏｄｅ＝ＱＩＦ
ｒａｎｋ＝０
ｉｎｉｔ＝’ｆｌｏａｔ  ｖ＝−６５．０ｆ；  ｆｌｏａｔ  ｕ＝−１３．０ｆ；  ｆｌｏａｔ  Ｉ＝０．０ｆ；  ｉｎｔ  ｌａｓｔ＿ｓｐｉｋｅ＝−１０００’
１：８００＝ｅｘｃ
ｉｎｈ＝ｅｌｅｍｅｎｔ
ｃｏｄｅ＝’ｕ＋＝０．０１ｆ＊（０．２ｆ＊ｖ−ｕ）；’
ｃｏｄｅ＝ＱＩＦ
ｒａｎｋ＝０
ｉｎｉｔ＝’ｆｌｏａｔ  ｖ＝−６５．０ｆ；  ｆｌｏａｔ  ｕ＝−１３．０ｆ；  ｆｌｏａｔ  Ｉ＝０．０ｆ；  ｉｎｔ  ｌａｓｔ＿ｓｐｉｋｅ＝−１０００；’
１：２００＝ｉｎｈ
ｓｐｉｋｅ＝ｒｕｌｅ
ｃｏｄｅ＝’ｖ＞３０’
ａｆｔｅｒ＿ｓｐｉｋｅ＿ｒｅｓｅｔ＿ｅｘｃ＝ｅｖｅｎｔ
ｔｒｉｇｇｅｒ＿ｃｏｎｄｉｔｉｏｎ＝ｓｐｉｋｅ
ｔｒｉｇｇｅｒ＿ｒａｎｋ＝０．１
ｔａｒｇｅｔ＿ｒｕｌｅ＝’ｕ＋＝８；  ｌａｓｔ＿ｓｐｉｋｅ＝ｎｏｗ’
ｔａｒｇｅｔ＿ｒａｎｋ＝０．２
ａｆｔｅｒ＿ｓｐｉｋｅ＿ｒｅｓｅｔ＿ｅｘｃ
ｔｒｉｇｇｅｒ＝ｅｘｃ．１：８００  
ｔａｒｇｅｔ＝ｅｘｃ．１：８００
ａｆｔｅｒ＿ｓｐｉｋｅ＿ｒｅｓｅｔ＿ｉｎｈ＝ｅｖｅｎｔ
ｔｒｉｇｇｅｒ＿ｃｏｎｄｉｔｉｏｎ＝ｓｐｉｋｅ
ｔｒｉｇｇｅｒ＿ｒａｎｋ＝０．１
ｔａｒｇｅｔ＿ｒｕｌｅ＝’ｕ＋＝２；  ｌａｓｔ＿ｓｐｉｋｅ＝ｎｏｗ’
ｔａｒｇｅｔ＿ｒａｎｋ＝０．２
ａｆｔｅｒ＿ｓｐｉｋｅ＿ｒｅｓｅｔ＿ｉｎｈ
ｔｒｉｇｇｅｒ＝ｉｎｈ．１：２００
ｔａｒｇｅｔ＝ｉｎｈ．１：２００
iｎｈ＿ｓｙｎ＿ｅｖｅｎｔ＝ｅｖｅｎｔ
ｔｒｉｇｇｅｒ＿ｃｏｎｄｉｔｉｏｎ＝ｓｐｉｋｅ
ｔｒｉｇｇｅｒ＿ｒａｎｋ＝０．１
ｔａｒｇｅｔ＿ｒｕｌｅ＝’Ｉ−＝５．０ｆ’
ｔａｒｇｅｔ＿ｒａｎｋ＝０．３
／／２００＊１００個のそのようなエントリを作る
iｎｈ＿ｓｙｎ＿ｅｖｅｎｔ
ｔｒｉｇｇｅｒ＝ｉｎｈ．＜ｒａｎｄｏｍ  ｎｕｍｂｅｒ  ｂｅｔｗｅｅｎ  １  ａｎｄ  ２００＞
ｔａｒｇｅｔ＝ｅｘｃ．＜ｒａｎｄｏｍ  ｎｕｍｂｅｒ  ｂｅｔｗｅｅｎ  １  ａｎｄ  ８００＞
ｗｅｉｇｈｔ  ｕｐｄａｔｅ＝ｒｕｌｅ
ｃｏｄｅ＝’ｗ＋＝０．０１ｆ＋ｓｄ；  ｉｆ  （ｗ＜０．０ｆ）  ｗ＝０．０ｆ；  ｉｆ  （ｗ＞１０．０ｆ）  ｗ＝１０．０ｆ；  ｓｄ＊＝０．９ｆ’
ｅｘｃ＿ｓｙｎａｐｓｅ＝ｅｌｅｍｅｎｔ
ｃｏｄｅ＝ｗｅｉｇｈｔ＿ｕｐｄａｔｅ
ｒａｎｋ＝９９９：１０００／／そのサイクル内の任意の時間
ｉｎｉｔ＝’ｆｌｏａｔ  ｗ＝６．０ｆ；  ｆｌｏａｔ  ｓｄ＝０．０ｆ；  ｉｎｔ  ｌａｓｔ＿ａｃｔｉｖｅ−＝１０００’
ｉｄ＝ｅｘｃ＿ｓｙｎａｐｓｅ
ｐｏｓｔ＝＜ｅｉｔｈｅｒ  ｅｘｃ．ｉｄ  ｏｒ  ｉｎｈ．ｉｄ  ｗｉｔｈ  ｉｄ＝ｒａｎｄｏｍ＞
ＰＳＰ＿ＬＴＤ＿ｒｕｌｅ＝ｒｕｌｅ
ｃｏｄｅ＝’ｐｏｓｔ．Ｉ＋＝ｗ；  ｓｄ−＝ＬＴＤ（ｎｏｗ−ｐｏｓｔ．ｌａｓｔ＿ｓｐｉｋｅ）；
ｌａｓｔ＿ａｃｔｉｖｅ＝ｎｏｗ’
ｉｎｉｔ＝’ｆｌｏａｔ  ＬＴＤ＝｛．．．｝’
ＰＳＰ＿ＬＴＤ＿ｅｖｅｎｔ＝ｅｖｅｎｔ
ｔｒｉｇｇｅｒ＿ｃｏｎｄｉｔｉｏｎ＝ｓｐｉｋｅ
ｔｒｉｇｇｅｒ＿ｒａｎｋ＝０．１
ｔａｒｇｅｔ＿ｒｕｌｅ＝ＰＳＰ＿ＬＴＤ＿ｒｕｌｅ
ｔａｒｇｅｔ＿ｒａｎｋ＝０．３
ＰＳＰ＿ＬＴＤ＿ｅｖｅｎｔ
ｔｒｉｇｇｅｒ＝ｅｘｃ．＜ｅａｃｈ  ｉｄ＞
ｔａｒｇｅｔ＝ｅｘｃ＿ｓｙｎａｐｓｅ．＜ｅａｃｈ  ｃｏｒｒｅｓｐｏｎｄｉｎｇ  ｉｄ＞
ＬＴＰ＿ｒｕｌｅ＝ｒｕｌｅ
ｃｏｄｅ＝’ｓｄ＋＝ＬＴＤ（ｎｏｗ−ｌａｓｔ＿ａｃｔｉｖｅ）’
ｉｎｉｔ＝’ｆｌｏａｔ  ＬＴＰ＝｛．．．｝’
ＬＴＰ＿ｅｖｅｎｔ＝ｅｖｅｎｔ
ｔｒｉｇｇｅｒ＿ｃｏｎｄｉｔｉｏｎ＝ｓｐｉｋｅ
ｔｒｉｇｇｅｒ＿ｒａｎｋ＝０．１
ｔａｒｇｅｔ＿ｒｕｌｅ＝ＬＴＰ＿ｒｕｌｅ
ｔａｒｇｅｔ＿ｒａｎｋ＝０．４
ＬＴＰ＿ｅｖｅｎｔ
ｔｒｉｇｇｅｒ＝｛各ｅｘｃ．ｉｄおよびｉｎｈ．ｉｄについて｝
ｔａｒｇｅｔ＝ｅｘｃ＿ｓｙｎａｐｓｅ．＜ｅａｃｈ  ｃｏｒｒｅｓｐｏｎｄｉｎｇ  ｉｄ＞
リスティング  ６
[0248]リンカは、計算エンジンが個々のユニットについてモデルシミュレーションステップごとに１回‘ｓｐｉｋｅ’条件を実行するように、（同じランクをもつ内にある）‘ｓｐｉｋｅ’ルールによってトリガされるイベントを単一のイベントにグループ化するように構成され得る。
【０２５１】
[0249]いくつかの実装形態では、ルールの定義中で与えられる中のランク情報。このようにして、イベントの定義においてランクを繰り返す必要がなくなり得る。
【０２５２】
[0250]スパイキングニューロンネットワークの１つまたは複数の実装形態（たとえば、強化学習）では、ニューロンによるポストシナプス反応発生から可塑性適応を分離することが有益であり得る。
【０２５３】
[0251]図１４に、１つまたは複数の実装形態によるイベント駆動型ネットワーク更新メカニズムを示す。ネットワーク１４００は、たとえば、スパイク反応プロセス（ＳＲＰ：Ｓｐｉｋｅ  Ｒｅｓｐｏｎｓｅ  Ｐｒｏｃｅｓｓ）１４２２に従って動作可能な、少なくとも１つのスパイキングニューロン１４２０を備え得る。ニューロン１４２０は、Ｍ−入力結合１４０４を介してＭ次元入力スパイキングストリームＸ（ｔ）１４０２を受信し得る。いくつかの実装形態では、Ｍ次元スパイクストリームはニューロン１４２０へのＭ−入力シナプス結合に対応し得る。図１４に示されているように、個々の入力結合は、学習中に調整されるように構成され得る結合パラメータ１４０６ｗijによって特徴づけられ得る。１つまたは複数の実装形態では、結合パラメータは結合有効性（たとえば、荷重）を備え得る。いくつかの実装形態では、パラメータ１４０６はシナプス遅延を備え得る。いくつかの実装形態では、パラメータ１４０６はシナプス伝達の確率を備え得る。
【０２５４】
[0252]いくつかの実装形態では、ニューロン１４２０は、結合１４０８を介して外部入力を受信するように構成され得る。１つまたは複数の実装形態では、入力１４０８は、図１４の中にｒ+、ｒ、として示された、トレーニング入力、たとえば、正および／または負の強化信号を備え得る。以下のように表され得る、強化信号スパイクストリームを示す。
【数１】
2015529357.tif 000002
【０２５５】
ここで、
【数２】
2015529357.tif 000003
【０２５６】
は、それぞれ、たとえば、正および負の強化に関連するスパイク時間を示す。
【０２５７】
[0253]教師あり学習のいくつかの実装形態では、ニューロンポストシナプス反応をトリガするために教師スパイクが使用され得る。
【０２５８】
[0254]強化学習のいくつかの実装形態では、外部信号（たとえば、強化スパイク）が、（たとえば、一実装形態では、短い時間期間の間、シナプス荷重を増加させることによって）ニューロンを探究的レジームに入りさせ得る。
【０２５９】
[0255]ニューロン１４２０は、出力Ｙ（ｔ）（たとえば、ポストシナプススパイク）を発生するように構成され得、この出力は、出力結合１４１４を介して所望のターゲット（たとえば、他のニューロン１４２０＿１、１４２０＿２、１４２０＿３）に送出され得る。図１４に示されているように、個々の出力結合１４１４は、学習中に調整され得る結合パラメータ１４１６によって特徴づけられ得る。１つまたは複数の実装形態では、結合パラメータ１４１６は結合有効性（たとえば、荷重）を備え得る。いくつかの実装形態では、パラメータ１４１６はシナプス遅延を備え得る。いくつかの実装形態では、パラメータ１４１６はシナプス伝達確率を備え得る。
【０２６０】
[0256]ニューロン１４２０は、たとえば、ロボットアームを制御するために、たとえば、上記に組み込まれる、「STOCHASTIC SPIKING NETWORK LEARNING APPARATUS AND METHODS」と題する米国特許出願第１３／４８７，５３３号などに記載されている、コントローラ機能を実装するように構成され得る。出力信号ｙは、所望の軌道に沿ってロボットアームを移動するように構成されたモーター制御コマンドを含み得る。プロセス１４２２はプロセス内部状態ｑによって特徴づけられ得る。内部状態ｑは、たとえば、ニューロンの膜電位、膜のコンダクタンス、および／または他のパラメータを備え得る。プロセス１４２２は、ニューロンのシナプス荷重１４０６、１４１６、反応発生（発火）しきい値、静止電位、および／または他のパラメータを備え得る、１つまたは複数の学習パラメータによって特徴づけられ得る。１つまたは複数の実装形態では、パラメータｗは、ネットワークのユニット（たとえば、ニューロン）間の信号伝達の確率を備え得る。
【０２６１】
[0257]入力信号ｘ（ｔ）は、特定の制御タスクを解決するために使用されるデータを備え得る。ロボットアームまたは自律ロボットを伴うものなど、１つまたは複数の実装形態では、信号ｘ（ｔ）は、生センサーデータ（たとえば、近接度、慣性、および／または地形イメージング）、および／または前処理されたデータ（たとえば、加速度計から抽出された速度、障害物までの距離、および／または位置）のストリームを備え得る。オブジェクト認識を伴うものなど、いくつかの実装形態では、信号ｘ（ｔ）は、入力画像中のピクセル値のアレイ（たとえば、ＲＧＢ、ＣＭＹＫ、ＨＳＶ、ＨＳＬ、および／またはグレースケール）、あるいは前処理されたデータ（たとえば、顔認識のためのガボールフィルタのアクティブ化のレベル、輪郭、および／または他の前処理されたデータ）を備え得る。１つまたは複数の実装形態では、入力信号ｘ（ｔ）は、たとえば、現在の状態と所望の動きとに基づいてロボットの将来の状態を予測するために、所望の動き軌道を備え得る。
【０２６２】
[0258]１つまたは複数の実装形態では、そのうえ、ネットワーク１４００は、たとえば、その全体が参照により本明細書に組み込まれる、２０１２年３月１５日に出願された「TAG-BASED APPARATUS AND METHODS FOR NEURAL NETWORKS」と題する米国特許出願第１３／３８５，９３８号に記載されている、高レベル神経形態学的記述（ＨＬＮＤ：High Level Neuromorphic Description）フレームワークを使用して実装され得る。１つまたは複数の実装形態では、ＨＬＮＤフレームワークは、本明細書で説明するイベントベース更新方法を扱うために増補され得る。
【０２６３】
[0259]ニューロンプロセス１４２２は、イベントベース更新を実現するように構成され得る。１つまたは複数の実装形態では、イベントベース更新は、以下で詳細に説明するイベントベース機能の様々な態様を実現するように構成された複数のイベントタイプ（たとえば、樹状、軸索、カスタム、および／または、他のイベントタイプ）を備え得る。
【０２６４】
[0260]いくつかの実装形態では、イベントベース更新機能を可能にするために、ＥＮＤ２．０実装形態が、図１９に関して以下で説明するように拡張され得る。いくつかの実装形態では、ＥＮＤ２．０フォーマット１９００はＰＯＳＴ−ＳＹＮＡＰＴＩＣ＿ＥＶＥＮＴ（ＰＥ）を備え得る。拡張ＥＮＤフレームワークの１つまたは複数の実装形態（たとえば、図１９のＥＮＤ２．１実装形態１９０２）では、ＰＯＳＴ−ＳＹＮＡＰＴＩＣ＿ＥＶＥＮＴを離れている間、以下で詳細に説明する図１５Ａ〜図１５Ｂの例によって示されるように、現行のＥＮＤ２．０フォーマットとの後方互換性を可能にするために、追加の単一のＤＥＮＲＩＴＩＣ＿ＥＶＥＮＴが実装され得る。
【０２６５】
[0261]いくつかの実装形態（たとえば、図１９のＥＮＤ２．１実装形態１９０４）では、たとえば、上記で詳細に説明したように、ポストシナプス反応を発生することなしにプレシナプスおよび／またはイベントトリガ更新を処理するために、ＣＵＳＴＯＭ  ＿ＥＶＥＮＴ  ＡＰＩが与えられ得る。ＥＮＤ２．１実装形態１９０４は、以下で詳細に説明する図１５Ｃのリスティングに示されている。ＥＮＤ２．１実装形態１９０４はＥＮＤ２．０フォーマットとの後方互換性がある。
【０２６６】
[0262]いくつかの実装形態（たとえば、図１９のＥＮＤ２．１実装形態１９０６）では、たとえば、上記で説明したプレおよび／またはポスト更新を処理するために、ＰＯＳＴ−ＳＹＮＡＰＴＩＣ＿ＥＶＥＮＴが削除され得、ＣＵＳＴＯＭ  ＿ＥＶＥＮＴ  ＡＰＩが与えられ得る。ＥＮＤ２．１実装形態１９０６は、以下で詳細に説明する図１５Ｄ〜図１５Ｆのリスティングに示されている。ＥＮＤ２．１実装形態１９０６は現行のＥＮＤ２．０フォーマットとの後方互換性がないが、それは、イベント処理のための統合されたフレキシブルな手法を提供し、有利には、たとえば、より少数の論理条件の処理により、より高速なコード実行を生じ得る。ただし、特にユニットごとに可変数のイベントを実装するとき、開発者によって特別な注意が払われる必要がある。
【０２６７】
[0263]ユニットタイプ定義は以下のように樹状および／または軸索イベント条件を備え得る。
【０２６８】
＜ｕｎｉｔ＿ｔｙｐｅ＞
．．．  ｍｅｍｂｅｒｓ  ｏｆ  ＥＮＤ  ２．０  ｕｎｉｔ＿ｔｙｐｅ  ｄｅｆｉｎｉｔｉｏｎ  （ｅ．ｇ．  ｎａｍｅ，  ｕｐｄａｔｅ＿ｒｕｌｅ）
ｄｅｎｄｒｉｔｉｃ＿ｅｖｅｎｔ＿ｃｏｎｄｉｔｉｏｎ
ａｆｔｅｒ＿ｄｅｎｄｒｉｔｉｃ＿ｅｖｅｎｔ＿ｒｕｌｅ
ここで、
ｄｅｎｄｒｉｔｉｃ＿ｅｖｅｎｔ＿ｃｏｎｄｉｔｉｏｎ
は、樹状突起イベント、たとえば、‘ｄｅｎｒｉｔｉｃ＿ｅｖｅｎｔ＿ｆｌａｇ＝＝ｔｒｕｅ’を検出するように構成された論理ステートメントを定義する。いくつかの実装形態では、イベントルールは個々のクロックサイクル（モデルタイムステップ）で実行され得る。クラスがベースクラスから派生されたとき、サブクラスの樹状突起イベント条件がベースクラスの樹状突起イベント条件に取って代わる。ユニット定義メンバー
ａｆｔｅｒ＿ｄｅｎｄｒｉｔｉｃ＿ｅｖｅｎｔ＿ｒｕｌｅ
は、樹状突起イベントが検出されたときに実行され得るコードを備え得る。派生サブクラスについて、サブクラスａｆｔｅｒ＿ｄｅｎｄｒｉｔｉｃ＿ｅｖｅｎｔ＿ｒｕｌｅはベースクラスのａｆｔｅｒ＿ｄｅｎｄｒｉｔｉｃ＿ｅｖｅｎｔ＿ｒｕｌｅの前に実行され得る。
【０２６９】
[0264]シナプスクラスは以下のように樹状突起イベントによって増補され得る。
【０２７０】
＜ｓｙｎａｐｔｉｃ＿ｔｙｐｅ＞
．．．  ｍｅｍｂｅｒｓ  ｏｆ  ＥＮＤ  ２．０  ｓｙｎａｐｓｅ  ｔｙｐｅ  （ｅ．ｇ．  ｐｒｅｓｙｎａｐｔｉｃ＿ｅｖｅｎｔ＿ｒｕｌｅ）
ｄｅｎｄｒｉｔｉｃ＿ｅｖｅｎｔ＿ｒｕｌｅ
ここで、ポストシナプスユニットのｄｅｎｄｒｉｔｉｃ  ｅｖｅｎｔを発生することによってトリガされるｄｅｎｄｒｉｔｉｃ＿ｅｖｅｎｔ＿ｒｕｌｅのコード。いくつかの実装形態では、それは、調節されたＳＴＤＰを実行することができる。
【０２７１】
[0265]いくつかの実装形態では、たとえば、図１４の破線の矢印１４２６によって示されるように、ニューロン１４２０の入力結合を変更する（たとえば、シナプス荷重１４０６を調整する）ために、内部（樹状突起とも呼ばれる）イベントが定義され得る。
【０２７２】
[0266]１つまたは複数の実装形態では、樹状突起イベントは外部トリガによってトリガされ得る。そのような一実装形態では、外部トリガは、図１４に示された強化信号１４０８を備え得る。いくつかの実装形態では、外部信号１４０８は、たとえば、タイマーなど、別のネットワークエンティティによって生成される信号を備え得る。１つまたは複数の実装形態では、信号１４０８は、ネットワークの入力および／または出力スパイキングアクティビティ（たとえば、スパイクタイミング）を記憶するように構成された、バッファに関連付けられたオーバーフローアラームを備え得る。バッファオーバーフローイベント発生の一実装形態は、その全体が参照により本明細書に組み込まれる、「APPARATUS AND METHODS FOR SYNAPTIC UPDATE IN A PULSE-CODED NETWORK」と題する、２０１１年９月２１日に出願された、同一出願人が所有する米国特許出願第１３／２３９，２５５号に記載されている。
【０２７３】
[0267]いくつかの実装形態では、樹状突起イベントは、図１４のニューロン１４２０のプロセス１４２２によって内部でトリガされ得る。１つまたは複数の実装形態では、内部イベントは、内部時間満了、ニューロンスパイキング履歴（プレシナプスおよび／またはポストシナプス）を記憶し得る内部バッファに関連するオーバーフローインジケータを備え得る。たとえば、プロセス１４２２の状態に関係するものなど、内部および／または外部イベントトリガの多くの他のソースが存在し得ることを当業者なら諒解されよう。
【０２７４】
[0268]本開示の原理によれば、ターゲット（たとえば、図１４のニューロン１４２０＿１、１４２０＿２、１４２０＿３）へのポストシナプス反応伝搬を引き起こすことなしにシナプス更新を実装するために、内部イベントが使用され得る。例として、１つまたは複数の実装形態では、ニューロン前実行に基づいて１つまたは複数の入力結合１４０４の可塑性の更新をトリガする（たとえば、荷重１４０６を変更する）ために、外部強化信号１４０８が使用され得る。
【０２７５】
[0269]１つまたは複数の実装形態では、ポストシナプス反応なしのシナプス更新は、望ましくないネットワークスパイキングアクティビティ（たとえば、ノイズ）を低減し得る。そのような望ましくないスパイキングは、しばしば、プラント（たとえば、モーター）の機能不全を引き起こし得る。たとえば、不要な（たとえば、繰返し）モーター制御コマンドを生じることなしにモーターコントローラの学習収束を改善するために、樹状突起イベントとともにより高速な報酬信号（たとえば、１Ｈｚ〜１００Ｈｚ）が使用され得る。学習誤りが十分に小さいとき、モーター制御出力を引き起こすために軸索イベントが使用され得、それによってプラント寿命を増加させる。
【０２７６】
[0270]いくつかの実装形態では、内部でトリガされた樹状突起イベント（たとえば、プレシナプスバッファオーバーフロー）は、バッファコンテンツがクリアされ、ニューロンプロセス１４２２の完全性が維持され得るようなシナプス更新を引き起こし得る。
【０２７７】
[0271]いくつかの実装形態では、樹状突起イベントは、図１４の破線の矢印１４２４によって示されるように、外部信号結合１４０８の可塑性の更新を引き起こし得る。
【０２７８】
[0272]図１５Ａに、外部でトリガされた内部（すなわち、樹状）イベントを使用する可塑性の更新の例示的な一実装形態を提示する。図１５Ａの樹状更新実装形態は、ＤＥＮＤＲＩＴＩＣ＿ＥＶＥＮＴ＿ＲＵＬＥを備えるＥＮＤおよび／またはＨＬＮＤ拡張の使用を示している。
【０２７９】
[0273]図１５Ｂに、内部でトリガされた内部（すなわち、樹状突起）イベントを使用する可塑性の更新の例示的な一実装形態を示す。図１５Ｂの樹状突起更新実装形態は、ＤＥＮＤＲＩＴＩＣ＿ＥＶＥＮＴ＿ＲＵＬＥを備えるＥＮＤ拡張の使用を示している。図１５Ｂの更新ルールは、ルールを誘発するために内部条件を利用する。
【０２８０】
[0274]図１５Ｂの実装形態は恒常的メカニズムを示し、ニューロンアクティビティがしきい値を超えた（たとえば、ニューロンがあまりに多くのスパイクを発生した）ときの興奮性を減少させる（個々の荷重を減少させる）ように構成され得る
[0275]いくつかの実装形態では、入力結合の可塑性の更新は、２０１１年６月２日に出願された、「SENSORY INPUT PROCESSING APPARATUS AND METHODS」と題する、同一出願人が所有する同時係属米国特許出願第１３／１５２，１１９号、２０１２年５月７日に出願された、「SPIKING NEURAL NETWORK FEEDBACK APPARATUS AND METHODS」と題する、同一出願人が所有する同時係属米国特許出願第１３／４６５，９２４号、２０１２年５月７日に出願された、「SENSORY INPUT PROCESSING APPARATUS IN A SPIKING NEURAL NETWORK」と題する、同一出願人が所有する同時係属米国特許出願第１３／４６５，９０３号、２０１２年５月７日に出願された、「SPIKING NEURAL NETWORK OBJECT RECOGNITION APPARATUS AND METHODS」と題する、同一出願人が所有する米国特許出願第１３／４６５，９１８号、および２０１２年６月４日に出願された、「SPIKING NEURON NETWORK APPARATUS AND METHODS」と題する、同一出願人が所有する米国特許出願第１３／４８８，１０６号に記載されているものなどのＳＴＤＰルールを使用して実現され得、上記の各々の全文は参照により本明細書に組み込まれる。
【０２８１】
[0276]いくつかの実装形態では、結合更新のために使用される可塑性ルールは、たとえば、２０１２年１月２４日に発行された米国特許第８，１０３，６０２号に記載されているように、外部信号１４０８のタイミングによって調節され得る。そのような一実装形態では、ｊ番目の結合１４０４の荷重１４０６が以下のように調整され得る。
【数３】
2015529357.tif 000004
【０２８２】
ここで、
ｔout  −  ニューロンによって生成された直近の出力（ポストシナプススパイク）の時間を示し、
ｔinj  −  結合ｊを介してニューロンによって受信された１つまたは複数の入力直近の入力（（１つまたは複数の）プレシナプススパイク）の時間を示し、
ｔext  −  外部（トリガ）信号の時間を示す。
【０２８３】
[0277]１つまたは複数の実装形態では、ネットワークによる強化学習を可能にするために樹状突起イベントが利用され得る。例として、強化入力（「樹状突起スパイク）を受信すると、ポストシナプスターゲットにポストシナプス反応を送出することなしに、ニューロンの着信シナプスの可塑性が調整され得る。その後、次いでニューロン状態が超しきい値条件に達し、所望の宛先にニューロンポストシナプス反応を送出するために軸索イベントが使用され得る。
【０２８４】
[0278]いくつかの実装形態では、内部イベントは、プロセスの状態（たとえば、図１４のプロセス１４２２の電位）への入力結合（たとえば、結合１４０４）の読取りアクセスを与え得る。
【０２８５】
[0279]いくつかの実装形態では、内部イベントの実行中に、入力結合は、ニューロンのプレシナプスおよび／またはポストシナプスアクティビティ履歴を記憶しているバッファのコンテンツへの読取りアクセスを与えられ得る。
【０２８６】
[0280]図１５Ａの実装形態は、たとえば、ロボット制御適用例における強化学習とともに使用するための調節されたＳＴＤＰを示している。
【０２８７】
[0281]いくつかの実装形態では、たとえば、入力結合１４０４の更新を必要とすることなしに、所望のターゲット（ニューロン１４２０＿１）にニューロン（たとえば、図１４のニューロン１４２０）の出力（ポストシナプススパイク）を送出するために、外部（軸索とも呼ばれる）イベントが定義され得る。１つまたは複数の実装形態では、軸索イベントはニューロンスパイク反応プロセス（たとえば、超しきい値条件）によってトリガされ得る。
【０２８８】
[0282]確率的ニューロンのいくつかの実装形態では、軸索イベントは、（ｉ）乱数発生器の出力がしきい値よりも大きいとき、および／または、（ｉｉ）時間カウンタが、たとえば、最大非アクティビティ間隔に関連し得るある値を超えるとき（たとえば、ニューロンが１００ｍｓを超えてサイレントであるとき）にトリガされ得る。
【０２８９】
[0283]いくつかの実装形態では、軸索イベントは、図１４の破線の矢印１４２６によって示されるように、出力１４１６の可塑性の更新を引き起こし得る。
【０２９０】
[0284]いくつかの実装形態では、内部イベントおよび外部イベントは、可塑性の更新およびポストシナプス出力送出を実現するために、単一の合成イベントに組み合わせられ得、それによって、上記のＥＮＤ  ｖ１、ＥＮＤ  ２によって記述される通常更新イベントのための互換性が与えられる。
【０２９１】
[0285]いくつかの実装形態では、樹状突起イベントの実行中に軸索イベントの実行が一時的に中断され得る。
【０２９２】
[0286]いくつかの実装形態では、樹状突起イベントはカウンタをセットアップし得、軸索は、スパイク送出イベントをトリガするためにそのカウンタを検査し得る。
【０２９３】
[0287]いくつかの実装形態では、ニューロンプロセス（たとえばプロセス１４２２）は、樹状突起イベント（トリガ可塑性の更新）、およびシナプス更新とスパイク送出とを誘発する共通ＥＮＤスパイクイベントという、２つのイベントタイプを備え得る。
【０２９４】
[0288]いくつかの実装形態では、ユニット記述は、（ｉ）着信シナプスの可塑性に影響を及ぼし得るが、軸索に沿ってポストシナプスターゲットに伝搬されるシグナリングを生じない「樹状突起」スパイク、および（ｉｉ）ポストシナプスターゲットに伝搬するが、ニューロン上への着信シナプスに対して何も行わない「軸索」スパイクという、２つのタイプのイベントを備え得る。単に樹状突起スパイクと軸索スパイクとの組合せでの、ＥＮＤ１、２、３において使用される標準「スパイク」。
【０２９５】
[0289]図１５Ｃに、外部でトリガされた外部（すなわち、樹状突起）イベントを使用する可塑性の更新の例示的な一実装形態を提示する。図１５Ｃの実装形態はニューロン反応条件（たとえば、メソッドｓｐｉｋｅ（））を備え得る。所望のターゲット（ＯｕｔｐｕｔＮｅｕｒｏｎ）へのスパイク伝搬を引き起こすために、明示的に定義されたＡｘｏｎｉｃＥｖｅｎｔ（図１５Ｃ、２８〜４０行目）が使用され得る。
【０２９６】
[0290]いくつかの実装形態では、ＥＮＤフォーマットが以下のように拡張され得る。ユニットタイプ定義は以下のように樹状突起および／または軸索イベント条件を備え得る。
【０２９７】
＜ｕｎｉｔ＿ｃｌａｓｓ＞
ｕｎｉｔ＿ｃｌａｓｓ＿ｉｄ
ｉｎｉｔｉａｌｉｚａｔｉｏｎ
ｅｘｅｃｕｔｉｏｎ＿ｃｏｎｄｉｔｉｏｎ
ｕｐｄａｔｅ＿ｒｕｌｅ
ｌｉｓｔ  ｏｆ
ｃｕｓｔｏｍ＿ｅｖｅｎｔ＿ｔｙｐｅ＿ｉｄ
ｃｕｓｔｏｍ＿ｅｖｅｎｔ＿ｃｏｎｄｉｔｉｏｎ
ａｆｔｅｒ＿ｃｕｓｔｏｍ＿ｅｖｅｎｔ＿ｒｕｌｅ
ここで、
[0291]シナプスクラスは以下のように樹状突起イベントによって増補され得る。
【０２９８】
＜ｓｙｎａｐｔｉｃ＿ｃｌａｓｓ＞
ｓｙｎａｐｓｅ＿ｃｌａｓｓ＿ｉｄ
ｉｎｉｔｉａｌｉｚａｔｉｏｎ
ｐｒｅｓｙｎａｐｔｉｃ＿ｅｖｅｎｔ＿ｒｕｌｅ
ｕｐｄａｔｅ＿ｒｕｌｅ
ｌｉｓｔ  ｏｆ
ｃｕｓｔｏｍ＿ｅｖｅｎｔ＿ｔｙｐｅ＿ｉｄ
ｃｕｓｔｏｍ＿ｅｖｅｎｔ＿ｒｕｌｅ
ここで、何らかのｉｄをもつカスタムイベントルールのコードが、同じｉｄをもつポストシナプスユニットのカスタムイベントを発生することによってトリガされる。シナプスは、異なるｉｄをもついくつかのイベントルールを定義することができる。いくつかの実装形態では、それは、調節されたＳＴＤＰを実行することができる。
【０２９９】
[0292]１つまたは複数の実装形態では、ユーザは、イベントＨＬＮＤ拡張およびＥＮＤフレームワークを使用してスパイキングネットワークを定義するとき、カスタムイベントを定義し得る。いくつかの実装形態では、カスタムイベントは、入力結合１４０４の一部の更新をトリガするために使用され得る。例として、そのようなカスタムイベントを使用して、ニューロンへの１つのタイプの入力（たとえば、アーム位置）を与える結合が更新され得る。残りの結合（たとえば、視覚入力を与える結合）は、１つまたは複数の実装形態では、異なる可塑性メカニズムに従って動作可能であり、同じカスタムイベントによって更新されないことがある。
【０３００】
[0293]いくつかの実装形態では、ユーザは、複数のイベントと、それらのイベントによって誘発され得るルールとを定義し得る。このようにして、ユーザは複数のタイプのイベントを定義することができ、そのうちのいくつかは‘樹状突起’イベントとして働くことができ、他のものは「軸索」イベントとして働くことができ、他のものは「緑」、「青」、および／または他のイベントとして働くことができる。
【０３０１】
[0294]図１５Ｄ〜図１５Ｅに、カスタムイベントを使用する可塑性の更新の例示的な実装形態を提示する。図１５Ｄの実装形態はルールトリガ条件（たとえば、状態パラメータｖ＞１）を示している。図１５Ｄの実装形態は、状態変数と反応アクティビティとに基づく複数のルールトリガ条件を備え得る。
【０３０２】
図１５Ｆに、複数のカスタムイベントを備える可塑性の更新の例示的な実装形態を提示する。図１５Ｆの実装形態、ニューロンのシナプスは、特殊関数Ｕｎｉｔ．ｅｖｅｎｔ（ｅｖｅｎｔ  ｉｄ）とともに（図１５Ａの場合のような）条件フラグを定義することなしに、ポストシナプスニューロンのＴｅａｃｈｅｒＥｖｅｎｔを発生するように構成され得る。いくつかの実装形態では、リスティング（たとえば、図１５Ｆのリスティング）は１つまたは複数のユーザ定義タグを備え得る。
【０３０３】
[0295]いくつかの実装形態では、ＥＮＤフォーマットが以下のように拡張され得る。ユニットタイプ定義は以下のように樹状突起および／または軸索イベント条件を備え得る。
【０３０４】
＜ｕｎｉｔ＿ｃｌａｓｓ＞
ｕｎｉｔ＿ｃｌａｓｓ＿ｉｄ
ｉｎｉｔｉａｌｉｚａｔｉｏｎ
ｅｘｅｃｕｔｉｏｎ＿ｃｏｎｄｉｔｉｏｎ
ｕｐｄａｔｅ＿ｒｕｌｅ
ｅｖｅｎｔ＿ｃｏｎｄｉｔｉｏｎ
ａｆｔｅｒ＿ｅｖｅｎｔ＿ｒｕｌｅ
ｌｉｓｔ  ｏｆ
ｃｕｓｔｏｍ＿ｅｖｅｎｔ＿ｔｙｐｅ＿ｉｄ
ｃｕｓｔｏｍ＿ｅｖｅｎｔ＿ｃｏｎｄｉｔｉｏｎ
ａｆｔｅｒ＿ｃｕｓｔｏｍ＿ｅｖｅｎｔ＿ｒｕｌｅ
ここで、
[0296]シナプスクラスは以下のように樹状突起イベントによって増補され得る。
【０３０５】
＜ｓｙｎａｐｔｉｃ＿ｃｌａｓｓ＞
ｓｙｎａｐｓｅ＿ｃｌａｓｓ＿ｉｄ
ｉｎｉｔｉａｌｉｚａｔｉｏｎ
ｐｒｅｓｙｎａｐｔｉｃ＿ｅｖｅｎｔ＿ｒｕｌｅ
ｐｏｓｔ−ｓｙｎａｐｔｉｃ＿ｅｖｅｎｔ＿ｒｕｌｅ
ｕｐｄａｔｅ＿ｒｕｌｅ
ｌｉｓｔ  ｏｆ
ｃｕｓｔｏｍ＿ｅｖｅｎｔ＿ｔｙｐｅ＿ｉｄ
ｃｕｓｔｏｍ＿ｅｖｅｎｔ＿ｒｕｌｅ
ここで、何らかのｉｄをもつカスタムイベントルールのコードが、同じＩＤをもつポストシナプスユニットのカスタムイベントを発生することによってトリガされる。シナプスは、異なるｉｄをもついくつかのイベントルールを定義することができる。シナプスクラスは、ＥＮＤ２．０との後方互換性のために、（ポストシナプスユニットにおけるカスタムイベントルールではなく）通常通りトリガされるｐｏｓｔ−ｓｙｎａｐｔｉｃ＿ｅｖｅｎｔ＿ｒｕｌｅを依然として有することに気づかれたい。いくつかの実装形態では、それは、調節されたＳＴＤＰを実行することができる。
【０３０６】
[0297]図１５Ｇのリスティングに、ニューロン出力を引き起こすことなしにはシナプス更新を実施しないように構成された樹状突起イベントを備えるネットワーク更新を示す。
【０３０７】
[0298]図１５Ｈのリスティングに、シナプス更新を実行するように構成された、ＣＵＳＴＯＭ＿ＥＶＥＮＴ＿ＲＵＬＥメソッドを備える、カスタムイベントの使用を示す。
【０３０８】
[0299]図１６Ａ〜図１６Ｃに、本開示のイベント駆動型更新を実装する例示的な方法を示す。いくつかの実装形態では、図１６Ａ〜図１６Ｃの方法は、たとえば、図１４のニューロン１４２０を動作させるために使用され得る。その上、図１６Ａ〜図１６Ｃの方法はネットワーク装置（たとえば、図１１Ｃの装置１１３０）において実装され得る。図１６Ａ〜図１６Ｃの方法は、たとえば、以下の図１７に関して説明する感覚処理装置のネットワークなど、スパイキングニューロンネットワークにおける感覚処理において実装され得、それによって、とりわけ、感覚入力を処理するときの強化学習を有利に助け得る。
【０３０９】
[0300]次に図１６Ａに戻ると、方法１６００のステップ１６０２において、イベントがトリガされたかどうかの検査が実施される。検出されると、ステップ１６０４において、イベントタイプがステップ決定される。
【０３１０】
[0301]内部（すなわち、樹状突起）イベントが検出されたとき、本方法はステップ１６０６に進み得、ここで、検出されたイベントタイプをサポートする１つまたは複数の入力結合を選択する。１つまたは複数の実装形態では、１つまたは複数の入力結合によって１つまたは複数の異なる樹状突起イベントタイプがサポートされ得る。
【０３１１】
[0302]ステップ１６０８において、ステップ１６０６において選択された１つまたは複数の入力結合のために適切な内部イベントルールを誘発する。
【０３１２】
[0303]外部（すなわち、軸索）イベントが検出されたとき、本方法はステップ１６１０に進み得、ここで、検出された出力イベントタイプをそのサポートし得る１つまたは複数の出力ターゲットを選択する。
【０３１３】
[0304]ステップ１６１２において、ステップ１６１０において選択された１つまたは複数のターゲットのために適切な外部イベントルール（たとえば、図１５ＡのＰＲＥＳＹＮＡＰＴＩＣルール）を誘発する。
【０３１４】
[0305]図１６Ｂに、たとえば、上記で説明した図１６Ａの方法１６００とともに使用する、内部イベントルールの例示的な一実装形態を示す。
【０３１５】
[0306]方法１６２０のステップ１６２２において、結合更新のタイプを選択する。１つまたは複数の実装形態では、ネットワーク（たとえば、図１４のネットワーク１４００）は１つまたは複数の異なる可塑性ルールをサポートし得る。
【０３１６】
[0307]いくつかの実装形態では、可塑性ルールは、方法１６２０のステップ１６２４における荷重調整によって示されるように、ニューロンの状態（たとえば、図１４のニューロン１４２０の膜電位）に基づく荷重調整を備え得る。
【０３１７】
[0308]いくつかの実装形態では、可塑性ルールは、方法１６２０のステップ１６２６における荷重調整によって示されるように、結合によって送出される入力スパイク（ｔin）と、ニューロン（すなわち、ＳＴＤＰルール）によって生成される出力反応（スパイクされた出力）のタイミングｔoutとの間のタイミングに基づく荷重調整を備え得る。
【０３１８】
[0309]いくつかの実装形態では、可塑性ルールは、方法１６２０のステップ１６２８における荷重調整によって示されるように、結合によって送出される入力スパイク（ｔin）と、ニューロン（すなわち、ＳＴＤＰルール）によって生成される出力反応（スパイクされた出力）のタイミングｔoutと、樹状突起イベントに関連するトリガのタイミングとの間のタイミングに基づく荷重調整を備え得る。１つまたは複数の実装形態では、樹状突起イベントトリガは、図１４の結合１４０８を介してニューロン１４２０に送出される外部信号（たとえば、強化スパイク）を備え得る。いくつかの実装形態では、ステップ１６２８の可塑性は、式２の方法を使用して実現され得る。
【０３１９】
[0310]ステップ１６３０において、（たとえば、図１６Ａのステップ１６０６において選択された結合などの）結合に適切な調整が適用される。
【０３２０】
[0311]図１６Ｃに、たとえば、上記で説明した図１６Ａの方法１６００とともに使用する、外部イベントルールの例示的な一実装形態を示す。
【０３２１】
[0312]方法１６４０のステップ１６４２において、１つまたは複数のターゲット（たとえば、図１４のニューロン１４２０＿１、１４２０＿２、１４２０＿３）のための出力送出ルールを選択する。１つまたは複数の実装形態では、ネットワーク（たとえば、図１４のネットワーク１４００）は、１つまたは複数の異なる出力（たとえば、スパイク送出）ルールをサポートし得る。
【０３２２】
[0313]１つまたは複数の実装形態では、ターゲット選択は、コンパイル時間においてＨＬＮＤフレームワークを介して実現され得る。
【０３２３】
[0314]いくつかの実装形態では、反応送出ルールは、方法１６４０のステップ１６４４のルールによって示されるように、適切なターゲットへのニューロンポストシナプス反応を伝搬することを備え得る。１つまたは複数の実装形態では、ポストシナプス反応伝搬は、ターゲットへの出力信号（たとえば、モーターへの駆動電流、またはモーターコントローラへの制御信号（たとえば、パルス幅変調電位））を印加することを備え得る。
【０３２４】
[0315]いくつかの実装形態では、反応送出ルールは、方法１６２０のステップ１６２６における荷重調整によって示されるように、結合によって送出される入力スパイク（ｔin）と、ニューロン（すなわち、ＳＴＤＰルール）によって生成される出力反応（スパイクされた出力）のタイミングｔoutとの間のタイミングに基づき得る荷重調整をポスティングすることを備え得る。
【０３２５】
[0316]いくつかの実装形態では、反応送出ルールは、方法１６２０のステップ１６２８における荷重調整によって示されるように、結合によって送出される入力スパイク（ｔin）と、ニューロン（すなわち、ＳＴＤＰルール）によって生成される出力反応（スパイクされた出力）のタイミングｔoutと、樹状突起イベントに関連するトリガのタイミングとの間のタイミングに基づき得る荷重調整をポスティングすることを備え得る。１つまたは複数の実装形態では、樹状突起イベントトリガは、図１４の結合１４０８を介してニューロン１４２０に送出される外部信号（たとえば、強化スパイク）を備え得る。いくつかの実装形態では、ステップ１６２８の可塑性は、式３の方法を使用して実現され得る。
【０３２６】
[0317]ステップ１６３０において、（たとえば、図１６Ａのステップ１６０６において選択された結合などの）結合に適切な調整が適用される。
【０３２７】
[0318]いくつかの実装形態（図示せず）では、可塑性ルールは、結合遅延、および／または送信確率調整を備え得る。
【０３２８】
[0319]（たとえば、上記で説明した例示的なイベント駆動型更新メカニズムを使用する）本明細書に記載する方法のうちの１つまたは複数を実装する様々な例示的なスパイキングネットワーク装置について、今度は図１７および図１１Ａ〜図１１Ｄに関して説明する。
【０３２９】
[0320]（本明細書で説明するイベント駆動型更新メカニズムのうちの１つまたは複数を含む）スパイキングニューラルネットワークを使用する感覚信号情報（たとえば、視覚、音響、体性感覚）の処理のための１つの装置が図１７に示されている。図示した処理装置１７００は、入力感覚信号１７２０を受信するように構成された入力インターフェースを含み得る。いくつかの実装形態では、この感覚入力は、（ＲＧＣ、電荷結合デバイス（ＣＣＤ）、ＣＭＯＳデバイス、またはアクティブピクセルセンサー（ＡＰＳ）を備える）イメージングセンサーアレイに入る電磁波（たとえば、可視光、ＩＲ、ＵＶ、および／または他の波長）を備え得る。この場合の入力信号は、受信側装置を介してＣＣＤまたはＣＭＯＳカメラから受信されるか、あるいはファイルからダウンロードされる画像（画像フレーム）のシーケンスである。画像は、２４ＨｚフレームレートでリフレッシュされるＲＧＢ値の２次元行列を備え得る。上記の画像パラメータおよび構成要素は例示にすぎず、多くの他の画像表現（たとえば、ビットマップ、ＣＭＹＫ、グレースケール、および／または他の画像表現）および／またはフレームレートが本技術とともに等しく有用であり得ることを、当業者なら諒解されよう。
【０３３０】
[0321]装置１７００は、符号化された信号１７２６を形成するために、入力信号を変換する（符号化する）ように構成されたエンコーダ１７２４を含み得る。いくつかの実装形態では、符号化された信号は、ニューロン挙動をモデル化するように構成された複数のパルス（パルスのグループとも呼ばれる）を備え得る。符号化された信号１７２６は、エンコーダ１７２４から複数の結合（送信チャネル、通信チャネル、またはシナプス結合とも呼ばれる）１７０４を介して１つまたは複数のニューロンノード（検出器とも呼ばれる）１７０２に通信され得る。
【０３３１】
[0322]図１７の実装形態では、たとえば、指示子１７０２＿１がレイヤ１７０２の第１の検出器を示すように、同じ階層レイヤの異なる検出器は「＿ｎ」指示子で示され得る。図１７では明快のためにただ２つの検出器（１７０２＿１、１７０２＿ｎ）が示されているが、エンコーダは、検出装置ハードウェアおよびソフトウェア制限との互換性があり得る任意の数の検出器ノードに結合され得ることを諒解されたい。単一の検出器ノードは任意の実際的な数のエンコーダに結合され得る。
【０３３２】
[0323]一実装形態では、検出器１７０２＿１、１７０２＿ｎのうちの個々は、通信チャネル１７０８を介して送信されるポストシナプス検出信号を生成するために、たとえば、その各々の全体が参照により本明細書に組み込まれる、２０１０年８月２６日に出願された「SYSTEMS AND METHODS FOR INVARIANT PULSE LATENCY CODING」と題する米国特許出願第１２／８６９，５７３号、２０１０年８月２６日に出願された「INVARIANT PULSE LATENCY CODING SYSTEMS AND METHODS」と題する米国特許出願第１２／８６９，５８３号、２０１１年５月２６日に出願された「APPARATUS AND METHODS FOR POLYCHRONOUS ENCODING AND MULTIPLEXING IN NEURONAL PROSTHETIC DEVICES」と題する米国特許出願第１３／１１７，０４８号、２０１１年６月２日に出願された「APPARATUS AND METHODS FOR PULSE-CODE INVARIANT OBJECT RECOGNITION」と題する米国特許出願第１３／１５２，０８４号に記載されているメカニズムのいずれかを使用して、符号化された信号１７０４中でパルスの所定のパターンを認識するように構成された（ソフトウェアコード、ハードウェア論理、またはそれらの組合せとして実装され得る）論理を含んでいることがある。図１７において、指示子１７０８＿１、１７０８＿ｎは、それぞれ検出器１７０２＿１、１７０２＿ｎの出力を示す。
【０３３３】
[0324]一実装形態では、検出信号は、その全体が参照により本明細書に組み込まれる、２０１１年６月２日に出願された「APPARATUS AND METHODS FOR PULSE-CODE INVARIANT OBJECT RECOGNITION」と題する、同一出願人が所有する同時係属米国特許出願第１３／１５２，０８４号に記載されている例示的な構成と同様の、複雑なオブジェクト特徴およびオブジェクトの認識のための（検出器１７１２＿１、１７１２＿ｍ、１７１２＿ｋを備える）検出器１７１２の次のレイヤに送出され得る。この構成では、検出器の個々の後続のレイヤは、前の検出器レイヤからの信号を受信し、（先行する検出器レイヤによって検出された特徴と比較して）より複雑な特徴およびオブジェクトを検出するように構成され得る。たとえば、エッジ検出器のバンクの後にバー検出器のバンクが続き、その後にコーナー検出器のバンクが続き、その後も同様であり得、それにより、装置によるアルファベット認識が可能になる。
【０３３４】
[0325]検出器１７０２のうちの個々は、（適切なレイテンシとともに）通信チャネル１７０８＿１、１７０８＿ｎ上で検出（ポストシナプス）信号を出力し得、それらの信号は異なる伝導遅延で検出器１７１２に伝搬し得る。図１７の装置の検出器カスケードは、とりわけ、検出装置のソフトウェア／ハードウェアリソースと、検出されるオブジェクトの複雑さとによって決定される、任意の実際的な数の検出器ノードおよび検出器バンクを含んでいることがある。
【０３３５】
[0326]いくつかの実装形態では、装置１７００は、結合１７３４を介して、外部入力を１つまたは複数のニューロン１７０２、１７１２に与えるように構成され得る。１つまたは複数の実装形態では、入力１７３４は、上記の図１４に関して説明したように、トレーニング入力、たとえば、正および／または負の強化信号を備え得る。
【０３３６】
[0327]図１７に示された信号処理装置実装形態はラテラル結合１７０６を備え得る。いくつかの実装形態では、結合１７０６は、図１７の結合１７０６＿１によって示されるように、同じ階層レベルの隣接ニューロン間でポストシナプスアクティビティ指示を通信するように構成され得る。いくつかの実装形態では、隣接ニューロンは、重複する入力（たとえば、図１７の入力１７０４＿１、１７０４＿ｎ）を有するニューロンを備え得、したがって、ニューロンは、同じ入力特徴を学習しないために競合し得る。１つまたは複数の実装形態では、隣接ニューロンは、３次元（３Ｄ）およびまたは２次元（２Ｄ）空間上で互いに一定のボリューム／エリア内に配置されたものなど、空間的に近接したニューロンを備え得る。
【０３３７】
[0328]装置１７００はまた、図１７のフィードバック結合１７１４＿１によって示されるように、１つの階層レイヤ内の検出器から前のレイヤにコンテキスト情報を通信するように構成された、フィードバック結合１７１４を備え得る。いくつかの実装形態では、フィードバック結合１７１４＿２は、上記に組み込まれる、２０１１年６月２日に出願された「APPARATUS AND METHODS FOR PULSE-CODE INVARIANT OBJECT RECOGNITION」と題する、同一出願人が所有する同時係属米国特許出願第１３／１５２，０８４号に詳細に記載されているように、エンコーダ１７２４にフィードバックを与えるように構成され得、それによって感覚入力符号化を可能にする。
【０３３８】
コンピュータ化神経形態学的システム
[0329]コンピュータ化スパイキングネットワークを動作させるように（および上記で説明した例示的なイベント駆動型更新方法を実装するように）適応された、コンピュータ化神経形態学的処理システムの特定の一実装形態を図１１Ａに示す。図１１Ａのコンピュータ化システム１１００は、たとえば、画像センサー、コンピュータ化スパイキング網膜、オーディオアレイ、タッチセンシティブ入力デバイス、および／または他の構成要素など、入力インターフェース１１１０を備え得る。入力インターフェース１１１０は、入力通信インターフェース１１１４を介して処理ブロック（たとえば、シングルまたはマルチプロセッサブロック）に結合され得る。システム１１００は、ニューロン状態および結合パラメータ（たとえば、図１４の荷重１４０６）を記憶し、シナプス更新を可能にするように構成された、ランダムアクセスメモリ（ＲＡＭ）１１０８を備え得る。いくつかの実装形態では、シナプス更新は、たとえば、参照によって上記に組み込まれる、２０１１年９月２１日に出願された「APPARATUS AND METHODS FOR SYNAPTIC UPDATE IN A PULSE-CODED NETWORK」と題する米国特許出願第１３／２３９，２５５号において与えられている記載に従って実施され得る。
【０３３９】
[0330]いくつかの実装形態では、メモリ１１０８は、直接接続（メモリバス）１１１６を介してプロセッサ１１０２に結合され得る。メモリ１１０８は、高速プロセッサバス１１１２を介してプロセッサ１１０２に結合され得る）。
【０３４０】
[0331]システム１１００は、とりわけ、スパイキングニューロンネットワーク動作の様々な態様（たとえば、感覚入力符号化、結合可塑性、ニューロンの動作モデル、および／またはスパイキングニューロンネットワーク動作の他の態様）を実装するように構成されたコンピュータ可読命令を備える、不揮発性記憶デバイス１１０６を備え得る。不揮発性記憶装置１１０６は、たとえば、ネットワーク状態スナップショットを保存／ロードするとき、あるいはコンテキスト切替え（たとえば、後での使用のために（とりわけ、結合荷重および更新ルール、ニューロン状態および学習ルール、および／または他の情報を備える）現在のネットワーク構成を保存すること、ならびに前に記憶されたネットワーク構成のローディング、を実装するとき、たとえば、ニューロンと結合との状態情報を記憶するために使用され得る。
【０３４１】
[0332]いくつかの実装形態では、コンピュータ化装置１１００は、コンピュータＩ／Ｏバス（ＰＣＩ−Ｅ）、ワイヤード（たとえば、イーサネット）またはワイヤレス（たとえば、Ｗｉ−Ｆｉ（登録商標））ネットワーク接続など、Ｉ／Ｏインターフェース１１２０を介して１つまたは複数の外部処理／ストレージ／入力デバイスに結合され得る。
【０３４２】
[0333]いくつかの実装形態では、装置１１００は、ニューラルネットワークを動作させているプロセッサに外部入力を与えるように構成され得る。１つまたは複数の実装形態では、この入力は、たとえばインターフェース１１１４を介して与えられるトレーニング入力、たとえば、正および／または負の強化信号を備え得る。
【０３４３】
[0334]いくつかの実装形態では、入出力インターフェースは、ユーザーコマンドを受信し、認識するように構成された音声入力（たとえば、マイクロフォン）および音声認識モジュールを備え得る。
【０３４４】
[0335]様々な処理デバイスは、限定はしないが、シングルコア／マルチコアＣＰＵ、ＤＳＰ、ＦＰＧＡ、ＧＰＵ、ＡＳＩＣ、それらの組合せ、および／または他のプロセッサを含む、コンピュータ化システム１１００とともに使用され得ることを当業者なら諒解されよう。様々なユーザ入出力インターフェースは、たとえば、ＬＣＤ／ＬＥＤモニタ、タッチスクリーン入力およびディスプレイデバイス、音声入力デバイス、スタイラス、ライトペン、トラックボール、終了その他を含む、本技術の実装形態に同様に適用可能であり得る。
【０３４５】
[0336]次に図１１Ｂを参照すると、スパイキングネットワークにおいてイベント駆動型更新メカニズムを実装するように構成された神経形態学的コンピュータ化システムの一実装形態について、詳細に説明する。図１１Ｂの神経形態学的処理システム１１３０は、複数の処理ブロック（マイクロブロック）１１４０を備え得、ここで、個々のマイクロブロックは、計算論理コア１１３２と、メモリブロック１１３４とを備え得る。論理コア１１３２は、ノードモデル、およびシナプス更新ルール（たとえば、Ｉ−ＳＴＤＰ）および／またはネットワーク運用に関係する他のタスクなど、ニューロンノード動作の様々な態様を実装するように構成され得る。メモリブロックは、とりわけ、ニューロン状態変数と、結合１１３８の結合パラメータ（たとえば、荷重、遅延、Ｉ／Ｏマッピング）とを記憶するように構成され得る。
【０３４６】
[0337]マイクロブロック１１４０は、結合１１３８とルータ１１３６とを使用して互いに相互結合され得る。当業者なら諒解されるように、図１１Ｂの結合レイアウトは例示的であり、多くの他の結合実装形態（たとえば、１対全部、全部対全部、および／または他の結合実装形態）が本開示に適合し得る。
【０３４７】
[0338]神経形態学的装置１１３０は、インターフェース１１４２を介して入力（たとえば、視覚入力）を受信するように構成され得る。たとえば、コンピュータ化スパイキング網膜または画像アレイとインターフェースするために適用可能な、１つまたは複数の実装形態では、装置１１３０は、入力信号の符号化を可能にするために、インターフェース１１４２を介してフィードバック情報を与え得る。
【０３４８】
[0339]神経形態学的装置１１３０は、インターフェース１１４４を介して出力（たとえば、認識されたオブジェクトまたは特徴の指示、あるいは、たとえば、画像アレイをズーム／パンするための、モーターコマンド）を与えるように構成され得る。
【０３４９】
[0340]いくつかの実装形態では、装置１１３０は、１つまたは複数のブロック１１３２に外部入力を与えるように構成され得る。１つまたは複数の実装形態では、外部信号は、インターフェース１１４２を介して１つまたは複数のブロックに与えられるトレーニング入力を備え得る。
【０３５０】
[0341]装置１１３０は、１つまたは複数の実装形態では、高帯域幅メモリインターフェース１１４８を介して外部高速応答メモリ（たとえば、ＲＡＭ）にインターフェースし、それによって、中間ネットワーク動作パラメータ（たとえば、スパイクタイミング）の記憶を可能にし得る。装置１１３０は、プログラムローディングと、動作モード変更と、リターゲッティングとを可能にするために、より低い帯域幅のメモリインターフェース１１４６を介してより低速な外部メモリ（たとえば、フラッシュ、または磁気（ハードドライブ））にインターフェースし得、そこで、現在のタスクのためのネットワークノードおよび接続情報が将来の使用のために保存およびフラッシュされ得、前に記憶されたネットワーク構成がそれの場所にロードされ得る。
【０３５１】
[0342]図１１Ｃに、共有相互接続に結合された、上記の図１１Ｂに関して説明したマイクロブロック１１４０を備える共有バス神経形態学的コンピュータ化システムの実装形態を示す。図１１Ｃの装置１１４５は、マイクロブロック１１４０を互いに相互接続するために１つ（または複数）の共有バス１１４６を利用する。
【０３５２】
[0343]図１１Ｄに、スパイキングネットワークにおいてイベント駆動型更新メカニズムを実装するように構成されたセルベース神経形態学的コンピュータ化システムアーキテクチャの一実装形態を示す。図１１Ｄの神経形態学的システム１１５０は処理ブロック（セルブロック）の階層を備え得る。いくつかの実装形態では、装置１１５０の最低レベルＬ１セル１１５２は、論理およびメモリを備え得、図１１Ｂに示された装置のマイクロブロック１１４０と同様に構成され得る。いくつかのセルブロックは、クラスタの配列であり、ローカル相互接続１１６２、１１６４を互いに通信し得る。そのようなクラスタのうちの個々は、図１１ｄにおいて１１５４として示されたより高レベルのセル、たとえば、セルＬ２を形成し得る。同様に、いくつかのＬ２クラスタは、第２レベル相互接続１１６６を介して互いに通信し、図１１Ｄにおいて１１５６として示されたスーパークラスタＬ３を形成し得る。スーパークラスタ１１５４は、たとえば第３レベル相互接続１１６８を介して通信し得、次のレベルクラスタを形成し得、以下同様である。レベルごとに所与の数（たとえば、４つ）のセルを備える装置１１５０の階層構造は例示的な一実装形態にすぎず、他の実装形態は、レベルごとに、および／またはより少ないもしくはより多いレベルごとに、より多いまたはより少ないセルを備え得、ならびにさらに他のタイプのアーキテクチャを備え得ることを当業者なら諒解されよう。
【０３５３】
[0344]図１１Ｄの例示的な装置１１５０の異なるセルレベル（たとえば、Ｌ１、Ｌ２、Ｌ３）は、様々な複雑さレベルで機能を実施するように構成され得る。一実装形態では、異なるＬ１セルは、並列に視覚入力の異なる部分を処理し得（たとえば、異なるフレームマクロブロックを符号化し得）、Ｌ２、Ｌ３セルは、漸進的により高いレベルの機能（たとえば、エッジ検出、オブジェクト検出）を実施する。異なるＬ２、Ｌ３セルは、たとえばロボットを動作させる異なる態様を実施し得、１つまたは複数のＬ２／Ｌ３セルは、カメラからの視覚データを処理し、他のＬ２／Ｌ３セルは、たとえば、オブジェクトを追跡するとき、またはレンズ安定化機能を実施するときのレンズの動きを実装するためにモーター制御ブロックを動作させる。
【０３５４】
[0345]神経形態学的装置１１５０は、インターフェース１１６０を介して入力（たとえば、視覚入力）を受信し得る。たとえばコンピュータ化スパイキング網膜または画像アレイとインターフェースするために適用可能な、１つまたは複数の実装形態では、装置１１５０は、入力信号の符号化を可能にするために、インターフェース１１６０を介してフィードバック情報を与え得る。
【０３５５】
[0346]神経形態学的装置１１５０は、インターフェース１１７０を介して出力（たとえば、認識されたオブジェクトまたは特徴の指示、あるいは、たとえば、画像アレイをズーム／パンするための、モーターコマンド）を与え得る。いくつかの実装形態では、装置１１５０は、単一のＩ／Ｏブロック（図示せず）を使用してＩ／Ｏ機能の一部または全部を実施し得る。
【０３５６】
[0347]いくつかの実装形態では、装置１１５０は、１つまたは複数のブロック１１５２、１１５４、１１５６に外部入力を与えるように構成され得る。１つまたは複数の実装形態では、外部信号は、インターフェース１１６０を介して装置によって受信されるトレーニング入力を備え得る。
【０３５７】
[0348]１つまたは複数の実装形態では、装置１１５０の１つまたは複数の部分は、たとえば、その全体が参照により本明細書に組み込まれる、２０１２年６月４日に出願された「DYNAMICALLY RECONFIGURABLE STOCHASTIC LEARNING APPARATUS AND METHODS」と題する、出願人が所有する米国特許出願第１３／４８７，５７６号に記載されているように、１つまたは複数の学習ルールを動作させるように構成され得る。そのような一実装形態では、１つのブロック（たとえば、Ｌ３ブロック１１５６）は、インターフェース１１６０を介して受信される入力を処理し、区間相互接続１１６６、１１６８を介して別のブロック（たとえば、Ｌ２ブロック１１５６）に強化信号を与えるために使用され得る。
【０３５８】
[0349]装置１１５０は、１つまたは複数の実装形態では、高帯域幅メモリインターフェース（図示せず）を介して外部高速応答メモリ（たとえば、ＲＡＭ）にインターフェースし、それによって、中間ネットワーク動作パラメータ（たとえば、スパイクタイミングおよび／または他のパラメータ）の記憶を可能にし得る。装置１１５０は、プログラムローディングと、動作モード変更と、リターゲッティングとを可能にするために、より低い帯域幅のメモリインターフェース（図示せず）を介してより低速な外部メモリ（たとえば、フラッシュ、または磁気（ハードドライブ））にインターフェースし得、ここで、現在のタスクのためのネットワークノードおよび接続情報が将来の使用のために保存およびフラッシュされ得、前に記憶されたネットワーク構成がそれの場所にロードされ得る。
【０３５９】
[0350]本開示のイベント駆動型更新メカニズムは、有利には、とりわけ、フレキシブルなネットワーク更新を可能にし得る。いくつかの実装形態では、報酬信号に反応して、強化学習適用例における入力結合のタイムリーな可塑性の更新を実施するために、樹状突起イベントが使用され得る。いくつかの実装形態では、所望のターゲットへのポストシナプス反応送出および／または出射結合更新を実施するために、軸索イベントが使用され得る。いくつかの実装形態では、カスタムイベントは、たとえば、ロボット装置のモーター制御部分にインターフェースする結合の樹状突起更新を使用して、たとえば、ニューロン結合の一部分の更新を可能にしながら、（たとえば視覚センサーデータを処理する）他の結合が標準のスパイク反応イベントに従って更新されることを可能にするなど、カスタム更新ルールを可能にし得る。
【０３６０】
[0351]従来技術の手法とは対照的に、たとえば、本開示の樹状突起イベントと軸索イベントとの使用により、ポストシナプス反応送出から可塑性の更新が分離され得る。したがって、ニューロンが教示スパイクを受信すると、ニューロンの内部状態（興奮性）および／または出力に影響を及ぼすことなしに、着信シナプスの荷重が変更され得る。
【０３６１】
[0352]そのような機能は、有利には、ネットワーク学習のより正確な制御を可能にし得る。１つのモーター制御適用例における例として、コントローラ再学習速度を増加させるために、頻度が高い（たとえば、１〜１００Ｈｚ）樹状突起イベントが利用され得る。（たとえば、性能測度によって特徴づけられる）所望のレベルにコントローラ性能が達すると、モーターにモーターコマンドを発行するために軸索イベントが使用され得る。報酬駆動型更新と性能駆動型反応とのそのような分離は、有利には、プラント（たとえば、モーターコントローラ）への過大なネットワーク出力をなくし、プラント寿命を増加させ得る。
【０３６２】
[0353]上記の実装形態は例示的であり、本技術のフレームワークは、たとえば、データベースを使用する情報分類など、他の情報の処理に等しく互換性があり、適用可能であり得、ここで、特定のパターンの検出は、スパイクと同様の離散信号として識別され得、他のパターンの一致検出は、例示的なスパイキングニューラルネットワークの動作と同様の方法で、前の検出の履歴に基づいて特定の１つのパターンの検出に影響を及ぼすことを当業者なら諒解されたい。
【０３６３】
[0354]有利には、本発明の例示的な実装形態は、限定はしないが、プロスセティックデバイス、自律ロボット装置、および感覚処理機能を必要とする他の電気機械デバイスを含む、様々なデバイスにおいて有用であり得る。そのようなロボティックデバイスの例としては、ロボット（たとえば、自動車）の製造、軍事、医療（たとえば、顕微鏡検査、Ｘ線、超音波検査、トモグラフィーの処理）のうちの１つまたは複数がある。自律車両の例としては、ローバ、無人飛行体、水中車両、スマートアプライアンス（たとえばＲＯＯＭＢＡＯ）、および／または他のロボティックデバイスがある。
【０３６４】
[0355]本開示の原理の実装形態は、たとえば、スマートフォン、ポータブル通信デバイス、ノートブック、ネットブックおよびタブレットコンピュータ、監視カメラシステム、ならびに視覚データを処理するように構成された実際的に任意の他のコンピュータ化デバイスなど、多種多様な固定デバイスおよびポータブルデバイスにおけるビデオデータ圧縮および処理に適用可能である
[0356]本開示の原理の実装形態は、コンピュータと人間の対話（たとえば、ジェスチャー、音声、姿勢、顔の認識、および／または他の適用例）、加工の制御（たとえば、工業用ロボット、自律車両および他の車両）、拡張現実適用例、（たとえば、画像および画像シーケンスのデータベースをインデックス付けするための）情報の編成、アクセス制御（たとえば、ジェスチャーに基づいてドアを開くこと、許可された人物の検出に基づいてアクセス方法を開くこと）、（たとえば、視覚的監視あるいは人間または動物の計数、追跡のための）イベントの検出、データ入力、金融取引（人物または特殊支払いシンボルの認識に基づく支払い処理）、ならびにその他多数を含む、広い組合せの適用例に適用可能であり得る。
【０３６５】
[0357]有利には、本開示は、画像中または３Ｄシーン中の個々のポイントにおけるオブジェクト位置（したがって速度）、さらには画像を生成するカメラのオブジェクト位置（したがって速度）の推定値を生成するために画像シーケンスが処理され得る場合など、動き推定に関係するタスクを簡略化するために使用され得る。そのようなタスクの例としては、自己動き、すなわち、カメラによって生成された画像シーケンスからカメラの３次元剛性動き（回転および並進）を決定すること、画像シーケンス中で画像平面に関して関心ポイントまたはオブジェクト（たとえば、車両または人間）のセットの移動に追従することがあり得る。
【０３６６】
[0358]いくつかの実装形態では、オブジェクト認識システムの部分は、科学的、地球物理学的探査、監視、ナビゲーション、データマイニング（たとえば、コンテンツベース画像検索）など、様々な適用例のためにデータストリーム中のパターン認識を実施するように構成されたコンピュータ実行可能命令を記憶したコンピュータ可読装置を備える、リモートサーバにおいて実施され得る。本開示を与えられた当業者によって認識され得る、無数の他の適用例が存在する。
【０３６７】
[0359]本技術のいくつかの態様について、方法のステップの特定のシーケンスに関して説明することがあるが、これらの説明は、本技術のより広い方法を例示するものにすぎず、特定の適用例の要求に応じて変更され得ることを認識されよう。いくつかのステップは、いくつかの状況では不要または随意であるとされ得る。さらに、いくつかのステップまたは機能が開示する実装形態に追加されるか、または２つ以上のステップの実施の順序が置換され得る。すべてのそのような変形形態は、本明細書で開示し、請求する技術の内に包含されると見なされる。
【０３６８】
[0360]上記の詳細な説明では、様々な実装形態に適用されるように本技術の新規の特徴を示し、説明し、指摘したが、当業者によって、本技術から逸脱することなく、示されたデバイスまたはプロセスの形態および詳細において様々な省略、置換、および変更が行われ得ることを理解されよう。上記の説明は、本技術を実施することについて現在企図される最良の様式である。この説明は、決して限定的であるように意図されず、むしろ、本技術の一般的原理を例示するものとして理解されるべきである。本技術の範囲は、特許請求の範囲を参照して決定されるべきである。
【図１】
2015529357.tif 000005
【図２】
2015529357.tif 000006
【図３】
2015529357.tif 000007
【図４】
2015529357.tif 000008
【図５】
2015529357.tif 000009
【図６】
2015529357.tif 000010
【図７Ａ】
2015529357.tif 000011
【図７Ｂ】
2015529357.tif 000012
【図８】
2015529357.tif 000013
【図９】
2015529357.tif 000014
【図１０】
2015529357.tif 000015
【図１１Ａ】
2015529357.tif 000016
【図１１Ｂ】
2015529357.tif 000017
【図１１Ｃ】
2015529357.tif 000018
【図１１Ｄ】
2015529357.tif 000019
【図１２】
2015529357.tif 000020
【図１３】
2015529357.tif 000021
【図１４】
2015529357.tif 000022
【図１５Ａ】
2015529357.tif 000023
【図１５Ｂ】
2015529357.tif 000024
【図１５Ｃ】
2015529357.tif 000025
【図１５Ｄ】
2015529357.tif 000026
【図１５Ｅ】
2015529357.tif 000027
【図１５Ｆ】
2015529357.tif 000028
【図１５Ｇ】
2015529357.tif 000029
【図１５Ｈ】
2015529357.tif 000030
【図１６Ａ】
2015529357.tif 000031
【図１６Ｂ】
2015529357.tif 000032
【図１６Ｃ】
2015529357.tif 000033
【図１７】
2015529357.tif 000034
【図１８】
2015529357.tif 000035
【図１９】
2015529357.tif 000036
【国際調査報告】
2015529357.tif 000037