Обратное распространение ошибки

>    restart; with(LinearAlgebra):

В первой строке - смещения, в первом столбце - веса от узла 1 2-го уровня к узлам 1 и 2 первого,
во втором столбце - веса от узла 2  2-го уровня к узлам 1 и 2 первого

Функция активности

>    sgm:=proc(x) 1/(1+exp(-x));end:

>    W1:=Matrix([[2,2],[-2,3 ],[-2 ,3]]):

Веса 2-го слоя

>    W2:=Matrix([[3, -2],[-2,2],[-4 ,2]]):

Веса 3-го слоя

>    W3:=Matrix([[-2],[3],[1]]):

Сигнал входной. На 1-м месте всегда 1 - это активность смещения

>    U0:=Vector[row]([1,0.1,0.9]):

Сумматор промежуточного слоя

>    U1:=U0.W1:

Применили ее к сигналу, полученному на промеж слой, получили выход на промеж слое - он же (вместе с 1)  вход для след слоя

>    z:=map(sgm,U1);

z := Vector(%id = 18595788)

Добавили 1 на 1-е место

>    U1out:=Vector(3,[1,z]):

Перемножили (сумматор)

>    U2:=U1out.W2;

U2 := Vector(%id = 19027608)

Выход

>    z:=map(sgm,U2);

z := Vector(%id = 19046276)

>    U2out:=Vector(3,[1,z]):

Перемножили (сумматор)

>    U3:=U2out.W3;

>    z:=map(sgm,U3);

U3 := Vector(%id = 19090744)

z := Vector(%id = 19110248)

>    t:=0.9:

>    delt3:=z[1]*(1-z[1])*(t-z[1]);

delt3 := 0.1254905134

>    delt2:=Vector(2,[delt3*W3[2,1],delt3*W3[3,1]]);

delt2 := Vector(%id = 19012468)

>    j:=x -> x*(1-x);

>    delt2a:=map(j,U2out)[2..-1]:

j := proc (x) options operator, arrow; x*(1-x) end proc

>    U2d:=Vector(2,[delt2]);

U2d := Vector(%id = 19071268)

>    delt2r:=Zip( `*`, U2d, delt2a);

delt2r := Vector(%id = 18882332)

>    AA:=convert(W2.delt2r,Matrix);

AA := Matrix(%id = 19233144)

>    delt1:=DeleteRow(AA,1);

delt1 := Matrix(%id = 19253540)

>    delt1a:=map(j,U1out)[2..-1];

delt1a := Vector(%id = 19248120)

>    U1d:=Vector(2,[delt1]);

U1d := Vector(%id = 18882892)

>    delt1r:=Zip( `*`, U1d, delt1a);

delt1r := Vector(%id = 19276664)

>    W1:=Zip(`+`,W1,Transpose(delt1r.U0*0.8));

W1 := Matrix(%id = 19545556)

>    W2:=Zip(`+`,W2,Transpose(delt2r.U1out*0.8));

W2 := Matrix(%id = 19651344)

>    W3:=Zip(`+`,W3,Transpose(convert(U2out*delt3*0.8,Matrix)));

W3 := Matrix(%id = 19728348)