2017-09-10 3 views
-2

나는 지난 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]); 

I 성공적으로 0과 1, 나는 특정 가중치를 사용하면, I는 정수 입력에 대해 동일한 값마다 얻을 사이의 값을 얻는다.

  1. 코드에서 사용하는 용어가 좋습니까?

  2. 나는 단순히 잘못된 반응을 관찰하고 실제로 앞으로 먹이지 않을까 우려하고 있습니다.

  3. 시그 모이 드 기능이 적절합니까? 유전자 알고리즘/진화 알고리즘에 사용해야합니까?

나는 0.5와 1 사이의 결과 만 얻고있는 것으로 나타났습니다.

답변

1

신경망을 유전자 알고리즘과 결합 시키려면 가장 좋은 방법은 아마도 NEAT 일 것입니다. JS에서 'Neataptic'이라고 불리는이 알고리즘의 구현은 매우 훌륭합니다. github에서이 알고리즘을 사용할 수 있어야합니다.

GA를 ANN과 결합 할 때 일반적으로 가중치뿐만 아니라 구조도 조정해야합니다.

GA에서는 Sigmoid 정품 인증을 사용할 수 있지만 많은 경우 다른 정품 인증 기능도 필요하므로 위키 백과에서 정품 인증 기능 목록을 찾아 보거나 정품 인증 기능을 직접 만들 수 있습니다.