私はニューラルネットワーク上で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の間の値を取得します。また、特定の重みを使用すると、一定の入力に対して毎回同じ値が得られます。
私はコードで使用している用語は良いですか?
私は単に偽陽性を観察している可能性があり、実際にはフィードフォワードしていない恐れがあります。
シグモイド機能は適切ですか?私はそれを遺伝的アルゴリズム/進化アルゴリズムに使用すべきですか?
私は0.5と1の間の結果しか得ていないことに気付きました。