
人工ニューロンは、ニューラルネットワークにおける生物学的ニューロンのモデルとして考案された数学的関数である。人工ニューロンは、人工ニューラルネットワークの基本単位である。[ 1 ]
人工ニューロンの設計は、生物学的神経回路にヒントを得たものである。その入力は、神経樹状突起における興奮性シナプス後電位および抑制性シナプス後電位に類似している。活性化。その重みはシナプス重みに類似しており、その出力は軸索に沿って伝達されるニューロンの活動電位に類似している。
通常、各入力は個別に重み付けされ、その合計は、非線形関数である活性化関数を通過する前に、バイアス(おおよそ閾値電位に対応)と呼ばれる項に加算されることが多い。タスクによっては、これらの関数はシグモイド形状(例えば、二値分類の場合)になることもあるが、他の非線形関数、区分的線形関数、または階段関数の形をとることもある。また、多くの場合、単調増加、連続、微分可能、有界である。多くのタスクでシグモイド関数やReLUのような活性化関数よりも優れた性能を発揮する、非単調、非有界、振動する多重零点を持つ活性化関数も最近研究されている。閾値関数は、閾値論理と呼ばれる論理ゲートの構築にインスピレーションを与えており、脳の処理に似た論理回路の構築に適用できる。例えば、メモリスタなどの新しいデバイスが、このような論理の開発に広く用いられている。[ 2 ]
人工ニューロンの活性化関数は、線形システムの伝達関数と混同してはならない。
人工ニューロンは、使用される構造に応じて、半線形ユニット、Nvニューロン、バイナリニューロン、線形閾値関数、またはマカロック・ピッツ(MCP)ニューロンと呼ばれることがある。
マカロック・ピッツモデルのような単純な人工ニューロンは、現実性にとらわれずに一つ以上の神経生理学的観察を反映することを目的としているため、「カリカチュアモデル」と呼ばれることがあります。[ 3 ]人工ニューロンは、ニューロモルフィックエンジニアリングにおいて、自然の物理的ニューロンに似た人工細胞を指す場合もあります。
特定の人工ニューロンの場合あれ信号による入力を通してそして重さを通して通常、入力はには+1の値が割り当てられ、バイアス入力になります。残りはニューロンへの実際の入力:に。
出力第 1 番目のニューロンは:
どこ(ファイ)は活性化関数です。

出力は生物学的ニューロンの軸索に相当し、その値はシナプスを介して次の層の入力に伝播する。また、出力ベクトルの一部としてシステムから出力される場合もある。
学習プロセスは特に存在しない。活性化関数の重みは計算され、閾値はあらかじめ決められている。
MCPニューロンは、離散的な時間ステップで動作する制限付き人工ニューロンの一種です。それぞれが0個以上の入力を持ち、次のように記述されます。出力は1つで、以下のように記述されます。各入力は興奮性または抑制性のいずれかである。出力は静止状態または発火状態のいずれかである。MCPニューロンには閾値も存在する。。
MCPニューラルネットワークでは、すべてのニューロンが同期した離散的な時間ステップで動作します。その時ニューロンの出力は興奮性入力の発火数が閾値以上であり、かつ抑制性入力が発火していない場合。さもないと。
これは、線形分離可能なブール関数(例えば、AND、OR、NOR)を表すために使用できますが、例えば、XORを表すためには使用できません。[ 4 ]
各出力は、自身を含め、任意の数のニューロンへの入力となり得る(つまり、自己ループが可能)。ただし、出力は単一のニューロンに複数回接続することはできない。ネットワークは同期した離散的な時間ステップで動作するため、自己ループが発生しても矛盾は生じない。
簡単な例として、閾値が0の単一のニューロンと、単一の抑制性自己ループを考えてみましょう。その出力は、ステップごとに0と1の間で振動し、「時計」のように機能します。
有限状態機械は、MCPニューラルネットワークによってシミュレートできます。[ 5 ]無限テープを備えたMCPニューラルネットワークは、任意のチューリングマシンをシミュレートできます。[ 6 ]

人工ニューロンは、生物学的ニューロンの特徴を模倣するように設計されています。しかし、生物学的ニューラルネットワークと人工ニューラルネットワークの間には、性能面で大きなギャップが存在します。特に、人間の脳には、XOR関数を学習できる振動活性化関数を持つ単一の生物学的ニューロンが発見されています。[ 7 ]
しかし、ほとんどの人工ニューロンとは異なり、生物学的ニューロンは離散的なパルスで発火します。細胞体内部の電位が一定の閾値に達するたびに、軸索に沿ってパルスが伝達されます。このパルスは連続値に変換できます。軸索が発火する速度(1秒あたりの活性化回数など)は、隣接する細胞に信号イオンが導入される速度に直接変換されます。生物学的ニューロンの発火が速いほど、近くのニューロンは電位をより速く蓄積します(または、発火したニューロンに接続する樹状突起の「重み」に応じて電位を失います)。この変換によって、コンピュータ科学者や数学者は、異なる値(多くの場合-1から1)を出力できる人工ニューロンを使用して、生物学的ニューラルネットワークをシミュレートすることが可能になります。
研究によると、鳥の歌の生成を担う神経回路では単項符号化が使用されていることが示されている。[ 8 ] [ 9 ]生物学的ネットワークにおける単項符号化の使用は、おそらくその符号化の単純さによるものと考えられる。もう一つの要因として、単項符号化が一定程度の誤り訂正を提供するということが挙げられる。[ 10 ]
有機および無機の物理的な人工ニューロンに関する研究開発が行われている。
例えば、一部の人工ニューロンはドーパミン(電気信号ではなく化学信号)を受信して放出することができ、ラットの筋肉や脳の細胞と通信することができ、BCI /義肢への応用の可能性を秘めている。[ 11 ] [12] [ 13][ 14 ]
低消費電力の生体適合性メモリスタは、生物学的活動電位の電圧で機能する人工ニューロンの構築を可能にし、生体感知信号を直接処理したり、ニューロモルフィックコンピューティングや生物学的ニューロンとの直接通信に使用できる可能性がある。[ 15 ] [ 16 ] [ 17 ]
ポリマーから作られた有機ニューロモルフィック回路は、イオン豊富なゲルでコーティングされ、材料が実際のニューロンのように電荷を運ぶことができるようにして、ロボットに組み込まれており、シミュレーションや仮想空間ではなく、現実世界で感覚運動的に学習することを可能にしている。[ 18 ] [ 19 ]さらに、軟質物質(ポリマー)で作られた人工スパイクニューロンは、生物学的に関連する環境で動作し、人工領域と生物学的領域間の相乗的なコミュニケーションを可能にすることができる。[ 20 ] [ 21 ]
人工ニューロンは、ウォーレン・マカロックとウォルター・ピッツが1943年の論文「神経活動に内在する観念の論理計算」で初めて提案した。これは閾値論理ユニットまたは線形閾値ユニットと呼ばれた。[ 22 ]このモデルは、脳内の「神経網」の計算モデルとして特に意図されていた。[ 23 ]活性化関数として、ヘヴィサイド階段関数を使用することに相当する閾値が用いられた。当初は、バイナリ入力と出力、可能な重みに対するいくつかの制限、およびより柔軟な閾値を持つ単純なモデルのみが検討された。最初から、このようなデバイスのネットワークによって任意のブール関数を実装できることがすでに注目されており、AND関数とOR関数を実装し、それらを選言または連言の標準形で使用できるという事実から容易にわかる。研究者たちは、ニューロンを介したフィードバックを持つ循環ネットワークが、記憶を持つ動的システムを定義できることにもすぐに気づいたが、研究のほとんどは(そして現在も)厳密なフィードフォワードネットワークに集中している。それは、フィードフォワードネットワークの方が難易度が低いからである。
線形閾値関数を用いた重要な先駆的人工ニューラルネットワークの一つに、フランク・ローゼンブラットが開発したパーセプトロンがある。このモデルは既にニューロンの重み値をより柔軟に設定できる設計となっており、適応能力を持つ機械に用いられていた。閾値をバイアス項として表現する方法は、 1960年にバーナード・ウィドローによって導入された( ADALINEを参照)。
さらに発展したのは、ドナルド・O・ヘッブによって提唱されたヘッブ学習規則であり、これはニューラルネットワークの重みを調整するための基本的な規則を提供しました。[ 24 ]ヘッブ学習の原理は、2つのニューロンが同時に活性化すると、それらの間の接続が強化され、別々に活性化すると、弱まることを前提としています。[ 24 ]スパイクタイミング依存性可塑性として知られるヘッブ学習の改良版は、ニューロンのスパイクの正確なタイミングを考慮するために開発されました。[ 24 ]この学習形式は、スパイクニューラルネットワークに実装されており、スパイクニューラルネットワークは、従来のANNよりもエネルギー効率が高く[ 24 ]、連続計算ではなくイベントの発生に基づいてデータを処理するため、伝送に必要なエネルギーが少なくて済みます。[ 24 ]
1980年代後半、ニューラルネットワークの研究が勢いを増すと、より連続的な形状のニューロンが検討されるようになった。活性化関数を微分できるようになったことで、勾配降下法やその他の最適化アルゴリズムを直接使用して重みを調整できるようになった。ニューラルネットワークは、一般的な関数近似モデルとしても使用されるようになった。バックプロパゲーションと呼ばれる最もよく知られた学習アルゴリズムは何度も再発見されているが、その最初の開発はポール・ヴェルボスの研究に遡る。[ 25 ] [ 26 ]
ニューロンの活性化関数は、そのニューロンを含むネットワークを強化または簡素化する様々な特性を持つように選択されます。重要な点として、例えば、線形活性化関数を使用する多層パーセプトロンは、同等の単層ネットワークを持つため、多層ネットワークの利点を得るには非線形関数が必要となります。
下に、は、すべての場合において、ニューロンへのすべての入力の加重和を指します。入力、
どこはシナプス重みのベクトルであり、これは入力のベクトルです。
出力この活性化関数は、入力が指定された閾値を満たすかどうかに応じてバイナリです。(シータ)。活性化が閾値に達するか超えると、「信号」が送信され、出力が1に設定されます。
この関数はパーセプトロンで使用され、他の多くのモデルにも登場します。入力空間を超平面で分割する処理を行います。特にネットワークの最終層で有用であり、例えば入力の二値分類を行う際に役立ちます。
この場合、出力ユニットは入力の重み付き和にバイアス項を加えたものになります。このような線形ニューロンを複数組み合わせることで、入力ベクトルの線形変換が行われます。これは通常、ネットワークの初期層でより有効です。調和解析など、線形モデルに基づいた解析ツールは数多く存在し、これらはすべてこの線形ニューロンを用いたニューラルネットワークで使用できます。バイアス項を用いることで、データに対してアフィン変換を行うことができます。
ロジスティック関数などの比較的単純な非線形関数であるシグモイド関数は、導関数も容易に計算でき、ネットワークの重み更新を計算する際に重要となる場合があります。そのため、ネットワークを数学的に扱いやすくすることができ、シミュレーションの計算負荷を最小限に抑える必要があった初期のコンピュータ科学者にとって魅力的なものでした。以前は多層パーセプトロンでよく見られました。しかし、最近の研究では、シグモイドニューロンは整流線形ニューロンよりも効果が低いことが示されています。その理由は、バックプロパゲーションアルゴリズムによって計算される勾配が、活性化がシグモイドニューロンの層を伝播するにつれてゼロに近づく傾向があるため、複数の層のシグモイドニューロンを使用してニューラルネットワークを最適化することが困難になるためです。
人工ニューラルネットワークの文脈では、整流器または整流線形ユニットは、引数の正の部分として定義される活性化関数である。
どここれはニューロンへの入力です。これはランプ関数とも呼ばれ、電気工学における半波整流に類似しています。この活性化関数は、生物学的動機と数学的正当性が強く、 2000 年に Hahnloser らがNature 誌に発表した論文[ 27 ]で初めて動的ネットワークに導入されました。 [ 28 ] 2011 年に初めて、2011 年以前に広く使用されていた活性化関数、すなわちロジスティック シグモイド(確率論に触発されたもの。ロジスティック回帰を参照) とそのより実用的な[ 30 ]対応物である双曲線正接と比較して、より深いネットワークのトレーニングを改善できることが実証されました。[ 29 ]
整流線形ユニットの活性化関数の一般的な変種として、リーキー整流線形ユニットがあり、これはユニットが非アクティブなときに小さな正の勾配を許容する。
どこニューロンへの入力であり、は小さな正の定数です(元の論文では0.01に設定されています)。[ 31 ]
以下は、ブール値(真または偽)を入力として受け取り、アクティブ化されると単一のブール値を出力する単一の閾値論理ユニットの単純な擬似コード実装です。オブジェクト指向モデルを使用しています。トレーニング方法は複数存在するため、ここでは定義していません。純粋関数型モデルを使用する場合は、以下のクラス Threshold Logic Unit を、入力パラメータ threshold、weights、およびブール値を返す入力を持つ関数 Threshold Logic Unit に置き換えます。
クラスThreshold Logic Unit は次のように定義されます:データメンバthreshold :数値 データメンバweights :サイズXの数値のリスト関数メンバーfire(inputs :サイズ X のブール値のリスト) :ブール値定義:変数T :数値 T ← 0 1からXまでの各iについて、 inputs(i)がtrueの場合、 T ← T + weights(i) を実行する。各iについて、 T > thresholdの場合、 true を返す。それ以外の場合はfalse を返す。関数終了クラス終了