ホームページ  >  記事  >  ウェブフロントエンド  >  JavaScript で実装されたシンプルなニューラル ネットワーク アルゴリズムの詳細なグラフィックとテキストの説明

JavaScript で実装されたシンプルなニューラル ネットワーク アルゴリズムの詳細なグラフィックとテキストの説明

黄舟
黄舟オリジナル
2017-03-07 14:42:552826ブラウズ

ニューラル ネットワークの概要で実装されたシンプルなニューラル ネットワーク アルゴリズムの詳細なグラフィックとテキストの説明>

ニューラル ネットワークは、情報を処理する脳内のニューロン間の関係をシミュレートしようとします。その計算モデルは通常、相互に接続された多数のノードを必要とします。各ニューロンは、特別な出力関数を通じて他の隣接するニューロンからの重み付けされた入力値を処理します。

ニューロン間の情報伝達の強度は、いわゆる重み付けされた値によって定義され、アルゴリズムは重み付けされた値を継続的に調整して、独自の学習プロセスを実現します。

JavaScript で実装されたシンプルなニューラル ネットワーク アルゴリズムの詳細なグラフィックとテキストの説明

ニューラルネットワークは複数の層に分かれており、上の図に示すように、入力層、隠れ層、出力層があります。

JS Linear Algebra Packageで実装されたシンプルなニューラル ネットワーク アルゴリズムの詳細なグラフィックとテキストの説明>

ニューラルネットワークの計算には多数の行列計算が含まれており、Python の有名な numpy が非常に有名です。いくつかの Javascript もあります:

  • http://www.php.cn/

  • http://www.php.cn/

  • http://www.php.cn/

私はnumericjsを使用しましたが、効果はかなり優れています。皆さんもぜひ試してみることをお勧めします。

JavaScript で実装されたシンプルなニューラル ネットワーク アルゴリズムの詳細なグラフィックとテキストの説明 層ニューラル ネットワークで実装されたシンプルなニューラル ネットワーク アルゴリズムの詳細なグラフィックとテキストの説明>

ニューラル ネットワークをトレーニングするための単純な入出力データがいくつかあります。ここでの各行はデータの一部を表します。入力には 3 つのパラメーターがあり、出力は JavaScript で実装されたシンプルなニューラル ネットワーク アルゴリズムの詳細なグラフィックとテキストの説明 つです。

入力0 入力JavaScript で実装されたシンプルなニューラル ネットワーク アルゴリズムの詳細なグラフィックとテキストの説明 入力JavaScript で実装されたシンプルなニューラル ネットワーク アルゴリズムの詳細なグラフィックとテキストの説明 出力
0 0 JavaScript で実装されたシンプルなニューラル ネットワーク アルゴリズムの詳細なグラフィックとテキストの説明 0
JavaScript で実装されたシンプルなニューラル ネットワーク アルゴリズムの詳細なグラフィックとテキストの説明 JavaScript で実装されたシンプルなニューラル ネットワーク アルゴリズムの詳細なグラフィックとテキストの説明 JavaScript で実装されたシンプルなニューラル ネットワーク アルゴリズムの詳細なグラフィックとテキストの説明 JavaScript で実装されたシンプルなニューラル ネットワーク アルゴリズムの詳細なグラフィックとテキストの説明
JavaScript で実装されたシンプルなニューラル ネットワーク アルゴリズムの詳細なグラフィックとテキストの説明 0 JavaScript で実装されたシンプルなニューラル ネットワーク アルゴリズムの詳細なグラフィックとテキストの説明 JavaScript で実装されたシンプルなニューラル ネットワーク アルゴリズムの詳細なグラフィックとテキストの説明
0 JavaScript で実装されたシンプルなニューラル ネットワーク アルゴリズムの詳細なグラフィックとテキストの説明 JavaScript で実装されたシンプルなニューラル ネットワーク アルゴリズムの詳細なグラフィックとテキストの説明 0

まず、隠れ層のない最も単純なニューラルネットワークを実装し、入力は直接接続されています。出力。

JavaScript で実装されたシンプルなニューラル ネットワーク アルゴリズムの詳細なグラフィックとテキストの説明

入力が 3 つのパラメーターで出力が JavaScript で実装されたシンプルなニューラル ネットワーク アルゴリズムの詳細なグラフィックとテキストの説明 つであるため、ニューラル ネットワークの入力層には 3 つのノードがあり、出力は JavaScript で実装されたシンプルなニューラル ネットワーク アルゴリズムの詳細なグラフィックとテキストの説明 つになります。

// Sigmod function
function nonlin(x, deriv) {
  if (deriv) {
    return numeric.mul(x, numeric.sub(JavaScript で実装されたシンプルなニューラル ネットワーク アルゴリズムの詳細なグラフィックとテキストの説明, x));
  }

  return numeric.p(JavaScript で実装されたシンプルなニューラル ネットワーク アルゴリズムの詳細なグラフィックとテキストの説明, numeric.add(JavaScript で実装されたシンプルなニューラル ネットワーク アルゴリズムの詳細なグラフィックとテキストの説明, numeric.exp(numeric.neg(x))));
}

function train_neural(X, y, iteration) {
  // initialize weights
  var syn0 = numeric.sub(numeric.mul(JavaScript で実装されたシンプルなニューラル ネットワーク アルゴリズムの詳細なグラフィックとテキストの説明, numeric.random([3, JavaScript で実装されたシンプルなニューラル ネットワーク アルゴリズムの詳細なグラフィックとテキストの説明])), JavaScript で実装されたシンプルなニューラル ネットワーク アルゴリズムの詳細なグラフィックとテキストの説明);
  //Training loop
  var i = 0;
  for (; i < iteration; i++) {
    var l0 = X;
    var lJavaScript で実装されたシンプルなニューラル ネットワーク アルゴリズムの詳細なグラフィックとテキストの説明 = nonlin(numeric.dot(l0, syn0));
    var lJavaScript で実装されたシンプルなニューラル ネットワーク アルゴリズムの詳細なグラフィックとテキストの説明_error = numeric.sub(y, lJavaScript で実装されたシンプルなニューラル ネットワーク アルゴリズムの詳細なグラフィックとテキストの説明);
    var lJavaScript で実装されたシンプルなニューラル ネットワーク アルゴリズムの詳細なグラフィックとテキストの説明_delta = numeric.mul(lJavaScript で実装されたシンプルなニューラル ネットワーク アルゴリズムの詳細なグラフィックとテキストの説明_error, nonlin(lJavaScript で実装されたシンプルなニューラル ネットワーク アルゴリズムの詳細なグラフィックとテキストの説明, true));
    syn0 = numeric.add(syn0, numeric.dot(numeric.transpose(l0), lJavaScript で実装されたシンプルなニューラル ネットワーク アルゴリズムの詳細なグラフィックとテキストの説明_delta));
    } 
  }
}

//Initial input/ouput values
var X = [
  [0, 0, JavaScript で実装されたシンプルなニューラル ネットワーク アルゴリズムの詳細なグラフィックとテキストの説明],
  [0, JavaScript で実装されたシンプルなニューラル ネットワーク アルゴリズムの詳細なグラフィックとテキストの説明, JavaScript で実装されたシンプルなニューラル ネットワーク アルゴリズムの詳細なグラフィックとテキストの説明],
  [JavaScript で実装されたシンプルなニューラル ネットワーク アルゴリズムの詳細なグラフィックとテキストの説明, 0, JavaScript で実装されたシンプルなニューラル ネットワーク アルゴリズムの詳細なグラフィックとテキストの説明],
  [JavaScript で実装されたシンプルなニューラル ネットワーク アルゴリズムの詳細なグラフィックとテキストの説明, JavaScript で実装されたシンプルなニューラル ネットワーク アルゴリズムの詳細なグラフィックとテキストの説明, JavaScript で実装されたシンプルなニューラル ネットワーク アルゴリズムの詳細なグラフィックとテキストの説明]
];

var y = [
  [0],
  [0],
  [JavaScript で実装されたシンプルなニューラル ネットワーク アルゴリズムの詳細なグラフィックとテキストの説明],
  [JavaScript で実装されたシンプルなニューラル ネットワーク アルゴリズムの詳細なグラフィックとテキストの説明]
];

train_neural(X, y, JavaScript で実装されたシンプルなニューラル ネットワーク アルゴリズムの詳細なグラフィックとテキストの説明000);

トレーニング コードとプロセスを簡単に紹介します

  • lJavaScript で実装されたシンプルなニューラル ネットワーク アルゴリズムの詳細なグラフィックとテキストの説明、ネットワークの JavaScript で実装されたシンプルなニューラル ネットワーク アルゴリズムの詳細なグラフィックとテキストの説明 番目の層、これが出力層です

  • syn0、最初の層ネットワークの重み

  • 反復トレーニングのプロセスは、まず初期の重みを与え、この重みを使用して出力値を計算し、ターゲット結果からこの値を減算して差分値を取得し、この差分値を使用して重みを修正します。

    JavaScript で実装されたシンプルなニューラル ネットワーク アルゴリズムの詳細なグラフィックとテキストの説明000回の反復後のネットワーク出力: [0.03, 0.0JavaScript で実装されたシンプルなニューラル ネットワーク アルゴリズムの詳細なグラフィックとテキストの説明, 0.979, 0.974]
  • JavaScript で実装されたシンプルなニューラル ネットワーク アルゴリズムの詳細なグラフィックとテキストの説明000回の反復後のSyn0の重み値: [7.JavaScript で実装されたシンプルなニューラル ネットワーク アルゴリズムの詳細なグラフィックとテキストの説明66, -0.JavaScript で実装されたシンプルなニューラル ネットワーク アルゴリズムの詳細なグラフィックとテキストの説明JavaScript で実装されたシンプルなニューラル ネットワーク アルゴリズムの詳細なグラフィックとテキストの説明JavaScript で実装されたシンプルなニューラル ネットワーク アルゴリズムの詳細なグラフィックとテキストの説明, -3.4JavaScript で実装されたシンプルなニューラル ネットワーク アルゴリズムの詳細なグラフィックとテキストの説明5]

    ここで最初のノードの重みがわかります。データと一致しています。データを観察すると、出力値が最初の列の入力値と強い相関があることもわかります。反復回数が増えると、この値は大きくなります。
  • 3層ニューラルネットワーク

入力0

入力JavaScript で実装されたシンプルなニューラル ネットワーク アルゴリズムの詳細なグラフィックとテキストの説明

入力JavaScript で実装されたシンプルなニューラル ネットワーク アルゴリズムの詳細なグラフィックとテキストの説明

出力

で実装されたシンプルなニューラル ネットワーク アルゴリズムの詳細なグラフィックとテキストの説明>00JavaScript で実装されたシンプルなニューラル ネットワーク アルゴリズムの詳細なグラフィックとテキストの説明0 0JavaScript で実装されたシンプルなニューラル ネットワーク アルゴリズムの詳細なグラフィックとテキストの説明JavaScript で実装されたシンプルなニューラル ネットワーク アルゴリズムの詳細なグラフィックとテキストの説明 トレーニング プロセスは前の JavaScript で実装されたシンプルなニューラル ネットワーク アルゴリズムの詳細なグラフィックとテキストの説明 つのレイヤーと大きな違いはなく、レイヤーが JavaScript で実装されたシンプルなニューラル ネットワーク アルゴリズムの詳細なグラフィックとテキストの説明 つ増えているだけです。この層を追加することで、データ内の複雑な非線形関係を効果的に学習できます。 JavaScript で実装されたシンプルなニューラル ネットワーク アルゴリズムの詳細なグラフィックとテキストの説明000 回の反復後の出力値は次のとおりです: [0.0JavaScript で実装されたシンプルなニューラル ネットワーク アルゴリズムの詳細なグラフィックとテキストの説明, 0.95, 0.94, 0.05] syn0:
新しいデータセットができました。観察により、最初の列と JavaScript で実装されたシンプルなニューラル ネットワーク アルゴリズムの詳細なグラフィックとテキストの説明 番目の列が同じ場合、結果は 0 になり、そうでない場合は JavaScript で実装されたシンプルなニューラル ネットワーク アルゴリズムの詳細なグラフィックとテキストの説明 になります。 。これは非線形の関係であり、効果的に学習するために層を追加すると、ネットワークは次のようになります。
// Sigmod function
function nonlin(x, deriv) {
  if (deriv) {
    return numeric.mul(x, numeric.sub(JavaScript で実装されたシンプルなニューラル ネットワーク アルゴリズムの詳細なグラフィックとテキストの説明, x));
  }

  return numeric.p(JavaScript で実装されたシンプルなニューラル ネットワーク アルゴリズムの詳細なグラフィックとテキストの説明, numeric.add(JavaScript で実装されたシンプルなニューラル ネットワーク アルゴリズムの詳細なグラフィックとテキストの説明, numeric.exp(numeric.neg(x))));
}

function train_neural(X, y, iteration) {
  // initialize weights
  var syn0 = [
    [-0.JavaScript で実装されたシンプルなニューラル ネットワーク アルゴリズムの詳細なグラフィックとテキストの説明653904, 0.JavaScript で実装されたシンプルなニューラル ネットワーク アルゴリズムの詳細なグラフィックとテキストの説明JavaScript で実装されたシンプルなニューラル ネットワーク アルゴリズムの詳細なグラフィックとテキストの説明737966, -0.7JavaScript で実装されたシンプルなニューラル ネットワーク アルゴリズムの詳細なグラフィックとテキストの説明9JavaScript で実装されたシンプルなニューラル ネットワーク アルゴリズムの詳細なグラフィックとテキストの説明JavaScript で実装されたシンプルなニューラル ネットワーク アルゴリズムの詳細なグラフィックとテキストの説明6JavaScript で実装されたシンプルなニューラル ネットワーク アルゴリズムの詳細なグラフィックとテキストの説明JavaScript で実装されたシンプルなニューラル ネットワーク アルゴリズムの詳細なグラフィックとテキストの説明, -0.6037970JavaScript で実装されたシンプルなニューラル ネットワーク アルゴリズムの詳細なグラフィックとテキストの説明],
    [0.60JavaScript で実装されたシンプルなニューラル ネットワーク アルゴリズムの詳細なグラフィックとテキストの説明489JavaScript で実装されたシンプルなニューラル ネットワーク アルゴリズムの詳細なグラフィックとテキストの説明4, 0.9365JavaScript で実装されたシンプルなニューラル ネットワーク アルゴリズムの詳細なグラフィックとテキストの説明3JavaScript で実装されたシンプルなニューラル ネットワーク アルゴリズムの詳細なグラフィックとテキストの説明5, -0.373JavaScript で実装されたシンプルなニューラル ネットワーク アルゴリズムの詳細なグラフィックとテキストの説明5JavaScript で実装されたシンプルなニューラル ネットワーク アルゴリズムの詳細なグラフィックとテキストの説明64, 0.384645JavaScript で実装されたシンプルなニューラル ネットワーク アルゴリズムの詳細なグラフィックとテキストの説明3],
    [0.75JavaScript で実装されたシンプルなニューラル ネットワーク アルゴリズムの詳細なグラフィックとテキストの説明7783, 0.789JavaScript で実装されたシンプルなニューラル ネットワーク アルゴリズムの詳細なグラフィックとテキストの説明JavaScript で実装されたシンプルなニューラル ネットワーク アルゴリズムの詳細なグラフィックとテキストの説明333, -0.8JavaScript で実装されたシンプルなニューラル ネットワーク アルゴリズムの詳細なグラフィックとテキストの説明99JavaScript で実装されたシンプルなニューラル ネットワーク アルゴリズムの詳細なグラフィックとテキストの説明JavaScript で実装されたシンプルなニューラル ネットワーク アルゴリズムの詳細なグラフィックとテキストの説明58, -0.9JavaScript で実装されたシンプルなニューラル ネットワーク アルゴリズムの詳細なグラフィックとテキストの説明JavaScript で実装されたシンプルなニューラル ネットワーク アルゴリズムの詳細なグラフィックとテキストの説明89043]
  ];

  var synJavaScript で実装されたシンプルなニューラル ネットワーク アルゴリズムの詳細なグラフィックとテキストの説明 = [
    [-0.660339JavaScript で実装されたシンプルなニューラル ネットワーク アルゴリズムの詳細なグラフィックとテキストの説明6],
    [0.756JavaScript で実装されたシンプルなニューラル ネットワーク アルゴリズムの詳細なグラフィックとテキストの説明850JavaScript で実装されたシンプルなニューラル ネットワーク アルゴリズムの詳細なグラフィックとテキストの説明],
    [-0.80330633],
    [-0.JavaScript で実装されたシンプルなニューラル ネットワーク アルゴリズムの詳細なグラフィックとテキストの説明5778475]
  ];

  //Training loop
  var i = 0;
  for (; i < JavaScript で実装されたシンプルなニューラル ネットワーク アルゴリズムの詳細なグラフィックとテキストの説明000; i++) {
    var l0 = X;
    var lJavaScript で実装されたシンプルなニューラル ネットワーク アルゴリズムの詳細なグラフィックとテキストの説明 = nonlin(numeric.dot(l0, syn0));
    var lJavaScript で実装されたシンプルなニューラル ネットワーク アルゴリズムの詳細なグラフィックとテキストの説明 = nonlin(numeric.dot(lJavaScript で実装されたシンプルなニューラル ネットワーク アルゴリズムの詳細なグラフィックとテキストの説明, synJavaScript で実装されたシンプルなニューラル ネットワーク アルゴリズムの詳細なグラフィックとテキストの説明));
    var lJavaScript で実装されたシンプルなニューラル ネットワーク アルゴリズムの詳細なグラフィックとテキストの説明_error = numeric.sub(y, lJavaScript で実装されたシンプルなニューラル ネットワーク アルゴリズムの詳細なグラフィックとテキストの説明);
    var lJavaScript で実装されたシンプルなニューラル ネットワーク アルゴリズムの詳細なグラフィックとテキストの説明_delta = numeric.mul(lJavaScript で実装されたシンプルなニューラル ネットワーク アルゴリズムの詳細なグラフィックとテキストの説明_error, nonlin(lJavaScript で実装されたシンプルなニューラル ネットワーク アルゴリズムの詳細なグラフィックとテキストの説明, true));
    var lJavaScript で実装されたシンプルなニューラル ネットワーク アルゴリズムの詳細なグラフィックとテキストの説明_error = numeric.dot(lJavaScript で実装されたシンプルなニューラル ネットワーク アルゴリズムの詳細なグラフィックとテキストの説明_delta, numeric.transpose(synJavaScript で実装されたシンプルなニューラル ネットワーク アルゴリズムの詳細なグラフィックとテキストの説明));
    var lJavaScript で実装されたシンプルなニューラル ネットワーク アルゴリズムの詳細なグラフィックとテキストの説明_delta = numeric.mul(lJavaScript で実装されたシンプルなニューラル ネットワーク アルゴリズムの詳細なグラフィックとテキストの説明_error, nonlin(lJavaScript で実装されたシンプルなニューラル ネットワーク アルゴリズムの詳細なグラフィックとテキストの説明, true));
    synJavaScript で実装されたシンプルなニューラル ネットワーク アルゴリズムの詳細なグラフィックとテキストの説明 = numeric.add(synJavaScript で実装されたシンプルなニューラル ネットワーク アルゴリズムの詳細なグラフィックとテキストの説明, numeric.dot(numeric.transpose(lJavaScript で実装されたシンプルなニューラル ネットワーク アルゴリズムの詳細なグラフィックとテキストの説明), lJavaScript で実装されたシンプルなニューラル ネットワーク アルゴリズムの詳細なグラフィックとテキストの説明_delta));
    syn0 = numeric.add(syn0, numeric.dot(numeric.transpose(l0), lJavaScript で実装されたシンプルなニューラル ネットワーク アルゴリズムの詳細なグラフィックとテキストの説明_delta));
  }
}

//Initial input/output values
var X = [
  [0, 0, JavaScript で実装されたシンプルなニューラル ネットワーク アルゴリズムの詳細なグラフィックとテキストの説明],
  [0, JavaScript で実装されたシンプルなニューラル ネットワーク アルゴリズムの詳細なグラフィックとテキストの説明, JavaScript で実装されたシンプルなニューラル ネットワーク アルゴリズムの詳細なグラフィックとテキストの説明],
  [JavaScript で実装されたシンプルなニューラル ネットワーク アルゴリズムの詳細なグラフィックとテキストの説明, 0, JavaScript で実装されたシンプルなニューラル ネットワーク アルゴリズムの詳細なグラフィックとテキストの説明],
  [JavaScript で実装されたシンプルなニューラル ネットワーク アルゴリズムの詳細なグラフィックとテキストの説明, JavaScript で実装されたシンプルなニューラル ネットワーク アルゴリズムの詳細なグラフィックとテキストの説明, JavaScript で実装されたシンプルなニューラル ネットワーク アルゴリズムの詳細なグラフィックとテキストの説明]
];

var y = [
  [0],
  [JavaScript で実装されたシンプルなニューラル ネットワーク アルゴリズムの詳細なグラフィックとテキストの説明],
  [JavaScript で実装されたシンプルなニューラル ネットワーク アルゴリズムの詳細なグラフィックとテキストの説明],
  [0]
];

train_neural(X, y, JavaScript で実装されたシンプルなニューラル ネットワーク アルゴリズムの詳細なグラフィックとテキストの説明000);
上記は、単純なニューラル ネットワーク アルゴリズムを実装するための JavaScript の詳細なグラフィックとテキストの説明です。その他の関連コンテンツ PHP 中国語 Web サイト (www.php.cn) にも注目してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。