Deskripsi singkat
Dengan perkembangan yang cepat dari Internet, A (AI) B (BigData) C (cloud) telah menjadi arah pengembangan inti saat ini. Jika ketiganya sangat digabungkan, AI adalah bagian paling inti dari itu. Jadi, jika setiap orang harus belajar pemrograman di masyarakat masa depan, maka untuk pemrogram, kecerdasan buatan adalah teknologi yang harus mereka kuasai (pengembangan teknologi sangat cepat).
Artikel ini memperkenalkan dan menggunakan Java untuk mengimplementasikan jaringan perceptron paling sederhana, tanpa kusut dengan derivasi formula, yang bertujuan untuk memberi Anda ide -ide untuk mempelajari jaringan saraf dan memiliki pemahaman yang kasar tentang jaringan saraf.
Analisis model jaringan perceptron
Pertama -tama lihat gambar
Jika Anda sedikit tertarik pada jaringan saraf, Anda harus terbiasa dengan gambar ini. Gambar ini adalah diagram struktural neuron
X1 ~ XM mewakili input, W1 ~ WM mewakili berat sinaptik, σ mewakili simpul simpul, fungsi aktivasi mewakili fungsi aktivasi, dan kemudian menghasilkan hasil. Proses spesifiknya adalah
Ketika neuron menerima input, setiap input akan dikalikan dengan berat pada jalur relatifnya. Ketika simpul jumatan tercapai, hasil dari simpul jumatan diatur ke z:
z = x1 * w1 + x2 * w2 + x3 * w3 + ...... + xm * wm
Kemudian lewati Z ke fungsi aktivasi (di sini kita memanggil fungsi aktivasi f) untuk pengenalan pola biner:
Jika f (x)> e, y = 1else y = -1e adalah ambang batas y adalah hasil klasifikasi
Dapat dilihat di sini bahwa jika nilai f (x) lebih besar dari ambang batas, klasifikasi y = 1 diperoleh, dan sebaliknya y = -1
Catatan: Dibandingkan dengan respons yang ditunjukkan oleh stimulasi neuron biologis, jika stimulasi berada dalam kisaran yang dapat diterima, neuron akan menghambat stimulasi (y = -1), dan jika melebihi kisaran, akan bersemangat (y = 1), dan daerah aliran sungai dari kisaran ini adalah ambang batas (e)
belajar
Kami menemukan bahwa jika berat dan ambang batas diperbaiki, maka jaringan saraf ini tidak memiliki arti. Oleh karena itu, kami memperkenalkan konsep pembelajaran dan membiarkan jaringan saraf memodifikasi berat dan ambang batas melalui pembelajaran, sehingga keakuratan pengenalan pola dapat dikoreksi secara dinamis. Ini adalah inti dari pembelajaran mesin.
Jadi bagaimana cara belajar? Sebelum kita menggunakannya, kita perlu memberikan serangkaian data sampel ke jaringan ini (yang diambil di sini untuk belajar dengan mode guru), data sampel termasuk data input x dan hasil identifikasi yang benar y '.
Ketika kami memasukkan data pelatihan x dan mendapatkan pengenalan pola y, jika y! = Y ', berat dan ambang batas jaringan ini akan disesuaikan. Silakan merujuk ke rumus untuk penyesuaian. μ mewakili tingkat pembelajaran (tingkat koreksi), dan pembaruan mewakili kebutuhan untuk diperbaiki:
UPDATE = μ * (yi - y ') update = (f (x) - y') mς wi += update * xii = 1e += update
Ketika hasil klasifikasi Perceptron sama dengan klasifikasi yang benar, perbarui = 0, dan jaringan tidak disesuaikan; Jika tidak sama dengan klasifikasi yang benar, semua bobot (w) dan ambang batas (e) akan disesuaikan
Di atas adalah proses pembelajaran paling sederhana untuk perceptrons yang saya perkenalkan:
Masukkan data -> Ringkas untuk mendapatkan z-> Tunggu melalui fungsi aktivasi untuk menunggu hasil klasifikasi -> hasil klasifikasi tidak cocok dengan hasil yang benar, sesuaikan jaringan
Mari kita terapkan jaringan saraf sederhana ini
Implementasi Kode Java
Apa yang telah saya terapkan di sini adalah belajar mengenali bilangan bulat positif dan negatif melalui jaringan saraf. Pertama, tentukan kelas yang pertama kali mendefinisikan perceptron.
/*** Dibuat oleh Cimzzz pada 12/2/17. **/Kelas Publik Perceptron {/*** Tingkat belajar*/float final privat leadrate; / *** Jumlah Waktu Belajar*/ Private Final Int StudyCount; / *** ambang*/ float private e; / *** Berat* karena hanya satu input yang diperlukan untuk menentukan bilangan bulat positif dan negatif, hanya ada satu bobot di sini, dan beberapa input dapat diatur ke array*/ float pribadi w; / *** Tingkat yang benar untuk setiap pembelajaran*/ private float [] correctrate; /// ** * Konstruktor menginisialisasi tingkat pembelajaran, jumlah waktu belajar, berat, dan ambang diinisialisasi ke 0 * @param laju pembelajaran (kisaran nilai 0 <belajar <1) * @param studi jumlah waktu belajar */ pelajari publik (float relajar, int studi) {this.learnrate = rapat publik; this.studycount = StudyCount; this.e = 0; this.w = 0; this.correctrate = float baru [StudyCount]; } / *** Fungsi pembelajaran, sampel adalah array dua dimensi yang berisi data input dan hasil klasifikasi,* sampel [] [0] mewakili data input* sampel [] [1] mewakili hasil klasifikasi yang benar* @param sampel data pelatihan* / fit public void (int [] [] sampel) {int samplellength = samplels. untuk (int i = 0; i <studycount; i ++) {int errorCount = 0; untuk (int [] sampel: sampel) {float update = belajar * (sampel [1] -predict (sampel [0]))); // Perbarui Berat dan Ambang W += Perbarui * Sampel [0]; E += UPDATE; // Hitung nomor kesalahan jika (perbarui! = 0) errorCount ++; } // Hitung kebenaran pembelajaran ini dengan benar, tarik dengan benar [i] = 1 - errorCount * 1.0F /samplelength; }} / *** SUM Fungsi, Simulasikan Summing Node Operation Input Data* Berat* @param NUM Data Input* @Return Hasil Z* / Private Float Sum (int num) {return num* w + e; } / *** Aktifkan fungsi, menilai dengan menjumlahkan hasil Z dan Threshold e* @param num data input* @Return hasil klasifikasi* / prediksi publik (int num) {return sum (num)> = 0? 1: -1; }/*** Cetak akurasi*/public void printCorRectrate () {for (int i = 0; i <studycount; i ++) system.out.printf ("Hasil pembelajaran pada %d-> %.2f %%/n", i +1, correctrate [i]* 100); }}Kemudian tulis fungsi yang menghasilkan data pelatihan
/*** Hasilkan data pelatihan* @return Data pelatihan*/swasta statis int [] [] genstudydata () {// Di sini kita mengambil bilangan bulat antara -100 dan 100, dan jika lebih besar dari 0, atur ke mode y = 1, jika tidak y = -1 int [] [] data = int baru [201] [2]; untuk (int i = -100, j = 0; i <= 100; i ++, j ++) {data [j] [0] = i; Data [j] [1] = i> = 0? 1: -1; } mengembalikan data; } /*** Hasilkan Data Pelatihan* @Return Data Pelatihan* /Private Static Int [] [] GenStudyData2 () {// Di sini kita mengambil integer antara 1 ~ 250, dan jika lebih besar dari 125, atur ke mode y = 1, jika tidak y = -1 int [] [] data = int int [250] [2]; untuk (int i = 1, j = 0; i <= 250; i ++, j ++) {data [j] [0] = i; Data [j] [1] = i> = 125? 1: -1; } mengembalikan data; }Akhirnya, fungsi utama
public static void main (String [] args) {// Tingkat pembelajaran dan waktu pelatihan di sini dapat disesuaikan secara manual sesuai dengan situasi perceptron perceptron = Perceptron baru (0,4F, 500); perceptron.fit (genstudydata ()); perceptron.printcorrectrate (); System.out.println (Perceptron.predict (-1)); System.out.println (Perceptron.predict (126)); }Anda bisa mengujinya
keterbatasan
Jaringan saraf perceptron ini relatif sederhana dan cocok untuk data yang dibagi secara linier, seperti angka positif dan negatif dalam satu dimensi, dan klasifikasi kuadran koordinat dua dimensi; Data yang tidak dapat diklasifikasikan dengan benar tidak dapat diklasifikasikan, seperti menemukan bilangan prima, dll.
Di atas adalah semua konten artikel ini. Saya berharap ini akan membantu untuk pembelajaran semua orang dan saya harap semua orang akan lebih mendukung wulin.com.