Synapticとは、node.jsとブラウザのためのjavascriptニューラルネットワークライブラリです。一般化されたアーキテクチャフリーなアルゴリズムを利用しているので、あらゆるタイプのfirst order(1次)またはsecond order(2次)ニューラルネットワークアーキテクチャをビルドしてトレーニングすることができます。
このライブラリには、multilayer perceptron(多層パーセプトロン)、multilayer long-short term memory(多層長短期記憶)ネットワーク(LSTM)、liquid state machines(液体状態機械)、およびHopfield(ホップフィールド)ネットワークのようないくつかのアーキテクチャが含まれています。 Synapticには、任意のネットワークを訓練できるトレーナーもいます。 XORの解析、Distracted Sequence Recall(ディストラクション・シーケンス・リコール)タスクの実行、Embedded Reber Grammar(組み込みReber文法)テストの実行などのトレーニングテストが含まれています。 さまざまなアーキテクチャのパフォーマンスを簡単にテストして比較することができます。
SynapticはDerek D. Monnerの論文のアルゴリズムを使用しています。
A generalized LSTM-like training algorithm for second-order recurrent neural networks
方程式の参照はソースコードでコメントされています。
ニューラルネットワークを初めてお使いの方は、まずこのガイドを読むことからお勧めします。
ニューラルネットワークにデータを与える方法については、この記事をご覧ください。
この記事もお勧めします。
- Solve an XOR(XORを解く)
- Discrete Sequence Recall Task(離散シーケンスリコールタスク)
- Learn Image Filters(画像フィルタ)
- Paint an Image(画像をペイント)
- Self Organizing Map(自己組織化マップ)
- Read from Wikipedia(Wikipediaから読む)
- Creating a Simple Neural Network (簡単なニューラルネットワーク作成)(動画)
デモのソースコードはこちらのブランチからアクセスしてください。
こちらのブランチをチェックアウトして試してみてください。
git checkout gh-pages
npmを利用してインストールしてください。
npm install synaptic --save
bowerを利用してインストールしてください。
bower install synaptic
またはCDNjsのリンクを貼り付けてください。
<script src="https://cdnjs.cloudflare.com/ajax/libs/synaptic/1.1.4/synaptic.js"></script>
var 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を利用して組み込みネットワークを使うのも可能です。
簡単なパーセプトロン作成方法
function 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を教えます。
var 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
簡単なlong short-term memory(長期短期記憶)ネットワークを作成する方法です。 入力ゲート、忘れゲート、出力ゲート、およびピープホール接続があります。
function 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;
あくまで説明のための例です。 Architectには、すでに多層パーセプトロンとマルチ層LSTMネットワークアーキテクチャが含まれています。
Synapticはアルゼンチンのブエノスアイレスで始まったオープンソースプロジェクトです。 開発参加したい方は大歓迎です。 貢献したい場合は、プルリクエストを送ってください。 ただその前にnpm run testとnpm run buildを実行してください。 するとすべてのテスト仕様を実行し、Web配布ファイルが作成されます。
支持希望の方は是非magic internet moneyでビールを奢ってください!
BTC: 16ePagGBbHfm2d6esjMXcUBTNgqpnLWNeK
ETH: 0xa423bfe9db2dc125dd3b56f215e09658491cc556
LTC: LeeemeZj6YL6pkTTtEGHFD6idDxHBF2HXa
XMR: 46WNbmwXpYxiBpkbHjAgjC65cyzAxtaaBQjcGpAZquhBKw2r8NtPQniEgMJcwFMCZzSBrEJtmPsTR54MoGBDbjTi2W1XmgM
<3