www.slide4math.com

 

This is my version of explanation. I would suggest you to come up with your own explanation. The best way would be for you to try explain this to somebody else in your own words.

 

Following is my version of explanation, but this is just an example. You may come up with a better version.

 

 

 

Neural Network -  Pereceptron - OR Logic

 

This note is to show the process of a Perceptron learning the logic of AND gate. Main purpose of this note is to show you the all iterations from the beginning until it completes the learning, so you can try your own calculation with pen and paper and verify your calculation.

 

If you are not familiar with neural network and perceptron, you may refer to my descriptive note here.

 

 

 

 

Followings are the code that I wrote in Deep Learning Toolbox (2019b)  to creates all the plots shown in this page. You may copy these code and play with these codes. Change variables and try yourself until you get your own intuitive understanding.

 

< Code 1 >

 

net = perceptron;

net = configure(net,[0;0],0);

 

net.b{1} =  [0.2];

w = [0.2 0.2];

net.IW{1,1} = w;

alpha = 1.0;

 

pList = [1 1 0 0; 1 0 1 0];

%tList = [1 0 0 0]; % AND

tList = [1 1 1 0]; % OR

%tList = [0 0 0 1]; % NOR

 

figure(1);

set(gcf, 'Position', [200, 200, 740, 350])

set(gcf,'color','w');

subplot(1,2,2);

plotpv(pList,tList);

 

rng(1);

sList = randi([1 4],[1,100]);

 

for i = 1:60

    

    si = sList(i);

    p = pList(:,si);

    t = tList(si);

    

     a = net(p);

    

    %------------------------------------

    subplot(1,2,1);

    

    th = 0:pi/20:2*pi;

    plot(4+cos(th),4+sin(th),'k-');

    axis([0,8,0,8]);

    set(gca,'xticklabel',[]);

    set(gca,'yticklabel',[]);

    set(gca,'xtick',[]);

    set(gca,'ytick',[]);

    tStr = sprintf("Iteration = %d",i);

    title(tStr);

 

    w1_ax = [0.2 0.27];

    w1_ay = [0.68 0.6];

    annotation('textarrow',w1_ax,w1_ay,'String','');

 

    w2_ax = [0.2 0.27];

    w2_ay = [0.35 0.45];

    annotation('textarrow',w2_ax,w2_ay,'String','');

 

    b_x = [4 4];

    b_y = [1.5 3];

    line(b_x,b_y,'color','black');

 

    o_ax = [0.34 0.4];

    o_ay = [0.51 0.51];

    annotation('textarrow',o_ax,o_ay,'String','');

 

    alphaStr = sprintf("Alpha = %0.2f",alpha);

    text(2.7,7.0,alphaStr);

    

    in1 = p(1);

    inStr1 = sprintf("in1 = %d",in1);

    text(0.5,5.9,inStr1);

 

    in2 = p(2);

    inStr2 = sprintf("in2 = %d",in2);

    text(0.5,2.0,inStr2);

 

    bStr = sprintf("1");

    text(3.9,1.0,bStr);

    

    b=net.b{1};

    bStr = sprintf("%0.2f",b);

    text(4.2,2.3,bStr);

 

    w1 = net.IW{1,1}(1);

    w1Str = sprintf("%0.2f",w1);

    text(2.5,5.5,w1Str);

 

    w2 = net.IW{1,1}(2);

    w1Str = sprintf("%0.2f",w2);

    text(2.5,2.5,w1Str);

 

    s = in1*w1 + in2*w2 + b;

    sStr = sprintf("sum = \n %0.3f",s);

    text(3.3,4,sStr);

 

    o = a;

    oStr = sprintf("o = %d",o);

    text(6.5,4.0,oStr);

 

    d = t;

    dStr = sprintf("d = %d",d);

    text(6.5,3.55,dStr);

 

    e = d-o;

    eStr = sprintf("e = d - o \n   = %0.2f",e);

    text(6.0,2.85,eStr);

 

    

    %------------------------------------

    subplot(1,2,2);

    plotpv(pList,tList);

    axis([-1 2 -1 2]);

    set(gca,'xticklabel',[]);

    set(gca,'yticklabel',[]);

    set(gca,'xtick',[]);

    set(gca,'ytick',[]);

    

    fprintf("\n----------- %d th iternation ---------------\n",i);

    

    fprintf("[%d %d] => %d\n",p(1),p(2),t(1));

    

    %a = net(p);

    fprintf("a = %f\n",a);

    

    e = t-a;

    fprintf("e = %f\n",e);    

    

    dw = learnp(w,p,[],[],[],[],e,[],[],[],[],[]);

    fprintf("dw = [%f %f]\n",dw(1),dw(2));

    

    net.b{1} = net.b{1} + alpha*e;

    

    w = w + alpha*dw;

    fprintf("w next = [%f %f], b next = %f\n",w(1),w(2),net.b{1});

    

    net.IW{1,1} = w;

    

    plotpc(net.IW{1,1},net.b{1});

    

    pause(1);

    

    fname = sprintf("%s/temp/PerceptronNOR_%02d.png",pwd,i);

    %saveas(gcf,fname);

    

end;

 

 

 

fprintf("\n----------- Evaluate the Net ---------------\n");

 

net(pList)