シナプス
重要: Synaptic 2.x は現在議論の段階にあります! ぜひご参加ください。
Synaptic は、 node.jsおよびブラウザー用の JavaScript ニューラル ネットワーク ライブラリです。その一般化されたアルゴリズムはアーキテクチャに依存しないため、基本的にあらゆる種類の 1 次または2 次のニューラル ネットワークアーキテクチャを構築してトレーニングできます。
このライブラリには、多層パーセプトロン、多層長短期記憶ネットワーク (LSTM)、液体ステート マシンまたはホップフィールドネットワークなどのいくつかの組み込みアーキテクチャと、組み込みのトレーニング タスク/テストを含む、任意のネットワークをトレーニングできるトレーナーが含まれています。 XOR を解く、Distracted Sequence Recall タスクやEmbedded Reber Grammarテストを完了するなど、さまざまなアーキテクチャのパフォーマンスを簡単にテストして比較できます。
このライブラリによって実装されるアルゴリズムは、Derek D. Monner の論文から引用されています。
二次リカレント ニューラル ネットワーク用の一般化された LSTM のようなトレーニング アルゴリズム
その論文には、ソース コードを通じてコメントされた方程式への参照があります。
導入
ニューラル ネットワークに関する予備知識がない場合は、まずこのガイドを読んでください。
ニューラル ネットワークにデータをフィードする方法の実践的な例が必要な場合は、この記事を参照してください。
この記事も参照してください。
デモ
これらのデモのソース コードは、このブランチにあります。
はじめる
例を試してみるには、gh-pagesブランチをチェックアウトしてください。
git checkout gh-pages
他の言語
この README は他の言語でも入手できます。
- 簡体字中国語 | 中国語ドキュメント、@noraincodeに感謝します。
- 繁体字中国語 | 繁体中文、 @NoobTW作成。
- 日本語 | 日本語、@ohirogoに感謝します。
概要
Installation
ノード内
npmを使用して Synaptic をインストールできます。
1npm install synaptic --save
ブラウザで
bowerを使用して Synaptic をインストールできます。
1bower install synaptic
または、 CDNjsが提供する CDN リンクを使用することもできます。
1<script src="https://cdnjs.cloudflare.com/ajax/libs/synaptic/1.1.4/synaptic.js"></script>
Usage
1
2
3
4
5
6var synaptic = require('synaptic'); // this line is not needed in the browser
var Neuron = synaptic.Neuron,
Layer = synaptic.Layer,
Network = synaptic.Network,
Trainer = synaptic.Trainer,
Architect = synaptic.Architect;
これで、ネットワークの作成、トレーニング、またはArchitectからの組み込みネットワークの使用を開始できるようになります。
Examples
パーセプトロン
これは、単純なパーセプトロンを作成する方法です。
。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22function Perceptron(input, hidden, output)
{
// create the layers
var inputLayer = new Layer(input);
var hiddenLayer = new Layer(hidden);
var outputLayer = new Layer(output);
// connect the layers
inputLayer.project(hiddenLayer);
hiddenLayer.project(outputLayer);
// set the layers
this.set({
input: inputLayer,
hidden: [hiddenLayer],
output: outputLayer
});
}
// extend the prototype chain
Perceptron.prototype = new Network();
Perceptron.prototype.constructor = Perceptron;
これで、トレーナーを作成し、パーセプトロンに XOR を学習するように教えることで、新しいネットワークをテストできるようになりました。
1
2
3
4
5
6
7
8
9var myPerceptron = new Perceptron(2,3,1);
var myTrainer = new Trainer(myPerceptron);
myTrainer.XOR(); // { error: 0.004998819355993572, iterations: 21871, time: 356 }
myPerceptron.activate([0,0]); // 0.0268581547421616
myPerceptron.activate([1,0]); // 0.9829673642853368
myPerceptron.activate([0,1]); // 0.9831714267395621
myPerceptron.activate([1,1]); // 0.02128894618097928
長短期記憶
これは、入力ゲート、忘却ゲート、出力ゲート、およびのぞき穴接続を備えた単純な長期短期記憶ネットワークを作成する方法です。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46function LSTM(input, blocks, output)
{
// create the layers
var inputLayer = new Layer(input);
var inputGate = new Layer(blocks);
var forgetGate = new Layer(blocks);
var memoryCell = new Layer(blocks);
var outputGate = new Layer(blocks);
var outputLayer = new Layer(output);
// connections from input layer
var input = inputLayer.project(memoryCell);
inputLayer.project(inputGate);
inputLayer.project(forgetGate);
inputLayer.project(outputGate);
// connections from memory cell
var output = memoryCell.project(outputLayer);
// self-connection
var self = memoryCell.project(memoryCell);
// peepholes
memoryCell.project(inputGate);
memoryCell.project(forgetGate);
memoryCell.project(outputGate);
// gates
inputGate.gate(input, Layer.gateType.INPUT);
forgetGate.gate(self, Layer.gateType.ONE_TO_ONE);
outputGate.gate(output, Layer.gateType.OUTPUT);
// input to output direct connection
inputLayer.project(outputLayer);
// set the layers of the neural network
this.set({
input: inputLayer,
hidden: [inputGate, forgetGate, memoryCell, outputGate],
output: outputLayer
});
}
// extend the prototype chain
LSTM.prototype = new Network();
LSTM.prototype.constructor = LSTM;
これらは説明を目的とした例であり、アーキテクトにはすでに多層パーセプトロンと多層 LSTM ネットワーク アーキテクチャが含まれています。
貢献する
Synapticはアルゼンチンのブエノスアイレスで始まったオープンソース プロジェクトであり、世界中の誰でもプロジェクトの開発に貢献することができます。
貢献したい場合は、PR を自由に送信してください。送信する前にnpm run testとnpm run buildを必ず実行してください。これにより、すべてのテスト仕様が実行され、Web 配布ファイルがビルドされます。
サポート
このプロジェクトが気に入ってサポートを示したい場合は、魔法のインターネットマネーでビールを買ってください:
1
2
3
4BTC: 16ePagGBbHfm2d6esjMXcUBTNgqpnLWNeK
ETH: 0xa423bfe9db2dc125dd3b56f215e09658491cc556
LTC: LeeemeZj6YL6pkTTtEGHFD6idDxHBF2HXa
XMR: 46WNbmwXpYxiBpkbHjAgjC65cyzAxtaaBQjcGpAZquhBKw2r8NtPQniEgMJcwFMCZzSBrEJtmPsTR54MoGBDbjTi2W1XmgM
<3