public void backPropagate(){
      //ошибка выходного слоя
        for(int out = 0; out < OUTPUT; out++){
            erro[out] = (target[out] - actual[out])*
                    sigmoidDerivative(actual[out]);
        }
        //ошибка скрытого слоя
        for(int hid = 0; hid < HIDDEN; hid++){
            errh[hid] = 0.0;
            for(int out = 0; out < OUTPUT; out++)
                errh[hid] += erro[out] * who[hid][out];
            errh[hid] *= sigmoidDerivative(hidden[hid]);
        }
        //обновить веса для выходного слоя
        for(int out = 0; out < OUTPUT; out++){
            for(int hid = 0; hid < HIDDEN; hid++){
                who[hid][out] += LEARN * erro[out] * hidden[hid];
            }
            //обновить смещение
            who[HIDDEN][out] += LEARN*erro[out];
        }
        //обновить веса для скрытого слоя
        for(int hid = 0; hid < HIDDEN; hid++){
            for(int inp = 0; inp < INPUT; inp++)
                wih[inp][hid] += LEARN * errh[hid] * inputs[inp];
            //обновить смещение
            wih[INPUT][hid] += LEARN * errh[hid];
        }
    }