Permalink
Fetching contributors…
Cannot retrieve contributors at this time
executable file 207 lines (145 sloc) 8.85 KB

Synaptic Build Status チャットにご参加下さい!

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

方程式の参照はソースコードでコメントされています。

紹介

ニューラルネットワークを初めてお使いの方は、まずこのガイドを読むことからお勧めします。

ニューラルネットワークにデータを与える方法については、この記事をご覧ください。

この記事もお勧めします。

デモ

デモのソースコードはこちらのブランチからアクセスしてください。

初めに

こちらのブランチをチェックアウトして試してみてください。

git checkout gh-pages

概要

インストール

Node

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を利用して組み込みネットワークを使うのも可能です。

パーセプトロン

簡単なパーセプトロン作成方法

perceptron.

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(長短期記憶)

簡単なlong short-term memory(長期短期記憶)ネットワークを作成する方法です。 入力ゲート、忘れゲート、出力ゲート、およびピープホール接続があります。

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ネットワークアーキテクチャが含まれています。

Contribute

Synapticはアルゼンチンのブエノスアイレスで始まったオープンソースプロジェクトです。 開発参加したい方は大歓迎です。 貢献したい場合は、プルリクエストを送ってください。 ただその前にnpm run testとnpm run buildを実行してください。 するとすべてのテスト仕様を実行し、Web配布ファイルが作成されます。

Support

支持希望の方は是非magic internet moneyでビールを奢ってください!

BTC: 16ePagGBbHfm2d6esjMXcUBTNgqpnLWNeK
ETH: 0xa423bfe9db2dc125dd3b56f215e09658491cc556
LTC: LeeemeZj6YL6pkTTtEGHFD6idDxHBF2HXa
XMR: 46WNbmwXpYxiBpkbHjAgjC65cyzAxtaaBQjcGpAZquhBKw2r8NtPQniEgMJcwFMCZzSBrEJtmPsTR54MoGBDbjTi2W1XmgM

<3