я же правильно делаю, что высчитываю ошибку, а потом умножаю веса на эту ошибку с коеффициентом у последнего слоя?
Эээ, нет. У тебя есть дисконтирующий множитель (скорость обучения) И есть градиент. Умножаешь градиент (частную производную по текущему весу) на дисконтирующий множитель. Если твой слой последний где брать ошибку понятно. А если не последний, то это произведение ошибки следующего слоя на вес нейрона