% Code for a 2 x 2 x 1 network- Training by gradient descent by hand. s=inline('1./(1+exp(-x))'); STEP=0.1; % Set up the parameters x=[0.35; 0.9]; t=0.5; w11=[0.1; 0.8]; w12=[0.4;0.6]; w2=[0.3;0.9]; for j=1:100 % FORWARD PASS: P01=x(1); S01=x(1); dS01=1; P02=x(2); S02=x(2); dS02=1; P11=w11'*[S01;S02]; S11=s(P11); dS11=S11*(1-S11); P12=w12'*[S01;S02]; S12=s(P11); dS12=S12*(1-S12); P2=w2'*[S11;S12]; S2=P2; dS2=1; Out(j)=S2; Err(j)=t-S2; % BACKWARDS Compute Deltas % Last layer: Delta2=(t-S2)*dS2 Delta11=dS11*w2(1)*Delta2; Delta12=dS12*w2(2)*Delta2; Delta01=dS01*(w11(1)*Delta11+w12(1)*Delta12); Delta02=dS02*(w11(2)*Delta11+w12(2)*Delta12); % Update the weights using the deltas w11(1)=w11(1)+STEP*Delta11*S01; w11(2)=w11(2)+STEP*Delta11*S02; w12(1)=w12(1)+STEP*Delta12*S01; w12(2)=w12(2)+STEP*Delta12*S02; w2(1)=w2(1)+STEP*Delta2*S11; w2(2)=w2(2)+STEP*Delta2*S12; end