Jaringan saraf untuk anak-anak: jelaskan sesederhana mungkin

Halo semuanya. Bukan rahasia lagi bahwa hampir semua artikel di blog kami diterbitkan untuk meluncurkan kursus ini atau itu. Artikel selanjutnya dapat dijadwalkan untuk peluncuran kursus "Neural Networks in Python", tetapi mengingat kesederhanaan materi, saya tidak ingin mengaitkannya dengan kursus, tetapi hanya mempostingnya sebagai materi bonus, sebagai tutorial kecil untuk yang terkecil. Memprediksi pertanyaan, saya ingin segera mengatakan bahwa artikel ini tidak terkait dengan kursus dan tidak ditulis oleh guru. Jika Anda memiliki keinginan untuk mempelajari lebih lanjut tentang kursus, maka Anda dapat melakukan ini pada halaman yang sesuai .




Halo semuanya! Hari ini saya ingin berbicara tentang bagaimana jaringan saraf diatur, tetapi sangat sederhana sehingga bahkan pemula yang hanya menguasai dasar-dasar Python dapat mengerti.

Apa yang dimaksud dengan jaringan saraf dan kecerdasan buatan secara umum?


Dalam filosofi AI, ada dua jenis kecerdasan buatan - kuat dan lemah. Teori kecerdasan buatan yang kuat menunjukkan bahwa komputer akan dapat memperoleh kemampuan untuk berpikir dan menyadari diri mereka sebagai orang yang terpisah (well, sesuatu seperti apa yang terjadi di Detroit Menjadi Manusia). Teori kecerdasan buatan yang lemah menunjukkan bahwa kecerdasan seperti itu tidak bisa atau sangat sulit untuk dibangun, dan sementara sains mampu menciptakan jaringan saraf yang hanya sebagian mengulangi kerja jaringan saraf makhluk hidup. Tetapi filsafat tidak berlaku untuk sains karena tidak ada yang dapat dibuktikan di sana, jadi kami tidak akan fokus pada hal ini. Jaringan neural yang lemah sekarang menempati posisi dominan dalam Ilmu Data dan banyak digunakan: dalam pengakuan gambar visual, pembelian barang secara cerdas,bahkan sistem OBS kendaraan - jadi mulai mempelajari AI sekarang lebih dari relevan.

Apa itu jaringan saraf?


Jaringan saraf adalah model matematika dari operasi jaringan saraf nyata makhluk hidup. Cukup dengan hanya mentransfer model matematika ke dalam suatu program (dan karena itu, Python sangat banyak digunakan dalam pemrograman jaringan saraf, sehingga nyaman untuk solusi pemrograman untuk masalah matematika. Bahkan, jaringan saraf dapat ditulis dalam hampir semua bahasa pemrograman yang mendukung segala jenis matematika Bahkan di Scratch, yang awalnya dibuat untuk mengajarkan dasar-dasar pemrograman untuk siswa yang lebih muda. Anda bisa lihat di sini ).

Konsep dasar jaringan saraf


Ada banyak algoritma untuk pengoperasian jaringan saraf (dan sekarang sisi matematika dari masalah ini sedang dikembangkan secara aktif). Solusi klasik untuk pemula adalah metode backpropagation, metode perhitungan gradien yang digunakan untuk memperbarui bobot perceptron multilayer. Dalam bentuk yang biasanya dipelajari oleh pemula (dengan fungsi aktivasi sigmoid), jaringan saraf cukup lambat, tetapi relatif akurat.

Program yang akan kita tulis disebut bentangan besar jaringan saraf.

Sebelum melanjutkan ke deskripsinya, mari kita bahas apa yang dilakukan jaringan saraf secara umum.

Apa yang dilakukan jaringan saraf, jika disederhanakan?


Jika kita menyederhanakan konsep jaringan saraf sedikit, maka jaringan saraf yang diajarkan berdasarkan pengajaran dengan guru, setelah pelatihan pada prinsip "stimulus-reaksi", menunjukkan jawaban yang benar, dapat bekerja dengan orang asingdata. Dengan kata lain, jika Anda mengusulkan serangkaian kata tertentu ke jaringan saraf input (misalnya, serangkaian ulasan tentang pencarian film, positif dan negatif, dalam format apa pun, setidaknya txt, setidaknya json, pertanyaannya hanya pada program untuk memproses data ini). Untuk berhasil membuat jaringan saraf, Anda akan membutuhkan dua set data: satu set tes yang dengannya Anda dapat mengevaluasi kinerja jaringan saraf yang dibuat dan satu set pelatihan di mana data diberi label positif / negatif untuk itu (dan di sini masalah pengelompokan data besar muncul karena itu lama dan pekerjaan suram). Setelah melatih jaringan saraf (yang dapat mengambil banyak waktu dan sumber daya komputer, tergantung pada dimensi data, pemrosesan, dan paling sering yang paling penting, algoritma yang digunakan), ia akan dapat mencobauntuk memprediksi dengan akurasi, ulasan positif atau negatif datang ke masukannya. Tetapi jaringan saraf (dan juga orang sungguhan) memiliki persentase kesalahan tertentu. Tugas optimasi adalah membuatnya minimal, tetapi pertanyaan untuk menilai kualitas jaringan saraf kemungkinan tidak akan pernah pergi ke mana pun. Misalnya, mereka memberi Anda foto hot dog dan Anda mengatakan dengan pasti bahwa itu hot dog. Tetapi bagaimana jika foto itu buram? Hitam dan putih? Difilmkan dalam visibilitas yang buruk? Di sini Anda sudah dapat menegaskan dengan hanya tingkat kemungkinan tertentu, bahkan jika Anda telah menyiapkan atau makan banyak hot dog dalam hidup Anda.



Memulai pemrograman jaringan saraf mainan kami


OK mari kita pergi. Tidak akan ada data pengujian dan pelatihan di jaringan saraf mainan kami, jaringan saraf mainan kami akan mencoba menemukan rasio rasio antara data apa pun.

Berhenti. Dan apa gunanya? Hal yang sama ditemukan dalam satu ungkapan matematika sederhana.
Tanpa ragu. Namun, saya sekarang telah mengambil ungkapan ini untuk menunjukkan proses belajar jaringan saraf. Misalkan kita dihadapkan dengan tugas mencari tahu apa faktor konversi antara inci dan sentimeter. Berapa sentimeter yang dibutuhkan satu inci? Untuk orang yang tahu matematika setidaknya kelas lima (atau bahkan lebih awal), tidak sulit untuk mengingat apa koefisien terjemahan 2,54.

Tetapi untuk sekarang, kita akan melupakannya untuk sementara waktu, dan membayangkan bahwa kita perlu membuat algoritma sederhana yang secara universal akan menghitung parameter ini. Namun, tangkapannya juga bahwa jaringan saraf bukan konstanta dengan nilai koefisien siap pakai, jika tidak mereka tidak akan memiliki pelatihan "langsung".

Secara total, kita berada dalam posisi seorang anak yang baru saja duduk di depan satu set kubus dan akan mengambilnya ke tangannya sendiri untuk pertama kalinya dan membangun menara pertama dalam hidupnya. Dia hanya tahu kira-kira bagaimana fisika benda bekerja, dia, sama seperti kita, tahu bahwa ada rasio spesifik tertentu (dalam kasusnya, itu adalah gravitasi). Jadi apa yang akan dilakukan anak?

Dia akan mengambil dan secara acak menaruh dadu. Dengan cara yang sama, kita hanya bisa menebak secara acak koefisien apa yang akan kita miliki (dan jaringan saraf dewasa nyata juga melakukan ini, hanya biasanya dipandu oleh generasi angka dalam distribusi normal).
Secara acak, anggaplah koefisien kopling inci dan sentimeter (mari kita mulai menyebutnya berat , seperti pada jaringan saraf dewasa) akan, misalnya, 2.4. Kemudian kita mendapatkan ekspresi matematika yang paling rumit:

1 * 2.4 = 2.4

Hebat, kami hampir menebak, dan kami punya hasil. Tapi itu tidak benar, dan apa yang normal untuk proses pembelajaran, kami memiliki beberapa kesalahan. Seperti dalam sistem saraf dengan umpan balik, kita perlu merespons kesalahan tersebut. Tetapi pertama-tama Anda harus memahami ukurannya. Seperti yang telah saya katakan, dalam pelatihan jaringan saraf dengan seorang guru, data pertama kali dijalankan pada data mark-up dan baru kemudian dikirim ke klasifikasi untuk data yang serupa, tetapi tidak mark-up. Kami juga tahu apa yang harus kami dapatkan hasil yang benar, karenanya, saya dapat menghitung kesalahan:

t_target = 2.54
t_now = 2.40
e = t_target - t_now
//  ,   0.14

Sekarang kita tahu betapa salahnya. Tetapi apa yang harus dilakukan? Secara alami, jaringan saraf mainan kami harus membaca data serendah mungkin. Dan dalam hal ini, fitur bawah air lain dari jaringan saraf dimanifestasikan - paling sering mereka memiliki beberapa faktor kerugian selama pelatihan, bagian dari Ilmu Data, yang disebut optimasi , terlibat dalam meminimalkan kesalahan .

Tapi sekarang bukan tentang itu. Tanpa ragu, kita perlu mulai mengubah koefisien kopling dengan beberapa langkah, tetapi dengan apa? Jelas, Anda tidak perlu terlalu besar, jika tidak, koefisien kopling kami akan berubah menjadi tidak akurat dan tidak terlalu kecil, jika tidak kita harus melatih jaringan saraf untuk waktu yang agak lama. Tidak ada opsi 100% yang benar untuk menemukan langkah ini, paling sering parameter ini dalam jaringan saraf yang sebenarnya dipilih lebih intuitif daripada berdasarkan beberapa rumus atau algoritma (meskipun ini juga mungkin). Sekarang kita dapat secara acak memilih nilai langkah kita (dalam bahasa jaringan saraf, langkah kita disebut learning_rate), misalnya, nilai 0,05 akan bekerja cukup optimal. Selain itu, Anda harus menyetujui berapa kali lekukan pada tingkat pembelajaran akan terjadi.. Jumlah indentasi ini akan disebut zaman, seperti dalam jaringan saraf dewasa. Sekarang, dengan berbekal semua pengetahuan ini, Anda dapat mencoba menulis program Python kecil yang akan menjalankan program jaringan saraf mainan kami.

import random

#    Python  random,        

inches = 40  #    40    101, 6 
centimetre = 101.6

#  ,        , learning rate  

def kid_neuro(epoch, lr, accur):
    W_coef = random.uniform(0, 2)  #     
    print("    : ", W_coef)
    for i in range(epoch):  #    
        Error = centimetre - (inches * W_coef)
        print("  ", Error)  #      
        if Error > 0:
            W_coef += lr  #    ,    

        if Error < 0:
            W_coef -= lr  #   ,    

        if Error < accur:
            print("  ", W_coef)
            return  #  ,      

epoch = int(input("epoch: "))  #      ""
lr = float(input("enter learning rate: "))  #   
accur = float(input("enter accurancy:  "))  #   ,     ,         

kid_neuro(epoch, lr, accur)  #    -

Saya meninggalkan pembaca untuk mencoba menjalankan jaringan saraf anak ini dengan berbagai parameter sendiri. Ternyata cukup baik pada zaman = 100-, tingkat pembelajaran = 0,01, akurasi = 0,1.

Meskipun tampak tidak berguna dari program ini, kami telah memeriksa dengan Anda karya dan konsep dasar jaringan saraf, yang juga digunakan dalam membangun jaringan saraf besar yang nyata, misalnya, dalam algoritma backprogation.

Secara singkat, konsep-konsep dasar ini:

  • W — . - , . — , ,
  • lr — learning rate, .
  • epoch ,

Sebagai praktik, Anda dapat mencoba menulis jaringan saraf anak Anda sendiri, yang akan menerjemahkan, misalnya, kilometer menjadi mil. Dan dipersenjatai dengan pengetahuan yang diperoleh dalam artikel ini, Anda dapat dengan mudah datang ke sini , misalnya , dan sudah mencoba memulai jaringan saraf yang lebih bermakna.

Beberapa tautan bermanfaat yang bisa Anda kunjungi jika Anda ingin terus belajar tentang jaringan saraf:


All Articles