Jaringan syaraf tiruan (an Artificial Neural Network (ANN)) adalah algoritma yang digunakan dalam kecerdasan buatan untuk mensimulasikan pemikiran manusia. Jaringan bekerja mirip dengan otak manusia: terdiri dari neuron yang berkomunikasi satu sama lain dan memberikan keluaran yang berharga.
Meskipun hanya sebuah model — dan bahkan tidak mendekati pemikiran manusia — jaringan syaraf tiruan telah digunakan dalam prediksi, klasifikasi, dan sistem pendukung keputusan, serta dalam pengenalan karakter optik dan banyak aplikasi lainnya.
Jaringan saraf tiruan sebagian besar dikembangkan dalam bahasa pemrograman tingkat tinggi seperti C atau C++ atau phyton. Namun Anda juga dapat mengimplementasikan jaringan saraf dalam PHP, yang mungkin merupakan cara paling nyaman untuk menggunakan kecerdasan buatan dalam aplikasi Web.
Pada artikel ini akan menjelaskan cara mengatur salah satu topologi jaringan saraf yang paling umum, persepsi multi-lapisan, dan membuat jaringan saraf pertama Anda di PHP menggunakan kelas jaringan saraf PHP.
Mirip dengan proses berpikir manusia, pada sistim jaringan saraf:
- menerima beberapa input (data Anda)
- menganalisis dan mengolahnya
- memberikan nilai output (yaitu hasil perhitungan)
Maka berdasarkan mekanisme kerja jaringan maka topologi dalam contoh ini (persepsi multi-lapisan) memiliki tiga lapisan:
- Lapisan masukan (input)
- lapisan tersembunyi
- lapisan keluaran (output)
Setiap lapisan memiliki sejumlah neuron, tergantung kebutuhan Anda. Setiap neuron terhubung ke semua neuron di lapisan berikutnya. Neuron memproses tugas yang diberikan dengan menyesuaikan output (yaitu koefisien bobot di antara mereka). Tentu saja sebelum dapat diterapkan pada kasus penggunaan praktis, jaringan saraf harus mempelajari tugas tersebut. Tapi, sebelum semuanya, Anda harus menyiapkan data Anda untuk jaringan
Input Neural Network di PHP — Mempersiapkan Data
Karena jaringan saraf adalah model matematika yang kompleks, Anda tidak dapat mengirim sembarang tipe data ke neuron input. Data harus dinormalisasi sebelum jaringan dapat menggunakannya.
Artinya, data harus diskalakan ke kisaran -1 hingga 1. Sayangnya, tidak ada fungsi normalisasi di PHP, jadi Anda harus melakukannya sendiri, tetapi disini akan memberikan rumusnya:
I = Imin + (Imax-Imin)*(D-Dmin)/(Dmax-Dmin)
Di mana Imin
dan Imax
mewakili rentang jaringan saraf (-1 hingga 1), dan Dmin
dan Dmax
adalah nilai minimum dan maksimum data.
Setelah menormalkan data, Anda harus memilih jumlah input neuron. Misalnya, jika Anda memiliki warna RGB dan ingin menentukan apakah merah atau biru adalah warna dominan, Anda akan memiliki empat neuron input (tiga neuron untuk menyimpan nilai merah, hijau, dan biru, dan yang keempat adalah bias — biasanya sama dengan 1). Berikut adalah kode PHP untuk perhitungan ini:
<?php
require_once("class_neuralnetwork.php");
$n = new NeuralNetwork(4, 4, 1); // the number of neurons in each layer of the network -- 4 input, 4 hidden and 1 output neurons
$n->setVerbose(false); // do not display error messages
//test data
// First array is input data, and the second is the expected output value (1 means blue and 0 means red)
$n->addTestData( array (0, 0, 255, 1), array (1));
$n->addTestData( array (0, 0, 192, 1), array (1));
$n->addTestData( array (208, 0, 49, 1), array (0));
$n->addTestData( array ( 228, 105, 116, 1), array (0));
$n->addTestData( array (128, 80, 255, 1), array (1));
$n->addTestData( array ( 248, 80, 68, 1), array (0));
?>
Hanya ada satu neuron keluaran karena Anda hanya memiliki dua kemungkinan hasil. Untuk masalah yang lebih kompleks, Anda dapat menggunakan lebih dari satu neuron sebagai output jaringan, sehingga memiliki banyak kombinasi 0 dan 1 sebagai output yang memungkinkan.
Melatih Neural Network dalam PHP
Sebelum dapat menyelesaikan masalah, jaringan saraf tiruan harus mempelajari cara menyelesaikannya. Pikirkan jaringan ini sebagai persamaan. Anda telah menambahkan data uji dan keluaran yang diharapkan, dan jaringan harus menyelesaikan persamaan dengan mencari hubungan antara masukan dan keluaran.
Proses ini disebut pelatihan.
Dalam jaringan saraf, koneksi ini adalah bobot neuron. Beberapa algoritma digunakan untuk pelatihan jaringan, tetapi backpropagation paling sering digunakan. Backpropagation sebenarnya berarti propagasi mundur dari kesalahan.
Setelah menginisialisasi bobot acak dalam jaringan, langkah selanjutnya adalah:
- Ulangi data uji
- Hitung keluaran sebenarnya
- Hitung kesalahan (output yang diinginkan – output jaringan saat ini)
- Hitung bobot delta mundur
- Perbarui bobot
Proses berlanjut hingga semua data uji telah diklasifikasikan dengan benar atau algoritme telah mencapai kriteria berhenti.
Biasanya, programmer mencoba untuk mengajar jaringan maksimal tiga kali, sedangkan jumlah putaran pelatihan (zaman) maksimum adalah 1000. Selain itu, setiap algoritme pembelajaran memerlukan fungsi aktivasi. Untuk propagasi balik, fungsi aktivasi adalah tangen hiperbolik (tanh
)
Mari kita lihat cara melatih jaringan saraf di PHP:
<?php
$max = 3;
// train the network in max 1000 epochs, with a max squared error of 0.01
while (!($success=$n->train(1000, 0.01)) && $max-->0) {
// training failed -- re-initialize the network weights
$n->initWeights();
}
//training successful
if ($success) {
$epochs = $n->getEpoch(); // get the number of epochs needed for training
}
?>
Mean squared error (mse) adalah rata-rata kuadrat dari error, yang juga dikenal sebagai standar deviasi. Nilai default mean squared error biasanya adalah 0,01, yang berarti pelatihan berhasil jika mean squared error kurang dari 0,01.
Sebelum melihat contoh kerja jaringan saraf tiruan di PHP, praktik yang baik adalah menyimpan jaringan saraf Anda ke file atau database SQL.
Jika Anda tidak menyimpannya, Anda harus melakukan pelatihan setiap kali seseorang mengeksekusi aplikasi Anda. Beberapa tugas sederhana dipelajari dengan cepat, tetapi pelatihan memakan waktu lebih lama untuk masalah yang lebih kompleks, dan Anda ingin pengguna Anda menunggu sesedikit mungkin. Untungnya, ada fungsi simpan dan muat di kelas PHP dalam contoh ini:
<?php
$n->save('my_network.ini');
?>
Perhatikan bahwa ekstensi file harus *.ini.
Hasil Akhir Kode PHP untuk Jaringan Neural Kita
Mari kita lihat kode PHP dari aplikasi kerja yang menerima nilai merah, hijau, dan biru dan hitung apakah warna dominan biru atau merah:
<?php
require_once("class_neuralnetwork.php");
$r = $_POST['red'];
$g = $_POST['green'];
$b = $_POST['blue'];
$n = new NeuralNetwork(4, 4, 1); //initialize the neural network
$n->setVerbose(false);
$n->load('my_network.ini'); // load the saved weights into the initialized neural network. This way you won't need to train the network each time the application has been executed
$input = array(normalize($r),normalize($g),normalize($b)); //note that you will have to write a normalize function, depending on your needs
$result = $n->calculate($input);
If($result>0.5) {
// the dominant color is blue
}
else {
// the dominant color is red
}
?>
Keterbatasan Jaringan Neural
Keterbatasan utama jaringan saraf adalah bahwa mereka hanya dapat menyelesaikan masalah yang dapat dipisahkan secara linear dan banyak masalah yang tidak dapat dipisahkan secara linear.
Jadi, masalah yang tidak dapat dipisahkan secara linier membutuhkan algoritma kecerdasan buatan lainnya. Namun, jaringan saraf memecahkan cukup banyak masalah yang membutuhkan kecerdasan komputer untuk mendapatkan tempat penting di antara algoritma kecerdasan buatan