Riset Group Ilmu Rekayasa & Komputasi Teknik Informatika, Universitas Sebelas Maret MODUL 3 MULTI LAYER PERCEPTRON (MLP) DENGAN ALGORITMA PELATIHAN BACKPROPAGATION
A. Tujuan
1. Menjelaskan perintah dalam Matlab untuk membangun MLP 2. Membangun jaringan syaraf tiruan MLP dengan algoritma pembelajaran Backpropagasi Backpropagasi untuk menyelesaikan suatu kasus
B. Pendahuluan
Untuk membangun multi layer perceptron feedforward dengan algoritam trainningnya backpropagation dalam Matlab 6.1 telah disediakan fungsi-fungsi yang diperlukan. Fungsi tersebut adalah newff. net = newff(PR,[S1 S2 S3............SN1],{TF1 TF2 ........TFN1},BTF,BLF,PF) ........TFN1},BTF,BLF,PF)
Dimana :
PR = matriks berukuran Rx2 yang berisi nilai minimum dan maksimum, dengan R jumlah variable input.
Si = jumlah neuron/unit pada lapisan ke-i, dengan i = 1, 2,3 ....N1;
TFi= funsgi aktivasi yang digunakan pada lapisan ke-i, dengan i =1,2,3.....N1. (defaultnya : tansig).
BTF = fungsi pelatihan jaringan (defaultnya : trainlm)
BLF = fungsi pelatihan pelatihan untuk bobot(defaultnya bobot(defaultnya : learngdm)
PF = fungsi kinerja (defaultnya : mse)
Fungsi aktivasi yang digunakan adalah fungsi yang dapat dideferensiasikan (diturunkan), seperti tansig, logsig atau purelin. Fungsi pelatihan dapat digunakan fungsi-fungsi pelatihan untuk backpropagation, seperti trainlm, trainbfg, traingd . Untuk fungsi kinerja, bisa digunakan fungsi kinerja yang dapat dideferensiasikan seperti mse atau msereg.
WHT 2010
Halaman :
1
Riset Group Ilmu Rekayasa & Komputasi Teknik Informatika, Universitas Sebelas Maret Berdasarkan fungsi newff , kita juga dapat memperoleh beberapa informasi yang diantaranya adalah :
Bobot input layer : Bobot = net.IW{1,1}
Bobot bias input layer: bobotBias = net.b{1,1}
Bobot hidden layer : bobotHidden = net.IW{2,1}
Bobot bias hiddenlayer : biasHidden = net.b{2,1}
Algoritma Pelatihan
Sepertihalnya pada perceptron, jaringan syaraf tiruan MLP ini juga perlu dilakukan pelatihan untuk melakukan pengaturan bobot, sehingga pada akhirnya diperoleh bobot yang terbaik. Selama palatihan, bobot diatur secara iterative dengan meminimalkan fungsi kinerja. Sebagaian besar algoritma pelatihan jaringan feedforward menggunakan gradient dari fungsi kinerja untuk menentukan bagaimana mengatur bobot
dalam
rangka
meminimalkan
kinerja.
Gradien
ini
ditentukan
dengan
menggunakan suatu teknik yang disebut dengan nama backpropagation. Dalam Matlab ada 2 cara untuk mengimplementasikan algoritma gradient descent yaitu : 1. Incremental Mode
Pada cara ini, penghitungan gradient dan perbaikan nilai bobot-bobot dilakukan pada setiap pengoperasian input data. Untuk menggunakan pelatihan backpropagation dengan incremental mode, diguankan fungsi adapt. [net, y, e] = adapt(net,p,t)
Dimana :
WHT 2010
net : jaringan syaraf tiruan yang telah beradaptasi
Halaman :
2
Riset Group Ilmu Rekayasa & Komputasi Teknik Informatika, Universitas Sebelas Maret
y : Output jaringan syaraf tiruan
e : Error pelatihan
p : input jaringan (data-data yang diadaptasikan)
t : target jaringan syaraf
Dalam menggunakan mode ini ada beberapa hal yang harus dilakukan konfigurasi yaitu : a. Fungsi pembelajaran yang digunakan. Default fungsi yang digunakan jaringan feedforward adalah adaptwb. Fungsi ini mengijinkan setiap bobot (baik input, bias dan layer) untuk melakukan pembelajaran sesuai dengan fungsi pembelajarannya sendiri-sendiri. Net.adaptFcn =’adaptwb’
b. Fungsi pembelajaran untuk masing-masing bobot (input, bias dan layer) net.inputWeights{i,j}.learnFcn= nama_fungsi_pembelajaran_w_input net.layerWeights{i,j}.learnFcn= nama_fungsi_pembelajaran_w_layer net.biases{i,j}.learnFcn= nama_fungsi_pembelajaran_w_bias
Fungsi pembelajaran bobot-bobot yang digunakan adalah : a. Gradient Descent (learngd) Fungsi ini menggunakan algoritma dasar gradient descent (ingat kembali algoritma backpropagasi). Parameter yang berhubungan dengan learngd, yaitu learning rate. Semakin besar learning rate akan berimplikasi pada semakin besarnya langkah pembelajaran. Jika learning rate di set terlalu besar membuat algoritma jadi tidak stabil. Instruksi yang digunakan untuk mengubah learning rate dari jairngan net adalah : net.inputWeights{i,j}.learnParam.lr = learning_rate_input net.layerWeights{i,j}.learnParam.lr = learning_rate_layer net.biases{i,j}.learnParam.lr = learning_rate_bias
Parameter lain yang perlu diset adalah jumlah maksimum iterasi (epoh)
WHT 2010
Halaman :
3
Riset Group Ilmu Rekayasa & Komputasi Teknik Informatika, Universitas Sebelas Maret net.adaptParam.passes=maksimum_epoh
b. Gradien descent dengan momentum (learngdm) Fungsi ini tidak hanya merespon gradient local saja, namun juga mempertimbangkan kecenderungan yang baru saja terjadi pada permukaan error. Besarnya perubahan bobbot ini dipengaruhi oleh suatu konstanta (momentum), mc. Dimana nilai mc terletak antar 0-1. Dalam penggunaan learngdm, selain setting learning rate juga disertai dengan setting nilai momentum : net.inputWeights{i,j}.learnParam.mc = momentum_input net.layerWeights{i,j}.learnParam.mc = momentum_layer net.biases{i,j}.learnParam.mc = momentum_bias
2. Batch Mode
Pada batch mode, penghitungan gradient dan perbaikan nilai bobot-bobot dilakukan setelah pengoperasian semua input data. Untuk menggunakan pelatihan backpropagation dengan batch mode digunakan fungsi train. [net, tr] = train(net,p,t,Pi,Ai)
Dengan : Net
: jaringan syaraf tiruan
Tr
: informasi pelatihan (epoh dan fungsi kinerja)
P
: matriks data input
T
: matriks data target
Pi
: kondisi delay awal input (default : 0)
Ai
: Kondisi delay awal layer (default : 0)
Fungsi ini akan menggunakan objek jaringan, kumpulan data input dan target sebagai input pelatihan yang akan menghasilkan objek jaringan terlatih. Fungsi pembelajaran untuk algirtma gradient descen ini diantaranya : a. Gradient descent (traingd)
WHT 2010
Halaman :
4
Riset Group Ilmu Rekayasa & Komputasi Teknik Informatika, Universitas Sebelas Maret Fungsi ini sama halnya dengan fungsi learngd. Parameter yang perlu diset dalam model pembelajaran ini adalah fungsi pelatihan diset menjadi traingd. Tidak seperti pada model sebelumnya yang setiap bobot memiliki fungsi pelatihan sendiri-sendiri, pada model ini hanya menggunakan satu funsgi pelatihan. Ada 7 para meter yang perlu diset yaitu : Maksimum epoh net.trainParam.epochs=maks_epoh (default maksimum 10)
Kinerja tujuan Kinerja tujuan adalah target nilai fungsi kinerja. Iterasi akan berhenti jika nilai fungsi kinerja kurang dari atau sama dengan kinerja tujuan. net.trainParam.goal = target_error (defaultnya : 0)
Learning rate net.trainParam.lr = learning_rate (defaultnya : 0.01)
Maksimum kegagalan net.trainParam.max_fail=maksimum_kegagalan (defaultnya :5)
Gardient minimum Gradient minimum adalah akar dari jumlah kuadrat semua gradient(input, layer, bias) terkecil yang diperbolehkan. net.trainParam.min_grad=minimum_gradient (defaultnya:10
-10
)
Jumlah epoh yang akan ditunjukkan kemajuannya Menunjukkan berapa jumlah epoh berselang yang akan ditunjukkan kemajuannya. net.trainParam.show = epoh_yang_dilihatkan (defaulnyta : 25)
Waktu maskimum untuk pelatihan Menunjukkan waktu maksimum yang diijinkan untuk melakukan pelatihan.
WHT 2010
Halaman :
5
Riset Group Ilmu Rekayasa & Komputasi Teknik Informatika, Universitas Sebelas Maret net.trainParam.time = maskimum_time (defaultnya : inf)
b. Gradient descent dengan momentum(traingdm) Fungsi ini sama halnya dengan learngdm, yang dikerjakan dalam incremental mode. net.trainParam.mc = momentum
C. Praktikum Kasus 1 : (file : kasus1.m) clear; clc; p =[1 2 3 4 5 6 7 8 9 10]; t=[5 6 7 8 9 11 12 13 14 15]; net = newff(minmax(p),[3 1],{'logsig','purelin'}); net.trainParam.epochs=10; net = train(net,p,t); y = sim(net,p); %Menampilkan perbandingan input dengan output plot(p,t,'bo',p,y,'r*'); title('Perbandingan antara target dengan output jaringan'); xlabel('input'); ylabel('Target'); grid;
Kasus 2 : (Penggunaan Increment Mode dengan Fungsi pembelajaran ‘learngd’) File : kasus2.m clear; clc;
WHT 2010
Halaman :
6
Riset Group Ilmu Rekayasa & Komputasi Teknik Informatika, Universitas Sebelas Maret %Pola inputan p=[0 1 2 1 10 12 -5 -8 -10 -15; 0 1 -1 6 3 -1 -2 2 -5 1] t=[0 0 1 1 2 2 -1 -1 -2 -2]; %Membangun jaringan MLP dengan backpropgation net = newff(minmax(p),[5,1],{'tansig','purelin'});
%menampilkan bobot masing-masing layer wawal_input = net.IW{1,1} wawal_bias_input = net.b{1,1} wawal_layer = net.LW{2,1} wawal_bias_layer=net.b{2,1}
%konfigurasi fungsi pelatihan jaringan net.adaptFcn='adaptwb';
%Konfigursai masing-masing bobot input, layer dan bias net.inputWeights{1,1}.learnFcn ='learngd'; net.layerWeights{2,1}.learnFcn ='learngd'; net.biases{1,1}.learnFcn ='learngd'; net.biases{2,1}.learnFcn ='learngd';
%Konfigurasi learning ratenya net.inputWeights{1,1}.learnParam.lr = 0.02; net.layerWeights{2,1}.learnParam.lr = 0.02; net.biases{1,1}.learnParam.lr = 0.02; net.biases{2,1}.learnParam.lr = 0.02;
%Konfigurasi maksimum epoh (iterasinya)
WHT 2010
Halaman :
7
Riset Group Ilmu Rekayasa & Komputasi Teknik Informatika, Universitas Sebelas Maret net.adaptParam.passes=50;
%ubah pola input dan target ke bentuk cell P = num2cell(p,1); T = num2cell(t,1);
%Melakukan pelatihan [net, y, e] = adapt(net,p,t);
%bobot setelah dilakukan trainning wakhir_input = net.IW{1,1} wakhir_bias_input = net.b{1,1} wakhir_layer = net.LW{2,1} wakhir_bias_layer=net.b{2,1}
%melakukan simulasi a = sim(net,p) %Grafik perbandingan input dengan target subplot(211) plot(p(1,:),t,'bo',p(1,:),a,'r*'); title('Perbandingan antara target dengan output jaringan'); xlabel('input pertama'); ylabel('Target'); grid; subplot(212) plot(p(2,:),t,'bo',p(2,:),a,'r*'); title('Perbandingan antara target dengan output jaringan'); xlabel('input kedua');
WHT 2010
Halaman :
8
Riset Group Ilmu Rekayasa & Komputasi Teknik Informatika, Universitas Sebelas Maret ylabel('Target'); grid; Kasus 3 : (Penggunaan Increment Mode dengan Fungsi pembelajaran ‘learngdm’) File : kasus3.m clear; clc; %Pola inputan p=[0 1 2 1 10 12 -5 -8 -10 -15; 0 1 -1 6 3 -1 -2 2 -5 1] t=[0 0 1 1 2 2 -1 -1 -2 -2];
%Membangun jaringan MLP dengan backpropgation net = newff(minmax(p),[5,1],{'tansig','purelin'});
%menampilkan bobot masing-masing layer wawal_input = net.IW{1,1} wawal_bias_input = net.b{1,1} wawal_layer = net.LW{2,1} wawal_bias_layer=net.b{2,1}
%konfigurasi fungsi pelatihan jaringan net.adaptFcn='adaptwb';
%Konfigursai masing-masing bobot input, layer dan bias net.inputWeights{1,1}.learnFcn ='learngdm'; net.layerWeights{2,1}.learnFcn ='learngdm'; net.biases{1,1}.learnFcn ='learngdm'; net.biases{2,1}.learnFcn ='learngdm';
WHT 2010
Halaman :
9
Riset Group Ilmu Rekayasa & Komputasi Teknik Informatika, Universitas Sebelas Maret %Konfigurasi learning ratenya net.inputWeights{1,1}.learnParam.lr = 0.02; net.layerWeights{2,1}.learnParam.lr = 0.02; net.biases{1,1}.learnParam.lr = 0.02; net.biases{2,1}.learnParam.lr = 0.02;
%konfigurasi momentumnya net.inputWeights{1,1}.learnParam.mc = 0.3; net.layerWeights{2,1}.learnParam.mc = 0.3; net.biases{1,1}.learnParam.mc = 0.3; net.biases{2,1}.learnParam.mc = 0.3;
%Konfigurasi maksimum epoh (iterasinya) net.adaptParam.passes=50;
%ubah pola input dan target ke bentuk cell P = num2cell(p,1); T = num2cell(t,1);
%Melakukan pelatihan [net, y, e] = adapt(net,p,t);
%bobot setelah dilakukan trainning wakhir_input = net.IW{1,1} wakhir_bias_input = net.b{1,1} wakhir_layer = net.LW{2,1} wakhir_bias_layer=net.b{2,1}
WHT 2010
Halaman : 10
Riset Group Ilmu Rekayasa & Komputasi Teknik Informatika, Universitas Sebelas Maret %melakukan simulasi a = sim(net,p) %Grafik perbandingan input dengan target subplot(211) plot(p(1,:),t,'bo',p(1,:),a,'r*'); title('Perbandingan antara target dengan output jaringan'); xlabel('input pertama'); ylabel('Target'); grid; subplot(212) plot(p(2,:),t,'bo',p(2,:),a,'r*'); title('Perbandingan antara target dengan output jaringan'); xlabel('input kedua'); ylabel('Target'); grid;
Kasus 4 : (Penggunaan Batch Mode dengan ‘traingd’) File : kasus4.m clear; clc; %Pola inputan p=[0 1 2 1 10 12 -5 -8 -10 -15; 0 1 -1 6 3 -1 -2 2 -5 1] t=[0 0 1 1 2 2 -1 -1 -2 -2];
%Membangun jaringan MLP dengan backpropgation net = newff(minmax(p),[5,1],{'tansig','purelin'},'traingd');
%menampilkan bobot masing-masing layer
WHT 2010
Halaman : 11
Riset Group Ilmu Rekayasa & Komputasi Teknik Informatika, Universitas Sebelas Maret wawal_input = net.IW{1,1} wawal_bias_input = net.b{1,1} wawal_layer = net.LW{2,1} wawal_bias_layer=net.b{2,1}
%set max epoh, goal, learning rate, show step net.trainParam.epochs=50; net.trainParam.goal=1e-3; net.trainParam.lr=0.1; net.trainParam.show=10;
%melakukan pembelajaran net = train(net,p,t);
%bobot setelah dilakukan trainning wakhir_input = net.IW{1,1} wakhir_bias_input = net.b{1,1} wakhir_layer = net.LW{2,1} wakhir_bias_layer=net.b{2,1}
%melakukan simulasi a = sim(net,p) %Grafik perbandingan input dengan target pause; subplot(211) plot(p(1,:),t,'bo',p(1,:),a,'r*'); title('Perbandingan antara target dengan output jaringan'); xlabel('input pertama');
WHT 2010
Halaman : 12
Riset Group Ilmu Rekayasa & Komputasi Teknik Informatika, Universitas Sebelas Maret ylabel('Target'); grid; subplot(212) plot(p(2,:),t,'bo',p(2,:),a,'r*'); title('Perbandingan antara target dengan output jaringan'); xlabel('input kedua'); ylabel('Target'); grid;
Kasus 5 : (Penggunaan Batch Mode dengan ‘traingdm’) File : kasus5.m clear; clc; %Pola inputan p=[0 1 2 1 10 12 -5 -8 -10 -15; 0 1 -1 6 3 -1 -2 2 -5 1] t=[0 0 1 1 2 2 -1 -1 -2 -2];
%Membangun jaringan MLP dengan backpropgation net = newff(minmax(p),[5,1],{'tansig','purelin'},'traingd');
%menampilkan bobot masing-masing layer wawal_input = net.IW{1,1} wawal_bias_input = net.b{1,1} wawal_layer = net.LW{2,1} wawal_bias_layer=net.b{2,1}
%set max epoh, goal, learning rate, show step net.trainParam.epochs=50;
WHT 2010
Halaman : 13
Riset Group Ilmu Rekayasa & Komputasi Teknik Informatika, Universitas Sebelas Maret net.trainParam.goal=1e-3; net.trainParam.lr=0.1; net.trainParam.show=10; net.trainParam.mc=0.3;
%melakukan pembelajaran net = train(net,p,t); %bobot setelah dilakukan trainning wakhir_input = net.IW{1,1} wakhir_bias_input = net.b{1,1} wakhir_layer = net.LW{2,1} wakhir_bias_layer=net.b{2,1}
%melakukan simulasi a = sim(net,p) %Grafik perbandingan input dengan target pause; subplot(211) plot(p(1,:),t,'bo',p(1,:),a,'r*'); title('Perbandingan antara target dengan output jaringan'); xlabel('input pertama'); ylabel('Target'); grid; subplot(212) plot(p(2,:),t,'bo',p(2,:),a,'r*'); title('Perbandingan antara target dengan output jaringan'); xlabel('input kedua'); ylabel('Target');
WHT 2010
Halaman : 14
Riset Group Ilmu Rekayasa & Komputasi Teknik Informatika, Universitas Sebelas Maret grid; D. Latihan
Toko swalayan ingin melakukan suatu peramalan ( forechasting) penjualan suatu produk Mie Instan “Super Indomie Solone ”. Penjualan pada hari ke Xi ditentukan oleh
penjualan pada hari yang sama, 1 minggu, 2 minggu, 3 minggu dan 4 minggu sebelumnya.
dipengaruhi oleh
Untuk proses ramalan tersebut
toko swalayan mempunyai data sebagai berikut : No
Hari
Tgl
P
No
Hari
Tgl
P
No
Hari
Tgl
P
No
Hari
Tgl
P
1
S
1
10
15
S
15
10
29
S
29
9
43
S
13
10
2
S
2
8
16
S
16
11
30
S
30
10
44
S
14
12
3
R
3
12
17
R
17
12
31
R
1
12
45
R
15
12
4
K
4
10
18
K
18
11
32
K
2
11
46
K
16
11
5
J
5
12
19
J
19
12
33
J
3
12
47
J
17
12
6
S
6
30
20
S
20
24
34
S
4
31
48
S
18
23
7
M
7
35
21
M
21
26
35
M
5
36
49
M
19
25
8
S
8
9
22
S
22
9
36
S
6
11
50
S
20
10
9
S
9
10
23
S
23
9
37
S
7
13
51
S
21
7
10
R
10
11
24
R
24
12
38
R
8
12
52
R
22
15
11
K
11
10
25
K
25
13
39
K
9
10
53
K
23
13
12
J
12
12
26
J
26
12
40
J
10
9
54
J
24
14
13
S
13
23
27
S
27
21
41
S
11
24
55
S
25
23
14
M
14
26
28
M
28
26
42
M
12
26
56
M
26
27
E. Referensi
1. Kusumadewi, Sri. 2004. Membangun Jaringan Syaraf Tiruan Menggunakan Matlab dan Excel Link . Graha Ilmu. Yogayakarta.
WHT 2010
Halaman : 15