== Алгоритм ==
Пример реализации алгоритма на Python* <math>\eta</math> - скорость обучения* <math>\alpha</math> - коэффициент инерциальности для сглаживания резких скачков при перемещении по поверхности целевой функции* <math>\{x_i^d, t^d\}_{i=1,d=1}^{n,m}</math> {{---}} обучающее множество* <math>\textrm{steps}</math> {{---}} количество повторений* <math>layers</math> {{---}} количество слоев в сети* <math>layer_i</math> {{---}} множество нейронов в слое i* <math>output</math> {{---}} множество нейронов в выходном слое
def backward_propagate_error'''fun''' BackPropagation<math>(network\eta, \alpha, \{x_i^d, t^d\}_{i=1,d=1}^{n,m}, expected\textrm{steps})</math>: '''init''' <math>\{w_{ij}\}_{i,j} </math> '''repeat''' <math>\textrm{steps}</math>: '''for i in reversed(range(len(network)))''' <math>d</math> = <math>1</math> to <math>m</math>: layer <math>o</math> = <math>network[i](\{x_i^d\}) </math> '''for''' <math>k \in output</math>: errors <math>\delta _k</math> = list<math>\sigma'(o_k)(t_k - o_k)</math> if '''for''' <math>i !</math> = len(network)<math>layers -1</math> to <math>1</math>: '''for ''' <math>j \in range(len(layer))layer_i</math>: error <math>\delta _j</math> = 0.0 for neuron <math>\sigma'(o_j)\sum_{k \in network[i layer_{j + 1]:}} \delta _k w_{j,k}</math> error += (neuron[ '''weightsfor'][j] * neuron['delta'])every <math>w_{i,j}</math>: errors.append <math>\Delta w_{i,j}(errorn) else: for </math> = <math>\alpha \Delta w_{i,j in range}(lenn-1) + (layer1 - \alpha )\eta \delta _j o_{i}</math> <math>w_{i,j}(n): neuron </math> = layer[<math>w_{i,j] errors.append}(expected[j] n- neuron['output']1) for + \Delta w_{i,j in range}(len(layern)):</math> neuron = layer[j] neuron[ '''deltareturn'] = errors[j] * transfer_derivative(neuron['output'])<math>w_{ij}</math> где <math>\alpha</math> — коэффициент инерциальности для сглаживания резких скачков при перемещении по поверхности целевой функции
== Недостатки алгоритма ==