Redes neurais, duvida sobre calculo

galear eu fiz uma RNA, mas ela nao aprende de jeito nenhum o resultado tende sempre a zero e depois da NaN, o codigo de atualização do pesos está logo ai a baixo, eu axo que o erro esta ai. Se alguem puder ajudar.

[code]public void calculaPesoSaida(ArrayList saidaDesejada,ArrayList saidaO){
double np,peso,entrada,linhaNet,delta;
double bias=0, deltaBias=0;
Neuronio neuro;

    for(int n=0;n<estrutura.get(estrutura.size()-1).size();n++){
        neuro = estrutura.get(estrutura.size()-1).getN(n);
        linhaNet = neuro.linhaNet();
        for (int p=0;p<estrutura.get(estrutura.size()-2).size();p++){
            peso = neuro.getPeso(p);
            entrada = neuro.getEntrada(p);
            delta = taxa*(saidaDesejada.get(n)-saidaO.get(n))*linhaNet*entrada;
            np = peso+delta;
            saidaT.getN(n).setPeso(p, np);                    
        }
        deltaBias = taxa*(saidaDesejada.get(n)-saidaO.get(n))*linhaNet;
        bias = neuro.getBias()+deltaBias;
        saidaT.getN(n).setBias(bias);
        
    }
    
}

public void calculaPesoHidden(ArrayList<Double> entrada,ArrayList<Double> saidaDesejada){
    double bias=0, deltaBias=0;
    for(int c=estrutura.size()-2;c>=0;c--){
        Camada cHidden = estrutura.get(c);
        Camada cSaida = estrutura.get(c+1);
        for(int n=0;n<cHidden.size();n++){
            Neuronio neuroH = estrutura.get(c).getN(n);
            double somatorio=0,novoPeso;
            for(int ns=0;ns<cSaida.size();ns++){
                Neuronio neuroS = cSaida.getN(ns);
                somatorio += ((saidaDesejada.get(ns)-neuroS.getSaida())*neuroS.linhaNet()*neuroS.getPeso(n));
                
            }
            for(int i=0;i<entrada.size();i++){
                double delta = taxa*neuroH.linhaNet()*neuroH.getEntrada(i)*somatorio;
                novoPeso = neuroH.getPeso(i)+delta;
                //System.out.println("PesoH"+n+": "+neuroH.getPeso(i)+" | "+neuroH.linhaNet()+"/"+somatorio+" | "+novoPeso);
                estrutura.get(c).getN(n).setPeso(i, novoPeso);
            }
            //System.out.println("-----------------------------------");
            deltaBias = taxa*neuroH.linhaNet()*somatorio;
            bias = neuroH.getBias()+deltaBias;
            estrutura.get(c).getN(n).setBias(bias);
        }   
    }
    
}[/code]