2010-05-19 9 views
4

첫 번째에 대한 질문)탄력 역 전파 신경망 - 내가 신경 네트워크에 정말 새로운 그리고 난 아주 잘 이해하지 못하는 것을 말하고 싶은 그라데이션

나는의 처음 C#을 구현했습니다 backpropagation 신경망. 나는 그것을 XOR을 사용하여 테스트했으며 작동하는 것처럼 보인다.

이제 탄력적 인 backpropagation (Rprop - http://en.wikipedia.org/wiki/Rprop)을 사용하도록 구현을 변경하고 싶습니다.

정의는 말한다 : "Rprop 계정에 모든 패턴 (안 크기)을 통해 편미분의 부호를 취하고, 각각 독립적으로 작용한다"무게 "

누군가가 나를 부분 어떤 유도체 이상 말할 수 없습니다. 모든 패턴은 내가 은닉층의 뉴런에 대한

감사 많은이 편미분을 계산하는 방법을

UPDATE :?.이 자바 코드에

내 구현하는 base : www_.dia.fi. upm.es/~jamartin/downloads/bpnn.java

내 backPropagate 방법은 다음과 같다 :

public double backPropagate(double[] targets) 
    { 
     double error, change; 

     // calculate error terms for output 
     double[] output_deltas = new double[outputsNumber]; 

     for (int k = 0; k < outputsNumber; k++) 
     { 

      error = targets[k] - activationsOutputs[k]; 
      output_deltas[k] = Dsigmoid(activationsOutputs[k]) * error; 
     } 

     // calculate error terms for hidden 
     double[] hidden_deltas = new double[hiddenNumber]; 

     for (int j = 0; j < hiddenNumber; j++) 
     { 
      error = 0.0; 

      for (int k = 0; k < outputsNumber; k++) 
      { 
       error = error + output_deltas[k] * weightsOutputs[j, k]; 
      } 

      hidden_deltas[j] = Dsigmoid(activationsHidden[j]) * error; 
     } 

     //update output weights 
     for (int j = 0; j < hiddenNumber; j++) 
     { 
      for (int k = 0; k < outputsNumber; k++) 
      { 
       change = output_deltas[k] * activationsHidden[j]; 
       weightsOutputs[j, k] = weightsOutputs[j, k] + learningRate * change + momentumFactor * lastChangeWeightsForMomentumOutpus[j, k]; 
       lastChangeWeightsForMomentumOutpus[j, k] = change; 

      } 
     } 

     // update input weights 
     for (int i = 0; i < inputsNumber; i++) 
     { 
      for (int j = 0; j < hiddenNumber; j++) 
      { 
       change = hidden_deltas[j] * activationsInputs[i]; 
       weightsInputs[i, j] = weightsInputs[i, j] + learningRate * change + momentumFactor * lastChangeWeightsForMomentumInputs[i, j]; 
       lastChangeWeightsForMomentumInputs[i, j] = change; 
      } 
     } 

     // calculate error 
     error = 0.0; 

     for (int k = 0; k < outputsNumber; k++) 
     { 
      error = error + 0.5 * (targets[k] - activationsOutputs[k]) * (targets[k] - activationsOutputs[k]); 
     } 

     return error; 
    } 

그래서이 노래에 대해 검사 구배 (편미분)로 change = hidden_deltas[j] * activationsInputs[i] 변수를 사용합니까?

+0

구현을 디버깅하는 데 어제 저녁을 보냈습니다.이 알고리즘을 이해할 수 없다는 우려가 나타납니다. 당신은 그것의 좋은 설명을 알고 있습니까? –

답변

2

는 내가이 "모든 패턴을 통해"단순히 "모든 반복에"... paritial 파생를 들어 RPROP paper

을 살펴 의미한다고 생각 : 당신은 이미 일반적인 역 전파 알고리즘을 구현했습니다. 이것은 그라디언트를 효율적으로 계산하는 방법입니다. 여기에서 단일 뉴런에 대한 δ 값을 계산합니다.이 값은 실제로 음수 ∂E/∂w 값, 즉 가중치의 함수로 전역 오차의 팔다리 파생 값입니다.

그렇게하는 대신 이러한 값에 가중치를 곱하는 경우 가지고 두 정수의 하나 (η + 또는 η-) 여부 기호에 따라 다음이 구현의 일부의 예이다

+0

당신은 친절하고 내 코드를 (위)보고 올바른 생각을하고 있는지 말해 줄 수 있습니까 –

+0

예, 변경 값은 부분 파생물입니다. 그것의 부호 변화에 따르면, 또 다른 요소는 체중 변화를 업데이트하는 데 사용됩니다. (링크 된 논문의 4-7 절을 참조하십시오. ∂E/∂w 값은 변경 사항입니다. 변수들) –

+0

http://galaxy.agh.edu.pl/~vlsi/AI/backp_t_en/backprop.html이 역 전파의 개념을 아주 잘 설명한다고 생각합니다.http://www.learnartificialneuralnetworks.com/backpropagation.html은 어떻게 그리고 왜 작동하는지 더 수학적인 설명입니다. –

1

변경된 Encog AI (Artificial Intelligence Library)의 RPROP 교육 기술에 대해 설명합니다. 진행 방법에 대한 아이디어를 줄 것입니다. 전체 라이브러리를 다운로드하는 것이 좋습니다. 온라인 svn 인터페이스가 아닌 IDE에서 소스 코드를 쉽게 탐색 할 수 있기 때문입니다.

http://code.google.com/p/encog-cs/source/browse/#svn/trunk/encog-core/encog-core-cs/Neural/Networks/Training/Propagation/Resilient

http://code.google.com/p/encog-cs/source/browse/#svn/trunk

주 코드는 C#으로하지만, 다른 언어로 번역하기 어려운해서는 안됩니다.

+0

Thx, 나는이 해결책을 검토하려고 노력할 것이다 –

+0

나는 내가 [여기에 올린] 후속 질문을 가지고있다. (http://stackoverflow.com/questions/12146986/part-2-resilient- 역 전파 - 신경망). NN에 대해 부분 파생물이 어떻게 작동하는지 명확하게 이해하려고 노력하고 있습니다. 어떤 통찰력도 감사하겠습니다. – Nutritioustim