You are on page 1of 19

Institute of Pure and Applied

Sciences

IMPLEMENTATION OF EXTENDED DELTA RULE


USING ANDROID PLATFORM

BURAK ECE

ARTIFICIAL NEURAL NETWORK PROJECT REPORT


Electric and Electronic Engineering

PROJECT ADVISOR
Asst.Prof.Dr. Hasan Hseyin elik
ok Katmanl A Modelinin Yaps

Girdi Katman: D dnyadan gelen girdileri alarak ara katmana gnderir. Bu


katmanda bilgi ileme olmaz. Gelen her bilgi geldii gibi bir sonraki katmana gider.
Her proses elemann sadece bir tane girdisi ve bir tane kts vardr. Yani, girdi
katmanndaki her proses eleman bir sonraki katmanda bulunan proses elemanlarnn
hepsine balanr.

Ara Katman: Ara katmanlar girdi katmanndan gelen bilgileri ileyerek bir sonraki
katmana gnderir. ok katmanl bir ada birden fazla ara katman ve her katmanda
birden fazla proses eleman bulunabilir.

k Katman: Ara katmandan gelen bilgileri ileyerek aa girdi katmanndan verilen


girdilere karlk an rettii klar belirleyerek d dnyaya gnderir.

Bir kt katmannda birden fazla proses eleman olabilir. Her proses eleman bir
nceki katmanda bulunan btn proses elemanlarna baldr. Her proses
elemannn bir kts vardr.

ok katmanl a retmenli renme stratejisini kullanr. Aa, hem rnekler hem


de rneklerden elde edilmesi gereken ktlar verilmektedir.

Sistem, kendisine gsterilen rneklerden genellemeler yaparak problem uzayn


temsil eden bir zm uzay retmektedir.

Daha sonra gsterilen benzer rnekler iin bu zm uzay sonular ve zmler


retebilmektedir.

ok Katmanl An renme Kural


ok katmanl an renme kural en kk kareler yntemine dayal Delta renme
Kuralnn genelletirilmi halidir. Bu yzden Genelletirilmi Delta Kural olarak da
isimlendirilmektedir.

An renebilmesi iin eitim seti ad verilen ve rneklerden oluan bir sete ihtiya
vardr. Bu set iinde her rnek iin an hem girdiler hem de o girdiler iin an
retmesi gereken ktlar belirlenmitir.

Genelletirilmi Delta Kural iki aamadan oluur:


leri doru hesaplama(Feed Forward)
Geri doru hesaplama (Back Propogation)

I) leri Doru Hesaplama

Bu safhada bilgi ileme eitim setindeki bir rnein Girdi Katmanndan aa


gsterilmesi ile balar. Gelen girdiler hi bir deiiklik olmadan ara katmana
gnderilir.

Girdi katmanndaki k. Proses elemannn kts u ekilde belirlenir:

Ara katmandaki her proses eleman girdi katmanndaki btn proses elemanlarndan
gelen bilgileri balant arlklarnn (A1,A2,....) etkisi ile alr. nce ara katmandaki
proses elemanlarna gelen net girdi
u forml kullanlarak hesaplanr:
Burada k. girdi elemann j. ara katman elemanna balayan balantnn arlk
deerini gstermektedir. j. ara katman elemannn kts ise bu net girdinin aktivasyon
fonksiyonundan geirilmesiyle hesaplanr.

Sigmoid fonksiyonu kullanlmas halinde kt:

Burada j , ara katmanda bulunan j. elemana balanan eik deer elemannn


arln gstermektedir. Bu eik deer nitesinin kts sabit olup 1e eittir. Eitim
srasnda a bu deeri kendisi belirlemektedir.

Ara katmann btn proses elemanlar ve kt katmannn proses elemanlarnn


ktlar ayn ekilde kendilerine gelen NET girdinin hesaplanmas ve sigmoid
fonksiyonundan geirilmesi sonucu belirlenirler.

kt katmanndan kan deerler bulununca an ileri doru hesaplama ilemi


tamamlanm olur.

II) Geriye Doru Hesaplama

Aa sunulan girdi iin an rettii kt an beklenen ktlar ile karlatrlr. Bunlarn


arasndaki fark hata olarak kabul edilir. Ama bu hatann drlmesidir.

Bu hata, an arlk deerlerine datlarak bir sonraki iterasyonda hatann azaltlmas


salanr.

kt katmanndaki m. proses eleman iin oluan hata Em ;


Yukardaki hata, bir proses eleman iin oluan hatadr. kt katman iin oluan
toplam hatay (TH) bulmak iin btn hatalarn toplanmas gerekir.

Toplam hatay en azlamak iin bu hatann kendisine neden olan proses elemanlarna
datlmas gerekmektedir.

An arlklarn deitirmek iin 2 durum sz konusudur:

Ara katman ile kt katman arasndaki arlklarn deitirilmesi


Ara katmanlar aras veya ara katman girdi katman arasndaki arlklarn
deitirilmesi

Ara Katman ile kt Katman Arasndaki Arlklarn


Deitirilmesi

Ara katmandaki j. Proses eleman kt katmanndaki m. Proses elemanna balayan


balantnn arlndaki deiim miktarna Aa denirse; herhangi bir t zamannda
arln deiim miktar yle hesaplanr:

Burada renme katsaysn, momentum katsaysn gstermektedir.


Momentum katsays an renmesi esnasnda yerel bir optimum noktaya taklp
kalmamas iin arlk deiim deerinin belirli bir oranda bir sonraki deiime
eklenmesini salar.

Yine yukardaki forml dikkate alndnda m ise m. kt nitesinin hatasn


gstermektedir.

f(NET) aktivasyon fonksiyonunun trevidir. Sigmoid fonksiyonun kullanlmas


durumunda

Deiim miktar hesaplandktan sonra arlklarn t.iterasyondaki yeni deerleri:

Benzer ekilde eik deer nitesinin de arlklarn deitirmek gerekmektedir. kt


katmannda bulunan proses elemanlarnn eik deer arlklar ile gsterilirse; bu
nitenin kts sabit ve 1 olmas nedeni ile deiim miktar:

olacaktr. Eik deerin t. terasyonundaki arlnn yeni deeri ise ;

eklinde hesaplanacaktr.

Ara Katmanlar Aras veya Ara Katman Girdi Katman Arasndaki


Arlklarn Deitirilmesi
Ara katman ile kt katman arasndaki arlklarn deiiminde her arlk iin sadece
kt katmanndaki bir proses elemannn hatas dikkate alnmtr. Oysaki bu hatalarn
olumasnda girdi katman ve ara katman arasndaki arlklarn pay vardr.

Girdi katman ile ara katman arasndaki arlklarn deiimi Ai ile gsterilirse deiim
miktar:

Yine buradaki hata terimi a yle hesaplanacaktr:

Aktivasyon fonksiyonu olarak sigmoid fonksiyonun kullanlmas durumunda;

Arlklarn yeni deerleri;

Benzer ekilde eik deer nitesinin de arlklarn deitirmek gerekmektedir. Ara


katman eik deer arlklar a ile gsterilirse deiim miktar;

Arlklarn yeni deerleri ise t. iterasyonda yle hesaplanacaktr.

Bylece an arlklarnn hepsi deitirilmi olacaktr. Bir iterasyon hem ileri hem de
geriye doru hesaplamalar yaplarak tamamlanm olacaktr.

ok Katmanl An alma ekli


ANDROID UYGULAMA LE XOR PROBLEMNN ZM :
UYGULAMA KODLARI

public class MainActivity extends AppCompatActivity {

TextView tv,tv2;
EditText et,et2,et3;
Button startbutton;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

tv = (TextView) findViewById(R.id.text1);
tv2 = (TextView) findViewById(R.id.text2);
et = (EditText) findViewById(R.id.editText2);
et2 = (EditText) findViewById(R.id.editText3);
et3 = (EditText) findViewById(R.id.editText4);
startbutton = (Button) findViewById(R.id.startbutton);

startbutton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {

double Error = Double.parseDouble(et.getText().toString());


double lamda = Double.parseDouble(et2.getText().toString());
double alpha = Double.parseDouble(et3.getText().toString());

DeltaRule d = new DeltaRule(Error,lamda,alpha);

//XOR boolean function


Example[] examples = new Example[]{
new Example(0, 0, 0),
new Example(0, 1, 1),
new Example(1, 0, 1),
new Example(1, 1, 0)
};

StringBuilder stringBuilder = new StringBuilder();


StringBuilder stringBuilder2 = new StringBuilder();

String status = d.trainWithDelta(examples);


int[] target = {0,1,1,0};
stringBuilder2.append("Last Iteration = " + d.i +"\n");
for (int i=0;i<4;i++){
stringBuilder2.append("y = "+d.output[i]+", t = "+target[i]+", E =
"+d.err[i]+"\n");
}

stringBuilder.append(status);

String finalString = stringBuilder.toString();


tv2.setText(stringBuilder2.toString());
tv.setText(finalString);
}
});
}
}
public class DeltaRule {
//Girdi katman ile ara katman arasndaki agrlklar
double Ai11,Ai12,Ai21,Ai22 ;
//kt katman ile ara katman arasndaki agrlklar
double Aa11, Aa12;
//Eik deger agrlklar
double Ba11,Ba12;
double Bc11;

//grenme katsays ve momentum katsays


double lamda;
double alpha;
double treshold;

double net1,net2;

double dAa11,dAa12,dBc11;
double dAi11,dAi12,dAi21,dAi22;
double dBa11,dBa12;
double E,Error;
double[] output;
double[] err;
int i;

DeltaRule(double Error,double lamda,double alpha){


this.Error = Error;
//Random values
this.lamda= lamda;
this.alpha = alpha;
Ai11 = 0.129952;
Ai12 = 0.570345;
Ai21 = -0.923123;
Ai22 = 0.328932;

dAi11 = 0;
dAi12 = 0;
dAi21 = 0;
dAi22 = 0;

Aa11 = 0.164732;
Aa12 = 0.752621;

dAa11 = 0;
dAa12 = 0;

Ba11 = 0.341332;
Ba12 = -0.115223;
Bc11 = -0.993423;

dBa11 = 0;
dBa12 = 0;
dBc11 = 0;

treshold = 1;

public void computeHiddenLayerNet(Example example){


net1 = example.x1 * Ai11 + example.x2*Ai21 + treshold*Ba11 ;
net2 = example.x1 * Ai12 + example.x2*Ai22 + treshold*Ba12;
}

public String trainWithDelta(Example[] examples){


StringBuilder stringBuilder = new StringBuilder();
for(i=0;i<10000;++i){
stringBuilder.append("Iteration #"+i+"\n");

output = new double[4];


err = new double[4];
int j = 0;
for(Example ex:examples){
computeHiddenLayerNet(ex);
double t = ex.o;
double net,y,c1,c2;
c1 = actFunc(net1);
c2 = actFunc(net2);
net = treshold*Bc11 + c1 * Aa11 + c2 * Aa12;
y = actFunc(net);

E = t - y;

output[j] = y;
err[j] = E;
j++;

stringBuilder.append("y = "+y+", t = "+t+" , E = "+E+"\n");

//kt katman ile ara katman arasndaki agrlklar degisim miktar


ve yeni arlk deerleri hesab

double sigma1,sigma1a,sigma2a;

sigma1 = y*(1-y)*E;
dAa11 = lamda*sigma1*c1+alpha*dAa11;
dAa12 = lamda*sigma1*c2+alpha*dAa12;
dBc11 = lamda*sigma1+alpha*dBc11;

Aa11 = dAa11 + Aa11;


Aa12 = dAa12 + Aa12;
Bc11 = dBc11 + Bc11;

//girdi katman ile ara katman arasndaki arlk deiim miktar ve


yeni arlk deerleri hesab

sigma1a = c1*(1-c1)*sigma1*Aa11;
sigma2a = c2*(1-c2)*sigma1*Aa12;

dAi11 = lamda*sigma1a*ex.x1+alpha*dAi11;
dAi12 = lamda*sigma1a*ex.x1+alpha*dAi12;

dAi21 = lamda*sigma1a*ex.x2+alpha*dAi21;
dAi22 = lamda*sigma1a*ex.x2+alpha*dAi22;

dBa11 = lamda*treshold*sigma1a;
dBa12 = lamda*treshold*sigma2a;

Ai11 = Ai11 + dAi11;


Ai12 = Ai12 + dAi12;
Ai21 = Ai21 + dAi21;
Ai22 = Ai22 + dAi22;

Ba11 = Ba11 + dBa11;


Ba12 = Ba12 + dBa12;
}

if(Math.abs(E) <Error){
break;
}

stringBuilder.append("\n");
}
String finalString = stringBuilder.toString();
return finalString;
}

public double actFunc(double h){


return 1/(1+Math.exp(-h));
}
}

class Example{
int x1, x2;
double o;
Example(int x1, int x2, double o){
this.x1 = x1;
this.x2 = x2;
this.o = o;
}
}

You might also like