2017-09-10 5 views
-2

私はニューラルネットワーク上でYouTubeのビデオを見て最後の2日間を過ごしました。これはニューラルネットワークですか

特に、私は時間の経過と共に進化する遺伝的アルゴリズムを実装しようとしていましたが、ほとんどのビデオは訓練され、分類に使用される神経ネットワークに焦点を当てているようです。

混乱しながら、私は単純にネットワークの基本構造を実装しようとしました。これを便宜上JSで記述しました。

function sigmoid (x) { return 1/(1 + Math.E ** -x); } 
function Brain(inputs, hiddens, outputs) { 
    this.weights = { 
     hidden: [], 
     output: [] 
    }; 

    for (var i = hiddens; i--;) { 
     this.weights.hidden[i] = []; 
     for (var w = inputs; w--;) this.weights.hidden[i].push(Math.random()); 
    } 
    for (var i = outputs; i--;) { 
     this.weights.output[i] = []; 
     for (var w = hiddens; w--;) this.weights.output[i].push(Math.random()); 
    } 
} 

Brain.prototype.compute = function(inputs) { 
    var hiddenInputs = []; 
    for (var i = this.weights.hidden.length; i--;) { 
     var dot = 0; 
     for (var w = inputs.length; w--;) dot += inputs[w] * this.weights.hidden[i][w]; 
     hiddenInputs[i] = sigmoid(dot); 
    } 

    var outputs = []; 
    for (var i = this.weights.output.length; i--;) { 
     var dot = 0; 
     for (var w = this.weights.hidden.length; w--;) dot += hiddenInputs[w] * this.weights.output[i][w]; 
     outputs[i] = sigmoid(dot); 
    } 
    return outputs; 
} 

var brain = new Brain(1,2,1); 
brain.compute([1]); 

私は正常に0と1の間の値を取得します。また、特定の重みを使用すると、一定の入力に対して毎回同じ値が得られます。

  1. 私はコードで使用している用語は良いですか?

  2. 私は単に偽陽性を観察している可能性があり、実際にはフィードフォワードしていない恐れがあります。

  3. シグモイド機能は適切ですか?私はそれを遺伝的アルゴリズム/進化アルゴリズムに使用すべきですか?

私は0.5と1の間の結果しか得ていないことに気付きました。

答えて

1

ニューラルネットワークと遺伝的アルゴリズムを組み合わせると、最良のショットはおそらくNEATです。 JSにはNeatapticという非常に優れたアルゴリズムが実装されています。あなたはgithubでそれを見つけられるはずです。

GAとANNを組み合わせる場合は、一般に重みを調整するだけでなく、構造も調整したいと考えています。

シグモイドアクティベーションはGAでもOKですが、多くの場合、他のアクティベーション機能も必要です。ウィキペディアで小さな機能のリストを見つけたり、独自のものを作成したりすることができます。

関連する問題