You are on page 1of 17

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